Commit Graph

136766 Commits

Author SHA1 Message Date
Artem Belevich
e10646be3b [NVPTX] Use untyped (.b) integer registers in PTX.
This bring LLVM-generated PTX closer to what nvcc generates and avoids
triggering issues in ptxas.

For instance, ptxas does not accept .s16 (or .u16) registers as operands
for .fp16 instructions.

Differential Revision: https://reviews.llvm.org/D23460

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278568 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-12 22:02:19 +00:00
Saleem Abdulrasool
d20e86ca8f gold: add a cast to appease std::max NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278567 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-12 21:56:12 +00:00
Teresa Johnson
5385053dc4 [PM] BitcodeWriterPass should derive from PassInfoMixin
Summary:
The BitcodeWriterPass was ported a couple years ago, and predates the
PassInfoMixin. Make BitcodeWriterPass from that base class.

Should BitcodeWriterPass be added to the PassRegistry.def file? It seems
like that is only for passes that can be added arbitrarily, e.g. via the
-passes flag to the opt tool. Whereas the bitcode writer is added
specially based on the output type (and requires an output stream and
other parameters). For now I have left it out of the PassRegistry, but
let me know if it should go there.

Finally, I was considering an NFC change of the legacy WriteBitcodePass
to BitcodeWriterLegacyPass to make its usage clearer and more consistent
with other legacy passes. WDYT?

Reviewers: mehdi_amini

Subscribers: llvm-commits

Differential Revision: https://reviews.llvm.org/D23465

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278566 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-12 21:33:36 +00:00
David L Kreitzer
43fb2934be Fixed typo.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278565 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-12 21:06:53 +00:00
Krzysztof Parzyszek
9d016efde2 [Hexagon] Cleanup and standardize vector load/store pseudo instructions
Remove the following single-vector load/store pseudo instructions, use real
instructions instead:
  LDriv_pseudo_V6         STriv_pseudo_V6
  LDriv_pseudo_V6_128B    STriv_pseudo_V6_128B
  LDrivv_indexed          STrivv_indexed
  LDrivv_indexed_128B     STrivv_indexed_128B

Rename the double-vector load/store pseudo instructions, add unaligned
counterparts:

  -- old --               -- new --            -- unaligned --
  LDrivv_pseudo_V6        PS_vloadrw_io        PS_vloadrwu_io
  LDrivv_pseudo_V6_128B   PS_vloadrw_io_128B   PS_vloadrwu_io_128B
  STrivv_pseudo_V6        PS_vstorerw_io       PS_vstorerwu_io
  STrivv_pseudo_V6_128B   PS_vstorerw_io_128   PS_vstorerwu_io_128


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278564 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-12 21:05:05 +00:00
Kostya Serebryany
45edca1acf [libFuzzer] fix typo in docs
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278563 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-12 20:42:24 +00:00
Eli Friedman
7c00a88956 [AArch64LoadStoreOptimizer] Check aliasing correctly when creating paired loads/stores.
The existing code accidentally skipped the aliasing check in edge cases.

Differential revision: https://reviews.llvm.org/D23372



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278562 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-12 20:39:51 +00:00
Mike Aizatsky
a7eb97f818 [AArch64] Registering default MCInstrAnalysis
Even in this form it is useful: it can detect branch instructions.

https://github.com/google/sanitizers/issues/706

Subscribers: aemerson, rengolin

Differential Revision: https://reviews.llvm.org/D23426

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278560 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-12 20:28:05 +00:00
Eli Friedman
12a703d227 [AArch64LoadStoreOpt] Handle offsets correctly for post-indexed paired loads.
Trunk would try to create something like "stp x9, x8, [x0], #512", which isn't actually a valid instruction.

Differential revision: https://reviews.llvm.org/D23368



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278559 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-12 20:28:02 +00:00
Chris Bieneman
718ae236bb Remove autoconf references from LICENSE.TXT
Since we don't actually have the autoconf subdirectories anymore, we don't need this reference here.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278558 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-12 20:11:03 +00:00
Kevin Enderby
296471b040 Next set of additional error checks for invalid Mach-O files.
This contains the two missing checks for LC_SEGMENT load command fields.
And checks for the Mach-O sections fields that would make them invalid.

With the new checks, some of the existing malformed file checks now trips one
of these instead of the issue it was having before so those tests were adjusted.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278557 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-12 20:10:25 +00:00
Mike Aizatsky
f5a4670068 [sancov] test file cleanup
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278556 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-12 20:06:32 +00:00
Mike Aizatsky
fd3780bb83 [sancov] MachO indirect symbols support.
Differential Revision: https://reviews.llvm.org/D23338

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278551 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-12 19:25:59 +00:00
Tim Shen
ea5bf34626 [PPC] Memoize getValueBits. NFC.
Summary: It triggers exponential behavior when the DAG has many branches.

Reviewers: hfinkel, kbarton

Subscribers: iteratee, nemanjai, echristo

Differential Revision: https://reviews.llvm.org/D23428

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278548 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-12 18:40:04 +00:00
Benjamin Kramer
c94acb05ee [WebAssembly] Plug MachineMemOperand leaks.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278545 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-12 18:33:50 +00:00
Dan Liew
a3e4fd51f1 [LibFuzzer] Fix -jobs=<N> where <N> > 1 and the number of workers is > 1 on macOS.
The original `ExecuteCommand()` called `system()` from the C library.
The C library implementation of this on macOS contains a mutex which
serializes calls to `system()`. This prevented the `-jobs=` flag
from running copies of the fuzzing binary in parallel which is
the opposite of what is intended.

To fix this on macOS an alternative implementation of `ExecuteCommand()`
is provided that can be used concurrently. This is provided in
`FuzzerUtilDarwin.cpp` which is guarded to only compile code on Apple
platforms. The existing implementation has been moved to a new file
`FuzzerUtilLinux.cpp` which is guarded to only compile code on Linux.

This commit includes a simple test to check that LibFuzzer is being
executed in parallel when requested.

Differential Revision: https://reviews.llvm.org/D22742

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278544 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-12 18:29:36 +00:00
Duncan P. N. Exon Smith
3d3a4a49ab ADT: Remove stale header comments about next/prev after r278532
Thanks to Mehdi for noticing.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278542 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-12 18:14:42 +00:00
Duncan P. N. Exon Smith
f74d382784 Hide type trait from r278532 from MSVC
The fixup from r278537 was insufficient.  Just #ifdef it out for MSVC.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278539 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-12 18:10:29 +00:00
Duncan P. N. Exon Smith
a33b92eb82 Try to appease win7 bots after r278532 by cleaning up type trait
The HasGetNext type trait was cluttered with a few things it didn't
need.  Try to clean it up, hoping to fix windows bots:
  http://lab.llvm.org:8011/builders/lld-x86_64-win7/builds/38063

I may just have to delete the trait...

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278537 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-12 17:54:54 +00:00
David Majnemer
fa2e422f92 Remove whitespace
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278536 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-12 17:53:06 +00:00
Duncan P. N. Exon Smith
6394023d1d ADT: Remove the ilist_nextprev_traits customization point
No one is using the capability to implement next and prev another way
(since lld stopped doing it in r278468).  Remove the customization point
by moving the API from ilist_nextprev_traits<T> to ilist_node_access.

The old traits class is still useful/necessary API as a target for
friends of node types that inherit privately from ilist_node.
Eventually I plan to either remove it entirely or move the template
parameters to the methods.

(Note: if there's desire to bring back customization of next/prev
pointers in the future (e.g., to pack some bits in there), I think a
traits class like this is an awkward way to accomplish it.  Instead, we
should change ilist<T> to be ilist<ilist_node<T>>, and give an extra
template parameter to ilist_node.)

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278532 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-12 17:32:34 +00:00
Michael Kuperstein
69f04075f8 [PM] Port LowerInvoke to the new pass manager
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278531 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-12 17:28:27 +00:00
Pete Cooper
a6bfa5e034 constify InstCombine::foldAllocaCmp. NFC.
This is part of an effort to constify ValueTracking.cpp.  This change is
to methods which need const Value* instead of Value* to go with the upcoming
changes to ValueTracking.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278528 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-12 17:13:28 +00:00
Dehao Chen
126e4c2d97 Fine tuning of sample profile propagation algorithm.
Summary: The refined propagation algorithm is more accurate and robust.

Reviewers: davidxl, dnovillo

Subscribers: llvm-commits

Differential Revision: https://reviews.llvm.org/D23224

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278522 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-12 16:22:12 +00:00
Artur Pilipenko
0ac09cb9b3 [x86] X86ISelLowering zext(add_nuw(x, C)) --> add(zext(x), C_zext)
Currently X86ISelLowering has a similar transformation for sexts:
sext(add_nsw(x, C)) --> add(sext(x), C_sext)

In this change I extend this code to handle zexts as well.

Reviewed By: spatel

Differential Revision: https://reviews.llvm.org/D23359


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278520 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-12 16:08:30 +00:00
Ehsan Amiri
a3c080381b [BasicAA] Avoid calling GetUnderlyingObject, when the result of a previous call can be reused.
Recursive calls to aliasCheck from alias[GEP|Select|PHI] may result in a second call to GetUnderlyingObject for a Value, whose underlying object is already computed. This patch ensures that in this situations, the underlying object is not computed again, and the result of the previous call is resued.

https://reviews.llvm.org/D22305



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278519 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-12 16:05:03 +00:00
Artur Pilipenko
e5ae839357 [LVI] Take guards into account
Teach LVI to gather control dependant constraints from guards.

Reviewed By: sanjoy

Differential Revision: https://reviews.llvm.org/D23358


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278518 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-12 15:52:23 +00:00
Teresa Johnson
c6f72e4c41 Add move ops to satisfy MSVC.
Try to appease Windows bots after r278508:
http://lab.llvm.org:8011/builders/sanitizer-windows/builds/27250
http://lab.llvm.org:8011/builders/clang-x64-ninja-win7/builds/14776

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278517 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-12 15:39:26 +00:00
Geoff Berry
67a14c076f [AArch64] Re-factor code shared by AArch64LoadStoreOpt and AArch64InstrInfo.
This re-factoring could cause the following slight changes in generated
code, though none were observed during testing:

- MachineScheduler could decide not to cluster some loads/stores if
  there are other load/stores with non-pairable opcodes that have the
  same base register and offset as a pairable set of load/stores.  One
  case of different MachineScheduler pairing did show up in my testing,
  but it wasn't due to this issue, but due
  BaseMemOpClusterMutation::clusterNeighboringMemOps() being unstable
  w.r.t. the order it considers memory operations.  See PR28942.

- The ImplicitNullChecks optimization could be done for more load/store
  opcodes.  This optimization isn't done for C/C++ code, so it didn't
  show up in my testing.

Reviewers: mcrosier, t.p.northover

Subscribers: aemerson, rengolin, mcrosier, llvm-commits

Differential Revision: https://reviews.llvm.org/D23365

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278515 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-12 15:26:00 +00:00
Artur Pilipenko
e18f64c54a [LVI] Fix potential memory corruption in getValueFromCondition
Rewrite Visited[Cond] = getValueFromConditionImpl(..., Visited) statement which can lead to a memory corruption since getValueFromConditionImpl changes Visited map and invalidates the iterators.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278514 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-12 15:08:15 +00:00
Duncan P. N. Exon Smith
3e97be26b9 ADT: Share code for embedded sentinel traits, NFC
Share code for the (mostly problematic) embedded sentinel traits.
- Move the LLVM_NO_SANITIZE("object-size") attribute to
  ilist_half_embedded_sentinel_traits and ilist_embedded_sentinel_traits
  (previously it spread throughout the code duplication).
- Add an ilist_full_embedded_sentinel_traits which has no UB (but has
  the downside of storing the complete node).
- Replace all the custom sentinel traits in LLVM with a declaration of
  ilist_sentinel_traits that inherits from one of the embedded sentinel
  traits classes.

There are still custom sentinel traits in other LLVM subprojects.  I'll
remove those in a follow-up.

Nothing at all should be changing here, this is just rearranging code.
Note that the final goal here is to remove the sentinel traits
altogether, settling on the memory layout of
ilist_half_embedded_sentinel_traits without the UB.  This intermediate
step moves the logic into ilist.h.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278513 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-12 15:00:55 +00:00
Teresa Johnson
18ff139eea Fix type to avoid problems on 32-bit builds
lto::InputFile::Symbol::getCommonSize should return uint64_t instead of
size_t since it is returning the result of DataLayout::getTypeAllocSize
which returns uint64_t, and the result of getCommonSize is assigned to a
uint64_t variable. On 32-bit builds size_t is unsigned int and there are
type errors. This was introduced in r278338.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278512 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-12 14:55:43 +00:00
James Y Knight
396941b5b3 Revert "[Sparc] Leon errata fix passes."
...and the two followup commits:
Revert "[Sparc][Leon] Missed resetting option flags from check-in 278489."
Revert "[Sparc][Leon] Errata fixes for various errata in different
versions of the Leon variants of the Sparc 32 bit processor."

This reverts commit r274856, r278489, and r278492.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278511 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-12 14:48:09 +00:00
Teresa Johnson
7be175919a [PM] Port NameAnonFunction pass to new pass manager
Summary:
Port the NameAnonFunction pass and add a test.

Depends on D23439.

Reviewers: mehdi_amini

Subscribers: llvm-commits, mehdi_amini

Differential Revision: https://reviews.llvm.org/D23440

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278509 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-12 14:03:36 +00:00
Teresa Johnson
3143f33d96 [PM] Port ModuleSummaryIndex analysis to new pass manager
Summary:
Port the ModuleSummaryAnalysisWrapperPass to the new pass manager.
Use it in the ported BitcodeWriterPass (similar to how we use the
legacy ModuleSummaryAnalysisWrapperPass in the legacy WriteBitcodePass).

Also, pass the -module-summary opt flag through to the new pass
manager pipeline and through to the bitcode writer pass, and add
a test that uses it.

Reviewers: mehdi_amini

Subscribers: llvm-commits, mehdi_amini

Differential Revision: https://reviews.llvm.org/D23439

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278508 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-12 13:53:02 +00:00
Simon Pilgrim
3951c48624 [X86][SSE] Add support for combining target shuffles to PSLLDQ/PSRLDQ byte shifts
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278502 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-12 11:24:34 +00:00
Krzysztof Parzyszek
4502b2e1ab [Hexagon] Standardize pseudo-instructions for calls and returns
- CALLv3nr        PS_call_nr
- CALLRv3nr       PS_callr_nr
- CALLstk         PS_call_stk

- TCRETURNi       PS_tailcall_i
- TCRETURNr       PS_tailcall_r

- JMPret          PS_jmpret
- JMPrett         PS_jmprett
- JMPretf         PS_jmpretf
- JMPrettnew      PS_jmprettnew
- JMPretfnew      PS_jmpretfnew
- JMPrettnewpt    PS_jmprettnewpt
- JMPretfnewpt    PS_jmpretfnewpt


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278499 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-12 11:12:02 +00:00
Krzysztof Parzyszek
a8e8317d69 [Hexagon] Treat non-returning indirect calls as scheduling boundaries
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278498 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-12 11:01:10 +00:00
Artur Pilipenko
38a5bdc3be [LVI] Take range metadata into account while calculating icmp condition constraints
Take range metadata into account for conditions like this:

%length = load i32, i32* %length_ptr, !range !{i32 0, i32 2147483647}
%cmp = icmp ult i32 %a, %length

This is a common pattern for range checks where the length of the array is dynamically loaded.

Reviewed By: sanjoy

Differential Revision: https://reviews.llvm.org/D23267


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278496 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-12 10:14:11 +00:00
Benjamin Kramer
a4d5334736 [Webassembly] disable unstable test.
It reads uninitialized memory and crashes randomly.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278495 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-12 10:13:45 +00:00
Simon Pilgrim
f811c0f4a2 [X86][SSE] Fixed PALIGNR target shuffle decode
The PALIGNR target shuffle decode was not taking into account that DecodePALIGNRMask (rather oddly) expects the operands to be in reverse order, nor was it detecting unary patterns, causing combines to combine with the incorrect input.

The cgbuiltin, auto upgrade and instruction comments code correctly swap the operands so are not affected.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278494 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-12 10:10:51 +00:00
Artur Pilipenko
a6da8aab67 [LVI] Handle any predicate in comparisons like icmp <pred> (add Val, Offset), ...
Currently LVI can only gather value constraints from comparisons like:

* icmp <pred> Val, ...
* icmp ult (add Val, Offset), ...

In fact we can handle any predicate in latter comparisons.

Reviewed By: sanjoy

Differential Revision: https://reviews.llvm.org/D23357


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278493 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-12 10:05:11 +00:00
Chris Dewhurst
6af6409f90 [Sparc][Leon] Missed resetting option flags from check-in 278489.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278492 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-12 09:54:39 +00:00
Chris Dewhurst
85f3311cd5 [Sparc][Leon] Errata fixes for various errata in different versions of the Leon variants of the Sparc 32 bit processor.
The nature of the errata are listed in the comments preceding the errata fix passes. Relevant unit tests are implemented for each of these.

These changes update older versions of these errata fixes with improvements to code and unit tests.

Differential Revision: https://reviews.llvm.org/D21960

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278489 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-12 09:34:26 +00:00
Benjamin Kramer
94e4f70d0e [Coroutines] Move class into anonymous namespace.
Hopefully fixes visibility warnings from GCC. No functionality change.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278485 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-12 08:47:13 +00:00
Haicheng Wu
2790d230b8 Revert "[BranchFolding] Restrict tail merging loop blocks after MBP"
This reverts commit r278463 because it hits the bot.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278484 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-12 08:40:24 +00:00
Gor Nishanov
b6ae34d909 [Coroutines]: Part6b: Add coro.id intrinsic.
Summary:
1. Make coroutine representation more robust against optimization that may duplicate instruction by introducing coro.id intrinsics that returns a token that will get fed into coro.alloc and coro.begin. Due to coro.id returning a token, it won't get duplicated and can be used as reliable indicator of coroutine identify when a particular coroutine call gets inlined.
2. Move last three arguments of coro.begin into coro.id as they will be shared if coro.begin will get duplicated.
3. doc + test + code updated to support the new intrinsic.

Reviewers: mehdi_amini, majnemer

Subscribers: mehdi_amini, llvm-commits

Differential Revision: https://reviews.llvm.org/D23412

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278481 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-12 05:45:49 +00:00
Duncan P. N. Exon Smith
21bcd75d9b ADT: Remove all ilist_iterator => pointer casts, NFC
Remove all ilist_iterator to pointer casts.  There were two reasons for
casts:

  - Checking for an uninitialized (i.e., null) iterator.  I added
    MachineInstrBundleIterator::isValid() to check for that case.

  - Comparing an iterator against the underlying pointer value while
    avoiding converting the pointer value to an iterator.  This is
    occasionally necessary in MachineInstrBundleIterator, since there is
    an assertion in the constructors that the underlying MachineInstr is
    not bundled (but we don't care about that if we're just checking for
    pointer equality).

To support the latter case, I rewrote the == and != operators for
ilist_iterator and MachineInstrBundleIterator.

  - The implicit constructors now use enable_if to exclude
    const-iterator => non-const-iterator conversions from overload
    resolution (previously it was a compiler error on instantiation, now
    it's SFINAE).

  - The == and != operators are now global (friends), and are not
    templated.

  - MachineInstrBundleIterator has overloads to compare against both
    const_pointer and const_reference.  This avoids the implicit
    conversions to MachineInstrBundleIterator that assert, instead just
    checking the address (and I added unit tests to confirm this).

Notably, the only remaining uses of ilist_iterator::getNodePtrUnchecked
are in ilist.h, and no code outside of ilist*.h directly relies on this
UB end-iterator-to-pointer conversion anymore.  It's still needed for
ilist_*sentinel_traits, but I'll clean that up soon.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278478 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-12 05:05:36 +00:00
David Majnemer
7e45eb5f3f Use the range variant of transform instead of unpacking begin/end
No functionality change is intended.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278477 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-12 04:32:45 +00:00
David Majnemer
ac0eb3d821 Use the range variant of transform instead of unpacking begin/end
No functionality change is intended.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@278476 91177308-0d34-0410-b5e6-96231b3b80d8
2016-08-12 04:32:42 +00:00