@@ -65,7 +65,6 @@ class DataScalarizerVisitor : public InstVisitor<DataScalarizerVisitor, bool> {
6565 friend bool findAndReplaceVectors (llvm::Module &M);
6666
6767private:
68- Value *createNewGetElementPtr (GetElementPtrInst &GEPI);
6968 GlobalVariable *lookupReplacementGlobal (Value *CurrOperand);
7069 DenseMap<GlobalVariable *, GlobalVariable *> GlobalMap;
7170};
@@ -95,14 +94,13 @@ bool DataScalarizerVisitor::visitLoadInst(LoadInst &LI) {
9594 GetElementPtrInst *OldGEP =
9695 cast<GetElementPtrInst>(CE->getAsInstruction ());
9796 OldGEP->insertBefore (&LI);
98- Value *NewGEP = createNewGetElementPtr (*OldGEP);
9997 IRBuilder<> Builder (&LI);
10098 LoadInst *NewLoad =
101- Builder.CreateLoad (LI.getType (), NewGEP , LI.getName ());
99+ Builder.CreateLoad (LI.getType (), OldGEP , LI.getName ());
102100 NewLoad->setAlignment (LI.getAlign ());
103101 LI.replaceAllUsesWith (NewLoad);
104102 LI.eraseFromParent ();
105- OldGEP-> eraseFromParent ( );
103+ visitGetElementPtrInst (*OldGEP );
106104 return true ;
107105 }
108106 if (GlobalVariable *NewGlobal = lookupReplacementGlobal (CurrOpperand))
@@ -120,13 +118,12 @@ bool DataScalarizerVisitor::visitStoreInst(StoreInst &SI) {
120118 GetElementPtrInst *OldGEP =
121119 cast<GetElementPtrInst>(CE->getAsInstruction ());
122120 OldGEP->insertBefore (&SI);
123- Value *NewGEP = createNewGetElementPtr (*OldGEP);
124121 IRBuilder<> Builder (&SI);
125- StoreInst *NewStore = Builder.CreateStore (SI.getValueOperand (), NewGEP );
122+ StoreInst *NewStore = Builder.CreateStore (SI.getValueOperand (), OldGEP );
126123 NewStore->setAlignment (SI.getAlign ());
127124 SI.replaceAllUsesWith (NewStore);
128125 SI.eraseFromParent ();
129- OldGEP-> eraseFromParent ( );
126+ visitGetElementPtrInst (*OldGEP );
130127 return true ;
131128 }
132129 if (GlobalVariable *NewGlobal = lookupReplacementGlobal (CurrOpperand))
@@ -135,7 +132,8 @@ bool DataScalarizerVisitor::visitStoreInst(StoreInst &SI) {
135132 return false ;
136133}
137134
138- Value *DataScalarizerVisitor::createNewGetElementPtr (GetElementPtrInst &GEPI) {
135+ bool DataScalarizerVisitor::visitGetElementPtrInst (GetElementPtrInst &GEPI) {
136+
139137 unsigned NumOperands = GEPI.getNumOperands ();
140138 GlobalVariable *NewGlobal = nullptr ;
141139 for (unsigned I = 0 ; I < NumOperands; ++I) {
@@ -145,21 +143,16 @@ Value *DataScalarizerVisitor::createNewGetElementPtr(GetElementPtrInst &GEPI) {
145143 break ;
146144 }
147145 if (!NewGlobal)
148- return nullptr ;
146+ return false ;
149147
150148 IRBuilder<> Builder (&GEPI);
151149 SmallVector<Value *, MaxVecSize> Indices;
152150 for (auto &Index : GEPI.indices ())
153151 Indices.push_back (Index);
154152
155- return Builder.CreateGEP (NewGlobal->getValueType (), NewGlobal, Indices,
156- GEPI.getName (), GEPI.getNoWrapFlags ());
157- }
158-
159- bool DataScalarizerVisitor::visitGetElementPtrInst (GetElementPtrInst &GEPI) {
160- Value *NewGEP = createNewGetElementPtr (GEPI);
161- if (!NewGEP)
162- return false ;
153+ Value *NewGEP =
154+ Builder.CreateGEP (NewGlobal->getValueType (), NewGlobal, Indices,
155+ GEPI.getName (), GEPI.getNoWrapFlags ());
163156 GEPI.replaceAllUsesWith (NewGEP);
164157 GEPI.eraseFromParent ();
165158 return true ;
0 commit comments