| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
|
|
|
|
|
|
| |
when the invoke had multiple return values: it set the lattice value only on the
extractvalue.
This caused the invoke's lattice value to remain the default (undefined), and
later propagated to extractvalue's operand, which incorrectly introduces
undefined behavior.
llvm-svn: 84637
|
| |
|
|
|
|
| |
numbering first class aggregate instructions while we're at it.
llvm-svn: 84547
|
| |
|
|
| |
llvm-svn: 84533
|
| |
|
|
| |
llvm-svn: 84299
|
| |
|
|
|
|
|
|
| |
Update testcases that rely on malloc insts being present.
Also prematurely remove MallocInst handling from IndMemRemoval and RaiseAllocations to help pass tests in this incremental step.
llvm-svn: 84292
|
| |
|
|
|
|
|
| |
load, to help SelectionDAG fold them into the loads, unless
conditions are unfavorable.
llvm-svn: 84271
|
| |
|
|
|
|
|
|
| |
don't bother every time going around the main worklist. This speeds up a
release-asserts opt -std-compile-opts on 403.gcc by about 4% (1.5s). It
seems to speed up the most expensive instances of instcombine by ~10%.
llvm-svn: 84171
|
| |
|
|
|
|
|
|
|
| |
instruction (which disqualifies stores, unreachable, etc) and at least the
first operand is a constant. This filters out a lot of obvious cases that
can't be folded. Also, switch the IRBuilder to a TargetFolder, which tries
harder.
llvm-svn: 84170
|
| |
|
|
| |
llvm-svn: 84118
|
| |
|
|
|
|
| |
presence of PHI nodes.
llvm-svn: 84103
|
| |
|
|
| |
llvm-svn: 84049
|
| |
|
|
|
|
| |
ValueHandles a chance to get properly updated.
llvm-svn: 84033
|
| |
|
|
|
|
| |
manually counting instructions.
llvm-svn: 84016
|
| |
|
|
|
|
|
|
| |
BasicBlocks, so that it doesn't blindly procede in the presence of
large individual BasicBlocks. This addresses a class of code-size
expansion problems.
llvm-svn: 83992
|
| |
|
|
| |
llvm-svn: 83908
|
| |
|
|
| |
llvm-svn: 83870
|
| |
|
|
|
|
|
|
|
|
|
| |
it to visit instructions from the start of the function to the
end of the function in the first path. This greatly speeds up
some pathological cases (e.g. PR5150).
Try #3, this time with some unneeded debug info stuff removed
which was causing dead pointers to be added to the worklist.
llvm-svn: 83818
|
| |
|
|
| |
llvm-svn: 83817
|
| |
|
|
|
|
|
|
| |
it to visit instructions from the start of the function to the
end of the function in the first path. This greatly speeds up
some pathological cases (e.g. PR5150).
llvm-svn: 83814
|
| |
|
|
|
|
|
|
|
|
|
| |
into a shuffle even if it was used by another insertelement. If the
visitation order of instcombine was wrong, this would turn a chain of
insertelements into a chain of shufflevectors, which was quite painful.
Since CollectShuffleElements handles these cases, the code can just
be nuked.
llvm-svn: 83810
|
| |
|
|
|
|
| |
new testcase.
llvm-svn: 83799
|
| |
|
|
| |
llvm-svn: 83797
|
| |
|
|
| |
llvm-svn: 83795
|
| |
|
|
|
|
|
|
|
| |
input the the mul is a zext from bool, just that it is all zeros
other than the low bit. This fixes some phase ordering issues
that would cause us to miss some xforms in mul.ll when the worklist
is visited differently.
llvm-svn: 83794
|
| |
|
|
| |
llvm-svn: 83792
|
| |
|
|
| |
llvm-svn: 83791
|
| |
|
|
|
|
|
|
| |
it to visit instructions from the start of the function to the
end of the function in the first path. This greatly speeds up
some pathological cases (e.g. PR5150).
llvm-svn: 83790
|
| |
|
|
|
|
| |
here.
llvm-svn: 83789
|
| |
|
|
|
|
|
| |
For now the metadata of sinked/hoisted instructions is still wrong, but that'll
be fixed when instructions will have debug metadata directly attached.
llvm-svn: 83786
|
| |
|
|
|
|
| |
now-probably-dead instruction tree feeding it.
llvm-svn: 83778
|
| |
|
|
|
|
|
| |
gets but clang doesn't, because it is implemented in GCC's
fold routine.
llvm-svn: 83761
|
| |
|
|
|
|
|
|
|
|
| |
done by condprop, but do it in a much more general form. The
basic idea is that we can do a limited form of tail duplication
in the case when we have a branch on a phi. Moving the branch
up in to the predecessor block makes instruction selection
much easier and encourages chained jump threadings.
llvm-svn: 83759
|
| |
|
|
| |
llvm-svn: 83756
|
| |
|
|
| |
llvm-svn: 83755
|
| |
|
|
| |
llvm-svn: 83754
|
| |
|
|
|
|
|
|
| |
from GVN, this also speeds it up, inserts fewer PHI nodes (see the
testcase) and allows it to remove more loads (due to fewer PHI nodes
standing in the way).
llvm-svn: 83746
|
| |
|
|
| |
llvm-svn: 83742
|
| |
|
|
|
|
|
|
|
| |
DemoteRegToStack. This makes it more efficient (because it isn't
creating a ton of load/stores that are eventually removed by a later
mem2reg), and more slightly more effective (because those load/stores
don't get in the way of threading).
llvm-svn: 83706
|
| |
|
|
| |
llvm-svn: 83701
|
| |
|
|
|
|
|
|
| |
to declare that they preserve other passes without needing to pull in
additional header file or library dependencies. Convert MachineFunctionPass
and CodeGenLICM to make use of this.
llvm-svn: 83555
|
| |
|
|
|
|
|
| |
already on the worklist, and print Visited when an instruction is about to be
visited. Net, on one input, this reduced the output size by at least 9x.
llvm-svn: 83510
|
| |
|
|
| |
llvm-svn: 83489
|
| |
|
|
| |
llvm-svn: 83404
|
| |
|
|
|
|
|
| |
out of it, and jump threading, condprop and gvn are now getting
most of the benefit. This was approved by Nicholas and Nicolas.
llvm-svn: 83390
|
| |
|
|
|
|
|
| |
where the element is of a basic builtin type. For example, to get
an i8* use getInt8PtrTy.
llvm-svn: 83379
|
| |
|
|
|
|
| |
ConstantFoldLoadThroughGEPConstantExpr.
llvm-svn: 83311
|
| |
|
|
| |
llvm-svn: 83310
|
| |
|
|
|
|
|
|
| |
the new predicates I added) instead of going through a context and doing a
pointer comparison. Besides being cheaper, this allows a smart compiler
to turn the if sequence into a switch.
llvm-svn: 83297
|
| |
|
|
|
|
| |
This fixes PR5130.
llvm-svn: 83290
|
| |
|
|
| |
llvm-svn: 83194
|