@@ -65,7 +65,6 @@ class DataScalarizerVisitor : public InstVisitor<DataScalarizerVisitor, bool> {
65
65
friend bool findAndReplaceVectors (llvm::Module &M);
66
66
67
67
private:
68
- Value *createNewGetElementPtr (GetElementPtrInst &GEPI);
69
68
GlobalVariable *lookupReplacementGlobal (Value *CurrOperand);
70
69
DenseMap<GlobalVariable *, GlobalVariable *> GlobalMap;
71
70
};
@@ -95,14 +94,13 @@ bool DataScalarizerVisitor::visitLoadInst(LoadInst &LI) {
95
94
GetElementPtrInst *OldGEP =
96
95
cast<GetElementPtrInst>(CE->getAsInstruction ());
97
96
OldGEP->insertBefore (&LI);
98
- Value *NewGEP = createNewGetElementPtr (*OldGEP);
99
97
IRBuilder<> Builder (&LI);
100
98
LoadInst *NewLoad =
101
- Builder.CreateLoad (LI.getType (), NewGEP , LI.getName ());
99
+ Builder.CreateLoad (LI.getType (), OldGEP , LI.getName ());
102
100
NewLoad->setAlignment (LI.getAlign ());
103
101
LI.replaceAllUsesWith (NewLoad);
104
102
LI.eraseFromParent ();
105
- OldGEP-> eraseFromParent ( );
103
+ visitGetElementPtrInst (*OldGEP );
106
104
return true ;
107
105
}
108
106
if (GlobalVariable *NewGlobal = lookupReplacementGlobal (CurrOpperand))
@@ -120,13 +118,12 @@ bool DataScalarizerVisitor::visitStoreInst(StoreInst &SI) {
120
118
GetElementPtrInst *OldGEP =
121
119
cast<GetElementPtrInst>(CE->getAsInstruction ());
122
120
OldGEP->insertBefore (&SI);
123
- Value *NewGEP = createNewGetElementPtr (*OldGEP);
124
121
IRBuilder<> Builder (&SI);
125
- StoreInst *NewStore = Builder.CreateStore (SI.getValueOperand (), NewGEP );
122
+ StoreInst *NewStore = Builder.CreateStore (SI.getValueOperand (), OldGEP );
126
123
NewStore->setAlignment (SI.getAlign ());
127
124
SI.replaceAllUsesWith (NewStore);
128
125
SI.eraseFromParent ();
129
- OldGEP-> eraseFromParent ( );
126
+ visitGetElementPtrInst (*OldGEP );
130
127
return true ;
131
128
}
132
129
if (GlobalVariable *NewGlobal = lookupReplacementGlobal (CurrOpperand))
@@ -135,7 +132,8 @@ bool DataScalarizerVisitor::visitStoreInst(StoreInst &SI) {
135
132
return false ;
136
133
}
137
134
138
- Value *DataScalarizerVisitor::createNewGetElementPtr (GetElementPtrInst &GEPI) {
135
+ bool DataScalarizerVisitor::visitGetElementPtrInst (GetElementPtrInst &GEPI) {
136
+
139
137
unsigned NumOperands = GEPI.getNumOperands ();
140
138
GlobalVariable *NewGlobal = nullptr ;
141
139
for (unsigned I = 0 ; I < NumOperands; ++I) {
@@ -145,21 +143,16 @@ Value *DataScalarizerVisitor::createNewGetElementPtr(GetElementPtrInst &GEPI) {
145
143
break ;
146
144
}
147
145
if (!NewGlobal)
148
- return nullptr ;
146
+ return false ;
149
147
150
148
IRBuilder<> Builder (&GEPI);
151
149
SmallVector<Value *, MaxVecSize> Indices;
152
150
for (auto &Index : GEPI.indices ())
153
151
Indices.push_back (Index);
154
152
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 ());
163
156
GEPI.replaceAllUsesWith (NewGEP);
164
157
GEPI.eraseFromParent ();
165
158
return true ;
0 commit comments