From 5f6913cecd9f760c02754772cb57fa4d9a96624f Mon Sep 17 00:00:00 2001 From: Dan Gohman Date: Mon, 17 Sep 2007 14:49:27 +0000 Subject: [PATCH] Emit integer x<1 as x<=0, as comparisons with zero (now includeing 64-bit) can use test instead of cmp with an immediate. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@42026 91177308-0d34-0410-b5e6-96231b3b80d8 --- lib/Target/X86/X86ISelLowering.cpp | 5 +++++ test/CodeGen/X86/cmp1.ll | 7 +++++++ 2 files changed, 12 insertions(+) create mode 100644 test/CodeGen/X86/cmp1.ll diff --git a/lib/Target/X86/X86ISelLowering.cpp b/lib/Target/X86/X86ISelLowering.cpp index 55f37a65846..3b4b4f91750 100644 --- a/lib/Target/X86/X86ISelLowering.cpp +++ b/lib/Target/X86/X86ISelLowering.cpp @@ -1546,6 +1546,11 @@ static bool translateX86CC(ISD::CondCode SetCCOpcode, bool isFP, // X < 0 -> X == 0, jump on sign. X86CC = X86::COND_S; return true; + } else if (SetCCOpcode == ISD::SETLT && RHSC->getValue() == 1) { + // X < 1 -> X <= 0 + RHS = DAG.getConstant(0, RHS.getValueType()); + X86CC = X86::COND_LE; + return true; } } diff --git a/test/CodeGen/X86/cmp1.ll b/test/CodeGen/X86/cmp1.ll new file mode 100644 index 00000000000..241618c531a --- /dev/null +++ b/test/CodeGen/X86/cmp1.ll @@ -0,0 +1,7 @@ +; RUN: llvm-as < %s | llc -march=x86-64 | grep -v cmp + +define i64 @foo(i64 %x) { + %t = icmp slt i64 %x, 1 + %r = zext i1 %t to i64 + ret i64 %r +}