diff --git a/llvm/lib/Target/AArch64/AArch64ExpandPseudoInsts.cpp b/llvm/lib/Target/AArch64/AArch64ExpandPseudoInsts.cpp --- a/llvm/lib/Target/AArch64/AArch64ExpandPseudoInsts.cpp +++ b/llvm/lib/Target/AArch64/AArch64ExpandPseudoInsts.cpp @@ -438,8 +438,6 @@ DOPRegIsUnique = true; break; } - - assert (DOPRegIsUnique && "The destructive operand should be unique"); #endif // Resolve the reverse opcode @@ -483,6 +481,9 @@ // MachineInstrBuilder PRFX, DOP; if (FalseZero) { +#ifndef NDEBUG + assert(DOPRegIsUnique && "The destructive operand should be unique"); +#endif assert(ElementSize != AArch64::ElementSizeNone && "This instruction is unpredicated"); @@ -495,6 +496,9 @@ // After the movprfx, the destructive operand is same as Dst DOPIdx = 0; } else if (DstReg != MI.getOperand(DOPIdx).getReg()) { +#ifndef NDEBUG + assert(DOPRegIsUnique && "The destructive operand should be unique"); +#endif PRFX = BuildMI(MBB, MBBI, MI.getDebugLoc(), TII->get(MovPrfx)) .addReg(DstReg, RegState::Define) .addReg(MI.getOperand(DOPIdx).getReg()); diff --git a/llvm/test/CodeGen/AArch64/sve-pseudos-expand-undef.mir b/llvm/test/CodeGen/AArch64/sve-pseudos-expand-undef.mir new file mode 100644 --- /dev/null +++ b/llvm/test/CodeGen/AArch64/sve-pseudos-expand-undef.mir @@ -0,0 +1,22 @@ +# RUN: llc -mtriple=aarch64-linux-gnu -mattr=+sve -run-pass=aarch64-expand-pseudo -simplify-mir -verify-machineinstrs %s -o - | FileCheck %s +--- +name: add_x +alignment: 4 +tracksRegLiveness: true +liveins: + - { reg: '$p0' } + - { reg: '$z0' } +frameInfo: + maxCallFrameSize: 0 +body: | + bb.0: + liveins: $p0, $z0 + + ; CHECK: add_x + ; CHECK-NOT: MOVPRFX + ; CHECK: $z0 = FADD_ZPmZ_S renamable $p0, killed $z0, renamable $z0 + ; CHECK-NEXT: RET + renamable $z0 = FADD_ZPZZ_UNDEF_S renamable $p0, renamable $z0, killed renamable $z0 + RET_ReallyLR + +...