| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
| |
Anna Zaks. rdar://8037934.
llvm-svn: 105065
|
|
|
|
|
|
| |
when they move instructions.
llvm-svn: 103737
|
|
|
|
|
|
|
|
|
|
|
| |
register is not killed in the loop.
This fixes 188.ammp on ARM where the post-ra scheduler would grab a register
that looked available but wasn't.
A testcase would be huge and fragile, sorry.
llvm-svn: 101930
|
|
|
|
|
|
|
|
| |
the live-in sets of BBs in the loop. Otherwise later pass may end up using the
registers and override the invariant. rdar://7852937
No reasonablly sized test case possible.
llvm-svn: 101626
|
|
|
|
| |
llvm-svn: 101183
|
|
|
|
| |
llvm-svn: 101170
|
|
|
|
|
|
| |
register operands are all loop invariants, then it's safe to hoist it.
llvm-svn: 101167
|
|
|
|
|
|
| |
instructions with no source operands.
llvm-svn: 101154
|
|
|
|
|
|
|
|
| |
MachineBasicBlock::livein_iterator a const_iterator, because
clients shouldn't ever be using the iterator interface to
mutate the livein set.
llvm-svn: 101147
|
|
|
|
| |
llvm-svn: 101034
|
|
|
|
| |
llvm-svn: 100858
|
|
|
|
| |
llvm-svn: 100742
|
|
|
|
| |
llvm-svn: 100610
|
|
|
|
| |
llvm-svn: 100609
|
|
|
|
| |
llvm-svn: 100592
|
|
|
|
|
|
|
|
| |
whether it should skip checking defs or at least virtual register defs. This subsumes part of the TargetInstrInfo::isIdentical functionality.
- Eliminate TargetInstrInfo::isIdentical and replace it with produceSameValue. In the default case, produceSameValue just checks whether two machine instructions are identical (except for virtual register defs). But targets may override it to check for unusual cases (e.g. ARM pic loads from constant pools).
llvm-svn: 97628
|
|
|
|
| |
llvm-svn: 97360
|
|
|
|
|
|
|
|
| |
defs or uses. The regular def and use checking below covers them, and
can be more precise. It's safe to hoist an instruction with a dead
implicit def if the register isn't live into the loop header.
llvm-svn: 97352
|
|
|
|
|
|
|
|
|
| |
into TargetOpcodes.h. #include the new TargetOpcodes.h
into MachineInstr. Add new inline accessors (like isPHI())
to MachineInstr, and start using them throughout the
codebase.
llvm-svn: 95687
|
|
|
|
| |
llvm-svn: 92547
|
|
|
|
|
|
|
|
| |
contains another loop, or an instruction. The loop form is
substantially more efficient on large loops than the typical
code it replaces.
llvm-svn: 91654
|
|
|
|
| |
llvm-svn: 89510
|
|
|
|
| |
llvm-svn: 89477
|
|
|
|
|
|
| |
Fix debug code that assumes getBasicBlock never returns NULL.
llvm-svn: 89428
|
|
|
|
| |
llvm-svn: 89129
|
|
|
|
|
|
|
|
|
|
| |
except it doesn't care if the definitions' virtual registers differ. This is
used by machine LICM and other MI passes to perform CSE.
- Teach Thumb2InstrInfo::isIdentical() to check two t2LDRpci_pic are identical.
Since pc relative constantpool entries are always different, this requires it
it check if the values can actually the same.
llvm-svn: 86328
|
|
|
|
| |
llvm-svn: 86085
|
|
|
|
| |
llvm-svn: 85947
|
|
|
|
| |
llvm-svn: 85827
|
|
|
|
|
|
|
|
|
|
| |
hoisted to
the loop preheader. Add instructions which are already in the preheader block that
may be common expressions of those that are hoisted out. These does get a few more
instructions CSE'ed.
llvm-svn: 85799
|
|
|
|
|
|
|
|
|
|
| |
unfolding loads for hoisting. getOpcodeAfterMemoryUnfold returns the
opcode of the original operation without the load, not the load
itself, MachineLICM needs to know the operand index in order to get
the correct register class. Extend getOpcodeAfterMemoryUnfold to
return this information.
llvm-svn: 85622
|
|
|
|
| |
llvm-svn: 85515
|
|
|
|
|
|
| |
the new instructions and leave the old one in place.
llvm-svn: 85393
|
|
|
|
|
|
|
| |
otherwise unhoistable instructions in order to allow the loads
to be hoisted.
llvm-svn: 85364
|
|
|
|
|
|
| |
VISIBILITY_HIDDEN removal.
llvm-svn: 85043
|
|
|
|
|
|
|
| |
Chris claims we should never have visibility_hidden inside any .cpp file but
that's still not true even after this commit.
llvm-svn: 85042
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
is trivially rematerializable and integrate it into
TargetInstrInfo::isTriviallyReMaterializable. This way, all places that
need to know whether an instruction is rematerializable will get the
same answer.
This enables the useful parts of the aggressive-remat option by
default -- using AliasAnalysis to determine whether a memory location
is invariant, and removes the questionable parts -- rematting operations
with virtual register inputs that may not be live everywhere.
llvm-svn: 83687
|
|
|
|
|
|
|
| |
TargetInstrDesc::isRematerializable flag, so it isn't necessary to do
this check in its callers.
llvm-svn: 83671
|
|
|
|
| |
llvm-svn: 83624
|
|
|
|
|
|
| |
licm'ed out of loop.
llvm-svn: 83622
|
|
|
|
|
|
|
|
|
| |
implementations with a new MachineInstr::isInvariantLoad, which uses
MachineMemOperands and is target-independent. This brings MachineLICM
and other functionality to targets which previously lacked an
isInvariantLoad implementation.
llvm-svn: 83475
|
|
|
|
|
|
|
| |
allocatable. Even if it doesn't appear to have any defs, it may latter
on after register allocation.
llvm-svn: 82834
|
|
|
|
| |
llvm-svn: 82825
|
|
|
|
| |
llvm-svn: 79754
|
|
|
|
| |
llvm-svn: 78677
|
|
|
|
|
|
|
|
|
|
| |
- Some clients which used DOUT have moved to DEBUG. We are deprecating the
"magic" DOUT behavior which avoided calling printing functions when the
statement was disabled. In addition to being unnecessary magic, it had the
downside of leaving code in -Asserts builds, and of hiding potentially
unnecessary computations.
llvm-svn: 77019
|
|
|
|
|
|
| |
implicit_def's.
llvm-svn: 65592
|
|
|
|
|
|
| |
size. For now, disable it for optimizing for size.
llvm-svn: 63856
|
|
|
|
| |
llvm-svn: 63854
|
|
|
|
| |
llvm-svn: 63729
|