@@ -112,7 +112,7 @@ class LegalizationArtifactCombiner {
112
112
return true ;
113
113
}
114
114
}
115
- return tryFoldImplicitDef (MI, DeadInsts, UpdatedDefs);
115
+ return tryFoldImplicitDef (MI, DeadInsts, UpdatedDefs, Observer );
116
116
}
117
117
118
118
bool tryCombineZExt (MachineInstr &MI,
@@ -187,7 +187,7 @@ class LegalizationArtifactCombiner {
187
187
return true ;
188
188
}
189
189
}
190
- return tryFoldImplicitDef (MI, DeadInsts, UpdatedDefs);
190
+ return tryFoldImplicitDef (MI, DeadInsts, UpdatedDefs, Observer );
191
191
}
192
192
193
193
bool tryCombineSExt (MachineInstr &MI,
@@ -252,7 +252,7 @@ class LegalizationArtifactCombiner {
252
252
}
253
253
}
254
254
255
- return tryFoldImplicitDef (MI, DeadInsts, UpdatedDefs);
255
+ return tryFoldImplicitDef (MI, DeadInsts, UpdatedDefs, Observer );
256
256
}
257
257
258
258
bool tryCombineTrunc (MachineInstr &MI,
@@ -376,7 +376,8 @@ class LegalizationArtifactCombiner {
376
376
// / Try to fold G_[ASZ]EXT (G_IMPLICIT_DEF).
377
377
bool tryFoldImplicitDef (MachineInstr &MI,
378
378
SmallVectorImpl<MachineInstr *> &DeadInsts,
379
- SmallVectorImpl<Register> &UpdatedDefs) {
379
+ SmallVectorImpl<Register> &UpdatedDefs,
380
+ GISelObserverWrapper &Observer) {
380
381
unsigned Opcode = MI.getOpcode ();
381
382
assert (Opcode == TargetOpcode::G_ANYEXT || Opcode == TargetOpcode::G_ZEXT ||
382
383
Opcode == TargetOpcode::G_SEXT);
@@ -392,7 +393,9 @@ class LegalizationArtifactCombiner {
392
393
if (!isInstLegal ({TargetOpcode::G_IMPLICIT_DEF, {DstTy}}))
393
394
return false ;
394
395
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);
396
399
UpdatedDefs.push_back (DstReg);
397
400
} else {
398
401
// G_[SZ]EXT (G_IMPLICIT_DEF) -> G_CONSTANT 0 because the top
0 commit comments