llvm-6502/lib/Target/Sparc
Chandler Carruth 283b399377 [Modules] Make Support/Debug.h modular. This requires it to not change
behavior based on other files defining DEBUG_TYPE, which means it cannot
define DEBUG_TYPE at all. This is actually better IMO as it forces folks
to define relevant DEBUG_TYPEs for their files. However, it requires all
files that currently use DEBUG(...) to define a DEBUG_TYPE if they don't
already. I've updated all such files in LLVM and will do the same for
other upstream projects.

This still leaves one important change in how LLVM uses the DEBUG_TYPE
macro going forward: we need to only define the macro *after* header
files have been #include-ed. Previously, this wasn't possible because
Debug.h required the macro to be pre-defined. This commit removes that.
By defining DEBUG_TYPE after the includes two things are fixed:

- Header files that need to provide a DEBUG_TYPE for some inline code
  can do so by defining the macro before their inline code and undef-ing
  it afterward so the macro does not escape.

- We no longer have rampant ODR violations due to including headers with
  different DEBUG_TYPE definitions. This may be mostly an academic
  violation today, but with modules these types of violations are easy
  to check for and potentially very relevant.

Where necessary to suppor headers with DEBUG_TYPE, I have moved the
definitions below the includes in this commit. I plan to move the rest
of the DEBUG_TYPE macros in LLVM in subsequent commits; this one is big
enough.

The comments in Debug.h, which were hilariously out of date already,
have been updated to reflect the recommended practice going forward.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@206822 91177308-0d34-0410-b5e6-96231b3b80d8
2014-04-21 22:55:11 +00:00
..
AsmParser LLVMBuild.txt: Reformat. 2014-04-10 11:16:17 +00:00
Disassembler [MC] Require an MCContext when constructing an MCDisassembler. 2014-04-15 04:40:56 +00:00
InstPrinter [Sparc] Add support for decoding jmpl/retl/ret instruction. 2014-03-02 21:17:44 +00:00
MCTargetDesc Completely rewrite ELFObjectWriter::RecordRelocation. 2014-03-29 06:26:49 +00:00
TargetInfo Prune redundant dependencies in LLVMBuild.txt. 2013-12-11 00:30:57 +00:00
CMakeLists.txt [Sparc] Use %r_disp32 for pc_rel entries in gcc_except_table and eh_frame. 2014-01-29 04:51:35 +00:00
DelaySlotFiller.cpp Replace PROLOG_LABEL with a new CFI_INSTRUCTION. 2014-03-07 06:08:31 +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] Add support for parsing annulled branch instructions. 2014-03-01 20:08:48 +00:00
Sparc.td [Sparc] Add VIS instructions to sparc backend. 2014-03-02 19:31:21 +00:00
SparcAsmPrinter.cpp [Sparc] Emit correct relocations for PIC code when integrated assembler is used. 2014-02-07 04:24:35 +00:00
SparcCallingConv.td The SPARCv9 ABI returns a float in %f0. 2014-01-12 04:13:17 +00:00
SparcCodeEmitter.cpp Replace PROLOG_LABEL with a new CFI_INSTRUCTION. 2014-03-07 06:08:31 +00:00
SparcFrameLowering.cpp Replace PROLOG_LABEL with a new CFI_INSTRUCTION. 2014-03-07 06:08:31 +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 trap on integer condition codes (Ticc) instructions to Sparc backend. 2014-03-02 23:39:07 +00:00
SparcInstrAliases.td [Sparc] Add trap on integer condition codes (Ticc) instructions to Sparc backend. 2014-03-02 23:39:07 +00:00
SparcInstrFormats.td [Sparc] Add trap on integer condition codes (Ticc) instructions to Sparc backend. 2014-03-02 23:39:07 +00:00
SparcInstrInfo.cpp [C++11] Replace llvm::next and llvm::prior with std::next and std::prev. 2014-03-02 12:27:27 +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 decoding 'swap' instruction. 2014-03-09 23:32:07 +00:00
SparcInstrVIS.td [Sparc] Add VIS instructions to sparc backend. 2014-03-02 19:31:21 +00:00
SparcISelDAGToDAG.cpp ISelDAG: spot chain cycles involving MachineNodes 2013-09-22 08:21:56 +00:00
SparcISelLowering.cpp Make consistent use of MCPhysReg instead of uint16_t throughout the tree. 2014-04-04 05:16:06 +00:00
SparcISelLowering.h Implement atomicrmw operations in 32 and 64 bits for SPARCv9. 2014-01-24 06:23:31 +00:00
SparcJITInfo.cpp [Sparc] Save and restore float registers that may be used for parameter passing. 2014-01-31 01:53:08 +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 [Sparc] Use SparcMCExpr::VariantKind itself as MachineOperand's target flags. 2014-02-07 02:36:06 +00:00
SparcRegisterInfo.cpp Make consistent use of MCPhysReg instead of uint16_t throughout the tree. 2014-04-04 05:16:06 +00:00
SparcRegisterInfo.h Make consistent use of MCPhysReg instead of uint16_t throughout the tree. 2014-04-04 05:16:06 +00:00
SparcRegisterInfo.td [Sparc] Add register class for floating point conditional flags (%fcc0 - %fcc3). 2014-03-02 02:12:33 +00:00
SparcRelocations.h [SparcV9] Add support for JIT in Sparc64. 2014-01-24 07:10:19 +00:00
SparcSelectionDAGInfo.cpp
SparcSelectionDAGInfo.h
SparcSubtarget.cpp [Modules] Make Support/Debug.h modular. This requires it to not change 2014-04-21 22:55:11 +00:00
SparcSubtarget.h [Sparc] Add VIS instructions to sparc backend. 2014-03-02 19:31:21 +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
SparcTargetObjectFile.cpp move getNameWithPrefix and getSymbol to TargetMachine. 2014-02-19 20:30:41 +00:00
SparcTargetObjectFile.h Switch all uses of LLVM_OVERRIDE to just use 'override' directly. 2014-03-02 09:09:27 +00:00
SparcTargetStreamer.h Construct the MCStreamer before constructing the MCTargetStreamer. 2014-01-26 06:06:37 +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.