386 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc -mtriple=hexagon < %s | FileCheck %s3 4define void @f0(ptr %a0, ptr %a1) #0 {5; CHECK-LABEL: f0:6; CHECK: // %bb.0:7; CHECK-NEXT: {8; CHECK-NEXT: jumpr r319; CHECK-NEXT: v0.cur = vmem(r0+#1)10; CHECK-NEXT: vmem(r1+#2) = v011; CHECK-NEXT: }12 %v0 = getelementptr <128 x i8>, ptr %a0, i32 113 %v1 = load <128 x i8>, ptr %v0, align 12814 %v2 = getelementptr <128 x i8>, ptr %a1, i32 215 store <128 x i8> %v1, ptr %v2, align 12816 ret void17}18 19define void @f1(ptr %a0, ptr %a1) #0 {20; CHECK-LABEL: f1:21; CHECK: // %bb.0:22; CHECK-NEXT: {23; CHECK-NEXT: jumpr r3124; CHECK-NEXT: v0.cur = vmem(r0+#1)25; CHECK-NEXT: vmem(r1+#2) = v026; CHECK-NEXT: }27 %v0 = getelementptr <64 x i16>, ptr %a0, i32 128 %v1 = load <64 x i16>, ptr %v0, align 12829 %v2 = getelementptr <64 x i16>, ptr %a1, i32 230 store <64 x i16> %v1, ptr %v2, align 12831 ret void32}33 34define void @f2(ptr %a0, ptr %a1) #0 {35; CHECK-LABEL: f2:36; CHECK: // %bb.0:37; CHECK-NEXT: {38; CHECK-NEXT: jumpr r3139; CHECK-NEXT: v0.cur = vmem(r0+#1)40; CHECK-NEXT: vmem(r1+#2) = v041; CHECK-NEXT: }42 %v0 = getelementptr <32 x i32>, ptr %a0, i32 143 %v1 = load <32 x i32>, ptr %v0, align 12844 %v2 = getelementptr <32 x i32>, ptr %a1, i32 245 store <32 x i32> %v1, ptr %v2, align 12846 ret void47}48 49define void @f3(ptr %a0, ptr %a1) #0 {50; CHECK-LABEL: f3:51; CHECK: // %bb.0:52; CHECK-NEXT: {53; CHECK-NEXT: jumpr r3154; CHECK-NEXT: v0.cur = vmem(r0+#1)55; CHECK-NEXT: vmem(r1+#2) = v056; CHECK-NEXT: }57 %v0 = getelementptr <64 x half>, ptr %a0, i32 158 %v1 = load <64 x half>, ptr %v0, align 12859 %v2 = getelementptr <64 x half>, ptr %a1, i32 260 store <64 x half> %v1, ptr %v2, align 12861 ret void62}63 64define void @f4(ptr %a0, ptr %a1) #0 {65; CHECK-LABEL: f4:66; CHECK: // %bb.0:67; CHECK-NEXT: {68; CHECK-NEXT: jumpr r3169; CHECK-NEXT: v0.cur = vmem(r0+#1)70; CHECK-NEXT: vmem(r1+#2) = v071; CHECK-NEXT: }72 %v0 = getelementptr <32 x float>, ptr %a0, i32 173 %v1 = load <32 x float>, ptr %v0, align 12874 %v2 = getelementptr <32 x float>, ptr %a1, i32 275 store <32 x float> %v1, ptr %v2, align 12876 ret void77}78 79define void @f5(ptr %a0, ptr %a1) #0 {80; CHECK-LABEL: f5:81; CHECK: // %bb.0:82; CHECK-NEXT: {83; CHECK-NEXT: v0 = vmemu(r0+#1)84; CHECK-NEXT: }85; CHECK-NEXT: {86; CHECK-NEXT: jumpr r3187; CHECK-NEXT: vmemu(r1+#2) = v088; CHECK-NEXT: }89 %v0 = getelementptr <128 x i8>, ptr %a0, i32 190 %v1 = load <128 x i8>, ptr %v0, align 191 %v2 = getelementptr <128 x i8>, ptr %a1, i32 292 store <128 x i8> %v1, ptr %v2, align 193 ret void94}95 96define void @f6(ptr %a0, ptr %a1) #0 {97; CHECK-LABEL: f6:98; CHECK: // %bb.0:99; CHECK-NEXT: {100; CHECK-NEXT: v0 = vmemu(r0+#1)101; CHECK-NEXT: }102; CHECK-NEXT: {103; CHECK-NEXT: jumpr r31104; CHECK-NEXT: vmemu(r1+#2) = v0105; CHECK-NEXT: }106 %v0 = getelementptr <64 x i16>, ptr %a0, i32 1107 %v1 = load <64 x i16>, ptr %v0, align 1108 %v2 = getelementptr <64 x i16>, ptr %a1, i32 2109 store <64 x i16> %v1, ptr %v2, align 1110 ret void111}112 113define void @f7(ptr %a0, ptr %a1) #0 {114; CHECK-LABEL: f7:115; CHECK: // %bb.0:116; CHECK-NEXT: {117; CHECK-NEXT: v0 = vmemu(r0+#1)118; CHECK-NEXT: }119; CHECK-NEXT: {120; CHECK-NEXT: jumpr r31121; CHECK-NEXT: vmemu(r1+#2) = v0122; CHECK-NEXT: }123 %v0 = getelementptr <32 x i32>, ptr %a0, i32 1124 %v1 = load <32 x i32>, ptr %v0, align 1125 %v2 = getelementptr <32 x i32>, ptr %a1, i32 2126 store <32 x i32> %v1, ptr %v2, align 1127 ret void128}129 130define void @f8(ptr %a0, ptr %a1) #0 {131; CHECK-LABEL: f8:132; CHECK: // %bb.0:133; CHECK-NEXT: {134; CHECK-NEXT: v0 = vmemu(r0+#1)135; CHECK-NEXT: }136; CHECK-NEXT: {137; CHECK-NEXT: jumpr r31138; CHECK-NEXT: vmemu(r1+#2) = v0139; CHECK-NEXT: }140 %v0 = getelementptr <64 x half>, ptr %a0, i32 1141 %v1 = load <64 x half>, ptr %v0, align 1142 %v2 = getelementptr <64 x half>, ptr %a1, i32 2143 store <64 x half> %v1, ptr %v2, align 1144 ret void145}146 147define void @f9(ptr %a0, ptr %a1) #0 {148; CHECK-LABEL: f9:149; CHECK: // %bb.0:150; CHECK-NEXT: {151; CHECK-NEXT: v0 = vmemu(r0+#1)152; CHECK-NEXT: }153; CHECK-NEXT: {154; CHECK-NEXT: jumpr r31155; CHECK-NEXT: vmemu(r1+#2) = v0156; CHECK-NEXT: }157 %v0 = getelementptr <32 x float>, ptr %a0, i32 1158 %v1 = load <32 x float>, ptr %v0, align 1159 %v2 = getelementptr <32 x float>, ptr %a1, i32 2160 store <32 x float> %v1, ptr %v2, align 1161 ret void162}163 164define void @f10(ptr %a0, ptr %a1) #0 {165; CHECK-LABEL: f10:166; CHECK: // %bb.0:167; CHECK-NEXT: {168; CHECK-NEXT: v0 = vmem(r0+#2)169; CHECK-NEXT: }170; CHECK-NEXT: {171; CHECK-NEXT: v1.cur = vmem(r0+#3)172; CHECK-NEXT: vmem(r1+#5) = v1173; CHECK-NEXT: }174; CHECK-NEXT: {175; CHECK-NEXT: jumpr r31176; CHECK-NEXT: vmem(r1+#4) = v0177; CHECK-NEXT: }178 %v0 = getelementptr <256 x i8>, ptr %a0, i32 1179 %v1 = load <256 x i8>, ptr %v0, align 128180 %v2 = getelementptr <256 x i8>, ptr %a1, i32 2181 store <256 x i8> %v1, ptr %v2, align 128182 ret void183}184 185define void @f11(ptr %a0, ptr %a1) #0 {186; CHECK-LABEL: f11:187; CHECK: // %bb.0:188; CHECK-NEXT: {189; CHECK-NEXT: v0 = vmem(r0+#2)190; CHECK-NEXT: }191; CHECK-NEXT: {192; CHECK-NEXT: v1.cur = vmem(r0+#3)193; CHECK-NEXT: vmem(r1+#5) = v1194; CHECK-NEXT: }195; CHECK-NEXT: {196; CHECK-NEXT: jumpr r31197; CHECK-NEXT: vmem(r1+#4) = v0198; CHECK-NEXT: }199 %v0 = getelementptr <128 x i16>, ptr %a0, i32 1200 %v1 = load <128 x i16>, ptr %v0, align 128201 %v2 = getelementptr <128 x i16>, ptr %a1, i32 2202 store <128 x i16> %v1, ptr %v2, align 128203 ret void204}205 206define void @f12(ptr %a0, ptr %a1) #0 {207; CHECK-LABEL: f12:208; CHECK: // %bb.0:209; CHECK-NEXT: {210; CHECK-NEXT: v0 = vmem(r0+#2)211; CHECK-NEXT: }212; CHECK-NEXT: {213; CHECK-NEXT: v1.cur = vmem(r0+#3)214; CHECK-NEXT: vmem(r1+#5) = v1215; CHECK-NEXT: }216; CHECK-NEXT: {217; CHECK-NEXT: jumpr r31218; CHECK-NEXT: vmem(r1+#4) = v0219; CHECK-NEXT: }220 %v0 = getelementptr <64 x i32>, ptr %a0, i32 1221 %v1 = load <64 x i32>, ptr %v0, align 128222 %v2 = getelementptr <64 x i32>, ptr %a1, i32 2223 store <64 x i32> %v1, ptr %v2, align 128224 ret void225}226 227define void @f13(ptr %a0, ptr %a1) #0 {228; CHECK-LABEL: f13:229; CHECK: // %bb.0:230; CHECK-NEXT: {231; CHECK-NEXT: v0 = vmem(r0+#2)232; CHECK-NEXT: }233; CHECK-NEXT: {234; CHECK-NEXT: v1.cur = vmem(r0+#3)235; CHECK-NEXT: vmem(r1+#5) = v1236; CHECK-NEXT: }237; CHECK-NEXT: {238; CHECK-NEXT: jumpr r31239; CHECK-NEXT: vmem(r1+#4) = v0240; CHECK-NEXT: }241 %v0 = getelementptr <128 x half>, ptr %a0, i32 1242 %v1 = load <128 x half>, ptr %v0, align 128243 %v2 = getelementptr <128 x half>, ptr %a1, i32 2244 store <128 x half> %v1, ptr %v2, align 128245 ret void246}247 248define void @f14(ptr %a0, ptr %a1) #0 {249; CHECK-LABEL: f14:250; CHECK: // %bb.0:251; CHECK-NEXT: {252; CHECK-NEXT: v0 = vmem(r0+#2)253; CHECK-NEXT: }254; CHECK-NEXT: {255; CHECK-NEXT: v1.cur = vmem(r0+#3)256; CHECK-NEXT: vmem(r1+#5) = v1257; CHECK-NEXT: }258; CHECK-NEXT: {259; CHECK-NEXT: jumpr r31260; CHECK-NEXT: vmem(r1+#4) = v0261; CHECK-NEXT: }262 %v0 = getelementptr <64 x float>, ptr %a0, i32 1263 %v1 = load <64 x float>, ptr %v0, align 128264 %v2 = getelementptr <64 x float>, ptr %a1, i32 2265 store <64 x float> %v1, ptr %v2, align 128266 ret void267}268 269define void @f15(ptr %a0, ptr %a1) #0 {270; CHECK-LABEL: f15:271; CHECK: // %bb.0:272; CHECK-NEXT: {273; CHECK-NEXT: v0 = vmemu(r0+#3)274; CHECK-NEXT: }275; CHECK-NEXT: {276; CHECK-NEXT: v1 = vmemu(r0+#2)277; CHECK-NEXT: }278; CHECK-NEXT: {279; CHECK-NEXT: vmemu(r1+#5) = v0280; CHECK-NEXT: }281; CHECK-NEXT: {282; CHECK-NEXT: jumpr r31283; CHECK-NEXT: vmemu(r1+#4) = v1284; CHECK-NEXT: }285 %v0 = getelementptr <256 x i8>, ptr %a0, i32 1286 %v1 = load <256 x i8>, ptr %v0, align 1287 %v2 = getelementptr <256 x i8>, ptr %a1, i32 2288 store <256 x i8> %v1, ptr %v2, align 1289 ret void290}291 292define void @f16(ptr %a0, ptr %a1) #0 {293; CHECK-LABEL: f16:294; CHECK: // %bb.0:295; CHECK-NEXT: {296; CHECK-NEXT: v0 = vmemu(r0+#3)297; CHECK-NEXT: }298; CHECK-NEXT: {299; CHECK-NEXT: v1 = vmemu(r0+#2)300; CHECK-NEXT: }301; CHECK-NEXT: {302; CHECK-NEXT: vmemu(r1+#5) = v0303; CHECK-NEXT: }304; CHECK-NEXT: {305; CHECK-NEXT: jumpr r31306; CHECK-NEXT: vmemu(r1+#4) = v1307; CHECK-NEXT: }308 %v0 = getelementptr <128 x i16>, ptr %a0, i32 1309 %v1 = load <128 x i16>, ptr %v0, align 1310 %v2 = getelementptr <128 x i16>, ptr %a1, i32 2311 store <128 x i16> %v1, ptr %v2, align 1312 ret void313}314 315define void @f17(ptr %a0, ptr %a1) #0 {316; CHECK-LABEL: f17:317; CHECK: // %bb.0:318; CHECK-NEXT: {319; CHECK-NEXT: v0 = vmemu(r0+#3)320; CHECK-NEXT: }321; CHECK-NEXT: {322; CHECK-NEXT: v1 = vmemu(r0+#2)323; CHECK-NEXT: }324; CHECK-NEXT: {325; CHECK-NEXT: vmemu(r1+#5) = v0326; CHECK-NEXT: }327; CHECK-NEXT: {328; CHECK-NEXT: jumpr r31329; CHECK-NEXT: vmemu(r1+#4) = v1330; CHECK-NEXT: }331 %v0 = getelementptr <64 x i32>, ptr %a0, i32 1332 %v1 = load <64 x i32>, ptr %v0, align 1333 %v2 = getelementptr <64 x i32>, ptr %a1, i32 2334 store <64 x i32> %v1, ptr %v2, align 1335 ret void336}337 338define void @f18(ptr %a0, ptr %a1) #0 {339; CHECK-LABEL: f18:340; CHECK: // %bb.0:341; CHECK-NEXT: {342; CHECK-NEXT: v0 = vmemu(r0+#3)343; CHECK-NEXT: }344; CHECK-NEXT: {345; CHECK-NEXT: v1 = vmemu(r0+#2)346; CHECK-NEXT: }347; CHECK-NEXT: {348; CHECK-NEXT: vmemu(r1+#5) = v0349; CHECK-NEXT: }350; CHECK-NEXT: {351; CHECK-NEXT: jumpr r31352; CHECK-NEXT: vmemu(r1+#4) = v1353; CHECK-NEXT: }354 %v0 = getelementptr <128 x half>, ptr %a0, i32 1355 %v1 = load <128 x half>, ptr %v0, align 1356 %v2 = getelementptr <128 x half>, ptr %a1, i32 2357 store <128 x half> %v1, ptr %v2, align 1358 ret void359}360 361define void @f19(ptr %a0, ptr %a1) #0 {362; CHECK-LABEL: f19:363; CHECK: // %bb.0:364; CHECK-NEXT: {365; CHECK-NEXT: v0 = vmemu(r0+#3)366; CHECK-NEXT: }367; CHECK-NEXT: {368; CHECK-NEXT: v1 = vmemu(r0+#2)369; CHECK-NEXT: }370; CHECK-NEXT: {371; CHECK-NEXT: vmemu(r1+#5) = v0372; CHECK-NEXT: }373; CHECK-NEXT: {374; CHECK-NEXT: jumpr r31375; CHECK-NEXT: vmemu(r1+#4) = v1376; CHECK-NEXT: }377 %v0 = getelementptr <64 x float>, ptr %a0, i32 1378 %v1 = load <64 x float>, ptr %v0, align 1379 %v2 = getelementptr <64 x float>, ptr %a1, i32 2380 store <64 x float> %v1, ptr %v2, align 1381 ret void382}383 384 385attributes #0 = { nounwind "target-cpu"="hexagonv69" "target-features"="+hvxv69,+hvx-length128b,+hvx-qfloat" }386