1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -march=hexagon < %s | FileCheck %s 3 4define void @f0(<128 x i8>* %a0, <128 x i8>* %a1) #0 { 5; CHECK-LABEL: f0: 6; CHECK: // %bb.0: 7; CHECK-NEXT: { 8; CHECK-NEXT: jumpr r31 9; CHECK-NEXT: v0.cur = vmem(r0+#1) 10; CHECK-NEXT: vmem(r1+#2) = v0 11; CHECK-NEXT: } 12 %v0 = getelementptr <128 x i8>, <128 x i8>* %a0, i32 1 13 %v1 = load <128 x i8>, <128 x i8>* %v0, align 128 14 %v2 = getelementptr <128 x i8>, <128 x i8>* %a1, i32 2 15 store <128 x i8> %v1, <128 x i8>* %v2, align 128 16 ret void 17} 18 19define void @f1(<64 x i16>* %a0, <64 x i16>* %a1) #0 { 20; CHECK-LABEL: f1: 21; CHECK: // %bb.0: 22; CHECK-NEXT: { 23; CHECK-NEXT: jumpr r31 24; CHECK-NEXT: v0.cur = vmem(r0+#1) 25; CHECK-NEXT: vmem(r1+#2) = v0 26; CHECK-NEXT: } 27 %v0 = getelementptr <64 x i16>, <64 x i16>* %a0, i32 1 28 %v1 = load <64 x i16>, <64 x i16>* %v0, align 128 29 %v2 = getelementptr <64 x i16>, <64 x i16>* %a1, i32 2 30 store <64 x i16> %v1, <64 x i16>* %v2, align 128 31 ret void 32} 33 34define void @f2(<32 x i32>* %a0, <32 x i32>* %a1) #0 { 35; CHECK-LABEL: f2: 36; CHECK: // %bb.0: 37; CHECK-NEXT: { 38; CHECK-NEXT: jumpr r31 39; CHECK-NEXT: v0.cur = vmem(r0+#1) 40; CHECK-NEXT: vmem(r1+#2) = v0 41; CHECK-NEXT: } 42 %v0 = getelementptr <32 x i32>, <32 x i32>* %a0, i32 1 43 %v1 = load <32 x i32>, <32 x i32>* %v0, align 128 44 %v2 = getelementptr <32 x i32>, <32 x i32>* %a1, i32 2 45 store <32 x i32> %v1, <32 x i32>* %v2, align 128 46 ret void 47} 48 49define void @f3(<64 x half>* %a0, <64 x half>* %a1) #0 { 50; CHECK-LABEL: f3: 51; CHECK: // %bb.0: 52; CHECK-NEXT: { 53; CHECK-NEXT: jumpr r31 54; CHECK-NEXT: v0.cur = vmem(r0+#1) 55; CHECK-NEXT: vmem(r1+#2) = v0 56; CHECK-NEXT: } 57 %v0 = getelementptr <64 x half>, <64 x half>* %a0, i32 1 58 %v1 = load <64 x half>, <64 x half>* %v0, align 128 59 %v2 = getelementptr <64 x half>, <64 x half>* %a1, i32 2 60 store <64 x half> %v1, <64 x half>* %v2, align 128 61 ret void 62} 63 64define void @f4(<32 x float>* %a0, <32 x float>* %a1) #0 { 65; CHECK-LABEL: f4: 66; CHECK: // %bb.0: 67; CHECK-NEXT: { 68; CHECK-NEXT: jumpr r31 69; CHECK-NEXT: v0.cur = vmem(r0+#1) 70; CHECK-NEXT: vmem(r1+#2) = v0 71; CHECK-NEXT: } 72 %v0 = getelementptr <32 x float>, <32 x float>* %a0, i32 1 73 %v1 = load <32 x float>, <32 x float>* %v0, align 128 74 %v2 = getelementptr <32 x float>, <32 x float>* %a1, i32 2 75 store <32 x float> %v1, <32 x float>* %v2, align 128 76 ret void 77} 78 79define void @f5(<128 x i8>* %a0, <128 x i8>* %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 r31 87; CHECK-NEXT: vmemu(r1+#2) = v0 88; CHECK-NEXT: } 89 %v0 = getelementptr <128 x i8>, <128 x i8>* %a0, i32 1 90 %v1 = load <128 x i8>, <128 x i8>* %v0, align 1 91 %v2 = getelementptr <128 x i8>, <128 x i8>* %a1, i32 2 92 store <128 x i8> %v1, <128 x i8>* %v2, align 1 93 ret void 94} 95 96define void @f6(<64 x i16>* %a0, <64 x i16>* %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 r31 104; CHECK-NEXT: vmemu(r1+#2) = v0 105; CHECK-NEXT: } 106 %v0 = getelementptr <64 x i16>, <64 x i16>* %a0, i32 1 107 %v1 = load <64 x i16>, <64 x i16>* %v0, align 1 108 %v2 = getelementptr <64 x i16>, <64 x i16>* %a1, i32 2 109 store <64 x i16> %v1, <64 x i16>* %v2, align 1 110 ret void 111} 112 113define void @f7(<32 x i32>* %a0, <32 x i32>* %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 r31 121; CHECK-NEXT: vmemu(r1+#2) = v0 122; CHECK-NEXT: } 123 %v0 = getelementptr <32 x i32>, <32 x i32>* %a0, i32 1 124 %v1 = load <32 x i32>, <32 x i32>* %v0, align 1 125 %v2 = getelementptr <32 x i32>, <32 x i32>* %a1, i32 2 126 store <32 x i32> %v1, <32 x i32>* %v2, align 1 127 ret void 128} 129 130define void @f8(<64 x half>* %a0, <64 x half>* %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 r31 138; CHECK-NEXT: vmemu(r1+#2) = v0 139; CHECK-NEXT: } 140 %v0 = getelementptr <64 x half>, <64 x half>* %a0, i32 1 141 %v1 = load <64 x half>, <64 x half>* %v0, align 1 142 %v2 = getelementptr <64 x half>, <64 x half>* %a1, i32 2 143 store <64 x half> %v1, <64 x half>* %v2, align 1 144 ret void 145} 146 147define void @f9(<32 x float>* %a0, <32 x float>* %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 r31 155; CHECK-NEXT: vmemu(r1+#2) = v0 156; CHECK-NEXT: } 157 %v0 = getelementptr <32 x float>, <32 x float>* %a0, i32 1 158 %v1 = load <32 x float>, <32 x float>* %v0, align 1 159 %v2 = getelementptr <32 x float>, <32 x float>* %a1, i32 2 160 store <32 x float> %v1, <32 x float>* %v2, align 1 161 ret void 162} 163 164attributes #0 = { nounwind "target-cpu"="hexagonv69" "target-features"="+hvxv69,+hvx-length128b,+hvx-qfloat" } 165