diff options
Diffstat (limited to 'llvm')
| -rw-r--r-- | llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp | 6 | ||||
| -rw-r--r-- | llvm/test/Transforms/InstCombine/not.ll | 3 |
2 files changed, 4 insertions, 5 deletions
diff --git a/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp b/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp index 4ca967d3afb..c0798e164c3 100644 --- a/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp +++ b/llvm/lib/Transforms/InstCombine/InstCombineCompares.cpp @@ -4514,10 +4514,10 @@ Instruction *InstCombiner::visitICmpInst(ICmpInst &I) { if (match(Op1, m_Not(m_Value(B)))) return new ICmpInst(I.getPredicate(), B, A); - // FIXME: Use m_APInt to include splat vector constants. - if (ConstantInt *RHSC = dyn_cast<ConstantInt>(Op1)) + const APInt *C; + if (match(Op1, m_APInt(C))) return new ICmpInst(I.getSwappedPredicate(), A, - ConstantExpr::getNot(RHSC)); + ConstantInt::get(Op1->getType(), ~(*C))); } Instruction *AddI = nullptr; diff --git a/llvm/test/Transforms/InstCombine/not.ll b/llvm/test/Transforms/InstCombine/not.ll index b52919071d2..8352c07a816 100644 --- a/llvm/test/Transforms/InstCombine/not.ll +++ b/llvm/test/Transforms/InstCombine/not.ll @@ -67,8 +67,7 @@ define i1 @not_cmp_constant(i32 %a) { define <2 x i1> @not_cmp_constant_vector(<2 x i32> %a) { ; CHECK-LABEL: @not_cmp_constant_vector( -; CHECK-NEXT: [[NOTA:%.*]] = xor <2 x i32> %a, <i32 -1, i32 -1> -; CHECK-NEXT: [[CMP:%.*]] = icmp slt <2 x i32> [[NOTA]], <i32 42, i32 42> +; CHECK-NEXT: [[CMP:%.*]] = icmp sgt <2 x i32> %a, <i32 -43, i32 -43> ; CHECK-NEXT: ret <2 x i1> [[CMP]] ; %nota = xor <2 x i32> %a, <i32 -1, i32 -1> |

