OSDN Git Service
Daniel Berlin [Fri, 19 Aug 2016 22:06:23 +0000 (22:06 +0000)]
Convert some depth first traversals to depth_first
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279331
91177308-0d34-0410-b5e6-
96231b3b80d8
Tim Shen [Fri, 19 Aug 2016 21:52:34 +0000 (21:52 +0000)]
[CallGraph] Use decltype instead of pointer_to_unary_function. NFC.
Reviewers: dblaikie
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D23725
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279328
91177308-0d34-0410-b5e6-
96231b3b80d8
Tim Shen [Fri, 19 Aug 2016 21:20:13 +0000 (21:20 +0000)]
[GraphTraits] Make nodes_iterator dereference to NodeType*/NodeRef
Currently nodes_iterator may dereference to a NodeType* or a NodeType&. Make them all dereference to NodeType*, which is NodeRef later.
Differential Revision: https://reviews.llvm.org/D23704
Differential Revision: https://reviews.llvm.org/D23705
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279326
91177308-0d34-0410-b5e6-
96231b3b80d8
Krzysztof Parzyszek [Fri, 19 Aug 2016 21:12:52 +0000 (21:12 +0000)]
[Packetizer] Add debugging code to stop packetization after N instructions
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279325
91177308-0d34-0410-b5e6-
96231b3b80d8
Krzysztof Parzyszek [Fri, 19 Aug 2016 21:07:35 +0000 (21:07 +0000)]
[Hexagon] Avoid register dependencies on indirect branches in packetizer
Do not packetize the instruction setting the branch address with the
indirect branch itself.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279324
91177308-0d34-0410-b5e6-
96231b3b80d8
Tim Shen [Fri, 19 Aug 2016 21:04:45 +0000 (21:04 +0000)]
[ADT] add pointer_iterator, the opposite of pointee_iterator
Differential Revision: https://reviews.llvm.org/D23703
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279323
91177308-0d34-0410-b5e6-
96231b3b80d8
Kostya Serebryany [Fri, 19 Aug 2016 20:57:09 +0000 (20:57 +0000)]
[libFuzzer] fix the non-debug build warnings
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279321
91177308-0d34-0410-b5e6-
96231b3b80d8
Tim Northover [Fri, 19 Aug 2016 20:48:23 +0000 (20:48 +0000)]
GlobalISel: translate floating-point round/extend
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279320
91177308-0d34-0410-b5e6-
96231b3b80d8
Tim Northover [Fri, 19 Aug 2016 20:48:16 +0000 (20:48 +0000)]
GlobalISel: translate floating-point comparisons
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279319
91177308-0d34-0410-b5e6-
96231b3b80d8
Justin Lebar [Fri, 19 Aug 2016 20:46:45 +0000 (20:46 +0000)]
[NVPTX] Switch nvptx-use-infer-addrspace to true.
Summary:
This switches us to use a different, more powerful algorithm for address
space inference. I've tested this locally and it seems to work great.
Once we're more confident in it, we can remove the old pass altogether.
Reviewers: jingyue
Subscribers: llvm-commits, tra, jholewinski
Differential Revision: https://reviews.llvm.org/D23694
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279317
91177308-0d34-0410-b5e6-
96231b3b80d8
Duncan P. N. Exon Smith [Fri, 19 Aug 2016 20:40:12 +0000 (20:40 +0000)]
Reapply "ADT: Remove UB in ilist (and use a circular linked list)"
This reverts commit r279053, reapplying r278974 after fixing PR29035
with r279104.
Note that r279312 has been committed in the meantime, and this has been
rebased on top of that. Otherwise it's identical to r278974.
Note for maintainers of out-of-tree code (that I missed in the original
message): if the new isKnownSentinel() assertion is firing from
ilist_iterator<>::operator*(), this patch has identified a bug in your
code. There are a few common patterns:
- Some IR-related APIs htake an IRUnit* that might be nullptr, and pass
in an incremented iterator as an insertion point. Some old code was
using "&*++I", which in the case of end() only worked by fluke. If
the IRUnit in question inherits from ilist_node_with_parent<>, you can
use "I->getNextNode()". Otherwise, use "List.getNextNode(*I)".
- In most other cases, crashes on &*I just need to check for I==end()
before dereferencing.
- There's also occasional code that sends iterators into a function, and
then starts calling I->getOperand() (or other API). Either check for
end() before the entering the function, or early exit.
Note for if the static_assert with HasObsoleteCustomization is firing
for you:
- r278513 has examples of how to stop using custom sentinel traits.
- r278532 removed ilist_nextprev_traits since no one was using it. See
lld's r278469 for the only migration I needed to do.
Original commit message follows.
----
This removes the undefined behaviour (UB) in ilist/ilist_node/etc.,
mainly by removing (gutting) the ilist_sentinel_traits customization
point and canonicalizing on a single, efficient memory layout. This
fixes PR26753.
The new ilist is a doubly-linked circular list.
- ilist_node_base has two ilist_node_base*: Next and Prev. Size-of: two
pointers.
- ilist_node<T> (size-of: two pointers) is a type-safe wrapper around
ilist_node_base.
- ilist_iterator<T> (size-of: two pointers) operates on an
ilist_node<T>*, and downcasts to T* on dereference.
- ilist_sentinel<T> (size-of: two pointers) is a wrapper around
ilist_node<T> that has some extra API for list management.
- ilist<T> (size-of: two pointers) has an ilist_sentinel<T>, whose
address is returned for end().
The new memory layout matches ilist_half_embedded_sentinel_traits<T>
exactly. The Head pointer that previously lived in ilist<T> is
effectively glued to the ilist_half_node<T> that lived in
ilist_half_embedded_sentinel_traits<T>, becoming the Next and Prev in
the ilist_sentinel_node<T>, respectively. sizeof(ilist<T>) is now the
size of two pointers, and there is never any additional storage for a
sentinel.
This is a much simpler design for a doubly-linked list, removing most of
the corner cases of list manipulation (add, remove, etc.). In follow-up
commits, I intend to move as many algorithms as possible into a
non-templated base class (ilist_base) to reduce code size.
Moreover, this fixes the UB in ilist_iterator/getNext/getPrev
operations. Previously, ilist_iterator<T> operated on a T*, even when
the sentinel was not of type T (i.e., ilist_embedded_sentinel_traits and
ilist_half_embedded_sentinel_traits). This added UB to all operations
involving end(). Now, ilist_iterator<T> operates on an ilist_node<T>*,
and only downcasts when the full type is guaranteed to be T*.
What did we lose? There used to be a crash (in some configurations) on
++end(). Curiously (via UB), ++end() would return begin() for users of
ilist_half_embedded_sentinel_traits<T>, but otherwise ++end() would
cause a nice dependable nullptr dereference, crashing instead of a
possible infinite loop. Options:
1. Lose that behaviour.
2. Keep it, by stealing a bit from Prev in asserts builds.
3. Crash on dereference instead, using the same technique.
Hans convinced me (because of the number of problems this and r278532
exposed on Windows) that we really need some assertion here, at least in
the short term. I've opted for #3 since I think it catches more bugs.
I added only a couple of unit tests to root out specific bugs I hit
during bring-up, but otherwise this is tested implicitly via the
extensive usage throughout LLVM.
Planned follow-ups:
- Remove ilist_*sentinel_traits<T>. Here I've just gutted them to
prevent build failures in sub-projects. Once I stop referring to them
in sub-projects, I'll come back and delete them.
- Add ilist_base and move algorithms there.
- Check and fix move construction and assignment.
Eventually, there are other interesting directions:
- Rewrite reverse iterators, so that rbegin().getNodePtr()==&*rbegin().
This allows much simpler logic when erasing elements during a reverse
traversal.
- Remove ilist_traits::createNode, by deleting the remaining API that
creates nodes. Intrusive lists shouldn't be creating nodes
themselves.
- Remove ilist_traits::deleteNode, by (1) asserting that lists are empty
on destruction and (2) changing API that calls it to take a Deleter
functor (intrusive lists shouldn't be in the memory management
business).
- Reconfigure the remaining callback traits (addNodeToList, etc.) to be
higher-level, pulling out a simple_ilist<T> that is much easier to
read and understand.
- Allow tags (e.g., ilist_node<T,tag1> and ilist_node<T,tag2>) so that T
can be a member of multiple intrusive lists.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279314
91177308-0d34-0410-b5e6-
96231b3b80d8
Reid Kleckner [Fri, 19 Aug 2016 20:22:39 +0000 (20:22 +0000)]
Revert "[SimplifyCFG] Rewrite SinkThenElseCodeToEnd"
This reverts commit r279229. It breaks intrinsic function calls in
diamonds.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279313
91177308-0d34-0410-b5e6-
96231b3b80d8
Duncan P. N. Exon Smith [Fri, 19 Aug 2016 20:17:23 +0000 (20:17 +0000)]
Reapply "ADT: Tidy up ilist_traits static asserts, NFC"
This spiritually reapplies r279012 (reverted in r279052) without the
r278974 parts. The differences:
- Only the HasGetNext trait exists here, so I've only cleaned up (and
tested) it. I still added HasObsoleteCustomization since I know
this will be expanding when r278974 is reapplied.
- I changed the unit tests to use static_assert to catch problems
earlier in the build.
- I added negative tests for the type traits.
Original commit message follows.
----
Change the ilist traits to use decltype instead of sizeof, and add
HasObsoleteCustomization so that additions to this list don't
need to be added in two places.
I suspect this will now work with MSVC, since the trait tested in
r278991 seems to work. If for some reason it continues to fail on
Windows I'll follow up by adding back the #ifndef _MSC_VER.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279312
91177308-0d34-0410-b5e6-
96231b3b80d8
Tim Northover [Fri, 19 Aug 2016 20:09:15 +0000 (20:09 +0000)]
GlobalISel: translate floating-point constants
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279311
91177308-0d34-0410-b5e6-
96231b3b80d8
Tim Northover [Fri, 19 Aug 2016 20:09:11 +0000 (20:09 +0000)]
GlobalISel: translate float/int conversion instructions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279310
91177308-0d34-0410-b5e6-
96231b3b80d8
Tim Northover [Fri, 19 Aug 2016 20:09:07 +0000 (20:09 +0000)]
GlobalISel: support translating select instructions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279309
91177308-0d34-0410-b5e6-
96231b3b80d8
Tim Northover [Fri, 19 Aug 2016 20:09:03 +0000 (20:09 +0000)]
GlobalISel: fix insert/extract to work on ConstantExprs too.
No tests yet unfortunately (ConstantFolding reduces all supported constants to
ConstantInts before we get to translation). Soon.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279308
91177308-0d34-0410-b5e6-
96231b3b80d8
Tim Northover [Fri, 19 Aug 2016 20:09:01 +0000 (20:09 +0000)]
GlobalISel: fix stale comment
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279307
91177308-0d34-0410-b5e6-
96231b3b80d8
Tim Northover [Fri, 19 Aug 2016 20:08:55 +0000 (20:08 +0000)]
GlobalISel: translate insertvalue instructions.
This adds a G_INSERT instruction, which technically makes G_SEQUENCE redundant
(it's equivalent to a G_INSERT into an IMPLICIT_DEF). We'll leave G_SEQUENCE
for now though: it's likely to be far more common as it's a fundamental part of
legalization, so avoiding the mess and bloat of the extra IMPLICIT_DEFs is
probably worthwhile.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279306
91177308-0d34-0410-b5e6-
96231b3b80d8
Tom Stellard [Fri, 19 Aug 2016 19:59:18 +0000 (19:59 +0000)]
MachineScheduler: Add constructor functions for the DAGMutations
Summary: This way they can be re-used by target-specific schedulers.
Reviewers: atrick, MatzeB, kparzysz
Subscribers: kparzysz, llvm-commits, MatzeB
Differential Revision: https://reviews.llvm.org/D23678
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279305
91177308-0d34-0410-b5e6-
96231b3b80d8
Krzysztof Parzyszek [Fri, 19 Aug 2016 19:36:35 +0000 (19:36 +0000)]
[Hexagon] Add RUN line to test
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279304
91177308-0d34-0410-b5e6-
96231b3b80d8
Krzysztof Parzyszek [Fri, 19 Aug 2016 19:29:15 +0000 (19:29 +0000)]
[Hexagon] Fix subesthetic indentation
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279303
91177308-0d34-0410-b5e6-
96231b3b80d8
Krzysztof Parzyszek [Fri, 19 Aug 2016 19:17:28 +0000 (19:17 +0000)]
[Hexagon] Allow i1 values for 'r' constraint in inline-asm
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279302
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Fri, 19 Aug 2016 19:07:10 +0000 (19:07 +0000)]
[CostModel][X86] Added sub, or, and, fadd and fsub costs and missing 512-bit mul costs
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279301
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Fri, 19 Aug 2016 19:03:07 +0000 (19:03 +0000)]
[InstCombine] remove an icmp fold that is already handled by InstSimplify
Specifically, this is done near the end of "SimplifyICmpInst" using
computeKnownBits() as the broader solution. There are even vector
tests (yay!) for this in test/Transforms/InstSimplify/compare.ll.
I considered putting an assert here instead of just deleting, but
then we could assert every possible fold in InstSimplify in
InstCombine, so...less is more?
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279300
91177308-0d34-0410-b5e6-
96231b3b80d8
Richard Smith [Fri, 19 Aug 2016 18:57:17 +0000 (18:57 +0000)]
Add missing #include found by modules build.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279298
91177308-0d34-0410-b5e6-
96231b3b80d8
Krzysztof Parzyszek [Fri, 19 Aug 2016 18:46:13 +0000 (18:46 +0000)]
[Hexagon] Do not cache alloca instructions during isel
They can be deleted or replicated, so the cache may become outdated.
They only need to be visited once during frame lowering, so just scan
the function instead.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279297
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Fri, 19 Aug 2016 18:36:06 +0000 (18:36 +0000)]
[PM] Re-instate r279227 and r279228 with a fix to the way the templating
was done to hopefully appease MSVC.
As an upside, this also implements the suggestion Sanjoy made in code
review, so two for one! =]
I'll be watching the bots to see if there are still issues.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279295
91177308-0d34-0410-b5e6-
96231b3b80d8
Tim Northover [Fri, 19 Aug 2016 18:32:14 +0000 (18:32 +0000)]
GlobalISel: improve representation of G_SEQUENCE and G_EXTRACT
First, make sure all types involved are represented, rather than being implicit
from the register width.
Second, canonicalize all types to scalar. These operations just act in bits and
don't care about vectors.
Also standardize spelling of Indices in the MachineIRBuilder (NFC here).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279294
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Fri, 19 Aug 2016 18:24:10 +0000 (18:24 +0000)]
[CostModel][X86] Added some AVX512 and 512-bit vector cost tests
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279291
91177308-0d34-0410-b5e6-
96231b3b80d8
Kyle Butt [Fri, 19 Aug 2016 18:17:06 +0000 (18:17 +0000)]
Revert "IfConversion: Rescan diamonds."
This reverts commit
bfd62a4b4465dd21811bf615c3b04c30ddb09f7b.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279289
91177308-0d34-0410-b5e6-
96231b3b80d8
Kyle Butt [Fri, 19 Aug 2016 18:17:04 +0000 (18:17 +0000)]
Revert "CodeGen: If Convert blocks that would form a diamond when tail-merged."
This reverts commit
0fda93481c4231c06b838ef476c0c404c51ff875.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279288
91177308-0d34-0410-b5e6-
96231b3b80d8
Tim Northover [Fri, 19 Aug 2016 18:09:41 +0000 (18:09 +0000)]
GlobalISel: allow extractvalue to extract an aggregate.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279287
91177308-0d34-0410-b5e6-
96231b3b80d8
Krzysztof Parzyszek [Fri, 19 Aug 2016 17:54:49 +0000 (17:54 +0000)]
[Hexagon] Fixes for new-value jump formation
- Recognize C2_cmpgtui, S2_tstbit_i, and S4_ntstbit_i.
- Avoid creating new-value instructions with both source operands equal.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279286
91177308-0d34-0410-b5e6-
96231b3b80d8
Tim Northover [Fri, 19 Aug 2016 17:47:05 +0000 (17:47 +0000)]
GlobalISel: support translation of extractvalue instructions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279285
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Fri, 19 Aug 2016 17:39:00 +0000 (17:39 +0000)]
[CostModel][X86] Add fdiv + frem cost tests
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279283
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Fri, 19 Aug 2016 17:34:05 +0000 (17:34 +0000)]
[InstCombine] use local variables to reduce code in foldICmpShlConstant; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279282
91177308-0d34-0410-b5e6-
96231b3b80d8
Krzysztof Parzyszek [Fri, 19 Aug 2016 17:20:57 +0000 (17:20 +0000)]
[Hexagon] Fix a few omissions in HexagonInstrInfo
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279280
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Fri, 19 Aug 2016 17:20:37 +0000 (17:20 +0000)]
[InstCombine] rename variables in foldICmpShlConstant(); NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279279
91177308-0d34-0410-b5e6-
96231b3b80d8
Tim Northover [Fri, 19 Aug 2016 17:17:06 +0000 (17:17 +0000)]
GlobalISel: support overflow arithmetic intrinsics.
Unsigned addition and subtraction can reuse the instructions created to
legalize large width operations (i.e. both produce and consume a carry flag).
Signed operations and multiplies get a dedicated op-with-overflow instruction.
Once this is produced the two values are combined into a struct register (which
will almost always be merged with a corresponding G_EXTRACT as part of
legalization).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279278
91177308-0d34-0410-b5e6-
96231b3b80d8
Vitaly Buka [Fri, 19 Aug 2016 17:15:38 +0000 (17:15 +0000)]
Revert "[asan] Optimize store size in FunctionStackPoisoner::poisonRedZones"
This reverts commit r279178.
Speculative revert in hope to fix asan crash on arm.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279277
91177308-0d34-0410-b5e6-
96231b3b80d8
Vitaly Buka [Fri, 19 Aug 2016 17:15:33 +0000 (17:15 +0000)]
Revert "[asan] Fix size of shadow incorrectly calculated in r279178"
This reverts commit r279222.
Speculative revert in hope to fix asan crash on arm.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279276
91177308-0d34-0410-b5e6-
96231b3b80d8
Lang Hames [Fri, 19 Aug 2016 17:06:39 +0000 (17:06 +0000)]
[RuntimeDyld] Revert r279182 and 279201 -- they broke some ARM bots.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279275
91177308-0d34-0410-b5e6-
96231b3b80d8
Michael Kuperstein [Fri, 19 Aug 2016 17:05:22 +0000 (17:05 +0000)]
[AliasSetTracker] Degrade AliasSetTracker when may-alias sets get too large.
Repeated inserts into AliasSetTracker have quadratic behavior - inserting a
pointer into AST is linear, since it requires walking over all "may" alias
sets and running an alias check vs. every pointer in the set.
We can avoid this by tracking the total number of pointers in "may" sets,
and when that number exceeds a threshold, declare the tracker "saturated".
This lumps all pointers into a single "may" set that aliases every other
pointer.
(This is a stop-gap solution until we migrate to MemorySSA)
This fixes PR28832.
Differential Revision: https://reviews.llvm.org/D23432
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279274
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Fri, 19 Aug 2016 17:02:00 +0000 (17:02 +0000)]
[X86][SSE] Generalised combining to VZEXT_MOVL to any vector size
This doesn't change tests codegen as we already combined to blend+zero which is what we lower VZEXT_MOVL to on SSE41+ targets, but it does put us in a better position when we improve shuffling for optsize.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279273
91177308-0d34-0410-b5e6-
96231b3b80d8
Krzysztof Parzyszek [Fri, 19 Aug 2016 16:57:05 +0000 (16:57 +0000)]
[Hexagon] Enforce LLSC packetization rules
Ensure that load locked and store conditional instructions are only
packetized with ALU32 instructions.
Patch by Ben Craig.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279272
91177308-0d34-0410-b5e6-
96231b3b80d8
Reid Kleckner [Fri, 19 Aug 2016 16:53:18 +0000 (16:53 +0000)]
Fix regression in InstCombine introduced by r278944
The intended transform is:
// Simplify icmp eq (or (ptrtoint P), (ptrtoint Q)), 0
// -> and (icmp eq P, null), (icmp eq Q, null).
P and Q are both pointer types, but may have different types. We need
two calls to getNullValue() to make the icmps.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279271
91177308-0d34-0410-b5e6-
96231b3b80d8
Tom Stellard [Fri, 19 Aug 2016 16:44:32 +0000 (16:44 +0000)]
MachineScheduler: Make some GenericScheduler member variables protected
Summary: We will need these in AMDGPU's new SchedStrategy implmentation.
Reviewers: MatzeB, atrick
Subscribers: llvm-commits, MatzeB
Differential Revision: https://reviews.llvm.org/D23679
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279270
91177308-0d34-0410-b5e6-
96231b3b80d8
Krzysztof Parzyszek [Fri, 19 Aug 2016 16:40:19 +0000 (16:40 +0000)]
[Hexagon] Minor updates to register definitions
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279269
91177308-0d34-0410-b5e6-
96231b3b80d8
David Majnemer [Fri, 19 Aug 2016 16:37:40 +0000 (16:37 +0000)]
[CloneFunction] Don't remove unrelated nodes from the CGSSC
CGSCC use a WeakVH to track call sites. RAUW a call within a function
can result in that WeakVH getting confused about whether or not the call
site is still around.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279268
91177308-0d34-0410-b5e6-
96231b3b80d8
Krzysztof Parzyszek [Fri, 19 Aug 2016 16:35:05 +0000 (16:35 +0000)]
[Hexagon] Fix incorrect generation of S4_subi_asl_ri
Patch by Jyotsna Verma.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279267
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Fri, 19 Aug 2016 16:12:16 +0000 (16:12 +0000)]
[InstCombine] use m_APInt to allow icmp (shl 1, Y), C folds for splat constant vectors
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279266
91177308-0d34-0410-b5e6-
96231b3b80d8
Krzysztof Parzyszek [Fri, 19 Aug 2016 16:11:33 +0000 (16:11 +0000)]
[Hexagon] Add missing pattern for C4_cmplte
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279265
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Fri, 19 Aug 2016 15:40:44 +0000 (15:40 +0000)]
[InstCombine] use m_APInt to allow icmp X, C folds for splat constant vectors
Of course, we really need to refactor and fix all of the cmp predicates,
but this one is interesting because without it, we later perform an
information-losing transform of icmp (shl 1, Y), C, and we can't recover
the better fold.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279263
91177308-0d34-0410-b5e6-
96231b3b80d8
Mehdi Amini [Fri, 19 Aug 2016 15:35:44 +0000 (15:35 +0000)]
[LTO] Remove dead-code: collectUsedGlobalVariables has been moved to Thin and LTO specifc path (NFC)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279261
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Fri, 19 Aug 2016 15:27:28 +0000 (15:27 +0000)]
[InstCombine] add tests for missing vector icmp folds
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279259
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Fri, 19 Aug 2016 15:21:45 +0000 (15:21 +0000)]
[InstCombine] add missing tests for basic icmp folds
These are implicitly included as part of larger test cases, but they don't
exist stand-alone (and don't happen for vectors...).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279257
91177308-0d34-0410-b5e6-
96231b3b80d8
Krzysztof Parzyszek [Fri, 19 Aug 2016 15:17:19 +0000 (15:17 +0000)]
[Hexagon] Make p0 an explicit operand in VA1_clr* subinstructions, NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279255
91177308-0d34-0410-b5e6-
96231b3b80d8
Krzysztof Parzyszek [Fri, 19 Aug 2016 15:13:54 +0000 (15:13 +0000)]
[Hexagon] Add explicit default constructor for HexagonSelectionDAGInfo
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279254
91177308-0d34-0410-b5e6-
96231b3b80d8
Krzysztof Parzyszek [Fri, 19 Aug 2016 15:07:58 +0000 (15:07 +0000)]
Unxfail passing tests on Hexagon
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279252
91177308-0d34-0410-b5e6-
96231b3b80d8
Krzysztof Parzyszek [Fri, 19 Aug 2016 15:02:18 +0000 (15:02 +0000)]
[Hexagon] Allow tail-call optimization when mixing C and fast calling conv
Patch by Arnold Schwaighofer.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279251
91177308-0d34-0410-b5e6-
96231b3b80d8
Krzysztof Parzyszek [Fri, 19 Aug 2016 14:29:43 +0000 (14:29 +0000)]
[Hexagon] Check for empty live interval
Patch by Brendon Cahoon.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279249
91177308-0d34-0410-b5e6-
96231b3b80d8
Krzysztof Parzyszek [Fri, 19 Aug 2016 14:22:07 +0000 (14:22 +0000)]
[Hexagon] Consider zext/sext of a load to i32 to be free
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279248
91177308-0d34-0410-b5e6-
96231b3b80d8
Anton Korobeynikov [Fri, 19 Aug 2016 14:18:34 +0000 (14:18 +0000)]
Revert r279242 - it's failing the tests
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279247
91177308-0d34-0410-b5e6-
96231b3b80d8
Krzysztof Parzyszek [Fri, 19 Aug 2016 14:14:09 +0000 (14:14 +0000)]
[Hexagon] Handle J2_jumptpt and J2_jumpfpt instructions
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279246
91177308-0d34-0410-b5e6-
96231b3b80d8
Krzysztof Parzyszek [Fri, 19 Aug 2016 14:12:51 +0000 (14:12 +0000)]
[Hexagon] Fix indentation, NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279245
91177308-0d34-0410-b5e6-
96231b3b80d8
Krzysztof Parzyszek [Fri, 19 Aug 2016 14:10:57 +0000 (14:10 +0000)]
[Hexagon] Remove unnecessary llvm::, NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279244
91177308-0d34-0410-b5e6-
96231b3b80d8
Krzysztof Parzyszek [Fri, 19 Aug 2016 14:09:47 +0000 (14:09 +0000)]
[Hexagon] Rename the HEXAGON_MC namespace to Hexagon_MC, NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279243
91177308-0d34-0410-b5e6-
96231b3b80d8
Anton Korobeynikov [Fri, 19 Aug 2016 14:07:10 +0000 (14:07 +0000)]
Fix PR27500: on MSP430 the branch destination offset is measured in words, not bytes.
In addition, the branch instructions will have proper BB destinations, not offsets, like before.
Patch by Vadzim Dambrouski!
Differential Revision: https://reviews.llvm.org/D20162
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279242
91177308-0d34-0410-b5e6-
96231b3b80d8
Krzysztof Parzyszek [Fri, 19 Aug 2016 14:04:45 +0000 (14:04 +0000)]
[Hexagon] Mark PS_jumpret as pseudo-instruction, expand it into J2_jumpr
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279241
91177308-0d34-0410-b5e6-
96231b3b80d8
Krzysztof Parzyszek [Fri, 19 Aug 2016 13:34:31 +0000 (13:34 +0000)]
[Hexagon] Improvements to handling and generation of FP instructions
Improved handling of fma, floating point min/max, additional load/store
instructions for floating point types.
Patch by Jyotsna Verma.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279239
91177308-0d34-0410-b5e6-
96231b3b80d8
Benjamin Kramer [Fri, 19 Aug 2016 12:44:24 +0000 (12:44 +0000)]
[LoopVectorize] Don't copy std::vector in for-range loop.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279233
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Fri, 19 Aug 2016 10:51:55 +0000 (10:51 +0000)]
[PM] Revert r279227 and r279228 until I can find someone to help me
solve completely opaque MSVC build errors. It complains about lots of
stuff with this change without givin nearly enough information to even
try to fix.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279231
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Fri, 19 Aug 2016 10:31:53 +0000 (10:31 +0000)]
[X86][SSE] Add support for matching commuted insertps patterns
INSERTPS doesn't fit well with our shuffle mask canonicalization, so we need to attempt both the original mask and the commuted mask to more likely get a match
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279230
91177308-0d34-0410-b5e6-
96231b3b80d8
James Molloy [Fri, 19 Aug 2016 10:10:27 +0000 (10:10 +0000)]
[SimplifyCFG] Rewrite SinkThenElseCodeToEnd
The new version has several advantages:
1) IMSHO it's more readable and neater
2) It handles loads and stores properly
3) It can handle any number of incoming blocks rather than just two. I'll be taking advantage of this in a followup patch.
With this change we can now finally sink load-modify-store idioms such as:
if (a)
return *b += 3;
else
return *b += 4;
=>
%z = load i32, i32* %y
%.sink = select i1 %a, i32 5, i32 7
%b = add i32 %z, %.sink
store i32 %b, i32* %y
ret i32 %b
When this works for switches it'll be even more powerful.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279229
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Fri, 19 Aug 2016 09:53:10 +0000 (09:53 +0000)]
[PM] Fix a compile error with GCC. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279228
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Fri, 19 Aug 2016 09:45:16 +0000 (09:45 +0000)]
[PM] Make the the new pass manager support fully generic extra arguments
to run methods, both for transform passes and analysis passes.
This also allows the analysis manager to use a different set of extra
arguments from the pass manager where useful. Consider passes over
analysis produced units of IR like SCCs of the call graph or loops.
Passes of this nature will often want to refer to the analysis result
that was used to compute their IR units (the call graph or LoopInfo).
And for transformations, they may want to communicate special update
information to the outer pass manager. With this change, it becomes
possible to have a run method for a loop pass that looks more like:
PreservedAnalyses run(Loop &L, AnalysisManager<Loop, LoopInfo> &AM,
LoopInfo &LI, LoopUpdateRecord &UR);
And to query the analysis manager like:
AM.getResult<MyLoopAnalysis>(L, LI);
This makes accessing the known-available analyses convenient and clear,
and it makes passing customized data structures around easy.
My initial use case is going to be in updating the pass manager layers
when the analysis units of IR change. But there are more use cases here
such as having a layer that lets inner passes signal whether certain
additional passes should be run because of particular simplifications
made. Two desires for this have come up in the past: triggering
additional optimization after successfully unrolling loops, and
triggering additional inlining after collapsing indirect calls to direct
calls.
Despite adding this layer of generic extensibility, the *only* change to
existing, simple usage are for places where we forward declare the
AnalysisManager template. We really shouldn't be doing this because of
the fragility exposed here, but currently it makes coping with the
legacy PM code easier.
Differential Revision: http://reviews.llvm.org/D21462
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279227
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Fri, 19 Aug 2016 09:26:00 +0000 (09:26 +0000)]
[PM] Try to work-around what appears to be an MSVC SFINAE issue with
r279217 where it fails to select the path that other compilers select.
The workaround won't be as careful to produce an error when an analysis
result is incorrect, but we can rely on non-MSVC builds to catch such
errors it seems and MSVC doesn't seem to support the alternative
techniques.
Hoping this brings the windows bots back to life. If not, will have to
revert all of this.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279225
91177308-0d34-0410-b5e6-
96231b3b80d8
James Molloy [Fri, 19 Aug 2016 08:38:50 +0000 (08:38 +0000)]
[CodeGen] Fix a trivial type conversion bug dating back to pre-2008
The heuristic above this code is incredibly suspect, but disregarding that it mutates the cast opcode so we need to check the *mutated* opcode later to see if we need to emit an AssertSext or AssertZext node.
Fixes PR29041.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279223
91177308-0d34-0410-b5e6-
96231b3b80d8
Vitaly Buka [Fri, 19 Aug 2016 08:33:53 +0000 (08:33 +0000)]
[asan] Fix size of shadow incorrectly calculated in r279178
Summary: r279178 generates 8 times more stores than necessary.
Reviewers: eugenis
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D23708
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279222
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Fri, 19 Aug 2016 08:31:47 +0000 (08:31 +0000)]
[PM] NFC refactoring: remove the AnalysisManagerBase class, folding it
into the AnalysisManager class template.
Back when I first added this base class there were separate analysis
managers and some plausible reason why it would be a useful factoring of
common code between them. However, after a lot of refactoring cleaning,
we now have *entirely* shared code. The base class was just an arbitrary
division between code in one class template and a separate class
template. It didn't add anything and forced lots of indirection through
"derived_this" for no real gain.
We can always factor a base CRTP class out with common code if there is
ever some *other* analysis manager that wants to share a subset of
logic. But for now, folding things into the primary template is
a non-trivial simplification with no down sides I see. It shortens the
code considerably, removes an unhelpful abstraction, and will make
subsequent patches *dramatically* less complex which enhance the
analysis manager infrastructure to effectively cope with invalidation.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279221
91177308-0d34-0410-b5e6-
96231b3b80d8
Vassil Vassilev [Fri, 19 Aug 2016 08:30:42 +0000 (08:30 +0000)]
[modules] Add missing include.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279219
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Fri, 19 Aug 2016 07:49:23 +0000 (07:49 +0000)]
[PM] Redesign how the new PM detects whether an analysis result provides
its own invalidate method.
Previously, the technique would assume that if a result didn't have an
invalidate method that didn't exactly match the expected signature it
didn't have one at all. This is in fact not the case. And we had
analyses with incorrect signatures for the invalidate method in the
tree that would be erroneously invalidated in certain cases! Yikes.
Moreover a result might legitimately want to have multiple overloads for
the invalidate method, and if one changes or a new one is needed we
again really want a compiler error. For example in the tree we had not
added the overload for a *function* IR unit to the invalidate routine
for TLI. Doh.
So a new techique for the SFINAE detection here: if the result has *any*
member spelled "invalidate" we turn off the synthesis of a default
version. We don't care if it is a member function or a member variable
or how many overloads there are. Once a result has something by that
name it must provide suitable overloads for the contexts in which it is
used. This seems much more resilient and durable.
Huge props to Richard Smith who helped me figure out how on earth we
could even do this in C++. It took quite some doing. The technique is
remarkably clean however, and merely requires that the analysis results
are not *final* classes. I think that's a requirement we can live with
even if it is a bit odd.
I've fixed the two bad in-tree analysis results. And this will make my
next change which changes the API for invalidate much easier to
validate as correct.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279217
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Fri, 19 Aug 2016 07:49:19 +0000 (07:49 +0000)]
[PM] Rework the new PM support for building the ModuleSummaryIndex to
directly produce the index as the value type result.
This requires making the index movable which is straightforward. It
greatly simplifies things by allowing us to completely avoid the builder
API and the layers of abstraction inherent there. Instead both pass
managers can directly construct these when run by value. They still
won't be constructed truly eagerly thanks to the optional in the legacy
PM. The code that directly builds the index can also just share a direct
function.
A notable change here is that the result type of the analysis for the
new PM is no longer a reference type. This was really problematic when
making changes to how we handle result types to make our interface
requirements *much* more strict and precise. But I think this is an
overall improvement.
Differential Revision: https://reviews.llvm.org/D23701
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279216
91177308-0d34-0410-b5e6-
96231b3b80d8
NAKAMURA Takumi [Fri, 19 Aug 2016 06:44:44 +0000 (06:44 +0000)]
Fix tests in llvm/test/tools/gold/X86 to satisfy r279014.
They would unexpectedly pass if test/tools/gold/X86/Output had outputs of previous tests.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279214
91177308-0d34-0410-b5e6-
96231b3b80d8
Xinliang David Li [Fri, 19 Aug 2016 06:31:45 +0000 (06:31 +0000)]
[Profile] Fix edge count read bug
Use uint64_t to avoid value truncation before scaling.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279213
91177308-0d34-0410-b5e6-
96231b3b80d8
Mehdi Amini [Fri, 19 Aug 2016 06:10:03 +0000 (06:10 +0000)]
[LTO] Move callback member from base class to the derived where it is used (NFC)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279212
91177308-0d34-0410-b5e6-
96231b3b80d8
Mehdi Amini [Fri, 19 Aug 2016 06:06:18 +0000 (06:06 +0000)]
Constify some path in the bitcode writer (NFC)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279211
91177308-0d34-0410-b5e6-
96231b3b80d8
Mehdi Amini [Fri, 19 Aug 2016 05:56:37 +0000 (05:56 +0000)]
[LTO] Add a move to inialize member in ctor initialization list (NFC)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279210
91177308-0d34-0410-b5e6-
96231b3b80d8
Xinliang David Li [Fri, 19 Aug 2016 05:31:33 +0000 (05:31 +0000)]
[Profile] Simple code refactoring for reuse /NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279209
91177308-0d34-0410-b5e6-
96231b3b80d8
Dean Michael Berris [Fri, 19 Aug 2016 04:44:30 +0000 (04:44 +0000)]
[XRay] Synthesize a reference to the xray_instr_map
Without the synthesized reference to a symbol in the xray_instr_map,
linker section garbage collection will helpfully remove the whole
xray_instr_map section from the final executable (or archive). This will
cause the runtime to not be able to identify the sleds and hot-patch the
calls/jumps into the runtime trampolines.
This change adds a reference from the text section at the end of the
function to keep around the associated xray_instr_map section as well.
We also make sure that we catch this reference in the test.
Reviewers: chandlerc, echristo, majnemer, mehdi_amini
Subscribers: mehdi_amini, llvm-commits, dberris
Differential Revision: https://reviews.llvm.org/D23398
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279204
91177308-0d34-0410-b5e6-
96231b3b80d8
Lang Hames [Fri, 19 Aug 2016 03:12:16 +0000 (03:12 +0000)]
[RuntimeDyld][MCJIT] Un-XFAIL some tests that were fixed by r279182.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279201
91177308-0d34-0410-b5e6-
96231b3b80d8
Matthias Braun [Fri, 19 Aug 2016 03:03:24 +0000 (03:03 +0000)]
Revert "RegScavenging: Add scavengeRegisterBackwards()"
The ppc64 multistage bot fails on this.
This reverts commit r279124.
Also Revert "CodeGen: Add/Factor out LiveRegUnits class; NFCI" because it depends on the previous change
This reverts commit r279171.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279199
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Fri, 19 Aug 2016 02:07:51 +0000 (02:07 +0000)]
[ADT] Add the worlds simplest STL extra. Or at least close to it.
This is a little class template that just builds an inheritance chain of
empty classes. Despite how simple this is, it can be used to really
nicely create ranked overload sets. I've added a unittest as much to
document this as test it. You can pass an object of this type as an
argument to a function overload set an it will call the first viable and
enabled candidate at or below the rank of the object.
I'm planning to use this in a subsequent commit to more clearly rank
overload candidates used for SFINAE. All credit for this technique and
both lines of code here to Richard Smith who was helping me rewrite the
SFINAE check in question to much more effectively capture the intended
set of checks.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279197
91177308-0d34-0410-b5e6-
96231b3b80d8
Lang Hames [Fri, 19 Aug 2016 01:15:39 +0000 (01:15 +0000)]
[RuntimeDyld] Add support for ELF R_ARM_REL32 and R_ARM_GOT_PREL.
Patch by William Dillon. Thanks William!
This patch adds support for the R_ARM_REL32 and R_ARM_GOT_PREL ELF ARM
relocations to RuntimeDyld, which should allow JITing of code that
produces these relocations.
No test case: Unfortunately RuntimeDyldELF's GOT building mechanism (which
uses a separate section for GOT entries) isn't compatible with
RuntimeDyldChecker. The correct fix for this is to fix RuntimeDyldELF's GOT
support (it's fundamentally broken at the moment: separate sections aren't
guaranteed to be in range of a GOT entry load), but that's a non-trivial job.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279182
91177308-0d34-0410-b5e6-
96231b3b80d8
Vitaly Buka [Thu, 18 Aug 2016 23:51:15 +0000 (23:51 +0000)]
[asan] Optimize store size in FunctionStackPoisoner::poisonRedZones
Summary: Reduce store size to avoid leading and trailing zeros.
Reviewers: kcc, eugenis
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D23648
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279178
91177308-0d34-0410-b5e6-
96231b3b80d8
Andrew Kaylor [Thu, 18 Aug 2016 22:49:51 +0000 (22:49 +0000)]
Include X86CallFrameOptimization in the opt-bisect process.
Differential Revision: https://reviews.llvm.org/D23683
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279175
91177308-0d34-0410-b5e6-
96231b3b80d8
Saleem Abdulrasool [Thu, 18 Aug 2016 22:35:06 +0000 (22:35 +0000)]
AArch64: remove extraneous padding
The structs BarrierOp, PrefetchOp, PSBHintOp are in AArch64AsmParser.cpp
(inside anonymous namespace). This diff changes the order of fields and
removes the excessive padding (8 bytes).
Patch by Alexander Shaposhnikov!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279173
91177308-0d34-0410-b5e6-
96231b3b80d8
Chris Bieneman [Thu, 18 Aug 2016 22:18:11 +0000 (22:18 +0000)]
[CMake] Add variables for tracking which runtimes are included
This allows sub-projects to have conditionals based on the presence of other projects.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279172
91177308-0d34-0410-b5e6-
96231b3b80d8
Matthias Braun [Thu, 18 Aug 2016 22:11:28 +0000 (22:11 +0000)]
CodeGen: Add/Factor out LiveRegUnits class; NFCI
This is a set of register units intended to track register liveness, it
is similar in spirit to LivePhysRegs.
You can also think of this as the liveness tracking parts of the
RegisterScavenger factored out into an own class.
This was proposed in http://llvm.org/PR27609
Differential Revision: http://reviews.llvm.org/D21916
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@279171
91177308-0d34-0410-b5e6-
96231b3b80d8