Eric Christopher
2cdb806fd8
Move the object size intrinsic optimization to inst-combine and make
...
it work for any integer size return type.
llvm-svn: 92853
2010-01-06 20:04:44 +00:00
Duncan Sands
c8493da5b1
Fix a README item: have functionattrs look through selects and
...
phi nodes when deciding which pointers point to local memory.
I actually checked long ago how useful this is, and it isn't
very: it hardly ever fires in the testsuite, but since Chris
wants it here it is!
llvm-svn: 92836
2010-01-06 15:37:47 +00:00
Mikhail Glushenkov
40d2429b28
Formatting.
...
llvm-svn: 92831
2010-01-06 09:20:39 +00:00
Duncan Sands
78376ad7e1
Partially address a README by having functionattrs consider calls to
...
memcpy, memset and other intrinsics that only access their arguments
to be readnone if the intrinsic's arguments all point to local memory.
This improves the testcase in the README to readonly, but it could in
theory be made readnone, however this would involve more sophisticated
analysis that looks through the memcpy.
llvm-svn: 92829
2010-01-06 08:45:52 +00:00
Chris Lattner
4339f2abdb
tweaks suggested by Duncan
...
llvm-svn: 92824
2010-01-06 05:32:15 +00:00
Chris Lattner
98748c0964
Teach instcombine's sext elimination logic to be more aggressive.
...
Previously, instcombine would only promote an expression tree to
the larger type if doing so eliminated two casts. This is because
a need to manually do the sign extend after the promoted expression
tree with two shifts. Now, we keep track of whether the result of
the computation is going to be properly sign extended already. If
so, we can unconditionally promote the expression, which allows us
to zap more sext's.
This implements rdar://6598839 (aka gcc pr38751)
llvm-svn: 92815
2010-01-06 01:56:21 +00:00
Chris Lattner
8600dd3d7c
simplify this code.
...
llvm-svn: 92800
2010-01-05 23:00:30 +00:00
Chris Lattner
554d0564ff
make this a static function instead of a method.
...
llvm-svn: 92795
2010-01-05 22:30:42 +00:00
Chris Lattner
a93c63c22d
more rearrangement and cleanup, fix my test failure.
...
llvm-svn: 92792
2010-01-05 22:21:18 +00:00
Chris Lattner
f476ef502c
cleanup
...
llvm-svn: 92790
2010-01-05 22:07:33 +00:00
Chris Lattner
f88dd5ed64
remove two trunc xforms that are subsumed by EvaluateInDifferentType.
...
The only difference is that EvaluateInDifferentType checks to ensure
they are profitable before doing them :)
llvm-svn: 92788
2010-01-05 22:01:41 +00:00
Chris Lattner
44a63815b9
just remove this xform which is subsumed by others.
...
llvm-svn: 92775
2010-01-05 21:16:30 +00:00
Chris Lattner
b82a840eb2
move a trunc-specific transform out of commonIntCastTransforms into visitTrunc.
...
llvm-svn: 92773
2010-01-05 21:11:17 +00:00
Benjamin Kramer
d2564e3afb
Move remaining stuff to the isInteger predicate.
...
llvm-svn: 92771
2010-01-05 21:05:54 +00:00
Chris Lattner
fd7e42b65d
move a zext specific xform out of commonIntCastTransforms into visitZExt and modernize it.
...
llvm-svn: 92770
2010-01-05 21:04:47 +00:00
Chris Lattner
aaccc8de62
move a trunc-specific xform out of commonIntCastTransforms into visitTrunc
...
llvm-svn: 92768
2010-01-05 20:57:30 +00:00
Chris Lattner
dec6847bf6
reduce indentation
...
llvm-svn: 92766
2010-01-05 20:56:24 +00:00
Benjamin Kramer
a81a6dff0d
Convert a ton of simple integer type equality tests to the new predicate.
...
llvm-svn: 92760
2010-01-05 20:07:06 +00:00
Chris Lattner
54f4e39956
optimize comparisons against cttz/ctlz/ctpop, patch by Alastair Lynn!
...
llvm-svn: 92745
2010-01-05 18:09:56 +00:00
Dan Gohman
c3c031bb37
Nick Lewycky pointed out that this code makes changes unconditionally.
...
llvm-svn: 92739
2010-01-05 17:50:58 +00:00
Dan Gohman
b5358003fb
Set Changed properly after calling DeleteDeadPHIs.
...
llvm-svn: 92735
2010-01-05 16:31:45 +00:00
Dan Gohman
28943873e6
Use do+while instead of while for loops which obviously have a
...
non-zero trip count. Use SmallVector's pop_back_val().
llvm-svn: 92734
2010-01-05 16:27:25 +00:00
Dan Gohman
92fdb96474
Fix indentation.
...
llvm-svn: 92733
2010-01-05 16:20:55 +00:00
Dan Gohman
cb99fe9839
Make RecursivelyDeleteTriviallyDeadInstructions,
...
RecursivelyDeleteDeadPHINode, and DeleteDeadPHIs return a flag
indicating whether they made any changes.
llvm-svn: 92732
2010-01-05 15:45:31 +00:00
Benjamin Kramer
f7cc698b69
Add newline at EOF.
...
llvm-svn: 92727
2010-01-05 13:32:48 +00:00
Benjamin Kramer
ccce8bae14
Avoid going through the LLVMContext for type equality where it's safe to dereference the type pointer.
...
llvm-svn: 92726
2010-01-05 13:12:22 +00:00
Chris Lattner
223812d547
prune some #includes.
...
llvm-svn: 92712
2010-01-05 07:54:43 +00:00
Chris Lattner
0a8191ee88
split and/or/xor out into one overly-large (2000LOC) file. However, I think
...
it does make sense to keep them together, at least for now.
llvm-svn: 92711
2010-01-05 07:50:36 +00:00
Chris Lattner
ed41b14f54
missed file with previous commit.
...
llvm-svn: 92710
2010-01-05 07:45:02 +00:00
Chris Lattner
dc67e13442
split instcombine of shifts out to its own file.
...
llvm-svn: 92709
2010-01-05 07:44:46 +00:00
Chris Lattner
e903f38b4d
eliminate getBitCastOperand and simplify some over-complex inbounds stuff.
...
llvm-svn: 92708
2010-01-05 07:42:10 +00:00
Chris Lattner
7a9e47ac4b
split call handling out to InstCombineCalls.cpp
...
llvm-svn: 92707
2010-01-05 07:32:13 +00:00
Chris Lattner
9da1cb243b
optimize cttz and ctlz when we can prove something about the
...
leading/trailing bits. Patch by Alastair Lynn!
llvm-svn: 92706
2010-01-05 07:23:56 +00:00
Chris Lattner
85e65e58ac
this inline function moved to addsub
...
llvm-svn: 92705
2010-01-05 07:20:54 +00:00
Chris Lattner
82aa888e8c
split add/sub out to its own file. Eliminate use of
...
dyn_castNotVal in the X+~X transform. dyn_castNotVal is
dramatic overkill for what the xform needed.
llvm-svn: 92704
2010-01-05 07:18:46 +00:00
Chris Lattner
c7de92ae15
all the places we use hasOneUse() we know are instructions, so inline
...
and simplify.
llvm-svn: 92700
2010-01-05 07:04:23 +00:00
Chris Lattner
c6493f070e
eliminate AssociativeOpt and its last uses.
...
llvm-svn: 92697
2010-01-05 07:01:16 +00:00
Chris Lattner
94694c7f0b
inline the FoldICmpLogical functor.
...
llvm-svn: 92695
2010-01-05 06:59:49 +00:00
Chris Lattner
98d48a0b76
inline the 'AddRHS' transformation, simplifying things significantly.
...
Eliminate the 'AddMaskingAnd' transformation, it is redundant with this
more general code right below it:
// A+B --> A|B iff A and B have no bits set in common.
llvm-svn: 92693
2010-01-05 06:29:13 +00:00
Chris Lattner
39b063bf37
remove massive over-genality manifested as a big template
...
that got instantiated. There is no reason for instcombine
to try this hard for simple associative optimizations. Next
up, eliminate the template completely.
llvm-svn: 92692
2010-01-05 06:24:06 +00:00
Chris Lattner
dc054bf39a
split mul/div/rem instructions out to their own file.
...
llvm-svn: 92689
2010-01-05 06:09:35 +00:00
Chris Lattner
1e7b7b50b1
clean up header.
...
llvm-svn: 92688
2010-01-05 06:05:07 +00:00
Chris Lattner
8f771cb78f
split select out to its own file.
...
llvm-svn: 92687
2010-01-05 06:03:12 +00:00
Chris Lattner
a65e2f7304
split out load/store/alloca.
...
llvm-svn: 92685
2010-01-05 05:57:49 +00:00
Chris Lattner
841af4f03d
reduce indentation
...
llvm-svn: 92684
2010-01-05 05:42:08 +00:00
Chris Lattner
ec97a90221
split vector stuff out to InstCombineVectorOps.cpp
...
llvm-svn: 92683
2010-01-05 05:36:20 +00:00
Chris Lattner
de1feded32
split PHI node stuff out to InstCombinePHI.cpp
...
llvm-svn: 92682
2010-01-05 05:31:55 +00:00
Chris Lattner
27acfcd1c4
convert various IntrinsicInst's to use class instead of struct.
...
llvm-svn: 92681
2010-01-05 05:21:26 +00:00
Chris Lattner
f741d72b84
fix an infinite loop in reassociate building emacs.
...
llvm-svn: 92679
2010-01-05 04:55:35 +00:00
David Greene
cf0addf927
Change errs() to dbgs().
...
llvm-svn: 92639
2010-01-05 01:28:37 +00:00
David Greene
6ef94ad615
Change errs() to dbgs().
...
llvm-svn: 92636
2010-01-05 01:28:29 +00:00
David Greene
74e8bd05cc
Change errs() to dbgs().
...
llvm-svn: 92633
2010-01-05 01:28:12 +00:00
David Greene
9fcfd96da9
Change errs() to dbgs().
...
llvm-svn: 92631
2010-01-05 01:28:07 +00:00
David Greene
44cb8ade45
Change errs() to dbgs().
...
llvm-svn: 92629
2010-01-05 01:28:05 +00:00
David Greene
8306b60d56
Change errs() to dbgs().
...
llvm-svn: 92627
2010-01-05 01:27:54 +00:00
David Greene
0122fc495d
Change errs() to dbgs().
...
llvm-svn: 92625
2010-01-05 01:27:51 +00:00
David Greene
241992382e
Change errs() to dbgs().
...
llvm-svn: 92624
2010-01-05 01:27:47 +00:00
David Greene
e0b9789593
Change errs() to dbgs().
...
llvm-svn: 92623
2010-01-05 01:27:44 +00:00
David Greene
6bc0776343
Change errs() to dbgs().
...
llvm-svn: 92622
2010-01-05 01:27:39 +00:00
David Greene
3a79df0993
Change errs() to dbgs().
...
llvm-svn: 92620
2010-01-05 01:27:33 +00:00
David Greene
0fd862254e
Change errs() to dbgs().
...
llvm-svn: 92619
2010-01-05 01:27:30 +00:00
David Greene
d17c3916d0
Change errs() to dbgs().
...
llvm-svn: 92617
2010-01-05 01:27:24 +00:00
David Greene
9ddc6e2e12
Change errs() to dbgs().
...
llvm-svn: 92615
2010-01-05 01:27:21 +00:00
David Greene
1efdb45562
Change errs() to dbgs().
...
llvm-svn: 92614
2010-01-05 01:27:19 +00:00
David Greene
2e6efc441f
Change errs() to dbgs().
...
llvm-svn: 92613
2010-01-05 01:27:17 +00:00
David Greene
389fc3b9f6
Change errs() to dbgs().
...
llvm-svn: 92612
2010-01-05 01:27:15 +00:00
David Greene
74e2d4917d
Change errs() to dbgs().
...
llvm-svn: 92611
2010-01-05 01:27:11 +00:00
David Greene
48c86bedbd
Change errs() to dbgs().
...
llvm-svn: 92610
2010-01-05 01:27:09 +00:00
David Greene
0dd384cfd0
Change errs() to dbgs().
...
llvm-svn: 92609
2010-01-05 01:27:06 +00:00
David Greene
d9c355d590
Change errs() to dbgs().
...
llvm-svn: 92608
2010-01-05 01:27:04 +00:00
David Greene
b72ad95ecf
Change errs() to dbgs().
...
llvm-svn: 92607
2010-01-05 01:27:01 +00:00
David Greene
084b0dde9d
Change errs() to dbgs().
...
llvm-svn: 92606
2010-01-05 01:26:57 +00:00
David Greene
76a4e852f8
Change errs() to dbgs().
...
llvm-svn: 92605
2010-01-05 01:26:54 +00:00
David Greene
725c7c3f2e
Change errs() to dbgs().
...
llvm-svn: 92604
2010-01-05 01:26:52 +00:00
David Greene
3774a38fdf
Change errs() to dbgs().
...
llvm-svn: 92603
2010-01-05 01:26:49 +00:00
David Greene
50c54238e4
Change errs() to dbgs().
...
llvm-svn: 92602
2010-01-05 01:26:45 +00:00
David Greene
0ad6dce031
Change errs() to dbgs().
...
llvm-svn: 92601
2010-01-05 01:26:44 +00:00
David Greene
627f40a9f2
Change errs() to dbgs().
...
llvm-svn: 92600
2010-01-05 01:26:41 +00:00
David Greene
a8a32dd987
Change errs() to dbgs().
...
llvm-svn: 92599
2010-01-05 01:26:39 +00:00
Devang Patel
be94f23992
Remove dead debug info intrinsics.
...
Intrinsic::dbg_stoppoint
Intrinsic::dbg_region_start
Intrinsic::dbg_region_end
Intrinsic::dbg_func_start
AutoUpgrade simply ignores these intrinsics now.
llvm-svn: 92557
2010-01-05 01:10:40 +00:00
Daniel Dunbar
72a87448c1
Fix some struct/class specifier mismatches.
...
llvm-svn: 92550
2010-01-05 00:15:58 +00:00
Chris Lattner
a751d09c08
Truncate GEP indexes larger than the pointer size down to pointer size
...
when doing this transform if the GEP is not inbounds. No testcase because
it is very difficult to trigger this: instcombine already canonicalizes
GEP indices to pointer size, so it relies specific permutations of the
instcombine worklist.
Thanks to Duncan for pointing this possible problem out.
llvm-svn: 92495
2010-01-04 18:57:15 +00:00
Chris Lattner
2cb08e69b1
silence a bogus 'might be used uninit' warning from GCC.
...
llvm-svn: 92494
2010-01-04 18:48:26 +00:00
Chris Lattner
59d95743c8
move some more cast-related stuff
...
llvm-svn: 92471
2010-01-04 07:59:07 +00:00
Mikhail Glushenkov
6a8ac8ce8f
80-col violations, trailing whitespace.
...
llvm-svn: 92470
2010-01-04 07:55:25 +00:00
Chris Lattner
92be2adba6
move the [Can]EvaluateInDifferentType functions out to InstCombineCasts.cpp
...
llvm-svn: 92469
2010-01-04 07:54:59 +00:00
Chris Lattner
2b295a0eba
split 943 lines of instcombine out to a new InstCombineCasts.cpp
...
file. InstructionCombining.cpp is now down to a svelte 9300 lines :)
llvm-svn: 92468
2010-01-04 07:53:58 +00:00
Chris Lattner
2188e40e4c
split instcombine of compares (visit[FI]Cmp) out to
...
a new InstCombineCompares.cpp file.
llvm-svn: 92467
2010-01-04 07:37:31 +00:00
Chris Lattner
6ea40f1542
update cmakefile
...
llvm-svn: 92466
2010-01-04 07:19:55 +00:00
Chris Lattner
7e0449172c
move the 'SimplifyDemandedFoo' methods out to their own file, cutting 1K lines out of instcombine.cpp
...
llvm-svn: 92465
2010-01-04 07:17:19 +00:00
Chris Lattner
35522b7465
split the instcombine class definition out to a header shared
...
among the instcombine library.
llvm-svn: 92463
2010-01-04 07:12:23 +00:00
Chris Lattner
b8906bda13
remove a ton of unneeded LLVMContext stuff.
...
llvm-svn: 92462
2010-01-04 07:02:48 +00:00
Chris Lattner
66c2e54bcd
move InstCombineWorklist out to its own header.
...
llvm-svn: 92461
2010-01-04 06:30:00 +00:00
Chris Lattner
e2b9da98b0
forgot to svn add these.
...
llvm-svn: 92460
2010-01-04 06:28:20 +00:00
Chris Lattner
c0e6640d3a
move instcombine to its own library, it's past time.
...
llvm-svn: 92459
2010-01-04 06:23:24 +00:00
Chris Lattner
2d91231d82
implement an instcombine xform needed by clang's codegen
...
on the example in PR4216. This doesn't trigger in the testsuite,
so I'd really appreciate someone scrutinizing the logic for
correctness.
llvm-svn: 92458
2010-01-04 06:03:59 +00:00
Chris Lattner
48218e42cd
pull my debug hooks out, I'm done with this xform for now.
...
llvm-svn: 92446
2010-01-03 06:58:48 +00:00
Nick Lewycky
475d3d1215
Small cleanups, refactor some duplicated code into a single method. No
...
functionality change.
llvm-svn: 92445
2010-01-03 04:39:07 +00:00
Chris Lattner
fca0c8f93a
generalize the previous transformation to handle indexing into
...
arrays of structs and other arrays, so long as all the subsequent
indexes are constants. This triggers frequently for stuff like:
@divisions = internal constant [29 x [2 x i32]] [[2 x i32] zeroinitializer, [2 x i32] [i32 0, i32 1], [2 x i32] [i32 0, i32 2], [2 x i32] [i32 0, i32 1], [2 x i32] zeroinitializer, [2 x i32] [i32 0, i32 1], [2 x i32] [i32 0, i32 1], [2 x i32] [i32 0, i32 2], [2 x i32] [i32 0, i32 2], [2 x i32] zeroinitializer, [2 x i32] zeroinitializer, [2 x i32] zeroinitializer, [2 x i32] [i32 0, i32 2], [2 x i32] [i32 0, i32 1], [2 x i32] zeroinitializer, [2 x i32] [i32 1, i32 0], [2 x i32] [i32 1, i32 1], [2 x i32] [i32 1, i32 1], [2 x i32] [i32 1, i32 2], [2 x i32] [i32 1, i32 1], [2 x i32] [i32 1, i32 0], [2 x i32] [i32 1, i32 2], [2 x i32] [i32 1, i32 2], [2 x i32] [i32 1, i32 0], [2 x i32] [i32 1, i32 0], [2 x i32] [i32 1, i32 0], [2 x i32] [i32 1, i32 1], [2 x i32] [i32 1, i32 2], [2 x i32] [i32 1, i32 2]], align 32 ; <[29 x [2 x i32]]*> [#uses=50]
%623 = getelementptr inbounds [29 x [2 x i32]]* @divisions, i64 0, i64 %619, i64 0 ; <i32*> [#uses=1]
%684 = icmp eq i32 %683, 999
also for the "my_defs" table in 'gs', etc.
llvm-svn: 92444
2010-01-03 03:03:27 +00:00
Nick Lewycky
ff9cd7ace7
Cleanup.
...
llvm-svn: 92436
2010-01-03 00:55:31 +00:00