Skip to content

Commit b2d6339

Browse files
committed
Rebase and address reviewer comments
1 parent 9be25f6 commit b2d6339

File tree

3 files changed

+17
-20
lines changed

3 files changed

+17
-20
lines changed

llvm/include/llvm/CodeGen/GlobalISel/GenericMachineInstrs.h

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,9 +36,8 @@ class GenericMachineInstr : public MachineInstr {
3636
}
3737

3838
bool hasPoisonGeneratingFlags() const {
39-
return getFlag(NoUWrap) || getFlag(NoSWrap) || getFlag(IsExact) ||
40-
getFlag(Disjoint) || getFlag(NonNeg) || getFlag(FmNoNans) ||
41-
getFlag(FmNoInfs);
39+
return getFlags() & (NoUWrap | NoSWrap | IsExact | Disjoint | NonNeg |
40+
FmNoNans | FmNoInfs);
4241
}
4342

4443
void dropPoisonGeneratingFlags() {

llvm/lib/CodeGen/GlobalISel/CombinerHelper.cpp

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -229,18 +229,16 @@ bool CombinerHelper::matchFreezeOfSingleMaybePoisonOperand(
229229
Register DstOp = MI.getOperand(0).getReg();
230230
Register OrigOp = MI.getOperand(1).getReg();
231231

232-
if (OrigOp.isPhysical() || !MRI.hasOneNonDBGUse(OrigOp))
232+
if (!MRI.hasOneNonDBGUse(OrigOp))
233233
return false;
234234

235235
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))
240238
return false;
241239

242240
if (canCreateUndefOrPoison(OrigOp, MRI,
243-
/*ConsiderFlagsAndMetadata*/ false))
241+
/*ConsiderFlagsAndMetadata=*/false))
244242
return false;
245243

246244
std::optional<MachineOperand> MaybePoisonOperand;
@@ -254,9 +252,11 @@ bool CombinerHelper::matchFreezeOfSingleMaybePoisonOperand(
254252

255253
if (!MaybePoisonOperand)
256254
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.
259258
return false;
259+
}
260260
}
261261

262262
cast<GenericMachineInstr>(OrigDef)->dropPoisonGeneratingFlags();
@@ -271,11 +271,11 @@ bool CombinerHelper::matchFreezeOfSingleMaybePoisonOperand(
271271
LLT MaybePoisonOperandRegTy = MRI.getType(MaybePoisonOperandReg);
272272

273273
MatchInfo = [=](MachineIRBuilder &B) mutable {
274-
auto Reg = MRI.createGenericVirtualRegister(MaybePoisonOperandRegTy);
275274
B.setInsertPt(*OrigDef->getParent(), OrigDef->getIterator());
276-
B.buildFreeze(Reg, MaybePoisonOperandReg);
275+
auto Freeze = B.buildFreeze(MaybePoisonOperandRegTy, MaybePoisonOperandReg);
277276
replaceRegOpWith(
278-
MRI, *OrigDef->findRegisterUseOperand(MaybePoisonOperandReg, TRI), Reg);
277+
MRI, *OrigDef->findRegisterUseOperand(MaybePoisonOperandReg, TRI),
278+
Freeze.getReg(0));
279279
replaceRegWith(MRI, DstOp, OrigOp);
280280
};
281281
return true;

llvm/lib/CodeGen/GlobalISel/Utils.cpp

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1737,18 +1737,16 @@ static bool canCreateUndefOrPoison(Register Reg, const MachineRegisterInfo &MRI,
17371737
if (ConsiderFlagsAndMetadata && includesPoison(Kind) &&
17381738
GMI->hasPoisonGeneratingFlags())
17391739
return true;
1740-
}
1741-
// Conservatively return true.
1742-
else
1740+
} else {
1741+
// Conservatively return true.
17431742
return true;
1743+
}
17441744

17451745
switch (RegDef->getOpcode()) {
17461746
case TargetOpcode::G_FREEZE:
17471747
return false;
17481748
default:
1749-
if (isa<GCastOp>(RegDef) || isa<GBinOp>(RegDef))
1750-
return false;
1751-
return true;
1749+
return !isa<GCastOp>(RegDef) && !isa<GBinOp>(RegDef);
17521750
}
17531751
}
17541752

0 commit comments

Comments
 (0)