mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-15 04:30:12 +00:00
e7f96c515e
In particular, instead of compiling this: bool %test(int %A, int %B) { %C = setlt int %A, %B ret bool %C } to this: test: save %sp, -96, %sp subcc %i0, %i1, %g0 bl .LBBtest_1 ! nop ba .LBBtest_2 ! nop .LBBtest_1: ! or %g0, 1, %i0 ba .LBBtest_3 ! nop .LBBtest_2: ! or %g0, 0, %i0 ba .LBBtest_3 ! nop .LBBtest_3: ! restore %g0, %g0, %g0 retl nop We now compile it to this: test: save %sp, -96, %sp subcc %i0, %i1, %g0 or %g0, 1, %i0 bl .LBBtest_2 ! nop .LBBtest_1: ! or %g0, %g0, %i0 .LBBtest_2: ! restore %g0, %g0, %g0 retl nop git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@19213 91177308-0d34-0410-b5e6-96231b3b80d8 |
||
---|---|---|
.. | ||
DelaySlotFiller.cpp | ||
FPMover.cpp | ||
Makefile | ||
README.txt | ||
SparcV8.h | ||
SparcV8.td | ||
SparcV8AsmPrinter.cpp | ||
SparcV8CodeEmitter.cpp | ||
SparcV8InstrFormats.td | ||
SparcV8InstrInfo.cpp | ||
SparcV8InstrInfo.h | ||
SparcV8InstrInfo.td | ||
SparcV8ISelSimple.cpp | ||
SparcV8JITInfo.h | ||
SparcV8RegisterInfo.cpp | ||
SparcV8RegisterInfo.h | ||
SparcV8RegisterInfo.td | ||
SparcV8TargetMachine.cpp | ||
SparcV8TargetMachine.h |
SparcV8 backend skeleton ------------------------ This directory houses a 32-bit SPARC V8 backend employing an expander-based instruction selector. It is not yet functionally complete. Watch this space for more news coming soon! Current expected test failures ------------------------------ Here are the currently-expected SingleSource failures for V8 (Some C++ programs are crashing in libstdc++ at the moment; I'm not sure why.) (llc) SingleSource/Regression/C++/EH/exception_spec_test (llc) SingleSource/Regression/C++/EH/throw_rethrow_test Here are the currently-expected MultiSource failures for V8: (llc,cbe) MultiSource/Applications/d/make_dparser (llc,cbe) MultiSource/Applications/hexxagon (llc) MultiSource/Benchmarks/Fhourstones (llc,cbe) MultiSource/Benchmarks/McCat/03-testtrie (llc) MultiSource/Benchmarks/McCat/18-imp (llc,cbe) MultiSource/Benchmarks/Prolangs-C/bison/mybison (llc,cbe) MultiSource/Benchmarks/Prolangs-C/fixoutput (llc,cbe) MultiSource/Benchmarks/Prolangs-C/gnugo (llc,cbe) MultiSource/Benchmarks/Prolangs-C/plot2fig (llc,cbe) MultiSource/Benchmarks/Ptrdist/anagram (llc,cbe) MultiSource/Benchmarks/FreeBench/analyzer * DANGER * analyzer will run the machine out of VM (I don't know whether the following fail in cbe:) (llc) MultiSource/Benchmarks/FreeBench/distray (llc) MultiSource/Benchmarks/FreeBench/fourinarow (llc) MultiSource/Benchmarks/FreeBench/pifft (llc) MultiSource/Benchmarks/MallocBench/gs (llc) MultiSource/Benchmarks/Prolangs-C++/deriv1 (llc) MultiSource/Benchmarks/Prolangs-C++/deriv2 Known SPEC failures for V8 (probably not an exhaustive list): (llc) 134.perl (llc) 177.mesa (llc) 188.ammp -- FPMover bug? (llc) 256.bzip2 (llc,cbe) 130.li (native,llc,cbe) 126.gcc (native,llc,cbe) 255.vortex To-do ----- * support shl on longs (fourinarow needs this) * support casting 64-bit integers to FP types (fhourstones needs this) * support FP rem (call fmod) * Keep the address of the constant pool in a register instead of forming its address all of the time. * Change code like this: or %o0, %lo(.CPI_main_0), %o0 ld [%o0+0], %o0 into: ld [%o0+%lo(.CPI_main_0)], %o0 for constant pool access. * We can fold small constant offsets into the %hi/%lo references to constant pool addresses as well. * Directly support select instructions, and fold setcc instructions into them where possible. I think this is what afflicts the inner loop of Olden/tsp (hot block = tsp():no_exit.1.i, overall GCC/LLC = 0.03). * Generate fsqrtd for calls to sqrt() (~ 4% speedup on Olden/tsp). $Date$