@@ -229,18 +229,16 @@ bool CombinerHelper::matchFreezeOfSingleMaybePoisonOperand(
229
229
Register DstOp = MI.getOperand (0 ).getReg ();
230
230
Register OrigOp = MI.getOperand (1 ).getReg ();
231
231
232
- if (OrigOp. isPhysical () || !MRI.hasOneNonDBGUse (OrigOp))
232
+ if (!MRI.hasOneNonDBGUse (OrigOp))
233
233
return false ;
234
234
235
235
MachineInstr *OrigDef = MRI.getUniqueVRegDef (OrigOp);
236
- // Avoid trying to fold G_PHI, G_UNMERGE_VALUES, G_FREEZE (the latter is
237
- // handled by idempotent_prop).
238
- if (!OrigDef || OrigDef->isPHI () || isa<GUnmerge>(OrigDef) ||
239
- isa<GFreeze>(OrigDef))
236
+ // Avoid trying to fold G_PHI and G_UNMERGE_VALUES.
237
+ if (OrigDef->isPHI () || isa<GUnmerge>(OrigDef))
240
238
return false ;
241
239
242
240
if (canCreateUndefOrPoison (OrigOp, MRI,
243
- /* ConsiderFlagsAndMetadata*/ false ))
241
+ /* ConsiderFlagsAndMetadata= */ false ))
244
242
return false ;
245
243
246
244
std::optional<MachineOperand> MaybePoisonOperand;
@@ -254,9 +252,11 @@ bool CombinerHelper::matchFreezeOfSingleMaybePoisonOperand(
254
252
255
253
if (!MaybePoisonOperand)
256
254
MaybePoisonOperand = Operand;
257
- // We have more than one maybe-poison operand. Moving the freeze is unsafe.
258
- else
255
+ else {
256
+ // We have more than one maybe-poison operand. Moving the freeze is
257
+ // unsafe.
259
258
return false ;
259
+ }
260
260
}
261
261
262
262
cast<GenericMachineInstr>(OrigDef)->dropPoisonGeneratingFlags ();
@@ -271,11 +271,11 @@ bool CombinerHelper::matchFreezeOfSingleMaybePoisonOperand(
271
271
LLT MaybePoisonOperandRegTy = MRI.getType (MaybePoisonOperandReg);
272
272
273
273
MatchInfo = [=](MachineIRBuilder &B) mutable {
274
- auto Reg = MRI.createGenericVirtualRegister (MaybePoisonOperandRegTy);
275
274
B.setInsertPt (*OrigDef->getParent (), OrigDef->getIterator ());
276
- B.buildFreeze (Reg , MaybePoisonOperandReg);
275
+ auto Freeze = B.buildFreeze (MaybePoisonOperandRegTy , MaybePoisonOperandReg);
277
276
replaceRegOpWith (
278
- MRI, *OrigDef->findRegisterUseOperand (MaybePoisonOperandReg, TRI), Reg);
277
+ MRI, *OrigDef->findRegisterUseOperand (MaybePoisonOperandReg, TRI),
278
+ Freeze.getReg (0 ));
279
279
replaceRegWith (MRI, DstOp, OrigOp);
280
280
};
281
281
return true ;
0 commit comments