| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
| |
necessary)
llvm-svn: 148284
|
| |
|
|
|
|
|
|
|
|
|
|
| |
present in the bottom of the CFG triangle, as the transformation isn't
ever valuable if the branch can't be eliminated.
Also, unify some heuristics between SimplifyCFG's multiple
if-converters, for consistency.
This fixes rdar://10627242.
llvm-svn: 147630
|
| |
|
|
|
|
|
|
| |
code can incorrectly move the load across a store. This never
happens in practice today, but only because the current
heuristics accidentally preclude it.
llvm-svn: 147623
|
| |
|
|
| |
llvm-svn: 147307
|
| |
|
|
| |
llvm-svn: 147292
|
| |
|
|
|
|
|
| |
to discard weights when appropriate. Still more to do (and a new TODO), but
it's a start!
llvm-svn: 147286
|
| |
|
|
| |
llvm-svn: 147280
|
| |
|
|
| |
llvm-svn: 147279
|
| |
|
|
|
|
|
|
| |
support
to CloneFunctionInto to allow remapping for this case.
llvm-svn: 147217
|
| |
|
|
| |
llvm-svn: 147036
|
| |
|
|
|
|
| |
http://llvm.org/docs/CodingStandards.html#ll_virtual_anch
llvm-svn: 146960
|
| |
|
|
|
|
| |
- Remove trailing spaces.
llvm-svn: 146854
|
| |
|
|
|
|
| |
Hope I did this correctly :)
llvm-svn: 146834
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
depending on previous branch on same comparison operands.
For example,
if (a == b) {
if (a > b) // this is false
Fixes some of the issues on <rdar://problem/10554090>
llvm-svn: 146822
|
| |
|
|
|
|
| |
This will be used by SimplifyCfg in a later commit.
llvm-svn: 146803
|
| |
|
|
|
|
| |
No need for an explicit test case for an unsupported combination of options.
llvm-svn: 146721
|
| |
|
|
|
|
| |
false positive. compiler part.
llvm-svn: 146688
|
| |
|
|
|
|
| |
header is a landing pad correctly (by splitting the landingpad out of the loop header). Make some adjustments to the rest of LoopSimplify to make it clear that the rest of LoopSimplify isn't making bad assumptions about the presence of landing pads. PR11575.
llvm-svn: 146621
|
| |
|
|
|
|
|
|
|
| |
into Analysis as a standalone function, since there's no need for
it to be in VMCore. Also, update it to use isKnownNonZero and
other goodies available in Analysis, making it more precise,
enabling more aggressive optimization.
llvm-svn: 146610
|
| |
|
|
| |
llvm-svn: 146409
|
| |
|
|
| |
llvm-svn: 146277
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
Patch by Brendon Cahoon!
This extends the existing LoopUnroll and LoopUnrollPass. Brendon
measured no regressions in the llvm test suite with -unroll-runtime
enabled. This implementation works by using the existing loop
unrolling code to unroll the loop by a power-of-two (default 8). It
generates an if-then-else sequence of code prior to the loop to
execute the extra iterations before entering the unrolled loop.
llvm-svn: 146245
|
| |
|
|
|
|
|
|
|
|
|
|
| |
- Walking over pred_begin/pred_end is an expensive operation.
- PHINodes contain a value for each predecessor anyway.
- While it may look like we used to save a few iterations with the set,
be aware that getIncomingValueForBlock does a linear search on
the values of the phi node.
- Another -5% on ARMDisassembler.cpp (Release build). This was the last
entry in the profile that was obviously wasting time.
llvm-svn: 145937
|
| |
|
|
|
|
|
|
|
|
| |
basic blocks.
- Calling getUser in a loop is much more expensive than iterating over a few instructions.
- Use it instead of the open-coded loop in AddrModeMatcher.
- 5% speedup on ARMDisassembler.cpp Release builds.
llvm-svn: 145810
|
| |
|
|
|
|
|
|
|
|
| |
function of the callee once and not for every invoke in the caller.
The callee is usually smaller than the caller, too. This reduces the compile
time of ARMDisassembler.cpp by 32% (Release build). It still takes ages to
compile though.
llvm-svn: 145690
|
| |
|
|
|
|
|
| |
InstructionSimplify.cpp. Other fixups as needed.
Part of rdar://10500969
llvm-svn: 145559
|
| |
|
|
| |
llvm-svn: 145420
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
weak variable are compiled by different compilers, such as GCC and LLVM, while
LLVM may increase the alignment to the preferred alignment there is no reason to
think that GCC will use anything more than the ABI alignment. Since it is the
GCC version that might end up in the final program (as the linkage is weak), it
is wrong to increase the alignment of loads from the global up to the preferred
alignment as the alignment might only be the ABI alignment.
Increasing alignment up to the ABI alignment might be OK, but I'm not totally
convinced that it is. It seems better to just leave the alignment of weak
globals alone.
llvm-svn: 145413
|
| |
|
|
|
|
|
|
| |
Suggested in code review by Eli.
That code in InstCombine looks kinda suspicious.
llvm-svn: 145013
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
The right way to check for a binary operation is
cast<BinaryOperator>. The original check: cast<Instruction> &&
numOperands() == 2 would match phi "instructions", leading to an
infinite loop in extreme corner case: a useless phi with operands
[self, constant] that prior optimization passes failed to remove,
being used in the loop by another useless phi, in turn being used by an
lshr or udiv.
Fixes PR11350: runaway iteration assertion.
llvm-svn: 144935
|
| |
|
|
|
|
|
|
|
|
| |
Add a custom name for fwrite and fputs on x86-32 OSX. Make SimplifyLibCalls honor the custom
names for fwrite and fputs.
Fixes <rdar://problem/9815881>.
llvm-svn: 144876
|
| |
|
|
| |
llvm-svn: 144748
|
| |
|
|
| |
llvm-svn: 144675
|
| |
|
|
| |
llvm-svn: 144536
|
| |
|
|
| |
llvm-svn: 144416
|
| |
|
|
|
|
| |
<rdar://problem/10405911>
llvm-svn: 144000
|
| |
|
|
| |
llvm-svn: 143634
|
| |
|
|
|
|
| |
Patch by Kostya Serebryany.
llvm-svn: 143405
|
| |
|
|
|
|
|
|
|
|
| |
instructions.
This doesn't introduce any optimizations we weren't doing before (except
potentially due to pass ordering issues), now passes will eliminate them sooner
as part of their own cleanups.
llvm-svn: 142787
|
| |
|
|
| |
llvm-svn: 142684
|
| |
|
|
|
|
| |
definition is unused, and enhance it so it can tell that functions which are only used by a blockaddress are in fact dead. This probably doesn't happen much on most code, but the Linux kernel's _THIS_IP_ can trigger this issue with blockaddress. (GlobalDCE can also handle the given tescase, but we only run that at -O3.) Found while looking at PR11180.
llvm-svn: 142572
|
| |
|
|
| |
llvm-svn: 142162
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
promoting allocas to preferred alignments that exceed the natural
alignment. This avoids some potentially expensive dynamic stack realignments.
The natural stack alignment is set in target data strings via the "S<size>"
option. Size is in bits and must be a multiple of 8. The natural stack alignment
defaults to "unspecified" (represented by a zero value), and the "unspecified"
value does not prevent any alignment promotions. Target maintainers that care
about avoiding promotions should explicitly add the "S<size>" option to their
target data strings.
llvm-svn: 141599
|
| |
|
|
|
|
|
|
| |
This handles the case in which LSR rewrites an IV user that is a phi and
splits critical edges originating from a switch.
Fixes <rdar://problem/6453893> LSR is not splitting edges "nicely"
llvm-svn: 141059
|
| |
|
|
| |
llvm-svn: 141058
|
| |
|
|
|
|
| |
but not load instructions. Noticed by inspection.
llvm-svn: 140966
|
| |
|
|
|
|
| |
operand ordering. Patch by Stepan Dyatkovskiy.
llvm-svn: 140803
|
| |
|
|
|
|
|
|
| |
to be uniqued, without any benefit.
If someone prefers %tmp42 to %42, run instnamer.
llvm-svn: 140634
|
| |
|
|
|
|
|
| |
Some passes require breaking critical edges before they're called. Don't
segfault because of that.
llvm-svn: 140196
|
| |
|
|
| |
llvm-svn: 140172
|