Author: Matt Arsenault Date: 2026-09-28T17:47:29Z New Revision: dee78e33993c9275a0cdd3dc22a0b21958a42ef4
URL: https://github.com/llvm/llvm-project/commit/dee78e33993c9275a0cdd3dc22a0b21958a42ef4 DIFF: https://github.com/llvm/llvm-project/commit/dee78e33993c9275a0cdd3dc22a0b21958a42ef4.diff LOG: CodeGen: Mark inline asm clobber defs dead (#227026) A clobber operand has no value associated with it, so the def is always dead. Set the flag where the INLINEASM is built instead of relying on later inference. Co-authored-by: Claude Opus 5 <[email protected]> Added: Modified: clang/test/CodeGen/msp430-register-names.c llvm/lib/CodeGen/GlobalISel/InlineAsmLowering.cpp llvm/lib/CodeGen/SelectionDAG/InstrEmitter.cpp llvm/test/CodeGen/AArch64/GlobalISel/irtranslator-inline-asm.ll llvm/test/CodeGen/AArch64/aarch64-sme2-asm.ll llvm/test/CodeGen/AArch64/aarch64-za-clobber.ll llvm/test/CodeGen/AMDGPU/GlobalISel/irtranslator-inline-asm.ll llvm/test/CodeGen/PowerPC/pr47155-47156.ll llvm/test/CodeGen/RISCV/GlobalISel/irtranslator-inline-asm.ll llvm/test/CodeGen/X86/cfi-xmm.ll llvm/test/CodeGen/X86/inline-asm-avx512f-x-constraint.ll llvm/test/CodeGen/X86/inline-asm-default-clobbers.ll llvm/test/CodeGen/X86/tail-dup-asm-goto.ll Removed: ################################################################################ diff --git a/clang/test/CodeGen/msp430-register-names.c b/clang/test/CodeGen/msp430-register-names.c index 106b6c933a49b..83f290b2718de 100644 --- a/clang/test/CodeGen/msp430-register-names.c +++ b/clang/test/CodeGen/msp430-register-names.c @@ -86,20 +86,20 @@ void test_function(void) { // CHECK: call void asm sideeffect "", "~{r13}"() // CHECK: call void asm sideeffect "", "~{r14}"() // CHECK: call void asm sideeffect "", "~{r15}"() - // CHECK: INLINEASM &"", {{.*}} implicit-def early-clobber $pc - // CHECK: INLINEASM &"", {{.*}} implicit-def early-clobber $sp - // CHECK: INLINEASM &"", {{.*}} implicit-def early-clobber $sr - // CHECK: INLINEASM &"", {{.*}} implicit-def early-clobber $cg - // CHECK: INLINEASM &"", {{.*}} implicit-def early-clobber $r4 - // CHECK: INLINEASM &"", {{.*}} implicit-def early-clobber $r5 - // CHECK: INLINEASM &"", {{.*}} implicit-def early-clobber $r6 - // CHECK: INLINEASM &"", {{.*}} implicit-def early-clobber $r7 - // CHECK: INLINEASM &"", {{.*}} implicit-def early-clobber $r8 - // CHECK: INLINEASM &"", {{.*}} implicit-def early-clobber $r9 - // CHECK: INLINEASM &"", {{.*}} implicit-def early-clobber $r10 - // CHECK: INLINEASM &"", {{.*}} implicit-def early-clobber $r11 - // CHECK: INLINEASM &"", {{.*}} implicit-def early-clobber $r12 - // CHECK: INLINEASM &"", {{.*}} implicit-def early-clobber $r13 - // CHECK: INLINEASM &"", {{.*}} implicit-def early-clobber $r14 - // CHECK: INLINEASM &"", {{.*}} implicit-def early-clobber $r15 + // CHECK: INLINEASM &"", {{.*}} implicit-def dead early-clobber $pc + // CHECK: INLINEASM &"", {{.*}} implicit-def dead early-clobber $sp + // CHECK: INLINEASM &"", {{.*}} implicit-def dead early-clobber $sr + // CHECK: INLINEASM &"", {{.*}} implicit-def dead early-clobber $cg + // CHECK: INLINEASM &"", {{.*}} implicit-def dead early-clobber $r4 + // CHECK: INLINEASM &"", {{.*}} implicit-def dead early-clobber $r5 + // CHECK: INLINEASM &"", {{.*}} implicit-def dead early-clobber $r6 + // CHECK: INLINEASM &"", {{.*}} implicit-def dead early-clobber $r7 + // CHECK: INLINEASM &"", {{.*}} implicit-def dead early-clobber $r8 + // CHECK: INLINEASM &"", {{.*}} implicit-def dead early-clobber $r9 + // CHECK: INLINEASM &"", {{.*}} implicit-def dead early-clobber $r10 + // CHECK: INLINEASM &"", {{.*}} implicit-def dead early-clobber $r11 + // CHECK: INLINEASM &"", {{.*}} implicit-def dead early-clobber $r12 + // CHECK: INLINEASM &"", {{.*}} implicit-def dead early-clobber $r13 + // CHECK: INLINEASM &"", {{.*}} implicit-def dead early-clobber $r14 + // CHECK: INLINEASM &"", {{.*}} implicit-def dead early-clobber $r15 } diff --git a/llvm/lib/CodeGen/GlobalISel/InlineAsmLowering.cpp b/llvm/lib/CodeGen/GlobalISel/InlineAsmLowering.cpp index 14ce305376459..19eae930cc26b 100644 --- a/llvm/lib/CodeGen/GlobalISel/InlineAsmLowering.cpp +++ b/llvm/lib/CodeGen/GlobalISel/InlineAsmLowering.cpp @@ -583,6 +583,7 @@ bool InlineAsmLowering::lowerInlineAsm( for (Register Reg : OpInfo.Regs) { Inst.addReg(Reg, RegState::Define | RegState::EarlyClobber | + RegState::Dead | getImplRegState(Reg.isPhysical())); } } diff --git a/llvm/lib/CodeGen/SelectionDAG/InstrEmitter.cpp b/llvm/lib/CodeGen/SelectionDAG/InstrEmitter.cpp index 8da255cda656d..6db23303bbc13 100644 --- a/llvm/lib/CodeGen/SelectionDAG/InstrEmitter.cpp +++ b/llvm/lib/CodeGen/SelectionDAG/InstrEmitter.cpp @@ -1394,6 +1394,7 @@ EmitSpecialNode(SDNode *Node, bool IsClone, bool IsCloned, for (unsigned j = 0; j != NumVals; ++j, ++i) { Register Reg = cast<RegisterSDNode>(Node->getOperand(i))->getReg(); MIB.addReg(Reg, RegState::Define | RegState::EarlyClobber | + getDeadRegState(F.isClobberKind()) | getImplRegState(Reg.isPhysical())); ECRegs.push_back(Reg); } diff --git a/llvm/test/CodeGen/AArch64/GlobalISel/irtranslator-inline-asm.ll b/llvm/test/CodeGen/AArch64/GlobalISel/irtranslator-inline-asm.ll index 638b2f0f8732d..5569de5c4ba61 100644 --- a/llvm/test/CodeGen/AArch64/GlobalISel/irtranslator-inline-asm.ll +++ b/llvm/test/CodeGen/AArch64/GlobalISel/irtranslator-inline-asm.ll @@ -17,7 +17,7 @@ define void @asm_simple_memory_clobber() { define void @asm_simple_register_clobber() { ; CHECK-LABEL: name: asm_simple_register_clobber ; CHECK: bb.1 (%ir-block.0): - ; CHECK-NEXT: INLINEASM &"mov x0, 7", sideeffect attdialect, clobber, implicit-def early-clobber $x0, !0 + ; CHECK-NEXT: INLINEASM &"mov x0, 7", sideeffect attdialect, clobber, implicit-def dead early-clobber $x0, !0 ; CHECK-NEXT: RET_ReallyLR call void asm sideeffect "mov x0, 7", "~{x0}"(), !srcloc !0 ret void diff --git a/llvm/test/CodeGen/AArch64/aarch64-sme2-asm.ll b/llvm/test/CodeGen/AArch64/aarch64-sme2-asm.ll index d3f5a769e2d23..62ac067115da6 100644 --- a/llvm/test/CodeGen/AArch64/aarch64-sme2-asm.ll +++ b/llvm/test/CodeGen/AArch64/aarch64-sme2-asm.ll @@ -47,38 +47,38 @@ define <2 x float> @sme_nosve_nonstreaming(ptr %in) "target-features"="+sme,-sve entry: ; CHECK-LABEL: name: sme_nosve_nonstreaming ; CHECK: INLINEASM &"smstart sm; smstop sm;" -; CHECK-SAME: implicit-def early-clobber $q0 -; CHECK-SAME: implicit-def early-clobber $q1 -; CHECK-SAME: implicit-def early-clobber $q2 -; CHECK-SAME: implicit-def early-clobber $q3 -; CHECK-SAME: implicit-def early-clobber $q4 -; CHECK-SAME: implicit-def early-clobber $q5 -; CHECK-SAME: implicit-def early-clobber $q6 -; CHECK-SAME: implicit-def early-clobber $q7 -; CHECK-SAME: implicit-def early-clobber $q8 -; CHECK-SAME: implicit-def early-clobber $q9 -; CHECK-SAME: implicit-def early-clobber $q10 -; CHECK-SAME: implicit-def early-clobber $q11 -; CHECK-SAME: implicit-def early-clobber $q12 -; CHECK-SAME: implicit-def early-clobber $q13 -; CHECK-SAME: implicit-def early-clobber $q14 -; CHECK-SAME: implicit-def early-clobber $q15 -; CHECK-SAME: implicit-def early-clobber $q16 -; CHECK-SAME: implicit-def early-clobber $q17 -; CHECK-SAME: implicit-def early-clobber $q18 -; CHECK-SAME: implicit-def early-clobber $q19 -; CHECK-SAME: implicit-def early-clobber $q20 -; CHECK-SAME: implicit-def early-clobber $q21 -; CHECK-SAME: implicit-def early-clobber $q22 -; CHECK-SAME: implicit-def early-clobber $q23 -; CHECK-SAME: implicit-def early-clobber $q24 -; CHECK-SAME: implicit-def early-clobber $q25 -; CHECK-SAME: implicit-def early-clobber $q26 -; CHECK-SAME: implicit-def early-clobber $q27 -; CHECK-SAME: implicit-def early-clobber $q28 -; CHECK-SAME: implicit-def early-clobber $q29 -; CHECK-SAME: implicit-def early-clobber $q30 -; CHECK-SAME: implicit-def early-clobber $q31 +; CHECK-SAME: implicit-def dead early-clobber $q0 +; CHECK-SAME: implicit-def dead early-clobber $q1 +; CHECK-SAME: implicit-def dead early-clobber $q2 +; CHECK-SAME: implicit-def dead early-clobber $q3 +; CHECK-SAME: implicit-def dead early-clobber $q4 +; CHECK-SAME: implicit-def dead early-clobber $q5 +; CHECK-SAME: implicit-def dead early-clobber $q6 +; CHECK-SAME: implicit-def dead early-clobber $q7 +; CHECK-SAME: implicit-def dead early-clobber $q8 +; CHECK-SAME: implicit-def dead early-clobber $q9 +; CHECK-SAME: implicit-def dead early-clobber $q10 +; CHECK-SAME: implicit-def dead early-clobber $q11 +; CHECK-SAME: implicit-def dead early-clobber $q12 +; CHECK-SAME: implicit-def dead early-clobber $q13 +; CHECK-SAME: implicit-def dead early-clobber $q14 +; CHECK-SAME: implicit-def dead early-clobber $q15 +; CHECK-SAME: implicit-def dead early-clobber $q16 +; CHECK-SAME: implicit-def dead early-clobber $q17 +; CHECK-SAME: implicit-def dead early-clobber $q18 +; CHECK-SAME: implicit-def dead early-clobber $q19 +; CHECK-SAME: implicit-def dead early-clobber $q20 +; CHECK-SAME: implicit-def dead early-clobber $q21 +; CHECK-SAME: implicit-def dead early-clobber $q22 +; CHECK-SAME: implicit-def dead early-clobber $q23 +; CHECK-SAME: implicit-def dead early-clobber $q24 +; CHECK-SAME: implicit-def dead early-clobber $q25 +; CHECK-SAME: implicit-def dead early-clobber $q26 +; CHECK-SAME: implicit-def dead early-clobber $q27 +; CHECK-SAME: implicit-def dead early-clobber $q28 +; CHECK-SAME: implicit-def dead early-clobber $q29 +; CHECK-SAME: implicit-def dead early-clobber $q30 +; CHECK-SAME: implicit-def dead early-clobber $q31 %0 = load <2 x float>, ptr %in, align 8 call void asm sideeffect "smstart sm; smstop sm;", "~{z0},~{z1},~{z2},~{z3},~{z4},~{z5},~{z6},~{z7},~{z8},~{z9},~{z10},~{z11},~{z12},~{z13},~{z14},~{z15},~{z16},~{z17},~{z18},~{z19},~{z20},~{z21},~{z22},~{z23},~{z24},~{z25},~{z26},~{z27},~{z28},~{z29},~{z30},~{z31}"() ret <2 x float> %0 @@ -88,38 +88,38 @@ define <2 x float> @sme_nosve_streaming(ptr %in) "target-features"="+sme,-sve" " entry: ; CHECK-LABEL: name: sme_nosve_streaming ; CHECK: INLINEASM &"smstart sm; smstop sm;" -; CHECK-SAME: implicit-def early-clobber $z0 -; CHECK-SAME: implicit-def early-clobber $z1 -; CHECK-SAME: implicit-def early-clobber $z2 -; CHECK-SAME: implicit-def early-clobber $z3 -; CHECK-SAME: implicit-def early-clobber $z4 -; CHECK-SAME: implicit-def early-clobber $z5 -; CHECK-SAME: implicit-def early-clobber $z6 -; CHECK-SAME: implicit-def early-clobber $z7 -; CHECK-SAME: implicit-def early-clobber $z8 -; CHECK-SAME: implicit-def early-clobber $z9 -; CHECK-SAME: implicit-def early-clobber $z10 -; CHECK-SAME: implicit-def early-clobber $z11 -; CHECK-SAME: implicit-def early-clobber $z12 -; CHECK-SAME: implicit-def early-clobber $z13 -; CHECK-SAME: implicit-def early-clobber $z14 -; CHECK-SAME: implicit-def early-clobber $z15 -; CHECK-SAME: implicit-def early-clobber $z16 -; CHECK-SAME: implicit-def early-clobber $z17 -; CHECK-SAME: implicit-def early-clobber $z18 -; CHECK-SAME: implicit-def early-clobber $z19 -; CHECK-SAME: implicit-def early-clobber $z20 -; CHECK-SAME: implicit-def early-clobber $z21 -; CHECK-SAME: implicit-def early-clobber $z22 -; CHECK-SAME: implicit-def early-clobber $z23 -; CHECK-SAME: implicit-def early-clobber $z24 -; CHECK-SAME: implicit-def early-clobber $z25 -; CHECK-SAME: implicit-def early-clobber $z26 -; CHECK-SAME: implicit-def early-clobber $z27 -; CHECK-SAME: implicit-def early-clobber $z28 -; CHECK-SAME: implicit-def early-clobber $z29 -; CHECK-SAME: implicit-def early-clobber $z30 -; CHECK-SAME: implicit-def early-clobber $z31 +; CHECK-SAME: implicit-def dead early-clobber $z0 +; CHECK-SAME: implicit-def dead early-clobber $z1 +; CHECK-SAME: implicit-def dead early-clobber $z2 +; CHECK-SAME: implicit-def dead early-clobber $z3 +; CHECK-SAME: implicit-def dead early-clobber $z4 +; CHECK-SAME: implicit-def dead early-clobber $z5 +; CHECK-SAME: implicit-def dead early-clobber $z6 +; CHECK-SAME: implicit-def dead early-clobber $z7 +; CHECK-SAME: implicit-def dead early-clobber $z8 +; CHECK-SAME: implicit-def dead early-clobber $z9 +; CHECK-SAME: implicit-def dead early-clobber $z10 +; CHECK-SAME: implicit-def dead early-clobber $z11 +; CHECK-SAME: implicit-def dead early-clobber $z12 +; CHECK-SAME: implicit-def dead early-clobber $z13 +; CHECK-SAME: implicit-def dead early-clobber $z14 +; CHECK-SAME: implicit-def dead early-clobber $z15 +; CHECK-SAME: implicit-def dead early-clobber $z16 +; CHECK-SAME: implicit-def dead early-clobber $z17 +; CHECK-SAME: implicit-def dead early-clobber $z18 +; CHECK-SAME: implicit-def dead early-clobber $z19 +; CHECK-SAME: implicit-def dead early-clobber $z20 +; CHECK-SAME: implicit-def dead early-clobber $z21 +; CHECK-SAME: implicit-def dead early-clobber $z22 +; CHECK-SAME: implicit-def dead early-clobber $z23 +; CHECK-SAME: implicit-def dead early-clobber $z24 +; CHECK-SAME: implicit-def dead early-clobber $z25 +; CHECK-SAME: implicit-def dead early-clobber $z26 +; CHECK-SAME: implicit-def dead early-clobber $z27 +; CHECK-SAME: implicit-def dead early-clobber $z28 +; CHECK-SAME: implicit-def dead early-clobber $z29 +; CHECK-SAME: implicit-def dead early-clobber $z30 +; CHECK-SAME: implicit-def dead early-clobber $z31 %0 = load <2 x float>, ptr %in, align 8 call void asm sideeffect "smstart sm; smstop sm;", "~{z0},~{z1},~{z2},~{z3},~{z4},~{z5},~{z6},~{z7},~{z8},~{z9},~{z10},~{z11},~{z12},~{z13},~{z14},~{z15},~{z16},~{z17},~{z18},~{z19},~{z20},~{z21},~{z22},~{z23},~{z24},~{z25},~{z26},~{z27},~{z28},~{z29},~{z30},~{z31}"() ret <2 x float> %0 diff --git a/llvm/test/CodeGen/AArch64/aarch64-za-clobber.ll b/llvm/test/CodeGen/AArch64/aarch64-za-clobber.ll index 83e2c4f74c0ff..8faab7321071a 100644 --- a/llvm/test/CodeGen/AArch64/aarch64-za-clobber.ll +++ b/llvm/test/CodeGen/AArch64/aarch64-za-clobber.ll @@ -3,14 +3,14 @@ define void @alpha(<vscale x 4 x i32> %x) local_unnamed_addr { entry: -; CHECK: INLINEASM &"movt zt0[3, mul vl], z0", sideeffect attdialect, clobber, implicit-def early-clobber $za +; CHECK: INLINEASM &"movt zt0[3, mul vl], z0", sideeffect attdialect, clobber, implicit-def dead early-clobber $za tail call void asm sideeffect "movt zt0[3, mul vl], z0", "~{za}"() ret void } define void @beta(<vscale x 4 x i32> %x) local_unnamed_addr { entry: -; CHECK: INLINEASM &"movt zt0[3, mul vl], z0", sideeffect attdialect, clobber, implicit-def early-clobber $zt0 +; CHECK: INLINEASM &"movt zt0[3, mul vl], z0", sideeffect attdialect, clobber, implicit-def dead early-clobber $zt0 tail call void asm sideeffect "movt zt0[3, mul vl], z0", "~{zt0}"() ret void } diff --git a/llvm/test/CodeGen/AMDGPU/GlobalISel/irtranslator-inline-asm.ll b/llvm/test/CodeGen/AMDGPU/GlobalISel/irtranslator-inline-asm.ll index fda4647c73b4f..026f43ba0655e 100644 --- a/llvm/test/CodeGen/AMDGPU/GlobalISel/irtranslator-inline-asm.ll +++ b/llvm/test/CodeGen/AMDGPU/GlobalISel/irtranslator-inline-asm.ll @@ -33,7 +33,7 @@ define amdgpu_kernel void @asm_simple_vgpr_clobber() { ; CHECK-NEXT: liveins: $sgpr8_sgpr9 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p4) = COPY $sgpr8_sgpr9 - ; CHECK-NEXT: INLINEASM &"v_mov_b32 v0, 7", sideeffect attdialect, clobber, implicit-def early-clobber $vgpr0, !1 + ; CHECK-NEXT: INLINEASM &"v_mov_b32 v0, 7", sideeffect attdialect, clobber, implicit-def dead early-clobber $vgpr0, !1 ; CHECK-NEXT: S_ENDPGM 0 call void asm sideeffect "v_mov_b32 v0, 7", "~{v0}"(), !srcloc !0 ret void @@ -45,7 +45,7 @@ define amdgpu_kernel void @asm_simple_sgpr_clobber() { ; CHECK-NEXT: liveins: $sgpr8_sgpr9 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p4) = COPY $sgpr8_sgpr9 - ; CHECK-NEXT: INLINEASM &"s_mov_b32 s0, 7", sideeffect attdialect, clobber, implicit-def early-clobber $sgpr0, !1 + ; CHECK-NEXT: INLINEASM &"s_mov_b32 s0, 7", sideeffect attdialect, clobber, implicit-def dead early-clobber $sgpr0, !1 ; CHECK-NEXT: S_ENDPGM 0 call void asm sideeffect "s_mov_b32 s0, 7", "~{s0}"(), !srcloc !0 ret void @@ -57,7 +57,7 @@ define amdgpu_kernel void @asm_simple_agpr_clobber() { ; CHECK-NEXT: liveins: $sgpr8_sgpr9 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(p4) = COPY $sgpr8_sgpr9 - ; CHECK-NEXT: INLINEASM &"; def a0", sideeffect attdialect, clobber, implicit-def early-clobber $agpr0, !1 + ; CHECK-NEXT: INLINEASM &"; def a0", sideeffect attdialect, clobber, implicit-def dead early-clobber $agpr0, !1 ; CHECK-NEXT: S_ENDPGM 0 call void asm sideeffect "; def a0", "~{a0}"(), !srcloc !0 ret void diff --git a/llvm/test/CodeGen/PowerPC/pr47155-47156.ll b/llvm/test/CodeGen/PowerPC/pr47155-47156.ll index a9848d95a666b..058bd46517f98 100644 --- a/llvm/test/CodeGen/PowerPC/pr47155-47156.ll +++ b/llvm/test/CodeGen/PowerPC/pr47155-47156.ll @@ -8,13 +8,11 @@ define void @pr47155() { ; CHECK: *** Final schedule for %bb.0 *** ; CHECK: Current Schedule Region ; CHECK-NEXT: pr47155:%bb.0 entry -; CHECK: SU(0): INLINEASM &"mtlr 31"{{.*}}implicit-def early-clobber $lr +; CHECK: SU(0): INLINEASM &"mtlr 31"{{.*}}implicit-def dead early-clobber $lr ; CHECK: Successors: -; CHECK-NEXT: SU(1): Out Latency=0 ; CHECK-NEXT: SU(1): Ord Latency=0 Barrier -; CHECK-NEXT: SU(1): INLINEASM &"mtlr 31"{{.*}}implicit-def early-clobber $lr8 +; CHECK-NEXT: SU(1): INLINEASM &"mtlr 31"{{.*}}implicit-def dead early-clobber $lr8 ; CHECK: Predecessors: -; CHECK-NEXT: SU(0): Out Latency=0 ; CHECK-NEXT: SU(0): Ord Latency=0 Barrier ; CHECK-NEXT: ExitSU: entry: @@ -28,7 +26,7 @@ define void @pr47156(ptr %fn) { ; CHECK: *** Final schedule for %bb.0 *** ; CHECK: Current Schedule Region ; CHECK-NEXT: pr47156:%bb.0 entry -; CHECK: SU(0): INLINEASM &"mtctr 31"{{.*}}implicit-def early-clobber $ctr +; CHECK: SU(0): INLINEASM &"mtctr 31"{{.*}}implicit-def dead early-clobber $ctr ; CHECK: Successors: ; CHECK-NEXT: SU(1): Out Latency=0 ; CHECK-NEXT: SU(1): MTCTR8 renamable $x3, implicit-def $ctr8 diff --git a/llvm/test/CodeGen/RISCV/GlobalISel/irtranslator-inline-asm.ll b/llvm/test/CodeGen/RISCV/GlobalISel/irtranslator-inline-asm.ll index bf3a9fb75dc22..c5bbc15aaff7e 100644 --- a/llvm/test/CodeGen/RISCV/GlobalISel/irtranslator-inline-asm.ll +++ b/llvm/test/CodeGen/RISCV/GlobalISel/irtranslator-inline-asm.ll @@ -15,7 +15,7 @@ define void @test_simple_memory_clobber() { define void @test_simple_register_clobber() { ; CHECK-LABEL: name: test_simple_register_clobber ; CHECK: bb.1 (%ir-block.0): - ; CHECK-NEXT: INLINEASM &"", sideeffect attdialect, clobber, implicit-def early-clobber $x10 + ; CHECK-NEXT: INLINEASM &"", sideeffect attdialect, clobber, implicit-def dead early-clobber $x10 ; CHECK-NEXT: PseudoRET call void asm sideeffect "", "~{x10}"() ret void diff --git a/llvm/test/CodeGen/X86/cfi-xmm.ll b/llvm/test/CodeGen/X86/cfi-xmm.ll index 68c001bb9c86f..6dbc017252fae 100644 --- a/llvm/test/CodeGen/X86/cfi-xmm.ll +++ b/llvm/test/CodeGen/X86/cfi-xmm.ll @@ -12,7 +12,7 @@ define void @_Z1fv() { ; PEI-NEXT: frame-setup CFI_INSTRUCTION def_cfa_offset 48 ; PEI-NEXT: CFI_INSTRUCTION offset $xmm10, -48 ; PEI-NEXT: CFI_INSTRUCTION offset $xmm15, -32 - ; PEI-NEXT: INLINEASM &"", sideeffect attdialect, clobber, implicit-def dead early-clobber $xmm10, clobber, implicit-def dead early-clobber $xmm15, clobber, implicit-def dead early-clobber $df, clobber, implicit-def early-clobber $fpsw, clobber, implicit-def dead early-clobber $eflags + ; PEI-NEXT: INLINEASM &"", sideeffect attdialect, clobber, implicit-def dead early-clobber $xmm10, clobber, implicit-def dead early-clobber $xmm15, clobber, implicit-def dead early-clobber $df, clobber, implicit-def dead early-clobber $fpsw, clobber, implicit-def dead early-clobber $eflags ; PEI-NEXT: $xmm10 = frame-destroy MOVAPSrm $rsp, 1, $noreg, 0, $noreg :: (load (s128) from %fixed-stack.0) ; PEI-NEXT: $xmm15 = frame-destroy MOVAPSrm $rsp, 1, $noreg, 16, $noreg :: (load (s128) from %fixed-stack.1) ; PEI-NEXT: $rsp = frame-destroy ADD64ri32 $rsp, 40, implicit-def dead $eflags diff --git a/llvm/test/CodeGen/X86/inline-asm-avx512f-x-constraint.ll b/llvm/test/CodeGen/X86/inline-asm-avx512f-x-constraint.ll index 56950b995ac59..b8b3c937bfd1b 100644 --- a/llvm/test/CodeGen/X86/inline-asm-avx512f-x-constraint.ll +++ b/llvm/test/CodeGen/X86/inline-asm-avx512f-x-constraint.ll @@ -6,7 +6,7 @@ ; CHECK-LABEL: name: mask_Yk_i8 ; CHECK: %[[REG1:.*]]:vr512_0_15 = COPY %1 ; CHECK: %[[REG2:.*]]:vr512_0_15 = COPY %2 -; CHECK: INLINEASM &"vpaddq\09$3, $2, $0 {$1}", attdialect, {{.*}}, def %{{.*}}, {{.*}}, %{{.*}}, {{.*}}, %[[REG1]], {{.*}}, %[[REG2]], clobber, implicit-def early-clobber $df, clobber, implicit-def early-clobber $fpsw, clobber, implicit-def early-clobber $eflags +; CHECK: INLINEASM &"vpaddq\09$3, $2, $0 {$1}", attdialect, {{.*}}, def %{{.*}}, {{.*}}, %{{.*}}, {{.*}}, %[[REG1]], {{.*}}, %[[REG2]], clobber, implicit-def dead early-clobber $df, clobber, implicit-def dead early-clobber $fpsw, clobber, implicit-def dead early-clobber $eflags define <8 x i64> @mask_Yk_i8(i8 signext %msk, <8 x i64> %x, <8 x i64> %y) { entry: @@ -17,7 +17,7 @@ entry: ; FP16-LABEL: name: mask_Yk_f16 ; FP16: %[[REG1:.*]]:vr512_0_15 = COPY %1 ; FP16: %[[REG2:.*]]:vr512_0_15 = COPY %2 -; FP16: INLINEASM &"vaddph\09$3, $2, $0 {$1}", attdialect, {{.*}}, def %{{.*}}, {{.*}}, %{{.*}}, {{.*}}, %[[REG1]], {{.*}}, %[[REG2]], clobber, implicit-def early-clobber $df, clobber, implicit-def early-clobber $fpsw, clobber, implicit-def early-clobber $eflags +; FP16: INLINEASM &"vaddph\09$3, $2, $0 {$1}", attdialect, {{.*}}, def %{{.*}}, {{.*}}, %{{.*}}, {{.*}}, %[[REG1]], {{.*}}, %[[REG2]], clobber, implicit-def dead early-clobber $df, clobber, implicit-def dead early-clobber $fpsw, clobber, implicit-def dead early-clobber $eflags ; CHECK-STDERR: could not allocate output register for constraint 'x' define <32 x half> @mask_Yk_f16(i8 signext %msk, <32 x half> %x, <32 x half> %y) { entry: @@ -28,7 +28,7 @@ entry: ; FP16-LABEL: name: mask_Yk_bf16 ; FP16: %[[REG1:.*]]:vr512_0_15 = COPY %1 ; FP16: %[[REG2:.*]]:vr512_0_15 = COPY %2 -; FP16: INLINEASM &"vaddph\09$3, $2, $0 {$1}", attdialect, {{.*}}, def %{{.*}}, {{.*}}, %{{.*}}, {{.*}}, %[[REG1]], {{.*}}, %[[REG2]], clobber, implicit-def early-clobber $df, clobber, implicit-def early-clobber $fpsw, clobber, implicit-def early-clobber $eflags +; FP16: INLINEASM &"vaddph\09$3, $2, $0 {$1}", attdialect, {{.*}}, def %{{.*}}, {{.*}}, %{{.*}}, {{.*}}, %[[REG1]], {{.*}}, %[[REG2]], clobber, implicit-def dead early-clobber $df, clobber, implicit-def dead early-clobber $fpsw, clobber, implicit-def dead early-clobber $eflags ; CHECK-STDERR: could not allocate output register for constraint 'x' define <32 x bfloat> @mask_Yk_bf16(i8 signext %msk, <32 x bfloat> %x, <32 x bfloat> %y) { entry: diff --git a/llvm/test/CodeGen/X86/inline-asm-default-clobbers.ll b/llvm/test/CodeGen/X86/inline-asm-default-clobbers.ll index b0112bd80a259..7a23b6ec2e9e4 100644 --- a/llvm/test/CodeGen/X86/inline-asm-default-clobbers.ll +++ b/llvm/test/CodeGen/X86/inline-asm-default-clobbers.ll @@ -1,6 +1,6 @@ ; RUN: llc < %s -mtriple=i686 -stop-after=finalize-isel | FileCheck %s -; CHECK: INLINEASM &"", sideeffect attdialect, clobber, implicit-def early-clobber $df, clobber, implicit-def early-clobber $fpsw, clobber, implicit-def early-clobber $eflags +; CHECK: INLINEASM &"", sideeffect attdialect, clobber, implicit-def dead early-clobber $df, clobber, implicit-def dead early-clobber $fpsw, clobber, implicit-def dead early-clobber $eflags define void @foo() { entry: call void asm sideeffect "", "~{dirflag},~{fpsr},~{flags}"() diff --git a/llvm/test/CodeGen/X86/tail-dup-asm-goto.ll b/llvm/test/CodeGen/X86/tail-dup-asm-goto.ll index 7c22c0e117091..60bf8662856b0 100644 --- a/llvm/test/CodeGen/X86/tail-dup-asm-goto.ll +++ b/llvm/test/CodeGen/X86/tail-dup-asm-goto.ll @@ -36,7 +36,7 @@ define ptr @test1(ptr %arg1, ptr %arg2) { ; CHECK-NEXT: successors: %bb.5(0x80000000), %bb.4(0x00000000) ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: [[PHI:%[0-9]+]]:gr64 = PHI [[COPY]], %bb.2, [[MOV64rm]], %bb.1 - ; CHECK-NEXT: INLINEASM_BR &"#$0 $1 $2", sideeffect mayload attdialect, imm, 42, imm, 0, imm, %bb.4, clobber, implicit-def early-clobber $df, clobber, implicit-def early-clobber $fpsw, clobber, implicit-def early-clobber $eflags + ; CHECK-NEXT: INLINEASM_BR &"#$0 $1 $2", sideeffect mayload attdialect, imm, 42, imm, 0, imm, %bb.4, clobber, implicit-def dead early-clobber $df, clobber, implicit-def dead early-clobber $fpsw, clobber, implicit-def dead early-clobber $eflags ; CHECK-NEXT: JMP_1 %bb.5 ; CHECK-NEXT: {{ $}} ; CHECK-NEXT: bb.4.bb17.i.i.i (inlineasm-br-indirect-target): _______________________________________________ cfe-commits mailing list [email protected] https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits
