diff options
author | Michael Zolotukhin <mzolotukhin@apple.com> | 2015-07-15 00:19:51 +0000 |
---|---|---|
committer | Michael Zolotukhin <mzolotukhin@apple.com> | 2015-07-15 00:19:51 +0000 |
commit | 31b3eaaf28d8d4dfba82fa19bd6a6a05a679955e (patch) | |
tree | f9deef288689a0aa675ddaf86b9f0ebdcb9f3af5 /llvm/lib/Transforms/Scalar/LoopUnrollPass.cpp | |
parent | 2a66738f5ca0e3dc9fa86924f718f5556449c907 (diff) | |
download | bcm5719-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.cpp | 15 |
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 |