@@ -155,32 +155,35 @@ class DXILPrepareModule : public ModulePass {
155
155
}
156
156
157
157
// Also omit the bitcast for matching global array types
158
- if (auto *GlobalVar = llvm:: dyn_cast<llvm:: GlobalVariable>(Operand)) {
159
- llvm:: Type *ValTy = GlobalVar->getValueType ();
158
+ if (auto *GlobalVar = dyn_cast<GlobalVariable>(Operand)) {
159
+ Type *ValTy = GlobalVar->getValueType ();
160
160
161
- if (auto *ArrTy = llvm:: dyn_cast<llvm:: ArrayType>(ValTy)) {
162
- llvm:: Type *ElTy = ArrTy->getElementType ();
161
+ if (auto *ArrTy = dyn_cast<ArrayType>(ValTy)) {
162
+ Type *ElTy = ArrTy->getElementType ();
163
163
if (ElTy == Ty)
164
164
return nullptr ;
165
165
}
166
166
}
167
167
168
+ // Also omit the bitcast for alloca instructions
169
+ if (auto *AI = dyn_cast<AllocaInst>(Operand)) {
170
+ return nullptr ;
171
+ }
172
+
168
173
// finally, drill down GEP instructions until we get the array
169
174
// that is being accessed, and compare element types
170
- if (llvm::ConstantExpr *GEPInstr =
171
- llvm::dyn_cast<llvm::ConstantExpr>(Operand)) {
172
- while (GEPInstr->getOpcode () == llvm::Instruction::GetElementPtr) {
173
- llvm::Value *OpArg = GEPInstr->getOperand (0 );
174
- if (llvm::ConstantExpr *NewGEPInstr =
175
- llvm::dyn_cast<llvm::ConstantExpr>(OpArg)) {
175
+ if (ConstantExpr *GEPInstr = dyn_cast<ConstantExpr>(Operand)) {
176
+ while (GEPInstr->getOpcode () == Instruction::GetElementPtr) {
177
+ Value *OpArg = GEPInstr->getOperand (0 );
178
+ if (ConstantExpr *NewGEPInstr = dyn_cast<ConstantExpr>(OpArg)) {
176
179
GEPInstr = NewGEPInstr;
177
180
continue ;
178
181
}
179
182
180
- if (auto *GlobalVar = llvm:: dyn_cast<llvm:: GlobalVariable>(OpArg)) {
181
- llvm:: Type *ValTy = GlobalVar->getValueType ();
182
- if (auto *ArrTy = llvm:: dyn_cast<llvm:: ArrayType>(ValTy)) {
183
- llvm:: Type *ElTy = ArrTy->getElementType ();
183
+ if (auto *GlobalVar = dyn_cast<GlobalVariable>(OpArg)) {
184
+ Type *ValTy = GlobalVar->getValueType ();
185
+ if (auto *ArrTy = dyn_cast<ArrayType>(ValTy)) {
186
+ Type *ElTy = ArrTy->getElementType ();
184
187
if (ElTy == Ty)
185
188
return nullptr ;
186
189
}
0 commit comments