1*0f903015SKrzysztof Parzyszek; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2*0f903015SKrzysztof Parzyszek; RUN: llc -march=hexagon < %s | FileCheck %s 3*0f903015SKrzysztof Parzyszek 4*0f903015SKrzysztof Parzyszek; Function Attrs: nounwind 5*0f903015SKrzysztof Parzyszekdefine <32 x i32> @f0(i8* %a0, i32 %a1) #0 { 6*0f903015SKrzysztof Parzyszek; CHECK-LABEL: f0: 7*0f903015SKrzysztof Parzyszek; CHECK: // %bb.0: // %b0 8*0f903015SKrzysztof Parzyszek; CHECK-NEXT: { 9*0f903015SKrzysztof Parzyszek; CHECK-NEXT: r0 = add(r1,r0) 10*0f903015SKrzysztof Parzyszek; CHECK-NEXT: } 11*0f903015SKrzysztof Parzyszek; CHECK-NEXT: { 12*0f903015SKrzysztof Parzyszek; CHECK-NEXT: r7 = #8 13*0f903015SKrzysztof Parzyszek; CHECK-NEXT: } 14*0f903015SKrzysztof Parzyszek; CHECK-NEXT: { 15*0f903015SKrzysztof Parzyszek; CHECK-NEXT: r4 = ##.LCPI0_0 16*0f903015SKrzysztof Parzyszek; CHECK-NEXT: } 17*0f903015SKrzysztof Parzyszek; CHECK-NEXT: { 18*0f903015SKrzysztof Parzyszek; CHECK-NEXT: r2 = #-1 19*0f903015SKrzysztof Parzyszek; CHECK-NEXT: } 20*0f903015SKrzysztof Parzyszek; CHECK-NEXT: { 21*0f903015SKrzysztof Parzyszek; CHECK-NEXT: v0 = vmem(r0+#1) 22*0f903015SKrzysztof Parzyszek; CHECK-NEXT: } 23*0f903015SKrzysztof Parzyszek; CHECK-NEXT: { 24*0f903015SKrzysztof Parzyszek; CHECK-NEXT: v1 = vmem(r0+#2) 25*0f903015SKrzysztof Parzyszek; CHECK-NEXT: } 26*0f903015SKrzysztof Parzyszek; CHECK-NEXT: { 27*0f903015SKrzysztof Parzyszek; CHECK-NEXT: r0 = add(r0,#128) 28*0f903015SKrzysztof Parzyszek; CHECK-NEXT: } 29*0f903015SKrzysztof Parzyszek; CHECK-NEXT: { 30*0f903015SKrzysztof Parzyszek; CHECK-NEXT: v1 = valign(v1,v0,r7) 31*0f903015SKrzysztof Parzyszek; CHECK-NEXT: } 32*0f903015SKrzysztof Parzyszek; CHECK-NEXT: { 33*0f903015SKrzysztof Parzyszek; CHECK-NEXT: v2 = vmem(r4+#0) 34*0f903015SKrzysztof Parzyszek; CHECK-NEXT: } 35*0f903015SKrzysztof Parzyszek; CHECK-NEXT: { 36*0f903015SKrzysztof Parzyszek; CHECK-NEXT: q0 = vand(v2,r2) 37*0f903015SKrzysztof Parzyszek; CHECK-NEXT: } 38*0f903015SKrzysztof Parzyszek; CHECK-NEXT: { 39*0f903015SKrzysztof Parzyszek; CHECK-NEXT: v0.w = vadd(v0.w,v1.w) 40*0f903015SKrzysztof Parzyszek; CHECK-NEXT: } 41*0f903015SKrzysztof Parzyszek; CHECK-NEXT: { 42*0f903015SKrzysztof Parzyszek; CHECK-NEXT: if (q0) vmem(r0+#0) = v0 43*0f903015SKrzysztof Parzyszek; CHECK-NEXT: } 44*0f903015SKrzysztof Parzyszek; CHECK-NEXT: { 45*0f903015SKrzysztof Parzyszek; CHECK-NEXT: jumpr r31 46*0f903015SKrzysztof Parzyszek; CHECK-NEXT: } 47*0f903015SKrzysztof Parzyszekb0: 48*0f903015SKrzysztof Parzyszek %v0 = add i32 %a1, 128 49*0f903015SKrzysztof Parzyszek %v1 = getelementptr i8, i8* %a0, i32 %v0 50*0f903015SKrzysztof Parzyszek %v2 = bitcast i8* %v1 to <32 x i32>* 51*0f903015SKrzysztof Parzyszek %v3 = tail call <32 x i32> @llvm.masked.load.v32i32.p0v32i32(<32 x i32>* %v2, i32 128, <32 x i1> <i1 true, i1 true, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false>, <32 x i32> undef) 52*0f903015SKrzysztof Parzyszek %v4 = add i32 %a1, 136 53*0f903015SKrzysztof Parzyszek %v5 = getelementptr i8, i8* %a0, i32 %v4 54*0f903015SKrzysztof Parzyszek %v6 = bitcast i8* %v5 to <32 x i32>* 55*0f903015SKrzysztof Parzyszek %v7 = tail call <32 x i32> @llvm.masked.load.v32i32.p0v32i32(<32 x i32>* %v6, i32 8, <32 x i1> <i1 true, i1 true, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false>, <32 x i32> undef) 56*0f903015SKrzysztof Parzyszek %v8 = add <32 x i32> %v3, %v7 57*0f903015SKrzysztof Parzyszek tail call void @llvm.masked.store.v32i32.p0v32i32(<32 x i32> %v8, <32 x i32>* %v2, i32 128, <32 x i1> <i1 true, i1 true, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false, i1 false>) 58*0f903015SKrzysztof Parzyszek ret <32 x i32> %v8 59*0f903015SKrzysztof Parzyszek} 60*0f903015SKrzysztof Parzyszek 61*0f903015SKrzysztof Parzyszek; Function Attrs: argmemonly nounwind readonly willreturn 62*0f903015SKrzysztof Parzyszekdeclare <32 x i32> @llvm.masked.load.v32i32.p0v32i32(<32 x i32>*, i32 immarg, <32 x i1>, <32 x i32>) #1 63*0f903015SKrzysztof Parzyszek 64*0f903015SKrzysztof Parzyszek; Function Attrs: argmemonly nounwind willreturn 65*0f903015SKrzysztof Parzyszekdeclare void @llvm.masked.store.v32i32.p0v32i32(<32 x i32>, <32 x i32>*, i32 immarg, <32 x i1>) #2 66*0f903015SKrzysztof Parzyszek 67*0f903015SKrzysztof Parzyszekattributes #0 = { nounwind "target-cpu"="hexagonv66" "target-features"="+hvx,+hvx-length128b,-packets" } 68*0f903015SKrzysztof Parzyszekattributes #1 = { argmemonly nounwind readonly willreturn } 69*0f903015SKrzysztof Parzyszekattributes #2 = { argmemonly nounwind willreturn } 70