summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms
diff options
context:
space:
mode:
Diffstat (limited to 'llvm/lib/Transforms')
-rw-r--r--llvm/lib/Transforms/Scalar/MemCpyOptimizer.cpp6
1 files changed, 6 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/Scalar/MemCpyOptimizer.cpp b/llvm/lib/Transforms/Scalar/MemCpyOptimizer.cpp
index 72127bb0d6e..550757a09f5 100644
--- a/llvm/lib/Transforms/Scalar/MemCpyOptimizer.cpp
+++ b/llvm/lib/Transforms/Scalar/MemCpyOptimizer.cpp
@@ -876,6 +876,12 @@ bool MemCpyOpt::processMemSetMemCpyDependence(MemCpyInst *MemCpy,
IRBuilder<> Builder(MemCpy->getNextNode());
+ // If the sizes have different types (i32 vs i64), promote both to i64.
+ if (DestSize->getType() != SrcSize->getType()) {
+ DestSize = Builder.CreateZExt(DestSize, Builder.getInt64Ty());
+ SrcSize = Builder.CreateZExt(SrcSize, Builder.getInt64Ty());
+ }
+
Value *MemsetLen =
Builder.CreateSelect(Builder.CreateICmpULE(DestSize, SrcSize),
ConstantInt::getNullValue(DestSize->getType()),
OpenPOWER on IntegriCloud