Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(197)

Unified Diff: src/IceTargetLowering.cpp

Issue 2177033002: Subzero: Local variable splitting. (Closed) Base URL: https://chromium.googlesource.com/native_client/pnacl-subzero.git@master
Patch Set: Code review changes, mostly renaming. Created 4 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « src/IceTargetLowering.h ('k') | src/IceTargetLoweringX86Base.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: src/IceTargetLowering.cpp
diff --git a/src/IceTargetLowering.cpp b/src/IceTargetLowering.cpp
index 1b9ca23bfe49eb96b1bc0dcc5ad38d72965c9adf..a2203dc44b08960deee9eeafad74fa70e175717a 100644
--- a/src/IceTargetLowering.cpp
+++ b/src/IceTargetLowering.cpp
@@ -565,16 +565,6 @@ void TargetLowering::sortVarsByAlignment(VarList &Dest,
});
}
-namespace {
-bool mightHaveStackSlot(const Variable *Var, const BitVector &IsVarReferenced) {
- if (!IsVarReferenced[Var->getIndex()])
- return false;
- if (Var->hasReg())
- return false;
- return true;
-}
-} // end of anonymous namespace
-
void TargetLowering::getVarStackSlotParams(
VarList &SortedSpilledVariables, SmallBitVector &RegsUsed,
size_t *GlobalsSize, size_t *SpillAreaSizeBytes,
@@ -594,30 +584,6 @@ void TargetLowering::getVarStackSlotParams(
}
}
- // Find each variable Var where:
- // - Var is actively referenced
- // - Var does not have a register
- // - Var's furthest ancestor through LinkedTo: Root
- // - Root has no active references, or has a register
- //
- // When any such Var is found, rotate the LinkedTo tree by swapping
- // Var->LinkedTo and Root->LinkedTo. This ensures that when Var needs a stack
- // slot, either its LinkedTo field is nullptr, or Var->getLinkedToRoot()
- // returns a variable with a stack slot.
- for (Variable *Var : Func->getVariables()) {
- if (!mightHaveStackSlot(Var, IsVarReferenced))
- continue;
- if (Variable *Root = Var->getLinkedToRoot()) {
- assert(Root->getLinkedTo() == nullptr);
- if (mightHaveStackSlot(Root, IsVarReferenced)) {
- // Found a "safe" root, no need to rotate the tree.
- continue;
- }
- Var->setLinkedTo(nullptr);
- Root->setLinkedTo(Var);
- }
- }
-
// If SimpleCoalescing is false, each variable without a register gets its
// own unique stack slot, which leads to large stack frames. If
// SimpleCoalescing is true, then each "global" variable without a register
@@ -647,8 +613,13 @@ void TargetLowering::getVarStackSlotParams(
}
// An argument either does not need a stack slot (if passed in a register)
// or already has one (if passed on the stack).
- if (Var->getIsArg())
+ if (Var->getIsArg()) {
+ if (!Var->hasReg()) {
+ assert(!Var->hasStackOffset());
+ Var->setHasStackOffset();
+ }
continue;
+ }
// An unreferenced variable doesn't need a stack slot.
if (!IsVarReferenced[Var->getIndex()])
continue;
@@ -656,6 +627,8 @@ void TargetLowering::getVarStackSlotParams(
// not need accounting here.
if (TargetVarHook(Var))
continue;
+ assert(!Var->hasStackOffset());
+ Var->setHasStackOffset();
SpilledVariables.push_back(Var);
}
« no previous file with comments | « src/IceTargetLowering.h ('k') | src/IceTargetLoweringX86Base.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698