]> granicus.if.org Git - llvm/log
llvm
8 years ago[SmallPtrSet] Introduce a find primitive and rewrite count/erase in terms of it
Philip Reames [Sat, 31 Dec 2016 02:33:22 +0000 (02:33 +0000)]
[SmallPtrSet] Introduce a find primitive and rewrite count/erase in terms of it

This was originally motivated by a compile time problem I've since figured out how to solve differently, but the cleanup seemed useful. We had the same logic - which essentially implemented find - in several places. By commoning them out, I can implement find and allow erase to be inlined at the call sites if profitable.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290779 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[AVR] Optimize 16-bit ANDs with '1'
Dylan McKay [Sat, 31 Dec 2016 01:07:14 +0000 (01:07 +0000)]
[AVR]  Optimize 16-bit ANDs with '1'

Summary: Fixes PR 31345

Reviewers: dylanmckay

Subscribers: fhahn, llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290778 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[InstCombine][AVX-512] Teach InstCombine that llvm.x86.avx512.vcomi.sd and llvm.x86...
Craig Topper [Sat, 31 Dec 2016 00:45:06 +0000 (00:45 +0000)]
[InstCombine][AVX-512] Teach InstCombine that llvm.x86.avx512.vcomi.sd and llvm.x86.avx512.vcomi.ss don't use the upper elements of their input.

This was already done for the SSE/SSE2 version of the intrinsics.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290776 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[InstCombine][AVX-512] When turning intrinsics with masking into native IR, don't...
Craig Topper [Fri, 30 Dec 2016 23:06:28 +0000 (23:06 +0000)]
[InstCombine][AVX-512] When turning intrinsics with masking into native IR, don't emit a select if the mask is known to be all ones.

This saves InstCombine the burden of having to optimize the select later.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290774 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[X86][AVX512DQ] Add truncated math tests for AVX512DQ.
Simon Pilgrim [Fri, 30 Dec 2016 22:43:41 +0000 (22:43 +0000)]
[X86][AVX512DQ] Add truncated math tests for AVX512DQ.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290772 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[X86][SSE] Fix truncated math test names.
Simon Pilgrim [Fri, 30 Dec 2016 22:40:32 +0000 (22:40 +0000)]
[X86][SSE] Fix truncated math test names.

Inconsistent naming convention and wrong name for some input/output types.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290771 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[X86][AVX512] Regenerate test - missing shuffle comments
Simon Pilgrim [Fri, 30 Dec 2016 22:31:33 +0000 (22:31 +0000)]
[X86][AVX512] Regenerate test - missing shuffle comments

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290770 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoAdd a comment for a todo in LoopUnroll post cleanup
Philip Reames [Fri, 30 Dec 2016 22:10:19 +0000 (22:10 +0000)]
Add a comment for a todo in LoopUnroll post cleanup

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290769 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[LVI] Remove count/erase idiom in favor of checking result value of erase
Philip Reames [Fri, 30 Dec 2016 22:09:10 +0000 (22:09 +0000)]
[LVI] Remove count/erase idiom in favor of checking result value of erase

Minor compile time win.  Avoids an additional O(N) scan in the case where we are removing an element and costs nothing when we aren't.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290768 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[doc] Clarify steps for contributors without commit access.
Florian Hahn [Fri, 30 Dec 2016 21:28:30 +0000 (21:28 +0000)]
[doc] Clarify steps for contributors without commit access.

Summary: Update the Phabricator docs to clarify how changes are merged for contributors without commit access.

Reviewers: delcypher, aaron.ballman

Subscribers: aaron.ballman, anmol, llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290767 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoDebugInfo: change the PDB UniqueId type to uint8_t
Saleem Abdulrasool [Fri, 30 Dec 2016 19:42:13 +0000 (19:42 +0000)]
DebugInfo: change the PDB UniqueId type to uint8_t

Since we type-erase the Windows GUID structure, use unsigned bytes
rather than char, which may be signed (-fsigned-char).  NFC

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290765 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[MemDep] Handle gep with zeros for invariant.group
Piotr Padlewski [Fri, 30 Dec 2016 18:45:07 +0000 (18:45 +0000)]
[MemDep] Handle gep with zeros for invariant.group

Summary:
gep 0, 0 is equivalent to bitcast. LLVM canonicalizes it
to getelementptr because it make SROA can then handle it.

Simple case like

    void g(A &a) {
        z(a);
        if (glob)
            a.foo();
    }
    void testG() {
        A a;
        g(a);
    }

was not devirtualized with -fstrict-vtable-pointers because luck of
handling for gep 0 in Memory Dependence Analysis

Reviewers: dberlin, nlewycky, chandlerc

Subscribers: llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290763 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[CVP] Adjust iteration order to reduce the amount of work required
Philip Reames [Fri, 30 Dec 2016 18:00:55 +0000 (18:00 +0000)]
[CVP] Adjust iteration order to reduce the amount of work required

CVP doesn't care about the order of blocks visited, but by using a pre-order traversal over the graph we can a) not visit unreachable blocks and b) optimize as we go so that analysis of later blocks produce slightly more precise results.

I noticed this via inspection and don't have a concrete example which points to the issue.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290760 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[LVI] Manually hoist computation from loop
Philip Reames [Fri, 30 Dec 2016 17:56:47 +0000 (17:56 +0000)]
[LVI] Manually hoist computation from loop

Minor compile time win.  Not known to be a hot spot, just something I noticed while reading.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290759 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoCaught a simple typo. I do not know of a way to test this, but it seems like an unlik...
Aaron Ballman [Fri, 30 Dec 2016 15:57:56 +0000 (15:57 +0000)]
Caught a simple typo. I do not know of a way to test this, but it seems like an unlikely thing to regress in the future.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290757 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[NewGVN] Remove unneeded newline from assertion message.
Davide Italiano [Fri, 30 Dec 2016 15:01:17 +0000 (15:01 +0000)]
[NewGVN] Remove unneeded newline from assertion message.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290755 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[ADT] Fix for compilation error when operator++(int) (post-increment function) of...
Abhilash Bhandari [Fri, 30 Dec 2016 12:34:36 +0000 (12:34 +0000)]
[ADT] Fix for compilation error when operator++(int) (post-increment function) of SmallPtrSetIterator is used.
The bug was introduced in r289619.

Reviewers: Mehdi Amini

Subscribers: llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290749 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[InstCombine] Address post-commit feedback
David Majnemer [Fri, 30 Dec 2016 03:36:17 +0000 (03:36 +0000)]
[InstCombine] Address post-commit feedback

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290741 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoFix test change in r290736: restore index generation
Mehdi Amini [Fri, 30 Dec 2016 01:15:50 +0000 (01:15 +0000)]
Fix test change in r290736: restore index generation

I remove one extra line, but because annoyingly llvm-lit does not
clean the output directory before running the test, it didn't fail
locally (the file was present from a previous run).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290740 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[libFuzzer] cleaner implementation of -print_pcs=1
Kostya Serebryany [Fri, 30 Dec 2016 01:13:07 +0000 (01:13 +0000)]
[libFuzzer] cleaner implementation of -print_pcs=1

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290739 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[LICM] When promoting scalars, allow inserting stores to thread-local allocas.
Michael Kuperstein [Fri, 30 Dec 2016 01:03:17 +0000 (01:03 +0000)]
[LICM] When promoting scalars, allow inserting stores to thread-local allocas.

This is similar to the allocfn case - if an alloca is not captured, then it's
necessarily thread-local.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290738 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoUse continuous boosting factor for complete unroll.
Dehao Chen [Fri, 30 Dec 2016 00:50:28 +0000 (00:50 +0000)]
Use continuous boosting factor for complete unroll.

Summary:
The current loop complete unroll algorithm checks if unrolling complete will reduce the runtime by a certain percentage. If yes, it will apply a fixed boosting factor to the threshold (by discounting cost). The problem for this approach is that the threshold abruptly. This patch makes the boosting factor a function of runtime reduction percentage, capped by a fixed threshold. In this way, the threshold changes continuously.

The patch also simplified the code by reducing one parameter in UP.

The patch only affects code-gen of two speccpu2006 benchmark:

445.gobmk binary size decreases 0.08%, no performance change.
464.h264ref binary size increases 0.24%, no performance change.

Reviewers: mzolotukhin, chandlerc

Subscribers: llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290737 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoReplace test from using llvm-lto to use llvm-link (NFC)
Mehdi Amini [Fri, 30 Dec 2016 00:45:26 +0000 (00:45 +0000)]
Replace test from using llvm-lto to use llvm-link (NFC)

Some incoming changes in ThinLTO will break this test.
Instead of relying on the heuristic to import, we
force the importing to happen with llvm-link.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290736 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[LICM] Remove unneeded tracking of whether changes were made. NFC.
Michael Kuperstein [Fri, 30 Dec 2016 00:43:22 +0000 (00:43 +0000)]
[LICM] Remove unneeded tracking of whether changes were made. NFC.

"Changed" doesn't actually change within the loop, so there's
no reason to keep track of it - we always return false during
analysis and true after the transformation is made.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290735 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[LICM] Make logic in promoteLoopAccessesToScalars easier to follow. NFC.
Michael Kuperstein [Fri, 30 Dec 2016 00:39:00 +0000 (00:39 +0000)]
[LICM] Make logic in promoteLoopAccessesToScalars easier to follow. NFC.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290734 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[InstCombine] More thoroughly canonicalize the position of zexts
David Majnemer [Fri, 30 Dec 2016 00:28:58 +0000 (00:28 +0000)]
[InstCombine] More thoroughly canonicalize the position of zexts

We correctly canonicalized (add (sext x), (sext y)) to (sext (add x, y))
where possible.  However, we didn't perform the same canonicalization
for zexts or for muls.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290733 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[AVR] Optimize 16-bit ORs with '0'
Dylan McKay [Fri, 30 Dec 2016 00:21:56 +0000 (00:21 +0000)]
[AVR] Optimize 16-bit ORs with '0'

Summary: Fixes PR 31344

Authored by Anmol P. Paralkar

Reviewers: dylanmckay

Subscribers: fhahn, llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290732 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoSimplify FunctionLoweringInfo.cpp with range for loops
Reid Kleckner [Fri, 30 Dec 2016 00:21:38 +0000 (00:21 +0000)]
Simplify FunctionLoweringInfo.cpp with range for loops

I'm preparing to add some pattern matching code here, so simplify the
code before I do. NFC

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290731 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoInclude <algorithm> for std::max etc
Reid Kleckner [Fri, 30 Dec 2016 00:15:40 +0000 (00:15 +0000)]
Include <algorithm> for std::max etc

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290730 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[LICM] Compute exit blocks for promotion eagerly. NFC.
Michael Kuperstein [Thu, 29 Dec 2016 23:11:19 +0000 (23:11 +0000)]
[LICM] Compute exit blocks for promotion eagerly. NFC.

This moves the exit block and insertion point computation to be eager,
instead of after seeing the first scalar we can promote.

The cost is relatively small (the computation happens anyway, see discussion
on D28147), and the code is easier to follow, and can bail out earlier
if there's a catchswitch present.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290729 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[LICM] Don't try to promote in loops where we have no chance to promote. NFC.
Michael Kuperstein [Thu, 29 Dec 2016 22:51:22 +0000 (22:51 +0000)]
[LICM] Don't try to promote in loops where we have no chance to promote. NFC.

We would check whether we have a prehader *or* dedicated exit blocks,
and go into the promotion loop. Then, for each alias set we'd check
if we have a preheader *and* dedicated exit blocks, and bail if not.

Instead, bail immediately if we don't have both.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290728 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[LICM] Only recompute LCSSA when we actually promoted something.
Michael Kuperstein [Thu, 29 Dec 2016 22:37:13 +0000 (22:37 +0000)]
[LICM] Only recompute LCSSA when we actually promoted something.

We want to recompute LCSSA only when we actually promoted a value.
This means we only need to look at changes made by promotion when
deciding whether to recompute it or not, not at regular sinking/hoisting.

(This was what the code was documented as doing, just not what it did)

Hopefully NFC.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290726 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoNewGVN: Fix PR 31491 by ensuring that we touch the right instructions. Change to...
Daniel Berlin [Thu, 29 Dec 2016 22:15:12 +0000 (22:15 +0000)]
NewGVN: Fix PR 31491 by ensuring that we touch the right instructions.  Change to one based numbering so we can assert we don't cause the same bug again.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290724 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[Analysis] Remove repeated text from a comment. NFC
Craig Topper [Thu, 29 Dec 2016 21:48:28 +0000 (21:48 +0000)]
[Analysis] Remove repeated text from a comment. NFC

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290723 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoFix indentation in r290716.
Bryant Wong [Thu, 29 Dec 2016 20:05:51 +0000 (20:05 +0000)]
Fix indentation in r290716.

Use two-space indentation like the rest of the file.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290722 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[ADT] Rewrite IntrusiveRefCntPtr's comments. NFC
Justin Lebar [Thu, 29 Dec 2016 19:59:38 +0000 (19:59 +0000)]
[ADT] Rewrite IntrusiveRefCntPtr's comments. NFC

Edit for voice, and also add examples.  In particular, add an
explanation for why you might want to specialize IntrusiveRefCntPtrInfo,
which is not obvious.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290720 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[ADT] Rename RefCountedBase::ref_cnt to RefCount. NFC
Justin Lebar [Thu, 29 Dec 2016 19:59:34 +0000 (19:59 +0000)]
[ADT] Rename RefCountedBase::ref_cnt to RefCount.  NFC

This makes it comply with the LLVM style guide, and also makes it
consistent with ThreadSafeRefCountedBase below.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290719 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[ADT] clang-format IntrusiveRefCntrPtr.h. NFC
Justin Lebar [Thu, 29 Dec 2016 19:59:30 +0000 (19:59 +0000)]
[ADT] clang-format IntrusiveRefCntrPtr.h. NFC

This file had some strange indentation.

Also remove some unnecessary whitespace between one-line member
functions.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290718 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[ADT] Delete RefCountedBaseVPTR.
Justin Lebar [Thu, 29 Dec 2016 19:59:26 +0000 (19:59 +0000)]
[ADT] Delete RefCountedBaseVPTR.

Summary:
This class is unnecessary.

Its comment indicated that it was a compile error to allocate an
instance of a class that inherits from RefCountedBaseVPTR on the stack.
This may have been true at one point, but it's not today.

Moreover you really do not want to allocate *any* refcounted object on
the stack, vptrs or not, so if we did have a way to prevent these
objects from being stack-allocated, we'd want to apply it to regular
RefCountedBase too, obviating the need for a separate RefCountedBaseVPTR
class.

It seems that the main way RefCountedBaseVPTR provides safety is by
making its subclass's destructor virtual.  This may have been helpful at
one point, but these days clang will emit an error if you define a class
with virtual functions that inherits from RefCountedBase but doesn't
have a virtual destructor.

Reviewers: compnerd, dblaikie

Subscribers: cfe-commits, klimek, llvm-commits, mgorny

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290717 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoCorrectly handle multi-lined RUN lines.
Bryant Wong [Thu, 29 Dec 2016 19:32:34 +0000 (19:32 +0000)]
Correctly handle multi-lined RUN lines.

`utils/update_{llc_test,test}_checks` ought to be able to handle RUN commands
that span multiple lines, as shown in the example at
http://llvm.org/docs/CommandGuide/FileCheck.html#the-filecheck-check-prefix-option

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290716 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[ADT] Use memcpy for type punning in MathExtras.
Justin Lebar [Thu, 29 Dec 2016 18:15:34 +0000 (18:15 +0000)]
[ADT] Use memcpy for type punning in MathExtras.

Summary: Previously we type-punned through a union, which is not safe.

Reviewers: rnk

Subscribers: llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290715 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoRevert "[COFF] Use 32-bit jump table entries in .rdata for Win64"
Reid Kleckner [Thu, 29 Dec 2016 17:07:10 +0000 (17:07 +0000)]
Revert "[COFF] Use 32-bit jump table entries in .rdata for Win64"

This reverts commit r290694. It broke sanitizer tests on Win64. I'll
probably bring this back, but the jump tables will just live in .text
like they do for MSVC.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290714 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[TBAAVerifier] Be stricter around verifying scalar nodes
Sanjoy Das [Thu, 29 Dec 2016 15:47:05 +0000 (15:47 +0000)]
[TBAAVerifier] Be stricter around verifying scalar nodes

This fixes the issue exposed in PR31393, where we weren't trying
sufficiently hard to diagnose bad TBAA metadata.

This does reduce the variety in the error messages we print out, but I
think the tradeoff of verifying more, simply and quickly overrules the
need for more helpful error messags here.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290713 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[TBAAVerifier] Make things const-consistent; NFC
Sanjoy Das [Thu, 29 Dec 2016 15:47:01 +0000 (15:47 +0000)]
[TBAAVerifier] Make things const-consistent; NFC

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290712 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[TBAAVerifier] Memoize validity of scalar tbaa nodes; NFCI
Sanjoy Das [Thu, 29 Dec 2016 15:46:57 +0000 (15:46 +0000)]
[TBAAVerifier] Memoize validity of scalar tbaa nodes; NFCI

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290711 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[AMDGPU][mc] Enable absolute expressions in .hsa_code_object_isa directive
Artem Tamazov [Thu, 29 Dec 2016 15:41:52 +0000 (15:41 +0000)]
[AMDGPU][mc] Enable absolute expressions in .hsa_code_object_isa directive

Among other stuff, this allows to use predefined .option.machine_version_major
/minor/stepping symbols in the directive.

Relevant test expanded at once (also file renamed for clarity).

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290710 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoFix documentation generator warnings after rL290708.
Igor Laevsky [Thu, 29 Dec 2016 15:08:57 +0000 (15:08 +0000)]
Fix documentation generator warnings after rL290708.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290709 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoIntroduce element-wise atomic memcpy intrinsic
Igor Laevsky [Thu, 29 Dec 2016 14:31:07 +0000 (14:31 +0000)]
Introduce element-wise atomic memcpy intrinsic

This change adds a new intrinsic which is intended to provide memcpy functionality
with additional atomicity guarantees. Please refer to the review thread
or language reference for further details.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290708 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[InstCombine] Use getVectorNumElements instead of explicitly casting to VectorType...
Craig Topper [Thu, 29 Dec 2016 07:03:18 +0000 (07:03 +0000)]
[InstCombine] Use getVectorNumElements instead of explicitly casting to VectorType and calling getNumElements. NFC

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290707 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[InstCombine] Fix typo in comment. NFC
Craig Topper [Thu, 29 Dec 2016 05:38:31 +0000 (05:38 +0000)]
[InstCombine] Fix typo in comment. NFC

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290706 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[InstCombine] Use a 32-bits instead of 64-bits for storing the number of elements...
Craig Topper [Thu, 29 Dec 2016 04:24:32 +0000 (04:24 +0000)]
[InstCombine] Use a 32-bits instead of 64-bits for storing the number of elements in VectorType for a ShuffleVector. While there getVectorNumElements to avoid an explicit cast. NFC

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290705 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[InstCombine][X86] If the lowest element of a scalar intrinsic isn't used make sure...
Craig Topper [Thu, 29 Dec 2016 03:30:17 +0000 (03:30 +0000)]
[InstCombine][X86] If the lowest element of a scalar intrinsic isn't used make sure we add it to the worklist so we can DCE it sooner.

We bypassed the intrinsic and returned the passthru operand, but we should also add the intrinsic to the worklist since its now dead. This can allow DCE to find it sooner and remove it. Similar was done for InsertElement when the inserted element isn't demanded.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290704 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[libFuzzer] make __sanitizer_cov_trace_switch more predictable
Kostya Serebryany [Thu, 29 Dec 2016 02:50:35 +0000 (02:50 +0000)]
[libFuzzer] make __sanitizer_cov_trace_switch more predictable

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290703 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[InstCombine] Fix some of the AVX-512 scalar arithmetic test cases to do a better...
Craig Topper [Thu, 29 Dec 2016 02:29:04 +0000 (02:29 +0000)]
[InstCombine] Fix some of the AVX-512 scalar arithmetic test cases to do a better job of testing what they intended to test.

The accidentally had trivially dead code. Also needed to adjust the rounding mode to not CUR_DIRECTION so the intrinsics don't get converted to native operations before going through SimplifyDemandedVectorElts.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290702 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoRemove BitstreamWriter::Emit64(), it was never called (NFC)
Mehdi Amini [Thu, 29 Dec 2016 01:40:53 +0000 (01:40 +0000)]
Remove BitstreamWriter::Emit64(), it was never called (NFC)

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290701 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoFix mingw build by moving the static const data member before the bitfields
Reid Kleckner [Thu, 29 Dec 2016 01:14:41 +0000 (01:14 +0000)]
Fix mingw build by moving the static const data member before the bitfields

Apparently GCC targeting Windows breaks bitfields on static data members:
  struct Foo {
    unsigned X : 16;
    static const int M = 42;
    unsigned Y : 16;
  };
  static_assert(sizeof(Foo) == 4, "asdf"); // fails

Who knew.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290700 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoNewGVN: Sort Dominator Tree in RPO order, and use that for generating order.
Daniel Berlin [Thu, 29 Dec 2016 01:12:36 +0000 (01:12 +0000)]
NewGVN: Sort Dominator Tree in RPO order, and use that for generating order.

Summary:
The optimal iteration order for this problem is RPO order. We want to
process as many preds of a backedge as we can before we process the
backedge.

At the same time, as we add predicate handling, we want to be able to
touch instructions that are dominated by a given block by
ranges (because a change in value numbering a predicate possibly
affects all users we dominate that are using that predicate).
If we don't do it this way, we can't do value inference over
backedges (the paper covers this in depth).

The newgvn branch currently overshoots the last part, and guarantees
that it will touch *at least* the right set of instructions, but it
does touch more.  This is because the bitvector instruction ranges are
currently generated in RPO order (so we take the max and the min of
the ranges of dominated blocks, which means there are some in the
middle we didn't have to touch that we did).

We can do better by sorting the dominator tree, and then just using
dominator tree order.

As a preliminary, the dominator tree has some RPO guarantees, but not
enough. It guarantees that for a given node, your idom must come
before you in the RPO ordering. It guarantees no relative RPO ordering
for siblings.  We add siblings in whatever order they appear in the module.

So that is what we fix.

We sort the children array of the domtree into RPO order, and then use
the dominator tree for ordering, instead of RPO, since the dominator
tree is now a valid RPO ordering.

Note: This would help any other pass that iterates a forward problem
in dominator tree order.  Most of them are single pass.  It will still
maximize whatever result they compute.  We could also build the
dominator tree in this order, but our incremental updates would still
put it out of sort order, and recomputing the sort order is almost as
hard as general incremental updates of the domtree.

Also note that the sorting does not affect any tests, etc. Nothing
depends on domtree order, including the verifier, the equals
functions for domtree nodes, etc.

How much could this matter, you ask?
Here are the current numbers.
This is generated by running NewGVN over all files in LLVM.

Note that once we propagate equalities, the differences go up by an
order of magnitude or two (IE instead of 29, the max ends up in the
thousands, since the worst case we add a factor of N, where N is the
number of branch predicates).  So while it doesn't look that stark for
the default ordering, it gets *much much* worse.  There are also
programs in the wild where the difference is already pretty stark
(2 iterations vs hundreds).

RPO ordering:
759040 Number of iterations is 1
112908 Number of iterations is 2

Default dominator tree ordering:
755081 Number of iterations is 1
116234 Number of iterations is 2
   603 Number of iterations is 3
    27 Number of iterations is 4
     2 Number of iterations is 5
     1 Number of iterations is 7

Dominator tree sorted:
759040 Number of iterations is 1
112908 Number of iterations is 2
<yay!>

Really bad ordering (sort domtree siblings in postorder. not quite the
worst possible, but yeah):
754008 Number of iterations is 1
    21 Number of iterations is 10
     8 Number of iterations is 11
     6 Number of iterations is 12
     5 Number of iterations is 13
     2 Number of iterations is 14
     2 Number of iterations is 15
     3 Number of iterations is 16
     1 Number of iterations is 17
     2 Number of iterations is 18
 96642 Number of iterations is 2
     1 Number of iterations is 20
     2 Number of iterations is 21
     1 Number of iterations is 22
     1 Number of iterations is 29
 17266 Number of iterations is 3
  2598 Number of iterations is 4
   798 Number of iterations is 5
   273 Number of iterations is 6
   186 Number of iterations is 7
    80 Number of iterations is 8
    42 Number of iterations is 9

Reviewers: chandlerc, davide

Subscribers: llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290699 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoAdd a static_assert about the sizeof(GlobalValue)
Reid Kleckner [Thu, 29 Dec 2016 00:55:51 +0000 (00:55 +0000)]
Add a static_assert about the sizeof(GlobalValue)

I added one for Value back in r262045, and I'm starting to think we
should have these for any class with bitfields whose memory efficiency
really matters.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290698 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoUpdate equalsStoreHelper for the fact that only one branch can be true
Daniel Berlin [Thu, 29 Dec 2016 00:49:32 +0000 (00:49 +0000)]
Update equalsStoreHelper for the fact that only one branch can be true

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290697 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[GlobalValue] Move HasLLVMReservedName into existing bitfield. NFC
Justin Lebar [Thu, 29 Dec 2016 00:30:46 +0000 (00:30 +0000)]
[GlobalValue] Move HasLLVMReservedName into existing bitfield. NFC

Summary:
Follow-up to r290691, where I introduced HasLLVMReservedName.  rnk
pointed out that that patch added an extra word to GlobalValue on MSVC,
because it doesn't pack bitfields with different types.

This patch moves HasLLVMReservedName into the existing bitfield, where
we appear to have plenty of bits to spare.

Reviewers: rnk

Subscribers: llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290696 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[IR] Clarify that Value::getName() is not actually cheap.
Justin Lebar [Thu, 29 Dec 2016 00:30:42 +0000 (00:30 +0000)]
[IR] Clarify that Value::getName() is not actually cheap.

It involves a hashtable lookup when the Value has a name.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290695 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[COFF] Use 32-bit jump table entries in .rdata for Win64
Reid Kleckner [Thu, 29 Dec 2016 00:12:39 +0000 (00:12 +0000)]
[COFF] Use 32-bit jump table entries in .rdata for Win64

Summary:
We were already using 32-bit jump table entries, but this was a
consequence of the default PIC model on Win64, and not an intentional
design decision. This patch ensures that we always use 32-bit label
difference jump table entries on Win64 regardless of the PIC model. This
is a good idea because it saves executable size and object file size.

Moving the jump tables to .rdata cleans up the disassembled object code
and reduces the available ROP targets, but it requires adding one more
RIP-relative lea to the code.  COFF doesn't have relocations to express
the difference between two arbitrary symbols, so we can't use the jump
table label in the label difference like we do elsewhere.

Fixes PR31488

Reviewers: majnemer, compnerd

Subscribers: llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290694 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoChange Metadata Index emission in the bitcode to use 2x32 bits for the placeholder
Mehdi Amini [Wed, 28 Dec 2016 23:45:54 +0000 (23:45 +0000)]
Change Metadata Index emission in the bitcode to use 2x32 bits for the placeholder

The Bitstream reader and writer are limited to handle a "size_t" at
most, which means that we can't backpatch and read back a 64bits
value on 32 bits platform.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290693 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoRevert "[NewGVN] replace emplace_back with push_back"
Piotr Padlewski [Wed, 28 Dec 2016 23:24:02 +0000 (23:24 +0000)]
Revert "[NewGVN] replace emplace_back with push_back"

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290692 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoSpeed up Function::isIntrinsic() by adding a bit to GlobalValue. NFC
Justin Lebar [Wed, 28 Dec 2016 22:59:45 +0000 (22:59 +0000)]
Speed up Function::isIntrinsic() by adding a bit to GlobalValue. NFC

Summary:
Previously isIntrinsic() called getName().  This involves a hashtable
lookup, so is nontrivially expensive.  And isIntrinsic() is called
frequently, particularly by dyn_cast<IntrinsicInstr>.

This patch steals a bit of IntID and uses that to store whether or not
getName() starts with "llvm."

Reviewers: bogner, arsenm, joker-eph

Subscribers: sanjoy, llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290691 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoAdd an index for Module Metadata record in the bitcode
Mehdi Amini [Wed, 28 Dec 2016 22:30:28 +0000 (22:30 +0000)]
Add an index for Module Metadata record in the bitcode

This index record the position for each metadata record in
the bitcode, so that the reader will be able to lazy-load
on demand each individual record.

We also make sure that every abbrev is emitted upfront so
that the block can be skipped while reading.

I don't plan to commit this before having the reader
counterpart, but I figured this can be reviewed mostly
independently.

Recommit r290684 (was reverted in r290686 because a test
was broken) after adding a threshold to avoid emitting
the index when unnecessary (little amount of metadata).
This optimization "hides" a limitation of the ability
to backpatch in the bitstream: we can only backpatch
safely when the position has been flushed. So if we emit
an index for one metadata, it is possible that (part of)
the offset placeholder hasn't been flushed and the backpatch
will fail.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290690 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoRevert "Add an index for Module Metadata record in the bitcode"
Saleem Abdulrasool [Wed, 28 Dec 2016 20:37:22 +0000 (20:37 +0000)]
Revert "Add an index for Module Metadata record in the bitcode"

This reverts commit a0ca6ae2d38339e4ede0dfa588086fc23d87e836.  Revert at
Mehdi's request as it is breaking bots.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290686 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[NewGVN] replace emplace_back with push_back
Piotr Padlewski [Wed, 28 Dec 2016 20:36:08 +0000 (20:36 +0000)]
[NewGVN] replace emplace_back with push_back

emplace_back is not faster if it is equivalent to push_back. In this cases emplaced value had the
same type that the one stored in container. It is ugly and it might be even slower (see
Scott Meyers presentation about emplacement).

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290685 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoAdd an index for Module Metadata record in the bitcode
Mehdi Amini [Wed, 28 Dec 2016 19:44:19 +0000 (19:44 +0000)]
Add an index for Module Metadata record in the bitcode

Summary:
This index record the position for each metadata record in
the bitcode, so that the reader will be able to lazy-load
on demand each individual record.

We also make sure that every abbrev is emitted upfront so
that the block can be skipped while reading.

I don't plan to commit this before having the reader
counterpart, but I figured this can be reviewed mostly
independently.

Reviewers: pcc, tejohnson

Subscribers: llvm-commits

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290684 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[NewGVN] Simplyfy loop NFC
Piotr Padlewski [Wed, 28 Dec 2016 19:42:49 +0000 (19:42 +0000)]
[NewGVN] Simplyfy loop NFC

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290683 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[ThinLTO] Honor -O{0,1,2,4} passed through the libLTO interface for ThinLTO
Mehdi Amini [Wed, 28 Dec 2016 19:37:16 +0000 (19:37 +0000)]
[ThinLTO] Honor -O{0,1,2,4} passed through the libLTO interface for ThinLTO

This was hardcoded to be O3 till now, without any way to change it
without changing the code.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290682 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[NewGVN] replace typedefs with usings
Piotr Padlewski [Wed, 28 Dec 2016 19:29:26 +0000 (19:29 +0000)]
[NewGVN] replace typedefs with usings

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290680 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[NewGVN] NFC fixes
Piotr Padlewski [Wed, 28 Dec 2016 19:17:17 +0000 (19:17 +0000)]
[NewGVN] NFC fixes

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290679 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[WinEH] Don't assume endFunction is called while in .text
Reid Kleckner [Wed, 28 Dec 2016 19:05:12 +0000 (19:05 +0000)]
[WinEH] Don't assume endFunction is called while in .text

Jump table emission can switch to .rdata before
WinException::endFunction gets called. Just remember the appropriate
text section we started in and reset back to it when we end the
function. We were already switching sections back from .xdata anyway.

Fixes the first problem in PR31488, so that now COFF switch tables can
live in .rdata if we want them to.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290678 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[NewGVN] Global sweep replacing NULL with nullptr. NFCI.
Davide Italiano [Wed, 28 Dec 2016 14:00:11 +0000 (14:00 +0000)]
[NewGVN] Global sweep replacing NULL with nullptr. NFCI.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290670 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[NewGVN] Remove redundant code. NFCI.
Davide Italiano [Wed, 28 Dec 2016 13:54:16 +0000 (13:54 +0000)]
[NewGVN] Remove redundant code. NFCI.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290669 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[NewGVN] equals() for loads/stores is the same. Unify.
Davide Italiano [Wed, 28 Dec 2016 13:37:17 +0000 (13:37 +0000)]
[NewGVN] equals() for loads/stores is the same. Unify.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290667 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[PM] Introduce a devirtualization iteration layer for the new PM.
Chandler Carruth [Wed, 28 Dec 2016 11:07:33 +0000 (11:07 +0000)]
[PM] Introduce a devirtualization iteration layer for the new PM.

This is an orthogonal and separated layer instead of being embedded
inside the pass manager. While it adds a small amount of complexity, it
is fairly minimal and the composability and control seems worth the
cost.

The logic for this ends up being nicely isolated and targeted. It should
be easy to experiment with different iteration strategies wrapped around
the CGSCC bottom-up walk using this kind of facility.

The mechanism used to track devirtualization is the simplest one I came
up with. I think it handles most of the cases the existing iteration
machinery handles, but I haven't done a *very* in depth analysis. It
does however match the basic intended semantics, and we can tweak or
tune its exact behavior incrementally as necessary. One thing that we
may want to revisit is freshly building the value handle set on each
iteration. While I don't think this will be a significant cost (it is
strictly fewer value handles but more churn of value handes than the old
call graph), it is conceivable that we'll want a somewhat more clever
tracking mechanism. My hope is to layer that on as a follow up patch
with data supporting any implementation complexity it adds.

This code also provides for a basic count heuristic: if the number of
indirect calls decreases and the number of direct calls increases for
a given function in the SCC, we assume devirtualization is responsible.
This matches the heuristics currently used in the legacy pass manager.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290665 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[PM] Teach the CGSCC's CG update utility to more carefully invalidate
Chandler Carruth [Wed, 28 Dec 2016 10:34:50 +0000 (10:34 +0000)]
[PM] Teach the CGSCC's CG update utility to more carefully invalidate
analyses when we're about to break apart an SCC.

We can't wait until after breaking apart the SCC to invalidate things:
1) Which SCC do we then invalidate? All of them?
2) Even if we invalidate all of them, a newly created SCC may not have
   a proxy that will convey the invalidation to functions!

Previously we only invalidated one of the SCCs and too late. This led to
stale analyses remaining in the cache. And because the caching strategy
actually works, they would get used and chaos would ensue.

Doing invalidation early is somewhat pessimizing though if we *know*
that the SCC structure won't change. So it turns out that the design to
make the mutation API force the caller to know the *kind* of mutation in
advance was indeed 100% correct and we didn't do enough of it. So this
change also splits two cases of switching a call edge to a ref edge into
two separate APIs so that callers can clearly test for this and take the
easy path without invalidating when appropriate. This is particularly
important in this case as we expect most inlines to be between functions
in separate SCCs and so the common case is that we don't have to so
aggressively invalidate analyses.

The LCG API change in turn needed some basic cleanups and better testing
in its unittest. No interesting functionality changed there other than
more coverage of the returned sequence of SCCs.

While this seems like an obvious improvement over the current state, I'd
like to revisit the core concept of invalidating within the CG-update
layer at all. I'm wondering if we would be better served forcing the
callers to handle the invalidation beforehand in the cases that they
can handle it. An interesting example is when we want to teach the
inliner to *update and preserve* analyses. But we can cross that bridge
when we get there.

With this patch, the new pass manager an build all of the LLVM test
suite at -O3 and everything passes. =D I haven't bootstrapped yet and
I'm sure there are still plenty of bugs, but this gives a nice baseline
so I'm going to increasingly focus on fleshing out the missing
functionality, especially the bits that are just turned off right now in
order to let us establish this baseline.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290664 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoThis is a large patch for X86 AVX-512 of an optimization for reducing code size by...
Gadi Haber [Wed, 28 Dec 2016 10:12:48 +0000 (10:12 +0000)]
This is a large patch for X86 AVX-512 of an optimization for reducing code size by encoding EVEX AVX-512 instructions using the shorter VEX encoding when possible.

There are cases of AVX-512 instructions that have two possible encodings. This is the case with instructions that use vector registers with low indexes of 0 - 15 and do not use the zmm registers or the mask k registers.
The EVEX encoding prefix requires 4 bytes whereas the VEX prefix can take only up to 3 bytes. Consequently, using the VEX encoding for these instructions results in a code size reduction of ~2 bytes even though it is compiled with the AVX-512 features enabled.

Reviewers: Craig Topper, Zvi Rackoover, Elena Demikhovsky
Differential Revision: https://reviews.llvm.org/D27901

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290663 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[PM] Teach the inliner's call graph update to handle inserting new edges
Chandler Carruth [Wed, 28 Dec 2016 03:13:12 +0000 (03:13 +0000)]
[PM] Teach the inliner's call graph update to handle inserting new edges
when they are call edges at the leaf but may (transitively) be reached
via ref edges.

It turns out there is a simple rule: insert everything as a ref edge
which is a safe conservative default. Then we let the existing update
logic handle promoting some of those to call edges.

Note that it would be fairly cheap to make these call edges right away
if that is desirable by testing whether there is some existing call path
from the source to the target. It just seemed like slightly more
complexity in this code path that isn't strictly necessary. If anyone
feels strongly about handling this differently I'm happy to change it.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290649 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[InstCombine] Remove a piece of a comment that said that InstCombiner contains pass...
Craig Topper [Wed, 28 Dec 2016 03:12:42 +0000 (03:12 +0000)]
[InstCombine] Remove a piece of a comment that said that InstCombiner contains pass infrastructure. That hasn't been true since r226618. NFC

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290648 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[PM] Actually commit the test update that was supposed to accompany
Chandler Carruth [Wed, 28 Dec 2016 02:31:24 +0000 (02:31 +0000)]
[PM] Actually commit the test update that was supposed to accompany
r290644. Sorry for this.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290646 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[LCG] Teach the ref edge removal to handle a ref edge that is trivial
Chandler Carruth [Wed, 28 Dec 2016 02:24:58 +0000 (02:24 +0000)]
[LCG] Teach the ref edge removal to handle a ref edge that is trivial
due to a call cycle.

This actually crashed the ref removal before.

I've added a unittest that covers this kind of interesting graph
structure and mutation.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290645 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[PM] Disable the loop vectorizer from the new PM's pipeline as it
Chandler Carruth [Wed, 28 Dec 2016 02:24:55 +0000 (02:24 +0000)]
[PM] Disable the loop vectorizer from the new PM's pipeline as it
currenty relies on the old PM's dependency system forming LCSSA.

The new PM will require a different design for this, and for now this is
causing most of the issues I'm currently seeing in testing. I'd like to
get to a testable baseline and then work on re-enabling things one at
a time.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290644 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[InstCombine] Canonicalize insert splat sequences into an insert + shuffle
Michael Kuperstein [Wed, 28 Dec 2016 00:18:08 +0000 (00:18 +0000)]
[InstCombine] Canonicalize insert splat sequences into an insert + shuffle

This adds a combine that canonicalizes a chain of inserts which broadcasts
a value into a single insert + a splat shufflevector.

This fixes PR31286.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290641 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[libFuzzer] add an experimental flag -experimental_len_control=1 that sets max_len...
Kostya Serebryany [Tue, 27 Dec 2016 23:24:55 +0000 (23:24 +0000)]
[libFuzzer] add an experimental flag -experimental_len_control=1 that sets max_len to 1M and tries to increases the actual max sizes of mutations very gradually (second attempt)

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290637 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoMark comparator call operator as const
Eric Fiselier [Tue, 27 Dec 2016 23:15:58 +0000 (23:15 +0000)]
Mark comparator call operator as const

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290636 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[libFuzzer] don't create large random mutations when given an empty seed
Kostya Serebryany [Tue, 27 Dec 2016 22:15:04 +0000 (22:15 +0000)]
[libFuzzer] don't create large random mutations when given an empty seed

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290634 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[sanitizer-coverage] sort the switch cases
Kostya Serebryany [Tue, 27 Dec 2016 21:20:06 +0000 (21:20 +0000)]
[sanitizer-coverage] sort the switch cases

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290628 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agollvm-readobj: ELF: Make DT tags machine aware
Hemant Kulkarni [Tue, 27 Dec 2016 19:59:29 +0000 (19:59 +0000)]
llvm-readobj: ELF: Make DT tags machine aware

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290623 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[libFuzzer] fix UB and simplify the computation of the RNG seed (https://llvm.org...
Kostya Serebryany [Tue, 27 Dec 2016 19:51:34 +0000 (19:51 +0000)]
[libFuzzer] fix UB and simplify the computation of the RNG seed (https://llvm.org/bugs/show_bug.cgi?id=31456)

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290622 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[PM] Teach MemDep to invalidate its result object when its cached
Chandler Carruth [Tue, 27 Dec 2016 19:33:04 +0000 (19:33 +0000)]
[PM] Teach MemDep to invalidate its result object when its cached
analysis handles become invalid.

Add a test case for its invalidation logic.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290620 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoDebugInfo: add explicit casts for -Wqual-cast
Saleem Abdulrasool [Tue, 27 Dec 2016 18:35:24 +0000 (18:35 +0000)]
DebugInfo: add explicit casts for -Wqual-cast

Fix a warning detected by gcc 6:
  warning: cast from type 'const void*' to type 'uint8_t* {aka unsigned char*}' casts away qualifiers [-Wcast-qual]

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290618 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoASMParser: use range-based for loops (NFC)
Saleem Abdulrasool [Tue, 27 Dec 2016 18:35:22 +0000 (18:35 +0000)]
ASMParser: use range-based for loops (NFC)

Convert the verify method to use a few more range based for loops,
converting to const iterators in the process.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290617 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agotest: modernise ARM CodeGen tests
Saleem Abdulrasool [Tue, 27 Dec 2016 18:35:19 +0000 (18:35 +0000)]
test: modernise ARM CodeGen tests

Replace the use of grep with FileCheck.  Tidy up some of the tests.  A
few of the tests have been left as weak as previously, though some have
been made more stringent.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290616 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[NewGVN] Simplify a bit removing else after return. NFCI.
Davide Italiano [Tue, 27 Dec 2016 18:15:39 +0000 (18:15 +0000)]
[NewGVN] Simplify a bit removing else after return. NFCI.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290615 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[PM] Remove a pointless optimization.
Chandler Carruth [Tue, 27 Dec 2016 18:04:11 +0000 (18:04 +0000)]
[PM] Remove a pointless optimization.

There is no need to do this within an analysis. That method shouldn't
even be reached if this predicate holds as the actual useful
optimization is in the analysis manager itself.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290614 91177308-0d34-0410-b5e6-96231b3b80d8

8 years agoAttempt to make the Windows bots green after r290609.
Chad Rosier [Tue, 27 Dec 2016 18:02:27 +0000 (18:02 +0000)]
Attempt to make the Windows bots green after r290609.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290613 91177308-0d34-0410-b5e6-96231b3b80d8

8 years ago[PM] Add more dedicated testing to cover the invalidation logic added to
Chandler Carruth [Tue, 27 Dec 2016 17:59:22 +0000 (17:59 +0000)]
[PM] Add more dedicated testing to cover the invalidation logic added to
BasicAA in r290603.

I've kept the basic testing in the new PM test file as that also covers
the AAManager invalidation logic. If/when there is a good place for
broader AA testing it could move there.

This test is somewhat unsatisfying as I can't get it to fail even with
ASan outside of explicit checks of the invalidation. Apparently we don't
yet have any test coverage of the BasicAA code paths using either the
domtree or loopinfo -- I made both of them always be null and check-llvm
passed.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290612 91177308-0d34-0410-b5e6-96231b3b80d8