From 11357d4f40b2b4101ca39c79574171e058866227 Mon Sep 17 00:00:00 2001 From: Nick Lewycky Date: Sun, 2 Oct 2011 10:37:37 +0000 Subject: [PATCH] Add a new icmp+select optz'n. Also shows off the load(cst) folding added in r140966. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@140969 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Transforms/InstCombine/InstCombineSelect.cpp | 6 ++++++ test/Transforms/InstCombine/select.ll | 10 ++++++++++ 2 files changed, 16 insertions(+) diff --git a/lib/Transforms/InstCombine/InstCombineSelect.cpp b/lib/Transforms/InstCombine/InstCombineSelect.cpp index ae42d526ae7..91e60a4fb24 100644 --- a/lib/Transforms/InstCombine/InstCombineSelect.cpp +++ b/lib/Transforms/InstCombine/InstCombineSelect.cpp @@ -482,10 +482,16 @@ Instruction *InstCombiner::visitSelectInstWithICmp(SelectInst &SI, if (SimplifyWithOpReplaced(FalseVal, CmpLHS, CmpRHS, TD) == TrueVal || SimplifyWithOpReplaced(FalseVal, CmpRHS, CmpLHS, TD) == TrueVal) return ReplaceInstUsesWith(SI, FalseVal); + if (SimplifyWithOpReplaced(TrueVal, CmpLHS, CmpRHS, TD) == FalseVal || + SimplifyWithOpReplaced(TrueVal, CmpRHS, CmpLHS, TD) == FalseVal) + return ReplaceInstUsesWith(SI, FalseVal); } else if (Pred == ICmpInst::ICMP_NE) { if (SimplifyWithOpReplaced(TrueVal, CmpLHS, CmpRHS, TD) == FalseVal || SimplifyWithOpReplaced(TrueVal, CmpRHS, CmpLHS, TD) == FalseVal) return ReplaceInstUsesWith(SI, TrueVal); + if (SimplifyWithOpReplaced(FalseVal, CmpLHS, CmpRHS, TD) == TrueVal || + SimplifyWithOpReplaced(FalseVal, CmpRHS, CmpLHS, TD) == TrueVal) + return ReplaceInstUsesWith(SI, TrueVal); } // NOTE: if we wanted to, this is where to detect integer MIN/MAX diff --git a/test/Transforms/InstCombine/select.ll b/test/Transforms/InstCombine/select.ll index 4ca9bd2c07c..46615613eb9 100644 --- a/test/Transforms/InstCombine/select.ll +++ b/test/Transforms/InstCombine/select.ll @@ -799,3 +799,13 @@ define i1 @test60(i32 %x, i1* %y) nounwind { ; CHECK: @test60 ; CHECK: select } + +@glbl = constant i32 10 +define i32 @test61(i32* %ptr) { + %A = load i32* %ptr + %B = icmp eq i32* %ptr, @glbl + %C = select i1 %B, i32 %A, i32 10 + ret i32 %C +; CHECK: @test61 +; CHECK: ret i32 10 +} -- 2.34.1