llvm-6502/lib/CodeGen/SelectionDAG
Andrew Trick 12f0dc6bb5 In the pre-RA scheduler, maintain cmp+br proximity.
This is done by pushing physical register definitions close to their
use, which happens to handle flag definitions if they're not glued to
the branch. This seems to be generally a good thing though, so I
didn't need to add a target hook yet.

The primary motivation is to generate code closer to what people
expect and rule out missed opportunity from enabling macro-op
fusion. As a side benefit, we get several 2-5% gains on x86
benchmarks. There is one regression:
SingleSource/Benchmarks/Shootout/lists slows down be -10%. But this is
an independent scheduler bug that will be tracked separately.
See rdar://problem/9283108.

Incidentally, pre-RA scheduling is only half the solution. Fixing the
later passes is tracked by:
<rdar://problem/8932804> [pre-RA-sched] on x86, attempt to schedule CMP/TEST adjacent with condition jump

Fixes:
<rdar://problem/9262453> Scheduler unnecessary break of cmp/jump fusion


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@129508 91177308-0d34-0410-b5e6-96231b3b80d8
2011-04-14 05:15:06 +00:00
..
CMakeLists.txt
DAGCombiner.cpp have dag combine zap "store undef", which can be formed during call lowering 2011-04-09 02:32:02 +00:00
FastISel.cpp Don't include Operator.h from InstrTypes.h. 2011-04-11 09:35:34 +00:00
FunctionLoweringInfo.cpp
InstrEmitter.cpp
InstrEmitter.h
LegalizeDAG.cpp Revert 123704; it broke threaded LLVM. 2011-04-05 00:37:28 +00:00
LegalizeFloatTypes.cpp
LegalizeIntegerTypes.cpp
LegalizeTypes.cpp
LegalizeTypes.h
LegalizeTypesGeneric.cpp
LegalizeVectorOps.cpp
LegalizeVectorTypes.cpp
Makefile
ScheduleDAGFast.cpp
ScheduleDAGList.cpp
ScheduleDAGRRList.cpp In the pre-RA scheduler, maintain cmp+br proximity. 2011-04-14 05:15:06 +00:00
ScheduleDAGSDNodes.cpp In the pre-RA scheduler, maintain cmp+br proximity. 2011-04-14 05:15:06 +00:00
ScheduleDAGSDNodes.h Added a check in the preRA scheduler for potential interference on a 2011-04-07 19:54:57 +00:00
SDNodeDbgValue.h
SDNodeOrdering.h
SelectionDAG.cpp
SelectionDAGBuilder.cpp Avoid excess precision issues that lead to generating host-compiler-specific code. 2011-04-09 06:57:13 +00:00
SelectionDAGBuilder.h
SelectionDAGISel.cpp
SelectionDAGPrinter.cpp
TargetLowering.cpp sink a call into its only use. 2011-04-14 04:12:47 +00:00
TargetSelectionDAGInfo.cpp