Dan Gohman
6595635175
Introduce new SelectionDAG node opcodes VEXTRACT_SUBVECTOR and
...
VCONCAT_VECTORS. Use these for CopyToReg and CopyFromReg legalizing in
the case that the full register is to be split into subvectors instead
of scalars. This replaces uses of VBIT_CONVERT to present values as
vector-of-vector types in order to make whole subvectors accessible via
BUILD_VECTOR and EXTRACT_VECTOR_ELT.
This is in preparation for adding extended ValueType values, where
having vector-of-vector types is undesirable.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37569 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-13 15:12:02 +00:00
Dan Gohman
2046e12f02
When creating CopyFromReg nodes, always use legal types. And use the
...
correct types for the result vector, even though it is currently bitcasted
to a different type immediately.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37568 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-13 14:55:16 +00:00
Duncan Sands
f19f6bb31e
The fix that was applied for PR1224 stops the compiler
...
crashing but breaks exception handling. The problem
described in PR1224 is that invoke is a terminator that
can produce a value. The value may be needed in other
blocks. The code that writes to registers values needed
in other blocks runs before terminators are lowered (in
this case invoke) so asserted because the value was not
yet available. The fix that was applied was to do invoke
lowering earlier, before writing values to registers.
The problem this causes is that the code to copy values
to registers can be output after the invoke call. If
an exception is raised and control is passed to the
landing pad then this copy-code will never execute. If
the value is needed in some code path reached via the
landing pad then that code will get something bogus.
So revert the original fix and simply skip invoke values
in the general copying to registers code. Instead copy
the invoke value to a register in the invoke lowering code.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37567 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-13 05:51:31 +00:00
Evan Cheng
93a8e5ea0c
Typo
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37566 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-13 00:04:00 +00:00
Evan Cheng
cc8fb46cdc
Now if-converting all 4 variants of triangles.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37565 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-12 23:54:05 +00:00
Lauro Ramos Venancio
976e2da081
Fix a typo in bswap lowering.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37544 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-11 23:16:16 +00:00
Evan Cheng
9618bcaf7d
Restructure code to reduce ifcvt compile time cost.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37543 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-11 22:26:22 +00:00
Reid Spencer
a9bf49c7e3
Fix the build.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37537 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-10 00:19:17 +00:00
Evan Cheng
1c9f91d7b2
Don't change CFG during analysis stage. Do so during ifcvt and invalidate predecessors accordingly.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37531 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-09 01:03:43 +00:00
Evan Cheng
7e75ba802e
Carefully remove extraneous CFG edges after each ifcvt.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37529 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-08 22:01:07 +00:00
Evan Cheng
2acdbcccd8
Correct transfer predicate information.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37524 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-08 19:17:12 +00:00
Evan Cheng
edf4896a14
Hidden options to help debugging ifcvt issues.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37523 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-08 19:10:51 +00:00
David Greene
2513330de8
Factor live variable analysis so it does not do register coalescing
...
simultaneously. Move that pass to SimpleRegisterCoalescing.
This makes it easier to implement alternative register allocation and
coalescing strategies while maintaining reuse of the existing live
interval analysis.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37520 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-08 17:18:56 +00:00
Evan Cheng
ac5f142b9f
Allow more cmp / bcc to be predicated; clean up triangle ifcvt checking code.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37518 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-08 09:36:04 +00:00
Duncan Sands
6cc7608213
Use more realistically sized vectors. Reserve capacity if we know in advance
...
how much will be used.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37515 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-08 08:59:11 +00:00
Dale Johannesen
1a90a5aebe
Make throttle a hidden parameter, per review.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37511 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-08 01:08:52 +00:00
Dale Johannesen
53af4c01a8
Throttle tail merging; handling blocks with large numbers of predecessors
...
is too slow.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37509 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-08 00:34:27 +00:00
Evan Cheng
27af5c414b
Only remove the edge from entry to false if false block is merged.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37503 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-07 22:31:28 +00:00
Dale Johannesen
62000eee7d
Do not change the size of function arguments. PR 1489.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37496 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-07 21:07:15 +00:00
Evan Cheng
f476961ae6
ifcvt a triangle: don't merge ifcvt block with rejoin block if it can fall through to it. If merged, the resulting block is not a candidate for iterative ifcvting since it contains both predicated and non-predicated code.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37487 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-07 08:13:00 +00:00
Evan Cheng
d4de6d91b2
Lots of bug fixes. Now finally in a reasonable state.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37485 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-07 02:12:15 +00:00
Owen Anderson
96dd9a8b1b
Quick patch to fix the build, based on what it appears Evan meant to write.
...
Evan, please check that this is in fact correct.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37471 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-06 16:22:00 +00:00
Duncan Sands
b32edb4b22
Fold the exception actions table harder: if two typeid lists start the
...
same, only output one copy of the common part.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37470 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-06 15:37:31 +00:00
Evan Cheng
7a655479ae
Lots of bug fixes.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37467 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-06 10:16:17 +00:00
Duncan Sands
9fac0b5ff2
Additional fix for PR1422: make sure the landing pad label is placed in the
...
correct machine basic block - do not rely on the eh.exception intrinsic
being in the landing pad: the loop optimizers can move it out.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37463 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-06 10:05:18 +00:00
Evan Cheng
3d6f60ec19
If a unconditional branch is added to branch to the false path during ifcvt, the predicated block cannot be iteratively ifcvted.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37456 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-06 02:08:52 +00:00
Evan Cheng
cb78d67a1a
Minor statistics counting bug.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37451 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-06 01:12:44 +00:00
Evan Cheng
e705213b67
Fix a couple of typos and be smarter about order of blocks when ifcvt a diamond.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37449 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-06 00:57:55 +00:00
Evan Cheng
993fc9594e
Fix diamond shape ifcvt bugs.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37444 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-05 23:46:14 +00:00
Evan Cheng
a1a9f408da
ReplaceUsesOfBlockWith() can modify the predecessors list.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37441 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-05 22:03:53 +00:00
Evan Cheng
e004317c66
Do not ifcvt if either true / false path is a backedge. Not profitable in almost all cases.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37440 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-05 20:38:42 +00:00
Evan Cheng
c53ef58a35
I had a senior moment.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37433 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-05 07:05:25 +00:00
Evan Cheng
8ed680cce3
If the predicated block requires an early exit, end the block there and add a unconditional branch to false block. AnalyzeBranch() does not understand early exits.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37430 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-05 01:31:40 +00:00
Evan Cheng
f5305f9cc7
Fix some subtle bugs: bug during succeessor copying; incorrectly updating states of ifcvted blocks.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37429 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-05 00:07:37 +00:00
Dale Johannesen
fe7e397100
Tail merging wasn't working for predecessors of landing pads. PR 1496.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37427 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-04 23:52:54 +00:00
Evan Cheng
916d07cdfa
Global ctors / dtors alignment shouldn't be hard-coded at 4. e.g. It could be 8 for 64-bit targets.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37421 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-04 20:39:18 +00:00
Evan Cheng
3ec425470f
Forgot to check for if iterator reached the end.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37420 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-04 20:33:36 +00:00
Dan Gohman
3983358555
Pass the DAG to SDNode::dump to let it do more detailed dumps in some cases.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37413 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-04 16:17:33 +00:00
Dan Gohman
575e2f4ea8
Resolve implicit alignment before computing the FoldingSet information so
...
that the CSE map always contains explicit alignment information. This allows
more loads to be CSE'd when there is a mix of explicit-alignment loads and
implicit-alignment loads.
Also, in SelectionDAG::FindModifiedNodeSlot, add the operands to the
FoldingSetNodeID before the load/store information instead of after, so
that it matches what is done elsewhere.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37411 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-04 15:49:41 +00:00
Evan Cheng
b6665f62c5
Let IfConverter loose. Allow more aggressive subsumptions; reorder basic blocks to expose more ifcvt opportunities; code clean up and fixes.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37409 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-04 06:47:22 +00:00
Evan Cheng
0370fad74b
Move ReplaceUsesOfBlockWith() out of BranchFolding into a MachineBasicBlock general facility.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37408 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-04 06:44:01 +00:00
Duncan Sands
09085fe63d
The semantics of invoke require that we always jump to the unwind block
...
(landing pad) when an exception unwinds through the call. This doesn't
quite match the way the dwarf unwinder works: by default it only jumps to
the landing pad if the catch or filter specification matches, and otherwise
it keeps on unwinding. There are two ways of specifying to the unwinder
that it should "always" (more on why there are quotes here later) jump to
the landing pad: follow the specification by a 0 typeid, or follow it by
the typeid for the NULL typeinfo. GCC does the first, and this patch makes
LLVM do the same as gcc. However there is a problem: the unwinder performs
optimizations based on C++ semantics (it only expects destructors to be
run if the 0 typeid fires - known as "cleanups"), meaning it assumes that no
exceptions will be raised and that the raised exception will be reraised
at the end of the cleanup code. So if someone writes their own LLVM code
using the exception intrinsics they will get a nasty surprise if they don't
follow these rules. The other possibility of using the typeid corresponding
to NULL (catch-all) causes the unwinder to make no assumptions, so this is
probably what we should use in the long-run. However since we are still
having trouble getting exception handling working properly, for the moment
it seems best to closely imitate GCC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37399 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-02 17:16:06 +00:00
Duncan Sands
73ef58ab92
Integrate exception filter support and exception catch support. This
...
simplifies the code in DwarfWriter, allows for multiple filters and
makes it trivial to specify filters accompanied by cleanups or catch-all
specifications (see next patch). What a deal! Patch blessed by Anton.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37398 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-02 16:53:42 +00:00
Zhou Sheng
02031c0ff8
Make LowerCTPOP() support arbitrary bitwidth integer type.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37397 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-02 04:10:33 +00:00
Dale Johannesen
8e63bf375d
Fix CorrectExtraCFGEdges to allow for multiple LandingPad targets.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37394 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-02 00:08:15 +00:00
Dale Johannesen
b468163869
Fancier algorithm in tail-merge comment implemented, so remove comment.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37393 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-01 23:04:28 +00:00
Dale Johannesen
a5a2117a46
Implement smarter algorithm for choosing which blocks to tail-merge.
...
See test/CodeGen/X86/test-pic-jtbl.ll for a case where it works well;
shaves another 10K off our favorite benchmark. I was hesitant about
this because of compile speed, but seems to do OK on a bootstrap.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37392 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-01 23:02:45 +00:00
Evan Cheng
b5a0690788
Correctly mark early-exit on the false path.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37387 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-01 20:29:21 +00:00
Duncan Sands
398898cc6a
Since TypeInfos are passed as i8 pointers, a NULL TypeInfo should be passed
...
as a null i8 pointer not as a 0 i32.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37383 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-01 08:18:30 +00:00
Evan Cheng
8c52938e44
Ifcvt triangle: don't ifcvt 'true' BB if it has other predecessors; don't merge 'false' BB if it has other predecessors.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37382 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-01 07:41:07 +00:00
Evan Cheng
fe57a7e4df
Remove a bogus check. Even terminators in a ifcvt need to be predicated. Unconditional branches can usually be converted to conditional ones.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37380 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-01 00:55:26 +00:00
Evan Cheng
5f70218c75
Allow multiple ifcvt candidates to share children blocks; add some debugging code.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37379 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-01 00:12:12 +00:00
Dale Johannesen
a52dd15137
Arrange for only 1 of multiple branches to landing pad to be kept.
...
Do not remove empty landing pads (EH table needs to be updated)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37375 91177308-0d34-0410-b5e6-96231b3b80d8
2007-05-31 21:54:00 +00:00
Evan Cheng
f15d44cc10
Fix a typo.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37374 91177308-0d34-0410-b5e6-96231b3b80d8
2007-05-31 20:53:33 +00:00
Chris Lattner
3a4205367d
Fix the asmprinter so that a globalvalue can specify an explicit alignment
...
smaller than the preferred alignment, but so that the target can actually
specify a minimum alignment if needed. This fixes some objc protocol
failures Devang tracked down.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37373 91177308-0d34-0410-b5e6-96231b3b80d8
2007-05-31 18:57:45 +00:00
Lauro Ramos Venancio
8d410b6938
Fix PR1424.
...
When a function has FP, the register scavenging spill slot offset already
was calculated.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37371 91177308-0d34-0410-b5e6-96231b3b80d8
2007-05-31 18:27:58 +00:00
Evan Cheng
8258210ed4
Change traversal order to bottom up in preparation for more aggressive if-conversion.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37365 91177308-0d34-0410-b5e6-96231b3b80d8
2007-05-30 19:49:19 +00:00
Chris Lattner
4e7e6cd13a
Fix CodeGen/PowerPC/2007-05-30-dagcombine-miscomp.ll, and PR1473.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37362 91177308-0d34-0410-b5e6-96231b3b80d8
2007-05-30 16:30:06 +00:00
Dale Johannesen
44008c5918
Changed per review comment.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37355 91177308-0d34-0410-b5e6-96231b3b80d8
2007-05-30 00:32:01 +00:00
Dale Johannesen
95ef406e0f
Make stable_sort in tail merging actually be stable (it never was, but didn't
...
matter until my last change). Reenable tail merging by default.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37354 91177308-0d34-0410-b5e6-96231b3b80d8
2007-05-29 23:47:50 +00:00
Evan Cheng
58fbb9f5ba
Don't merge in tail block of a diamond if it has more than one predecessors after if-conversion.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37353 91177308-0d34-0410-b5e6-96231b3b80d8
2007-05-29 23:37:20 +00:00
Evan Cheng
c8ed9badfa
If there is an empty block between a source and its successor block, it still requires a unconditional branch.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37344 91177308-0d34-0410-b5e6-96231b3b80d8
2007-05-29 22:31:16 +00:00
Evan Cheng
f277ee4be7
Add missing const qualifiers.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37341 91177308-0d34-0410-b5e6-96231b3b80d8
2007-05-29 18:35:22 +00:00
Zhou Sheng
924361aef9
Correct the logic in LowerPartSet which cleared the bits from 0 to low-1.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37331 91177308-0d34-0410-b5e6-96231b3b80d8
2007-05-26 03:43:13 +00:00
Chris Lattner
3adf951364
tighten up recursion depth again
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37330 91177308-0d34-0410-b5e6-96231b3b80d8
2007-05-25 02:19:06 +00:00
Evan Cheng
4bec8ae694
Silly boog.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37328 91177308-0d34-0410-b5e6-96231b3b80d8
2007-05-25 00:59:01 +00:00
Dale Johannesen
035fdeb370
Blocks that cond-br and uncond-br/fallthrough to same block should have
...
only one successor.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37324 91177308-0d34-0410-b5e6-96231b3b80d8
2007-05-24 18:31:55 +00:00
Dale Johannesen
de0963df42
Fix for PR1444: do not create two successors to the same block.
...
Temporarily, this breaks CodeGen/Generic/2006-02-12-InsertLibraryCall.ll
by exposing an unrelated latent problem; working on that.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37323 91177308-0d34-0410-b5e6-96231b3b80d8
2007-05-24 17:39:32 +00:00
Dan Gohman
fa73ea2d9f
Minor comment cleanups.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37321 91177308-0d34-0410-b5e6-96231b3b80d8
2007-05-24 14:36:04 +00:00
Dan Gohman
237898ac1f
Add explicit qualification for namespace MVT members.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37320 91177308-0d34-0410-b5e6-96231b3b80d8
2007-05-24 14:33:05 +00:00
Evan Cheng
c843abe868
Fix a typo that caused combiner to create mal-formed pre-indexed store where value store is the same as the base pointer.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37318 91177308-0d34-0410-b5e6-96231b3b80d8
2007-05-24 02:35:39 +00:00
Dale Johannesen
7aea832034
Two tail merging improvements:
...
When considering blocks with more than 2 predecessors, merge the block with
the largest number of matching insns, rather than the first block found.
Considering that 1 matching insn is enough to show a win for candidates that
already end with a branch.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37315 91177308-0d34-0410-b5e6-96231b3b80d8
2007-05-23 21:07:20 +00:00
Anton Korobeynikov
070280e97f
Mark all calls as "could throw", when exceptions are enabled. Emit necessary LP info too. This fixes PR1439
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37311 91177308-0d34-0410-b5e6-96231b3b80d8
2007-05-23 11:08:31 +00:00
Chris Lattner
501fee71e0
prevent exponential recursion in isNegatibleForFree
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37310 91177308-0d34-0410-b5e6-96231b3b80d8
2007-05-23 07:35:22 +00:00
Evan Cheng
a13aa95bc8
Preliminary iterative if-conversion support.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37309 91177308-0d34-0410-b5e6-96231b3b80d8
2007-05-23 07:23:16 +00:00
Dale Johannesen
e6e435498c
name change requested by review of previous patch
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37289 91177308-0d34-0410-b5e6-96231b3b80d8
2007-05-22 18:31:04 +00:00
Owen Anderson
2b77d3b091
Silence a warning.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37288 91177308-0d34-0410-b5e6-96231b3b80d8
2007-05-22 18:13:40 +00:00
Dale Johannesen
81da02b553
Make tail merging the default, except on powerPC. There was no prior art
...
for a target-dependent default with a command-line override; this way
should be generally usable.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37285 91177308-0d34-0410-b5e6-96231b3b80d8
2007-05-22 17:14:46 +00:00
Evan Cheng
a6b4f43eaa
If-convert early exit blocks (returns, etc.); bug fixes, etc.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37270 91177308-0d34-0410-b5e6-96231b3b80d8
2007-05-21 22:22:58 +00:00
Duncan Sands
7bf7a446a5
Only emit one entry in the exception action table for each action, even if
...
it occurs for multiple landing pads.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37267 91177308-0d34-0410-b5e6-96231b3b80d8
2007-05-21 18:50:28 +00:00
Chris Lattner
7667c0bac3
same patch as the previous one, but the symmetric case
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37249 91177308-0d34-0410-b5e6-96231b3b80d8
2007-05-19 00:46:51 +00:00
Chris Lattner
2ad913b342
Disable the (A == (B-A)) -> 2*A == B xform when the sub has multiple uses (in
...
this case, the xform introduces an extra operation). This compiles
PowerPC/compare-duplicate.ll into:
_test:
subf r2, r3, r4
cmplw cr0, r2, r3
bne cr0, LBB1_2 ;F
instead of:
_test:
slwi r2, r3, 1
subf r3, r3, r4
cmplw cr0, r4, r2
bne cr0, LBB1_2 ;F
This is target independent of course.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37246 91177308-0d34-0410-b5e6-96231b3b80d8
2007-05-19 00:43:44 +00:00
Evan Cheng
7f8ff8af1a
Clean up.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37237 91177308-0d34-0410-b5e6-96231b3b80d8
2007-05-18 19:32:08 +00:00
Evan Cheng
36489bbbac
Change to depth-first traversal.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37236 91177308-0d34-0410-b5e6-96231b3b80d8
2007-05-18 19:26:33 +00:00
Dale Johannesen
a469b69dda
Document an inefficiency in tail merging.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37235 91177308-0d34-0410-b5e6-96231b3b80d8
2007-05-18 18:46:40 +00:00
Dan Gohman
fcc4dd91e5
Qualify calls to getTypeForValueType with MVT:: too.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37233 91177308-0d34-0410-b5e6-96231b3b80d8
2007-05-18 18:41:29 +00:00
Evan Cheng
cf6cc112d5
Some restructuring in preparation for most aggressive if-conversion.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37231 91177308-0d34-0410-b5e6-96231b3b80d8
2007-05-18 18:14:37 +00:00
Dan Gohman
b55757ec5f
Qualify several calls to functions in the MVT namespace, for consistency.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37230 91177308-0d34-0410-b5e6-96231b3b80d8
2007-05-18 17:52:13 +00:00
Evan Cheng
6092ca1556
Watch out for blocks that end with a return.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37227 91177308-0d34-0410-b5e6-96231b3b80d8
2007-05-18 17:06:53 +00:00
Evan Cheng
47d2502072
If true / false blocks fallthrough before ifcvt, add unconditional branches to ifcvt'd block.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37200 91177308-0d34-0410-b5e6-96231b3b80d8
2007-05-18 01:55:58 +00:00
Dale Johannesen
1cf08c1d6d
Remove some unneeded branches. (spotted by Evan, thanks)
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37198 91177308-0d34-0410-b5e6-96231b3b80d8
2007-05-18 01:28:58 +00:00
Evan Cheng
86cbfea33b
Make use of target specific block size limits; bug fixes.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37195 91177308-0d34-0410-b5e6-96231b3b80d8
2007-05-18 00:20:58 +00:00
Evan Cheng
4f098788d3
Move isSuccessor() offline, change it to use std::find.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37190 91177308-0d34-0410-b5e6-96231b3b80d8
2007-05-17 23:58:53 +00:00
Chris Lattner
3fc5b01d38
disable MaskedValueIsZero, ComputeMaskedBits, and SimplifyDemandedBits for
...
i128 integers. The 64-bit masks are not wide enough to represent the results.
These should be converted to APInt someday.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37169 91177308-0d34-0410-b5e6-96231b3b80d8
2007-05-17 18:19:23 +00:00
Chris Lattner
b429f7303e
add expand support for ADDC/SUBC/ADDE/SUBE so we can codegen 128-bit add/sub on 32-bit (or less) targets
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37168 91177308-0d34-0410-b5e6-96231b3b80d8
2007-05-17 18:15:41 +00:00
Evan Cheng
d60483ef99
Add target hook to specify block size limit for if-conversion.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37134 91177308-0d34-0410-b5e6-96231b3b80d8
2007-05-16 23:45:53 +00:00
Dale Johannesen
98a6c62aff
Don't fold bitconvert(load) for preinc/postdec loads. Likewise stores.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37130 91177308-0d34-0410-b5e6-96231b3b80d8
2007-05-16 22:45:30 +00:00
Evan Cheng
d6ddc308f0
isBlockPredicable() always ignore terminal instructions; add comments.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37126 91177308-0d34-0410-b5e6-96231b3b80d8
2007-05-16 21:54:37 +00:00
Evan Cheng
c3a289c4b5
Rename M_PREDICATED to M_PREDICABLE; Moved isPredicable() to MachineInstr.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37121 91177308-0d34-0410-b5e6-96231b3b80d8
2007-05-16 20:56:08 +00:00
Duncan Sands
53c3a333a4
Output exception call-sites in address order, as required by the unwinding
...
runtime.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37104 91177308-0d34-0410-b5e6-96231b3b80d8
2007-05-16 12:12:23 +00:00