148 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 52; RUN: llc -mtriple=aarch64 < %s | FileCheck %s3 4define void @imm9(ptr %object) {5; CHECK-LABEL: imm9:6; CHECK: // %bb.0:7; CHECK-NEXT: prfum pldl1keep, [x0, #7]8; CHECK-NEXT: ret9 %incdec.ptr = getelementptr inbounds i8, ptr %object, i64 710 call void @llvm.prefetch.p0(ptr %incdec.ptr, i32 0, i32 3, i32 1)11 ret void12}13 14define void @imm9_max(ptr %object) {15; CHECK-LABEL: imm9_max:16; CHECK: // %bb.0:17; CHECK-NEXT: prfum pldl1keep, [x0, #255]18; CHECK-NEXT: ret19 %incdec.ptr = getelementptr inbounds i8, ptr %object, i64 25520 call void @llvm.prefetch.p0(ptr %incdec.ptr, i32 0, i32 3, i32 1)21 ret void22}23 24define void @imm9_above_max(ptr %object) {25; CHECK-LABEL: imm9_above_max:26; CHECK: // %bb.0:27; CHECK-NEXT: add x8, x0, #25728; CHECK-NEXT: prfm pldl1keep, [x8]29; CHECK-NEXT: ret30 %incdec.ptr = getelementptr inbounds i8, ptr %object, i64 257 ; 256 would use the imm12 mode31 call void @llvm.prefetch.p0(ptr %incdec.ptr, i32 0, i32 3, i32 1)32 ret void33}34 35define void @imm9_min(ptr %object) {36; CHECK-LABEL: imm9_min:37; CHECK: // %bb.0:38; CHECK-NEXT: prfum pldl1keep, [x0, #-256]39; CHECK-NEXT: ret40 %incdec.ptr = getelementptr inbounds i8, ptr %object, i64 -25641 call void @llvm.prefetch.p0(ptr %incdec.ptr, i32 0, i32 3, i32 1)42 ret void43}44 45define void @imm9_below_min(ptr %object) {46; CHECK-LABEL: imm9_below_min:47; CHECK: // %bb.0:48; CHECK-NEXT: sub x8, x0, #25749; CHECK-NEXT: prfm pldl1keep, [x8]50; CHECK-NEXT: ret51 %incdec.ptr = getelementptr inbounds i8, ptr %object, i64 -25752 call void @llvm.prefetch.p0(ptr %incdec.ptr, i32 0, i32 3, i32 1)53 ret void54}55 56define void @imm12(ptr %object) {57; CHECK-LABEL: imm12:58; CHECK: // %bb.0:59; CHECK-NEXT: prfm pldl1keep, [x0, #8]60; CHECK-NEXT: ret61 %incdec.ptr = getelementptr inbounds i64, ptr %object, i64 162 call void @llvm.prefetch.p0(ptr %incdec.ptr, i32 0, i32 3, i32 1)63 ret void64}65 66define void @imm12_max(ptr %object) {67; CHECK-LABEL: imm12_max:68; CHECK: // %bb.0:69; CHECK-NEXT: prfm pldl1keep, [x0, #32760]70; CHECK-NEXT: ret71 %incdec.ptr = getelementptr inbounds i64, ptr %object, i64 409572 call void @llvm.prefetch.p0(ptr %incdec.ptr, i32 0, i32 3, i32 1)73 ret void74}75 76define void @imm12_above_max(ptr %object) {77; CHECK-LABEL: imm12_above_max:78; CHECK: // %bb.0:79; CHECK-NEXT: mov w8, #32768 // =0x800080; CHECK-NEXT: prfm pldl1keep, [x0, x8]81; CHECK-NEXT: ret82 %incdec.ptr = getelementptr inbounds i64, ptr %object, i64 409683 call void @llvm.prefetch.p0(ptr %incdec.ptr, i32 0, i32 3, i32 1)84 ret void85}86 87define void @reg(ptr %object, i64 %a) {88; CHECK-LABEL: reg:89; CHECK: // %bb.0:90; CHECK-NEXT: prfm pldl1keep, [x0, x1]91; CHECK-NEXT: ret92 %incdec.ptr = getelementptr inbounds i8, ptr %object, i64 %a93 call void @llvm.prefetch.p0(ptr %incdec.ptr, i32 0, i32 3, i32 1)94 ret void95}96 97define void @reg_shift(ptr %object, i64 %a) {98; CHECK-LABEL: reg_shift:99; CHECK: // %bb.0:100; CHECK-NEXT: prfm pldl1keep, [x0, x1, lsl #3]101; CHECK-NEXT: ret102 %incdec.ptr = getelementptr inbounds i64, ptr %object, i64 %a103 call void @llvm.prefetch.p0(ptr %incdec.ptr, i32 0, i32 3, i32 1)104 ret void105}106 107define void @reg_sext(ptr %object, i32 %a) {108; CHECK-LABEL: reg_sext:109; CHECK: // %bb.0:110; CHECK-NEXT: prfm pldl1keep, [x0, w1, sxtw]111; CHECK-NEXT: ret112 %incdec.ptr = getelementptr inbounds i8, ptr %object, i32 %a113 call void @llvm.prefetch.p0(ptr %incdec.ptr, i32 0, i32 3, i32 1)114 ret void115}116 117define void @reg_sext_shift(ptr %object, i32 %a) {118; CHECK-LABEL: reg_sext_shift:119; CHECK: // %bb.0:120; CHECK-NEXT: prfm pldl1keep, [x0, w1, sxtw #3]121; CHECK-NEXT: ret122 %incdec.ptr = getelementptr inbounds i64, ptr %object, i32 %a123 call void @llvm.prefetch.p0(ptr %incdec.ptr, i32 0, i32 3, i32 1)124 ret void125}126 127define void @reg_zext(ptr %object, i32 %a) {128; CHECK-LABEL: reg_zext:129; CHECK: // %bb.0:130; CHECK-NEXT: prfm pldl1keep, [x0, w1, uxtw]131; CHECK-NEXT: ret132 %a.zext = zext i32 %a to i64133 %incdec.ptr = getelementptr inbounds i8, ptr %object, i64 %a.zext134 call void @llvm.prefetch.p0(ptr %incdec.ptr, i32 0, i32 3, i32 1)135 ret void136}137 138define void @reg_zext_shift(ptr %object, i32 %a) {139; CHECK-LABEL: reg_zext_shift:140; CHECK: // %bb.0:141; CHECK-NEXT: prfm pldl1keep, [x0, w1, uxtw #3]142; CHECK-NEXT: ret143 %a.zext = zext i32 %a to i64144 %incdec.ptr = getelementptr inbounds i64, ptr %object, i64 %a.zext145 call void @llvm.prefetch.p0(ptr %incdec.ptr, i32 0, i32 3, i32 1)146 ret void147}148