; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py ; RUN: llc -march=hexagon < %s | FileCheck %s define i64 @f0(ptr %a0, <8 x i8> %a1) #0 { ; CHECK-LABEL: f0: ; CHECK: // %bb.0: // %b0 ; CHECK-NEXT: { ; CHECK-NEXT: r0 = memub(r0+#0) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: r5:4 = combine(#0,#0) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: p0 = r0 ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: r1:0 = vmux(p0,r3:2,r5:4) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: jumpr r31 ; CHECK-NEXT: } b0: %v0 = load <8 x i1>, ptr %a0, align 1 %v1 = select <8 x i1> %v0, <8 x i8> %a1, <8 x i8> zeroinitializer %v2 = bitcast <8 x i8> %v1 to i64 ret i64 %v2 } define i32 @f1(ptr %a0, <4 x i8> %a1) #0 { ; CHECK-LABEL: f1: ; CHECK: // %bb.0: // %b0 ; CHECK-NEXT: { ; CHECK-NEXT: r0 = memub(r0+#0) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: r3:2 = combine(#0,#0) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: r5:4 = vzxtbh(r1) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: p0 = r0 ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: r1:0 = vmux(p0,r5:4,r3:2) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: r0 = vtrunehb(r1:0) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: jumpr r31 ; CHECK-NEXT: } b0: %v0 = load <4 x i1>, ptr %a0, align 1 %v1 = select <4 x i1> %v0, <4 x i8> %a1, <4 x i8> zeroinitializer %v2 = bitcast <4 x i8> %v1 to i32 ret i32 %v2 } define i16 @f2(ptr %a0, <2 x i8> %a1) #0 { ; CHECK-LABEL: f2: ; CHECK: // %bb.0: // %b0 ; CHECK-NEXT: { ; CHECK-NEXT: r0 = memub(r0+#0) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: p1 = tstbit(r0,#4) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: p0 = r0 ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: r1 = mux(p1,r3,#0) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: r0 = mux(p0,r2,#0) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: r0 = insert(r1,#24,#8) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: jumpr r31 ; CHECK-NEXT: } b0: %v0 = load <2 x i1>, ptr %a0, align 1 %v1 = select <2 x i1> %v0, <2 x i8> %a1, <2 x i8> zeroinitializer %v2 = bitcast <2 x i8> %v1 to i16 ret i16 %v2 } define i8 @f3(ptr %a0, <1 x i8> %a1) #0 { ; CHECK-LABEL: f3: ; CHECK: // %bb.0: // %b0 ; CHECK-NEXT: { ; CHECK-NEXT: r0 = memub(r0+#0) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: p0 = r0 ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: r0 = mux(p0,r1,#0) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: jumpr r31 ; CHECK-NEXT: } b0: %v0 = load <1 x i1>, ptr %a0, align 1 %v1 = select <1 x i1> %v0, <1 x i8> %a1, <1 x i8> zeroinitializer %v2 = bitcast <1 x i8> %v1 to i8 ret i8 %v2 } define void @f4(ptr %a0, i64 %a1) #0 { ; CHECK-LABEL: f4: ; CHECK: // %bb.0: // %b0 ; CHECK-NEXT: { ; CHECK-NEXT: r5:4 = combine(#0,#0) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: p0 = vcmpb.eq(r3:2,r5:4) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: p0 = not(p0) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: r1 = p0 ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: memb(r0+#0) = r1 ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: jumpr r31 ; CHECK-NEXT: } b0: %v0 = bitcast i64 %a1 to <8 x i8> %v1 = icmp ne <8 x i8> %v0, zeroinitializer store <8 x i1> %v1, ptr %a0, align 1 ret void } define void @f5(ptr %a0, i32 %a1) #0 { ; CHECK-LABEL: f5: ; CHECK: // %bb.0: // %b0 ; CHECK-NEXT: { ; CHECK-NEXT: r3:2 = vsxtbh(r1) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: r5:4 = combine(#0,#0) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: p0 = vcmph.eq(r3:2,r5:4) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: p0 = not(p0) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: r2 = p0 ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: memb(r0+#0) = r2 ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: jumpr r31 ; CHECK-NEXT: } b0: %v0 = bitcast i32 %a1 to <4 x i8> %v1 = icmp ne <4 x i8> %v0, zeroinitializer store <4 x i1> %v1, ptr %a0, align 1 ret void } define void @f6(ptr %a0, i16 %a1) #0 { ; CHECK-LABEL: f6: ; CHECK: // %bb.0: // %b0 ; CHECK-NEXT: { ; CHECK-NEXT: r2 = extractu(r1,#8,#8) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: r3 = #255 ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: p1 = !bitsclr(r1,r3) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: p0 = cmp.eq(r2,#0) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: if (p0) r2 = #0 ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: r1 = mux(p1,#8,#0) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: r3 = mux(p1,#2,#0) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: r5 = setbit(r1,#2) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: r6 = setbit(r3,#0) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: if (!p0) r2 = #128 ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: r4 = mux(p0,#0,#32) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: if (!p1) r5 = add(r1,#0) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: if (!p1) r6 = add(r3,#0) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: r1 = setbit(r2,#6) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: r3 = setbit(r4,#4) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: r5 = or(r6,r5) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: if (!p0) r2 = add(r1,#0) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: if (!p0) r4 = add(r3,#0) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: r5 |= or(r4,r2) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: memb(r0+#0) = r5 ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: jumpr r31 ; CHECK-NEXT: } b0: %v0 = bitcast i16 %a1 to <2 x i8> %v1 = icmp ne <2 x i8> %v0, zeroinitializer store <2 x i1> %v1, ptr %a0, align 1 ret void } define void @f7(ptr %a0, i8 %a1) #0 { ; CHECK-LABEL: f7: ; CHECK: // %bb.0: // %b0 ; CHECK-NEXT: { ; CHECK-NEXT: r2 = #255 ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: p0 = !bitsclr(r1,r2) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: r1 = mux(p0,#1,#0) ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: memb(r0+#0) = r1 ; CHECK-NEXT: } ; CHECK-NEXT: { ; CHECK-NEXT: jumpr r31 ; CHECK-NEXT: } b0: %v0 = bitcast i8 %a1 to <1 x i8> %v1 = icmp ne <1 x i8> %v0, zeroinitializer store <1 x i1> %v1, ptr %a0, align 1 ret void } attributes #0 = { nounwind "target-features"="-packets" }