Skip to content

Commit 0208eb9

Browse files
committed
Rewrite loop to be modifiesRegister
This also causes superregisters to be marked as implicit-def.
1 parent 6b852f9 commit 0208eb9

File tree

3 files changed

+6
-15
lines changed

3 files changed

+6
-15
lines changed

llvm/lib/CodeGen/LiveVariables.cpp

Lines changed: 1 addition & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -279,16 +279,7 @@ void LiveVariables::HandlePhysRegUse(Register Reg, MachineInstr &MI) {
279279
continue;
280280

281281
// Check if SubReg is defined at LastPartialDef.
282-
bool IsDefinedHere = false;
283-
for (int I = 0; I < LastPartialDef->getNumOperands(); ++I) {
284-
const auto MO = LastPartialDef->getOperand(I);
285-
if (!MO.isReg() || !MO.isDef())
286-
continue;
287-
if (TRI->isSubRegister(SubReg, MO.getReg())) {
288-
IsDefinedHere = true;
289-
break;
290-
}
291-
}
282+
bool IsDefinedHere = LastPartialDef->modifiesRegister(SubReg, TRI);
292283
// This part of Reg was defined before the last partial def. It's killed
293284
// here.
294285
LastPartialDef->addOperand(

llvm/test/CodeGen/AArch64/ldrpre-ldr-merge.mir

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -756,7 +756,7 @@ body: |
756756
; CHECK: liveins: $x0, $x1, $x2
757757
; CHECK-NEXT: {{ $}}
758758
; CHECK-NEXT: early-clobber renamable $x1, renamable $x0 = LDRSWpre renamable $x1, 40, implicit $w1, implicit $w1_hi :: (load (s32))
759-
; CHECK-NEXT: renamable $w2 = LDRWui renamable $x1, 1, implicit-def $x2, implicit $w2_hi :: (load (s32))
759+
; CHECK-NEXT: renamable $w2 = LDRWui renamable $x1, 1, implicit-def $x2, implicit-def $w2_hi :: (load (s32))
760760
; CHECK-NEXT: STPXi renamable $x0, renamable $x2, renamable $x1, 0 :: (store (s64))
761761
; CHECK-NEXT: RET undef $lr
762762
early-clobber renamable $x1, renamable $x0 = LDRSWpre killed renamable $x1, 40 :: (load (s32))

llvm/test/CodeGen/AMDGPU/implicitdef-subreg.mir

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,14 +5,14 @@ name: sgpr_copy
55
tracksRegLiveness: true
66
body: |
77
bb.0:
8+
89
; CHECK-LABEL: name: sgpr_copy
910
; CHECK: %sval:sreg_32 = S_MOV_B32 0
1011
; CHECK-NEXT: $sgpr0 = COPY %sval
1112
; CHECK-NEXT: $sgpr1 = COPY %sval
1213
; CHECK-NEXT: $sgpr2 = COPY %sval
13-
; CHECK-NEXT: $sgpr3 = COPY killed %sval, implicit-def $sgpr0_sgpr1_sgpr2_sgpr3, implicit $sgpr0, implicit $sgpr1, implicit $sgpr2, implicit $sgpr0_sgpr1, implicit $sgpr0_sgpr1_sgpr2, implicit-def $sgpr2_sgpr3
14+
; CHECK-NEXT: $sgpr3 = COPY killed %sval, implicit-def $sgpr0_sgpr1_sgpr2_sgpr3, implicit-def $sgpr0, implicit-def $sgpr1, implicit-def $sgpr2, implicit-def $sgpr0_sgpr1, implicit-def $sgpr0_sgpr1_sgpr2, implicit-def $sgpr2_sgpr3
1415
; CHECK-NEXT: dead $sgpr30_sgpr31 = COPY killed $sgpr0_sgpr1_sgpr2_sgpr3
15-
1616
%sval:sreg_32 = S_MOV_B32 0
1717
1818
$sgpr0 = COPY %sval
@@ -27,14 +27,14 @@ name: vgpr_copy
2727
tracksRegLiveness: true
2828
body: |
2929
bb.0:
30+
3031
; CHECK-LABEL: name: vgpr_copy
3132
; CHECK: %vval:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
3233
; CHECK-NEXT: $vgpr0 = COPY %vval
3334
; CHECK-NEXT: $vgpr1 = COPY %vval
3435
; CHECK-NEXT: $vgpr2 = COPY %vval
35-
; CHECK-NEXT: $vgpr3 = COPY killed %vval, implicit-def $vgpr0_vgpr1_vgpr2_vgpr3, implicit $vgpr0, implicit $vgpr1, implicit $vgpr2, implicit $vgpr0_vgpr1, implicit $vgpr0_vgpr1_vgpr2, implicit-def $vgpr1_vgpr2_vgpr3
36+
; CHECK-NEXT: $vgpr3 = COPY killed %vval, implicit-def $vgpr0_vgpr1_vgpr2_vgpr3, implicit-def $vgpr0, implicit-def $vgpr1, implicit-def $vgpr2, implicit-def $vgpr0_vgpr1, implicit-def $vgpr0_vgpr1_vgpr2, implicit-def $vgpr1_vgpr2_vgpr3
3637
; CHECK-NEXT: dead [[COPY:%[0-9]+]]:vgpr_32 = COPY killed $vgpr0_vgpr1_vgpr2_vgpr3
37-
3838
%vval:vgpr_32 = V_MOV_B32_e32 0, implicit $exec
3939
4040
$vgpr0 = COPY %vval

0 commit comments

Comments
 (0)