Index: src/IceCfg.cpp |
diff --git a/src/IceCfg.cpp b/src/IceCfg.cpp |
index 02d450329055afadfb076ac8cba482d0e66158ab..7b1b9affc2ebd7fe482e395a41374656e63645e5 100644 |
--- a/src/IceCfg.cpp |
+++ b/src/IceCfg.cpp |
@@ -75,6 +75,16 @@ void Cfg::swapNodes(NodeList &NewNodes) { |
Nodes[I]->resetIndex(I); |
} |
+template <> |
+Variable *Cfg::makeVariable<Variable>(Type Ty) { |
+ SizeT Index = Variables.size(); |
+ Variable *Var = Target->shouldSplitToVariable64On32(Ty) |
+ ? Variable64On32::create(this, Ty, Index) |
+ : Variable::create(this, Ty, Index); |
+ Variables.push_back(Var); |
+ return Var; |
+} |
+ |
void Cfg::addArg(Variable *Arg) { |
Arg->setIsArg(); |
Args.push_back(Arg); |
@@ -175,6 +185,11 @@ void Cfg::translate() { |
} |
TimerMarker T(TimerStack::TT_translate, this); |
+ // Create the Hi and Lo variables where a split was needed |
+ for (Variable *Var : Variables) |
+ if (auto Var64On32 = llvm::dyn_cast<Variable64On32>(Var)) |
+ Var64On32->initHiLo(this); |
+ |
dump("Initial CFG"); |
if (getContext()->getFlags().getEnableBlockProfile()) { |