@@ -154,20 +154,18 @@ class DXILPrepareModule : public ModulePass {
154154 return nullptr ;
155155 }
156156
157+ Type *ValTy = Operand->getType ();
157158 // Also omit the bitcast for matching global array types
158- if (auto *GlobalVar = dyn_cast<GlobalVariable>(Operand)) {
159- Type * ValTy = GlobalVar->getValueType ();
159+ if (auto *GlobalVar = dyn_cast<GlobalVariable>(Operand))
160+ ValTy = GlobalVar->getValueType ();
160161
161- if (auto *ArrTy = dyn_cast<ArrayType>(ValTy)) {
162- Type *ElTy = ArrTy->getElementType ();
163- if (ElTy == Ty)
164- return nullptr ;
165- }
166- }
162+ if (auto *AI = dyn_cast<AllocaInst>(Operand))
163+ ValTy = AI->getAllocatedType ();
167164
168- // Also omit the bitcast for alloca instructions
169- if (auto *AI = dyn_cast<AllocaInst>(Operand)) {
170- return nullptr ;
165+ if (auto *ArrTy = dyn_cast<ArrayType>(ValTy)) {
166+ Type *ElTy = ArrTy->getElementType ();
167+ if (ElTy == Ty)
168+ return nullptr ;
171169 }
172170
173171 // finally, drill down GEP instructions until we get the array
@@ -180,13 +178,14 @@ class DXILPrepareModule : public ModulePass {
180178 continue ;
181179 }
182180
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 ();
187- if (ElTy == Ty)
188- return nullptr ;
189- }
181+ if (auto *GlobalVar = dyn_cast<GlobalVariable>(OpArg))
182+ ValTy = GlobalVar->getValueType ();
183+ if (auto *AI = dyn_cast<AllocaInst>(Operand))
184+ ValTy = AI->getAllocatedType ();
185+ if (auto *ArrTy = dyn_cast<ArrayType>(ValTy)) {
186+ Type *ElTy = ArrTy->getElementType ();
187+ if (ElTy == Ty)
188+ return nullptr ;
190189 }
191190 break ;
192191 }
0 commit comments