| Commit message (Collapse) | Author | Age | Files | Lines |
| ... | |
| |
|
|
|
|
| |
and SCEVSignExtendExpr.
llvm-svn: 69649
|
| |
|
|
|
|
| |
the code to minimize dependencies on TargetData.
llvm-svn: 69644
|
| |
|
|
|
|
| |
GEP's don't usually become instructions.
llvm-svn: 69631
|
| |
|
|
|
|
| |
pointer type, make sure that the pointer size is a valid sequential index type.
llvm-svn: 69574
|
| |
|
|
| |
llvm-svn: 69450
|
| |
|
|
| |
llvm-svn: 69402
|
| |
|
|
|
|
| |
This fixes a --enable-expensive-checks problem.
llvm-svn: 69353
|
| |
|
|
|
|
|
| |
regression in 403.gcc in PIC_CODEGEN=1 and DISABLE_LTO=1
mode.
llvm-svn: 69344
|
| |
|
|
|
|
| |
to get the correct answer for pointer types.
llvm-svn: 69321
|
| |
|
|
|
|
| |
incoming edges for a block with many predecessors.
llvm-svn: 69312
|
| |
|
|
|
|
|
| |
targets with pointers larger than 64 bits, due to the code not
yet being APInt clean.
llvm-svn: 69296
|
| |
|
|
|
|
| |
optimizer, which just happen to frequently involve optimizing GEPs.
llvm-svn: 69295
|
| |
|
|
|
|
| |
since the operand is always a constant.
llvm-svn: 69291
|
| |
|
|
|
|
| |
new instruction with SCEVExpander::InsertCastOfTo.
llvm-svn: 69290
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
have pointer types, though in contrast to C pointer types, SCEV
addition is never implicitly scaled. This not only eliminates the
need for special code like IndVars' EliminatePointerRecurrence
and LSR's own GEP expansion code, it also does a better job because
it lets the normal optimizations handle pointer expressions just
like integer expressions.
Also, since LLVM IR GEPs can't directly index into multi-dimensional
VLAs, moving the GEP analysis out of client code and into the SCEV
framework makes it easier for clients to handle multi-dimensional
VLAs the same way as other arrays.
Some existing regression tests show improved optimization.
test/CodeGen/ARM/2007-03-13-InstrSched.ll in particular improved to
the point where if-conversion started kicking in; I turned it off
for this test to preserve the intent of the test.
llvm-svn: 69258
|
| |
|
|
|
|
|
|
| |
and sext over (iv | const), if a longer iv is
available. Allow expressions to have more than
one zext/sext parent. All from OpenSSL.
llvm-svn: 69241
|
| |
|
|
|
|
|
| |
if a longer iv is available. These subscript forms are
not common; they're a bottleneck in OpenSSL.
llvm-svn: 69215
|
| |
|
|
|
|
|
|
|
| |
sext around sext(shorter IV + constant), using a
longer IV instead, when it can figure out the
add can't overflow. This comes up a lot in
subscripting; mainly affects 64 bit.
llvm-svn: 69123
|
| |
|
|
|
|
| |
destinations have phi nodes.
llvm-svn: 69121
|
| |
|
|
|
|
| |
llvm.dbg.region.end instrinsic. This nested llvm.dbg.func.start/llvm.dbg.region.end pair now enables DW_TAG_inlined_subroutine support in code generator.
llvm-svn: 69118
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
This turns:
eq:
%3 = icmp eq i32 %1, %2
br label %join
ne:
%4 = icmp ne i32 %1, %2
br label %join
join:
%5 = phi i1 [%3, %eq], [%4, %ne]
br i1 %5, label %yes, label %no
=>
eq:
%3 = icmp eq i32 %1, %2
br i1 %3, label %yes, label %no
ne:
%4 = icmp ne i32 %1, %2
br i1 %4, label %yes, label %no
llvm-svn: 69102
|
| |
|
|
|
|
| |
deleting, not just the basic block.
llvm-svn: 69011
|
| |
|
|
| |
llvm-svn: 68939
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
| |
strncat :(
strncat(foo, "bar", 99)
would be optimized to
memcpy(foo+strlen(foo), "bar", 100, 1)
instead of
memcpy(foo+strlen(foo), "bar", 4, 1)"
Patch by Benjamin Kramer!
llvm-svn: 68905
|
| |
|
|
|
|
| |
code. Patch by Benjamin Kramer!
llvm-svn: 68885
|
| |
|
|
|
|
|
|
|
|
|
|
|
| |
integer types, unless they are already strange. This prevents it from
turning the code produced by SROA into crazy libcalls and stuff that
the code generator can't handle. In the attached example, the result
was an i96 multiply that caused the x86 backend to assert.
Note that if TargetData had an idea of what the legal types are for
a target that this could be used to stop instcombine from introducing
i64 muls, as Scott wanted.
llvm-svn: 68598
|
| |
|
|
| |
llvm-svn: 68500
|
| |
|
|
| |
llvm-svn: 68485
|
| |
|
|
|
|
|
|
|
| |
instead of the place where it started to perform the string copy.
- PR3661
- Patch by Benjamin Kramer!
llvm-svn: 68443
|
| |
|
|
| |
llvm-svn: 68262
|
| |
|
|
|
|
|
|
| |
Applications/Burg/burg
Applications/ClamAV/clamscan
and many other tests.
llvm-svn: 68211
|
| |
|
|
| |
llvm-svn: 68172
|
| |
|
|
|
|
| |
if it dangles.
llvm-svn: 68150
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
not generate selects of two constants unless they are selects of 0 and 1.
e.g.
define i32 @t1(i32 %c, i32 %x) nounwind {
%t1 = icmp eq i32 %c, 0
%t2 = lshr i32 %x, 18
%t3 = select i1 %t1, i32 %t2, i32 %x
ret i32 %t3
}
was turned into
define i32 @t2(i32 %c, i32 %x) nounwind {
%t1 = icmp eq i32 %c, 0
%t2 = select i1 %t1, i32 18, i32 0
%t3 = lshr i32 %x, %t2
ret i32 %t3
}
For most targets, that means materializing two constants and then a select. e.g. On x86-64
movl %esi, %eax
shrl $18, %eax
testl %edi, %edi
cmovne %esi, %eax
ret
=>
xorl %eax, %eax
testl %edi, %edi
movl $18, %ecx
cmovne %eax, %ecx
movl %esi, %eax
shrl %cl, %eax
ret
Also, the optimizer and codegen can reason about shl / and / add, etc. by a constant. This optimization will hinder optimizations using ComputeMaskedBits.
llvm-svn: 68142
|
| |
|
|
|
|
| |
Patch by Jay Foad.
llvm-svn: 68120
|
| |
|
|
|
|
| |
executed only once. There was a bug in determining IV based value of the iteration for which the loop body is executed. Fix it.
llvm-svn: 68071
|
| |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| |
a miscompilation.
make[4]: Entering directory `gcc-4.2.llvm-objects/x86_64-unknown-linux-gnu/libstdc++-v3/include'
if [ ! -d "./x86_64-unknown-linux-gnu/bits/stdtr1c++.h.gch" ]; then \
mkdir -p ./x86_64-unknown-linux-gnu/bits/stdtr1c++.h.gch; \
fi; \
gcc-4.2.llvm-objects/./gcc/xgcc -shared-libgcc -Bgcc-4.2.llvm-objects/./gcc -nostdinc++
-Lgcc-4.2.llvm-objects/x86_64-unknown-linux-gnu/libstdc++-v3/src -Lgcc-4.2.llvm-objects/x86_64-unknown-linux-gnu/libstdc++-v3/src/.libs
-B/usr/local/gnat-llvm/x86_64-unknown-linux-gnu/bin/ -B/usr/local/gnat-llvm/x86_64-unknown-linux-gnu/lib/ -isystem
/usr/local/gnat-llvm/x86_64-unknown-linux-gnu/include -isystem /usr/local/gnat-llvm/x86_64-unknown-linux-gnu/sys-include -Winvalid-pch -Wno-deprecated -x
c++-header -g -O2 -D_GNU_SOURCE -Igcc-4.2.llvm-objects/x86_64-unknown-linux-gnu/libstdc++-v3/include/x86_64-unknown-linux-gnu
-Igcc-4.2.llvm-objects/x86_64-unknown-linux-gnu/libstdc++-v3/include -Igcc-4.2.llvm/libstdc++-v3/libsupc++ -O2 -g
gcc-4.2.llvm/libstdc++-v3/include/precompiled/stdtr1c++.h -o x86_64-unknown-linux-gnu/bits/stdtr1c++.h.gch/O2g.gch
In file included from gcc-4.2.llvm-objects/x86_64-unknown-linux-gnu/libstdc++-v3/include/tr1/repeat.h:247,
from gcc-4.2.llvm-objects/x86_64-unknown-linux-gnu/libstdc++-v3/include/tr1/functional:1098,
from gcc-4.2.llvm/libstdc++-v3/include/precompiled/stdtr1c++.h:53:
gcc-4.2.llvm-objects/x86_64-unknown-linux-gnu/libstdc++-v3/include/tr1/functional_iterate.h:417: internal compiler error: in ggc_recalculate_in_use_p, at
ggc-page.c:1602
Please submit a full bug report,
with preprocessed source if appropriate.
See <URL:http://llvm.org/bugs/> for instructions.
make[4]: *** [x86_64-unknown-linux-gnu/bits/stdtr1c++.h.gch/O2g.gch] Error 1
llvm-svn: 67839
|
| |
|
|
| |
llvm-svn: 67811
|
| |
|
|
| |
llvm-svn: 67798
|
| |
|
|
|
|
|
| |
called from llc, not opt, but it's an IR level
optimization nevertheless.)
llvm-svn: 67724
|
| |
|
|
|
|
| |
analysis values, related to the instructions in the basic block.
llvm-svn: 67719
|
| |
|
|
|
|
| |
precise than it used to be.
llvm-svn: 67662
|
| |
|
|
| |
llvm-svn: 67657
|
| |
|
|
|
|
|
|
| |
to/from integer types that are not intptr_t to convert to intptr_t
then do an integer conversion to the dest type. This exposes the
cast to the optimizer.
llvm-svn: 67638
|
| |
|
|
|
|
|
|
|
|
|
| |
1. Make instcombine always canonicalize trunc x to i1 into an icmp(x&1). This
exposes the AND to other instcombine xforms and is more of what the code
generator expects.
2. Rewrite the remaining trunc pattern match to use 'match', which
simplifies it a lot.
llvm-svn: 67635
|
| |
|
|
| |
llvm-svn: 67578
|
| |
|
|
|
|
| |
explicitly flush it.
llvm-svn: 67526
|
| |
|
|
| |
llvm-svn: 67454
|
| |
|
|
|
|
| |
shifts together. This fixes PR3851.
llvm-svn: 67411
|
| |
|
|
|
|
|
|
|
| |
linkage: the value may be replaced with something
different at link time. (Frontends that want to
allow values to be loaded out of weak constants can
give their constants weak_odr linkage).
llvm-svn: 67407
|