Skip to content

Commit 3d6b2d4

Browse files
authored
[GlobalISel] Use replaceRegOrBuildCopy when legalizer-combining anyext(undef). (#119721)
This just avoids the unnecessary creation of some COPY nodes created from the CSE builder.
1 parent 1d07098 commit 3d6b2d4

File tree

5 files changed

+74
-138
lines changed

5 files changed

+74
-138
lines changed

llvm/include/llvm/CodeGen/GlobalISel/LegalizationArtifactCombiner.h

+8-5
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ class LegalizationArtifactCombiner {
112112
return true;
113113
}
114114
}
115-
return tryFoldImplicitDef(MI, DeadInsts, UpdatedDefs);
115+
return tryFoldImplicitDef(MI, DeadInsts, UpdatedDefs, Observer);
116116
}
117117

118118
bool tryCombineZExt(MachineInstr &MI,
@@ -187,7 +187,7 @@ class LegalizationArtifactCombiner {
187187
return true;
188188
}
189189
}
190-
return tryFoldImplicitDef(MI, DeadInsts, UpdatedDefs);
190+
return tryFoldImplicitDef(MI, DeadInsts, UpdatedDefs, Observer);
191191
}
192192

193193
bool tryCombineSExt(MachineInstr &MI,
@@ -252,7 +252,7 @@ class LegalizationArtifactCombiner {
252252
}
253253
}
254254

255-
return tryFoldImplicitDef(MI, DeadInsts, UpdatedDefs);
255+
return tryFoldImplicitDef(MI, DeadInsts, UpdatedDefs, Observer);
256256
}
257257

258258
bool tryCombineTrunc(MachineInstr &MI,
@@ -376,7 +376,8 @@ class LegalizationArtifactCombiner {
376376
/// Try to fold G_[ASZ]EXT (G_IMPLICIT_DEF).
377377
bool tryFoldImplicitDef(MachineInstr &MI,
378378
SmallVectorImpl<MachineInstr *> &DeadInsts,
379-
SmallVectorImpl<Register> &UpdatedDefs) {
379+
SmallVectorImpl<Register> &UpdatedDefs,
380+
GISelObserverWrapper &Observer) {
380381
unsigned Opcode = MI.getOpcode();
381382
assert(Opcode == TargetOpcode::G_ANYEXT || Opcode == TargetOpcode::G_ZEXT ||
382383
Opcode == TargetOpcode::G_SEXT);
@@ -392,7 +393,9 @@ class LegalizationArtifactCombiner {
392393
if (!isInstLegal({TargetOpcode::G_IMPLICIT_DEF, {DstTy}}))
393394
return false;
394395
LLVM_DEBUG(dbgs() << ".. Combine G_ANYEXT(G_IMPLICIT_DEF): " << MI;);
395-
Builder.buildInstr(TargetOpcode::G_IMPLICIT_DEF, {DstReg}, {});
396+
auto Impl = Builder.buildUndef(DstTy);
397+
replaceRegOrBuildCopy(DstReg, Impl.getReg(0), MRI, Builder, UpdatedDefs,
398+
Observer);
396399
UpdatedDefs.push_back(DstReg);
397400
} else {
398401
// G_[SZ]EXT (G_IMPLICIT_DEF) -> G_CONSTANT 0 because the top

llvm/test/CodeGen/AArch64/GlobalISel/combine-ext-debugloc.mir

+1-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
# Check that when we combine ZEXT/ANYEXT we assign the correct location.
44
# CHECK: !8 = !DILocation(line: 23, column: 5, scope: !4)
5-
# CHECK: G_AND %14, %15, debug-location !8
5+
# CHECK: G_AND %16, %15, debug-location !8
66

77
--- |
88
target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"

llvm/test/CodeGen/AArch64/GlobalISel/legalize-build-vector.mir

+1-2
Original file line numberDiff line numberDiff line change
@@ -141,8 +141,7 @@ body: |
141141
bb.0:
142142
; CHECK-LABEL: name: widen_v2s8
143143
; CHECK: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
144-
; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY [[DEF]](s32)
145-
; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[DEF]](s32)
144+
; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<2 x s32>) = G_BUILD_VECTOR [[DEF]](s32), [[DEF]](s32)
146145
; CHECK-NEXT: $d0 = COPY [[BUILD_VECTOR]](<2 x s32>)
147146
; CHECK-NEXT: RET_ReallyLR
148147
%0:_(s8) = G_IMPLICIT_DEF

llvm/test/CodeGen/AArch64/GlobalISel/legalize-concat-vectors.mir

+2-6
Original file line numberDiff line numberDiff line change
@@ -75,10 +75,7 @@ body: |
7575
; CHECK-NEXT: %b:_(s32) = G_LOAD %a(p0) :: (load (s32))
7676
; CHECK-NEXT: %c:_(<4 x s8>) = G_BITCAST %b(s32)
7777
; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s16) = G_IMPLICIT_DEF
78-
; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s16) = COPY [[DEF]](s16)
79-
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s16) = COPY [[DEF]](s16)
80-
; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s16) = COPY [[DEF]](s16)
81-
; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<8 x s16>) = G_BUILD_VECTOR [[COPY]](s16), [[COPY1]](s16), [[COPY2]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16)
78+
; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<8 x s16>) = G_BUILD_VECTOR [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16), [[DEF]](s16)
8279
; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(<8 x s8>) = G_TRUNC [[BUILD_VECTOR]](<8 x s16>)
8380
; CHECK-NEXT: [[UV:%[0-9]+]]:_(<4 x s8>), [[UV1:%[0-9]+]]:_(<4 x s8>) = G_UNMERGE_VALUES [[TRUNC]](<8 x s8>)
8481
; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST %c(<4 x s8>)
@@ -113,8 +110,7 @@ body: |
113110
; CHECK-NEXT: %b:_(s32) = G_LOAD %a(p0) :: (load (s32))
114111
; CHECK-NEXT: %c:_(<2 x s16>) = G_BITCAST %b(s32)
115112
; CHECK-NEXT: [[DEF:%[0-9]+]]:_(s32) = G_IMPLICIT_DEF
116-
; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY [[DEF]](s32)
117-
; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[COPY]](s32), [[DEF]](s32), [[DEF]](s32), [[DEF]](s32)
113+
; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[DEF]](s32), [[DEF]](s32), [[DEF]](s32), [[DEF]](s32)
118114
; CHECK-NEXT: [[TRUNC:%[0-9]+]]:_(<4 x s16>) = G_TRUNC [[BUILD_VECTOR]](<4 x s32>)
119115
; CHECK-NEXT: [[UV:%[0-9]+]]:_(<2 x s16>), [[UV1:%[0-9]+]]:_(<2 x s16>) = G_UNMERGE_VALUES [[TRUNC]](<4 x s16>)
120116
; CHECK-NEXT: [[BITCAST:%[0-9]+]]:_(s32) = G_BITCAST %c(<2 x s16>)

0 commit comments

Comments
 (0)