| Index: src/IceConverter.cpp
|
| diff --git a/src/IceConverter.cpp b/src/IceConverter.cpp
|
| index b89666b379b43793ecf220e1d2604b84e9081463..387128909b51d393744878ce0e9e31a119356390 100644
|
| --- a/src/IceConverter.cpp
|
| +++ b/src/IceConverter.cpp
|
| @@ -96,32 +96,32 @@ public:
|
|
|
| void convertFunction(const Function *F) {
|
| Func = Ice::Cfg::create(Ctx, Converter.getNextSequenceNumber());
|
| - Ice::Cfg::setCurrentCfg(Func.get());
|
| -
|
| - VarMap.clear();
|
| - NodeMap.clear();
|
| - Func->setFunctionName(F->getName());
|
| - Func->setReturnType(convertToIceType(F->getReturnType()));
|
| - Func->setInternal(F->hasInternalLinkage());
|
| - Ice::TimerMarker T(Ice::TimerStack::TT_llvmConvert, Func.get());
|
| -
|
| - // The initial definition/use of each arg is the entry node.
|
| - for (auto ArgI = F->arg_begin(), ArgE = F->arg_end(); ArgI != ArgE;
|
| - ++ArgI) {
|
| - Func->addArg(mapValueToIceVar(ArgI));
|
| - }
|
| -
|
| - // Make an initial pass through the block list just to resolve the blocks
|
| - // in the original linearized order. Otherwise the ICE linearized order
|
| - // will be affected by branch targets in terminator instructions.
|
| - for (const BasicBlock &BBI : *F)
|
| - mapBasicBlockToNode(&BBI);
|
| - for (const BasicBlock &BBI : *F)
|
| - convertBasicBlock(&BBI);
|
| - Func->setEntryNode(mapBasicBlockToNode(&F->getEntryBlock()));
|
| - Func->computeInOutEdges();
|
| -
|
| - Ice::Cfg::setCurrentCfg(nullptr);
|
| + {
|
| + Ice::CfgLocalAllocatorScope _(Func.get());
|
| +
|
| + VarMap.clear();
|
| + NodeMap.clear();
|
| + Func->setFunctionName(F->getName());
|
| + Func->setReturnType(convertToIceType(F->getReturnType()));
|
| + Func->setInternal(F->hasInternalLinkage());
|
| + Ice::TimerMarker T(Ice::TimerStack::TT_llvmConvert, Func.get());
|
| +
|
| + // The initial definition/use of each arg is the entry node.
|
| + for (auto ArgI = F->arg_begin(), ArgE = F->arg_end(); ArgI != ArgE;
|
| + ++ArgI) {
|
| + Func->addArg(mapValueToIceVar(ArgI));
|
| + }
|
| +
|
| + // Make an initial pass through the block list just to resolve the blocks
|
| + // in the original linearized order. Otherwise the ICE linearized order
|
| + // will be affected by branch targets in terminator instructions.
|
| + for (const BasicBlock &BBI : *F)
|
| + mapBasicBlockToNode(&BBI);
|
| + for (const BasicBlock &BBI : *F)
|
| + convertBasicBlock(&BBI);
|
| + Func->setEntryNode(mapBasicBlockToNode(&F->getEntryBlock()));
|
| + Func->computeInOutEdges();
|
| + }
|
| Converter.translateFcn(std::move(Func));
|
| }
|
|
|
|
|