summaryrefslogtreecommitdiff
path: root/lib/Target/README.txt
diff options
context:
space:
mode:
authorBenjamin Kramer <benny.kra@googlemail.com>2010-07-08 11:39:10 +0000
committerBenjamin Kramer <benny.kra@googlemail.com>2010-07-08 11:39:10 +0000
commit1db071f0dae25d0c5a1af61ca71fa20d0a8e9370 (patch)
tree932a47f727c526ffbe4b42d99a819b9b3b669e83 /lib/Target/README.txt
parent67f8a7bc26c2993854a7e9ab43af362bc4477e3f (diff)
downloadllvm-1db071f0dae25d0c5a1af61ca71fa20d0a8e9370.tar.gz
llvm-1db071f0dae25d0c5a1af61ca71fa20d0a8e9370.tar.bz2
llvm-1db071f0dae25d0c5a1af61ca71fa20d0a8e9370.tar.xz
Teach instcombine to transform
(X >s -1) ? C1 : C2 and (X <s 0) ? C2 : C1 into ((X >>s 31) & (C2 - C1)) + C1, avoiding the conditional. This optimization could be extended to take non-const C1 and C2 but we better stay conservative to avoid code size bloat for now. for int sel(int n) { return n >= 0 ? 60 : 100; } we now generate sarl $31, %edi andl $40, %edi leal 60(%rdi), %eax instead of testl %edi, %edi movl $60, %ecx movl $100, %eax cmovnsl %ecx, %eax git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@107866 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/README.txt')
-rw-r--r--lib/Target/README.txt11
1 files changed, 0 insertions, 11 deletions
diff --git a/lib/Target/README.txt b/lib/Target/README.txt
index 90afe3640c..4d7ee08de1 100644
--- a/lib/Target/README.txt
+++ b/lib/Target/README.txt
@@ -906,17 +906,6 @@ The expression should optimize to something like
//===---------------------------------------------------------------------===//
-From GCC Bug 3756:
-int
-pn (int n)
-{
- return (n >= 0 ? 1 : -1);
-}
-Should combine to (n >> 31) | 1. Currently not optimized with "clang
--emit-llvm-bc | opt -std-compile-opts | llc".
-
-//===---------------------------------------------------------------------===//
-
void a(int variable)
{
if (variable == 4 || variable == 6)