llvm-6502/test/CodeGen
Evan Cheng 393e277ecd Fix PR5024 with a big hammer: disable the double-def assertion in the scavenger.
LiveVariables add implicit kills to correctly track partial register kills. This works well enough and is fairly accurate. But coalescer can make it impossible to maintain these markers. e.g.

        BL <ga:sss1>, %R0<kill,undef>, %S0<kill>, %R0<imp-def>, %R1<imp-def,dead>, %R2<imp-def,dead>, %R3<imp-def,dead>, %R12<imp-def,dead>, %LR<imp-def,dead>, %D0<imp-def>, ...
...
	%reg1031<def> = FLDS <cp#1>, 0, 14, %reg0, Mem:LD4[ConstantPool]
...
   	%S0<def> = FCPYS %reg1031<kill>, 14, %reg0, %D0<imp-use,kill>

When reg1031 and S0 are coalesced, the copy (FCPYS) will be eliminated the the implicit-kill of D0 is lost. In this case it's possible to move the marker to the FLDS. But in many cases, this is not possible. Suppose

	%reg1031<def> = FOO <cp#1>, %D0<imp-def>
...
   	%S0<def> = FCPYS %reg1031<kill>, 14, %reg0, %D0<imp-use,kill>

When FCPYS goes away, the definition of S0 is the "FOO" instruction. However, transferring the D0 implicit-kill to FOO doesn't work since it is the def of D0 itself. We need to fix this in another time by introducing a "kill" pseudo instruction to track liveness.

Disabling the assertion is not ideal, but machine verifier is doing that job now. It's important to know double-def is not a miscomputation since it means a register should be free but it's not tracked as free. It's a performance issue instead.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@82677 91177308-0d34-0410-b5e6-96231b3b80d8
2009-09-24 02:27:09 +00:00
..
Alpha Eliminate more uses of llvm-as and llvm-dis. 2009-09-09 00:09:15 +00:00
ARM Fix PR5024 with a big hammer: disable the double-def assertion in the scavenger. 2009-09-24 02:27:09 +00:00
Blackfin Eliminate more uses of llvm-as and llvm-dis. 2009-09-09 00:09:15 +00:00
CBackend Eliminate more uses of llvm-as and llvm-dis. 2009-09-09 00:09:15 +00:00
CellSPU Convert more tests to avoid llvm-as. 2009-09-11 18:36:27 +00:00
CPP Eliminate more uses of llvm-as and llvm-dis. 2009-09-09 00:09:15 +00:00
Generic Convert more tests to avoid llvm-as. 2009-09-11 18:36:27 +00:00
Mips Eliminate more uses of llvm-as and llvm-dis. 2009-09-09 00:09:15 +00:00
MSP430 Allow symbols to start from the digit if target requests it. This allows, e.g. pinning 2009-09-18 16:57:42 +00:00
PIC16 Eliminate more uses of llvm-as and llvm-dis. 2009-09-09 00:09:15 +00:00
PowerPC Model the carry bit on ppc32. Without this we could 2009-09-18 20:15:22 +00:00
SPARC several major improvements to the sparc backend: support for weak linkage 2009-09-15 17:46:24 +00:00
SystemZ Eliminate more uses of llvm-as and llvm-dis. 2009-09-09 00:09:15 +00:00
Thumb Eliminate more uses of llvm-as and llvm-dis. 2009-09-09 00:09:15 +00:00
Thumb2 Convert more tests to avoid llvm-as. 2009-09-11 18:36:27 +00:00
X86 Clean up LiveVariables and change how it deals with partial updates and kills. This also eliminate the horrible check which scan forward to the end of the basic block. It should be faster and more accurate. 2009-09-24 02:15:22 +00:00
XCore Eliminate more uses of llvm-as and llvm-dis. 2009-09-09 00:09:15 +00:00