| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
| |
llvm-svn: 107321
|
|
|
|
|
|
|
|
|
| |
of getPhysicalRegisterRegClass with it.
If we want to make a copy (or estimate its cost), it is better to use the
smallest class as more efficient operations might be possible.
llvm-svn: 107140
|
|
|
|
|
|
| |
is not used. Spotted by gcc-4.6.
llvm-svn: 106854
|
|
|
|
|
|
|
| |
original SDNode. This is badness. Also, this function allows one SDNode to point
multiple flags to another SDNode. Badness as well.
llvm-svn: 106793
|
|
|
|
|
|
|
| |
into the same node, but with different non-memory operands, we need to replace
the memory operands after it's finished morphing.
llvm-svn: 106643
|
|
|
|
|
|
| |
SmallVector, and other SmallVector simplifications.
llvm-svn: 106452
|
|
|
|
| |
llvm-svn: 105775
|
|
|
|
|
|
| |
just return zero.
llvm-svn: 105061
|
|
|
|
|
|
| |
what for latency in hybrid mode.
llvm-svn: 104293
|
|
|
|
|
|
|
|
|
| |
pipeline stall. It's useful for targets like ARM cortex-a8. NEON has a lot
of long latency instructions so a strict register pressure reduction
scheduler does not work well.
Early experiments show this speeds up some NEON loops by over 30%.
llvm-svn: 104216
|
|
|
|
| |
llvm-svn: 104173
|
|
|
|
|
|
| |
changes before doing phi lowering for switches.
llvm-svn: 102809
|
|
|
|
| |
llvm-svn: 102742
|
|
|
|
|
|
|
| |
produces a comment on targets that support it, but
the Dwarf writer is not hooked up yet.
llvm-svn: 102372
|
|
|
|
|
|
|
|
| |
and rename it to emitFrameIndexDebugValue.
- Teach spiller to modify DBG_VALUE instructions to reference spill slots.
llvm-svn: 102323
|
|
|
|
| |
llvm-svn: 101655
|
|
|
|
|
|
| |
currently. But add an assertion to verify it.
llvm-svn: 99501
|
|
|
|
| |
llvm-svn: 99489
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
placement should be determined by the relative order of incoming llvm instructions. The scheduler will now use the SDNode ordering information to determine where to insert them. A dbg_value instruction is inserted after the instruction with the last highest source order and before the instruction with the next highest source order. It will optimize the placement by inserting right after the instruction that produces the value if they have consecutive order numbers.
Here is a theoretical example that illustrates why the placement is important.
tmp1 =
store tmp1 -> x
...
tmp2 = add ...
...
call
...
store tmp2 -> x
Now mem2reg comes along:
tmp1 =
dbg_value (tmp1 -> x)
...
tmp2 = add ...
...
call
...
dbg_value (tmp2 -> x)
When the debugger examine the value of x after the add instruction but before the call, it should have the value of tmp1.
Furthermore, for dbg_value's that reference constants, they should not be emitted at the beginning of the block (since they do not have "producers").
This patch also cleans up how SDISel manages DbgValue nodes. It allow a SDNode to be referenced by multiple SDDbgValue nodes. When a SDNode is deleted, it uses the information to find the SDDbgValues and invalidate them. They are not deleted until the corresponding SelectionDAG is destroyed.
llvm-svn: 99469
|
|
|
|
| |
llvm-svn: 98513
|
|
|
|
|
|
|
| |
No functional effect yet. This is still evolving and should
not be viewed as final.
llvm-svn: 98195
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
to adding them in a determinstic order (bottom up from
the root) based on the structure of the graph itself.
This updates tests for some random changes, interesting
bits: CodeGen/Blackfin/promote-logic.ll no longer crashes.
I have no idea why, but that's good right?
CodeGen/X86/2009-07-16-LoadFoldingBug.ll also fails, but
now compiles to have one fewer constant pool entry, making
the expected load that was being folded disappear. Since it
is an unreduced mass of gnast, I just removed it.
This fixes PR6370
llvm-svn: 97023
|
|
|
|
| |
llvm-svn: 94255
|
|
|
|
|
|
| |
improve cache locality. This is controlled by -cluster-loads for now.
llvm-svn: 94148
|
|
|
|
| |
llvm-svn: 92581
|
|
|
|
|
|
|
|
|
|
|
| |
- Move DisableScheduling flag into TargetOption.h
- Move SDNodeOrdering into its own header file. Give it a minimal interface that
doesn't conflate construction with storage.
- Move assigning the ordering into the SelectionDAGBuilder.
This isn't used yet, so there should be no functional changes.
llvm-svn: 91727
|
|
|
|
|
|
| |
having it reverted does no good.
llvm-svn: 91560
|
|
|
|
|
|
|
| |
this", this broke llvm-gcc bootstrap for release builds on
x86_64-apple-darwin10.
llvm-svn: 91533
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
stuff isn't used just yet.
We want to model the GCC `-fno-schedule-insns' and `-fno-schedule-insns2'
flags. The hypothesis is that the people who use these flags know what they are
doing, and have hand-optimized the C code to reduce latencies and other
conflicts.
The idea behind our scheme to turn off scheduling is to create a map "on the
side" during DAG generation. It will order the nodes by how they appeared in the
code. This map is then used during scheduling to get the ordering.
llvm-svn: 91392
|
|
|
|
|
|
|
|
| |
into MachineInstrs. This is mostly just moving the code from
ScheduleDAGSDNodesEmit.cpp into a new class. This decouples MachineInstr
emitting from scheduling.
llvm-svn: 83699
|
|
|
|
|
|
| |
it isn't needed in the ScheduleDAGSDNodes schedulers.
llvm-svn: 83691
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
- Allocate MachineMemOperands and MachineMemOperand lists in MachineFunctions.
This eliminates MachineInstr's std::list member and allows the data to be
created by isel and live for the remainder of codegen, avoiding a lot of
copying and unnecessary translation. This also shrinks MemSDNode.
- Delete MemOperandSDNode. Introduce MachineSDNode which has dedicated
fields for MachineMemOperands.
- Change MemSDNode to have a MachineMemOperand member instead of its own
fields with the same information. This introduces some redundancy, but
it's more consistent with what MachineInstr will eventually want.
- Ignore alignment when searching for redundant loads for CSE, but remember
the greatest alignment.
Target-specific code which previously used MemOperandSDNodes with generic
SDNodes now use MemIntrinsicSDNodes, with opcodes in a designated range
so that the SelectionDAG framework knows that MachineMemOperand information
is available.
llvm-svn: 82794
|
|
|
|
|
|
| |
about by icc (#593, partial). Patch by Erick Tryzelaar.
llvm-svn: 81115
|
|
|
|
|
|
| |
dependence edge latency for post-RA scheduling.
llvm-svn: 79425
|
|
|
|
| |
llvm-svn: 78910
|
|
|
|
|
|
|
|
| |
while
the latter is capable of representing either a primitive or an extended type.
llvm-svn: 78713
|
|
|
|
|
|
| |
own struct type.
llvm-svn: 78610
|
|
|
|
|
|
| |
LiveInterval, etc to raw_ostream.
llvm-svn: 76965
|
|
|
|
| |
llvm-svn: 72712
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
ADDC/ADDE use MVT::i1 (later, whatever it gets legalized to)
instead of MVT::Flag. Remove CARRY_FALSE in favor of 0; adjust
all target-independent code to use this format.
Most targets will still produce a Flag-setting target-dependent
version when selection is done. X86 is converted to use i32
instead, which means TableGen needs to produce different code
in xxxGenDAGISel.inc. This keys off the new supportsHasI1 bit
in xxxInstrInfo, currently set only for X86; in principle this
is temporary and should go away when all other targets have
been converted. All relevant X86 instruction patterns are
modified to represent setting and using EFLAGS explicitly. The
same can be done on other targets.
The immediate behavior change is that an ADC/ADD pair are no
longer tightly coupled in the X86 scheduler; they can be
separated by instructions that don't clobber the flags (MOV).
I will soon add some peephole optimizations based on using
other instructions that set the flags to feed into ADC.
llvm-svn: 72707
|
|
|
|
|
|
| |
actually have uses, which reflects the way it's used.
llvm-svn: 67540
|
|
|
|
|
|
| |
defs, regardless of whether they are actually used.
llvm-svn: 67528
|
|
|
|
| |
llvm-svn: 67400
|
|
|
|
|
|
|
|
|
|
|
| |
instruction index across each part. Instruction indices are used
to make live range queries, and live ranges can extend beyond
scheduling region boundaries.
Refactor the ScheduleDAGSDNodes class some more so that it
doesn't have to worry about this additional information.
llvm-svn: 64288
|
|
|
|
|
|
|
| |
that previously included this header should include
SchedulerRegistry.h instead.
llvm-svn: 63937
|
|
|
|
|
|
| |
by a single CopyToReg, it reuses the virtual register assigned to the CopyToReg. This won't work for SDNode that is a clone or is itself cloned. Disable this optimization for those nodes or it can end up with non-SSA machine instructions.
llvm-svn: 62356
|
|
|
|
|
|
|
|
|
|
|
| |
and into the ScheduleDAGInstrs class, so that they don't get
destructed and re-constructed for each block. This fixes a
compile-time hot spot in the post-pass scheduler.
To help facilitate this, tidy and do some minor reorganization
in the scheduler constructor functions.
llvm-svn: 62275
|
|
|
|
|
|
|
|
| |
register to a virtual register unless it requires an expensive cross class copy. That means we are only treating "expensive to copy" register dependency as physical register dependency.
Also future proof the scheduler to handle "normal" physical register dependencies. The code is not exercised yet.
llvm-svn: 62074
|
|
|
|
|
|
| |
functionality change.
llvm-svn: 62036
|
|
|
|
|
|
| |
code in ScheduleDAGSDNodes' BuildSchedGraph into separate functions.
llvm-svn: 61376
|