llvm-6502/lib/Target/Sparc
Andrew Trick 061efcfb3e TargetPassConfig: confine the MC configuration to TargetMachine.
Passes prior to instructon selection are now split into separate configurable stages.
Header dependencies are simplified.
The bulk of this diff is simply removal of the silly DisableVerify flags.

Sorry for the target header churn. Attempting to stabilize them.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@149754 91177308-0d34-0410-b5e6-96231b3b80d8
2012-02-04 02:56:59 +00:00
..
MCTargetDesc
TargetInfo
CMakeLists.txt
DelaySlotFiller.cpp
FPMover.cpp
LLVMBuild.txt
Makefile
README.txt
Sparc.h Fix some leftover control reaches end of non-void function warnings. 2012-01-10 20:47:20 +00:00
Sparc.td
SparcAsmPrinter.cpp Sparc: Implement emitFrameIndexDebugValue and getDebugValue Location hooks. 2011-12-25 18:50:24 +00:00
SparcCallingConv.td
SparcFrameLowering.cpp
SparcFrameLowering.h
SparcInstrFormats.td
SparcInstrInfo.cpp Fix some leftover control reaches end of non-void function warnings. 2012-01-10 20:47:20 +00:00
SparcInstrInfo.h Sparc: Implement emitFrameIndexDebugValue and getDebugValue Location hooks. 2011-12-25 18:50:24 +00:00
SparcInstrInfo.td
SparcISelDAGToDAG.cpp
SparcISelLowering.cpp Remove VectorExtras. This unused helper was written for a type of API that is discouraged now. 2012-01-07 19:42:13 +00:00
SparcISelLowering.h
SparcMachineFunctionInfo.cpp
SparcMachineFunctionInfo.h
SparcRegisterInfo.cpp More dead code removal (using -Wunreachable-code) 2012-01-20 21:51:11 +00:00
SparcRegisterInfo.h
SparcRegisterInfo.td Add a CoveredBySubRegs property to Register descriptions. 2012-01-18 00:16:39 +00:00
SparcSelectionDAGInfo.cpp
SparcSelectionDAGInfo.h
SparcSubtarget.cpp
SparcSubtarget.h
SparcTargetMachine.cpp TargetPassConfig: confine the MC configuration to TargetMachine. 2012-02-04 02:56:59 +00:00
SparcTargetMachine.h TargetPassConfig: confine the MC configuration to TargetMachine. 2012-02-04 02:56:59 +00:00

To-do
-----

* Keep the address of the constant pool in a register instead of forming its
  address all of the time.
* We can fold small constant offsets into the %hi/%lo references to constant
  pool addresses as well.
* When in V9 mode, register allocate %icc[0-3].
* Add support for isel'ing UMUL_LOHI instead of marking it as Expand.
* Emit the 'Branch on Integer Register with Prediction' instructions.  It's
  not clear how to write a pattern for this though:

float %t1(int %a, int* %p) {
        %C = seteq int %a, 0
        br bool %C, label %T, label %F
T:
        store int 123, int* %p
        br label %F
F:
        ret float undef
}

codegens to this:

t1:
        save -96, %o6, %o6
1)      subcc %i0, 0, %l0
1)      bne .LBBt1_2    ! F
        nop
.LBBt1_1:       ! T
        or %g0, 123, %l0
        st %l0, [%i1]
.LBBt1_2:       ! F
        restore %g0, %g0, %g0
        retl
        nop

1) should be replaced with a brz in V9 mode.

* Same as above, but emit conditional move on register zero (p192) in V9 
  mode.  Testcase:

int %t1(int %a, int %b) {
        %C = seteq int %a, 0
        %D = select bool %C, int %a, int %b
        ret int %D
}

* Emit MULX/[SU]DIVX instructions in V9 mode instead of fiddling 
  with the Y register, if they are faster.

* Codegen bswap(load)/store(bswap) -> load/store ASI

* Implement frame pointer elimination, e.g. eliminate save/restore for 
  leaf fns.
* Fill delay slots

* Implement JIT support