Nick Lewycky
8d9ef77adc
This transform requires valid TargetData info. Wrap it in 'if (TD)' in
...
preparation for the day we use null TargetData when no target is specified.
llvm-svn: 71210
2009-05-08 06:47:37 +00:00
Eli Friedman
a280375b23
PR4123: don't crash when inlining a call which uses its own result.
...
llvm-svn: 71199
2009-05-08 00:22:04 +00:00
Dan Gohman
679947f6ea
Perform constant folding on operands of instructions with non-void
...
types, such as loads and calls.
llvm-svn: 71175
2009-05-07 19:43:39 +00:00
Evan Cheng
ecc4cc83a8
Unbreak the build.
...
llvm-svn: 71091
2009-05-06 18:00:56 +00:00
David Greene
be8ff09e46
Make sure to use signed arithmetic in APInt to fix a regression.
...
llvm-svn: 71090
2009-05-06 17:39:26 +00:00
Dan Gohman
33e1f0fcb5
Simplify code by using SmallVector's pop_back_val() instead of
...
separate back() and pop_back() calls.
llvm-svn: 71089
2009-05-06 17:22:41 +00:00
Duncan Sands
b71ad70b4e
Fix PR3754: don't mark functions that wrap MallocInst with
...
the readnone. Since MallocInst is scheduled for deletion
it doesn't seem worth doing anything more subtle, such as
having mayWriteToMemory return true for MallocInst.
llvm-svn: 71077
2009-05-06 08:42:00 +00:00
Duncan Sands
880eaf5278
Allow readonly functions to unwind exceptions. Teach
...
the optimizers about this. For example, a readonly
function with no uses cannot be removed unless it is
also marked nounwind.
llvm-svn: 71071
2009-05-06 06:49:50 +00:00
Dan Gohman
39d3c78f6a
Fix a copy+pasto in a comment.
...
llvm-svn: 71035
2009-05-05 23:02:38 +00:00
Dan Gohman
c1169472a2
Delete a FIXME which is no longer relevant, and add a FIXME that is.
...
llvm-svn: 71033
2009-05-05 22:59:55 +00:00
Bill Wendling
5f4fcbeb10
Temporarily reverting r71008. It was causing this failure:
...
Running /Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvm.src/test/
CodeGen/X86/dg.exp ...
FAIL: /Volumes/Sandbox/Buildbot/llvm/full-llvm/build/llvm.src/test/
CodeGen/X86/change-compare-stride-1.ll
Failed with exit(1) at line 2
while running: grep {cmpq $-478,} change-compare-stride-1.ll.tmp
child process exited abnormally
llvm-svn: 71013
2009-05-05 20:49:46 +00:00
David Greene
2bb2b3840e
Handle overflow of 64-bit loop conditions.
...
llvm-svn: 71008
2009-05-05 20:22:36 +00:00
Dan Gohman
00c4ac3add
Re-apply 70645, converting ScalarEvolution to use
...
CallbackVH, with fixes. allUsesReplacedWith need to
walk the def-use chains and invalidate all users of a
value that is replaced. SCEVs of users need to be
recalcualted even if the new value is equivalent. Also,
make forgetLoopPHIs walk def-use chains, since any
SCEV that depends on a PHI should be recalculated when
more information about that PHI becomes available.
llvm-svn: 70927
2009-05-04 22:30:44 +00:00
Dan Gohman
6c425d29e7
Constify a bunch of SCEV-using code.
...
llvm-svn: 70919
2009-05-04 22:02:23 +00:00
Chris Lattner
84cf4d62a8
fix some problems spotted by Duncan and Nicolas Geoffray
...
llvm-svn: 70872
2009-05-04 16:29:24 +00:00
Chris Lattner
6807ddd3d9
* Sink 4 duplicates of edge threading validity checks and DOUT prints into
...
ThreadEdge directly. This shares the code, but is just a refactoring.
* Make JumpThreading compute the set of loop headers and avoid threading
across them. This prevents jump threading from forming irreducible
loops (goodness) but also prevents it from threading in other cases that
are beneficial (see the comment above FindFunctionBackedges).
llvm-svn: 70820
2009-05-04 02:28:08 +00:00
Chris Lattner
b07d558841
Factor loop backedge finding out of CodeGenPrepare into a new
...
FindFunctionBackedges function.
llvm-svn: 70819
2009-05-04 02:25:58 +00:00
Dan Gohman
8e4b9e586b
Revert r70645 for now; it's causing a variety of regressions.
...
llvm-svn: 70661
2009-05-03 05:46:20 +00:00
Nick Lewycky
01b22399ef
Revert r70630. Go back to appending ".b" to internal globals when shrinking
...
them to bool.
llvm-svn: 70653
2009-05-03 03:49:08 +00:00
Dan Gohman
7d98736ca6
Convert ScalarEvolution to use CallbackVH for its internal map. This
...
makes ScalarEvolution::deleteValueFromRecords, and it's code that
subtly needed to be called before ReplaceAllUsesWith, unnecessary.
It also makes ValueDeletionListener unnecessary.
llvm-svn: 70645
2009-05-02 21:19:20 +00:00
Dan Gohman
7c5f68dd5c
The second argument to RecursivelyDeleteTriviallyDeadInstructions has
...
a default value, and will hopefully be going away soon.
llvm-svn: 70642
2009-05-02 20:22:10 +00:00
Dan Gohman
a79cce4aef
Previously, RecursivelyDeleteDeadInstructions provided an option
...
of returning a list of pointers to Values that are deleted. This was
unsafe, because the pointers in the list are, by nature of what
RecursivelyDeleteDeadInstructions does, always dangling. Replace this
with a simple callback mechanism. This may eventually be removed if
all clients can reasonably be expected to use CallbackVH.
Use this to factor out the dead-phi-cycle-elimination code from LSR
utility function, and generalize it to use the
RecursivelyDeleteTriviallyDeadInstructions utility function.
This makes LSR more aggressive about eliminating dead PHI cycles;
adjust tests to either be less trivial or to simply expect fewer
instructions.
llvm-svn: 70636
2009-05-02 18:29:22 +00:00
Dan Gohman
cc3edfaa6c
Tell ScalarEvolution that the loop is being deleted before actually
...
deleting it. This will let ScalarEvolution be more complete about
updating its records.
llvm-svn: 70632
2009-05-02 17:29:26 +00:00
Nick Lewycky
3e85ff61b3
Don't append ".b" to the names of globals that are being shrunk to booleans.
...
llvm-svn: 70630
2009-05-02 16:21:50 +00:00
Dan Gohman
a4b28ca3c9
Don't split critical edges during the AddUsersIfInteresting phase
...
of LSR. This makes the AddUsersIfInteresting phase of LSR a pure
analysis instead of a phase that potentially does CFG modifications.
The conditions where this code would actually perform a split are
rare, and in the cases where it actually would do a split the split
is usually undone by CodeGenPrepare, and in cases where splits
actually survive into codegen, they appear to hurt more often than
they help.
llvm-svn: 70625
2009-05-02 05:36:01 +00:00
Dan Gohman
bdc33dc988
Make RequiresTypeConversion canonicalize the types before calling the
...
target hooks canLosslesslyBitCastTo and isTruncateFree. This allows
targets to avoid worrying about handling all combinations of integer
and pointer types.
llvm-svn: 70555
2009-05-01 17:07:43 +00:00
Dan Gohman
9dd3e99217
Minor whitespace fix.
...
llvm-svn: 70551
2009-05-01 16:56:32 +00:00
Dan Gohman
a55fce998e
Fix some code to work if TargetLowering is not available.
...
llvm-svn: 70546
2009-05-01 16:29:14 +00:00
Dale Johannesen
be38eaf1d4
Print correct instruction in dump.
...
llvm-svn: 70427
2009-04-29 22:57:20 +00:00
Dan Gohman
8b1b8d5891
Reword and tidy up some comments.
...
llvm-svn: 70416
2009-04-29 22:01:05 +00:00
Dan Gohman
418f294b3b
Remove an obsolete comment.
...
llvm-svn: 70262
2009-04-27 22:12:34 +00:00
Dale Johannesen
626b0a32f7
Fix PR 4086, a bug in FP IV elimination.
...
llvm-svn: 70247
2009-04-27 21:03:15 +00:00
Dan Gohman
e1a532cb4f
Permit ChangeCompareStride to rewrite a comparison when the factor
...
between the comparison's iv stride and the candidate stride is
exactly -1.
llvm-svn: 70244
2009-04-27 20:35:32 +00:00
Dan Gohman
d13f1a3b59
Return null instead of false, as appropriate.
...
llvm-svn: 70054
2009-04-25 17:28:45 +00:00
Dan Gohman
a7fae1f865
Add several more icmp simplifications. Transform signed comparisons
...
into unsigned ones when the operands are known to have the same
sign bit value.
llvm-svn: 70053
2009-04-25 17:12:48 +00:00
Sanjiv Gupta
f1177e1be7
Allow i16 type indices to gep.
...
llvm-svn: 69946
2009-04-24 02:37:54 +00:00
Dan Gohman
c0f47d6ec1
Change SCEVExpander's expandCodeFor to provide more flexibility
...
with the persistent insertion point, and change IndVars to make
use of it. This fixes a bug where IndVars was holding on to a
stale insertion point and forcing the SCEVExpander to continue to
use it.
This fixes PR4038.
llvm-svn: 69892
2009-04-23 15:16:49 +00:00
Evan Cheng
bdfff0ba69
Make sure both operands have binary instructions have the same type.
...
llvm-svn: 69844
2009-04-22 23:39:28 +00:00
Evan Cheng
faa208ae5f
A few more places where the check of use_empty is needed.
...
llvm-svn: 69842
2009-04-22 23:09:16 +00:00
Evan Cheng
2af546d5fa
Avoid deferencing use_begin() if value does not have a use.
...
llvm-svn: 69836
2009-04-22 22:45:37 +00:00
Owen Anderson
309568c469
Real fix for PR3549, by using caching for predecessor counts in addition to the predecessors themselves. This halves the time
...
to optimize the testcase, beyond what my previous patch did.
llvm-svn: 69792
2009-04-22 08:50:12 +00:00
Owen Anderson
b36babc111
Use PredIteratorCache in LCSSA, which gives a 37% overall speedup on the testcase from PR3549. More improvements to come.
...
llvm-svn: 69788
2009-04-22 08:09:13 +00:00
Chris Lattner
60c88b66da
use predicate instead of hand-rolled loop
...
llvm-svn: 69752
2009-04-21 23:37:18 +00:00
Chris Lattner
95aad4d625
fix a crash on a pointless but valid zero-length memset, rdar://6808691
...
llvm-svn: 69680
2009-04-21 16:52:12 +00:00
Dan Gohman
4e3e945880
Factor out a common base class from SCEVTruncateExpr, SCEVZeroExtendExpr,
...
and SCEVSignExtendExpr.
llvm-svn: 69649
2009-04-21 01:25:57 +00:00
Dan Gohman
55d8490e7b
Introduce encapsulation for ScalarEvolution's TargetData object, and refactor
...
the code to minimize dependencies on TargetData.
llvm-svn: 69644
2009-04-21 01:07:12 +00:00
Dale Johannesen
a263eac5f8
Adjust loop size estimate for full unrolling;
...
GEP's don't usually become instructions.
llvm-svn: 69631
2009-04-20 22:19:33 +00:00
Sanjiv Gupta
0cb9d67bcc
Before trying to introduce/eliminate cast/ext/trunc to make indices type as
...
pointer type, make sure that the pointer size is a valid sequential index type.
llvm-svn: 69574
2009-04-20 06:05:54 +00:00
Dan Gohman
e2e949ee98
Use more const qualifiers with SCEV interfaces.
...
llvm-svn: 69450
2009-04-18 17:56:28 +00:00
Jim Grosbach
da399d8358
remove trailing whitespace
...
llvm-svn: 69402
2009-04-17 23:30:55 +00:00
David Greene
d9756224ce
Use a safer iterator interface and get rid of std C++ library misuse.
...
This fixes a --enable-expensive-checks problem.
llvm-svn: 69353
2009-04-17 14:56:18 +00:00
Dan Gohman
61dc247292
Don't create ConstantInts with pointer type. This fixes a
...
regression in 403.gcc in PIC_CODEGEN=1 and DISABLE_LTO=1
mode.
llvm-svn: 69344
2009-04-17 02:02:52 +00:00
Dan Gohman
0b7e08929a
Use TargetData::getTypeSizeInBits instead of getPrimitiveSizeInBits()
...
to get the correct answer for pointer types.
llvm-svn: 69321
2009-04-16 22:35:57 +00:00
Eli Friedman
13e59b3c41
Fix for PR3944: make mem2reg O(N) instead of O(N^2) in the number of
...
incoming edges for a block with many predecessors.
llvm-svn: 69312
2009-04-16 21:40:28 +00:00
Dan Gohman
f2bec6720f
Minor code simplifications. Don't attempt LSR on theoretical
...
targets with pointers larger than 64 bits, due to the code not
yet being APInt clean.
llvm-svn: 69296
2009-04-16 16:49:48 +00:00
Dan Gohman
67ad4ee457
LSR is no longer a GEP optimizer. It is now an IV expression
...
optimizer, which just happen to frequently involve optimizing GEPs.
llvm-svn: 69295
2009-04-16 16:46:01 +00:00
Dan Gohman
b40c343360
Use ConstantExpr::getIntToPtr instead of SCEVExpander::InsertCastOfTo,
...
since the operand is always a constant.
llvm-svn: 69291
2009-04-16 15:48:38 +00:00
Dan Gohman
862f4743b8
Use a SCEV expression cast instead of immediately inserting a
...
new instruction with SCEVExpander::InsertCastOfTo.
llvm-svn: 69290
2009-04-16 15:47:35 +00:00
Dan Gohman
98aa1d9693
Expand GEPs in ScalarEvolution expressions. SCEV expressions can now
...
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
2009-04-16 03:18:22 +00:00
Dale Johannesen
ab8b46beca
Eliminate zext over (iv | const) or (signed iv),
...
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
2009-04-15 23:31:51 +00:00
Dale Johannesen
98c9716c34
Eliminate zext over (iv & const) or ((iv+const)&const)
...
if a longer iv is available. These subscript forms are
not common; they're a bottleneck in OpenSSL.
llvm-svn: 69215
2009-04-15 20:41:02 +00:00
Dale Johannesen
427e9aade9
Enhance induction variable code to remove the
...
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
2009-04-15 01:10:12 +00:00
Evan Cheng
bd35a81da5
Avoid making the transformation enabled by my last patch if the new destinations have phi nodes.
...
llvm-svn: 69121
2009-04-15 00:43:54 +00:00
Devang Patel
7323064183
While inlining, clone llvm.dbg.func.start intrinsic and adjust
...
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
2009-04-15 00:17:06 +00:00
Evan Cheng
dba98a0669
Optimize conditional branch on i1 phis with non-constant inputs.
...
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
2009-04-14 23:40:03 +00:00
Owen Anderson
f127f4a7a9
LoopIndexSplit needs to inform the loop pass manager of the instructions it is
...
deleting, not just the basic block.
llvm-svn: 69011
2009-04-14 01:04:19 +00:00
Chris Lattner
57077413f1
eliminate unneeded parens.
...
llvm-svn: 68939
2009-04-13 05:38:23 +00:00
Chris Lattner
8ad1efdfe1
"There was a typo in my previous patch which leads to miscompilation of
...
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
2009-04-12 18:22:33 +00:00
Chris Lattner
f03202e76d
add some optimizations for strncpy/strncat and factor some
...
code. Patch by Benjamin Kramer!
llvm-svn: 68885
2009-04-12 05:06:39 +00:00
Chris Lattner
7d75f78b92
Instcombine should not promote whole computation trees to "strange"
...
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
2009-04-08 05:41:03 +00:00
Chris Lattner
2f520929d4
fix rdar://6762290, a crash compiling cxx filt with clang.
...
llvm-svn: 68500
2009-04-07 05:03:34 +00:00
Chris Lattner
e872752d66
remove empty section
...
llvm-svn: 68485
2009-04-07 02:55:53 +00:00
Ed Schouten
ff25f858fd
Let the strcat optimizer return the pointer to the start of the buffer,
...
instead of the place where it started to perform the string copy.
- PR3661
- Patch by Benjamin Kramer!
llvm-svn: 68443
2009-04-06 13:06:48 +00:00
Owen Anderson
851ce6d1d5
Reapply r68211, with the miscompilations it caused fixed.
...
llvm-svn: 68262
2009-04-01 23:53:49 +00:00
Dan Gohman
a134448980
Revert r68172. It caused regressions in
...
Applications/Burg/burg
Applications/ClamAV/clamscan
and many other tests.
llvm-svn: 68211
2009-04-01 16:37:47 +00:00
Owen Anderson
d7c837bb4b
Enhance GVN to propagate simple conditionals. This fixes PR3921.
...
llvm-svn: 68172
2009-04-01 01:20:45 +00:00
Chris Lattner
87466e0995
Make the key of ValueRankMap an AssertingVH, so that we die violently
...
if it dangles.
llvm-svn: 68150
2009-03-31 22:13:29 +00:00
Evan Cheng
c419350132
Throttle back "fold select into operand" transformation. InstCombine should 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
2009-03-31 20:42:45 +00:00
Devang Patel
7fa69ef109
Update call graph after inlining invoke.
...
Patch by Jay Foad.
llvm-svn: 68120
2009-03-31 17:36:12 +00:00
Devang Patel
ec65625744
Loop Index Split can eliminate a loop if it can determin if loop body is 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
2009-03-30 22:24:10 +00:00
Duncan Sands
e13276db7f
Revert r67798: it breaks llvm-gcc bootstrap on x86-64-linux, presumably due to
...
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
2009-03-27 14:56:47 +00:00
Dale Johannesen
9fd8bb432f
One more place to skip debug info.
...
llvm-svn: 67811
2009-03-27 01:13:37 +00:00
Devang Patel
a2211c26d7
While hoisting an instruction, update alias info set tracker.
...
llvm-svn: 67798
2009-03-26 23:48:52 +00:00
Dale Johannesen
03cedf1d8b
Skip debug info one more place. (This one gets
...
called from llc, not opt, but it's an IR level
optimization nevertheless.)
llvm-svn: 67724
2009-03-26 01:15:07 +00:00
Devang Patel
8c31ea5290
Before deleting a basic block, give other loop passes a chance cleanup analysis values, related to the instructions in the basic block.
...
llvm-svn: 67719
2009-03-25 23:57:48 +00:00
Chris Lattner
c055403764
Fix PR3874 by restoring a condition I removed, but making it more
...
precise than it used to be.
llvm-svn: 67662
2009-03-25 00:28:58 +00:00
Chris Lattner
be6ee56fb2
oops, I intended to remove this, not comment it out. Thanks Duncan!
...
llvm-svn: 67657
2009-03-24 23:48:25 +00:00
Chris Lattner
aabd3eeeff
canonicalize inttoptr and ptrtoint instructions which cast pointers
...
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
2009-03-24 18:35:40 +00:00
Chris Lattner
51a4134e1c
two changes:
...
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
2009-03-24 18:15:30 +00:00
Dale Johannesen
0f8e2bcd98
Use a SmallPtrSet instead of std::set.
...
llvm-svn: 67578
2009-03-23 23:39:20 +00:00
Dan Gohman
18daca0895
Now that errs() is properly non-buffered, there's no need to
...
explicitly flush it.
llvm-svn: 67526
2009-03-23 15:57:19 +00:00
Duncan Sands
3c115770e7
Factorize out a concept - no functionality change.
...
llvm-svn: 67454
2009-03-21 21:27:31 +00:00
Chris Lattner
623662e8e1
Fix instcombine to not introduce undefined shifts when merging two
...
shifts together. This fixes PR3851.
llvm-svn: 67411
2009-03-20 22:41:15 +00:00
Duncan Sands
926d062a48
Don't load values out of global constants with weak
...
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
2009-03-20 21:53:29 +00:00
Dale Johannesen
672ef54d0f
Clear the cached cost when removing a function in
...
the inliner; prevents nondeterministic behavior
when the same address is reallocated.
Don't build call graph nodes for debug intrinsic calls;
they're useless, and there were typically a lot of them.
llvm-svn: 67311
2009-03-19 18:03:56 +00:00
Dale Johannesen
1d76ebc9ed
Fix comment typo.
...
llvm-svn: 67307
2009-03-19 17:23:29 +00:00
Dale Johannesen
15de950459
This pass keeps a map of Instructions to Rank numbers,
...
and was deleting Instructions without clearing the
corresponding map entry. This led to nondeterministic
behavior if the same address got allocated to another
Instruction within a short time.
llvm-svn: 67306
2009-03-19 17:22:53 +00:00
Nick Lewycky
a0dcd7e173
Remove strange extra semicolons.
...
llvm-svn: 67287
2009-03-19 05:51:39 +00:00
Chris Lattner
6dce8d4135
aha, DAE does have to think about PHI nodes. Many thanks to "Dr Evil" (aka Duncan)
...
for pointing this out :)
llvm-svn: 67212
2009-03-18 16:48:45 +00:00
Chris Lattner
0542f9f1ba
Fix PR3826 - InstComb assert with vector shift, by not calling ComputeNumSignBits on a vector.
...
llvm-svn: 67211
2009-03-18 16:32:19 +00:00