Dan Gohman
48613b930a
It's not necessary to do rounding for alloca operations when the requested
...
alignment is equal to the stack alignment.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@40004 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-18 16:29:46 +00:00
Evan Cheng
f99002c143
Dead code.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@39979 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-17 20:01:19 +00:00
Dan Gohman
07a96765da
Fix comments about vectors to use the current wording.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@39921 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-16 14:29:03 +00:00
Nick Lewycky
6d4b711e7f
Fix the build. Patch from Holger Schurig.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@39856 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-14 15:11:14 +00:00
Anton Korobeynikov
2365f51ed0
Long live the exception handling!
...
This patch fills the last necessary bits to enable exceptions
handling in LLVM. Currently only on x86-32/linux.
In fact, this patch adds necessary intrinsics (and their lowering) which
represent really weird target-specific gcc builtins used inside unwinder.
After corresponding llvm-gcc patch will land (easy) exceptions should be
more or less workable. However, exceptions handling support should not be
thought as 'finished': I expect many small and not so small glitches
everywhere.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@39855 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-14 14:06:15 +00:00
Dan Gohman
a346615d11
Fix the comment for LegalizeOp to more accurately reflect what it does.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@39827 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-13 20:14:11 +00:00
Dan Gohman
05d92fe7c4
Don't call SimplifyVBinOp for non-vector operations, following earlier review
...
feedback. This theoretically makes the common (scalar) case more efficient.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@39823 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-13 20:03:40 +00:00
Dale Johannesen
72f1596403
Modify previous patch per review comments.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@39817 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-13 17:31:29 +00:00
Dale Johannesen
e7e7d0d7e3
Skeleton of post-RA scheduler; doesn't do anything yet.
...
Change name of -sched option and DEBUG_TYPE to
pre-RA-sched; adjust testcases.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@39816 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-13 17:13:54 +00:00
Duncan Sands
bb821dd79b
The type ids making up a filter are unsigned, and
...
should be output as unsigned values. Checked against
gcc.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@39775 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-12 13:51:39 +00:00
Evan Cheng
28bb462d4c
Missed a couple of places where new instructions are added due to spill / restore.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@39748 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-11 19:17:18 +00:00
Duncan Sands
c3751600b7
Exception handling has been implemented.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@39732 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-11 16:59:20 +00:00
Duncan Sands
97b4ac8c84
If assertions are not enabled, we should return False here.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@38535 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-11 08:47:55 +00:00
Evan Cheng
b9591c667d
No longer need to track last def / use.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@38534 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-11 08:47:44 +00:00
Evan Cheng
0c40d72b01
Fix for PR1545: Revamp code that update kill information due to register reuse.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@38525 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-11 05:28:39 +00:00
David Greene
67fcdf7f65
Make this work with GLIBCXX_DEBUG.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@38516 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-10 22:00:30 +00:00
Dan Gohman
743d3a7548
Change the peep for EXTRACT_VECTOR_ELT of BUILD_PAIR to look for
...
the new CONCAT_VECTORS node type instead, as that's what legalize
uses now. And add a peep for EXTRACT_VECTOR_ELT of INSERT_VECTOR_ELT.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@38503 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-10 18:20:44 +00:00
Evan Cheng
5e2456c959
If the operand is marked M_OPTIONAL_DEF_OPERAND, then it's a def.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@38496 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-10 17:52:20 +00:00
Evan Cheng
11ce02dbdd
Somehow this wasn't committed last time. M_CLOBBERS_PRED is gone.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@38495 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-10 17:50:43 +00:00
Dan Gohman
70fb1aefd5
Fix a bug in the folding of binary operators to undef.
...
Thanks to Lauro for spotting this!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@38491 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-10 15:19:29 +00:00
Dan Gohman
d595b5f1f0
Fix the folding of undef in several binary operators to recognize
...
undef in either the left or right operand.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@38489 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-10 14:20:37 +00:00
Evan Cheng
af825c840e
When a node value is only used by a CopyToReg, use the user's dest. This should not be restricted to nodes that produce only a single value.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@38485 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-10 07:08:32 +00:00
Evan Cheng
c63d391c9a
Move DenseMapKeyInfo<SDOperand> from LegalizeDAG.cpp to SelectionDAGNodes.h
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@38484 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-10 06:59:55 +00:00
Dan Gohman
d6fd1bc122
Preserve volatililty and alignment information when lowering or
...
simplifying loads and stores.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@38473 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-09 22:18:38 +00:00
Dan Gohman
532dc2e1f2
Change getCopyToParts and getCopyFromParts to always use target-endian
...
register ordering, for both physical and virtual registers. Update the PPC
target lowering for calls to expect registers for the call result to
already be in target order.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@38471 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-09 20:59:04 +00:00
Dan Gohman
93f81e2822
Initialize the IndexedModeActions array with memset before
...
updating it with calls to setIndexedLoadAction/setIndexedStoreAction,
which only update a few bits at a time. This avoids ostensible
undefined behavior of operationg on values which may be
trap-representations, and as a practical matter fixes errors from
valgrind, which doesn't track uninitialized memory with bit
granularity.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@38468 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-09 20:49:44 +00:00
Chris Lattner
e094f54f4c
Fix this warning:
...
DAGCombiner.cpp: In member function 'llvm::SDOperand<unnamed>::DAGCombiner::visitOR(llvm::SDNode*)':
DAGCombiner.cpp:1608: warning: passing negative value '-0x00000000000000001' for argument 1 to 'llvm::SDOperand llvm::SelectionDAG::getConstant(uint64_t, llvm::MVT::ValueType, bool)'
oiy.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@38458 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-09 16:16:34 +00:00
Gabor Greif
e510b3af3a
fix typos
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@38453 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-09 12:00:59 +00:00
Evan Cheng
d2c5eb864f
Teach if-conversion about instructions that were already predicated, e.g. conditional move.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37964 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-06 23:24:39 +00:00
Duncan Sands
f664e41b20
The exception handling intrinsics return values,
...
so must be lowered to a value, not nothing at all.
Subtle point: I made eh_selector return 0 and
eh_typeid_for return 1. This means that only
cleanups (destructors) will be run as the exception
unwinds [if eh_typeid_for returned 0 then it would
be as if the first catch always matched, and the
corresponding handler would be run], which is
probably want you want in the CBE.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37947 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-06 14:46:23 +00:00
Duncan Sands
fccf0a2b25
Indexes into the list of filter ids cannot be output
...
directly: they need to be turned into byte offsets
(often the same, but may not be if there are many
type infos).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37942 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-06 12:46:24 +00:00
Rafael Espindola
1aa7efbd2c
Add the byval attribute
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37940 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-06 10:57:03 +00:00
Duncan Sands
902919541f
Remove propagateEHRegister in favour of a more limited
...
fix, that is adequate while PR1508 remains unresolved.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37938 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-06 09:18:59 +00:00
Duncan Sands
b4fd45e2fc
Remove ExtractGlobalVariable - use StripPointerCasts
...
instead.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37937 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-06 09:10:03 +00:00
Evan Cheng
86da6600ae
Workaround of getCopyToRegs and getCopyFromRegs bugs for big-endian machines.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37935 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-06 01:47:35 +00:00
Evan Cheng
991262834d
Change CalculateHeights and CalculateDepths to be non-recursive.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37934 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-06 01:37:28 +00:00
Dan Gohman
50b153335d
Make the debug string for ISD::MERGE_VALUES consistent with the others.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37922 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-05 20:15:43 +00:00
Dan Gohman
6183f78cf8
Add a parameter to getCopyToParts and getCopyFromParts to specify whether
...
endian swapping should be done, and update the code to use it. This fixes
some register ordering issues on big-endian systems, such as PowerPC,
introduced by the recent illegal by-val arguments changes.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37921 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-05 20:12:34 +00:00
Gabor Greif
a99be51bf5
Here is the bulk of the sanitizing.
...
Almost all occurrences of "bytecode" in the sources have been eliminated.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37913 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-05 17:07:56 +00:00
Duncan Sands
14da32a486
Make sure only one copy of a filter is placed in the
...
exception handling table if we encounter it multiple
times. Filters could be folded harder than this, but
that would mean a lot more work for not much gain.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37908 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-05 15:15:01 +00:00
Evan Cheng
5db322acef
Better assertion messages.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37890 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-05 07:05:38 +00:00
Duncan Sands
cf26d7ccac
Extend eh.selector to support both catches and filters.
...
Drop the eh.filter intrinsic.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37875 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-04 20:52:51 +00:00
Dan Gohman
613e0d8008
Fix several over-aggressive folds for undef nodes in dagcombine, to
...
follow the rules for undef used in instcombine.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37851 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-03 14:03:57 +00:00
Dale Johannesen
849f214a4e
Fix for PR 1505 (and 1489). Rewrite X87 register
...
model to include f32 variants. Some factoring
improvments forthcoming.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37847 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-03 00:53:03 +00:00
Dan Gohman
27a70be55f
Replace ExpandScalarFormalArgs and ExpandScalarCallArgs with the newly
...
refactored getCopyFromParts and getCopyToParts, which are more general.
This effectively adds support for lowering illegal by-val vector call
arguments.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37843 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-02 16:18:06 +00:00
Dan Gohman
23ff1826b9
Teach GetNegatedExpression to negate 0-B to B in UnsafeFPMath mode, and
...
visitFSUB to fold 0-B to -B in UnsafeFPMath mode. Also change visitFNEG
to use isNegatibleForFree/GetNegatedExpression instead of doing a subset
of the same thing manually.
This fixes test/CodeGen/X86/negative-sin.ll.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37842 91177308-0d34-0410-b5e6-96231b3b80d8
2007-07-02 15:48:56 +00:00
Evan Cheng
c45453fa1d
Only do FNEG xform when the vector type is a floating point type.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37818 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-29 21:44:35 +00:00
David Greene
821262953a
Remove unused variables.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37816 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-29 21:42:03 +00:00
Evan Cheng
c908dcde45
Fix a vector FP constant CSE bug.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37814 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-29 21:36:04 +00:00
David Greene
a2a488594d
Remove unnecessary attributions in comments.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37799 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-29 03:42:23 +00:00
David Greene
cfacc8f5d2
Fix reference to cached end iterator invalidated by an erase operation.
...
Uncovered by _GLIBCXX_DEBUG.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37795 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-29 02:49:11 +00:00
David Greene
a4ab2e8c72
Remove the "special tie breaker" because it resulted in inconsistent
...
ordering and thus violated the strict weak ordering requirement of
priority_queue. Uncovered by _GLIBCXX_DEBUG.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37794 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-29 02:48:09 +00:00
David Greene
8a46d342d8
Fix misue of iterator pointing to erased object. Uncovered by
...
_GLIBCXX_DEBUG.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37793 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-29 02:45:24 +00:00
Dan Gohman
10a7aa6dea
Fix an assertion failure in legalizing bitcast operators on targets where
...
vectors are split down to single elements as part of legalization.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37785 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-29 00:09:08 +00:00
Dan Gohman
b6f5b00c3b
Add new TargetLowering code to provide the final register type that an
...
illegal value type will be transformed to, for code that needs the
register type after all transformations instead of just after the first
transformation.
Factor out the code that uses this information to do copy-from-regs and
copy-to-regs for various purposes into separate functions so that they
are done consistently.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37781 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-28 23:29:44 +00:00
Evan Cheng
292da949f6
If a livein is not used in the block. It's live through.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37764 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-27 18:47:28 +00:00
Evan Cheng
e47c333a12
Partial fix for PR1502: If a EH register is needed in a successor of landing pad, add it as livein to all the blocks in the paths between the landing pad and the specified block.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37763 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-27 18:45:32 +00:00
Dan Gohman
6595cb3000
Rename ("shrinkify") MVT::isExtendedValueType to MVT::isExtendedVT.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37758 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-27 16:08:04 +00:00
Dan Gohman
8c8c5fcbd7
Use getVectorTypeBreakdown in FunctionLoweringInfo::CreateRegForValue
...
to compute the number and type of registers needed for vector values
instead of computing it manually. This fixes PR1529.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37755 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-27 14:34:07 +00:00
Dan Gohman
89b20c07e9
Make the comment for ScalarizeVectorOp mention that it is only for use
...
with single-element vectors.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37752 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-27 14:06:22 +00:00
Duraid Madina
df82c93f2a
ok, this is something of a dirty hack, but it seems to work. (fixes e.g.
...
the SPASS miscompilation)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37750 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-27 09:01:14 +00:00
Duraid Madina
b2efabd571
ok, this much doesn't seem to bork anything
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37749 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-27 08:31:07 +00:00
Duraid Madina
4e378c6504
revert evan's fixes (and my doofusness) since they had a huge code
...
quality hit. will look at this soon.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37748 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-27 08:11:59 +00:00
Duraid Madina
669f7382be
pull evan's fixes - should help the nightly tester (but there are still
...
some issues)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37747 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-27 07:07:13 +00:00
Evan Cheng
041040717d
Replace std::set with SmallPtrSet.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37746 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-27 05:23:00 +00:00
Evan Cheng
75611fb4e6
Fix an obvious bug. Old code only worked for the entry block.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37743 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-27 01:16:36 +00:00
Evan Cheng
7ac19afbb1
Correctly handle implcit def / use operands.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37740 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-26 21:05:13 +00:00
Evan Cheng
4efe74129f
Properly handle kills of a physical register which has sub-registers that are read by later instructions.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37739 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-26 21:03:35 +00:00
Duraid Madina
837a600a90
tidy this file up a bit
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37725 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-26 00:21:58 +00:00
Duraid Madina
2e0930cf37
A bunch of fixes to the BigBlock allocator improve compile-time by ~20%
...
and code quality by ~2% on my tests.
A big thank you to Roman Levenstein for this patch! See
http://lists.cs.uiuc.edu/pipermail/llvm-commits/Week-of-Mon-20070618/050717.html
for more details.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37724 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-25 23:46:54 +00:00
Dan Gohman
7f32156bb9
Generalize MVT::ValueType and associated functions to be able to represent
...
extended vector types. Remove the special SDNode opcodes used for pre-legalize
vector operations, and the special MVT::Vector type used with them. Adjust
lowering and legalize to work with the normal SDNode kinds instead, and to
use the normal MVT functions to work with vector types instead of using the
two special operands that the pre-legalize nodes held.
This allows pre-legalize and post-legalize DAGs, and the code that operates
on them, to be more consistent. Pre-legalize vector operators can be handled
more consistently with scalar operators. And, -view-dag-combine1-dags and
-view-legalize-dags now look prettier for vector code.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37719 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-25 16:23:39 +00:00
Dan Gohman
ea859be53c
Move ComputeMaskedBits, MaskedValueIsZero, and ComputeNumSignBits from
...
TargetLowering to SelectionDAG so that they have more convenient
access to the current DAG, in preparation for the ValueType routines
being changed from standalone functions to members of SelectionDAG for
the pre-legalize vector type changes.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37704 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-22 14:59:07 +00:00
Duraid Madina
a8c7682939
check in the BigBlock local register allocator
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37703 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-22 08:27:12 +00:00
Evan Cheng
0b2ce1fc19
std::set is really really terrible. Switch to SmallPtrSet to reduce compile time. For Duraid's example. The overall isel time is reduced from 0.6255 sec to 0.1876 sec.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37701 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-22 01:35:51 +00:00
Dan Gohman
2d74a318de
Tidy up ValueType names in comments.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37688 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-21 14:48:26 +00:00
Dan Gohman
b9f1019696
Rename TargetLowering::getNumElements and friends to
...
TargetLowering::getNumRegisters and similar, to avoid confusion with
the actual number of elements for vector types.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37687 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-21 14:42:22 +00:00
Evan Cheng
b13cdbd865
Xforms:
...
(add (select cc, 0, c), x) -> (select cc, x, (add, x, c))
(sub x, (select cc, 0, c)) -> (select cc, x, (sub, x, c))
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37685 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-21 07:39:16 +00:00
Evan Cheng
9ffd340daf
Avoid if-converting simple block that ends with unconditional branch or fallthrough unless it branches / falls to the 'false' block. Not profitable, may end up increasing code size.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37660 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-19 21:45:13 +00:00
Dan Gohman
b5bec2b6f6
Pass a SelectionDAG into SDNode::dump everywhere it's used, in prepration
...
for needing the DAG node to print pre-legalize extended value types, and
to get better debug messages with target-specific nodes.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37656 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-19 14:13:56 +00:00
Chris Lattner
85ef254630
document and hide two options.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37651 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-19 05:47:49 +00:00
Dan Gohman
82a87a0172
Replace M_REMATERIALIZIBLE and the newly-added isOtherReMaterializableLoad
...
with a general target hook to identify rematerializable instructions. Some
instructions are only rematerializable with specific operands, such as loads
from constant pools, while others are always rematerializable. This hook
allows both to be identified as being rematerializable with the same
mechanism.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37644 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-19 01:48:05 +00:00
Evan Cheng
eaa91b0a1f
Replace TargetInstrInfo::CanBeDuplicated() with a M_NOT_DUPLICABLE bit.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37643 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-19 01:26:51 +00:00
Chris Lattner
aeeccfc5b2
add isVarArg to CCState
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37640 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-19 00:11:09 +00:00
Evan Cheng
c4047a8e96
Fix some fragile code wrt CFG edge updating.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37634 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-18 22:44:57 +00:00
Evan Cheng
2bdb7d0cc8
Move CorrectExtraCFGEdges() from BranchFolding.cpp to a MachineBasicBlock method.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37633 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-18 22:43:58 +00:00
Chris Lattner
e10e6f7a36
make ComputeTopDownOrdering significantly faster and use less stack space
...
by making it non-recursive
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37629 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-18 21:28:10 +00:00
Dan Gohman
7a0a4fc912
Make chain dependencies blue, in addition to being dashed.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37626 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-18 15:30:16 +00:00
Evan Cheng
a1a878791b
Properly remove duplicate instructions as result of diamond if-conversion. Other bug fixes.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37623 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-18 08:37:25 +00:00
Evan Cheng
e882fca902
Really turn if-converter loose:
...
1. Consider all possible ifcvt cases at once. No longer restricted to bottom
up iterative approach.
2. Sort all possible cases based on a cost function. Perform the most profitable
ones first invalidate others that target the same blocks.
3. Fixed a number of bugs related to block duplication.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37613 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-16 09:34:52 +00:00
Tanya Lattner
24e5aada7d
Codegen support (stripped out) for the annotate attribute.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37608 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-15 22:26:58 +00:00
Evan Cheng
a2acf840a7
Not every predicable block can be safely duplicated.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37607 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-15 21:18:05 +00:00
Chris Lattner
c2c28fc24c
Fix CodeGen/X86/inline-asm-x-scalar.ll:test4, by retaining regclass info
...
for tied register constraints.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37601 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-15 19:11:01 +00:00
Evan Cheng
bf9d02eaf6
MachineInstr::isPredicable() is no longer needed.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37599 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-15 19:06:07 +00:00
Duncan Sands
f40708223e
Workaround for PR1508.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37597 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-15 19:04:19 +00:00
Evan Cheng
9333545980
Extra edges are deleted later if needed.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37593 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-15 17:34:48 +00:00
Evan Cheng
2c8c3a4a0d
Allow small blocks to be duplicated to enable if-conversion.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37590 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-15 07:36:12 +00:00
Evan Cheng
bc198eeba6
No really, clear predcessors states.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37581 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-14 23:34:09 +00:00
Evan Cheng
e37e24331c
If BB is predicated, invalidate its predecessor(s) which would if-convert it. It needs to be re-analyzed.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37580 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-14 23:13:19 +00:00
Dan Gohman
51eaa86758
Rename MVT::getVectorBaseType to MVT::getVectorElementType.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37579 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-14 22:58:02 +00:00
Evan Cheng
b7c908bb81
Fix typo.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37577 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-14 21:26:08 +00:00
Dan Gohman
c101e95cb6
Add a target hook to allow loads from constant pools to be rematerialized, and an
...
implementation for x86.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37576 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-14 20:50:44 +00:00
Evan Cheng
86ff296e63
Fix some stupid bugs that have effectively disabled if-conversion.
...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37575 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-14 20:28:52 +00:00
Duncan Sands
ea632439d4
Only correctly lower exception handing intrinsics if exception handling is
...
turned on. Likewise for scanning of invokes to mark landing pads.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@37570 91177308-0d34-0410-b5e6-96231b3b80d8
2007-06-13 16:53:21 +00:00
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