new micro optzn
authorChris Lattner <sabre@nondot.org>
Tue, 10 Apr 2007 21:14:01 +0000 (21:14 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 10 Apr 2007 21:14:01 +0000 (21:14 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35867 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Target/X86/README.txt

index 39add2272cfa2dc8ecd680bbaacdfd9d9f752aab..6c148d7973fec1e03c3a150c88c97c37b39c1b26 100644 (file)
@@ -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
+