diff options
author | Sanjay Patel <spatel@rotateright.com> | 2019-03-14 19:22:08 +0000 |
---|---|---|
committer | Sanjay Patel <spatel@rotateright.com> | 2019-03-14 19:22:08 +0000 |
commit | de1d5d3675992a60c95b17d70ea817468883c485 (patch) | |
tree | 705e488bdb810e0a0cba00b3a36906e11285c1dd /llvm/lib/Analysis/InstructionSimplify.cpp | |
parent | 6e86216531e2c53f171aaf8b911327ab616c6c0d (diff) | |
download | bcm5719-llvm-de1d5d3675992a60c95b17d70ea817468883c485.tar.gz bcm5719-llvm-de1d5d3675992a60c95b17d70ea817468883c485.zip |
[InstCombine] canonicalize funnel shift constant shift amount to be modulo bitwidth
The shift argument is defined to be modulo the bitwidth, so if that argument
is a constant, we can always reduce the constant to its minimal form to allow
better CSE and other follow-on transforms.
We need to be careful to ignore constant expressions here, or we will likely
infinite loop. I'm adding a general vector constant query for that case.
Differential Revision: https://reviews.llvm.org/D59374
llvm-svn: 356192
Diffstat (limited to 'llvm/lib/Analysis/InstructionSimplify.cpp')
-rw-r--r-- | llvm/lib/Analysis/InstructionSimplify.cpp | 1 |
1 files changed, 0 insertions, 1 deletions
diff --git a/llvm/lib/Analysis/InstructionSimplify.cpp b/llvm/lib/Analysis/InstructionSimplify.cpp index 047f84f3ef0..16c0b51a380 100644 --- a/llvm/lib/Analysis/InstructionSimplify.cpp +++ b/llvm/lib/Analysis/InstructionSimplify.cpp @@ -4917,7 +4917,6 @@ static Value *simplifyIntrinsic(Function *F, IterTy ArgBegin, IterTy ArgEnd, const APInt *ShAmtC; if (match(ShAmtArg, m_APInt(ShAmtC))) { // If there's effectively no shift, return the 1st arg or 2nd arg. - // TODO: For vectors, we could check each element of a non-splat constant. APInt BitWidth = APInt(ShAmtC->getBitWidth(), ShAmtC->getBitWidth()); if (ShAmtC->urem(BitWidth).isNullValue()) return ArgBegin[IID == Intrinsic::fshl ? 0 : 1]; |