From: Chris Lattner Date: Wed, 13 Sep 2006 04:19:50 +0000 (+0000) Subject: new note X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=d1468d3332a906ec81c2d2fd0d3b4908e07a06a1;p=oota-llvm.git new note git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30286 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/Target/X86/README.txt b/lib/Target/X86/README.txt index 5e2ab199ad2..14ea97d6710 100644 --- a/lib/Target/X86/README.txt +++ b/lib/Target/X86/README.txt @@ -643,3 +643,35 @@ This saves a movzbl, and saves a truncate if it doesn't get coallesced right. This is a simple DAGCombine to propagate the zext through the and. //===---------------------------------------------------------------------===// + +GCC's ix86_expand_int_movcc function (in i386.c) has a ton of interesting +simplifications for integer "x cmp y ? a : b". For example, instead of: + +int G; +void f(int X, int Y) { + G = X < 0 ? 14 : 13; +} + +compiling to: + +_f: + movl $14, %eax + movl $13, %ecx + movl 4(%esp), %edx + testl %edx, %edx + cmovl %eax, %ecx + movl %ecx, _G + ret + +it could be: +_f: + movl 4(%esp), %eax + sarl $31, %eax + notl %eax + addl $14, %eax + movl %eax, _G + ret + +etc. + +//===---------------------------------------------------------------------===//