| Commit message (Collapse) | Author | Age | Files | Lines |
|
|
|
| |
llvm-svn: 123202
|
|
|
|
|
|
|
|
|
|
|
| |
There's an inherent tension in DAGCombine between assuming
that things will be put in canonical form, and the Depth
mechanism that disables transformations when recursion gets
too deep. It would not surprise me if there's a lot of little
bugs like this one waiting to be discovered. The mechanism
seems fragile and I'd suggest looking at it from a design viewpoint.
llvm-svn: 123191
|
|
|
|
|
|
| |
and fixes here and there.
llvm-svn: 123170
|
|
|
|
|
|
| |
rolled std::find.
llvm-svn: 123164
|
|
|
|
|
|
|
|
| |
These functions not longer assert when passed 0, but simply return false instead.
No functional change intended.
llvm-svn: 123155
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
when no virtual registers have been allocated.
It was only used to resize IndexedMaps, so provide an IndexedMap::resize()
method such that
Map.grow(MRI.getLastVirtReg());
can be replaced with the simpler
Map.resize(MRI.getNumVirtRegs());
This works correctly when no virtuals are allocated, and it bypasses the to/from
index conversions.
llvm-svn: 123130
|
|
|
|
| |
llvm-svn: 123129
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
physical register numbers.
This makes the hack used in LiveInterval official, and lets LiveInterval be
oblivious of stack slots.
The isPhysicalRegister() and isVirtualRegister() predicates don't know about
this, so when a variable may contain a stack slot, isStackSlot() should always
be tested first.
llvm-svn: 123128
|
|
|
|
| |
llvm-svn: 123123
|
|
|
|
| |
llvm-svn: 123115
|
|
|
|
| |
llvm-svn: 123114
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
of using a Location class with the same information.
When making a copy of a MachineOperand that was already stored in a
MachineInstr, it is necessary to clear the parent pointer on the copy. Otherwise
the register use-def lists become inconsistent.
Add MachineOperand::clearParent() to do that. An alternative would be a custom
MachineOperand copy constructor that cleared ParentMI. I didn't want to do that
because of the performance impact.
llvm-svn: 123109
|
|
|
|
| |
llvm-svn: 123108
|
|
|
|
|
|
|
|
|
|
| |
without a TRI instance.
Print virtual registers numbered from 0 instead of the arbitrary
FirstVirtualRegister. The first virtual register is printed as %vreg0.
TRI::NoRegister is printed as %noreg.
llvm-svn: 123107
|
|
|
|
| |
llvm-svn: 123106
|
|
|
|
|
|
|
|
| |
depending on TRI::FirstVirtualRegister.
Also use TRI::printReg instead of printing virtual registers directly.
llvm-svn: 123101
|
|
|
|
|
|
| |
virtual registers.
llvm-svn: 123100
|
|
|
|
|
|
|
|
| |
Provide MRI::getNumVirtRegs() and TRI::index2VirtReg() functions to allow
iteration over virtual registers without depending on the representation of
virtual register numbers.
llvm-svn: 123098
|
|
|
|
|
|
| |
TargetRegisterInfo::FirstVirtualRegister.
llvm-svn: 123096
|
|
|
|
| |
llvm-svn: 123093
|
|
|
|
|
|
|
|
|
|
| |
they all ready do). This removes two dominator recomputations prior to isel,
which is a 1% improvement in total llc time for 403.gcc.
The only potentially suspect thing is making GCStrategy recompute dominators if
it used a custom lowering strategy.
llvm-svn: 123064
|
|
|
|
| |
llvm-svn: 123048
|
|
|
|
|
|
|
|
|
|
| |
Instead encode llvm IR level property "HasSideEffects" in an operand (shared
with IsAlignStack). Added MachineInstrs::hasUnmodeledSideEffects() to check
the operand when the instruction is an INLINEASM.
This allows memory instructions to be moved around INLINEASM instructions.
llvm-svn: 123044
|
|
|
|
| |
llvm-svn: 123039
|
|
|
|
|
|
| |
Enable live debug variables pass.
llvm-svn: 123032
|
|
|
|
|
|
| |
cheap as a copy.
llvm-svn: 123031
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
Also fix an off-by-one in SelectionDAGBuilder that was preventing shuffle
vectors from being translated to EXTRACT_SUBVECTOR.
Patch by Tim Northover.
The test changes are needed to keep those spill-q tests from testing aligned
spills and restores. If the only aligned stack objects are spill slots, we
no longer realign the stack frame. Prior to this patch, an EXTRACT_SUBVECTOR
was legalized by loading from the stack, which created an aligned frame index.
Now, however, there is nothing except the spill slot in the stack frame, so
I added an aligned alloca.
llvm-svn: 122995
|
|
|
|
| |
llvm-svn: 122994
|
|
|
|
|
|
|
|
| |
We were never generating any of these nodes with variable indices, and there
was one legalizer function asserting on a non-constant index. If we ever have
a need to support variable indices, we can add this back again.
llvm-svn: 122993
|
|
|
|
|
|
| |
we have invokes, so there is no functionality change here.
llvm-svn: 122990
|
|
|
|
|
|
| |
Nadav Rotem.
llvm-svn: 122983
|
|
|
|
|
|
| |
typed atomics. This will lower exclusively to libcalls at the moment.
llvm-svn: 122979
|
|
|
|
|
|
| |
This fixes PR 8913 crash.
llvm-svn: 122971
|
|
|
|
|
|
|
| |
etc. takes an option OptSize. If OptSize is true, it would return
the inline limit for functions with attribute OptSize.
llvm-svn: 122952
|
|
|
|
| |
llvm-svn: 122949
|
|
|
|
|
|
| |
Simplify RALinScan::DowngradeRegister with TRI::getOverlaps while we are there.
llvm-svn: 122940
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This pass precomputes CFG block frequency information that can be used by the
register allocator to find optimal spill code placement.
Given an interference pattern, placeSpills() will compute which basic blocks
should have the current variable enter or exit in a register, and which blocks
prefer the stack.
The algorithm is ready to consume block frequencies from profiling data, but for
now it gets by with the static estimates used for spill weights.
This is a work in progress and still not hooked up to RegAllocGreedy.
llvm-svn: 122938
|
|
|
|
|
|
|
|
| |
up freebsd bootloader. However, this doesn't make much sense for Darwin, whose
-Os is meant to optimize for size only if it doesn't hurt performance.
rdar://8821501
llvm-svn: 122936
|
|
|
|
|
|
|
| |
the original type of the switch statement key.
rdar://8781238
llvm-svn: 122935
|
|
|
|
|
|
|
|
|
| |
r1025 = s/zext r1024, 4
r1026 = extract_subreg r1025, 4
to:
r1026 = copy r1024
llvm-svn: 122925
|
|
|
|
|
|
| |
calculated.
llvm-svn: 122912
|
|
|
|
| |
llvm-svn: 122909
|
|
|
|
| |
llvm-svn: 122849
|
|
|
|
|
|
|
|
|
|
| |
The analysis will be needed by both the greedy register allocator and the
X86FloatingPoint pass. It only needs to be computed once when the CFG doesn't
change.
This pass is very fast, usually showing up as 0.0% wall time.
llvm-svn: 122832
|
|
|
|
|
|
| |
makes getLeader() nonrecursive.
llvm-svn: 122811
|
|
|
|
|
|
| |
spent in StrongPHIElimination on 403.gcc.
llvm-svn: 122803
|
|
|
|
|
|
| |
static constructors.
llvm-svn: 122795
|
|
|
|
|
|
| |
a 28% speedup of MachineCSE time on 403.gcc.
llvm-svn: 122735
|
|
|
|
|
|
| |
so that Dominators.h is *just* domtree. Also prune #includes a bit.
llvm-svn: 122714
|
|
|
|
|
|
|
|
|
|
| |
This allows us to compile:
void test(char *s, int a) {
__builtin_memset(s, a, 15);
}
into 1 mul + 3 stores instead of 3 muls + 3 stores.
llvm-svn: 122710
|