| Commit message (Collapse) | Author | Age | Files | Lines |
... | |
|
|
|
| |
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
|
|
|
|
| |
llvm-svn: 45418
|
|
|
|
|
|
| |
should probably be a target-specific predicate based on address space. That way for targets where this isn't applicable the predicate can be optimized away.
llvm-svn: 45403
|
|
|
|
|
|
| |
pointing out my stupid mistakes when writing this patch. :-)
llvm-svn: 45384
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
define i32 @main() {
entry:
%z = alloca i32 ; <i32*> [#uses=2]
store i32 0, i32* %z
%tmp = load i32* %z ; <i32> [#uses=1]
%sub = sub i32 %tmp, 1 ; <i32> [#uses=1]
%cmp = icmp ult i32 %sub, 0 ; <i1> [#uses=1]
%retval = select i1 %cmp, i32 1, i32 0 ; <i32> [#uses=1]
ret i32 %retval
}
into ret 1, instead of ret 0.
Christopher, please investigate.
llvm-svn: 45383
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
us to compile:
#include <math.h>
int t1(double d) { return signbit(d); }
into:
_t1:
movd %xmm0, %rax
shrq $63, %rax
ret
instead of:
_t1:
movd %xmm0, %rax
shrq $32, %rax
shrl $31, %eax
ret
on x86-64.
llvm-svn: 45311
|
|
|
|
|
|
|
|
|
| |
(icmp slt (sub A B) 1) -> (icmp sle A B)
icmp sgt (sub A B) -1) -> (icmp sge A B)
and add testcase.
llvm-svn: 45256
|
|
|
|
|
|
| |
has a single use, and generalize it to not require N to be a constant.
llvm-svn: 45250
|
|
|
|
|
|
|
|
|
| |
calls 'nounwind'. It is important for correct C++
exception handling that nounwind markings do not get
lost, so this transformation is actually needed for
correctness.
llvm-svn: 45218
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
for this case on X86
from
_foo:
movl $99, %ecx
movl 4(%esp), %eax
subl %eax, %ecx
xorl %edx, %edx
testl %ecx, %ecx
cmovs %edx, %eax
ret
to
_foo:
xorl %ecx, %ecx
movl 4(%esp), %eax
cmpl $99, %eax
cmovg %ecx, %eax
ret
llvm-svn: 45173
|
|
|
|
| |
llvm-svn: 45170
|
|
|
|
|
|
| |
recent submission.
llvm-svn: 45169
|
|
|
|
|
|
| |
doesNotThrow.
llvm-svn: 45160
|
|
|
|
| |
llvm-svn: 45159
|
|
|
|
|
|
|
|
| |
eliminate subtractions. This code is often produced by the SMAX expansion in SCEV.
This implements test/Transforms/InstCombine/2007-12-18-AddSelCmpSub.ll
llvm-svn: 45158
|
|
|
|
|
|
| |
of PointerType::get() has become PointerType::getUnqual(), which returns a pointer in the generic address space. The new prototype of PointerType::get() requires both a type and an address space.
llvm-svn: 45082
|