aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/llvm/IntrinsicInst.h10
-rw-r--r--lib/Transforms/Scalar/InstructionCombining.cpp6
2 files changed, 11 insertions, 5 deletions
diff --git a/include/llvm/IntrinsicInst.h b/include/llvm/IntrinsicInst.h
index 8f5e05f70c..b8480551b5 100644
--- a/include/llvm/IntrinsicInst.h
+++ b/include/llvm/IntrinsicInst.h
@@ -202,9 +202,13 @@ namespace llvm {
"setLength called with value of wrong type!");
setOperand(3, L);
}
- void setAlignment(unsigned A) {
- const Type *Int32Ty = getOperand(4)->getType();
- setOperand(4, ConstantInt::get(Int32Ty, A));
+
+ void setAlignment(Constant* A) {
+ setOperand(4, A);
+ }
+
+ const Type *getAlignmentType() const {
+ return getOperand(4)->getType();
}
// Methods for support type inquiry through isa, cast, and dyn_cast:
diff --git a/lib/Transforms/Scalar/InstructionCombining.cpp b/lib/Transforms/Scalar/InstructionCombining.cpp
index 01c11ba840..8d36f74372 100644
--- a/lib/Transforms/Scalar/InstructionCombining.cpp
+++ b/lib/Transforms/Scalar/InstructionCombining.cpp
@@ -9694,7 +9694,8 @@ Instruction *InstCombiner::SimplifyMemTransfer(MemIntrinsic *MI) {
unsigned CopyAlign = MI->getAlignment();
if (CopyAlign < MinAlign) {
- MI->setAlignment(MinAlign);
+ MI->setAlignment(Context->getConstantInt(MI->getAlignmentType(),
+ MinAlign, false));
return MI;
}
@@ -9768,7 +9769,8 @@ Instruction *InstCombiner::SimplifyMemTransfer(MemIntrinsic *MI) {
Instruction *InstCombiner::SimplifyMemSet(MemSetInst *MI) {
unsigned Alignment = GetOrEnforceKnownAlignment(MI->getDest());
if (MI->getAlignment() < Alignment) {
- MI->setAlignment(Alignment);
+ MI->setAlignment(Context->getConstantInt(MI->getAlignmentType(),
+ Alignment, false));
return MI;
}