diff options
author | Sanjay Patel <spatel@rotateright.com> | 2016-08-03 22:08:44 +0000 |
---|---|---|
committer | Sanjay Patel <spatel@rotateright.com> | 2016-08-03 22:08:44 +0000 |
commit | 00a324e8939f724855afb3f5f159cae9e1c53e92 (patch) | |
tree | 9b9838d295a5b25e1406ed373dabbfd09be58bb8 /llvm/lib/Transforms | |
parent | 129e709a03066521cdf90b585af15b0bfe637fce (diff) | |
download | bcm5719-llvm-00a324e8939f724855afb3f5f159cae9e1c53e92.tar.gz bcm5719-llvm-00a324e8939f724855afb3f5f159cae9e1c53e92.zip |
[InstCombine] use m_APInt to allow icmp eq (add X, C1), C2 folds for splat constant vectors
llvm-svn: 277659
Diffstat (limited to 'llvm/lib/Transforms')
-rw-r--r-- | llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp | 14 |
1 files changed, 8 insertions, 6 deletions
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp b/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp index 576aa2d28ac..75c434265fb 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp @@ -2227,13 +2227,14 @@ Instruction *InstCombiner::foldICmpEqualityWithConstant(ICmpInst &ICI) { } } break; - case Instruction::Add: + case Instruction::Add: { // Replace ((add A, B) != C) with (A != C-B) if B & C are constants. - // FIXME: Vectors are excluded by ConstantInt. - if (ConstantInt *BOp1C = dyn_cast<ConstantInt>(BOp1)) { - if (BO->hasOneUse()) - return new ICmpInst(ICI.getPredicate(), BOp0, - ConstantExpr::getSub(RHS, BOp1C)); + const APInt *BOC; + if (match(BOp1, m_APInt(BOC))) { + if (BO->hasOneUse()) { + Constant *SubC = ConstantExpr::getSub(RHS, cast<Constant>(BOp1)); + return new ICmpInst(ICI.getPredicate(), BOp0, SubC); + } } else if (*RHSV == 0) { // Replace ((add A, B) != 0) with (A != -B) if A or B is // efficiently invertible, or if the add has just this one use. @@ -2248,6 +2249,7 @@ Instruction *InstCombiner::foldICmpEqualityWithConstant(ICmpInst &ICI) { } } break; + } case Instruction::Xor: if (BO->hasOneUse()) { if (Constant *BOC = dyn_cast<Constant>(BOp1)) { |