[llvm] 84cea60 - Revert "[SelectionDAGBuilder] Compute and cache PreferredExtendType on demand."
Craig Topper via llvm-commits
llvm-commits at lists.llvm.org
Thu Aug 19 08:42:57 PDT 2021
Author: Craig Topper
Date: 2021-08-19T08:42:05-07:00
New Revision: 84cea602f9425d48ea42cff2fc3771a7bd5df285
URL: https://github.com/llvm/llvm-project/commit/84cea602f9425d48ea42cff2fc3771a7bd5df285
DIFF: https://github.com/llvm/llvm-project/commit/84cea602f9425d48ea42cff2fc3771a7bd5df285.diff
LOG: Revert "[SelectionDAGBuilder] Compute and cache PreferredExtendType on demand."
This reverts commit add08c874147638e52d89eb07e40797dbc98d73b.
There was a compile time jump on tramp3d-v4 on https://llvm-compile-time-tracker.com/
Want to see if it goes away with this reverted.
Added:
Modified:
llvm/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp
llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
Removed:
################################################################################
diff --git a/llvm/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp b/llvm/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp
index 6a083047283e..85c6eca5775e 100644
--- a/llvm/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/FunctionLoweringInfo.cpp
@@ -57,6 +57,28 @@ static bool isUsedOutsideOfDefiningBlock(const Instruction *I) {
return false;
}
+static ISD::NodeType getPreferredExtendForValue(const Value *V) {
+ // For the users of the source value being used for compare instruction, if
+ // the number of signed predicate is greater than unsigned predicate, we
+ // prefer to use SIGN_EXTEND.
+ //
+ // With this optimization, we would be able to reduce some redundant sign or
+ // zero extension instruction, and eventually more machine CSE opportunities
+ // can be exposed.
+ ISD::NodeType ExtendKind = ISD::ANY_EXTEND;
+ unsigned NumOfSigned = 0, NumOfUnsigned = 0;
+ for (const User *U : V->users()) {
+ if (const auto *CI = dyn_cast<CmpInst>(U)) {
+ NumOfSigned += CI->isSigned();
+ NumOfUnsigned += CI->isUnsigned();
+ }
+ }
+ if (NumOfSigned > NumOfUnsigned)
+ ExtendKind = ISD::SIGN_EXTEND;
+
+ return ExtendKind;
+}
+
void FunctionLoweringInfo::set(const Function &fn, MachineFunction &mf,
SelectionDAG *DAG) {
Fn = &fn;
@@ -211,6 +233,9 @@ void FunctionLoweringInfo::set(const Function &fn, MachineFunction &mf,
if (isUsedOutsideOfDefiningBlock(&I))
if (!isa<AllocaInst>(I) || !StaticAllocaMap.count(cast<AllocaInst>(&I)))
InitializeRegForValue(&I);
+
+ // Decide the preferred extend type for a value.
+ PreferredExtendType[&I] = getPreferredExtendForValue(&I);
}
}
diff --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
index ccc627317d66..eb2773580e04 100644
--- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGBuilder.cpp
@@ -9859,34 +9859,6 @@ SDValue TargetLowering::LowerOperation(SDValue Op, SelectionDAG &DAG) const {
llvm_unreachable("LowerOperation not implemented for this target!");
}
-static ISD::NodeType getPreferredExtendForValue(const Value *V) {
- ISD::NodeType ExtendKind = ISD::ANY_EXTEND;
-
- // TODO: Skip Arguments to match behavior when this was calculated only for
- // instructions.
- if (isa<Argument>(V))
- return ExtendKind;
-
- // For the users of the source value being used for compare instruction, if
- // the number of signed predicate is greater than unsigned predicate, we
- // prefer to use SIGN_EXTEND.
- //
- // With this optimization, we would be able to reduce some redundant sign or
- // zero extension instruction, and eventually more machine CSE opportunities
- // can be exposed.
- unsigned NumOfSigned = 0, NumOfUnsigned = 0;
- for (const User *U : V->users()) {
- if (const auto *CI = dyn_cast<CmpInst>(U)) {
- NumOfSigned += CI->isSigned();
- NumOfUnsigned += CI->isUnsigned();
- }
- }
- if (NumOfSigned > NumOfUnsigned)
- ExtendKind = ISD::SIGN_EXTEND;
-
- return ExtendKind;
-}
-
void
SelectionDAGBuilder::CopyValueToVirtualRegister(const Value *V, unsigned Reg) {
SDValue Op = getNonRegisterValue(V);
@@ -9903,12 +9875,10 @@ SelectionDAGBuilder::CopyValueToVirtualRegister(const Value *V, unsigned Reg) {
None); // This is not an ABI copy.
SDValue Chain = DAG.getEntryNode();
- // Look up the preferred extend kind if we've already computed it. Otherwise,
- // compute it and cache it.
- ISD::NodeType &ExtendType = FuncInfo.PreferredExtendType[V];
- if (!ExtendType)
- ExtendType = getPreferredExtendForValue(V);
-
+ ISD::NodeType ExtendType = ISD::ANY_EXTEND;
+ auto PreferredExtendIt = FuncInfo.PreferredExtendType.find(V);
+ if (PreferredExtendIt != FuncInfo.PreferredExtendType.end())
+ ExtendType = PreferredExtendIt->second;
RFV.getCopyToRegs(Op, DAG, getCurSDLoc(), Chain, nullptr, V, ExtendType);
PendingExports.push_back(Chain);
}
More information about the llvm-commits
mailing list