llvm-6502/lib/Target/SparcV8
Chris Lattner 9072c05cd8 Compile:
uint %test(uint %X) {
        %Y = call uint %llvm.ctpop.i32(uint %X)
        ret uint %Y
}

to:

test:
        save -96, %o6, %o6
        sll %i0, 0, %l0
        popc %l0, %i0
        restore %g0, %g0, %g0
        retl
        nop

instead of to 40 logical ops.  Note the shift-by-zero that clears the top
part of the 64-bit V9 register.

Testcase here: CodeGen/SparcV8/ctpop.ll


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@25814 91177308-0d34-0410-b5e6-96231b3b80d8
2006-01-30 06:14:02 +00:00
..
.cvsignore
DelaySlotFiller.cpp
FPMover.cpp If the target has V9 instructions, this pass is a noop, don't bother 2006-01-30 05:51:14 +00:00
Makefile Add trivial subtarget support 2006-01-26 06:51:21 +00:00
README.txt First step towards V9 instructions in the V8 backend, two conditional move 2006-01-30 05:35:57 +00:00
SparcV8.h remove the V8 simple isel 2006-01-23 07:20:15 +00:00
SparcV8.td Subtarget feature can now set any variable to any value 2006-01-27 08:09:42 +00:00
SparcV8AsmPrinter.cpp Add explicit #includes of <iostream> 2006-01-22 23:41:00 +00:00
SparcV8InstrFormats.td Push ops list, asm string, and pattern all the way up to InstV8. Move the 2005-12-18 08:21:00 +00:00
SparcV8InstrInfo.cpp Tighten up some checks 2005-12-18 06:40:34 +00:00
SparcV8InstrInfo.h
SparcV8InstrInfo.td Compile: 2006-01-30 06:14:02 +00:00
SparcV8ISelDAGToDAG.cpp Compile: 2006-01-30 06:14:02 +00:00
SparcV8RegisterInfo.cpp New DAG node properties SNDPInFlag, SNDPOutFlag, and SNDPOptInFlag to replace 2006-01-09 18:28:21 +00:00
SparcV8RegisterInfo.h Pass extra regclasses into spilling code 2005-09-30 01:29:42 +00:00
SparcV8RegisterInfo.td Reserve G1 for frame offset stuff and use it to handle large stack frames. 2005-12-20 07:56:31 +00:00
SparcV8Subtarget.cpp Two changes: 2006-01-30 04:57:43 +00:00
SparcV8Subtarget.h Rest of subtarget support, remove references to ppc 2006-01-26 07:22:22 +00:00
SparcV8TargetMachine.cpp Add trivial subtarget support 2006-01-26 06:51:21 +00:00
SparcV8TargetMachine.h Add trivial subtarget support 2006-01-26 06:51:21 +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].