llvm-6502/lib/Target/PowerPC
Misha Brukman 9a771d55fe Save and restore LR just like any other register and ONLY if we actually modify
it (due to calls or globals access).  We now compile `void empty(){}' to `blr'.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@15274 91177308-0d34-0410-b5e6-96231b3b80d8
2004-07-27 17:17:18 +00:00
..
Makefile The generated instruction selector isn't (yet) functional 2004-07-16 20:31:13 +00:00
PowerPC.td Register LR is callee-saved 2004-07-27 17:14:34 +00:00
PowerPCAsmPrinter.cpp Increment the label number in runOnFunction() rather than while printing out 2004-07-26 16:28:33 +00:00
PowerPCCodeEmitter.cpp Initial revision 2004-06-21 16:55:25 +00:00
PowerPCInstrInfo.cpp ADDI can take several forms, including: 2004-07-26 21:50:38 +00:00
PowerPCInstrInfo.h Add prototype for TargetInstrInfo::isMoveInstr() 2004-07-16 20:50:55 +00:00
PowerPCISelSimple.cpp Add IMPLICIT_DEF of LR for branch-and-link instrs (calls and global accesses) 2004-07-27 17:13:58 +00:00
PowerPCRegisterInfo.cpp Save and restore LR just like any other register and ONLY if we actually modify 2004-07-27 17:17:18 +00:00
PowerPCRegisterInfo.h Initial revision 2004-06-21 16:55:25 +00:00
PowerPCTargetMachine.h * Codegen of GEPs dramatically improved by folding multiplies and adds 2004-07-23 16:08:20 +00:00
PPC32AsmPrinter.cpp Increment the label number in runOnFunction() rather than while printing out 2004-07-26 16:28:33 +00:00
PPC32ISelSimple.cpp Add IMPLICIT_DEF of LR for branch-and-link instrs (calls and global accesses) 2004-07-27 17:13:58 +00:00
PPC.h Initial revision 2004-06-21 16:55:25 +00:00
PPCAsmPrinter.cpp Increment the label number in runOnFunction() rather than while printing out 2004-07-26 16:28:33 +00:00
PPCCodeEmitter.cpp Initial revision 2004-06-21 16:55:25 +00:00
PPCInstrBuilder.h * Wrap long lines (comments and code) 2004-07-07 20:01:36 +00:00
PPCInstrInfo.td MovePCtoLR (which is `bl' in disguise) modifies LR implicitly 2004-07-27 17:15:05 +00:00
PPCJITInfo.h Initial revision 2004-06-21 16:55:25 +00:00
PPCRegisterInfo.td LR is a 32-bit int reg 2004-07-27 17:15:32 +00:00
PPCTargetMachine.cpp Bool alignment on MacOSX/PowerPC is 4 bytes. 2004-07-23 01:11:46 +00:00
README.txt More notes on bugs, unimplemented features, and suggested code improvements. 2004-07-26 16:23:55 +00:00

Currently unimplemented:
* cast fp to bool
* signed right shift of long by reg

Current bugs:
* conditional branches assume target is within 32k bytes
* large fixed-size allocas not correct, although should
  be closer to working.  Added code in PPCRegisterInfo.cpp
  to do >16bit subtractions to the stack pointer.

Codegen improvements needed:
* we unconditionally emit save/restore of LR even if we don't use it
* no alias analysis causes us to generate slow code for Shootout/matrix
* setCondInst needs to know branchless versions of seteq/setne/etc
* cast elimination pass (uint -> sbyte -> short, kill the byte -> short)

Current hacks:
* lazy insert of GlobalBaseReg definition at front of first MBB
  A prime candidate for sabre's "slightly above ISel" passes.
* cast code is huge, unwieldy.  Should probably be broken up into
  smaller pieces.
* visitLoadInst is getting awfully cluttered as well.

Currently failing tests:
* Regression
* SingleSource
  `- Benchmarks
  |  `- Shootout-C++ : most programs fail, miscompilations
  `- UnitTests
  |  `- 2003-05-26-Shorts
  |  `- 2003-07-09-LoadShorts
  |  `- 2004-06-20-StaticBitfieldInt
  `- C++Catch
  `- SimpleC++Test
  `- ConditionalExpr
  `- casts
  `- sumarray2d: large alloca miscompiled
  `- test_indvars
* MultiSource
  |- Applications
  |  `- burg: miscompilation
  |  `- siod: llc bus error
  |  `- hbd: miscompilation
  |  `- d (make_dparser): miscompilation
  `- Benchmarks
     `- MallocBench/make: branch target too far