llvm-6502/lib/Target/Sparc
Chris Lattner cee63322ea Eliminate SetDirective, and replace it with HasSetDirective.
Default HasSetDirective to true, since most targets have it.

The targets that claim to not have it probably do, or it is
spelled differently. These include Blackfin, Mips, Alpha, and
PIC16.  All of these except pic16 are normal ELF targets, so
they almost certainly have it.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@94585 91177308-0d34-0410-b5e6-96231b3b80d8
2010-01-26 20:40:54 +00:00
..
AsmPrinter add a new MachineBasicBlock::getSymbol method, replacing 2010-01-26 04:55:51 +00:00
TargetInfo make -fno-rtti the default unless a directory builds with REQUIRES_RTTI. 2010-01-24 20:43:08 +00:00
CMakeLists.txt Normalize makefile comments and sort cmake file lists. 2009-08-31 13:05:24 +00:00
DelaySlotFiller.cpp
FPMover.cpp
Makefile make -fno-rtti the default unless a directory builds with REQUIRES_RTTI. 2010-01-24 20:43:08 +00:00
README.txt
Sparc.h
Sparc.td
SparcCallingConv.td
SparcInstrFormats.td
SparcInstrInfo.cpp several major improvements to the sparc backend: support for weak linkage 2009-09-15 17:46:24 +00:00
SparcInstrInfo.h several major improvements to the sparc backend: support for weak linkage 2009-09-15 17:46:24 +00:00
SparcInstrInfo.td Set isBarrier = 1 on return instructions, as they are control barriers. 2009-11-11 18:11:07 +00:00
SparcISelDAGToDAG.cpp Change SelectCode's argument from SDValue to SDNode *, to make it more 2010-01-05 01:24:18 +00:00
SparcISelLowering.cpp Remove ISD::DEBUG_LOC and ISD::DBG_LABEL, which are no longer used. 2009-11-23 23:20:51 +00:00
SparcISelLowering.h Enhance EmitInstrWithCustomInserter() so target can specify CFG changes that sdisel will use to properly complete phi nodes. 2009-09-18 21:02:19 +00:00
SparcMachineFunctionInfo.h add missing file 2009-09-15 18:03:13 +00:00
SparcMCAsmInfo.cpp Eliminate SetDirective, and replace it with HasSetDirective. 2010-01-26 20:40:54 +00:00
SparcMCAsmInfo.h
SparcRegisterInfo.cpp Make the MachineFunction argument of getFrameRegister const. 2009-11-12 21:00:03 +00:00
SparcRegisterInfo.h Make the MachineFunction argument of getFrameRegister const. 2009-11-12 21:00:03 +00:00
SparcRegisterInfo.td several major improvements to the sparc backend: support for weak linkage 2009-09-15 17:46:24 +00:00
SparcSubtarget.cpp
SparcSubtarget.h
SparcTargetMachine.cpp indicate what the native integer types for the target are. 2009-11-07 19:07:32 +00:00
SparcTargetMachine.h

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