aboutsummaryrefslogtreecommitdiffstats
path: root/lib/Target/X86/README.txt
diff options
context:
space:
mode:
authorChris Lattner <sabre@nondot.org>2007-04-10 21:14:01 +0000
committerChris Lattner <sabre@nondot.org>2007-04-10 21:14:01 +0000
commitbae3bd7c19d1bbd408f568d5a29b7a96897c3637 (patch)
treea12ab3874fa3723a5d2d8b166f15591c1cf31adb /lib/Target/X86/README.txt
parent7545422f088f4d71ab26bf4c2f8971cdfcd35c2b (diff)
downloadexternal_llvm-bae3bd7c19d1bbd408f568d5a29b7a96897c3637.zip
external_llvm-bae3bd7c19d1bbd408f568d5a29b7a96897c3637.tar.gz
external_llvm-bae3bd7c19d1bbd408f568d5a29b7a96897c3637.tar.bz2
new micro optzn
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35867 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Target/X86/README.txt')
-rw-r--r--lib/Target/X86/README.txt30
1 files changed, 30 insertions, 0 deletions
diff --git a/lib/Target/X86/README.txt b/lib/Target/X86/README.txt
index 39add22..6c148d7 100644
--- a/lib/Target/X86/README.txt
+++ b/lib/Target/X86/README.txt
@@ -1047,3 +1047,33 @@ int decode_byte (const decode_t* decode) {
}
+//===---------------------------------------------------------------------===//
+
+Consider:
+
+int isnegative(unsigned int X) {
+ return !(X < 2147483648U);
+}
+
+We current compile this to:
+
+define i32 @isnegative(i32 %X) {
+ icmp slt i32 %X, 0 ; <i1>:0 [#uses=1]
+ %retval = zext i1 %0 to i32 ; <i32> [#uses=1]
+ ret i32 %retval
+}
+
+and:
+
+_isnegative:
+ cmpl $0, 4(%esp)
+ sets %al
+ movzbl %al, %eax
+ ret
+
+We should produce:
+
+ movl 4(%esp), %eax
+ shrl $31, %eax
+ ret
+