llvm-6502/lib/Target/Sparc
Chandler Carruth 974a445bd9 Re-sort all of the includes with ./utils/sort_includes.py so that
subsequent changes are easier to review. About to fix some layering
issues, and wanted to separate out the necessary churn.

Also comment and sink the include of "Windows.h" in three .inc files to
match the usage in Memory.inc.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@198685 91177308-0d34-0410-b5e6-96231b3b80d8
2014-01-07 11:48:04 +00:00
..
AsmParser [Sparc] Add support for parsing sparc asm modifiers such as %hi, %lo etc., 2014-01-07 08:00:49 +00:00
Disassembler [Sparc] Explicitly cast -1 to unsigned to fix buildbot errors. 2014-01-06 08:24:44 +00:00
InstPrinter Re-sort all of the includes with ./utils/sort_includes.py so that 2014-01-07 11:48:04 +00:00
MCTargetDesc Re-sort all of the includes with ./utils/sort_includes.py so that 2014-01-07 11:48:04 +00:00
TargetInfo Prune redundant dependencies in LLVMBuild.txt. 2013-12-11 00:30:57 +00:00
CMakeLists.txt [Sparc] Add initial implementation of disassembler for sparc 2014-01-06 08:08:58 +00:00
DelaySlotFiller.cpp [Sparc] Do not hardcode nop in the delay slot of TLS_CALL. Use DelaySlotFiller to fill the delay slot instead. 2013-10-08 02:50:29 +00:00
LLVMBuild.txt [Sparc] Add initial implementation of disassembler for sparc 2014-01-06 08:08:58 +00:00
Makefile [Sparc] Add initial implementation of disassembler for sparc 2014-01-06 08:08:58 +00:00
README.txt Sparc: No functionality change. Cleanup whitespaces, comment formatting etc., 2013-06-04 18:33:25 +00:00
Sparc.h [Sparc] Lower and MachineInstr to MC and print assembly using MCInstPrinter. 2013-12-26 01:49:59 +00:00
Sparc.td [Sparc] Add the initial implementation of an asm parser for sparc/sparcv9. 2014-01-04 11:30:13 +00:00
SparcAsmPrinter.cpp Re-sort all of the includes with ./utils/sort_includes.py so that 2014-01-07 11:48:04 +00:00
SparcCallingConv.td [Sparc] Correctly handle call to functions with ReturnsTwice attribute. 2013-09-05 05:32:16 +00:00
SparcCodeEmitter.cpp [Sparc] Add initial implementation of MC Code emitter for sparc. 2014-01-05 02:13:48 +00:00
SparcFrameLowering.cpp SparcFrameLowering.cpp: Prune 'DL' [-Wunused-variable] 2013-11-25 00:52:46 +00:00
SparcFrameLowering.h [Sparc] Emit large negative adjustments to SP/FP with sethi+xor instead of sethi+or. This generates correct code for both sparc32 and sparc64. 2013-11-24 20:23:25 +00:00
SparcInstr64Bit.td [Sparc] Add initial implementation of disassembler for sparc 2014-01-06 08:08:58 +00:00
SparcInstrFormats.td [Sparc] Add initial implementation of disassembler for sparc 2014-01-06 08:08:58 +00:00
SparcInstrInfo.cpp [weak vtables] Remove a bunch of weak vtables 2013-11-19 00:57:56 +00:00
SparcInstrInfo.h [weak vtables] Remove a bunch of weak vtables 2013-11-19 00:57:56 +00:00
SparcInstrInfo.td [Sparc] Add support for parsing memory operands in sparc AsmParser. 2014-01-07 01:49:11 +00:00
SparcISelDAGToDAG.cpp ISelDAG: spot chain cycles involving MachineNodes 2013-09-22 08:21:56 +00:00
SparcISelLowering.cpp Re-sort all of the includes with ./utils/sort_includes.py so that 2014-01-07 11:48:04 +00:00
SparcISelLowering.h [Sparc]: Implement getSetCCResultType() in SparcTargetLowering so that umulo/smulo can be lowered on sparcv9 without an assertion error. 2013-12-09 04:02:15 +00:00
SparcJITInfo.cpp Re-sort all of the includes with ./utils/sort_includes.py so that 2014-01-07 11:48:04 +00:00
SparcJITInfo.h [Sparc] Implement JIT for SPARC. 2013-10-08 07:15:22 +00:00
SparcMachineFunctionInfo.cpp
SparcMachineFunctionInfo.h [Sparc] Add support for leaf functions in sparc backend. 2013-05-29 04:46:31 +00:00
SparcMCInstLower.cpp Re-sort all of the includes with ./utils/sort_includes.py so that 2014-01-07 11:48:04 +00:00
SparcRegisterInfo.cpp [Sparc] Emit large negative adjustments to SP/FP with sethi+xor instead of sethi+or. This generates correct code for both sparc32 and sparc64. 2013-11-24 20:23:25 +00:00
SparcRegisterInfo.h Remove getEHExceptionRegister and getEHHandlerRegister. 2013-10-07 13:39:22 +00:00
SparcRegisterInfo.td [Sparc] Added V9's extra floating point registers and their aliases. 2013-08-25 17:03:02 +00:00
SparcRelocations.h [Sparc] Implement JIT for SPARC. 2013-10-08 07:15:22 +00:00
SparcSelectionDAGInfo.cpp
SparcSelectionDAGInfo.h
SparcSubtarget.cpp [Sparc] Add long double (f128) instructions to sparc backend. 2013-08-25 18:30:06 +00:00
SparcSubtarget.h Move Sparc's getDataLayout out of line and add comments. 2013-12-11 01:07:43 +00:00
SparcTargetMachine.cpp Make the llvm mangler depend only on DataLayout. 2014-01-03 19:21:54 +00:00
SparcTargetMachine.h [Sparc] Implement JIT for SPARC. 2013-10-08 07:15:22 +00:00
SparcTargetStreamer.h [Sparc] Lower and MachineInstr to MC and print assembly using MCInstPrinter. 2013-12-26 01:49: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

* Use %g0 directly to materialize 0. No instruction is required.