llvm-mirror/lib/Target/PowerPC
John Criswell 451362550e Added Louis Gerbarg. Louis is given credit in the CREDITS.TXT file, so I
assume Louis also holds copyright.

llvm-svn: 15534
2004-08-05 23:46:27 +00:00
..
LICENSE.TXT Added Louis Gerbarg. Louis is given credit in the CREDITS.TXT file, so I 2004-08-05 23:46:27 +00:00
Makefile Simplify makefile by combining all TableGen dependencies into one variable 2004-08-05 18:34:15 +00:00
PowerPC.h Add PowerPCBranchSelector to discover which are `long' branches. 2004-07-27 18:33:06 +00:00
PowerPC.td Do not mark LR as callee-save: not quite correctly done. Patch: Nate Begeman. 2004-07-30 15:51:51 +00:00
PowerPCAsmPrinter.cpp getValues does not exist 2004-08-04 17:29:14 +00:00
PowerPCBranchSelector.cpp Remove an extra 8 byte distance penalty. Patch by Nate Begeman. 2004-07-28 19:13:07 +00:00
PowerPCCodeEmitter.cpp Initial revision 2004-06-21 16:55:25 +00:00
PowerPCInstrBuilder.h * Wrap long lines (comments and code) 2004-07-07 20:01:36 +00:00
PowerPCInstrFormats.td Remove unused instruction classes 2004-08-04 21:18:57 +00:00
PowerPCInstrInfo.cpp ADDI can take several forms, including: 2004-07-26 21:50:38 +00:00
PowerPCInstrInfo.h Moved definition of invertPPCBranchOpcode() into PowerPCInstrInfo class. 2004-07-27 18:34:11 +00:00
PowerPCInstrInfo.td Remove unused opcodes. 2004-08-03 20:23:44 +00:00
PowerPCISelSimple.cpp Simplify loading (un)signed constants to registers, patch by Nate Begeman. 2004-07-28 19:13:49 +00:00
PowerPCJITInfo.h Do IMPLICIT_DEFs on incoming args' hard regs, to avoid confusing the regalloc. 2004-07-16 10:31:25 +00:00
PowerPCRegisterInfo.cpp * Temporarily suspend LR save/restore optimization as it is not quite correct 2004-07-30 15:50:45 +00:00
PowerPCRegisterInfo.h Remove empty unused method processFunctionBeforeFrameFinalized() 2004-07-27 18:38:40 +00:00
PowerPCRegisterInfo.td Renamed files: 2004-07-27 23:29:16 +00:00
PowerPCTargetMachine.cpp Run the branch selection pass right before the asm printer. 2004-07-27 18:39:34 +00:00
PowerPCTargetMachine.h * Codegen of GEPs dramatically improved by folding multiplies and adds 2004-07-23 16:08:20 +00:00
PPC32AsmPrinter.cpp getValues does not exist 2004-08-04 17:29:14 +00:00
PPC32CodeEmitter.cpp Initial revision 2004-06-21 16:55:25 +00:00
PPC32ISelSimple.cpp Simplify loading (un)signed constants to registers, patch by Nate Begeman. 2004-07-28 19:13:49 +00:00
README.txt * Conditional save/restore of LR disabled as it's not quite correct 2004-07-30 15:53:09 +00:00

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

Current bugs:
* 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.
* ulong to double.  ahhh, here's the problem:
  floatdidf assumes signed longs.  so if the high but of a ulong
  just happens to be set, you get the wrong sign.  The fix for this
  is to call cmpdi2 to compare against zero, if so shift right by one,
  convert to fp, and multiply by (add to itself).  the sequence would
  look like:
  {r3:r4} holds ulong a;
  li r5, 0
  li r6, 0 (set r5:r6 to ulong 0)
  call cmpdi2 ==> sets r3 <, =, > 0
  if r3 > 0
  call floatdidf as usual
  else
  shift right ulong a, 1 (we could use emitShift)
  call floatdidf
  fadd f1, f1, f1 (fp left shift by 1)
* linking llvmg++ .s files with gcc instead of g++

Codegen improvements needed:
* 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)
* should hint to the branch select pass that it doesn't need to print the
  second unconditional branch, so we don't end up with things like:
.LBBl42__2E_expand_function_8_21:	; LeafBlock37
	cmplwi cr0, r29, 11
	bne cr0, $+8
	b .LBBl42__2E_expand_function_8_674	; loopentry.24
	b .LBBl42__2E_expand_function_8_42	; NewDefault
	b .LBBl42__2E_expand_function_8_42	; NewDefault
* conditional restore of link register (tricky, temporarily backed out
  part of first attempt)

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:
* SingleSource
  `- Regression
  |  `- 2003-05-22-VarSizeArray
  |  `- casts (ulong to fp failure)
  `- Benchmarks
  |  `- Shootout-C++ : most programs fail, miscompilations
  `- UnitTests
  |  `- C++Catch
  |  `- SimpleC++Test
  |  `- ConditionalExpr (also C++)
* MultiSource
  |- Applications
  |  `- burg: miscompilation
  |  `- siod: llc bus error
  |  `- hbd: miscompilation
  |  `- d (make_dparser): miscompilation
  `- Benchmarks
     `- MallocBench/make: miscompilation