summaryrefslogtreecommitdiffstats
path: root/llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp
diff options
context:
space:
mode:
authorMichael Zolotukhin <mzolotukhin@apple.com>2015-07-15 00:19:51 +0000
committerMichael Zolotukhin <mzolotukhin@apple.com>2015-07-15 00:19:51 +0000
commit31b3eaaf28d8d4dfba82fa19bd6a6a05a679955e (patch)
treef9deef288689a0aa675ddaf86b9f0ebdcb9f3af5 /llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp
parent2a66738f5ca0e3dc9fa86924f718f5556449c907 (diff)
downloadbcm5719-llvm-31b3eaaf28d8d4dfba82fa19bd6a6a05a679955e.tar.gz
bcm5719-llvm-31b3eaaf28d8d4dfba82fa19bd6a6a05a679955e.zip
[LoopUnrolling] Handle cast instructions.
During estimation of unrolling effect we should be able to propagate constants through casts. Differential Revision: http://reviews.llvm.org/D10207 llvm-svn: 242257
Diffstat (limited to 'llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp')
-rw-r--r--llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp15
1 files changed, 15 insertions, 0 deletions
diff --git a/llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp b/llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp
index d78db6c369b..ff1acc1f579 100644
--- a/llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp
+++ b/llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp
@@ -436,6 +436,21 @@ private:
return true;
}
+
+ bool visitCastInst(CastInst &I) {
+ // Propagate constants through casts.
+ Constant *COp = dyn_cast<Constant>(I.getOperand(0));
+ if (!COp)
+ COp = SimplifiedValues.lookup(I.getOperand(0));
+ if (COp)
+ if (Constant *C =
+ ConstantExpr::getCast(I.getOpcode(), COp, I.getType())) {
+ SimplifiedValues[&I] = C;
+ return true;
+ }
+
+ return Base::visitCastInst(I);
+ }
};
} // namespace
OpenPOWER on IntegriCloud