case Instruction::ShuffleVector:
return ConstantExpr::getShuffleVector(
Ops[0], Ops[1], cast<ShuffleVectorInst>(InstOrCE)->getShuffleMask());
+ case Instruction::Load: {
+ const auto *LI = dyn_cast<LoadInst>(InstOrCE);
+ if (LI->isVolatile())
+ return nullptr;
+ return ConstantFoldLoadFromConstPtr(Ops[0], LI->getType(), DL);
+ }
}
}
Ops.push_back(Op);
}
- if (const auto *LI = dyn_cast<LoadInst>(I)) {
- if (LI->isVolatile())
- return nullptr;
- return ConstantFoldLoadFromConstPtr(Ops[0], LI->getType(), DL);
- }
-
return ConstantFoldInstOperands(I, Ops, DL, TLI);
}
if (!AllowRefinement && canCreatePoison(cast<Operator>(I)))
return nullptr;
- if (LoadInst *LI = dyn_cast<LoadInst>(I))
- if (!LI->isVolatile())
- return ConstantFoldLoadFromConstPtr(ConstOps[0], LI->getType(), Q.DL);
-
return ConstantFoldInstOperands(I, ConstOps, Q.DL, Q.TLI);
}
Operands[i] = C;
}
- if (LoadInst *LI = dyn_cast<LoadInst>(I)) {
- if (!LI->isVolatile())
- return ConstantFoldLoadFromConstPtr(Operands[0], LI->getType(), DL);
- }
return ConstantFoldInstOperands(I, Operands, DL, TLI);
}
if (MadeImprovement) {
Constant *C = nullptr;
const DataLayout &DL = getDataLayout();
- if (const LoadInst *Load = dyn_cast<LoadInst>(I)) {
- if (!Load->isVolatile())
- C = ConstantFoldLoadFromConstPtr(Operands[0], Load->getType(),
- DL);
- } else
- C = ConstantFoldInstOperands(I, Operands, DL, &TLI);
+ C = ConstantFoldInstOperands(I, Operands, DL, &TLI);
if (!C) return V;
return getSCEV(C);
}