Skip to content

Commit 77491dc

Browse files
frederik-hLukacma
authored andcommitted
expand-fp: Refactor modification status handling (NFC) (llvm#163542)
Modify the return value of the runImpl function which indicates whether or not the IR has been changed in a single place instead of doing it separately for each instruction at the insertion into the worklist. Further changes: Replace if-else in worklist processing loop by switch and add test cases which demonstrate that the "scalarize" function does not always add items to the worklist and hence a worklist emptiness check cannot be used for the runImpl return value.
1 parent 60a99c1 commit 77491dc

File tree

2 files changed

+1391
-28
lines changed

2 files changed

+1391
-28
lines changed

llvm/lib/CodeGen/ExpandFp.cpp

Lines changed: 33 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -993,7 +993,6 @@ static void addToWorklist(Instruction &I,
993993
static bool runImpl(Function &F, const TargetLowering &TLI,
994994
AssumptionCache *AC) {
995995
SmallVector<Instruction *, 4> Worklist;
996-
bool Modified = false;
997996

998997
unsigned MaxLegalFpConvertBitWidth =
999998
TLI.getMaxLargeFPConvertBitWidthSupported();
@@ -1003,50 +1002,49 @@ static bool runImpl(Function &F, const TargetLowering &TLI,
10031002
if (MaxLegalFpConvertBitWidth >= llvm::IntegerType::MAX_INT_BITS)
10041003
return false;
10051004

1006-
for (auto It = inst_begin(&F), End = inst_end(F); It != End;) {
1007-
Instruction &I = *It++;
1005+
auto ShouldHandleInst = [&](Instruction &I) {
10081006
Type *Ty = I.getType();
10091007
// TODO: This pass doesn't handle scalable vectors.
10101008
if (Ty->isScalableTy())
1011-
continue;
1009+
return false;
10121010

10131011
switch (I.getOpcode()) {
10141012
case Instruction::FRem:
1015-
if (!targetSupportsFrem(TLI, Ty) &&
1016-
FRemExpander::canExpandType(Ty->getScalarType())) {
1017-
addToWorklist(I, Worklist);
1018-
Modified = true;
1019-
}
1020-
break;
1013+
return !targetSupportsFrem(TLI, Ty) &&
1014+
FRemExpander::canExpandType(Ty->getScalarType());
1015+
10211016
case Instruction::FPToUI:
10221017
case Instruction::FPToSI: {
10231018
auto *IntTy = cast<IntegerType>(Ty->getScalarType());
1024-
if (IntTy->getIntegerBitWidth() <= MaxLegalFpConvertBitWidth)
1025-
continue;
1026-
1027-
addToWorklist(I, Worklist);
1028-
Modified = true;
1029-
break;
1019+
return IntTy->getIntegerBitWidth() > MaxLegalFpConvertBitWidth;
10301020
}
1021+
10311022
case Instruction::UIToFP:
10321023
case Instruction::SIToFP: {
10331024
auto *IntTy =
10341025
cast<IntegerType>(I.getOperand(0)->getType()->getScalarType());
1035-
if (IntTy->getIntegerBitWidth() <= MaxLegalFpConvertBitWidth)
1036-
continue;
1037-
1038-
addToWorklist(I, Worklist);
1039-
Modified = true;
1040-
break;
1026+
return IntTy->getIntegerBitWidth() > MaxLegalFpConvertBitWidth;
10411027
}
1042-
default:
1043-
break;
10441028
}
1029+
1030+
return false;
1031+
};
1032+
1033+
bool Modified = false;
1034+
for (auto It = inst_begin(&F), End = inst_end(F); It != End;) {
1035+
Instruction &I = *It++;
1036+
if (!ShouldHandleInst(I))
1037+
continue;
1038+
1039+
addToWorklist(I, Worklist);
1040+
Modified = true;
10451041
}
10461042

10471043
while (!Worklist.empty()) {
10481044
Instruction *I = Worklist.pop_back_val();
1049-
if (I->getOpcode() == Instruction::FRem) {
1045+
1046+
switch (I->getOpcode()) {
1047+
case Instruction::FRem: {
10501048
auto SQ = [&]() -> std::optional<SimplifyQuery> {
10511049
if (AC) {
10521050
auto Res = std::make_optional<SimplifyQuery>(
@@ -1058,11 +1056,18 @@ static bool runImpl(Function &F, const TargetLowering &TLI,
10581056
}();
10591057

10601058
expandFRem(cast<BinaryOperator>(*I), SQ);
1061-
} else if (I->getOpcode() == Instruction::FPToUI ||
1062-
I->getOpcode() == Instruction::FPToSI) {
1059+
break;
1060+
}
1061+
1062+
case Instruction::FPToUI:
1063+
case Instruction::FPToSI:
10631064
expandFPToI(I);
1064-
} else {
1065+
break;
1066+
1067+
case Instruction::UIToFP:
1068+
case Instruction::SIToFP:
10651069
expandIToFP(I);
1070+
break;
10661071
}
10671072
}
10681073

0 commit comments

Comments
 (0)