[clang] [llvm] CodeGen: Mark inline asm clobber defs dead (PR #227026)

Matt Arsenault via llvm-commits llvm-commits at lists.llvm.org
Mon Sep 28 09:52:21 PDT 2026


https://github.com/arsenm updated https://github.com/llvm/llvm-project/pull/227026

>From f52815cefa0501ffb7ef016486674d463409a29d Mon Sep 17 00:00:00 2001
From: Matt Arsenault <Matthew.Arsenault at amd.com>
Date: Fri, 25 Sep 2026 09:40:07 +0200
Subject: [PATCH] CodeGen: Mark inline asm clobber defs dead

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 <noreply at anthropic.com>
---
 clang/test/CodeGen/msp430-register-names.c    |  32 ++---
 .../CodeGen/GlobalISel/InlineAsmLowering.cpp  |   1 +
 .../lib/CodeGen/SelectionDAG/InstrEmitter.cpp |   1 +
 .../GlobalISel/irtranslator-inline-asm.ll     |   2 +-
 llvm/test/CodeGen/AArch64/aarch64-sme2-asm.ll | 128 +++++++++---------
 .../CodeGen/AArch64/aarch64-za-clobber.ll     |   4 +-
 .../GlobalISel/irtranslator-inline-asm.ll     |   6 +-
 llvm/test/CodeGen/PowerPC/pr47155-47156.ll    |   8 +-
 .../GlobalISel/irtranslator-inline-asm.ll     |   2 +-
 llvm/test/CodeGen/X86/cfi-xmm.ll              |   2 +-
 .../X86/inline-asm-avx512f-x-constraint.ll    |   6 +-
 .../X86/inline-asm-default-clobbers.ll        |   2 +-
 llvm/test/CodeGen/X86/tail-dup-asm-goto.ll    |   2 +-
 13 files changed, 98 insertions(+), 98 deletions(-)

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):



More information about the llvm-commits mailing list