[LLVMdev] speed and code size issues

Eli Friedman eli.friedman at gmail.com
Sat Jul 18 00:38:16 PDT 2009


On Fri, Jul 17, 2009 at 10:21 PM, John Regehr<regehr at cs.utah.edu> wrote:
> The global maximally embarrasing function is one where various versions of
> gcc (including llvm-gcc) emit code returning constant 0 and clang emits
> 762 bytes of x86.  The C code is this:
>
>   int ZZ_00005bbd(int x,int y){return m1s((x?0:x),a8s(y,y));}

The thing about testcases like that is that they heavily stress
instcombine; as far as I can tell, that testcase basically boils down
to instcombine interacting badly with clang's output for
"(short)(x?0:x)>0" (it ends up turning it into something roughly
equivalent to "(short)x>0 && x==0", which it doesn't know how to
fold).  And fixing weird instcombine cases like that tends to be
tedious and not very relevant to real-world code.

> The other embarrassing thing about these functions is that most compilers
> miscompile some of the 7 million functions.  llvm-gcc and clang are the
> only ones we tested that actually get them all right.

Well, that's good :)

-Eli




More information about the llvm-dev mailing list