| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
|
|
| |
building bullet.
llvm-svn: 150885
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
the cast. If we do, we can end up with
inst1
--------------- < Insertion point
dbg inst
new inst
instead of the desired
inst1
new inst
--------------- < Insertion point
dbg inst
Another option would be for InsertNoopCastOfTo (or its callers) to move the
insertion point and we would end up with
inst1
dbg inst
new inst
--------------- < Insertion point
but that complicates the callers. This fixes PR12018 (and firefox's build).
llvm-svn: 150884
|
|
|
|
| |
llvm-svn: 148578
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
LSR has gradually been improved to more aggressively reuse existing code, particularly existing phi cycles. This exposed problems with the SCEVExpander's sloppy treatment of its insertion point. I applied some rigor to the insertion point problem that will hopefully avoid an endless bug cycle in this area. Changes:
- Always used properlyDominates to check safe code hoisting.
- The insertion point provided to SCEV is now considered a lower bound. This is usually a block terminator or the use itself. Under no cirumstance may SCEVExpander insert below this point.
- LSR is reponsible for finding a "canonical" insertion point across expansion of different expressions.
- Robust logic to determine whether IV increments are in "expanded" form and/or can be safely hoisted above some insertion point.
Fixes PR11783: SCEVExpander assert.
llvm-svn: 148535
|
|
|
|
|
|
| |
Fixes PR11761: bad IR w/ redundant Phi elim
llvm-svn: 148177
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
These heuristics are sufficient for enabling IV chains by
default. Performance analysis has been done for i386, x86_64, and
thumbv7. The optimization is rarely important, but can significantly
speed up certain cases by eliminating spill code within the
loop. Unrolled loops are prime candidates for IV chains. In many
cases, the final code could still be improved with more target
specific optimization following LSR. The goal of this feature is for
LSR to make the best choice of induction variables.
Instruction selection may not completely take advantage of this
feature yet. As a result, there could be cases of slight code size
increase.
Code size can be worse on x86 because it doesn't support postincrement
addressing. In fact, when chains are formed, you may see redundant
address plus stride addition in the addressing mode. GenerateIVChains
tries to compensate for the common cases.
On ARM, code size increase can be mitigated by using postincrement
addressing, but downstream codegen currently misses some opportunities.
llvm-svn: 147826
|
|
|
|
|
|
| |
replaceCongruentPhis checkin.
llvm-svn: 147709
|
|
|
|
| |
llvm-svn: 147707
|
|
|
|
| |
llvm-svn: 147700
|
|
|
|
| |
llvm-svn: 147683
|
|
|
|
|
|
|
|
| |
"phony" insertion point.
Fixes rdar://10619599: "SelectionDAGBuilder shouldn't visit PHI nodes!" assert
llvm-svn: 147439
|
|
|
|
|
|
| |
Fixes PR11571: Instruction does not dominate all uses
llvm-svn: 146950
|
|
|
|
| |
llvm-svn: 146597
|
|
|
|
|
|
| |
Fixes PR11431: SCEVExpander::expandAddRecExprLiterally(const llvm::SCEVAddRecExpr*): Assertion `(!isa<Instruction>(Result) || SE.DT->dominates(cast<Instruction>(Result), Builder.GetInsertPoint())) && "postinc expansion does not dominate use"' failed.
llvm-svn: 145482
|
|
|
|
|
|
|
|
|
| |
Just because we're dealing with a GEP doesn't mean we can assert the
SCEV has a pointer type. The fix is simply to ignore the SCEV pointer
type, which we really didn't need.
Fixes PR11138 webkit crash.
llvm-svn: 142058
|
|
|
|
|
|
|
| |
Speculatively reapply to see if this test case still crashes on
linux. I may have fixed it in my last checkin.
llvm-svn: 141895
|
|
|
|
|
|
| |
deeper issue was exposed.
llvm-svn: 141873
|
|
|
|
|
|
|
|
| |
This avoids unnecessary expansion of expressions and allows the SCEV
expander to work on expression DAGs, not just trees.
Fixes PR11090.
llvm-svn: 141870
|
|
|
|
|
|
|
|
|
|
|
| |
IVs.
Indvars previously chose randomly between congruent IVs. Now it will
bias the decision toward IVs that SCEVExpander likes to create. This
was not done to fix any problem, it's just a welcome side effect of
factoring code.
llvm-svn: 141633
|
|
|
|
| |
llvm-svn: 141470
|
|
|
|
|
|
| |
Fixes rdar://problem/5064068
llvm-svn: 141442
|
|
|
|
|
|
|
|
| |
to be uniqued, without any benefit.
If someone prefers %tmp42 to %42, run instnamer.
llvm-svn: 140634
|
|
|
|
| |
llvm-svn: 138481
|
|
|
|
|
|
| |
check for a LandingPadInst.
llvm-svn: 137745
|
|
|
|
| |
llvm-svn: 137712
|
|
|
|
|
|
| |
ArrayRef.
llvm-svn: 135761
|
|
|
|
|
|
| |
ConstantExpr::getInBoundsGetElementPtr to use ArrayRef.
llvm-svn: 135673
|
|
|
|
| |
llvm-svn: 135375
|
|
|
|
| |
llvm-svn: 135358
|
|
|
|
|
|
|
| |
related bug fixes and corresponding assertions for uninitialized data
and missing NULL check. Test cases will be included with the new LFTR.
llvm-svn: 135333
|
|
|
|
| |
llvm-svn: 134441
|
|
|
|
| |
llvm-svn: 133995
|
|
|
|
| |
llvm-svn: 133992
|
|
|
|
| |
llvm-svn: 133642
|
|
|
|
|
|
| |
PHINode::Create() giving the (known or expected) number of operands.
llvm-svn: 128537
|
|
|
|
| |
llvm-svn: 128535
|
|
|
|
|
|
|
|
|
| |
properties.
Added the self-wrap flag for SCEV::AddRecExpr.
A slew of temporary FIXMEs indicate the intention of the no-self-wrap flag
without changing behavior in this revision.
llvm-svn: 127590
|
|
|
|
|
|
|
| |
bitcasts, which are really no-ops here. This fixes slowdowns on
MultiSource/Applications/aha and others.
llvm-svn: 127031
|
|
|
|
|
|
| |
This fixes PR9259.
llvm-svn: 126812
|
|
|
|
|
|
| |
queries, and SCEVExpander getRelevantLoop queries.
llvm-svn: 119595
|
|
|
|
| |
llvm-svn: 119570
|
|
|
|
|
|
|
| |
functions of ScalarEvolution, in preparation for memoization and
other optimizations.
llvm-svn: 119562
|
|
|
|
|
|
|
|
| |
it inserted rather than using LoopInfo::getCanonicalInductionVariable to
rediscover it, since that doesn't work on non-canonical loops. This fixes
infinite recurrsion on such loops; PR7562.
llvm-svn: 109419
|
|
|
|
|
|
| |
find integer induction variables.
llvm-svn: 108853
|
|
|
|
|
|
| |
result is a PHINode*.
llvm-svn: 108852
|
|
|
|
|
|
|
| |
it doesn't miss an opportunity to form a GEP, regardless of the
relative loop depths of the operands. This fixes rdar://8197217.
llvm-svn: 108475
|
|
|
|
| |
llvm-svn: 107989
|
|
|
|
| |
llvm-svn: 107988
|
|
|
|
| |
llvm-svn: 107976
|
|
|
|
| |
llvm-svn: 107248
|