@@ -902,7 +902,8 @@ void EmitPass::MovPhiSources(llvm::BasicBlock* aBB)
902
902
Value* dstRootV; // root value of dst (dessa)
903
903
Value* srcRootV; // root value of src (dessa)
904
904
};
905
- std::list<PhiSrcMoveInfo> phiSrcDstList;
905
+ BumpPtrAllocator phiAllocator;
906
+ std::list<PhiSrcMoveInfo*> phiSrcDstList;
906
907
std::vector<std::pair<CVariable*, CVariable*>> emitList;
907
908
std::map<CVariable*, unsigned int> dstVTyMap;
908
909
llvm::BasicBlock *bb = aBB;
@@ -1003,19 +1004,19 @@ void EmitPass::MovPhiSources(llvm::BasicBlock* aBB)
1003
1004
// might have the same variable with two different CVariable.
1004
1005
if (dstRootV != srcRootV)
1005
1006
{
1006
- phiSrcDstList.push_back( PhiSrcMoveInfo() );
1007
- PhiSrcMoveInfo& phiInfo = phiSrcDstList.back( );
1008
- phiInfo.dstCVar = m_currShader->GetSymbol(PN );
1009
- phiInfo.srcCVar = m_currShader->GetSymbol(Src) ;
1010
- phiInfo.dstRootV = dstRootV ;
1011
- phiInfo.srcRootV = srcRootV ;
1007
+ PhiSrcMoveInfo* phiInfo = new (phiAllocator) PhiSrcMoveInfo( );
1008
+ phiInfo->dstCVar = m_currShader->GetSymbol(PN );
1009
+ phiInfo->srcCVar = m_currShader->GetSymbol(Src );
1010
+ phiInfo->dstRootV = dstRootV ;
1011
+ phiInfo->srcRootV = srcRootV ;
1012
+ phiSrcDstList.push_back(phiInfo) ;
1012
1013
1013
1014
int numElt = 0;
1014
1015
if (VectorType *vTy = dyn_cast<VectorType>(PN->getType()))
1015
1016
{
1016
1017
numElt = int_cast<int>(vTy->getNumElements());
1017
1018
}
1018
- dstVTyMap.insert(std::pair<CVariable*, unsigned int>(phiInfo. dstCVar, numElt));
1019
+ dstVTyMap.insert(std::pair<CVariable*, unsigned int>(phiInfo-> dstCVar, numElt));
1019
1020
}
1020
1021
}
1021
1022
}
@@ -1039,9 +1040,9 @@ void EmitPass::MovPhiSources(llvm::BasicBlock* aBB)
1039
1040
auto Et = phiSrcDstList.end();
1040
1041
for (; It != Et; ++It)
1041
1042
{
1042
- auto Cmp = [= ](const PhiSrcMoveInfo& Val)
1043
+ auto Cmp = [& ](const PhiSrcMoveInfo* Val)
1043
1044
{
1044
- return Val. srcRootV == It ->dstRootV;
1045
+ return Val-> srcRootV == (*It) ->dstRootV;
1045
1046
};
1046
1047
1047
1048
if (0 == std::count_if(phiSrcDstList.begin(), phiSrcDstList.end(), Cmp))
@@ -1065,8 +1066,8 @@ void EmitPass::MovPhiSources(llvm::BasicBlock* aBB)
1065
1066
// the entry becomes the one to be added into emitList.
1066
1067
It = phiSrcDstList.begin();
1067
1068
1068
- Value* dRootV = It ->dstRootV;
1069
- CVariable* D1 = It ->dstCVar;
1069
+ Value* dRootV = (*It) ->dstRootV;
1070
+ CVariable* D1 = (*It) ->dstCVar;
1070
1071
CVariable* T = m_currShader->GetNewVariable(D1);
1071
1072
dstVTyMap[T] = dstVTyMap[D1];
1072
1073
emitList.push_back(std::pair<CVariable*, CVariable*>(D1, T));
@@ -1075,9 +1076,9 @@ void EmitPass::MovPhiSources(llvm::BasicBlock* aBB)
1075
1076
auto LI = It, LE = phiSrcDstList.end();
1076
1077
for (++LI; LI != LE; ++LI)
1077
1078
{
1078
- PhiSrcMoveInfo& phiinfo = *LI;
1079
- if (phiinfo. srcRootV == dRootV) {
1080
- CVariable* sVar = phiinfo. srcCVar;
1079
+ PhiSrcMoveInfo* phiinfo = *LI;
1080
+ if (phiinfo-> srcRootV == dRootV) {
1081
+ CVariable* sVar = phiinfo-> srcCVar;
1081
1082
CVariable* nVar;
1082
1083
if (sVar->GetType() != T->GetType()) {
1083
1084
nVar = m_currShader->GetNewAlias(
@@ -1086,12 +1087,12 @@ void EmitPass::MovPhiSources(llvm::BasicBlock* aBB)
1086
1087
else {
1087
1088
nVar = T;
1088
1089
}
1089
- phiinfo. srcCVar = nVar;
1090
+ phiinfo-> srcCVar = nVar;
1090
1091
}
1091
1092
}
1092
1093
}
1093
1094
assert(It != Et);
1094
- emitList.push_back(std::pair<CVariable*, CVariable*>(It ->srcCVar, It ->dstCVar));
1095
+ emitList.push_back(std::pair<CVariable*, CVariable*>((*It) ->srcCVar, (*It) ->dstCVar));
1095
1096
phiSrcDstList.erase(It);
1096
1097
}
1097
1098
// emit the src-side phi-moves
0 commit comments