llvm-6502/lib/CodeGen/SelectionDAG
Chris Lattner 3bd39d4ca8 Implement some dag combines that allow doing fneg/fabs/fcopysign in integer
registers if used by a bitconvert or using a bitconvert.  This allows us to
avoid constant pool loads and use cheaper integer instructions when the
values come from or end up in integer regs anyway.  For example, we now 
compile CodeGen/X86/fp-in-intregs.ll to:

_test1:
	movl	$2147483648, %eax
	xorl	4(%esp), %eax
	ret
_test2:
	movl	$1065353216, %eax
	orl	4(%esp), %eax
	andl	$3212836864, %eax
	ret

Instead of:
_test1:
	movss	4(%esp), %xmm0
	xorps	LCPI2_0, %xmm0
	movd	%xmm0, %eax
	ret
_test2:
	movss	4(%esp), %xmm0
	andps	LCPI3_0, %xmm0
	movss	LCPI3_1, %xmm1
	andps	LCPI3_2, %xmm1
	orps	%xmm0, %xmm1
	movd	%xmm1, %eax
	ret

bitconverts can happen due to various calling conventions that require
fp values to passed in integer regs in some cases, e.g. when returning
a complex.



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@46414 91177308-0d34-0410-b5e6-96231b3b80d8
2008-01-27 17:42:27 +00:00
..
CallingConvLower.cpp Oops. Forgot to commit this. 2008-01-15 07:49:36 +00:00
DAGCombiner.cpp Implement some dag combines that allow doing fneg/fabs/fcopysign in integer 2008-01-27 17:42:27 +00:00
LegalizeDAG.cpp The last pieces needed for loading arbitrary 2008-01-23 20:39:46 +00:00
LegalizeTypes.cpp Remove attribution from file headers, per discussion on llvmdev. 2007-12-29 20:36:04 +00:00
LegalizeTypes.h * Introduce a new SelectionDAG::getIntPtrConstant method 2008-01-17 07:00:52 +00:00
LegalizeTypesExpand.cpp * Introduce a new SelectionDAG::getIntPtrConstant method 2008-01-17 07:00:52 +00:00
LegalizeTypesPromote.cpp * Introduce a new SelectionDAG::getIntPtrConstant method 2008-01-17 07:00:52 +00:00
LegalizeTypesScalarize.cpp Remove attribution from file headers, per discussion on llvmdev. 2007-12-29 20:36:04 +00:00
LegalizeTypesSplit.cpp * Introduce a new SelectionDAG::getIntPtrConstant method 2008-01-17 07:00:52 +00:00
Makefile remove attribution from lib Makefiles. 2007-12-29 20:09:26 +00:00
ScheduleDAG.cpp rename TargetInstrDescriptor -> TargetInstrDesc. 2008-01-07 07:27:27 +00:00
ScheduleDAGList.cpp Rename SSARegMap -> MachineRegisterInfo in keeping with the idea 2007-12-31 04:13:23 +00:00
ScheduleDAGRRList.cpp Special copy SUnit's do not have SDNode's. 2008-01-09 23:01:55 +00:00
SelectionDAG.cpp don't bother making x&-1 only to simplify it in dag combine. This commonly occurs expanding i64 ops. 2008-01-26 01:05:42 +00:00
SelectionDAGISel.cpp fix long lines. 2008-01-25 17:24:52 +00:00
SelectionDAGPrinter.cpp include alignment and volatility information in -view-*-dags output 2008-01-25 06:40:45 +00:00
TargetLowering.cpp Forgot these. 2008-01-24 00:22:01 +00:00