[llvm-commits] CAST patch committed
rspencer at reidspencer.com
Sun Nov 26 17:12:14 PST 2006
I have just committed the CAST patch as part of the Signless Types work
(PR950). This isn't complete but it is working and it was time to commit
so we can make more incremental patches in the future. There's a few
things you should know:
1. Try not to use the createInferredCast method. It is currently relying
on signedness to make decisions about which cast opcode to use. Follow
up patches will remove these calls or make createInferredCast not depend
on sign of the types.
2. Although I tried for two weeks, I was unsuccessful in making LLVM
code generation emit the right code for "cast to bool". Currently, the
instcombine pass is turning these into "setne X, 0" as is the current
HEAD functionality. When the backend can handle a cast to bool properly
(including promotion from MVT:i1 to MVT:i8), then we can remove these.
For now, they stay or many tests will break.
3. Because of #2, two new tests will fail. These were created to test
the "cast to bool" functionality of the back end. These should be marked
XFAIL because we know there's a problem in the back end. I didn't mark
them XFAIL because I wanted to see if any of the back ends could pass
this to determine if its a general problem or only X86.
The patch passes all SingleSource and MultiSource tests. That is, there
are failures, but those failures don't deviate from the usual X86
failures we see (inline asm, packed, etc.).
I also ran the SPEC CINT2000 test suite. Several tests failed but I
don't think they are due to the cast patch. Here's the analysis of those
TEST-FAIL: llc /External/SPEC/CINT2000/175.vpr/175.vpr
TEST-FAIL: jit /External/SPEC/CINT2000/175.vpr/175.vpr
TEST-FAIL: cbe /External/SPEC/CINT2000/175.vpr/175.vpr
These all fail because of a small difference in floating point
computation and the
Makefile doesn't define an FP tolerance.
< Cost recomputed from scratch is 256.837830.
< Final Placement cost: 256.837
> Cost recomputed from scratch is 255.033325.
> Final Placement cost: 255.041
I couldn't find a good reason for this difference except for a
error in the computation of the "Cost".
TEST-FAIL: cbe /External/SPEC/CINT2000/176.gcc/176.gcc
There are significant differences in the assembly output, but this
test has been
failing similarly on recent (HEAD) nightly tests as well.
TEST-FAIL: jit /External/SPEC/CINT2000/186.crafty/186.crafty
Crash in the X86 code emitter due to inline asm:
llvm::MachineInstr&): Assertion `0 && "JIT does not support inline
These are coming from FD_ZERO, FD_SET and FD_ISSET macros used in
defined as inline ASM in /usr/include/bits/select.h on my machine.
TEST-FAIL: cbe /External/SPEC/CINT2000/186.crafty/186.crafty
I'm assuming the CBE didn't like inline ASM either. It produced no
TEST-FAIL: llc /External/SPEC/CINT2000/252.eon/252.eon
TEST-FAIL: jit /External/SPEC/CINT2000/252.eon/252.eon
TEST-FAIL: cbe /External/SPEC/CINT2000/252.eon/252.eon
These were all crashing in my GCC 4.0.3 stdlibc++ upon memory
(operator new). I tracked this down to an incorrect link of the
The makefiles link it as:
gcc -fno-exceptions Output/252.eon.llc.s -lm -lstdc++ -lm -o
However, the correct link line should be:
gcc -fno-exceptions Output/252.eon.llc.s
-L /proj/llvm/cfe/install-1/lib \
-L /proj/llvm/cfe/install-1/lib/gcc/i686-pc-linux-gnu/4.0.1/ \
-lm -lstdc++ -lm -o Output/252.eon.llc
The problem is that when llvm-test links it leaves unresolved
shared libraries around and they get resolved at runtime to the wrong
The other thing that could resolve this is to link the .s program
I tried both approaches and then the program passes.
TEST-FAIL: compile /External/SPEC/CINT2000/253.perlbmk/253.perlbmk
TEST-FAIL: llc /External/SPEC/CINT2000/253.perlbmk/253.perlbmk
TEST-FAIL: jit /External/SPEC/CINT2000/253.perlbmk/253.perlbmk
TEST-FAIL: cbe /External/SPEC/CINT2000/253.perlbmk/253.perlbmk
This test doesn't compile on my machine. Note that neither gcc 4.0.3
compile this test correctly. They both produce the same errors,
nt_perlmain.c:89: error: 'MAX_PATH' undeclared (first use in this
I noted this:
win32.c:13:19: error: tchar.h: No such file or directory
which would seem to indicate that there's something wrong with the
a win32 file probably shouldn't be compiled on this platform.
All the other SPEC CINT2000 tests pass. Unfortunately, I can't test
CFP2000 because there are build problems related to f95 which I don't
More information about the llvm-commits