Chris Lattner
dc0722e39a
clarify logic.
...
llvm-svn: 86689
2009-11-10 17:00:47 +00:00
Duncan Sands
a25c87ef1f
Add brackets to make gcc-4.4 happy.
...
llvm-svn: 86681
2009-11-10 09:32:10 +00:00
Chris Lattner
562cc40dbb
unify the code that determines whether it is a good idea to change the type
...
of a computation. This fixes some infinite loops when dealing with TD that
has no native types.
llvm-svn: 86670
2009-11-10 07:23:37 +00:00
Chris Lattner
3730cf6fef
factor simplification logic for AND and OR out to InstSimplify from instcombine.
...
llvm-svn: 86635
2009-11-10 00:55:12 +00:00
Chris Lattner
9941f27797
pull a bunch of logic out of instcombine into instsimplify for compare
...
simplification, this handles the foldable fcmp x,x cases among many others.
llvm-svn: 86627
2009-11-09 23:55:12 +00:00
Chris Lattner
9aa69f2205
inline a simple function.
...
llvm-svn: 86625
2009-11-09 23:31:49 +00:00
Chris Lattner
25700676d4
rename SimplifyCompare -> SimplifyCmpInst and split it into
...
Simplify[IF]Cmp pieces. Add some predicates to CmpInst to
determine whether a predicate is fp or int.
llvm-svn: 86624
2009-11-09 23:28:39 +00:00
Chris Lattner
f2b3c795fd
if a 'with overflow' intrinsic just has the normal result used, simplify
...
it to a normal binop. Patch by Alastair Lynn, testcase by me.
llvm-svn: 86524
2009-11-09 07:07:56 +00:00
Chris Lattner
5a3a41a757
enhance PHI slicing to handle the case when a slicable PHI is begin
...
used by a chain of other PHIs.
llvm-svn: 86503
2009-11-09 01:38:00 +00:00
Chris Lattner
6c67b00026
Teach an instcombine to not pull trunc instructions through PHI nodes
...
when both the source and dest are illegal types, since it would cause
the phi to grow (for example, we shouldn't transform test14b's phi to
a phi on i320). This fixes an infinite loop on i686 bootstrap with
phi slicing turned on, so turn it back on.
llvm-svn: 86483
2009-11-08 21:20:06 +00:00
Chris Lattner
11b6e3c1eb
reapply r8644[3-5] with only the scary part
...
(SliceUpIllegalIntegerPHI) disabled.
llvm-svn: 86480
2009-11-08 19:23:30 +00:00
Daniel Dunbar
1543f2c26f
Speculatively revert r8644[3-5], they seem to be leading to infinite loops in
...
llvm-gcc bootstrap.
llvm-svn: 86478
2009-11-08 17:52:47 +00:00
Chris Lattner
cddc8aa1b8
teach a couple of instcombine transformations involving PHIs to
...
not turn a PHI in a legal type into a PHI of an illegal type, and
add a new optimization that breaks up insane integer PHI nodes into
small pieces (PR3451).
llvm-svn: 86443
2009-11-08 08:21:13 +00:00
Chris Lattner
c6bb31e5ea
make instcombine only rewrite a chain of computation
...
(eliminating some extends) if the new type of the
computation is legal or if both the source and dest
are illegal. This prevents instcombine from changing big
chains of computation into i64 on 32-bit targets for
example.
llvm-svn: 86398
2009-11-07 19:11:46 +00:00
Chris Lattner
6a31c1141c
remove some more Context arguments.
...
llvm-svn: 86235
2009-11-06 05:59:53 +00:00
Chris Lattner
903ae55e1c
remove a bunch of extraneous LLVMContext arguments
...
from various APIs, addressing PR5325.
llvm-svn: 86231
2009-11-06 04:27:31 +00:00
Chris Lattner
d8ab8fbe9f
move two functions up higher in the file. Delete a useless argument
...
to EmitGEPOffset.
Implement some new transforms for optimizing
subtracts of two pointer to ints into the same vector. This happens
for C++ iterator idioms for example, stringmap takes a const char*
that points to the start and end of a string. Once inlined, we want
the pointer difference to turn back into a length.
This is rdar://7362831.
llvm-svn: 86021
2009-11-04 08:05:20 +00:00
Chris Lattner
b94afb778c
fix instcombine to only do store sinking when the alignments
...
of the two loads agree. Propagate that onto the new store.
llvm-svn: 85772
2009-11-02 02:06:37 +00:00
Chris Lattner
f3c2039dde
when merging two loads, make sure to take the min of their alignment,
...
not the max. This didn't matter until the previous patch because
instcombine would refuse to sink loads with differenting alignments.
llvm-svn: 85738
2009-11-01 20:07:07 +00:00
Chris Lattner
e7b1e067e9
split load sinking out to its own function, like gep sinking.
...
llvm-svn: 85737
2009-11-01 20:04:24 +00:00
Chris Lattner
b3fe1009a5
fix a bug noticed by inspection: when instcombine sinks loads through
...
phis, it didn't preserve the alignment of the load. This is a missed
optimization of the alignment is high and a miscompilation when the
alignment is low.
llvm-svn: 85736
2009-11-01 19:50:13 +00:00
Chris Lattner
0be6fcef18
add a comment.
...
llvm-svn: 85671
2009-10-31 17:48:31 +00:00
Dan Gohman
25091aa227
Reapply r85634, with the bug fixed.
...
llvm-svn: 85655
2009-10-31 14:22:52 +00:00
Evan Cheng
a0457853b2
Revert 85634. It's breaking consumer-typeset (and others).
...
llvm-svn: 85641
2009-10-31 01:28:06 +00:00
Dan Gohman
a532f755f7
Optimize around the fact that pred_iterator is slow: instead of sorting
...
PHI operands by the predecessor order, sort them by the order used by the
first PHI in the block. This is still suffucient to expose duplicates.
llvm-svn: 85634
2009-10-30 23:15:21 +00:00
Dan Gohman
82139ffc65
Sort the incoming values in PHI nodes to match the predecessor order.
...
This helps expose duplicate PHIs, which will make it easier for them
to be eliminated.
llvm-svn: 85623
2009-10-30 22:22:22 +00:00
Victor Hernandez
0f662a7acf
Rename MallocFreeHelper as MemoryBuiltins
...
llvm-svn: 85286
2009-10-27 20:05:49 +00:00
Dan Gohman
44189252b9
Add braces to avoid ambiguous else.
...
llvm-svn: 85185
2009-10-27 00:11:02 +00:00
Victor Hernandez
6c86b93663
Rename MallocHelper as MallocFreeHelper, since it now also identifies calls to free()
...
llvm-svn: 85181
2009-10-26 23:58:56 +00:00
Victor Hernandez
673c036bc7
Remove FreeInst.
...
Remove LowerAllocations pass.
Update some more passes to treate free calls just like they were treating FreeInst.
llvm-svn: 85176
2009-10-26 23:43:48 +00:00
Dan Gohman
795e3db7ce
Code that checks WillNotOverflowSignedAdd before creating an Add
...
can safely use the NSW bit on the Add.
llvm-svn: 85164
2009-10-26 22:14:22 +00:00
Chris Lattner
7f9ddaf7e3
reapply r85085 with a bugfix to avoid infinite looping.
...
All of the 'demorgan' related xforms need to use
dyn_castNotVal, not m_Not.
llvm-svn: 85119
2009-10-26 15:40:07 +00:00
Evan Cheng
7dad155ec7
Revert 85085. It causes infinite looping during llvm-gcc build.
...
llvm-svn: 85090
2009-10-26 03:51:32 +00:00
Chris Lattner
192549ef70
Implement PR3266 & PR5276, folding:
...
not (or (icmp, icmp)) -> and(icmp, icmp)
llvm-svn: 85085
2009-10-26 01:06:31 +00:00
Nick Lewycky
cacdc4d65a
Remove ICmpInst::isSignedPredicate which was a reimplementation
...
CmpInst::isSigned.
llvm-svn: 85037
2009-10-25 05:20:17 +00:00
Victor Hernandez
e8998896f5
Auto-upgrade free instructions to calls to the builtin free function.
...
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
2009-10-24 04:23:03 +00:00
Victor Hernandez
8428eb5720
Remove AllocationInst. Since MallocInst went away, AllocaInst is the only subclass of AllocationInst, so it no longer is necessary.
...
llvm-svn: 84969
2009-10-23 21:09:37 +00:00
Chris Lattner
cd80b1711b
move another load optimization from instcombine -> libanalysis.
...
llvm-svn: 84841
2009-10-22 06:44:07 +00:00
Chris Lattner
3fb4c19b7d
move 'loading i32 from string' optimization from instcombine
...
to libanalysis. Instcombine shrinking... does this even
make sense???
llvm-svn: 84840
2009-10-22 06:38:35 +00:00
Chris Lattner
2c8c8533b1
Move some constant folding logic for loads out of instcombine into
...
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
2009-10-22 06:25:11 +00:00
Chris Lattner
7c507ae857
fix PR5262.
...
llvm-svn: 84810
2009-10-22 00:17:26 +00:00
Chris Lattner
bf5a89d82b
revert r84754, it isn't the right approach. Edwin, please propose
...
patches for fixes like this instead of committing them directly.
llvm-svn: 84799
2009-10-21 23:41:58 +00:00
Victor Hernandez
0996619220
Make changes to rev 84292 as requested by Chris Lattner.
...
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
2009-10-21 19:11:40 +00:00
Torok Edwin
a8a12b7d98
Fix PR5262: when folding select into PHI, make sure all operands are available
...
in the PHI's Basic Block. This uses a conservative approach, because we don't
have dominator info in instcombine.
llvm-svn: 84754
2009-10-21 10:49:00 +00:00
Victor Hernandez
a25a2890fa
Remove MallocInst from LLVM Instructions.
...
llvm-svn: 84299
2009-10-17 01:18:07 +00:00
Chris Lattner
389f4efae7
only try to fold constantexpr operands when the worklist is first populated,
...
don't bother every time going around the main worklist. This speeds up a
release-asserts opt -std-compile-opts on 403.gcc by about 4% (1.5s). It
seems to speed up the most expensive instances of instcombine by ~10%.
llvm-svn: 84171
2009-10-15 04:59:28 +00:00
Chris Lattner
ddfa3af584
don't bother calling ConstantFoldInstruction unless there is a use of the
...
instruction (which disqualifies stores, unreachable, etc) and at least the
first operand is a constant. This filters out a lot of obvious cases that
can't be folded. Also, switch the IRBuilder to a TargetFolder, which tries
harder.
llvm-svn: 84170
2009-10-15 04:13:44 +00:00
Devang Patel
89ef6dcb54
Use isVoidTy()
...
llvm-svn: 84118
2009-10-14 17:29:00 +00:00
Chris Lattner
a1f5264dd2
make instcombine's instruction sinking more aggressive in the
...
presence of PHI nodes.
llvm-svn: 84103
2009-10-14 15:21:58 +00:00
Devang Patel
81485d992b
Check void type before using RAUWd.
...
llvm-svn: 84049
2009-10-13 22:56:32 +00:00