Devang Patel
9249a85cdc
Use IRBuilder while folding two entry PHINode.
...
llvm-svn: 131548
2011-05-18 18:16:44 +00:00
Devang Patel
6eb1a7bd09
Set up IRBuilder for use during simplification.
...
llvm-svn: 131545
2011-05-18 18:01:27 +00:00
Matt Beaumont-Gay
7472bb0a7e
fix typo
...
llvm-svn: 131543
2011-05-18 17:37:10 +00:00
Devang Patel
a6e4c7a441
Use IRBuiler while constant folding terminator.
...
llvm-svn: 131541
2011-05-18 17:26:46 +00:00
Devang Patel
b75e746499
Preseve line numbers while simplifying CFG.
...
llvm-svn: 131508
2011-05-17 23:29:05 +00:00
Devang Patel
8a2b06e577
Preserve line number information.
...
llvm-svn: 131480
2011-05-17 19:43:06 +00:00
Devang Patel
8cf3c94ae5
There is no need to force DebugLoc on a PHI at this point.
...
llvm-svn: 131427
2011-05-16 22:05:03 +00:00
Devang Patel
9f871794b6
Preserve debug info for unused zero extended boolean argument.
...
Radar 9422775.
llvm-svn: 131422
2011-05-16 21:24:05 +00:00
Benjamin Kramer
5943d0a3ee
SimplifyCFG: Use ComputeMaskedBits to prune dead cases from switch instructions.
...
llvm-svn: 131345
2011-05-14 15:57:25 +00:00
Devang Patel
236dc68956
Set debug location for new PHI nodes created in exit block.
...
llvm-svn: 130894
2011-05-04 23:58:22 +00:00
Devang Patel
4127ad57df
Scanning entire basic block may be too expensive in terms of compile time. Instead, just use whatever location info first non-phi instruction has.
...
llvm-svn: 130729
2011-05-02 21:57:00 +00:00
Devang Patel
60fb94e8bf
Assing line number info to new PHIs created by SSA updater.
...
llvm-svn: 130551
2011-04-29 22:28:59 +00:00
Peter Collingbourne
d78bf257ad
SimplifyCFG: Expose phi node folding cost threshold as command line parameter
...
llvm-svn: 130528
2011-04-29 18:47:38 +00:00
Peter Collingbourne
0994e869f9
SimplifyCFG: Add CostRemaining parameter to DominatesMergePoint
...
llvm-svn: 130527
2011-04-29 18:47:31 +00:00
Peter Collingbourne
06646aa091
SimplifyCFG: Add Trunc, ZExt and SExt to the list of cheap instructions for phi node folding
...
llvm-svn: 130526
2011-04-29 18:47:25 +00:00
Devang Patel
5e9ca7876e
Remove DbgDeclare only if all uses are converted.
...
llvm-svn: 130431
2011-04-28 20:32:02 +00:00
Jay Foad
c146569beb
Remove unused STL header includes.
...
llvm-svn: 130068
2011-04-23 19:53:52 +00:00
Jay Foad
32fce4d563
PR9214: Convert Metadata API to use ArrayRef.
...
llvm-svn: 129932
2011-04-21 19:59:31 +00:00
Jay Foad
0dcd432074
Trivial simplification.
...
llvm-svn: 129759
2011-04-19 15:23:29 +00:00
Chris Lattner
0304b82f80
Fix a ton of comment typos found by codespell. Patch by
...
Luis Felipe Strano Moraes!
llvm-svn: 129558
2011-04-15 05:18:47 +00:00
Chris Lattner
88e2acc24c
rework FoldBranchToCommonDest to exit earlier when there is a bonus
...
instruction around, reducing work.
Greatly simplify handling of debug instructions. There is no need to
build up a vector of them and then move them into the one predecessor
if we're processing a block. Instead just rescan the block and *copy*
them into the pred. If a block gets merged into multiple preds, this
will retain more debug info.
llvm-svn: 129502
2011-04-14 02:44:53 +00:00
Chris Lattner
2871dd44cb
comment cleanup, use moveBefore instead of removeFromParent+insertBefore.
...
llvm-svn: 129319
2011-04-11 23:24:57 +00:00
Jay Foad
0d5ca4cf44
Don't include Operator.h from InstrTypes.h.
...
llvm-svn: 129271
2011-04-11 09:35:34 +00:00
Devang Patel
47e1db49c9
Do not let debug info interfer with branch folding.
...
llvm-svn: 129114
2011-04-07 23:11:25 +00:00
Devang Patel
17670a995c
While hoisting common code from if/else, hoist debug info intrinsics if they match.
...
llvm-svn: 129078
2011-04-07 17:27:36 +00:00
Devang Patel
bb234bb5dd
Simplify. isIdenticalToWhenDefined() checks opcode.
...
llvm-svn: 129041
2011-04-07 00:30:15 +00:00
Devang Patel
12a95842b2
While folding branch to a common destination into a predecessor, copy dbg values also.
...
llvm-svn: 129035
2011-04-06 22:37:20 +00:00
Eli Friedman
f739e21880
Attempt to fix breakage from r128782 reported by Francois Pichet on
...
llvm-commits. (Not sure why it only breaks on Windows; maybe it has
something to do with the iterator representation...)
llvm-svn: 128802
2011-04-04 00:37:38 +00:00
Eli Friedman
8b6d220330
PR9446: RecursivelyDeleteTriviallyDeadInstructions can delete the instruction
...
after the given instruction; make sure to handle that case correctly.
(It's difficult to trigger; the included testcase involves a dead
block, but I don't think that's a requirement.)
While I'm here, get rid of the unnecessary warning about
SimplifyInstructionsInBlock, since it should work correctly as far as I know.
llvm-svn: 128782
2011-04-02 22:45:17 +00:00
Jay Foad
53632b7c03
Remove PHINode::reserveOperandSpace(). Instead, add a parameter to
...
PHINode::Create() giving the (known or expected) number of operands.
llvm-svn: 128537
2011-03-30 11:28:46 +00:00
Jay Foad
dc5a008237
(Almost) always call reserveOperandSpace() on newly created PHINodes.
...
llvm-svn: 128535
2011-03-30 11:19:20 +00:00
Devang Patel
05641a9b85
Simplify.
...
llvm-svn: 128030
2011-03-21 22:04:45 +00:00
Devang Patel
c8b77563dc
If an AllocaInst referred by DbgDeclareInst is used by a LoadInst then the LoadInst should also get a corresponding llvm.dbg.value intrinsic.
...
llvm-svn: 127924
2011-03-18 23:45:43 +00:00
Devang Patel
a5de669faa
Remove dead code.
...
llvm-svn: 127923
2011-03-18 23:33:58 +00:00
Devang Patel
bafc4fec54
Consider debug info intrinsics pointing to null value as dead instructions.
...
llvm-svn: 127922
2011-03-18 23:28:02 +00:00
Devang Patel
f8c3eb7368
Try to not lose variable's debug info during instcombine.
...
This is done by lowering dbg.declare intrinsic into dbg.value intrinsic.
Radar 9143931.
llvm-svn: 127834
2011-03-17 22:18:16 +00:00
Devang Patel
3506f02e33
Refactor into a separate utility function.
...
llvm-svn: 127832
2011-03-17 21:58:19 +00:00
Cameron Zwarich
333ed540e7
Clean up something noticed by Fritz.
...
llvm-svn: 127684
2011-03-15 18:42:33 +00:00
Cameron Zwarich
7947e73536
Do not add PHIs with no users when creating LCSSA form. Patch by Andrew Clinton.
...
llvm-svn: 127674
2011-03-15 07:41:25 +00:00
Eli Friedman
c0bfbd0610
PR9450: Make switch optimization in SimplifyCFG not dependent on the ordering
...
of pointers in an std::map.
llvm-svn: 127650
2011-03-15 02:23:35 +00:00
Eli Friedman
d1e9ff0d6c
PR9420; an instruction before an unreachable is guaranteed not to have any
...
reachable uses, but there still might be uses in dead blocks. Use the
standard solution of replacing all the uses with undef. This is
a rare case because it's very sensitive to phase ordering in SimplifyCFG.
llvm-svn: 127299
2011-03-09 00:48:33 +00:00
Jakob Stoklund Olesen
c7bf5eaafb
DenseMap<uintptr_t,...> doesn't allow all values as keys.
...
Avoid colliding with the sentinels, hopefully unbreaking
llvm-gcc-x86_64-linux-selfhost.
llvm-svn: 126982
2011-03-04 02:48:56 +00:00
Frits van Bommel
4a2b658705
Teach SimplifyCFG that (switch (select cond, X, Y)) is better expressed as a branch.
...
Based on a patch by Alistair Lynn.
llvm-svn: 126647
2011-02-28 09:44:07 +00:00
Benjamin Kramer
39a5d8596c
Revert "SimplifyCFG: GEPs with just one non-constant index are also cheap."
...
Yes, there are other types than i8* and GEPs on them can produce an add+multiply.
We don't consider that cheap enough to be speculatively executed.
llvm-svn: 126481
2011-02-25 10:33:33 +00:00
Benjamin Kramer
44b43a85db
SimplifyCFG: GEPs with just one non-constant index are also cheap.
...
llvm-svn: 126452
2011-02-24 23:26:09 +00:00
Benjamin Kramer
b5996b08b7
SimplifyCFG: GEPs with constant indices are cheap enough to be executed unconditionally.
...
llvm-svn: 126445
2011-02-24 22:46:11 +00:00
Devang Patel
29b946c0bd
Do not use DIFactory. Use DIBuilder.
...
llvm-svn: 126398
2011-02-24 18:49:55 +00:00
Duncan Sands
17a277da6d
If the phi node was used by an unreachable instruction that ends up using
...
itself without going via a phi node then we could return false here in
spite of making a change. Also, tweak the comment because this method
can (and always could) return true without deleting the original phi node.
For example, if the phi node was used by a read-only invoke instruction
which is used by another phi node phi2 which is only used by and only uses
the invoke, then phi2 would be deleted but not the invoke instruction and
not the original phi node.
llvm-svn: 126129
2011-02-21 17:32:05 +00:00
Duncan Sands
702e8b136e
Simplify RecursivelyDeleteDeadPHINode. The only functionality change
...
should be that if the phi is used by a side-effect free instruction with
no uses then the phi and the instruction now get zapped (checked by the
unittest).
llvm-svn: 126124
2011-02-21 16:27:36 +00:00
Nick Lewycky
ecae3aec02
Make RecursivelyDeleteDeadPHINode delete a phi node that has no users and add a
...
test for that. With this change, test/CodeGen/X86/codegen-dce.ll no longer finds
any instructions to DCE, so delete the test.
Also renamed J and JP to I and IP in RecursivelyDeleteDeadPHINode.
llvm-svn: 126088
2011-02-20 18:05:56 +00:00