From: Chris Lattner Date: Tue, 10 Apr 2007 21:14:01 +0000 (+0000) Subject: new micro optzn X-Git-Url: http://plrg.eecs.uci.edu/git/?a=commitdiff_plain;h=bae3bd7c19d1bbd408f568d5a29b7a96897c3637;p=oota-llvm.git new micro optzn git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@35867 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/X86/README.txt b/lib/Target/X86/README.txt index 39add2272cf..6c148d7973f 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 ; :0 [#uses=1] + %retval = zext i1 %0 to 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 +