| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| |
|
|
| |
llvm-svn: 85498
|
| |
|
|
|
|
| |
static constructors with indirect gotos :)
llvm-svn: 85495
|
| |
|
|
|
|
| |
crash on any clang tests.
llvm-svn: 85465
|
| |
|
|
| |
llvm-svn: 85458
|
| |
|
|
| |
llvm-svn: 85457
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
argument is:
ArraySize * ElementSize
ElementSize * ArraySize
ArraySize << log2(ElementSize)
ElementSize << log2(ArraySize)
Refactor isArrayMallocHelper and delete isSafeToGetMallocArraySize, so that there is only 1 copy of the malloc array determining logic.
Update users of getMallocArraySize() to not bother calling isArrayMalloc() as well.
llvm-svn: 85421
|
| |
|
|
| |
llvm-svn: 85402
|
| |
|
|
| |
llvm-svn: 85390
|
| |
|
|
| |
llvm-svn: 85389
|
| |
|
|
|
|
| |
purposes for GVN/DSE.
llvm-svn: 85383
|
| |
|
|
|
|
|
|
| |
Checks on Demand algorithm which looks at arbitrary branches instead of loop
iterations. This is GSoC work by Andre Tavares with only editorial changes
applied!
llvm-svn: 85382
|
| |
|
|
|
|
|
|
|
| |
In the new world order, BlockAddress can have a BasicBlock operand.
This doesn't permute much, because if you have a ConstantExpr (or
anything more specific than Constant) we still know the operand has
to be a Constant.
llvm-svn: 85375
|
| |
|
|
| |
llvm-svn: 85327
|
| |
|
|
| |
llvm-svn: 85286
|
| |
|
|
|
|
|
|
|
|
| |
with multiple return values it inserts a PHI to merge them all together.
However, if the return values are all the same, it ends up with a pointless
PHI and this pointless PHI happens to really block SRoA from happening in
at least a silly C++ example written by Doug, but probably others. This
fixes rdar://7339069.
llvm-svn: 85206
|
| |
|
|
| |
llvm-svn: 85197
|
| |
|
|
|
|
| |
do anything than return "I don't know" at the moment.
llvm-svn: 85189
|
| |
|
|
| |
llvm-svn: 85185
|
| |
|
|
|
|
| |
to free()
llvm-svn: 85181
|
| |
|
|
|
|
| |
scalar redundancies.
llvm-svn: 85179
|
| |
|
|
|
|
|
| |
Remove LowerAllocations pass.
Update some more passes to treate free calls just like they were treating FreeInst.
llvm-svn: 85176
|
| |
|
|
|
|
|
| |
the loop exiting block dominates the latch block; if ScalarEvolution
can prove that the trip-count is finite, that's sufficient.
llvm-svn: 85165
|
| |
|
|
|
|
| |
can safely use the NSW bit on the Add.
llvm-svn: 85164
|
| |
|
|
| |
llvm-svn: 85161
|
| |
|
|
|
|
|
|
|
|
| |
GEPs (more than one non-zero index) into simple GEPs (at most one
non-zero index). In some simple experiments using this it's not
uncommon to see 3% overall code size wins, because it exposes
redundancies that can be eliminated, however it's tricky to use
because instcombine aggressively undoes the work that this pass does.
llvm-svn: 85144
|
| |
|
|
| |
llvm-svn: 85120
|
| |
|
|
|
|
|
| |
All of the 'demorgan' related xforms need to use
dyn_castNotVal, not m_Not.
llvm-svn: 85119
|
| |
|
|
|
|
|
|
|
|
| |
strides for now, because it doesn't handle them correctly. This fixes a
miscompile of SingleSource/Benchmarks/Misc-C++/ray.
This problem was usually hidden because indvars transforms such induction
variables into negations of canonical induction variables.
llvm-svn: 85118
|
| |
|
|
| |
llvm-svn: 85090
|
| |
|
|
|
|
| |
not (or (icmp, icmp)) -> and(icmp, icmp)
llvm-svn: 85085
|
| |
|
|
|
|
| |
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
|
| |
|
|
|
|
| |
CmpInst::isSigned.
llvm-svn: 85037
|
| |
|
|
| |
llvm-svn: 85020
|
| |
|
|
|
|
|
|
| |
used elsewhere - an exit block is a block outside the loop branched to
from within the loop. An exiting block is a block inside the loop that
branches out.
llvm-svn: 85019
|
| |
|
|
| |
llvm-svn: 85016
|
| |
|
|
|
|
|
| |
Update all analysis passes and transforms to treat free calls just like FreeInst.
Remove RaiseAllocations and all its tests since FreeInst no longer needs to be raised.
llvm-svn: 84987
|
| |
|
|
|
|
| |
subclass of AllocationInst, so it no longer is necessary.
llvm-svn: 84969
|
| |
|
|
|
|
|
| |
exact backedge taken count, when checking for infinite loops. This allows
it to delete loops with multiple exit conditions.
llvm-svn: 84952
|
| |
|
|
| |
llvm-svn: 84841
|
| |
|
|
|
|
|
| |
to libanalysis. Instcombine shrinking... does this even
make sense???
llvm-svn: 84840
|
| |
|
|
|
|
|
|
|
| |
Analysis/ConstantFolding.cpp. This doesn't change the behavior of
instcombine but makes other clients of ConstantFoldInstruction
able to handle loads. This was partially extracted from Eli's patch
in PR3152.
llvm-svn: 84836
|
| |
|
|
| |
llvm-svn: 84810
|
| |
|
|
| |
llvm-svn: 84801
|
| |
|
|
|
|
| |
patches for fixes like this instead of committing them directly.
llvm-svn: 84799
|
| |
|
|
|
|
|
| |
Most changes are cleanup, but there is 1 correctness fix:
I fixed InstCombine so that the icmp is removed only if the malloc call is removed (which requires explicit removal because the Worklist won't DCE any calls since they can have side-effects).
llvm-svn: 84772
|
| |
|
|
|
|
|
| |
in the PHI's Basic Block. This uses a conservative approach, because we don't
have dominator info in instcombine.
llvm-svn: 84754
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
"In the existing code, if the load and the value to replace it with are
of different types *and* target data is available, it tries to use the
target data to coerce the replacement value to the type of the load.
Otherwise, it skips all effort to handle the type mismatch and just
feeds the wrongly-typed replacement value to replaceAllUsesWith, which
triggers an assertion.
The patch replaces it with an outer if checking for type mismatch, and
an inner if-else that checks whether target data is available and, if
not, returns false rather than trying to replace the load."
Patch by Kenneth Uildriks!
llvm-svn: 84739
|
| |
|
|
| |
llvm-svn: 84731
|
| |
|
|
| |
llvm-svn: 84667
|