Jay Foad
5514afe6b2
PR9214: Convert Metadata API to use ArrayRef.
...
llvm-svn: 129932
2011-04-21 19:59:31 +00:00
Jay Foad
6a85be25a4
Trivial simplification.
...
llvm-svn: 129759
2011-04-19 15:23:29 +00:00
Chris Lattner
0ab5e2cded
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
fba5cdfce1
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
7d4cdae564
comment cleanup, use moveBefore instead of removeFromParent+insertBefore.
...
llvm-svn: 129319
2011-04-11 23:24:57 +00:00
Jay Foad
7c14a558fe
Don't include Operator.h from InstrTypes.h.
...
llvm-svn: 129271
2011-04-11 09:35:34 +00:00
Devang Patel
bc3d8b212f
Do not let debug info interfer with branch folding.
...
llvm-svn: 129114
2011-04-07 23:11:25 +00:00
Devang Patel
197c35298a
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
e48ddf863b
Simplify. isIdenticalToWhenDefined() checks opcode.
...
llvm-svn: 129041
2011-04-07 00:30:15 +00:00
Devang Patel
d715ec82b4
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
b85c0caf7d
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
17bf4922c9
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
52131344a2
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
e0938d8a87
(Almost) always call reserveOperandSpace() on newly created PHINodes.
...
llvm-svn: 128535
2011-03-30 11:19:20 +00:00
Devang Patel
17bbd7f495
Simplify.
...
llvm-svn: 128030
2011-03-21 22:04:45 +00:00
Devang Patel
2c7ee2700c
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
3ac171d49a
Remove dead code.
...
llvm-svn: 127923
2011-03-18 23:33:58 +00:00
Devang Patel
c1431e6e84
Consider debug info intrinsics pointing to null value as dead instructions.
...
llvm-svn: 127922
2011-03-18 23:28:02 +00:00
Devang Patel
aad34d882d
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
8c0b16b0aa
Refactor into a separate utility function.
...
llvm-svn: 127832
2011-03-17 21:58:19 +00:00
Cameron Zwarich
dbb27393cc
Clean up something noticed by Fritz.
...
llvm-svn: 127684
2011-03-15 18:42:33 +00:00
Cameron Zwarich
0b8cdfb6ec
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
c4414c6e92
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
aac35b3fbb
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
e2017b6f2e
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
8ae07996c9
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
ceb5daa567
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
dfdca1a14d
SimplifyCFG: GEPs with just one non-constant index are also cheap.
...
llvm-svn: 126452
2011-02-24 23:26:09 +00:00
Benjamin Kramer
27361a7124
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
cedf928743
Do not use DIFactory. Use DIBuilder.
...
llvm-svn: 126398
2011-02-24 18:49:55 +00:00
Duncan Sands
ecbbf0825b
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
6dcd49bc2b
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
183c24c51b
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
Nick Lewycky
c8a1569950
Teach RecursivelyDeleteDeadPHINodes to handle multiple self-references. Patch
...
by Andrew Clinton!
llvm-svn: 126077
2011-02-20 08:38:20 +00:00
Chris Lattner
4a14fbc50c
Don't unroll loops whose header block's address is taken.
...
This is part of a futile attempt to not "break" bizzaro
code like this:
l1:
printf("l1: %p\n", &&l1);
++x;
if( x < 3 ) goto l1;
Previously we'd fold &&l1 to 1, which is fine per our semantics
but not helpful to the user.
llvm-svn: 125827
2011-02-18 04:25:21 +00:00
Cameron Zwarich
d8e66038f4
Rename 'loopsimplify' to 'loop-simplify'.
...
llvm-svn: 125317
2011-02-10 23:38:10 +00:00
Benjamin Kramer
8d6a8c130b
SimplifyCFG: Track the number of used icmps when turning a icmp chain into a switch. If we used only one icmp, don't turn it into a switch.
...
Also prevent the switch-to-icmp transform from creating identity adds, noticed by Marius Wachtler.
llvm-svn: 125056
2011-02-07 22:37:28 +00:00
Benjamin Kramer
62aa46b852
SimplifyCFG: Also transform switches that represent a range comparison but are not sorted into sub+icmp.
...
This transforms another 1000 switches in gcc.c.
llvm-svn: 124826
2011-02-03 22:51:41 +00:00
Benjamin Kramer
f4ea1d5f79
SimplifyCFG: Turn switches into sub+icmp+branch if possible.
...
This makes the job of the later optzn passes easier, allowing the vast amount of
icmp transforms to chew on it.
We transform 840 switches in gcc.c, leading to a 16k byte shrink of the resulting
binary on i386-linux.
The testcase from README.txt now compiles into
decl %edi
cmpl $3, %edi
sbbl %eax, %eax
andl $1, %eax
ret
llvm-svn: 124724
2011-02-02 15:56:22 +00:00
Evan Cheng
d983eba7dc
Re-apply r124518 with fix. Watch out for invalidated iterator.
...
llvm-svn: 124526
2011-01-29 04:46:23 +00:00
Evan Cheng
65b8ccf6ac
Revert r124518. It broke Linux self-host.
...
llvm-svn: 124522
2011-01-29 02:43:04 +00:00
Evan Cheng
d4eff31476
Re-commit r124462 with fixes. Tail recursion elim will now dup ret into unconditional predecessor to enable TCE on demand.
...
llvm-svn: 124518
2011-01-29 01:29:26 +00:00
Evan Cheng
aaa9606b2f
Revert r124462. There are a few big regressions that I need to fix first.
...
llvm-svn: 124478
2011-01-28 07:12:38 +00:00
Evan Cheng
417fca86c4
- Stop simplifycfg from duplicating "ret" instructions into unconditional
...
branches. PR8575, rdar://5134905, rdar://8911460.
- Allow codegen tail duplication to dup small return blocks after register
allocation is done.
llvm-svn: 124462
2011-01-28 02:19:21 +00:00
Chris Lattner
b4017769ae
fix PR9017, a bug where we'd assert when promoting in unreachable
...
code.
llvm-svn: 124100
2011-01-24 03:29:07 +00:00
Chris Lattner
23289c385a
fix PR9015, a crash linking recursive metadata.
...
llvm-svn: 124099
2011-01-24 03:18:24 +00:00
Cameron Zwarich
07d6fe34b3
Convert two std::vectors to SmallVectors for a 3.4% speedup running -scalarrepl
...
on test-suite + SPEC2000 & SPEC2006.
llvm-svn: 124068
2011-01-23 08:03:04 +00:00
Cameron Zwarich
fc210c79b7
Convert a std::map to a DenseMap for another 1.7% speedup on -scalarrepl.
...
llvm-svn: 123732
2011-01-18 04:50:38 +00:00
Cameron Zwarich
6968c41ac8
Make a std::vector a SmallVector<*, 32> like the other vectors in the same
...
function. This seems to be about a 1.5% speedup of -scalarrepl on test-suite
with SPEC2000 and SPEC2006.
llvm-svn: 123731
2011-01-18 04:41:32 +00:00
Cameron Zwarich
b703654edc
Remove code for updating dominance frontiers and some outdated references to
...
dominance and post-dominance frontiers.
llvm-svn: 123725
2011-01-18 04:11:31 +00:00