Evan Cheng
eae1bb9779
Allow -inline-threshold override default threshold even if compiling to optimize for size.
...
llvm-svn: 83274
2009-10-04 06:13:54 +00:00
Douglas Gregor
b4e6fce681
Remove GVNPRE.cpp from the CMake makefile
...
llvm-svn: 83194
2009-10-01 05:30:05 +00:00
Chris Lattner
857ed445a8
remove the GVNPRE pass. It has been subsumed by the GVN pass.
...
Ok'd by Owen.
llvm-svn: 83193
2009-10-01 02:18:36 +00:00
Dan Gohman
2ecc146f0c
Fix this code so that it doesn't try to iterate through a std::vector
...
while calling changeImmediateDominator, which removes elements from the
vector. This fixes PR5097.
llvm-svn: 83166
2009-09-30 20:54:16 +00:00
Dan Gohman
9776ad2192
Remove a redundant #ifndef and add an assertion string.
...
llvm-svn: 82991
2009-09-28 14:38:19 +00:00
Dan Gohman
f31dae3931
Convert LoopSimplify and LoopExtractor from FunctionPass to LoopPass.
...
llvm-svn: 82990
2009-09-28 14:37:51 +00:00
Chris Lattner
d77fb17b28
The select instruction is not neccesarily in the same block as the
...
phi nodes. Make sure to phi translate from the right block.
This fixes a llvm-building-llvm failure on GVN-PRE.cpp
llvm-svn: 82970
2009-09-28 06:49:44 +00:00
Chris Lattner
2a85cfd972
simplify some code.
...
llvm-svn: 82936
2009-09-27 21:46:50 +00:00
Chris Lattner
75a5d76294
The bitcast case is not needed here: instcombine turns icmp(bitcast(x), null) -> icmp(x, null) already.
...
llvm-svn: 82935
2009-09-27 21:42:46 +00:00
Chris Lattner
e024fd6b47
calls are already unmovable, malloc doesn't need a special case.
...
llvm-svn: 82933
2009-09-27 21:36:19 +00:00
Chris Lattner
8a77e8b353
calls to external functions are already marked overdefined, special casing
...
malloc isn't needed.
llvm-svn: 82932
2009-09-27 21:35:11 +00:00
Chris Lattner
bb29bb4e16
calls are already handled, malloc doesn't need a special case.
...
llvm-svn: 82931
2009-09-27 21:33:46 +00:00
Chris Lattner
24af6de20a
calls are rejected above, no need to special case malloc here.
...
llvm-svn: 82929
2009-09-27 21:31:39 +00:00
Chris Lattner
0cfb82cf8c
remove special handling of bitcast(malloc), it will be handled
...
when the loop inspects the bitcast operand.
llvm-svn: 82928
2009-09-27 21:29:28 +00:00
Chris Lattner
3f320467b5
unlike the malloc instruction, "malloc" calls do not claim to be readonly, just nounwind.
...
llvm-svn: 82927
2009-09-27 21:23:38 +00:00
Chris Lattner
7a9e470ddc
allow pushing icmps through phis with multiple uses and across critical edges.
...
These are important to push up to encourage jump threading. This shrinks 176.gcc a bit.
llvm-svn: 82923
2009-09-27 20:46:36 +00:00
Chris Lattner
f7db1f1a3a
Enhance the previous fix for PR4895 to allow more values than just
...
simple constants for the true/false value of the select. We now
do phi translation etc. This really fixes PR4895 :)
llvm-svn: 82917
2009-09-27 20:18:49 +00:00
Chris Lattner
0af7f0ceaf
implement PR4895, by making FoldOpIntoPhi handle select conditions
...
that are phi nodes. Also tighten up FoldOpIntoPhi to treat constantexpr
operands to phis just like other variables, avoiding moving constantexpr
computations around.
Patch by Daniel Dunbar.
llvm-svn: 82913
2009-09-27 19:57:57 +00:00
Dan Gohman
641ab5a61e
Grab an LLVM Context from an instruction that exists rather than one
...
that is deleted in some situations. This fixes a use-after-free.
llvm-svn: 82903
2009-09-27 16:10:30 +00:00
Dan Gohman
fa43cefae4
Tell ScalarEvolution to forget everything it knows about a loop before
...
rotating the loop, since loop rotation is a very significant change.
llvm-svn: 82901
2009-09-27 15:37:03 +00:00
Nick Lewycky
d21c325f09
Instruction::clone does not need to take an LLVMContext&. Remove that and
...
update all the callers.
llvm-svn: 82889
2009-09-27 07:38:41 +00:00
Dan Gohman
0a396aa546
Fix SimplifyLibCalls to transfer attributes from callees rather than
...
calls, since direct calls don't always reflect the attributes of their
callees.
llvm-svn: 82867
2009-09-26 18:10:13 +00:00
Dan Gohman
d585364b0b
Rename ConstantFP's getInf to getInfinity.
...
llvm-svn: 82823
2009-09-25 23:40:21 +00:00
Dan Gohman
d564cd42d9
Transform pow(x, 0.5) to (x == -inf ? inf : fabs(sqrt(x))), which is
...
typically faster then doing a general pow.
llvm-svn: 82819
2009-09-25 23:10:17 +00:00
Torok Edwin
193d22fa77
Constant propagating byval pointer is safe if function is readonly.
...
llvm-svn: 82700
2009-09-24 18:33:42 +00:00
Torok Edwin
81fe296f15
Don't constant propagate byval pointers, since they are not really pointers, but
...
rather structs passed by value.
This fixes PR5038.
llvm-svn: 82689
2009-09-24 09:47:18 +00:00
Dale Johannesen
1b76c2ca48
A minor improvment in accuracy to inline cost
...
computation, and some cosmetics.
llvm-svn: 82660
2009-09-23 22:05:24 +00:00
Chris Lattner
f5afe18457
tidy up
...
llvm-svn: 82488
2009-09-21 22:26:02 +00:00
Chris Lattner
1d9ca20bf5
big endian systems shift by bits too, hopefully this will fix the ppc
...
bootstrap problems.
llvm-svn: 82464
2009-09-21 17:55:47 +00:00
Dan Gohman
3359b05815
Nick pointed out that DominanceFrontier and DominanceTree are preserved
...
by setPreservesCFG().
llvm-svn: 82463
2009-09-21 17:54:42 +00:00
Dan Gohman
ea9d53d563
Remove the special-case for constants in PHI nodes; it's not really
...
helpful, and it didn't correctly handle the case of constants input
to PHIs for backedges.
llvm-svn: 82462
2009-09-21 17:53:35 +00:00
Chris Lattner
b1c7502032
fix PR5016, a crash I introduced in GVN handing first class
...
arrays and structs, which cannot be bitcast to integers.
llvm-svn: 82460
2009-09-21 17:24:04 +00:00
Chris Lattner
45b58ae047
enable non-local analysis and PRE of large store -> little load.
...
This doesn't kick in too much because of phi translation issues,
but this can be resolved in the future.
llvm-svn: 82447
2009-09-21 06:48:08 +00:00
Chris Lattner
8debc9ab3e
convert an std::pair to an explicit struct.
...
llvm-svn: 82446
2009-09-21 06:30:24 +00:00
Chris Lattner
71d74ff16b
move some functions, add a comment.
...
llvm-svn: 82444
2009-09-21 06:24:16 +00:00
Chris Lattner
da0499f01e
split HandleLoadFromClobberingStore in two pieces: one that does the
...
analysis, one that does the xform.
llvm-svn: 82443
2009-09-21 06:22:46 +00:00
Chris Lattner
97e1feed14
Improve GVN to be able to forward substitute a small load
...
from a piece of a large store when both are in the same block.
This allows clang to compile the testcase in PR4216 to this code:
_test_bitfield:
movl 4(%esp), %eax
movl %eax, %ecx
andl $-65536, %ecx
orl $32962, %eax
andl $40186, %eax
orl %ecx, %eax
ret
This is not ideal, but is a whole lot better than the code produced
by llvm-gcc:
_test_bitfield:
movw $-32574, %ax
orw 4(%esp), %ax
andw $-25350, %ax
movw %ax, 4(%esp)
movw 7(%esp), %cx
shlw $8, %cx
movzbl 6(%esp), %edx
orw %cx, %dx
movzwl %dx, %ecx
shll $16, %ecx
movzwl %ax, %eax
orl %ecx, %eax
ret
and dramatically better than that produced by gcc 4.2:
_test_bitfield:
pushl %ebx
call L3
"L00000000001$pb":
L3:
popl %ebx
movl 8(%esp), %eax
leal 0(,%eax,4), %edx
sarb $7, %dl
movl %eax, %ecx
andl $7168, %ecx
andl $-7201, %ebx
movzbl %dl, %edx
andl $1, %edx
sall $5, %edx
orl %ecx, %ebx
orl %edx, %ebx
andl $24, %eax
andl $-58336, %ebx
orl %eax, %ebx
orl $32962, %ebx
movl %ebx, %eax
popl %ebx
ret
llvm-svn: 82439
2009-09-21 05:57:11 +00:00
Chris Lattner
50c869bb19
formatting cleanups, no functionality change.
...
llvm-svn: 82426
2009-09-21 02:42:51 +00:00
Chris Lattner
b7d34131d1
Move CoerceAvailableValueToLoadType earlier in GVN.cpp. Hook it up
...
so that nonlocal and partially redundant loads can use it as well.
The testcase shows examples of craziness this can handle. This triggers
*many* times in 176.gcc.
llvm-svn: 82403
2009-09-20 20:09:34 +00:00
Chris Lattner
279ec561c6
change the interface to CoerceAvailableValueToLoadType to be
...
more generic.
llvm-svn: 82402
2009-09-20 19:31:14 +00:00
Chris Lattner
6bae20046f
enhance GVN to forward substitute a stored value to a load
...
(and load -> load) when the base pointers must alias but when
they are different types. This occurs very very frequently in
176.gcc and other code that uses bitfields a lot.
llvm-svn: 82399
2009-09-20 19:03:47 +00:00
Daniel Dunbar
378331a13d
Tabs -> spaces, and remove trailing whitespace.
...
llvm-svn: 82355
2009-09-20 02:20:51 +00:00
Nick Lewycky
3b7df4bbd5
Remove the default value for ConstantStruct::get's isPacked parameter and
...
update the code which was broken by this.
llvm-svn: 82327
2009-09-19 20:30:26 +00:00
Victor Hernandez
fe5347d782
Enhance transform passes so that they apply the same tranforms to malloc calls as to MallocInst.
...
Reviewed by Dan Gohman.
llvm-svn: 82300
2009-09-18 22:35:49 +00:00
Victor Hernandez
065bc44d01
Update malloc call creation code (AllocType is now the element type of the malloc, not the resulting type).
...
In getMallocArraySize(), fix bug in the case that array size is the product of 2 constants.
Extend isArrayMalloc() and getMallocArraySize() to handle case where malloc is used as char array.
Ensure that ArraySize in LowerAllocations::runOnBasicBlock() is correct type.
Extend Instruction::isSafeToSpeculativelyExecute() to handle malloc calls.
Add verification for malloc calls.
Reviewed by Dan Gohman.
llvm-svn: 82257
2009-09-18 19:20:02 +00:00
Daniel Dunbar
1ce602e5db
Update CMake.
...
llvm-svn: 82097
2009-09-17 00:06:48 +00:00
Dan Gohman
752227ef24
Add a new pass for doing late hoisting of floating-point and vector
...
constants out of loops. These aren't covered by the regular LICM
pass, because in LLVM IR constants don't require separate
instructions. They're not always covered by the MachineLICM pass
either, because it doesn't know how to unfold folded constant-pool
loads. This is somewhat experimental at this point, and off by
default.
llvm-svn: 82076
2009-09-16 20:25:11 +00:00
Dan Gohman
c7e3d84790
Change FoldPHIArgBinOpIntoPHI to decline folding if it would introduce two
...
phis, similar to the FoldPHIArgGEPIntoPHI change.
Also, delete some comments that don't reflect the code.
llvm-svn: 82053
2009-09-16 16:50:24 +00:00
Andreas Neustifter
15e9f61d26
Reapplied r81355 with the problems fixed.
...
(See http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20090907/086737.html and
http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20090907/086746.html )
llvm-svn: 82039
2009-09-16 11:35:50 +00:00
Andreas Neustifter
3c9b4c4c75
Preserve ProfileInfo during CodeGenPrepare.
...
llvm-svn: 82034
2009-09-16 09:26:52 +00:00