Index: llvm/lib/Target/AArch64/AArch64InstrInfo.cpp =================================================================== --- llvm/lib/Target/AArch64/AArch64InstrInfo.cpp +++ llvm/lib/Target/AArch64/AArch64InstrInfo.cpp @@ -4915,6 +4915,19 @@ return Inst.getParent()->getParent()->getTarget().Options.UnsafeFPMath || (Inst.getFlag(MachineInstr::MIFlag::FmReassoc) && Inst.getFlag(MachineInstr::MIFlag::FmNsz)); + case AArch64::ADDXrr: + case AArch64::ANDXrr: + case AArch64::ORRXrr: + case AArch64::EORXrr: + case AArch64::EONXrr: + case AArch64::ADDWrr: + case AArch64::ANDWrr: + case AArch64::ORRWrr: + case AArch64::EORWrr: + case AArch64::EONWrr: + case AArch64::ANDSXrr: + case AArch64::ANDSWrr: + return true; default: return false; } Index: llvm/test/CodeGen/AArch64/GlobalISel/arm64-atomic.ll =================================================================== --- llvm/test/CodeGen/AArch64/GlobalISel/arm64-atomic.ll +++ llvm/test/CodeGen/AArch64/GlobalISel/arm64-atomic.ll @@ -1144,8 +1144,8 @@ ; CHECK-NOLSE-O1-NEXT: ldrb w10, [x0, w1, sxtw] ; CHECK-NOLSE-O1-NEXT: ldurb w11, [x0, #-256] ; CHECK-NOLSE-O1-NEXT: ldrb w8, [x8] -; CHECK-NOLSE-O1-NEXT: add w9, w9, w10 ; CHECK-NOLSE-O1-NEXT: add w9, w9, w11 +; CHECK-NOLSE-O1-NEXT: add w9, w10, w9 ; CHECK-NOLSE-O1-NEXT: add w0, w9, w8 ; CHECK-NOLSE-O1-NEXT: ret ; @@ -1167,9 +1167,9 @@ ; CHECK-LSE-O1: ; %bb.0: ; CHECK-LSE-O1-NEXT: ldrb w8, [x0, #4095] ; CHECK-LSE-O1-NEXT: ldrb w9, [x0, w1, sxtw] -; CHECK-LSE-O1-NEXT: add w8, w8, w9 -; CHECK-LSE-O1-NEXT: ldurb w9, [x0, #-256] -; CHECK-LSE-O1-NEXT: add w8, w8, w9 +; CHECK-LSE-O1-NEXT: ldurb w10, [x0, #-256] +; CHECK-LSE-O1-NEXT: add w8, w8, w10 +; CHECK-LSE-O1-NEXT: add w8, w9, w8 ; CHECK-LSE-O1-NEXT: add x9, x0, #291, lsl #12 ; =1191936 ; CHECK-LSE-O1-NEXT: ldrb w9, [x9] ; CHECK-LSE-O1-NEXT: add w0, w8, w9 @@ -1196,8 +1196,8 @@ ; CHECK-LDAPR-O1-NEXT: ldrb w10, [x0, w1, sxtw] ; CHECK-LDAPR-O1-NEXT: ldurb w11, [x0, #-256] ; CHECK-LDAPR-O1-NEXT: ldrb w8, [x8] -; CHECK-LDAPR-O1-NEXT: add w9, w9, w10 ; CHECK-LDAPR-O1-NEXT: add w9, w9, w11 +; CHECK-LDAPR-O1-NEXT: add w9, w10, w9 ; CHECK-LDAPR-O1-NEXT: add w0, w9, w8 ; CHECK-LDAPR-O1-NEXT: ret ; @@ -1240,8 +1240,8 @@ ; CHECK-NOLSE-O1-NEXT: ldrh w10, [x0, w1, sxtw #1] ; CHECK-NOLSE-O1-NEXT: ldurh w11, [x0, #-256] ; CHECK-NOLSE-O1-NEXT: ldrh w8, [x8] -; CHECK-NOLSE-O1-NEXT: add w9, w9, w10 ; CHECK-NOLSE-O1-NEXT: add w9, w9, w11 +; CHECK-NOLSE-O1-NEXT: add w9, w10, w9 ; CHECK-NOLSE-O1-NEXT: add w0, w9, w8 ; CHECK-NOLSE-O1-NEXT: ret ; @@ -1263,9 +1263,9 @@ ; CHECK-LSE-O1: ; %bb.0: ; CHECK-LSE-O1-NEXT: ldrh w8, [x0, #8190] ; CHECK-LSE-O1-NEXT: ldrh w9, [x0, w1, sxtw #1] -; CHECK-LSE-O1-NEXT: add w8, w8, w9 -; CHECK-LSE-O1-NEXT: ldurh w9, [x0, #-256] -; CHECK-LSE-O1-NEXT: add w8, w8, w9 +; CHECK-LSE-O1-NEXT: ldurh w10, [x0, #-256] +; CHECK-LSE-O1-NEXT: add w8, w8, w10 +; CHECK-LSE-O1-NEXT: add w8, w9, w8 ; CHECK-LSE-O1-NEXT: add x9, x0, #291, lsl #12 ; =1191936 ; CHECK-LSE-O1-NEXT: ldrh w9, [x9] ; CHECK-LSE-O1-NEXT: add w0, w8, w9 @@ -1292,8 +1292,8 @@ ; CHECK-LDAPR-O1-NEXT: ldrh w10, [x0, w1, sxtw #1] ; CHECK-LDAPR-O1-NEXT: ldurh w11, [x0, #-256] ; CHECK-LDAPR-O1-NEXT: ldrh w8, [x8] -; CHECK-LDAPR-O1-NEXT: add w9, w9, w10 ; CHECK-LDAPR-O1-NEXT: add w9, w9, w11 +; CHECK-LDAPR-O1-NEXT: add w9, w10, w9 ; CHECK-LDAPR-O1-NEXT: add w0, w9, w8 ; CHECK-LDAPR-O1-NEXT: ret ; @@ -1336,8 +1336,8 @@ ; CHECK-NOLSE-O1-NEXT: ldr w10, [x0, w1, sxtw #2] ; CHECK-NOLSE-O1-NEXT: ldur w11, [x0, #-256] ; CHECK-NOLSE-O1-NEXT: ldr w8, [x8] -; CHECK-NOLSE-O1-NEXT: add w9, w9, w10 ; CHECK-NOLSE-O1-NEXT: add w9, w9, w11 +; CHECK-NOLSE-O1-NEXT: add w9, w10, w9 ; CHECK-NOLSE-O1-NEXT: add w0, w9, w8 ; CHECK-NOLSE-O1-NEXT: ret ; @@ -1357,9 +1357,9 @@ ; CHECK-LSE-O1: ; %bb.0: ; CHECK-LSE-O1-NEXT: ldr w8, [x0, #16380] ; CHECK-LSE-O1-NEXT: ldr w9, [x0, w1, sxtw #2] -; CHECK-LSE-O1-NEXT: add w8, w8, w9 -; CHECK-LSE-O1-NEXT: ldur w9, [x0, #-256] -; CHECK-LSE-O1-NEXT: add w8, w8, w9 +; CHECK-LSE-O1-NEXT: ldur w10, [x0, #-256] +; CHECK-LSE-O1-NEXT: add w8, w8, w10 +; CHECK-LSE-O1-NEXT: add w8, w9, w8 ; CHECK-LSE-O1-NEXT: add x9, x0, #291, lsl #12 ; =1191936 ; CHECK-LSE-O1-NEXT: ldr w9, [x9] ; CHECK-LSE-O1-NEXT: add w0, w8, w9 @@ -1384,8 +1384,8 @@ ; CHECK-LDAPR-O1-NEXT: ldr w10, [x0, w1, sxtw #2] ; CHECK-LDAPR-O1-NEXT: ldur w11, [x0, #-256] ; CHECK-LDAPR-O1-NEXT: ldr w8, [x8] -; CHECK-LDAPR-O1-NEXT: add w9, w9, w10 ; CHECK-LDAPR-O1-NEXT: add w9, w9, w11 +; CHECK-LDAPR-O1-NEXT: add w9, w10, w9 ; CHECK-LDAPR-O1-NEXT: add w0, w9, w8 ; CHECK-LDAPR-O1-NEXT: ret ; @@ -1426,8 +1426,8 @@ ; CHECK-NOLSE-O1-NEXT: ldr x10, [x0, w1, sxtw #3] ; CHECK-NOLSE-O1-NEXT: ldur x11, [x0, #-256] ; CHECK-NOLSE-O1-NEXT: ldr x8, [x8] -; CHECK-NOLSE-O1-NEXT: add x9, x9, x10 ; CHECK-NOLSE-O1-NEXT: add x9, x9, x11 +; CHECK-NOLSE-O1-NEXT: add x9, x10, x9 ; CHECK-NOLSE-O1-NEXT: add x0, x9, x8 ; CHECK-NOLSE-O1-NEXT: ret ; @@ -1447,9 +1447,9 @@ ; CHECK-LSE-O1: ; %bb.0: ; CHECK-LSE-O1-NEXT: ldr x8, [x0, #32760] ; CHECK-LSE-O1-NEXT: ldr x9, [x0, w1, sxtw #3] -; CHECK-LSE-O1-NEXT: add x8, x8, x9 -; CHECK-LSE-O1-NEXT: ldur x9, [x0, #-256] -; CHECK-LSE-O1-NEXT: add x8, x8, x9 +; CHECK-LSE-O1-NEXT: ldur x10, [x0, #-256] +; CHECK-LSE-O1-NEXT: add x8, x8, x10 +; CHECK-LSE-O1-NEXT: add x8, x9, x8 ; CHECK-LSE-O1-NEXT: add x9, x0, #291, lsl #12 ; =1191936 ; CHECK-LSE-O1-NEXT: ldr x9, [x9] ; CHECK-LSE-O1-NEXT: add x0, x8, x9 @@ -1474,8 +1474,8 @@ ; CHECK-LDAPR-O1-NEXT: ldr x10, [x0, w1, sxtw #3] ; CHECK-LDAPR-O1-NEXT: ldur x11, [x0, #-256] ; CHECK-LDAPR-O1-NEXT: ldr x8, [x8] -; CHECK-LDAPR-O1-NEXT: add x9, x9, x10 ; CHECK-LDAPR-O1-NEXT: add x9, x9, x11 +; CHECK-LDAPR-O1-NEXT: add x9, x10, x9 ; CHECK-LDAPR-O1-NEXT: add x0, x9, x8 ; CHECK-LDAPR-O1-NEXT: ret ; Index: llvm/test/CodeGen/AArch64/aarch64-dynamic-stack-layout.ll =================================================================== --- llvm/test/CodeGen/AArch64/aarch64-dynamic-stack-layout.ll +++ llvm/test/CodeGen/AArch64/aarch64-dynamic-stack-layout.ll @@ -90,7 +90,7 @@ %conv = fptosi double %d10 to i32 %add = add nsw i32 %conv, %i10 %l1.0.l1.0. = load volatile i32, i32* %l1, align 4 - %add1 = add nsw i32 %add, %l1.0.l1.0. + %add1 = or i32 %add, %l1.0.l1.0. %call = tail call i32 @g() %add2 = add nsw i32 %add1, %call ret i32 %add2 @@ -172,7 +172,7 @@ %conv = fptosi double %d10 to i32 %add = add nsw i32 %conv, %i10 %l1.0.l1.0. = load volatile i32, i32* %l1, align 128 - %add1 = add nsw i32 %add, %l1.0.l1.0. + %add1 = or i32 %add, %l1.0.l1.0. %call = tail call i32 @g() %add2 = add nsw i32 %add1, %call ret i32 %add2 @@ -276,7 +276,7 @@ %conv = fptosi double %d10 to i32 %add = add nsw i32 %conv, %i10 %l1.0.l1.0. = load volatile i32, i32* %l1, align 4 - %add1 = add nsw i32 %add, %l1.0.l1.0. + %add1 = or i32 %add, %l1.0.l1.0. %call = tail call i32 @g() %add2 = add nsw i32 %add1, %call %1 = load volatile i32, i32* %vla, align 4, !tbaa !1 @@ -376,7 +376,7 @@ %conv = fptosi double %d10 to i32 %add = add nsw i32 %conv, %i10 %l1.0.l1.0. = load volatile i32, i32* %l1, align 128 - %add1 = add nsw i32 %add, %l1.0.l1.0. + %add1 = or i32 %add, %l1.0.l1.0. %call = tail call i32 @g() %add2 = add nsw i32 %add1, %call %1 = load volatile i32, i32* %vla, align 4, !tbaa !1 Index: llvm/test/CodeGen/AArch64/arm64-rev.ll =================================================================== --- llvm/test/CodeGen/AArch64/arm64-rev.ll +++ llvm/test/CodeGen/AArch64/arm64-rev.ll @@ -183,11 +183,11 @@ ; GISEL-NEXT: lsl w9, w0, #8 ; GISEL-NEXT: and w10, w8, #0xff0000 ; GISEL-NEXT: and w11, w9, #0xff000000 +; GISEL-NEXT: and w8, w8, #0xff ; GISEL-NEXT: and w9, w9, #0xff00 ; GISEL-NEXT: orr w10, w11, w10 -; GISEL-NEXT: and w8, w8, #0xff -; GISEL-NEXT: orr w9, w10, w9 -; GISEL-NEXT: orr w0, w9, w8 +; GISEL-NEXT: orr w8, w9, w8 +; GISEL-NEXT: orr w0, w10, w8 ; GISEL-NEXT: ret entry: %tmp1 = lshr i32 %X, 8 @@ -729,16 +729,16 @@ ; GISEL-NEXT: lsl x9, x0, #8 ; GISEL-NEXT: and x10, x8, #0xff000000000000 ; GISEL-NEXT: and x11, x9, #0xff00000000000000 +; GISEL-NEXT: and x12, x8, #0xff00000000 +; GISEL-NEXT: and x13, x9, #0xff0000000000 ; GISEL-NEXT: orr x10, x10, x11 -; GISEL-NEXT: and x11, x8, #0xff00000000 -; GISEL-NEXT: orr x10, x10, x11 -; GISEL-NEXT: and x11, x9, #0xff0000000000 -; GISEL-NEXT: orr x10, x10, x11 -; GISEL-NEXT: and x11, x8, #0xff0000 -; GISEL-NEXT: orr x10, x10, x11 -; GISEL-NEXT: and x11, x9, #0xff000000 -; GISEL-NEXT: orr x10, x10, x11 +; GISEL-NEXT: orr x11, x12, x13 +; GISEL-NEXT: and x12, x8, #0xff0000 +; GISEL-NEXT: and x13, x9, #0xff000000 +; GISEL-NEXT: orr x12, x12, x13 ; GISEL-NEXT: and x8, x8, #0xff +; GISEL-NEXT: orr x10, x10, x11 +; GISEL-NEXT: orr x8, x12, x8 ; GISEL-NEXT: orr x8, x10, x8 ; GISEL-NEXT: and x9, x9, #0xff00 ; GISEL-NEXT: orr x0, x8, x9 @@ -782,21 +782,21 @@ ; GISEL-LABEL: test_rev16_x_hwbyteswaps_complex2: ; GISEL: // %bb.0: // %entry ; GISEL-NEXT: lsr x8, x0, #8 -; GISEL-NEXT: lsl x10, x0, #8 -; GISEL-NEXT: and x9, x8, #0xff000000000000 +; GISEL-NEXT: lsl x9, x0, #8 +; GISEL-NEXT: and x10, x8, #0xff000000000000 ; GISEL-NEXT: and x11, x8, #0xff00000000 -; GISEL-NEXT: orr x9, x9, x11 -; GISEL-NEXT: and x11, x8, #0xff0000 -; GISEL-NEXT: orr x9, x9, x11 +; GISEL-NEXT: and x12, x8, #0xff0000 ; GISEL-NEXT: and x8, x8, #0xff -; GISEL-NEXT: orr x8, x9, x8 -; GISEL-NEXT: and x9, x10, #0xff00000000000000 -; GISEL-NEXT: orr x8, x8, x9 -; GISEL-NEXT: and x9, x10, #0xff0000000000 -; GISEL-NEXT: orr x8, x8, x9 -; GISEL-NEXT: and x9, x10, #0xff000000 -; GISEL-NEXT: orr x8, x8, x9 -; GISEL-NEXT: and x9, x10, #0xff00 +; GISEL-NEXT: orr x10, x10, x11 +; GISEL-NEXT: orr x8, x12, x8 +; GISEL-NEXT: and x11, x9, #0xff00000000000000 +; GISEL-NEXT: and x12, x9, #0xff0000000000 +; GISEL-NEXT: orr x11, x11, x12 +; GISEL-NEXT: and x12, x9, #0xff000000 +; GISEL-NEXT: orr x8, x10, x8 +; GISEL-NEXT: orr x10, x11, x12 +; GISEL-NEXT: orr x8, x8, x10 +; GISEL-NEXT: and x9, x9, #0xff00 ; GISEL-NEXT: orr x0, x8, x9 ; GISEL-NEXT: ret entry: @@ -847,17 +847,17 @@ ; GISEL-NEXT: lsl x9, x0, #8 ; GISEL-NEXT: and x10, x8, #0xff000000000000 ; GISEL-NEXT: and x11, x9, #0xff00000000000000 +; GISEL-NEXT: and x12, x8, #0xff00000000 +; GISEL-NEXT: and x13, x9, #0xff0000000000 ; GISEL-NEXT: orr x10, x11, x10 -; GISEL-NEXT: and x11, x8, #0xff00000000 -; GISEL-NEXT: orr x10, x11, x10 -; GISEL-NEXT: and x11, x9, #0xff0000000000 -; GISEL-NEXT: orr x10, x11, x10 -; GISEL-NEXT: and x11, x8, #0xff0000 -; GISEL-NEXT: orr x10, x11, x10 -; GISEL-NEXT: and x11, x9, #0xff000000 -; GISEL-NEXT: orr x10, x11, x10 +; GISEL-NEXT: orr x11, x12, x13 +; GISEL-NEXT: and x12, x8, #0xff0000 +; GISEL-NEXT: and x13, x9, #0xff000000 +; GISEL-NEXT: orr x12, x12, x13 ; GISEL-NEXT: and x8, x8, #0xff -; GISEL-NEXT: orr x8, x8, x10 +; GISEL-NEXT: orr x10, x10, x11 +; GISEL-NEXT: orr x8, x12, x8 +; GISEL-NEXT: orr x8, x10, x8 ; GISEL-NEXT: and x9, x9, #0xff00 ; GISEL-NEXT: orr x0, x9, x8 ; GISEL-NEXT: ret @@ -918,24 +918,24 @@ ; CHECK-LABEL: test_or_and_combine2: ; CHECK: // %bb.0: // %entry ; CHECK-NEXT: lsr x8, x0, #8 -; CHECK-NEXT: lsl x10, x0, #8 -; CHECK-NEXT: and x9, x8, #0xff000000000000 +; CHECK-NEXT: lsl x9, x0, #8 +; CHECK-NEXT: and x10, x8, #0xff000000000000 +; CHECK-NEXT: and x11, x9, #0xff00000000 ; CHECK-NEXT: and x8, x8, #0xff0000 -; CHECK-NEXT: orr x9, x9, x10 -; CHECK-NEXT: and x10, x10, #0xff00000000 -; CHECK-NEXT: orr x9, x9, x10 +; CHECK-NEXT: orr x9, x10, x9 +; CHECK-NEXT: orr x8, x11, x8 ; CHECK-NEXT: orr x0, x9, x8 ; CHECK-NEXT: ret ; ; GISEL-LABEL: test_or_and_combine2: ; GISEL: // %bb.0: // %entry ; GISEL-NEXT: lsr x8, x0, #8 -; GISEL-NEXT: lsl x10, x0, #8 -; GISEL-NEXT: and x9, x8, #0xff000000000000 +; GISEL-NEXT: lsl x9, x0, #8 +; GISEL-NEXT: and x10, x8, #0xff000000000000 +; GISEL-NEXT: and x11, x9, #0xff00000000 ; GISEL-NEXT: and x8, x8, #0xff0000 -; GISEL-NEXT: orr x9, x9, x10 -; GISEL-NEXT: and x10, x10, #0xff00000000 -; GISEL-NEXT: orr x9, x9, x10 +; GISEL-NEXT: orr x9, x10, x9 +; GISEL-NEXT: orr x8, x11, x8 ; GISEL-NEXT: orr x0, x9, x8 ; GISEL-NEXT: ret entry: Index: llvm/test/CodeGen/AArch64/cmp-chains.ll =================================================================== --- llvm/test/CodeGen/AArch64/cmp-chains.ll +++ llvm/test/CodeGen/AArch64/cmp-chains.ll @@ -76,11 +76,11 @@ ; GISEL-NEXT: cmp w0, w1 ; GISEL-NEXT: cset w9, lo ; GISEL-NEXT: cmp w4, w5 -; GISEL-NEXT: and w8, w8, w9 -; GISEL-NEXT: cset w9, ne +; GISEL-NEXT: cset w10, ne ; GISEL-NEXT: cmp w6, w7 +; GISEL-NEXT: cset w11, eq ; GISEL-NEXT: and w8, w8, w9 -; GISEL-NEXT: cset w9, eq +; GISEL-NEXT: and w9, w10, w11 ; GISEL-NEXT: and w0, w8, w9 ; GISEL-NEXT: ret %9 = icmp ugt i32 %2, %3 @@ -166,11 +166,11 @@ ; GISEL-NEXT: cmp w2, w3 ; GISEL-NEXT: cset w9, hi ; GISEL-NEXT: cmp w4, w5 -; GISEL-NEXT: orr w8, w8, w9 -; GISEL-NEXT: cset w9, ne +; GISEL-NEXT: cset w10, ne ; GISEL-NEXT: cmp w6, w7 +; GISEL-NEXT: cset w11, eq ; GISEL-NEXT: orr w8, w8, w9 -; GISEL-NEXT: cset w9, eq +; GISEL-NEXT: orr w9, w10, w11 ; GISEL-NEXT: orr w0, w8, w9 ; GISEL-NEXT: ret %9 = icmp ult i32 %0, %1 Index: llvm/test/CodeGen/AArch64/reduce-and.ll =================================================================== --- llvm/test/CodeGen/AArch64/reduce-and.ll +++ llvm/test/CodeGen/AArch64/reduce-and.ll @@ -264,13 +264,13 @@ ; CHECK-LABEL: test_redand_v4i8: ; CHECK: // %bb.0: ; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0 -; CHECK-NEXT: umov w8, v0.h[1] -; CHECK-NEXT: umov w9, v0.h[0] -; CHECK-NEXT: umov w10, v0.h[2] -; CHECK-NEXT: umov w11, v0.h[3] +; CHECK-NEXT: umov w8, v0.h[3] +; CHECK-NEXT: umov w9, v0.h[2] +; CHECK-NEXT: umov w10, v0.h[1] +; CHECK-NEXT: umov w11, v0.h[0] ; CHECK-NEXT: and w8, w9, w8 -; CHECK-NEXT: and w8, w8, w10 -; CHECK-NEXT: and w0, w8, w11 +; CHECK-NEXT: and w10, w11, w10 +; CHECK-NEXT: and w0, w10, w8 ; CHECK-NEXT: ret ; ; GISEL-LABEL: test_redand_v4i8: @@ -295,21 +295,21 @@ ; CHECK-LABEL: test_redand_v8i8: ; CHECK: // %bb.0: ; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0 -; CHECK-NEXT: umov w8, v0.b[1] -; CHECK-NEXT: umov w9, v0.b[0] -; CHECK-NEXT: umov w10, v0.b[2] -; CHECK-NEXT: umov w11, v0.b[3] -; CHECK-NEXT: umov w12, v0.b[4] -; CHECK-NEXT: umov w13, v0.b[5] +; CHECK-NEXT: umov w8, v0.b[5] +; CHECK-NEXT: umov w9, v0.b[4] +; CHECK-NEXT: umov w10, v0.b[1] +; CHECK-NEXT: umov w11, v0.b[0] +; CHECK-NEXT: umov w12, v0.b[3] +; CHECK-NEXT: umov w13, v0.b[2] +; CHECK-NEXT: umov w14, v0.b[6] +; CHECK-NEXT: umov w15, v0.b[7] ; CHECK-NEXT: and w8, w9, w8 -; CHECK-NEXT: umov w9, v0.b[6] -; CHECK-NEXT: and w8, w8, w10 -; CHECK-NEXT: umov w10, v0.b[7] -; CHECK-NEXT: and w8, w8, w11 -; CHECK-NEXT: and w8, w8, w12 -; CHECK-NEXT: and w8, w8, w13 -; CHECK-NEXT: and w8, w8, w9 -; CHECK-NEXT: and w0, w8, w10 +; CHECK-NEXT: and w10, w11, w10 +; CHECK-NEXT: and w11, w13, w12 +; CHECK-NEXT: and w9, w10, w11 +; CHECK-NEXT: and w8, w8, w14 +; CHECK-NEXT: and w8, w9, w8 +; CHECK-NEXT: and w0, w8, w15 ; CHECK-NEXT: ret ; ; GISEL-LABEL: test_redand_v8i8: @@ -352,16 +352,16 @@ ; CHECK-NEXT: umov w10, v0.b[2] ; CHECK-NEXT: umov w11, v0.b[3] ; CHECK-NEXT: umov w12, v0.b[4] +; CHECK-NEXT: umov w13, v0.b[5] +; CHECK-NEXT: umov w14, v0.b[6] ; CHECK-NEXT: and w8, w9, w8 -; CHECK-NEXT: umov w9, v0.b[5] +; CHECK-NEXT: umov w9, v0.b[7] +; CHECK-NEXT: and w10, w10, w11 +; CHECK-NEXT: and w11, w12, w13 ; CHECK-NEXT: and w8, w8, w10 -; CHECK-NEXT: umov w10, v0.b[6] -; CHECK-NEXT: and w8, w8, w11 -; CHECK-NEXT: umov w11, v0.b[7] -; CHECK-NEXT: and w8, w8, w12 -; CHECK-NEXT: and w8, w8, w9 +; CHECK-NEXT: and w10, w11, w14 ; CHECK-NEXT: and w8, w8, w10 -; CHECK-NEXT: and w0, w8, w11 +; CHECK-NEXT: and w0, w8, w9 ; CHECK-NEXT: ret ; ; GISEL-LABEL: test_redand_v16i8: @@ -406,16 +406,16 @@ ; CHECK-NEXT: umov w10, v0.b[2] ; CHECK-NEXT: umov w11, v0.b[3] ; CHECK-NEXT: umov w12, v0.b[4] +; CHECK-NEXT: umov w13, v0.b[5] +; CHECK-NEXT: umov w14, v0.b[6] ; CHECK-NEXT: and w8, w9, w8 -; CHECK-NEXT: umov w9, v0.b[5] +; CHECK-NEXT: umov w9, v0.b[7] +; CHECK-NEXT: and w10, w10, w11 +; CHECK-NEXT: and w11, w12, w13 ; CHECK-NEXT: and w8, w8, w10 -; CHECK-NEXT: umov w10, v0.b[6] -; CHECK-NEXT: and w8, w8, w11 -; CHECK-NEXT: umov w11, v0.b[7] -; CHECK-NEXT: and w8, w8, w12 -; CHECK-NEXT: and w8, w8, w9 +; CHECK-NEXT: and w10, w11, w14 ; CHECK-NEXT: and w8, w8, w10 -; CHECK-NEXT: and w0, w8, w11 +; CHECK-NEXT: and w0, w8, w9 ; CHECK-NEXT: ret ; ; GISEL-LABEL: test_redand_v32i8: @@ -454,13 +454,13 @@ ; CHECK-LABEL: test_redand_v4i16: ; CHECK: // %bb.0: ; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0 -; CHECK-NEXT: umov w8, v0.h[1] -; CHECK-NEXT: umov w9, v0.h[0] -; CHECK-NEXT: umov w10, v0.h[2] -; CHECK-NEXT: umov w11, v0.h[3] +; CHECK-NEXT: umov w8, v0.h[3] +; CHECK-NEXT: umov w9, v0.h[2] +; CHECK-NEXT: umov w10, v0.h[1] +; CHECK-NEXT: umov w11, v0.h[0] ; CHECK-NEXT: and w8, w9, w8 -; CHECK-NEXT: and w8, w8, w10 -; CHECK-NEXT: and w0, w8, w11 +; CHECK-NEXT: and w10, w11, w10 +; CHECK-NEXT: and w0, w10, w8 ; CHECK-NEXT: ret ; ; GISEL-LABEL: test_redand_v4i16: @@ -491,8 +491,8 @@ ; CHECK-NEXT: umov w10, v0.h[2] ; CHECK-NEXT: umov w11, v0.h[3] ; CHECK-NEXT: and w8, w9, w8 -; CHECK-NEXT: and w8, w8, w10 -; CHECK-NEXT: and w0, w8, w11 +; CHECK-NEXT: and w9, w10, w11 +; CHECK-NEXT: and w0, w8, w9 ; CHECK-NEXT: ret ; ; GISEL-LABEL: test_redand_v8i16: @@ -525,8 +525,8 @@ ; CHECK-NEXT: umov w10, v0.h[2] ; CHECK-NEXT: umov w11, v0.h[3] ; CHECK-NEXT: and w8, w9, w8 -; CHECK-NEXT: and w8, w8, w10 -; CHECK-NEXT: and w0, w8, w11 +; CHECK-NEXT: and w9, w10, w11 +; CHECK-NEXT: and w0, w8, w9 ; CHECK-NEXT: ret ; ; GISEL-LABEL: test_redand_v16i16: Index: llvm/test/CodeGen/AArch64/reduce-or.ll =================================================================== --- llvm/test/CodeGen/AArch64/reduce-or.ll +++ llvm/test/CodeGen/AArch64/reduce-or.ll @@ -263,13 +263,13 @@ ; CHECK-LABEL: test_redor_v4i8: ; CHECK: // %bb.0: ; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0 -; CHECK-NEXT: umov w8, v0.h[1] -; CHECK-NEXT: umov w9, v0.h[0] -; CHECK-NEXT: umov w10, v0.h[2] -; CHECK-NEXT: umov w11, v0.h[3] +; CHECK-NEXT: umov w8, v0.h[3] +; CHECK-NEXT: umov w9, v0.h[2] +; CHECK-NEXT: umov w10, v0.h[1] +; CHECK-NEXT: umov w11, v0.h[0] ; CHECK-NEXT: orr w8, w9, w8 -; CHECK-NEXT: orr w8, w8, w10 -; CHECK-NEXT: orr w0, w8, w11 +; CHECK-NEXT: orr w10, w11, w10 +; CHECK-NEXT: orr w0, w10, w8 ; CHECK-NEXT: ret ; ; GISEL-LABEL: test_redor_v4i8: @@ -294,21 +294,21 @@ ; CHECK-LABEL: test_redor_v8i8: ; CHECK: // %bb.0: ; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0 -; CHECK-NEXT: umov w8, v0.b[1] -; CHECK-NEXT: umov w9, v0.b[0] -; CHECK-NEXT: umov w10, v0.b[2] -; CHECK-NEXT: umov w11, v0.b[3] -; CHECK-NEXT: umov w12, v0.b[4] -; CHECK-NEXT: umov w13, v0.b[5] +; CHECK-NEXT: umov w8, v0.b[5] +; CHECK-NEXT: umov w9, v0.b[4] +; CHECK-NEXT: umov w10, v0.b[1] +; CHECK-NEXT: umov w11, v0.b[0] +; CHECK-NEXT: umov w12, v0.b[3] +; CHECK-NEXT: umov w13, v0.b[2] +; CHECK-NEXT: umov w14, v0.b[6] +; CHECK-NEXT: umov w15, v0.b[7] ; CHECK-NEXT: orr w8, w9, w8 -; CHECK-NEXT: umov w9, v0.b[6] -; CHECK-NEXT: orr w8, w8, w10 -; CHECK-NEXT: umov w10, v0.b[7] -; CHECK-NEXT: orr w8, w8, w11 -; CHECK-NEXT: orr w8, w8, w12 -; CHECK-NEXT: orr w8, w8, w13 -; CHECK-NEXT: orr w8, w8, w9 -; CHECK-NEXT: orr w0, w8, w10 +; CHECK-NEXT: orr w10, w11, w10 +; CHECK-NEXT: orr w11, w13, w12 +; CHECK-NEXT: orr w9, w10, w11 +; CHECK-NEXT: orr w8, w8, w14 +; CHECK-NEXT: orr w8, w9, w8 +; CHECK-NEXT: orr w0, w8, w15 ; CHECK-NEXT: ret ; ; GISEL-LABEL: test_redor_v8i8: @@ -351,16 +351,16 @@ ; CHECK-NEXT: umov w10, v0.b[2] ; CHECK-NEXT: umov w11, v0.b[3] ; CHECK-NEXT: umov w12, v0.b[4] +; CHECK-NEXT: umov w13, v0.b[5] +; CHECK-NEXT: umov w14, v0.b[6] ; CHECK-NEXT: orr w8, w9, w8 -; CHECK-NEXT: umov w9, v0.b[5] +; CHECK-NEXT: umov w9, v0.b[7] +; CHECK-NEXT: orr w10, w10, w11 +; CHECK-NEXT: orr w11, w12, w13 ; CHECK-NEXT: orr w8, w8, w10 -; CHECK-NEXT: umov w10, v0.b[6] -; CHECK-NEXT: orr w8, w8, w11 -; CHECK-NEXT: umov w11, v0.b[7] -; CHECK-NEXT: orr w8, w8, w12 -; CHECK-NEXT: orr w8, w8, w9 +; CHECK-NEXT: orr w10, w11, w14 ; CHECK-NEXT: orr w8, w8, w10 -; CHECK-NEXT: orr w0, w8, w11 +; CHECK-NEXT: orr w0, w8, w9 ; CHECK-NEXT: ret ; ; GISEL-LABEL: test_redor_v16i8: @@ -405,16 +405,16 @@ ; CHECK-NEXT: umov w10, v0.b[2] ; CHECK-NEXT: umov w11, v0.b[3] ; CHECK-NEXT: umov w12, v0.b[4] +; CHECK-NEXT: umov w13, v0.b[5] +; CHECK-NEXT: umov w14, v0.b[6] ; CHECK-NEXT: orr w8, w9, w8 -; CHECK-NEXT: umov w9, v0.b[5] +; CHECK-NEXT: umov w9, v0.b[7] +; CHECK-NEXT: orr w10, w10, w11 +; CHECK-NEXT: orr w11, w12, w13 ; CHECK-NEXT: orr w8, w8, w10 -; CHECK-NEXT: umov w10, v0.b[6] -; CHECK-NEXT: orr w8, w8, w11 -; CHECK-NEXT: umov w11, v0.b[7] -; CHECK-NEXT: orr w8, w8, w12 -; CHECK-NEXT: orr w8, w8, w9 +; CHECK-NEXT: orr w10, w11, w14 ; CHECK-NEXT: orr w8, w8, w10 -; CHECK-NEXT: orr w0, w8, w11 +; CHECK-NEXT: orr w0, w8, w9 ; CHECK-NEXT: ret ; ; GISEL-LABEL: test_redor_v32i8: @@ -453,13 +453,13 @@ ; CHECK-LABEL: test_redor_v4i16: ; CHECK: // %bb.0: ; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0 -; CHECK-NEXT: umov w8, v0.h[1] -; CHECK-NEXT: umov w9, v0.h[0] -; CHECK-NEXT: umov w10, v0.h[2] -; CHECK-NEXT: umov w11, v0.h[3] +; CHECK-NEXT: umov w8, v0.h[3] +; CHECK-NEXT: umov w9, v0.h[2] +; CHECK-NEXT: umov w10, v0.h[1] +; CHECK-NEXT: umov w11, v0.h[0] ; CHECK-NEXT: orr w8, w9, w8 -; CHECK-NEXT: orr w8, w8, w10 -; CHECK-NEXT: orr w0, w8, w11 +; CHECK-NEXT: orr w10, w11, w10 +; CHECK-NEXT: orr w0, w10, w8 ; CHECK-NEXT: ret ; ; GISEL-LABEL: test_redor_v4i16: @@ -490,8 +490,8 @@ ; CHECK-NEXT: umov w10, v0.h[2] ; CHECK-NEXT: umov w11, v0.h[3] ; CHECK-NEXT: orr w8, w9, w8 -; CHECK-NEXT: orr w8, w8, w10 -; CHECK-NEXT: orr w0, w8, w11 +; CHECK-NEXT: orr w9, w10, w11 +; CHECK-NEXT: orr w0, w8, w9 ; CHECK-NEXT: ret ; ; GISEL-LABEL: test_redor_v8i16: @@ -524,8 +524,8 @@ ; CHECK-NEXT: umov w10, v0.h[2] ; CHECK-NEXT: umov w11, v0.h[3] ; CHECK-NEXT: orr w8, w9, w8 -; CHECK-NEXT: orr w8, w8, w10 -; CHECK-NEXT: orr w0, w8, w11 +; CHECK-NEXT: orr w9, w10, w11 +; CHECK-NEXT: orr w0, w8, w9 ; CHECK-NEXT: ret ; ; GISEL-LABEL: test_redor_v16i16: Index: llvm/test/CodeGen/AArch64/reduce-xor.ll =================================================================== --- llvm/test/CodeGen/AArch64/reduce-xor.ll +++ llvm/test/CodeGen/AArch64/reduce-xor.ll @@ -262,13 +262,13 @@ ; CHECK-LABEL: test_redxor_v4i8: ; CHECK: // %bb.0: ; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0 -; CHECK-NEXT: umov w8, v0.h[1] -; CHECK-NEXT: umov w9, v0.h[0] -; CHECK-NEXT: umov w10, v0.h[2] -; CHECK-NEXT: umov w11, v0.h[3] +; CHECK-NEXT: umov w8, v0.h[3] +; CHECK-NEXT: umov w9, v0.h[2] +; CHECK-NEXT: umov w10, v0.h[1] +; CHECK-NEXT: umov w11, v0.h[0] ; CHECK-NEXT: eor w8, w9, w8 -; CHECK-NEXT: eor w8, w8, w10 -; CHECK-NEXT: eor w0, w8, w11 +; CHECK-NEXT: eor w10, w11, w10 +; CHECK-NEXT: eor w0, w10, w8 ; CHECK-NEXT: ret ; ; GISEL-LABEL: test_redxor_v4i8: @@ -293,21 +293,21 @@ ; CHECK-LABEL: test_redxor_v8i8: ; CHECK: // %bb.0: ; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0 -; CHECK-NEXT: umov w8, v0.b[1] -; CHECK-NEXT: umov w9, v0.b[0] -; CHECK-NEXT: umov w10, v0.b[2] -; CHECK-NEXT: umov w11, v0.b[3] -; CHECK-NEXT: umov w12, v0.b[4] -; CHECK-NEXT: umov w13, v0.b[5] +; CHECK-NEXT: umov w8, v0.b[5] +; CHECK-NEXT: umov w9, v0.b[4] +; CHECK-NEXT: umov w10, v0.b[1] +; CHECK-NEXT: umov w11, v0.b[0] +; CHECK-NEXT: umov w12, v0.b[3] +; CHECK-NEXT: umov w13, v0.b[2] +; CHECK-NEXT: umov w14, v0.b[6] +; CHECK-NEXT: umov w15, v0.b[7] ; CHECK-NEXT: eor w8, w9, w8 -; CHECK-NEXT: umov w9, v0.b[6] -; CHECK-NEXT: eor w8, w8, w10 -; CHECK-NEXT: umov w10, v0.b[7] -; CHECK-NEXT: eor w8, w8, w11 -; CHECK-NEXT: eor w8, w8, w12 -; CHECK-NEXT: eor w8, w8, w13 -; CHECK-NEXT: eor w8, w8, w9 -; CHECK-NEXT: eor w0, w8, w10 +; CHECK-NEXT: eor w10, w11, w10 +; CHECK-NEXT: eor w11, w13, w12 +; CHECK-NEXT: eor w9, w10, w11 +; CHECK-NEXT: eor w8, w8, w14 +; CHECK-NEXT: eor w8, w9, w8 +; CHECK-NEXT: eor w0, w8, w15 ; CHECK-NEXT: ret ; ; GISEL-LABEL: test_redxor_v8i8: @@ -350,16 +350,16 @@ ; CHECK-NEXT: umov w10, v0.b[2] ; CHECK-NEXT: umov w11, v0.b[3] ; CHECK-NEXT: umov w12, v0.b[4] +; CHECK-NEXT: umov w13, v0.b[5] +; CHECK-NEXT: umov w14, v0.b[6] ; CHECK-NEXT: eor w8, w9, w8 -; CHECK-NEXT: umov w9, v0.b[5] +; CHECK-NEXT: umov w9, v0.b[7] +; CHECK-NEXT: eor w10, w10, w11 +; CHECK-NEXT: eor w11, w12, w13 ; CHECK-NEXT: eor w8, w8, w10 -; CHECK-NEXT: umov w10, v0.b[6] -; CHECK-NEXT: eor w8, w8, w11 -; CHECK-NEXT: umov w11, v0.b[7] -; CHECK-NEXT: eor w8, w8, w12 -; CHECK-NEXT: eor w8, w8, w9 +; CHECK-NEXT: eor w10, w11, w14 ; CHECK-NEXT: eor w8, w8, w10 -; CHECK-NEXT: eor w0, w8, w11 +; CHECK-NEXT: eor w0, w8, w9 ; CHECK-NEXT: ret ; ; GISEL-LABEL: test_redxor_v16i8: @@ -404,16 +404,16 @@ ; CHECK-NEXT: umov w10, v0.b[2] ; CHECK-NEXT: umov w11, v0.b[3] ; CHECK-NEXT: umov w12, v0.b[4] +; CHECK-NEXT: umov w13, v0.b[5] +; CHECK-NEXT: umov w14, v0.b[6] ; CHECK-NEXT: eor w8, w9, w8 -; CHECK-NEXT: umov w9, v0.b[5] +; CHECK-NEXT: umov w9, v0.b[7] +; CHECK-NEXT: eor w10, w10, w11 +; CHECK-NEXT: eor w11, w12, w13 ; CHECK-NEXT: eor w8, w8, w10 -; CHECK-NEXT: umov w10, v0.b[6] -; CHECK-NEXT: eor w8, w8, w11 -; CHECK-NEXT: umov w11, v0.b[7] -; CHECK-NEXT: eor w8, w8, w12 -; CHECK-NEXT: eor w8, w8, w9 +; CHECK-NEXT: eor w10, w11, w14 ; CHECK-NEXT: eor w8, w8, w10 -; CHECK-NEXT: eor w0, w8, w11 +; CHECK-NEXT: eor w0, w8, w9 ; CHECK-NEXT: ret ; ; GISEL-LABEL: test_redxor_v32i8: @@ -452,13 +452,13 @@ ; CHECK-LABEL: test_redxor_v4i16: ; CHECK: // %bb.0: ; CHECK-NEXT: // kill: def $d0 killed $d0 def $q0 -; CHECK-NEXT: umov w8, v0.h[1] -; CHECK-NEXT: umov w9, v0.h[0] -; CHECK-NEXT: umov w10, v0.h[2] -; CHECK-NEXT: umov w11, v0.h[3] +; CHECK-NEXT: umov w8, v0.h[3] +; CHECK-NEXT: umov w9, v0.h[2] +; CHECK-NEXT: umov w10, v0.h[1] +; CHECK-NEXT: umov w11, v0.h[0] ; CHECK-NEXT: eor w8, w9, w8 -; CHECK-NEXT: eor w8, w8, w10 -; CHECK-NEXT: eor w0, w8, w11 +; CHECK-NEXT: eor w10, w11, w10 +; CHECK-NEXT: eor w0, w10, w8 ; CHECK-NEXT: ret ; ; GISEL-LABEL: test_redxor_v4i16: @@ -489,8 +489,8 @@ ; CHECK-NEXT: umov w10, v0.h[2] ; CHECK-NEXT: umov w11, v0.h[3] ; CHECK-NEXT: eor w8, w9, w8 -; CHECK-NEXT: eor w8, w8, w10 -; CHECK-NEXT: eor w0, w8, w11 +; CHECK-NEXT: eor w9, w10, w11 +; CHECK-NEXT: eor w0, w8, w9 ; CHECK-NEXT: ret ; ; GISEL-LABEL: test_redxor_v8i16: @@ -523,8 +523,8 @@ ; CHECK-NEXT: umov w10, v0.h[2] ; CHECK-NEXT: umov w11, v0.h[3] ; CHECK-NEXT: eor w8, w9, w8 -; CHECK-NEXT: eor w8, w8, w10 -; CHECK-NEXT: eor w0, w8, w11 +; CHECK-NEXT: eor w9, w10, w11 +; CHECK-NEXT: eor w0, w8, w9 ; CHECK-NEXT: ret ; ; GISEL-LABEL: test_redxor_v16i16: Index: llvm/test/CodeGen/AArch64/swift-return.ll =================================================================== --- llvm/test/CodeGen/AArch64/swift-return.ll +++ llvm/test/CodeGen/AArch64/swift-return.ll @@ -28,8 +28,8 @@ ; CHECK-LABEL: test2 ; CHECK: bl _gen2 ; CHECK: add [[TMP:x.*]], x0, x1 -; CHECK: add [[TMP]], [[TMP]], x2 -; CHECK: add [[TMP]], [[TMP]], x3 +; CHECK: add [[TMP2:x.*]], x2, x3 +; CHECK: add [[TMP]], [[TMP]], [[TMP2]] ; CHECK: add x0, [[TMP]], x4 ; CHECK-O0-LABEL: test2 ; CHECK-O0: bl _gen2 @@ -75,8 +75,8 @@ ; CHECK-LABEL: test3 ; CHECK: bl _gen3 ; CHECK: add [[TMP:w.*]], w0, w1 -; CHECK: add [[TMP]], [[TMP]], w2 -; CHECK: add w0, [[TMP]], w3 +; CHECK: add [[TMP2:w.*]], w2, w3 +; CHECK: add w0, [[TMP]], [[TMP2]] ; CHECK-O0-LABEL: test3 ; CHECK-O0: bl _gen3 ; CHECK-O0: add [[TMP:w.*]], w0, w1 @@ -159,8 +159,8 @@ ; CHECK-DAG: fadd d0, d0, d2 ; CHECK-DAG: fadd d0, d0, d3 ; CHECK-DAG: add [[TMP:w.*]], w0, w1 -; CHECK-DAG: add [[TMP]], [[TMP]], w2 -; CHECK-DAG: add w0, [[TMP]], w3 +; CHECK-DAG: add [[TMP2:w.*]], w2, w3 +; CHECK-DAG: add w0, [[TMP]], [[TMP2]] ; CHECK-O0-LABEL: test6 ; CHECK-O0: bl _gen6 ; CHECK-O0-DAG: fadd d0, d0, d1 Index: llvm/test/CodeGen/AArch64/vecreduce-and-legalization.ll =================================================================== --- llvm/test/CodeGen/AArch64/vecreduce-and-legalization.ll +++ llvm/test/CodeGen/AArch64/vecreduce-and-legalization.ll @@ -97,28 +97,28 @@ ; CHECK-LABEL: test_v9i8: ; CHECK: // %bb.0: ; CHECK-NEXT: mov w8, #-1 -; CHECK-NEXT: umov w12, v0.b[4] +; CHECK-NEXT: umov w9, v0.b[5] ; CHECK-NEXT: mov v1.16b, v0.16b +; CHECK-NEXT: umov w10, v0.b[6] +; CHECK-NEXT: umov w15, v0.b[7] ; CHECK-NEXT: mov v1.b[9], w8 ; CHECK-NEXT: mov v1.b[10], w8 ; CHECK-NEXT: mov v1.b[11], w8 ; CHECK-NEXT: mov v1.b[13], w8 +; CHECK-NEXT: umov w8, v0.b[4] ; CHECK-NEXT: ext v1.16b, v1.16b, v1.16b, #8 -; CHECK-NEXT: and v1.8b, v0.8b, v1.8b -; CHECK-NEXT: umov w8, v1.b[1] -; CHECK-NEXT: umov w9, v1.b[0] -; CHECK-NEXT: umov w10, v1.b[2] -; CHECK-NEXT: umov w11, v1.b[3] -; CHECK-NEXT: and w8, w9, w8 -; CHECK-NEXT: umov w9, v0.b[5] -; CHECK-NEXT: and w8, w8, w10 -; CHECK-NEXT: umov w10, v0.b[6] -; CHECK-NEXT: and w8, w8, w11 -; CHECK-NEXT: umov w11, v0.b[7] -; CHECK-NEXT: and w8, w8, w12 ; CHECK-NEXT: and w8, w8, w9 ; CHECK-NEXT: and w8, w8, w10 -; CHECK-NEXT: and w0, w8, w11 +; CHECK-NEXT: and w8, w8, w15 +; CHECK-NEXT: and v1.8b, v0.8b, v1.8b +; CHECK-NEXT: umov w11, v1.b[1] +; CHECK-NEXT: umov w12, v1.b[0] +; CHECK-NEXT: umov w13, v1.b[2] +; CHECK-NEXT: umov w14, v1.b[3] +; CHECK-NEXT: and w9, w12, w11 +; CHECK-NEXT: and w11, w13, w14 +; CHECK-NEXT: and w9, w9, w11 +; CHECK-NEXT: and w0, w9, w8 ; CHECK-NEXT: ret %b = call i8 @llvm.vector.reduce.and.v9i8(<9 x i8> %a) ret i8 %b