| Commit message (Collapse) | Author | Age | Files | Lines |
| |
|
|
| |
llvm-svn: 49989
|
| |
|
|
| |
llvm-svn: 49977
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
in addition to integer expressions. Rewrite GetOrEnforceKnownAlignment
as a ComputeMaskedBits problem, moving all of its special alignment
knowledge to ComputeMaskedBits as low-zero-bits knowledge.
Also, teach ComputeMaskedBits a few basic things about Mul and PHI
instructions.
This improves ComputeMaskedBits-based simplifications in a few cases,
but more noticeably it significantly improves instcombine's alignment
detection for loads, stores, and memory intrinsics.
llvm-svn: 49492
|
| |
|
|
|
|
|
|
| |
Specifically, introduction of XXX::Create methods
for Users that have a potentially variable number of
Uses.
llvm-svn: 49277
|
| |
|
|
| |
llvm-svn: 48971
|
| |
|
|
|
|
| |
transformed to undef. But this is such a common idiom (misuse) we are going to handle it.
llvm-svn: 48791
|
| |
|
|
|
|
| |
at least one of the (zext icmp) can be transformed to eliminate an icmp.
llvm-svn: 48715
|
| |
|
|
| |
llvm-svn: 48639
|
| |
|
|
|
|
|
|
| |
simplify things like (X & 4) >> 1 == 2 --> (X & 4) == 4.
since it is obvious that the shift doesn't remove any bits.
llvm-svn: 48631
|
| |
|
|
|
|
|
|
| |
the type instead of the byte size. This was causing troublesome mis-compilations.
True to form, this took 2 days to find and is a one-line fix. :-P
llvm-svn: 48354
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
1. There is now a "PAListPtr" class, which is a smart pointer around
the underlying uniqued parameter attribute list object, and manages
its refcount. It is now impossible to mess up the refcount.
2. PAListPtr is now the main interface to the underlying object, and
the underlying object is now completely opaque.
3. Implementation details like SmallVector and FoldingSet are now no
longer part of the interface.
4. You can create a PAListPtr with an arbitrary sequence of
ParamAttrsWithIndex's, no need to make a SmallVector of a specific
size (you can just use an array or scalar or vector if you wish).
5. All the client code that had to check for a null pointer before
dereferencing the pointer is simplified to just access the
PAListPtr directly.
6. The interfaces for adding attrs to a list and removing them is a
bit simpler.
Phase #2 will rename some stuff (e.g. PAListPtr) and do other less
invasive changes.
llvm-svn: 48289
|
| |
|
|
| |
llvm-svn: 48233
|
| |
|
|
| |
llvm-svn: 48106
|
| |
|
|
|
|
| |
under modulo (overflow). Fixes PR1933.
llvm-svn: 47987
|
| |
|
|
|
|
| |
fp type.
llvm-svn: 47750
|
| |
|
|
| |
llvm-svn: 47599
|
| |
|
|
|
|
|
| |
stuff into ParamAttrsList.h. Per feedback from
ParamAttrs changes.
llvm-svn: 47504
|
| |
|
|
| |
llvm-svn: 47478
|
| |
|
|
| |
llvm-svn: 47375
|
| |
|
|
| |
llvm-svn: 47371
|
| |
|
|
|
|
|
| |
for adding alignment info, not there yet). Clean up
interfaces to reference ParameterAttributes consistently.
llvm-svn: 47342
|
| |
|
|
|
|
|
| |
can be a SNaN. We could be more aggressive and turn this into
unreachable, but that is less nice, and not really worth it.
llvm-svn: 47313
|
| |
|
|
| |
llvm-svn: 47287
|
| |
|
|
|
|
| |
to Dale for noticing this!
llvm-svn: 47276
|
| |
|
|
| |
llvm-svn: 47258
|
| |
|
|
|
|
| |
the second half of PR2047
llvm-svn: 47244
|
| |
|
|
|
|
| |
actually does.
llvm-svn: 47090
|
| |
|
|
|
|
|
|
|
| |
was incorrectly simplifying "x == (gep x, 1, i)" into false, even
though i could be negative. As it turns out, all the code to
handle this already existed, we just need to disable the incorrect
optimization case and let the general case handle it.
llvm-svn: 46739
|
| |
|
|
| |
llvm-svn: 46687
|
| |
|
|
| |
llvm-svn: 46684
|
| |
|
|
|
|
| |
reassociate anyways, but they could be generated during instcombine's run.
llvm-svn: 46683
|
| |
|
|
|
|
|
|
| |
careful to
avoid turning -0.0 + 0.0 -> -0.0 which is incorrect.
llvm-svn: 46499
|
| |
|
|
| |
llvm-svn: 46431
|
| |
|
|
| |
llvm-svn: 46429
|
| |
|
|
| |
llvm-svn: 46406
|
| |
|
|
| |
llvm-svn: 46247
|
| |
|
|
|
|
| |
a smaller bitwidth.
llvm-svn: 46244
|
| |
|
|
|
|
|
|
|
| |
drop attributes on varargs call arguments. Also, it could generate
invalid IR if the transformed call already had the 'nest' attribute
somewhere (this can never happen for code coming from llvm-gcc,
but it's a theoretical possibility). Fix both problems.
llvm-svn: 45973
|
| |
|
|
|
|
|
|
|
|
| |
a load/store of i64. The later prevents promotion/scalarrepl of the
source and dest in many cases.
This fixes the 300% performance regression of the byval stuff on
stepanov_v1p2.
llvm-svn: 45945
|
| |
|
|
|
|
| |
method, no functionality change.
llvm-svn: 45944
|
| |
|
|
|
|
|
| |
greater than memcpy alignment, and if we lower to load/store, use the best
alignment info we have.
llvm-svn: 45943
|
| |
|
|
|
|
| |
make memmove->memcpy conversion a bit simpler.
llvm-svn: 45942
|
| |
|
|
|
|
|
| |
realize that ne & sgt was a signed comparison (it was only
looking at whether the left compare was signed).
llvm-svn: 45937
|
| |
|
|
|
|
|
| |
if this becomes a varargs call then deal correctly with any
parameter attributes on the newly vararg call arguments.
llvm-svn: 45931
|
| |
|
|
|
|
| |
arithmetic.
llvm-svn: 45745
|
| |
|
|
|
|
| |
incompatibility.
llvm-svn: 45704
|
| |
|
|
|
|
|
|
|
| |
direct calls bails out unless caller and callee have essentially
equivalent parameter attributes. This is illogical - the callee's
attributes should be of no relevance here. Rework the logic, which
incidentally fixes a crash when removed arguments have attributes.
llvm-svn: 45658
|
| |
|
|
|
|
|
|
|
|
|
| |
a direct call with cast parameters and cast return
value (if any), instcombine was prepared to cast any
non-void return value into any other, whether castable
or not. Add a new predicate for testing whether casting
is valid, and check it both for the return value and
(as a cleanup) for the parameters.
llvm-svn: 45657
|
| |
|
|
| |
llvm-svn: 45613
|
| |
|
|
|
|
|
| |
things that are not equality comparisons, for example:
(2147479553+4096)-2147479553 < 0 != (2147479553+4096) < 2147479553
llvm-svn: 45612
|