llvm-6502/lib/CodeGen/SelectionDAG
Nate Begeman abc0199680 Adapt the x86 build_vector dagcombine to the current state of the legalizer.
build vectors with i64 elements will only appear on 32b x86 before legalize.
Since vector widening occurs during legalize, and produces i64 build_vector 
elements, the dag combiner is never run on these before legalize splits them
into 32b elements.

Teach the build_vector dag combine in x86 back end to recognize consecutive 
loads producing the low part of the vector.

Convert the two uses of TLI's consecutive load recognizer to pass LoadSDNodes
since that was required implicitly.

Add a testcase for the transform.

Old:
	subl	$28, %esp
	movl	32(%esp), %eax
	movl	4(%eax), %ecx
	movl	%ecx, 4(%esp)
	movl	(%eax), %eax
	movl	%eax, (%esp)
	movaps	(%esp), %xmm0
	pmovzxwd	%xmm0, %xmm0
	movl	36(%esp), %eax
	movaps	%xmm0, (%eax)
	addl	$28, %esp
	ret

New:
	movl	4(%esp), %eax
	pmovzxwd	(%eax), %xmm0
	movl	8(%esp), %eax
	movaps	%xmm0, (%eax)
	ret




git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@72957 91177308-0d34-0410-b5e6-96231b3b80d8
2009-06-05 21:37:30 +00:00
..
CallingConvLower.cpp Minor top-level comment fix. 2009-03-31 16:51:18 +00:00
CMakeLists.txt Update for CMakeLists; untested, so tell me if there are issues. 2009-05-24 09:13:13 +00:00
DAGCombiner.cpp Adapt the x86 build_vector dagcombine to the current state of the legalizer. 2009-06-05 21:37:30 +00:00
FastISel.cpp Split the Add, Sub, and Mul instruction opcodes into separate 2009-06-04 22:49:04 +00:00
LegalizeDAG.cpp Re-commit r72514 and r72516 with a fixed version of BR_CC lowering. 2009-05-28 20:40:34 +00:00
LegalizeFloatTypes.cpp Rename CustomLowerResults to CustomLowerNode, since 2009-05-31 04:15:38 +00:00
LegalizeIntegerTypes.cpp Allow libcalls for i16 sdiv/udiv/rem operations. 2009-06-05 14:41:10 +00:00
LegalizeTypes.cpp Rename CustomLowerResults to CustomLowerNode, since 2009-05-31 04:15:38 +00:00
LegalizeTypes.h Revert 72707 and 72709, for the moment. 2009-06-02 03:12:52 +00:00
LegalizeTypesGeneric.cpp Refactor the code to grab the low and high parts of a value 2009-04-25 17:55:53 +00:00
LegalizeVectorOps.cpp Remove special cases for more opcodes. 2009-05-27 07:58:35 +00:00
LegalizeVectorTypes.cpp Implement review feedback for vector shuffle work. 2009-04-29 05:20:52 +00:00
Makefile Removed trailing whitespace from Makefiles. 2009-01-09 16:44:42 +00:00
ScheduleDAGFast.cpp Instead of passing in an unsigned value for the optimization level, use an enum, 2009-04-29 23:29:43 +00:00
ScheduleDAGList.cpp Instead of passing in an unsigned value for the optimization level, use an enum, 2009-04-29 23:29:43 +00:00
ScheduleDAGRRList.cpp Instead of passing in an unsigned value for the optimization level, use an enum, 2009-04-29 23:29:43 +00:00
ScheduleDAGSDNodes.cpp Revert 72707 and 72709, for the moment. 2009-06-02 03:12:52 +00:00
ScheduleDAGSDNodes.h Rename COPY_TO_SUBCLASS to COPY_TO_REGCLASS, and generalize 2009-04-13 21:06:25 +00:00
ScheduleDAGSDNodesEmit.cpp Silence Release-Asserts warnings. 2009-05-18 16:43:04 +00:00
SelectionDAG.cpp Don't do the X * 0.0 -> 0.0 transformation in instcombine, because 2009-06-04 17:12:12 +00:00
SelectionDAGBuild.cpp Split the Add, Sub, and Mul instruction opcodes into separate 2009-06-04 22:49:04 +00:00
SelectionDAGBuild.h Split the Add, Sub, and Mul instruction opcodes into separate 2009-06-04 22:49:04 +00:00
SelectionDAGISel.cpp Add a new step to legalization to legalize vector math operations. This 2009-05-23 12:35:30 +00:00
SelectionDAGPrinter.cpp Fix some significant problems with constant pools that resulted in unnecessary paddings between constant pool entries, larger than necessary alignments (e.g. 8 byte alignment for .literal4 sections), and potentially other issues. 2009-03-13 07:51:59 +00:00
TargetLowering.cpp Adapt the x86 build_vector dagcombine to the current state of the legalizer. 2009-06-05 21:37:30 +00:00