| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py |
| ; RUN: llc -mtriple=riscv32 -verify-machineinstrs < %s \ |
| ; RUN: | FileCheck -check-prefix=RV32I %s |
| ; RUN: llc -mtriple=riscv64 -verify-machineinstrs < %s \ |
| ; RUN: | FileCheck -check-prefix=RV64I %s |
| ; RUN: llc -mtriple=riscv32 -mattr=+zicbop -verify-machineinstrs < %s \ |
| ; RUN: | FileCheck -check-prefix=RV32ZICBOP %s |
| ; RUN: llc -mtriple=riscv64 -mattr=+zicbop -verify-machineinstrs < %s \ |
| ; RUN: | FileCheck -check-prefix=RV64ZICBOP %s |
| ; RUN: llc -mtriple=riscv64 -mattr=+zicbop,+zihintntl -verify-machineinstrs < %s \ |
| ; RUN: | FileCheck -check-prefix=RV64ZICBOPZIHINTNTL %s |
| |
| declare void @llvm.prefetch(ptr, i32, i32, i32) |
| |
| define void @test_prefetch_read_locality_0(ptr %a) nounwind { |
| ; RV32I-LABEL: test_prefetch_read_locality_0: |
| ; RV32I: # %bb.0: |
| ; RV32I-NEXT: ret |
| ; |
| ; RV64I-LABEL: test_prefetch_read_locality_0: |
| ; RV64I: # %bb.0: |
| ; RV64I-NEXT: ret |
| ; |
| ; RV32ZICBOP-LABEL: test_prefetch_read_locality_0: |
| ; RV32ZICBOP: # %bb.0: |
| ; RV32ZICBOP-NEXT: prefetch.r 0(a0) |
| ; RV32ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOP-LABEL: test_prefetch_read_locality_0: |
| ; RV64ZICBOP: # %bb.0: |
| ; RV64ZICBOP-NEXT: prefetch.r 0(a0) |
| ; RV64ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOPZIHINTNTL-LABEL: test_prefetch_read_locality_0: |
| ; RV64ZICBOPZIHINTNTL: # %bb.0: |
| ; RV64ZICBOPZIHINTNTL-NEXT: ntl.all |
| ; RV64ZICBOPZIHINTNTL-NEXT: prefetch.r 0(a0) |
| ; RV64ZICBOPZIHINTNTL-NEXT: ret |
| call void @llvm.prefetch(ptr %a, i32 0, i32 0, i32 1) |
| ret void |
| } |
| |
| define void @test_prefetch_write_locality_0(ptr %a) nounwind { |
| ; RV32I-LABEL: test_prefetch_write_locality_0: |
| ; RV32I: # %bb.0: |
| ; RV32I-NEXT: ret |
| ; |
| ; RV64I-LABEL: test_prefetch_write_locality_0: |
| ; RV64I: # %bb.0: |
| ; RV64I-NEXT: ret |
| ; |
| ; RV32ZICBOP-LABEL: test_prefetch_write_locality_0: |
| ; RV32ZICBOP: # %bb.0: |
| ; RV32ZICBOP-NEXT: prefetch.w 0(a0) |
| ; RV32ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOP-LABEL: test_prefetch_write_locality_0: |
| ; RV64ZICBOP: # %bb.0: |
| ; RV64ZICBOP-NEXT: prefetch.w 0(a0) |
| ; RV64ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOPZIHINTNTL-LABEL: test_prefetch_write_locality_0: |
| ; RV64ZICBOPZIHINTNTL: # %bb.0: |
| ; RV64ZICBOPZIHINTNTL-NEXT: ntl.all |
| ; RV64ZICBOPZIHINTNTL-NEXT: prefetch.w 0(a0) |
| ; RV64ZICBOPZIHINTNTL-NEXT: ret |
| call void @llvm.prefetch(ptr %a, i32 1, i32 0, i32 1) |
| ret void |
| } |
| |
| define void @test_prefetch_instruction_locality_0(ptr %a) nounwind { |
| ; RV32I-LABEL: test_prefetch_instruction_locality_0: |
| ; RV32I: # %bb.0: |
| ; RV32I-NEXT: ret |
| ; |
| ; RV64I-LABEL: test_prefetch_instruction_locality_0: |
| ; RV64I: # %bb.0: |
| ; RV64I-NEXT: ret |
| ; |
| ; RV32ZICBOP-LABEL: test_prefetch_instruction_locality_0: |
| ; RV32ZICBOP: # %bb.0: |
| ; RV32ZICBOP-NEXT: prefetch.i 0(a0) |
| ; RV32ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOP-LABEL: test_prefetch_instruction_locality_0: |
| ; RV64ZICBOP: # %bb.0: |
| ; RV64ZICBOP-NEXT: prefetch.i 0(a0) |
| ; RV64ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOPZIHINTNTL-LABEL: test_prefetch_instruction_locality_0: |
| ; RV64ZICBOPZIHINTNTL: # %bb.0: |
| ; RV64ZICBOPZIHINTNTL-NEXT: ntl.all |
| ; RV64ZICBOPZIHINTNTL-NEXT: prefetch.i 0(a0) |
| ; RV64ZICBOPZIHINTNTL-NEXT: ret |
| call void @llvm.prefetch(ptr %a, i32 0, i32 0, i32 0) |
| ret void |
| } |
| |
| define void @test_prefetch_read_locality_1(ptr %a) nounwind { |
| ; RV32I-LABEL: test_prefetch_read_locality_1: |
| ; RV32I: # %bb.0: |
| ; RV32I-NEXT: ret |
| ; |
| ; RV64I-LABEL: test_prefetch_read_locality_1: |
| ; RV64I: # %bb.0: |
| ; RV64I-NEXT: ret |
| ; |
| ; RV32ZICBOP-LABEL: test_prefetch_read_locality_1: |
| ; RV32ZICBOP: # %bb.0: |
| ; RV32ZICBOP-NEXT: prefetch.r 0(a0) |
| ; RV32ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOP-LABEL: test_prefetch_read_locality_1: |
| ; RV64ZICBOP: # %bb.0: |
| ; RV64ZICBOP-NEXT: prefetch.r 0(a0) |
| ; RV64ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOPZIHINTNTL-LABEL: test_prefetch_read_locality_1: |
| ; RV64ZICBOPZIHINTNTL: # %bb.0: |
| ; RV64ZICBOPZIHINTNTL-NEXT: ntl.pall |
| ; RV64ZICBOPZIHINTNTL-NEXT: prefetch.r 0(a0) |
| ; RV64ZICBOPZIHINTNTL-NEXT: ret |
| call void @llvm.prefetch(ptr %a, i32 0, i32 1, i32 1) |
| ret void |
| } |
| |
| define void @test_prefetch_write_locality_1(ptr %a) nounwind { |
| ; RV32I-LABEL: test_prefetch_write_locality_1: |
| ; RV32I: # %bb.0: |
| ; RV32I-NEXT: ret |
| ; |
| ; RV64I-LABEL: test_prefetch_write_locality_1: |
| ; RV64I: # %bb.0: |
| ; RV64I-NEXT: ret |
| ; |
| ; RV32ZICBOP-LABEL: test_prefetch_write_locality_1: |
| ; RV32ZICBOP: # %bb.0: |
| ; RV32ZICBOP-NEXT: prefetch.w 0(a0) |
| ; RV32ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOP-LABEL: test_prefetch_write_locality_1: |
| ; RV64ZICBOP: # %bb.0: |
| ; RV64ZICBOP-NEXT: prefetch.w 0(a0) |
| ; RV64ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOPZIHINTNTL-LABEL: test_prefetch_write_locality_1: |
| ; RV64ZICBOPZIHINTNTL: # %bb.0: |
| ; RV64ZICBOPZIHINTNTL-NEXT: ntl.pall |
| ; RV64ZICBOPZIHINTNTL-NEXT: prefetch.w 0(a0) |
| ; RV64ZICBOPZIHINTNTL-NEXT: ret |
| call void @llvm.prefetch(ptr %a, i32 1, i32 1, i32 1) |
| ret void |
| } |
| |
| define void @test_prefetch_instruction_locality_1(ptr %a) nounwind { |
| ; RV32I-LABEL: test_prefetch_instruction_locality_1: |
| ; RV32I: # %bb.0: |
| ; RV32I-NEXT: ret |
| ; |
| ; RV64I-LABEL: test_prefetch_instruction_locality_1: |
| ; RV64I: # %bb.0: |
| ; RV64I-NEXT: ret |
| ; |
| ; RV32ZICBOP-LABEL: test_prefetch_instruction_locality_1: |
| ; RV32ZICBOP: # %bb.0: |
| ; RV32ZICBOP-NEXT: prefetch.i 0(a0) |
| ; RV32ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOP-LABEL: test_prefetch_instruction_locality_1: |
| ; RV64ZICBOP: # %bb.0: |
| ; RV64ZICBOP-NEXT: prefetch.i 0(a0) |
| ; RV64ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOPZIHINTNTL-LABEL: test_prefetch_instruction_locality_1: |
| ; RV64ZICBOPZIHINTNTL: # %bb.0: |
| ; RV64ZICBOPZIHINTNTL-NEXT: ntl.pall |
| ; RV64ZICBOPZIHINTNTL-NEXT: prefetch.i 0(a0) |
| ; RV64ZICBOPZIHINTNTL-NEXT: ret |
| call void @llvm.prefetch(ptr %a, i32 0, i32 1, i32 0) |
| ret void |
| } |
| |
| define void @test_prefetch_read_locality_2(ptr %a) nounwind { |
| ; RV32I-LABEL: test_prefetch_read_locality_2: |
| ; RV32I: # %bb.0: |
| ; RV32I-NEXT: ret |
| ; |
| ; RV64I-LABEL: test_prefetch_read_locality_2: |
| ; RV64I: # %bb.0: |
| ; RV64I-NEXT: ret |
| ; |
| ; RV32ZICBOP-LABEL: test_prefetch_read_locality_2: |
| ; RV32ZICBOP: # %bb.0: |
| ; RV32ZICBOP-NEXT: prefetch.r 0(a0) |
| ; RV32ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOP-LABEL: test_prefetch_read_locality_2: |
| ; RV64ZICBOP: # %bb.0: |
| ; RV64ZICBOP-NEXT: prefetch.r 0(a0) |
| ; RV64ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOPZIHINTNTL-LABEL: test_prefetch_read_locality_2: |
| ; RV64ZICBOPZIHINTNTL: # %bb.0: |
| ; RV64ZICBOPZIHINTNTL-NEXT: ntl.p1 |
| ; RV64ZICBOPZIHINTNTL-NEXT: prefetch.r 0(a0) |
| ; RV64ZICBOPZIHINTNTL-NEXT: ret |
| call void @llvm.prefetch(ptr %a, i32 0, i32 2, i32 1) |
| ret void |
| } |
| |
| define void @test_prefetch_write_locality_2(ptr %a) nounwind { |
| ; RV32I-LABEL: test_prefetch_write_locality_2: |
| ; RV32I: # %bb.0: |
| ; RV32I-NEXT: ret |
| ; |
| ; RV64I-LABEL: test_prefetch_write_locality_2: |
| ; RV64I: # %bb.0: |
| ; RV64I-NEXT: ret |
| ; |
| ; RV32ZICBOP-LABEL: test_prefetch_write_locality_2: |
| ; RV32ZICBOP: # %bb.0: |
| ; RV32ZICBOP-NEXT: prefetch.w 0(a0) |
| ; RV32ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOP-LABEL: test_prefetch_write_locality_2: |
| ; RV64ZICBOP: # %bb.0: |
| ; RV64ZICBOP-NEXT: prefetch.w 0(a0) |
| ; RV64ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOPZIHINTNTL-LABEL: test_prefetch_write_locality_2: |
| ; RV64ZICBOPZIHINTNTL: # %bb.0: |
| ; RV64ZICBOPZIHINTNTL-NEXT: ntl.p1 |
| ; RV64ZICBOPZIHINTNTL-NEXT: prefetch.w 0(a0) |
| ; RV64ZICBOPZIHINTNTL-NEXT: ret |
| call void @llvm.prefetch(ptr %a, i32 1, i32 2, i32 1) |
| ret void |
| } |
| |
| define void @test_prefetch_instruction_locality_2(ptr %a) nounwind { |
| ; RV32I-LABEL: test_prefetch_instruction_locality_2: |
| ; RV32I: # %bb.0: |
| ; RV32I-NEXT: ret |
| ; |
| ; RV64I-LABEL: test_prefetch_instruction_locality_2: |
| ; RV64I: # %bb.0: |
| ; RV64I-NEXT: ret |
| ; |
| ; RV32ZICBOP-LABEL: test_prefetch_instruction_locality_2: |
| ; RV32ZICBOP: # %bb.0: |
| ; RV32ZICBOP-NEXT: prefetch.i 0(a0) |
| ; RV32ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOP-LABEL: test_prefetch_instruction_locality_2: |
| ; RV64ZICBOP: # %bb.0: |
| ; RV64ZICBOP-NEXT: prefetch.i 0(a0) |
| ; RV64ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOPZIHINTNTL-LABEL: test_prefetch_instruction_locality_2: |
| ; RV64ZICBOPZIHINTNTL: # %bb.0: |
| ; RV64ZICBOPZIHINTNTL-NEXT: ntl.p1 |
| ; RV64ZICBOPZIHINTNTL-NEXT: prefetch.i 0(a0) |
| ; RV64ZICBOPZIHINTNTL-NEXT: ret |
| call void @llvm.prefetch(ptr %a, i32 0, i32 2, i32 0) |
| ret void |
| } |
| |
| |
| define void @test_prefetch_read_locality_3(ptr %a) nounwind { |
| ; RV32I-LABEL: test_prefetch_read_locality_3: |
| ; RV32I: # %bb.0: |
| ; RV32I-NEXT: ret |
| ; |
| ; RV64I-LABEL: test_prefetch_read_locality_3: |
| ; RV64I: # %bb.0: |
| ; RV64I-NEXT: ret |
| ; |
| ; RV32ZICBOP-LABEL: test_prefetch_read_locality_3: |
| ; RV32ZICBOP: # %bb.0: |
| ; RV32ZICBOP-NEXT: prefetch.r 0(a0) |
| ; RV32ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOP-LABEL: test_prefetch_read_locality_3: |
| ; RV64ZICBOP: # %bb.0: |
| ; RV64ZICBOP-NEXT: prefetch.r 0(a0) |
| ; RV64ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOPZIHINTNTL-LABEL: test_prefetch_read_locality_3: |
| ; RV64ZICBOPZIHINTNTL: # %bb.0: |
| ; RV64ZICBOPZIHINTNTL-NEXT: prefetch.r 0(a0) |
| ; RV64ZICBOPZIHINTNTL-NEXT: ret |
| call void @llvm.prefetch(ptr %a, i32 0, i32 3, i32 1) |
| ret void |
| } |
| |
| define void @test_prefetch_write_locality_3(ptr %a) nounwind { |
| ; RV32I-LABEL: test_prefetch_write_locality_3: |
| ; RV32I: # %bb.0: |
| ; RV32I-NEXT: ret |
| ; |
| ; RV64I-LABEL: test_prefetch_write_locality_3: |
| ; RV64I: # %bb.0: |
| ; RV64I-NEXT: ret |
| ; |
| ; RV32ZICBOP-LABEL: test_prefetch_write_locality_3: |
| ; RV32ZICBOP: # %bb.0: |
| ; RV32ZICBOP-NEXT: prefetch.w 0(a0) |
| ; RV32ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOP-LABEL: test_prefetch_write_locality_3: |
| ; RV64ZICBOP: # %bb.0: |
| ; RV64ZICBOP-NEXT: prefetch.w 0(a0) |
| ; RV64ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOPZIHINTNTL-LABEL: test_prefetch_write_locality_3: |
| ; RV64ZICBOPZIHINTNTL: # %bb.0: |
| ; RV64ZICBOPZIHINTNTL-NEXT: prefetch.w 0(a0) |
| ; RV64ZICBOPZIHINTNTL-NEXT: ret |
| call void @llvm.prefetch(ptr %a, i32 1, i32 3, i32 1) |
| ret void |
| } |
| |
| define void @test_prefetch_instruction_locality_3(ptr %a) nounwind { |
| ; RV32I-LABEL: test_prefetch_instruction_locality_3: |
| ; RV32I: # %bb.0: |
| ; RV32I-NEXT: ret |
| ; |
| ; RV64I-LABEL: test_prefetch_instruction_locality_3: |
| ; RV64I: # %bb.0: |
| ; RV64I-NEXT: ret |
| ; |
| ; RV32ZICBOP-LABEL: test_prefetch_instruction_locality_3: |
| ; RV32ZICBOP: # %bb.0: |
| ; RV32ZICBOP-NEXT: prefetch.i 0(a0) |
| ; RV32ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOP-LABEL: test_prefetch_instruction_locality_3: |
| ; RV64ZICBOP: # %bb.0: |
| ; RV64ZICBOP-NEXT: prefetch.i 0(a0) |
| ; RV64ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOPZIHINTNTL-LABEL: test_prefetch_instruction_locality_3: |
| ; RV64ZICBOPZIHINTNTL: # %bb.0: |
| ; RV64ZICBOPZIHINTNTL-NEXT: prefetch.i 0(a0) |
| ; RV64ZICBOPZIHINTNTL-NEXT: ret |
| call void @llvm.prefetch(ptr %a, i32 0, i32 3, i32 0) |
| ret void |
| } |
| |
| define void @test_prefetch_offsetable_0(ptr %a) nounwind { |
| ; RV32I-LABEL: test_prefetch_offsetable_0: |
| ; RV32I: # %bb.0: |
| ; RV32I-NEXT: ret |
| ; |
| ; RV64I-LABEL: test_prefetch_offsetable_0: |
| ; RV64I: # %bb.0: |
| ; RV64I-NEXT: ret |
| ; |
| ; RV32ZICBOP-LABEL: test_prefetch_offsetable_0: |
| ; RV32ZICBOP: # %bb.0: |
| ; RV32ZICBOP-NEXT: prefetch.r 2016(a0) |
| ; RV32ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOP-LABEL: test_prefetch_offsetable_0: |
| ; RV64ZICBOP: # %bb.0: |
| ; RV64ZICBOP-NEXT: prefetch.r 2016(a0) |
| ; RV64ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOPZIHINTNTL-LABEL: test_prefetch_offsetable_0: |
| ; RV64ZICBOPZIHINTNTL: # %bb.0: |
| ; RV64ZICBOPZIHINTNTL-NEXT: ntl.all |
| ; RV64ZICBOPZIHINTNTL-NEXT: prefetch.r 2016(a0) |
| ; RV64ZICBOPZIHINTNTL-NEXT: ret |
| %addr = getelementptr i8, ptr %a, i64 2016 |
| call void @llvm.prefetch(ptr %addr, i32 0, i32 0, i32 1) |
| ret void |
| } |
| |
| define void @test_prefetch_offsetable_1(ptr %a) nounwind { |
| ; RV32I-LABEL: test_prefetch_offsetable_1: |
| ; RV32I: # %bb.0: |
| ; RV32I-NEXT: ret |
| ; |
| ; RV64I-LABEL: test_prefetch_offsetable_1: |
| ; RV64I: # %bb.0: |
| ; RV64I-NEXT: ret |
| ; |
| ; RV32ZICBOP-LABEL: test_prefetch_offsetable_1: |
| ; RV32ZICBOP: # %bb.0: |
| ; RV32ZICBOP-NEXT: prefetch.r -2048(a0) |
| ; RV32ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOP-LABEL: test_prefetch_offsetable_1: |
| ; RV64ZICBOP: # %bb.0: |
| ; RV64ZICBOP-NEXT: prefetch.r -2048(a0) |
| ; RV64ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOPZIHINTNTL-LABEL: test_prefetch_offsetable_1: |
| ; RV64ZICBOPZIHINTNTL: # %bb.0: |
| ; RV64ZICBOPZIHINTNTL-NEXT: ntl.all |
| ; RV64ZICBOPZIHINTNTL-NEXT: prefetch.r -2048(a0) |
| ; RV64ZICBOPZIHINTNTL-NEXT: ret |
| %addr = getelementptr i8, ptr %a, i64 -2048 |
| call void @llvm.prefetch(ptr %addr, i32 0, i32 0, i32 1) |
| ret void |
| } |
| |
| define void @test_prefetch_offsetable_2(ptr %a) nounwind { |
| ; RV32I-LABEL: test_prefetch_offsetable_2: |
| ; RV32I: # %bb.0: |
| ; RV32I-NEXT: ret |
| ; |
| ; RV64I-LABEL: test_prefetch_offsetable_2: |
| ; RV64I: # %bb.0: |
| ; RV64I-NEXT: ret |
| ; |
| ; RV32ZICBOP-LABEL: test_prefetch_offsetable_2: |
| ; RV32ZICBOP: # %bb.0: |
| ; RV32ZICBOP-NEXT: prefetch.r 32(a0) |
| ; RV32ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOP-LABEL: test_prefetch_offsetable_2: |
| ; RV64ZICBOP: # %bb.0: |
| ; RV64ZICBOP-NEXT: prefetch.r 32(a0) |
| ; RV64ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOPZIHINTNTL-LABEL: test_prefetch_offsetable_2: |
| ; RV64ZICBOPZIHINTNTL: # %bb.0: |
| ; RV64ZICBOPZIHINTNTL-NEXT: ntl.all |
| ; RV64ZICBOPZIHINTNTL-NEXT: prefetch.r 32(a0) |
| ; RV64ZICBOPZIHINTNTL-NEXT: ret |
| %addr = getelementptr i8, ptr %a, i64 32 |
| call void @llvm.prefetch(ptr %addr, i32 0, i32 0, i32 1) |
| ret void |
| } |
| |
| define void @test_prefetch_offsetable_3(ptr %a) nounwind { |
| ; RV32I-LABEL: test_prefetch_offsetable_3: |
| ; RV32I: # %bb.0: |
| ; RV32I-NEXT: ret |
| ; |
| ; RV64I-LABEL: test_prefetch_offsetable_3: |
| ; RV64I: # %bb.0: |
| ; RV64I-NEXT: ret |
| ; |
| ; RV32ZICBOP-LABEL: test_prefetch_offsetable_3: |
| ; RV32ZICBOP: # %bb.0: |
| ; RV32ZICBOP-NEXT: prefetch.r -32(a0) |
| ; RV32ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOP-LABEL: test_prefetch_offsetable_3: |
| ; RV64ZICBOP: # %bb.0: |
| ; RV64ZICBOP-NEXT: prefetch.r -32(a0) |
| ; RV64ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOPZIHINTNTL-LABEL: test_prefetch_offsetable_3: |
| ; RV64ZICBOPZIHINTNTL: # %bb.0: |
| ; RV64ZICBOPZIHINTNTL-NEXT: ntl.all |
| ; RV64ZICBOPZIHINTNTL-NEXT: prefetch.r -32(a0) |
| ; RV64ZICBOPZIHINTNTL-NEXT: ret |
| %addr = getelementptr i8, ptr %a, i64 -32 |
| call void @llvm.prefetch(ptr %addr, i32 0, i32 0, i32 1) |
| ret void |
| } |
| |
| define void @test_prefetch_offsetable_4(ptr %a) nounwind { |
| ; RV32I-LABEL: test_prefetch_offsetable_4: |
| ; RV32I: # %bb.0: |
| ; RV32I-NEXT: ret |
| ; |
| ; RV64I-LABEL: test_prefetch_offsetable_4: |
| ; RV64I: # %bb.0: |
| ; RV64I-NEXT: ret |
| ; |
| ; RV32ZICBOP-LABEL: test_prefetch_offsetable_4: |
| ; RV32ZICBOP: # %bb.0: |
| ; RV32ZICBOP-NEXT: addi a0, a0, 32 |
| ; RV32ZICBOP-NEXT: prefetch.r 2016(a0) |
| ; RV32ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOP-LABEL: test_prefetch_offsetable_4: |
| ; RV64ZICBOP: # %bb.0: |
| ; RV64ZICBOP-NEXT: addi a0, a0, 32 |
| ; RV64ZICBOP-NEXT: prefetch.r 2016(a0) |
| ; RV64ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOPZIHINTNTL-LABEL: test_prefetch_offsetable_4: |
| ; RV64ZICBOPZIHINTNTL: # %bb.0: |
| ; RV64ZICBOPZIHINTNTL-NEXT: addi a0, a0, 32 |
| ; RV64ZICBOPZIHINTNTL-NEXT: ntl.all |
| ; RV64ZICBOPZIHINTNTL-NEXT: prefetch.r 2016(a0) |
| ; RV64ZICBOPZIHINTNTL-NEXT: ret |
| %addr = getelementptr i8, ptr %a, i64 2048 |
| call void @llvm.prefetch(ptr %addr, i32 0, i32 0, i32 1) |
| ret void |
| } |
| |
| define void @test_prefetch_offsetable_5(ptr %a) nounwind { |
| ; RV32I-LABEL: test_prefetch_offsetable_5: |
| ; RV32I: # %bb.0: |
| ; RV32I-NEXT: ret |
| ; |
| ; RV64I-LABEL: test_prefetch_offsetable_5: |
| ; RV64I: # %bb.0: |
| ; RV64I-NEXT: ret |
| ; |
| ; RV32ZICBOP-LABEL: test_prefetch_offsetable_5: |
| ; RV32ZICBOP: # %bb.0: |
| ; RV32ZICBOP-NEXT: addi a0, a0, -1 |
| ; RV32ZICBOP-NEXT: prefetch.r -2048(a0) |
| ; RV32ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOP-LABEL: test_prefetch_offsetable_5: |
| ; RV64ZICBOP: # %bb.0: |
| ; RV64ZICBOP-NEXT: addi a0, a0, -1 |
| ; RV64ZICBOP-NEXT: prefetch.r -2048(a0) |
| ; RV64ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOPZIHINTNTL-LABEL: test_prefetch_offsetable_5: |
| ; RV64ZICBOPZIHINTNTL: # %bb.0: |
| ; RV64ZICBOPZIHINTNTL-NEXT: addi a0, a0, -1 |
| ; RV64ZICBOPZIHINTNTL-NEXT: ntl.all |
| ; RV64ZICBOPZIHINTNTL-NEXT: prefetch.r -2048(a0) |
| ; RV64ZICBOPZIHINTNTL-NEXT: ret |
| %addr = getelementptr i8, ptr %a, i64 -2049 |
| call void @llvm.prefetch(ptr %addr, i32 0, i32 0, i32 1) |
| ret void |
| } |
| |
| define void @test_prefetch_offsetable_6(ptr %a) nounwind { |
| ; RV32I-LABEL: test_prefetch_offsetable_6: |
| ; RV32I: # %bb.0: |
| ; RV32I-NEXT: ret |
| ; |
| ; RV64I-LABEL: test_prefetch_offsetable_6: |
| ; RV64I: # %bb.0: |
| ; RV64I-NEXT: ret |
| ; |
| ; RV32ZICBOP-LABEL: test_prefetch_offsetable_6: |
| ; RV32ZICBOP: # %bb.0: |
| ; RV32ZICBOP-NEXT: addi a0, a0, 16 |
| ; RV32ZICBOP-NEXT: prefetch.r 0(a0) |
| ; RV32ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOP-LABEL: test_prefetch_offsetable_6: |
| ; RV64ZICBOP: # %bb.0: |
| ; RV64ZICBOP-NEXT: addi a0, a0, 16 |
| ; RV64ZICBOP-NEXT: prefetch.r 0(a0) |
| ; RV64ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOPZIHINTNTL-LABEL: test_prefetch_offsetable_6: |
| ; RV64ZICBOPZIHINTNTL: # %bb.0: |
| ; RV64ZICBOPZIHINTNTL-NEXT: addi a0, a0, 16 |
| ; RV64ZICBOPZIHINTNTL-NEXT: ntl.all |
| ; RV64ZICBOPZIHINTNTL-NEXT: prefetch.r 0(a0) |
| ; RV64ZICBOPZIHINTNTL-NEXT: ret |
| %addr = getelementptr i8, ptr %a, i64 16 |
| call void @llvm.prefetch(ptr %addr, i32 0, i32 0, i32 1) |
| ret void |
| } |
| |
| define void @test_prefetch_offsetable_7(ptr %a) nounwind { |
| ; RV32I-LABEL: test_prefetch_offsetable_7: |
| ; RV32I: # %bb.0: |
| ; RV32I-NEXT: ret |
| ; |
| ; RV64I-LABEL: test_prefetch_offsetable_7: |
| ; RV64I: # %bb.0: |
| ; RV64I-NEXT: ret |
| ; |
| ; RV32ZICBOP-LABEL: test_prefetch_offsetable_7: |
| ; RV32ZICBOP: # %bb.0: |
| ; RV32ZICBOP-NEXT: addi a0, a0, -16 |
| ; RV32ZICBOP-NEXT: prefetch.r 0(a0) |
| ; RV32ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOP-LABEL: test_prefetch_offsetable_7: |
| ; RV64ZICBOP: # %bb.0: |
| ; RV64ZICBOP-NEXT: addi a0, a0, -16 |
| ; RV64ZICBOP-NEXT: prefetch.r 0(a0) |
| ; RV64ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOPZIHINTNTL-LABEL: test_prefetch_offsetable_7: |
| ; RV64ZICBOPZIHINTNTL: # %bb.0: |
| ; RV64ZICBOPZIHINTNTL-NEXT: addi a0, a0, -16 |
| ; RV64ZICBOPZIHINTNTL-NEXT: ntl.all |
| ; RV64ZICBOPZIHINTNTL-NEXT: prefetch.r 0(a0) |
| ; RV64ZICBOPZIHINTNTL-NEXT: ret |
| %addr = getelementptr i8, ptr %a, i64 -16 |
| call void @llvm.prefetch(ptr %addr, i32 0, i32 0, i32 1) |
| ret void |
| } |
| |
| define void @test_prefetch_offsetable_9(ptr %a) nounwind { |
| ; RV32I-LABEL: test_prefetch_offsetable_9: |
| ; RV32I: # %bb.0: |
| ; RV32I-NEXT: ret |
| ; |
| ; RV64I-LABEL: test_prefetch_offsetable_9: |
| ; RV64I: # %bb.0: |
| ; RV64I-NEXT: ret |
| ; |
| ; RV32ZICBOP-LABEL: test_prefetch_offsetable_9: |
| ; RV32ZICBOP: # %bb.0: |
| ; RV32ZICBOP-NEXT: lui a1, 1 |
| ; RV32ZICBOP-NEXT: add a0, a0, a1 |
| ; RV32ZICBOP-NEXT: prefetch.r 64(a0) |
| ; RV32ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOP-LABEL: test_prefetch_offsetable_9: |
| ; RV64ZICBOP: # %bb.0: |
| ; RV64ZICBOP-NEXT: lui a1, 1 |
| ; RV64ZICBOP-NEXT: add a0, a0, a1 |
| ; RV64ZICBOP-NEXT: prefetch.r 64(a0) |
| ; RV64ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOPZIHINTNTL-LABEL: test_prefetch_offsetable_9: |
| ; RV64ZICBOPZIHINTNTL: # %bb.0: |
| ; RV64ZICBOPZIHINTNTL-NEXT: lui a1, 1 |
| ; RV64ZICBOPZIHINTNTL-NEXT: add a0, a0, a1 |
| ; RV64ZICBOPZIHINTNTL-NEXT: ntl.all |
| ; RV64ZICBOPZIHINTNTL-NEXT: prefetch.r 64(a0) |
| ; RV64ZICBOPZIHINTNTL-NEXT: ret |
| %addr = getelementptr i8, ptr %a, i64 4160 |
| call void @llvm.prefetch(ptr %addr, i32 0, i32 0, i32 1) |
| ret void |
| } |
| |
| define void @test_prefetch_offsetable_8(ptr %a) nounwind { |
| ; RV32I-LABEL: test_prefetch_offsetable_8: |
| ; RV32I: # %bb.0: |
| ; RV32I-NEXT: ret |
| ; |
| ; RV64I-LABEL: test_prefetch_offsetable_8: |
| ; RV64I: # %bb.0: |
| ; RV64I-NEXT: ret |
| ; |
| ; RV32ZICBOP-LABEL: test_prefetch_offsetable_8: |
| ; RV32ZICBOP: # %bb.0: |
| ; RV32ZICBOP-NEXT: lui a1, 1048575 |
| ; RV32ZICBOP-NEXT: add a0, a0, a1 |
| ; RV32ZICBOP-NEXT: prefetch.r -64(a0) |
| ; RV32ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOP-LABEL: test_prefetch_offsetable_8: |
| ; RV64ZICBOP: # %bb.0: |
| ; RV64ZICBOP-NEXT: lui a1, 1048575 |
| ; RV64ZICBOP-NEXT: add a0, a0, a1 |
| ; RV64ZICBOP-NEXT: prefetch.r -64(a0) |
| ; RV64ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOPZIHINTNTL-LABEL: test_prefetch_offsetable_8: |
| ; RV64ZICBOPZIHINTNTL: # %bb.0: |
| ; RV64ZICBOPZIHINTNTL-NEXT: lui a1, 1048575 |
| ; RV64ZICBOPZIHINTNTL-NEXT: add a0, a0, a1 |
| ; RV64ZICBOPZIHINTNTL-NEXT: ntl.all |
| ; RV64ZICBOPZIHINTNTL-NEXT: prefetch.r -64(a0) |
| ; RV64ZICBOPZIHINTNTL-NEXT: ret |
| %addr = getelementptr i8, ptr %a, i64 -4160 |
| call void @llvm.prefetch(ptr %addr, i32 0, i32 0, i32 1) |
| ret void |
| } |
| |
| define void @test_prefetch_frameindex_0() nounwind { |
| ; RV32I-LABEL: test_prefetch_frameindex_0: |
| ; RV32I: # %bb.0: |
| ; RV32I-NEXT: addi sp, sp, -512 |
| ; RV32I-NEXT: addi sp, sp, 512 |
| ; RV32I-NEXT: ret |
| ; |
| ; RV64I-LABEL: test_prefetch_frameindex_0: |
| ; RV64I: # %bb.0: |
| ; RV64I-NEXT: addi sp, sp, -512 |
| ; RV64I-NEXT: addi sp, sp, 512 |
| ; RV64I-NEXT: ret |
| ; |
| ; RV32ZICBOP-LABEL: test_prefetch_frameindex_0: |
| ; RV32ZICBOP: # %bb.0: |
| ; RV32ZICBOP-NEXT: addi sp, sp, -512 |
| ; RV32ZICBOP-NEXT: prefetch.r 0(sp) |
| ; RV32ZICBOP-NEXT: addi sp, sp, 512 |
| ; RV32ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOP-LABEL: test_prefetch_frameindex_0: |
| ; RV64ZICBOP: # %bb.0: |
| ; RV64ZICBOP-NEXT: addi sp, sp, -512 |
| ; RV64ZICBOP-NEXT: prefetch.r 0(sp) |
| ; RV64ZICBOP-NEXT: addi sp, sp, 512 |
| ; RV64ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOPZIHINTNTL-LABEL: test_prefetch_frameindex_0: |
| ; RV64ZICBOPZIHINTNTL: # %bb.0: |
| ; RV64ZICBOPZIHINTNTL-NEXT: addi sp, sp, -512 |
| ; RV64ZICBOPZIHINTNTL-NEXT: ntl.all |
| ; RV64ZICBOPZIHINTNTL-NEXT: prefetch.r 0(sp) |
| ; RV64ZICBOPZIHINTNTL-NEXT: addi sp, sp, 512 |
| ; RV64ZICBOPZIHINTNTL-NEXT: ret |
| %data = alloca [128 x i32], align 4 |
| %base = bitcast ptr %data to ptr |
| %ptr = getelementptr [128 x i32], ptr %base, i32 0, i32 0 |
| call void @llvm.prefetch(ptr %ptr, i32 0, i32 0, i32 1) |
| ret void |
| } |
| |
| define void @test_prefetch_frameindex_1() nounwind { |
| ; RV32I-LABEL: test_prefetch_frameindex_1: |
| ; RV32I: # %bb.0: |
| ; RV32I-NEXT: lui a0, 1 |
| ; RV32I-NEXT: addi a0, a0, 16 |
| ; RV32I-NEXT: sub sp, sp, a0 |
| ; RV32I-NEXT: lui a0, 1 |
| ; RV32I-NEXT: addi a0, a0, 16 |
| ; RV32I-NEXT: add sp, sp, a0 |
| ; RV32I-NEXT: ret |
| ; |
| ; RV64I-LABEL: test_prefetch_frameindex_1: |
| ; RV64I: # %bb.0: |
| ; RV64I-NEXT: lui a0, 1 |
| ; RV64I-NEXT: addiw a0, a0, 16 |
| ; RV64I-NEXT: sub sp, sp, a0 |
| ; RV64I-NEXT: lui a0, 1 |
| ; RV64I-NEXT: addiw a0, a0, 16 |
| ; RV64I-NEXT: add sp, sp, a0 |
| ; RV64I-NEXT: ret |
| ; |
| ; RV32ZICBOP-LABEL: test_prefetch_frameindex_1: |
| ; RV32ZICBOP: # %bb.0: |
| ; RV32ZICBOP-NEXT: lui a0, 1 |
| ; RV32ZICBOP-NEXT: addi a0, a0, 16 |
| ; RV32ZICBOP-NEXT: sub sp, sp, a0 |
| ; RV32ZICBOP-NEXT: addi a0, sp, 16 |
| ; RV32ZICBOP-NEXT: prefetch.r 0(a0) |
| ; RV32ZICBOP-NEXT: lui a0, 1 |
| ; RV32ZICBOP-NEXT: addi a0, a0, 16 |
| ; RV32ZICBOP-NEXT: add sp, sp, a0 |
| ; RV32ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOP-LABEL: test_prefetch_frameindex_1: |
| ; RV64ZICBOP: # %bb.0: |
| ; RV64ZICBOP-NEXT: lui a0, 1 |
| ; RV64ZICBOP-NEXT: addiw a0, a0, 16 |
| ; RV64ZICBOP-NEXT: sub sp, sp, a0 |
| ; RV64ZICBOP-NEXT: addi a0, sp, 16 |
| ; RV64ZICBOP-NEXT: prefetch.r 0(a0) |
| ; RV64ZICBOP-NEXT: lui a0, 1 |
| ; RV64ZICBOP-NEXT: addiw a0, a0, 16 |
| ; RV64ZICBOP-NEXT: add sp, sp, a0 |
| ; RV64ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOPZIHINTNTL-LABEL: test_prefetch_frameindex_1: |
| ; RV64ZICBOPZIHINTNTL: # %bb.0: |
| ; RV64ZICBOPZIHINTNTL-NEXT: lui a0, 1 |
| ; RV64ZICBOPZIHINTNTL-NEXT: addiw a0, a0, 16 |
| ; RV64ZICBOPZIHINTNTL-NEXT: sub sp, sp, a0 |
| ; RV64ZICBOPZIHINTNTL-NEXT: addi a0, sp, 16 |
| ; RV64ZICBOPZIHINTNTL-NEXT: ntl.all |
| ; RV64ZICBOPZIHINTNTL-NEXT: prefetch.r 0(a0) |
| ; RV64ZICBOPZIHINTNTL-NEXT: lui a0, 1 |
| ; RV64ZICBOPZIHINTNTL-NEXT: addiw a0, a0, 16 |
| ; RV64ZICBOPZIHINTNTL-NEXT: add sp, sp, a0 |
| ; RV64ZICBOPZIHINTNTL-NEXT: ret |
| %data = alloca [1024 x i32], align 4 |
| %ptr = bitcast ptr %data to ptr |
| call void @llvm.prefetch(ptr %ptr, i32 0, i32 0, i32 1) |
| ret void |
| } |
| |
| define void @test_prefetch_frameindex_2() nounwind { |
| ; RV32I-LABEL: test_prefetch_frameindex_2: |
| ; RV32I: # %bb.0: |
| ; RV32I-NEXT: addi sp, sp, -512 |
| ; RV32I-NEXT: addi sp, sp, 512 |
| ; RV32I-NEXT: ret |
| ; |
| ; RV64I-LABEL: test_prefetch_frameindex_2: |
| ; RV64I: # %bb.0: |
| ; RV64I-NEXT: addi sp, sp, -512 |
| ; RV64I-NEXT: addi sp, sp, 512 |
| ; RV64I-NEXT: ret |
| ; |
| ; RV32ZICBOP-LABEL: test_prefetch_frameindex_2: |
| ; RV32ZICBOP: # %bb.0: |
| ; RV32ZICBOP-NEXT: addi sp, sp, -512 |
| ; RV32ZICBOP-NEXT: addi a0, sp, 16 |
| ; RV32ZICBOP-NEXT: prefetch.r 0(a0) |
| ; RV32ZICBOP-NEXT: addi sp, sp, 512 |
| ; RV32ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOP-LABEL: test_prefetch_frameindex_2: |
| ; RV64ZICBOP: # %bb.0: |
| ; RV64ZICBOP-NEXT: addi sp, sp, -512 |
| ; RV64ZICBOP-NEXT: addi a0, sp, 16 |
| ; RV64ZICBOP-NEXT: prefetch.r 0(a0) |
| ; RV64ZICBOP-NEXT: addi sp, sp, 512 |
| ; RV64ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOPZIHINTNTL-LABEL: test_prefetch_frameindex_2: |
| ; RV64ZICBOPZIHINTNTL: # %bb.0: |
| ; RV64ZICBOPZIHINTNTL-NEXT: addi sp, sp, -512 |
| ; RV64ZICBOPZIHINTNTL-NEXT: addi a0, sp, 16 |
| ; RV64ZICBOPZIHINTNTL-NEXT: ntl.all |
| ; RV64ZICBOPZIHINTNTL-NEXT: prefetch.r 0(a0) |
| ; RV64ZICBOPZIHINTNTL-NEXT: addi sp, sp, 512 |
| ; RV64ZICBOPZIHINTNTL-NEXT: ret |
| %data = alloca [128 x i32], align 4 |
| %base = bitcast ptr %data to ptr |
| %ptr = getelementptr [128 x i32], ptr %base, i32 0, i32 4 |
| call void @llvm.prefetch(ptr %ptr, i32 0, i32 0, i32 1) |
| ret void |
| } |
| |
| define void @test_prefetch_frameindex_3() nounwind { |
| ; RV32I-LABEL: test_prefetch_frameindex_3: |
| ; RV32I: # %bb.0: |
| ; RV32I-NEXT: addi sp, sp, -512 |
| ; RV32I-NEXT: addi sp, sp, 512 |
| ; RV32I-NEXT: ret |
| ; |
| ; RV64I-LABEL: test_prefetch_frameindex_3: |
| ; RV64I: # %bb.0: |
| ; RV64I-NEXT: addi sp, sp, -512 |
| ; RV64I-NEXT: addi sp, sp, 512 |
| ; RV64I-NEXT: ret |
| ; |
| ; RV32ZICBOP-LABEL: test_prefetch_frameindex_3: |
| ; RV32ZICBOP: # %bb.0: |
| ; RV32ZICBOP-NEXT: addi sp, sp, -512 |
| ; RV32ZICBOP-NEXT: addi a0, sp, -16 |
| ; RV32ZICBOP-NEXT: prefetch.r 0(a0) |
| ; RV32ZICBOP-NEXT: addi sp, sp, 512 |
| ; RV32ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOP-LABEL: test_prefetch_frameindex_3: |
| ; RV64ZICBOP: # %bb.0: |
| ; RV64ZICBOP-NEXT: addi sp, sp, -512 |
| ; RV64ZICBOP-NEXT: addi a0, sp, -16 |
| ; RV64ZICBOP-NEXT: prefetch.r 0(a0) |
| ; RV64ZICBOP-NEXT: addi sp, sp, 512 |
| ; RV64ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOPZIHINTNTL-LABEL: test_prefetch_frameindex_3: |
| ; RV64ZICBOPZIHINTNTL: # %bb.0: |
| ; RV64ZICBOPZIHINTNTL-NEXT: addi sp, sp, -512 |
| ; RV64ZICBOPZIHINTNTL-NEXT: addi a0, sp, -16 |
| ; RV64ZICBOPZIHINTNTL-NEXT: ntl.all |
| ; RV64ZICBOPZIHINTNTL-NEXT: prefetch.r 0(a0) |
| ; RV64ZICBOPZIHINTNTL-NEXT: addi sp, sp, 512 |
| ; RV64ZICBOPZIHINTNTL-NEXT: ret |
| %data = alloca [128 x i32], align 4 |
| %base = bitcast ptr %data to ptr |
| %ptr = getelementptr [128 x i32], ptr %base, i32 0, i32 -4 |
| call void @llvm.prefetch(ptr %ptr, i32 0, i32 0, i32 1) |
| ret void |
| } |
| |
| define void @test_prefetch_frameindex_4() nounwind { |
| ; RV32I-LABEL: test_prefetch_frameindex_4: |
| ; RV32I: # %bb.0: |
| ; RV32I-NEXT: addi sp, sp, -512 |
| ; RV32I-NEXT: addi sp, sp, 512 |
| ; RV32I-NEXT: ret |
| ; |
| ; RV64I-LABEL: test_prefetch_frameindex_4: |
| ; RV64I: # %bb.0: |
| ; RV64I-NEXT: addi sp, sp, -512 |
| ; RV64I-NEXT: addi sp, sp, 512 |
| ; RV64I-NEXT: ret |
| ; |
| ; RV32ZICBOP-LABEL: test_prefetch_frameindex_4: |
| ; RV32ZICBOP: # %bb.0: |
| ; RV32ZICBOP-NEXT: addi sp, sp, -512 |
| ; RV32ZICBOP-NEXT: prefetch.r 32(sp) |
| ; RV32ZICBOP-NEXT: addi sp, sp, 512 |
| ; RV32ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOP-LABEL: test_prefetch_frameindex_4: |
| ; RV64ZICBOP: # %bb.0: |
| ; RV64ZICBOP-NEXT: addi sp, sp, -512 |
| ; RV64ZICBOP-NEXT: prefetch.r 32(sp) |
| ; RV64ZICBOP-NEXT: addi sp, sp, 512 |
| ; RV64ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOPZIHINTNTL-LABEL: test_prefetch_frameindex_4: |
| ; RV64ZICBOPZIHINTNTL: # %bb.0: |
| ; RV64ZICBOPZIHINTNTL-NEXT: addi sp, sp, -512 |
| ; RV64ZICBOPZIHINTNTL-NEXT: ntl.all |
| ; RV64ZICBOPZIHINTNTL-NEXT: prefetch.r 32(sp) |
| ; RV64ZICBOPZIHINTNTL-NEXT: addi sp, sp, 512 |
| ; RV64ZICBOPZIHINTNTL-NEXT: ret |
| %data = alloca [128 x i32], align 4 |
| %base = bitcast ptr %data to ptr |
| %ptr = getelementptr [128 x i32], ptr %base, i32 0, i32 8 |
| call void @llvm.prefetch(ptr %ptr, i32 0, i32 0, i32 1) |
| ret void |
| } |
| |
| define void @test_prefetch_frameindex_5() nounwind { |
| ; RV32I-LABEL: test_prefetch_frameindex_5: |
| ; RV32I: # %bb.0: |
| ; RV32I-NEXT: addi sp, sp, -512 |
| ; RV32I-NEXT: addi sp, sp, 512 |
| ; RV32I-NEXT: ret |
| ; |
| ; RV64I-LABEL: test_prefetch_frameindex_5: |
| ; RV64I: # %bb.0: |
| ; RV64I-NEXT: addi sp, sp, -512 |
| ; RV64I-NEXT: addi sp, sp, 512 |
| ; RV64I-NEXT: ret |
| ; |
| ; RV32ZICBOP-LABEL: test_prefetch_frameindex_5: |
| ; RV32ZICBOP: # %bb.0: |
| ; RV32ZICBOP-NEXT: addi sp, sp, -512 |
| ; RV32ZICBOP-NEXT: prefetch.r -32(sp) |
| ; RV32ZICBOP-NEXT: addi sp, sp, 512 |
| ; RV32ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOP-LABEL: test_prefetch_frameindex_5: |
| ; RV64ZICBOP: # %bb.0: |
| ; RV64ZICBOP-NEXT: addi sp, sp, -512 |
| ; RV64ZICBOP-NEXT: prefetch.r -32(sp) |
| ; RV64ZICBOP-NEXT: addi sp, sp, 512 |
| ; RV64ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOPZIHINTNTL-LABEL: test_prefetch_frameindex_5: |
| ; RV64ZICBOPZIHINTNTL: # %bb.0: |
| ; RV64ZICBOPZIHINTNTL-NEXT: addi sp, sp, -512 |
| ; RV64ZICBOPZIHINTNTL-NEXT: ntl.all |
| ; RV64ZICBOPZIHINTNTL-NEXT: prefetch.r -32(sp) |
| ; RV64ZICBOPZIHINTNTL-NEXT: addi sp, sp, 512 |
| ; RV64ZICBOPZIHINTNTL-NEXT: ret |
| %data = alloca [128 x i32], align 4 |
| %base = bitcast ptr %data to ptr |
| %ptr = getelementptr [128 x i32], ptr %base, i32 0, i32 -8 |
| call void @llvm.prefetch(ptr %ptr, i32 0, i32 0, i32 1) |
| ret void |
| } |
| |
| define void @test_prefetch_frameindex_6() nounwind { |
| ; RV32I-LABEL: test_prefetch_frameindex_6: |
| ; RV32I: # %bb.0: |
| ; RV32I-NEXT: addi sp, sp, -512 |
| ; RV32I-NEXT: addi sp, sp, 512 |
| ; RV32I-NEXT: ret |
| ; |
| ; RV64I-LABEL: test_prefetch_frameindex_6: |
| ; RV64I: # %bb.0: |
| ; RV64I-NEXT: addi sp, sp, -512 |
| ; RV64I-NEXT: addi sp, sp, 512 |
| ; RV64I-NEXT: ret |
| ; |
| ; RV32ZICBOP-LABEL: test_prefetch_frameindex_6: |
| ; RV32ZICBOP: # %bb.0: |
| ; RV32ZICBOP-NEXT: addi sp, sp, -512 |
| ; RV32ZICBOP-NEXT: prefetch.r 2016(sp) |
| ; RV32ZICBOP-NEXT: addi sp, sp, 512 |
| ; RV32ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOP-LABEL: test_prefetch_frameindex_6: |
| ; RV64ZICBOP: # %bb.0: |
| ; RV64ZICBOP-NEXT: addi sp, sp, -512 |
| ; RV64ZICBOP-NEXT: prefetch.r 2016(sp) |
| ; RV64ZICBOP-NEXT: addi sp, sp, 512 |
| ; RV64ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOPZIHINTNTL-LABEL: test_prefetch_frameindex_6: |
| ; RV64ZICBOPZIHINTNTL: # %bb.0: |
| ; RV64ZICBOPZIHINTNTL-NEXT: addi sp, sp, -512 |
| ; RV64ZICBOPZIHINTNTL-NEXT: ntl.all |
| ; RV64ZICBOPZIHINTNTL-NEXT: prefetch.r 2016(sp) |
| ; RV64ZICBOPZIHINTNTL-NEXT: addi sp, sp, 512 |
| ; RV64ZICBOPZIHINTNTL-NEXT: ret |
| %data = alloca [128 x i32], align 4 |
| %base = bitcast ptr %data to ptr |
| %ptr = getelementptr [128 x i32], ptr %base, i32 0, i32 504 |
| call void @llvm.prefetch(ptr %ptr, i32 0, i32 0, i32 1) |
| ret void |
| } |
| |
| define void @test_prefetch_frameindex_7() nounwind { |
| ; RV32I-LABEL: test_prefetch_frameindex_7: |
| ; RV32I: # %bb.0: |
| ; RV32I-NEXT: addi sp, sp, -512 |
| ; RV32I-NEXT: addi sp, sp, 512 |
| ; RV32I-NEXT: ret |
| ; |
| ; RV64I-LABEL: test_prefetch_frameindex_7: |
| ; RV64I: # %bb.0: |
| ; RV64I-NEXT: addi sp, sp, -512 |
| ; RV64I-NEXT: addi sp, sp, 512 |
| ; RV64I-NEXT: ret |
| ; |
| ; RV32ZICBOP-LABEL: test_prefetch_frameindex_7: |
| ; RV32ZICBOP: # %bb.0: |
| ; RV32ZICBOP-NEXT: addi sp, sp, -512 |
| ; RV32ZICBOP-NEXT: prefetch.r -2048(sp) |
| ; RV32ZICBOP-NEXT: addi sp, sp, 512 |
| ; RV32ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOP-LABEL: test_prefetch_frameindex_7: |
| ; RV64ZICBOP: # %bb.0: |
| ; RV64ZICBOP-NEXT: addi sp, sp, -512 |
| ; RV64ZICBOP-NEXT: prefetch.r -2048(sp) |
| ; RV64ZICBOP-NEXT: addi sp, sp, 512 |
| ; RV64ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOPZIHINTNTL-LABEL: test_prefetch_frameindex_7: |
| ; RV64ZICBOPZIHINTNTL: # %bb.0: |
| ; RV64ZICBOPZIHINTNTL-NEXT: addi sp, sp, -512 |
| ; RV64ZICBOPZIHINTNTL-NEXT: ntl.all |
| ; RV64ZICBOPZIHINTNTL-NEXT: prefetch.r -2048(sp) |
| ; RV64ZICBOPZIHINTNTL-NEXT: addi sp, sp, 512 |
| ; RV64ZICBOPZIHINTNTL-NEXT: ret |
| %data = alloca [128 x i32], align 4 |
| %base = bitcast ptr %data to ptr |
| %ptr = getelementptr [128 x i32], ptr %base, i32 0, i32 -512 |
| call void @llvm.prefetch(ptr %ptr, i32 0, i32 0, i32 1) |
| ret void |
| } |
| |
| define void @test_prefetch_frameindex_8() nounwind { |
| ; RV32I-LABEL: test_prefetch_frameindex_8: |
| ; RV32I: # %bb.0: |
| ; RV32I-NEXT: addi sp, sp, -512 |
| ; RV32I-NEXT: addi sp, sp, 512 |
| ; RV32I-NEXT: ret |
| ; |
| ; RV64I-LABEL: test_prefetch_frameindex_8: |
| ; RV64I: # %bb.0: |
| ; RV64I-NEXT: addi sp, sp, -512 |
| ; RV64I-NEXT: addi sp, sp, 512 |
| ; RV64I-NEXT: ret |
| ; |
| ; RV32ZICBOP-LABEL: test_prefetch_frameindex_8: |
| ; RV32ZICBOP: # %bb.0: |
| ; RV32ZICBOP-NEXT: addi sp, sp, -512 |
| ; RV32ZICBOP-NEXT: addi a0, sp, 2020 |
| ; RV32ZICBOP-NEXT: prefetch.r 0(a0) |
| ; RV32ZICBOP-NEXT: addi sp, sp, 512 |
| ; RV32ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOP-LABEL: test_prefetch_frameindex_8: |
| ; RV64ZICBOP: # %bb.0: |
| ; RV64ZICBOP-NEXT: addi sp, sp, -512 |
| ; RV64ZICBOP-NEXT: addi a0, sp, 2020 |
| ; RV64ZICBOP-NEXT: prefetch.r 0(a0) |
| ; RV64ZICBOP-NEXT: addi sp, sp, 512 |
| ; RV64ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOPZIHINTNTL-LABEL: test_prefetch_frameindex_8: |
| ; RV64ZICBOPZIHINTNTL: # %bb.0: |
| ; RV64ZICBOPZIHINTNTL-NEXT: addi sp, sp, -512 |
| ; RV64ZICBOPZIHINTNTL-NEXT: addi a0, sp, 2020 |
| ; RV64ZICBOPZIHINTNTL-NEXT: ntl.all |
| ; RV64ZICBOPZIHINTNTL-NEXT: prefetch.r 0(a0) |
| ; RV64ZICBOPZIHINTNTL-NEXT: addi sp, sp, 512 |
| ; RV64ZICBOPZIHINTNTL-NEXT: ret |
| %data = alloca [128 x i32], align 4 |
| %base = bitcast ptr %data to ptr |
| %ptr = getelementptr [128 x i32], ptr %base, i32 0, i32 505 |
| call void @llvm.prefetch(ptr %ptr, i32 0, i32 0, i32 1) |
| ret void |
| } |
| |
| define void @test_prefetch_frameindex_9() nounwind { |
| ; RV32I-LABEL: test_prefetch_frameindex_9: |
| ; RV32I: # %bb.0: |
| ; RV32I-NEXT: addi sp, sp, -512 |
| ; RV32I-NEXT: addi sp, sp, 512 |
| ; RV32I-NEXT: ret |
| ; |
| ; RV64I-LABEL: test_prefetch_frameindex_9: |
| ; RV64I: # %bb.0: |
| ; RV64I-NEXT: addi sp, sp, -512 |
| ; RV64I-NEXT: addi sp, sp, 512 |
| ; RV64I-NEXT: ret |
| ; |
| ; RV32ZICBOP-LABEL: test_prefetch_frameindex_9: |
| ; RV32ZICBOP: # %bb.0: |
| ; RV32ZICBOP-NEXT: addi sp, sp, -512 |
| ; RV32ZICBOP-NEXT: mv a0, sp |
| ; RV32ZICBOP-NEXT: addi a0, a0, -4 |
| ; RV32ZICBOP-NEXT: prefetch.r -2048(a0) |
| ; RV32ZICBOP-NEXT: addi sp, sp, 512 |
| ; RV32ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOP-LABEL: test_prefetch_frameindex_9: |
| ; RV64ZICBOP: # %bb.0: |
| ; RV64ZICBOP-NEXT: addi sp, sp, -512 |
| ; RV64ZICBOP-NEXT: mv a0, sp |
| ; RV64ZICBOP-NEXT: addi a0, a0, -4 |
| ; RV64ZICBOP-NEXT: prefetch.r -2048(a0) |
| ; RV64ZICBOP-NEXT: addi sp, sp, 512 |
| ; RV64ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOPZIHINTNTL-LABEL: test_prefetch_frameindex_9: |
| ; RV64ZICBOPZIHINTNTL: # %bb.0: |
| ; RV64ZICBOPZIHINTNTL-NEXT: addi sp, sp, -512 |
| ; RV64ZICBOPZIHINTNTL-NEXT: mv a0, sp |
| ; RV64ZICBOPZIHINTNTL-NEXT: addi a0, a0, -4 |
| ; RV64ZICBOPZIHINTNTL-NEXT: ntl.all |
| ; RV64ZICBOPZIHINTNTL-NEXT: prefetch.r -2048(a0) |
| ; RV64ZICBOPZIHINTNTL-NEXT: addi sp, sp, 512 |
| ; RV64ZICBOPZIHINTNTL-NEXT: ret |
| %data = alloca [128 x i32], align 4 |
| %base = bitcast ptr %data to ptr |
| %ptr = getelementptr [128 x i32], ptr %base, i32 0, i32 -513 |
| call void @llvm.prefetch(ptr %ptr, i32 0, i32 0, i32 1) |
| ret void |
| } |
| |
| define void @test_prefetch_constant_address_0() nounwind { |
| ; RV32I-LABEL: test_prefetch_constant_address_0: |
| ; RV32I: # %bb.0: |
| ; RV32I-NEXT: ret |
| ; |
| ; RV64I-LABEL: test_prefetch_constant_address_0: |
| ; RV64I: # %bb.0: |
| ; RV64I-NEXT: ret |
| ; |
| ; RV32ZICBOP-LABEL: test_prefetch_constant_address_0: |
| ; RV32ZICBOP: # %bb.0: |
| ; RV32ZICBOP-NEXT: lui a0, 1 |
| ; RV32ZICBOP-NEXT: prefetch.r 32(a0) |
| ; RV32ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOP-LABEL: test_prefetch_constant_address_0: |
| ; RV64ZICBOP: # %bb.0: |
| ; RV64ZICBOP-NEXT: lui a0, 1 |
| ; RV64ZICBOP-NEXT: prefetch.r 32(a0) |
| ; RV64ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOPZIHINTNTL-LABEL: test_prefetch_constant_address_0: |
| ; RV64ZICBOPZIHINTNTL: # %bb.0: |
| ; RV64ZICBOPZIHINTNTL-NEXT: lui a0, 1 |
| ; RV64ZICBOPZIHINTNTL-NEXT: ntl.all |
| ; RV64ZICBOPZIHINTNTL-NEXT: prefetch.r 32(a0) |
| ; RV64ZICBOPZIHINTNTL-NEXT: ret |
| %ptr = inttoptr i64 4128 to ptr |
| call void @llvm.prefetch(ptr %ptr, i32 0, i32 0, i32 1) |
| ret void |
| } |
| |
| define void @test_prefetch_constant_address_1() nounwind { |
| ; RV32I-LABEL: test_prefetch_constant_address_1: |
| ; RV32I: # %bb.0: |
| ; RV32I-NEXT: ret |
| ; |
| ; RV64I-LABEL: test_prefetch_constant_address_1: |
| ; RV64I: # %bb.0: |
| ; RV64I-NEXT: ret |
| ; |
| ; RV32ZICBOP-LABEL: test_prefetch_constant_address_1: |
| ; RV32ZICBOP: # %bb.0: |
| ; RV32ZICBOP-NEXT: lui a0, 1 |
| ; RV32ZICBOP-NEXT: addi a0, a0, 31 |
| ; RV32ZICBOP-NEXT: prefetch.r 0(a0) |
| ; RV32ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOP-LABEL: test_prefetch_constant_address_1: |
| ; RV64ZICBOP: # %bb.0: |
| ; RV64ZICBOP-NEXT: lui a0, 1 |
| ; RV64ZICBOP-NEXT: addiw a0, a0, 31 |
| ; RV64ZICBOP-NEXT: prefetch.r 0(a0) |
| ; RV64ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOPZIHINTNTL-LABEL: test_prefetch_constant_address_1: |
| ; RV64ZICBOPZIHINTNTL: # %bb.0: |
| ; RV64ZICBOPZIHINTNTL-NEXT: lui a0, 1 |
| ; RV64ZICBOPZIHINTNTL-NEXT: addiw a0, a0, 31 |
| ; RV64ZICBOPZIHINTNTL-NEXT: ntl.all |
| ; RV64ZICBOPZIHINTNTL-NEXT: prefetch.r 0(a0) |
| ; RV64ZICBOPZIHINTNTL-NEXT: ret |
| %ptr = inttoptr i64 4127 to ptr |
| call void @llvm.prefetch(ptr %ptr, i32 0, i32 0, i32 1) |
| ret void |
| } |
| |
| define void @test_prefetch_constant_address_2() nounwind { |
| ; RV32I-LABEL: test_prefetch_constant_address_2: |
| ; RV32I: # %bb.0: |
| ; RV32I-NEXT: ret |
| ; |
| ; RV64I-LABEL: test_prefetch_constant_address_2: |
| ; RV64I: # %bb.0: |
| ; RV64I-NEXT: ret |
| ; |
| ; RV32ZICBOP-LABEL: test_prefetch_constant_address_2: |
| ; RV32ZICBOP: # %bb.0: |
| ; RV32ZICBOP-NEXT: lui a0, 1048561 |
| ; RV32ZICBOP-NEXT: prefetch.r 32(a0) |
| ; RV32ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOP-LABEL: test_prefetch_constant_address_2: |
| ; RV64ZICBOP: # %bb.0: |
| ; RV64ZICBOP-NEXT: lui a0, 1048561 |
| ; RV64ZICBOP-NEXT: prefetch.r 32(a0) |
| ; RV64ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOPZIHINTNTL-LABEL: test_prefetch_constant_address_2: |
| ; RV64ZICBOPZIHINTNTL: # %bb.0: |
| ; RV64ZICBOPZIHINTNTL-NEXT: lui a0, 1048561 |
| ; RV64ZICBOPZIHINTNTL-NEXT: ntl.all |
| ; RV64ZICBOPZIHINTNTL-NEXT: prefetch.r 32(a0) |
| ; RV64ZICBOPZIHINTNTL-NEXT: ret |
| %ptr = inttoptr i64 18446744073709490208 to ptr |
| call void @llvm.prefetch(ptr %ptr, i32 0, i32 0, i32 1) |
| ret void |
| } |
| |
| define void @test_prefetch_constant_address_3() nounwind { |
| ; RV32I-LABEL: test_prefetch_constant_address_3: |
| ; RV32I: # %bb.0: |
| ; RV32I-NEXT: ret |
| ; |
| ; RV64I-LABEL: test_prefetch_constant_address_3: |
| ; RV64I: # %bb.0: |
| ; RV64I-NEXT: ret |
| ; |
| ; RV32ZICBOP-LABEL: test_prefetch_constant_address_3: |
| ; RV32ZICBOP: # %bb.0: |
| ; RV32ZICBOP-NEXT: lui a0, 1048561 |
| ; RV32ZICBOP-NEXT: addi a0, a0, 31 |
| ; RV32ZICBOP-NEXT: prefetch.r 0(a0) |
| ; RV32ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOP-LABEL: test_prefetch_constant_address_3: |
| ; RV64ZICBOP: # %bb.0: |
| ; RV64ZICBOP-NEXT: lui a0, 1048561 |
| ; RV64ZICBOP-NEXT: addiw a0, a0, 31 |
| ; RV64ZICBOP-NEXT: prefetch.r 0(a0) |
| ; RV64ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOPZIHINTNTL-LABEL: test_prefetch_constant_address_3: |
| ; RV64ZICBOPZIHINTNTL: # %bb.0: |
| ; RV64ZICBOPZIHINTNTL-NEXT: lui a0, 1048561 |
| ; RV64ZICBOPZIHINTNTL-NEXT: addiw a0, a0, 31 |
| ; RV64ZICBOPZIHINTNTL-NEXT: ntl.all |
| ; RV64ZICBOPZIHINTNTL-NEXT: prefetch.r 0(a0) |
| ; RV64ZICBOPZIHINTNTL-NEXT: ret |
| %ptr = inttoptr i64 18446744073709490207 to ptr |
| call void @llvm.prefetch(ptr %ptr, i32 0, i32 0, i32 1) |
| ret void |
| } |
| |
| @g = external global [1024 x i32], align 4 |
| |
| define void @test_prefetch_global_0() nounwind { |
| ; RV32I-LABEL: test_prefetch_global_0: |
| ; RV32I: # %bb.0: |
| ; RV32I-NEXT: ret |
| ; |
| ; RV64I-LABEL: test_prefetch_global_0: |
| ; RV64I: # %bb.0: |
| ; RV64I-NEXT: ret |
| ; |
| ; RV32ZICBOP-LABEL: test_prefetch_global_0: |
| ; RV32ZICBOP: # %bb.0: |
| ; RV32ZICBOP-NEXT: lui a0, %hi(g) |
| ; RV32ZICBOP-NEXT: addi a0, a0, %lo(g) |
| ; RV32ZICBOP-NEXT: prefetch.r 0(a0) |
| ; RV32ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOP-LABEL: test_prefetch_global_0: |
| ; RV64ZICBOP: # %bb.0: |
| ; RV64ZICBOP-NEXT: lui a0, %hi(g) |
| ; RV64ZICBOP-NEXT: addi a0, a0, %lo(g) |
| ; RV64ZICBOP-NEXT: prefetch.r 0(a0) |
| ; RV64ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOPZIHINTNTL-LABEL: test_prefetch_global_0: |
| ; RV64ZICBOPZIHINTNTL: # %bb.0: |
| ; RV64ZICBOPZIHINTNTL-NEXT: lui a0, %hi(g) |
| ; RV64ZICBOPZIHINTNTL-NEXT: addi a0, a0, %lo(g) |
| ; RV64ZICBOPZIHINTNTL-NEXT: ntl.all |
| ; RV64ZICBOPZIHINTNTL-NEXT: prefetch.r 0(a0) |
| ; RV64ZICBOPZIHINTNTL-NEXT: ret |
| %ptr = getelementptr [1024 x i32], ptr @g, i32 0, i32 0 |
| call void @llvm.prefetch(ptr %ptr, i32 0, i32 0, i32 1) |
| ret void |
| } |
| |
| define void @test_prefetch_global_1() nounwind { |
| ; RV32I-LABEL: test_prefetch_global_1: |
| ; RV32I: # %bb.0: |
| ; RV32I-NEXT: ret |
| ; |
| ; RV64I-LABEL: test_prefetch_global_1: |
| ; RV64I: # %bb.0: |
| ; RV64I-NEXT: ret |
| ; |
| ; RV32ZICBOP-LABEL: test_prefetch_global_1: |
| ; RV32ZICBOP: # %bb.0: |
| ; RV32ZICBOP-NEXT: lui a0, %hi(g+16) |
| ; RV32ZICBOP-NEXT: addi a0, a0, %lo(g+16) |
| ; RV32ZICBOP-NEXT: prefetch.r 0(a0) |
| ; RV32ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOP-LABEL: test_prefetch_global_1: |
| ; RV64ZICBOP: # %bb.0: |
| ; RV64ZICBOP-NEXT: lui a0, %hi(g+16) |
| ; RV64ZICBOP-NEXT: addi a0, a0, %lo(g+16) |
| ; RV64ZICBOP-NEXT: prefetch.r 0(a0) |
| ; RV64ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOPZIHINTNTL-LABEL: test_prefetch_global_1: |
| ; RV64ZICBOPZIHINTNTL: # %bb.0: |
| ; RV64ZICBOPZIHINTNTL-NEXT: lui a0, %hi(g+16) |
| ; RV64ZICBOPZIHINTNTL-NEXT: addi a0, a0, %lo(g+16) |
| ; RV64ZICBOPZIHINTNTL-NEXT: ntl.all |
| ; RV64ZICBOPZIHINTNTL-NEXT: prefetch.r 0(a0) |
| ; RV64ZICBOPZIHINTNTL-NEXT: ret |
| %ptr = getelementptr [1024 x i32], ptr @g, i32 0, i32 4 |
| call void @llvm.prefetch(ptr %ptr, i32 0, i32 0, i32 1) |
| ret void |
| } |
| |
| define void @test_prefetch_global_2() nounwind { |
| ; RV32I-LABEL: test_prefetch_global_2: |
| ; RV32I: # %bb.0: |
| ; RV32I-NEXT: ret |
| ; |
| ; RV64I-LABEL: test_prefetch_global_2: |
| ; RV64I: # %bb.0: |
| ; RV64I-NEXT: ret |
| ; |
| ; RV32ZICBOP-LABEL: test_prefetch_global_2: |
| ; RV32ZICBOP: # %bb.0: |
| ; RV32ZICBOP-NEXT: lui a0, %hi(g-16) |
| ; RV32ZICBOP-NEXT: addi a0, a0, %lo(g-16) |
| ; RV32ZICBOP-NEXT: prefetch.r 0(a0) |
| ; RV32ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOP-LABEL: test_prefetch_global_2: |
| ; RV64ZICBOP: # %bb.0: |
| ; RV64ZICBOP-NEXT: lui a0, %hi(g-16) |
| ; RV64ZICBOP-NEXT: addi a0, a0, %lo(g-16) |
| ; RV64ZICBOP-NEXT: prefetch.r 0(a0) |
| ; RV64ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOPZIHINTNTL-LABEL: test_prefetch_global_2: |
| ; RV64ZICBOPZIHINTNTL: # %bb.0: |
| ; RV64ZICBOPZIHINTNTL-NEXT: lui a0, %hi(g-16) |
| ; RV64ZICBOPZIHINTNTL-NEXT: addi a0, a0, %lo(g-16) |
| ; RV64ZICBOPZIHINTNTL-NEXT: ntl.all |
| ; RV64ZICBOPZIHINTNTL-NEXT: prefetch.r 0(a0) |
| ; RV64ZICBOPZIHINTNTL-NEXT: ret |
| %ptr = getelementptr [1024 x i32], ptr @g, i32 0, i32 -4 |
| call void @llvm.prefetch(ptr %ptr, i32 0, i32 0, i32 1) |
| ret void |
| } |
| |
| define void @test_prefetch_global_3() nounwind { |
| ; RV32I-LABEL: test_prefetch_global_3: |
| ; RV32I: # %bb.0: |
| ; RV32I-NEXT: ret |
| ; |
| ; RV64I-LABEL: test_prefetch_global_3: |
| ; RV64I: # %bb.0: |
| ; RV64I-NEXT: ret |
| ; |
| ; RV32ZICBOP-LABEL: test_prefetch_global_3: |
| ; RV32ZICBOP: # %bb.0: |
| ; RV32ZICBOP-NEXT: lui a0, %hi(g) |
| ; RV32ZICBOP-NEXT: addi a0, a0, %lo(g) |
| ; RV32ZICBOP-NEXT: prefetch.r 32(a0) |
| ; RV32ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOP-LABEL: test_prefetch_global_3: |
| ; RV64ZICBOP: # %bb.0: |
| ; RV64ZICBOP-NEXT: lui a0, %hi(g) |
| ; RV64ZICBOP-NEXT: addi a0, a0, %lo(g) |
| ; RV64ZICBOP-NEXT: prefetch.r 32(a0) |
| ; RV64ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOPZIHINTNTL-LABEL: test_prefetch_global_3: |
| ; RV64ZICBOPZIHINTNTL: # %bb.0: |
| ; RV64ZICBOPZIHINTNTL-NEXT: lui a0, %hi(g) |
| ; RV64ZICBOPZIHINTNTL-NEXT: addi a0, a0, %lo(g) |
| ; RV64ZICBOPZIHINTNTL-NEXT: ntl.all |
| ; RV64ZICBOPZIHINTNTL-NEXT: prefetch.r 32(a0) |
| ; RV64ZICBOPZIHINTNTL-NEXT: ret |
| %ptr = getelementptr [1024 x i32], ptr @g, i32 0, i32 8 |
| call void @llvm.prefetch(ptr %ptr, i32 0, i32 0, i32 1) |
| ret void |
| } |
| |
| define void @test_prefetch_global_4() nounwind { |
| ; RV32I-LABEL: test_prefetch_global_4: |
| ; RV32I: # %bb.0: |
| ; RV32I-NEXT: ret |
| ; |
| ; RV64I-LABEL: test_prefetch_global_4: |
| ; RV64I: # %bb.0: |
| ; RV64I-NEXT: ret |
| ; |
| ; RV32ZICBOP-LABEL: test_prefetch_global_4: |
| ; RV32ZICBOP: # %bb.0: |
| ; RV32ZICBOP-NEXT: lui a0, %hi(g) |
| ; RV32ZICBOP-NEXT: addi a0, a0, %lo(g) |
| ; RV32ZICBOP-NEXT: prefetch.r -32(a0) |
| ; RV32ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOP-LABEL: test_prefetch_global_4: |
| ; RV64ZICBOP: # %bb.0: |
| ; RV64ZICBOP-NEXT: lui a0, %hi(g) |
| ; RV64ZICBOP-NEXT: addi a0, a0, %lo(g) |
| ; RV64ZICBOP-NEXT: prefetch.r -32(a0) |
| ; RV64ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOPZIHINTNTL-LABEL: test_prefetch_global_4: |
| ; RV64ZICBOPZIHINTNTL: # %bb.0: |
| ; RV64ZICBOPZIHINTNTL-NEXT: lui a0, %hi(g) |
| ; RV64ZICBOPZIHINTNTL-NEXT: addi a0, a0, %lo(g) |
| ; RV64ZICBOPZIHINTNTL-NEXT: ntl.all |
| ; RV64ZICBOPZIHINTNTL-NEXT: prefetch.r -32(a0) |
| ; RV64ZICBOPZIHINTNTL-NEXT: ret |
| %ptr = getelementptr [1024 x i32], ptr @g, i32 0, i32 -8 |
| call void @llvm.prefetch(ptr %ptr, i32 0, i32 0, i32 1) |
| ret void |
| } |
| |
| define void @test_prefetch_global_5() nounwind { |
| ; RV32I-LABEL: test_prefetch_global_5: |
| ; RV32I: # %bb.0: |
| ; RV32I-NEXT: ret |
| ; |
| ; RV64I-LABEL: test_prefetch_global_5: |
| ; RV64I: # %bb.0: |
| ; RV64I-NEXT: ret |
| ; |
| ; RV32ZICBOP-LABEL: test_prefetch_global_5: |
| ; RV32ZICBOP: # %bb.0: |
| ; RV32ZICBOP-NEXT: lui a0, %hi(g) |
| ; RV32ZICBOP-NEXT: addi a0, a0, %lo(g) |
| ; RV32ZICBOP-NEXT: prefetch.r 2016(a0) |
| ; RV32ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOP-LABEL: test_prefetch_global_5: |
| ; RV64ZICBOP: # %bb.0: |
| ; RV64ZICBOP-NEXT: lui a0, %hi(g) |
| ; RV64ZICBOP-NEXT: addi a0, a0, %lo(g) |
| ; RV64ZICBOP-NEXT: prefetch.r 2016(a0) |
| ; RV64ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOPZIHINTNTL-LABEL: test_prefetch_global_5: |
| ; RV64ZICBOPZIHINTNTL: # %bb.0: |
| ; RV64ZICBOPZIHINTNTL-NEXT: lui a0, %hi(g) |
| ; RV64ZICBOPZIHINTNTL-NEXT: addi a0, a0, %lo(g) |
| ; RV64ZICBOPZIHINTNTL-NEXT: ntl.all |
| ; RV64ZICBOPZIHINTNTL-NEXT: prefetch.r 2016(a0) |
| ; RV64ZICBOPZIHINTNTL-NEXT: ret |
| %ptr = getelementptr [1024 x i32], ptr @g, i32 0, i32 504 |
| call void @llvm.prefetch(ptr %ptr, i32 0, i32 0, i32 1) |
| ret void |
| } |
| |
| define void @test_prefetch_global_6() nounwind { |
| ; RV32I-LABEL: test_prefetch_global_6: |
| ; RV32I: # %bb.0: |
| ; RV32I-NEXT: ret |
| ; |
| ; RV64I-LABEL: test_prefetch_global_6: |
| ; RV64I: # %bb.0: |
| ; RV64I-NEXT: ret |
| ; |
| ; RV32ZICBOP-LABEL: test_prefetch_global_6: |
| ; RV32ZICBOP: # %bb.0: |
| ; RV32ZICBOP-NEXT: lui a0, %hi(g) |
| ; RV32ZICBOP-NEXT: addi a0, a0, %lo(g) |
| ; RV32ZICBOP-NEXT: prefetch.r -2048(a0) |
| ; RV32ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOP-LABEL: test_prefetch_global_6: |
| ; RV64ZICBOP: # %bb.0: |
| ; RV64ZICBOP-NEXT: lui a0, %hi(g) |
| ; RV64ZICBOP-NEXT: addi a0, a0, %lo(g) |
| ; RV64ZICBOP-NEXT: prefetch.r -2048(a0) |
| ; RV64ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOPZIHINTNTL-LABEL: test_prefetch_global_6: |
| ; RV64ZICBOPZIHINTNTL: # %bb.0: |
| ; RV64ZICBOPZIHINTNTL-NEXT: lui a0, %hi(g) |
| ; RV64ZICBOPZIHINTNTL-NEXT: addi a0, a0, %lo(g) |
| ; RV64ZICBOPZIHINTNTL-NEXT: ntl.all |
| ; RV64ZICBOPZIHINTNTL-NEXT: prefetch.r -2048(a0) |
| ; RV64ZICBOPZIHINTNTL-NEXT: ret |
| %ptr = getelementptr [1024 x i32], ptr @g, i32 0, i32 -512 |
| call void @llvm.prefetch(ptr %ptr, i32 0, i32 0, i32 1) |
| ret void |
| } |
| |
| define void @test_prefetch_global_7() nounwind { |
| ; RV32I-LABEL: test_prefetch_global_7: |
| ; RV32I: # %bb.0: |
| ; RV32I-NEXT: ret |
| ; |
| ; RV64I-LABEL: test_prefetch_global_7: |
| ; RV64I: # %bb.0: |
| ; RV64I-NEXT: ret |
| ; |
| ; RV32ZICBOP-LABEL: test_prefetch_global_7: |
| ; RV32ZICBOP: # %bb.0: |
| ; RV32ZICBOP-NEXT: lui a0, %hi(g+2020) |
| ; RV32ZICBOP-NEXT: addi a0, a0, %lo(g+2020) |
| ; RV32ZICBOP-NEXT: prefetch.r 0(a0) |
| ; RV32ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOP-LABEL: test_prefetch_global_7: |
| ; RV64ZICBOP: # %bb.0: |
| ; RV64ZICBOP-NEXT: lui a0, %hi(g+2020) |
| ; RV64ZICBOP-NEXT: addi a0, a0, %lo(g+2020) |
| ; RV64ZICBOP-NEXT: prefetch.r 0(a0) |
| ; RV64ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOPZIHINTNTL-LABEL: test_prefetch_global_7: |
| ; RV64ZICBOPZIHINTNTL: # %bb.0: |
| ; RV64ZICBOPZIHINTNTL-NEXT: lui a0, %hi(g+2020) |
| ; RV64ZICBOPZIHINTNTL-NEXT: addi a0, a0, %lo(g+2020) |
| ; RV64ZICBOPZIHINTNTL-NEXT: ntl.all |
| ; RV64ZICBOPZIHINTNTL-NEXT: prefetch.r 0(a0) |
| ; RV64ZICBOPZIHINTNTL-NEXT: ret |
| %ptr = getelementptr [1024 x i32], ptr @g, i32 0, i32 505 |
| call void @llvm.prefetch(ptr %ptr, i32 0, i32 0, i32 1) |
| ret void |
| } |
| |
| define void @test_prefetch_global_8() nounwind { |
| ; RV32I-LABEL: test_prefetch_global_8: |
| ; RV32I: # %bb.0: |
| ; RV32I-NEXT: ret |
| ; |
| ; RV64I-LABEL: test_prefetch_global_8: |
| ; RV64I: # %bb.0: |
| ; RV64I-NEXT: ret |
| ; |
| ; RV32ZICBOP-LABEL: test_prefetch_global_8: |
| ; RV32ZICBOP: # %bb.0: |
| ; RV32ZICBOP-NEXT: lui a0, %hi(g-4) |
| ; RV32ZICBOP-NEXT: addi a0, a0, %lo(g-4) |
| ; RV32ZICBOP-NEXT: prefetch.r -2048(a0) |
| ; RV32ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOP-LABEL: test_prefetch_global_8: |
| ; RV64ZICBOP: # %bb.0: |
| ; RV64ZICBOP-NEXT: lui a0, %hi(g-4) |
| ; RV64ZICBOP-NEXT: addi a0, a0, %lo(g-4) |
| ; RV64ZICBOP-NEXT: prefetch.r -2048(a0) |
| ; RV64ZICBOP-NEXT: ret |
| ; |
| ; RV64ZICBOPZIHINTNTL-LABEL: test_prefetch_global_8: |
| ; RV64ZICBOPZIHINTNTL: # %bb.0: |
| ; RV64ZICBOPZIHINTNTL-NEXT: lui a0, %hi(g-4) |
| ; RV64ZICBOPZIHINTNTL-NEXT: addi a0, a0, %lo(g-4) |
| ; RV64ZICBOPZIHINTNTL-NEXT: ntl.all |
| ; RV64ZICBOPZIHINTNTL-NEXT: prefetch.r -2048(a0) |
| ; RV64ZICBOPZIHINTNTL-NEXT: ret |
| %ptr = getelementptr [1024 x i32], ptr @g, i32 0, i32 -513 |
| call void @llvm.prefetch(ptr %ptr, i32 0, i32 0, i32 1) |
| ret void |
| } |