OSDN Git Service

android-x86/external-llvm.git
8 years agoMake more fields of InlineParams Optional.
Easwaran Raman [Thu, 11 Aug 2016 03:58:05 +0000 (03:58 +0000)]
Make more fields of InlineParams Optional.

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

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

8 years ago[Statepoints] Minor cosmetic change; NFC
Sanjoy Das [Thu, 11 Aug 2016 00:56:46 +0000 (00:56 +0000)]
[Statepoints] Minor cosmetic change; NFC

The verification failure message was missing a space.

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

8 years ago[MachOYAML] Don't output empty ExportTrie
Chris Bieneman [Thu, 11 Aug 2016 00:20:03 +0000 (00:20 +0000)]
[MachOYAML] Don't output empty ExportTrie

The YAML representation was always outputting the root node of an export trie even if the trie was empty. While this doesn't really have any functional impact, it does add visual clutter to the yaml file.

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

8 years agoGlobalISel: support same ConstantExprs as Instructions.
Tim Northover [Wed, 10 Aug 2016 23:02:41 +0000 (23:02 +0000)]
GlobalISel: support same ConstantExprs as Instructions.

It's more than just inttoptr, but the others can't be tested until we have
support for non-trivial constants (they currently get unavoidably folded to a
ConstantInt).

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

8 years ago[ADT] Move LLVM_ATTRIBUTE_UNUSED_RESULT to the function, otherwise gcc 4.8 complains...
Tim Shen [Wed, 10 Aug 2016 22:35:38 +0000 (22:35 +0000)]
[ADT] Move LLVM_ATTRIBUTE_UNUSED_RESULT to the function, otherwise gcc 4.8 complains about it.

It's a fix for the original patch r278251.

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

8 years agoGlobalISel: add tests forgotten in r278293.
Tim Northover [Wed, 10 Aug 2016 22:13:48 +0000 (22:13 +0000)]
GlobalISel: add tests forgotten in r278293.

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

8 years ago[LangRef] Fix formatting (no semantic change)
Sanjoy Das [Wed, 10 Aug 2016 21:48:24 +0000 (21:48 +0000)]
[LangRef] Fix formatting (no semantic change)

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

8 years agoGlobalISel: implement simple function calls on AArch64.
Tim Northover [Wed, 10 Aug 2016 21:44:01 +0000 (21:44 +0000)]
GlobalISel: implement simple function calls on AArch64.

We're still limited in the arguments we support, but this at least handles the
basic cases.

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

8 years agoAMDGPU/SI: Implement amdgcn image intrinsics with sampler
Changpeng Fang [Wed, 10 Aug 2016 21:15:30 +0000 (21:15 +0000)]
AMDGPU/SI: Implement amdgcn image intrinsics with sampler

Summary:
  This patch define and implement amdgcn image intrinsics with sampler.

    1. define vdata type to be llvm_anyfloat_ty, address type to be llvm_anyfloat_ty,
       and rsrc type to be llvm_anyint_ty. As a result, we expect the intrinsics name
       to have three suffixes to overload each of these three types;

    2. D128 as well as two other flags are implied in the three types, for example,
       if you use v8i32 as resource type, then r128 is 0!

    3. don't expose TFE flag, and other flags are exposed in the instruction order:
       unrm, glc, slc, lwe and da.

Differential Revision: http://reviews.llvm.org/D22838

Reviewed by:
  arsenm and tstellarAMD

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

8 years agoChanged sign of LastCallToStaticBouns
Piotr Padlewski [Wed, 10 Aug 2016 21:15:22 +0000 (21:15 +0000)]
Changed sign of LastCallToStaticBouns

Summary:
I think it is much better this way.
When I firstly saw line:
  Cost += InlineConstants::LastCallToStaticBonus;
I though that this is a bug, because everywhere where the cost is being reduced
it is usuing -=.

Reviewers: eraman, tejohnson, mehdi_amini

Subscribers: llvm-commits, mehdi_amini

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

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

8 years agoCodegen: Don't tail-duplicate blocks with un-analyzable fallthrough.
Kyle Butt [Wed, 10 Aug 2016 21:03:27 +0000 (21:03 +0000)]
Codegen: Don't tail-duplicate blocks with un-analyzable fallthrough.

If AnalyzeBranch can't analyze a block and it is possible to
fallthrough, then duplicating the block doesn't make sense, as only one
block can be the layout predecessor for the un-analyzable fallthrough.

Submitted wit a test case, but NOTE: the test case doesn't currently
fail. However, the test case fails with D20505 and would have saved me
some time debugging.

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

8 years agoCodeGen: If Convert blocks that would form a diamond when tail-merged.
Kyle Butt [Wed, 10 Aug 2016 20:45:56 +0000 (20:45 +0000)]
CodeGen: If Convert blocks that would form a diamond when tail-merged.

The following function currently relies on tail-merging for if
conversion to succeed. The common tail of cond_true and cond_false is
extracted, and this then forms a diamond pattern that can be
successfully if converted.

If this block does not get extracted, either because tail-merging is
disabled or the threshold is higher, we should still recognize this
pattern and if-convert it.

Fixed a regression in the original commit. Need to un-reverse branches after
reversing them, or other conversions go awry.

define i32 @t2(i32 %a, i32 %b) nounwind {
entry:
        %tmp1434 = icmp eq i32 %a, %b           ; <i1> [#uses=1]
        br i1 %tmp1434, label %bb17, label %bb.outer

bb.outer:               ; preds = %cond_false, %entry
        %b_addr.021.0.ph = phi i32 [ %b, %entry ], [ %tmp10, %cond_false ]
        %a_addr.026.0.ph = phi i32 [ %a, %entry ], [ %a_addr.026.0, %cond_false ]
        br label %bb

bb:             ; preds = %cond_true, %bb.outer
        %indvar = phi i32 [ 0, %bb.outer ], [ %indvar.next, %cond_true ]
        %tmp. = sub i32 0, %b_addr.021.0.ph
        %tmp.40 = mul i32 %indvar, %tmp.
        %a_addr.026.0 = add i32 %tmp.40, %a_addr.026.0.ph
        %tmp3 = icmp sgt i32 %a_addr.026.0, %b_addr.021.0.ph
        br i1 %tmp3, label %cond_true, label %cond_false

cond_true:              ; preds = %bb
        %tmp7 = sub i32 %a_addr.026.0, %b_addr.021.0.ph
        %tmp1437 = icmp eq i32 %tmp7, %b_addr.021.0.ph
        %indvar.next = add i32 %indvar, 1
        br i1 %tmp1437, label %bb17, label %bb

cond_false:             ; preds = %bb
        %tmp10 = sub i32 %b_addr.021.0.ph, %a_addr.026.0
        %tmp14 = icmp eq i32 %a_addr.026.0, %tmp10
        br i1 %tmp14, label %bb17, label %bb.outer

bb17:           ; preds = %cond_false, %cond_true, %entry
        %a_addr.026.1 = phi i32 [ %a, %entry ], [ %tmp7, %cond_true ], [ %a_addr.026.0, %cond_false ]
        ret i32 %a_addr.026.1
}

Without tail-merging or diamond-tail if conversion:
LBB1_1:                                 @ %bb
                                        @ =>This Inner Loop Header: Depth=1
        cmp     r0, r1
        ble     LBB1_3
@ BB#2:                                 @ %cond_true
                                        @   in Loop: Header=BB1_1 Depth=1
        subs    r0, r0, r1
        cmp     r1, r0
        it      ne
        cmpne   r0, r1
        bgt     LBB1_4
LBB1_3:                                 @ %cond_false
                                        @   in Loop: Header=BB1_1 Depth=1
        subs    r1, r1, r0
        cmp     r1, r0
        bne     LBB1_1
LBB1_4:                                 @ %bb17
        bx      lr

With diamond-tail if conversion, but without tail-merging:
@ BB#0:                                 @ %entry
        cmp     r0, r1
        it      eq
        bxeq    lr
LBB1_1:                                 @ %bb
                                        @ =>This Inner Loop Header: Depth=1
        cmp     r0, r1
        ite     le
        suble   r1, r1, r0
        subgt   r0, r0, r1
        cmp     r1, r0
        bne     LBB1_1
@ BB#2:                                 @ %bb17
        bx      lr

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

8 years agoDisable sancov tests failing due to apparent endianness issues
Reid Kleckner [Wed, 10 Aug 2016 20:11:35 +0000 (20:11 +0000)]
Disable sancov tests failing due to apparent endianness issues

Undoes some of the effect of r278271

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

8 years ago[sancov] Port sancov -print-coverage-pcs to COFF
Reid Kleckner [Wed, 10 Aug 2016 20:08:19 +0000 (20:08 +0000)]
[sancov] Port sancov -print-coverage-pcs to COFF

The export table is not considered part of the object file symbol table,
so we have to look through it separately.

Reviewers: kcc

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

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

8 years agoFix UB in APInt::ashr
Jonathan Roelofs [Wed, 10 Aug 2016 19:50:14 +0000 (19:50 +0000)]
Fix UB in APInt::ashr

i64 -1, whose sign bit is the 0th one, can't be left shifted without invoking UB.

https://reviews.llvm.org/D23362

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

8 years agoAMDGPU: s_setpc_b64 should be an indirect branch
Matt Arsenault [Wed, 10 Aug 2016 19:20:02 +0000 (19:20 +0000)]
AMDGPU: s_setpc_b64 should be an indirect branch

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

8 years agoAMDGPU: Set sizes on control flow pseudos
Matt Arsenault [Wed, 10 Aug 2016 19:11:51 +0000 (19:11 +0000)]
AMDGPU: Set sizes on control flow pseudos

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

8 years agoAMDGPU: Remove empty file comment
Matt Arsenault [Wed, 10 Aug 2016 19:11:48 +0000 (19:11 +0000)]
AMDGPU: Remove empty file comment

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

8 years agoAMDGPU: Remove unnecessary cast
Matt Arsenault [Wed, 10 Aug 2016 19:11:45 +0000 (19:11 +0000)]
AMDGPU: Remove unnecessary cast

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

8 years agoAMDGPU: Change insertion point of si_mask_branch
Matt Arsenault [Wed, 10 Aug 2016 19:11:42 +0000 (19:11 +0000)]
AMDGPU: Change insertion point of si_mask_branch

Insert before the skip branch if one is created.
This is a somewhat more natural placement relative
to the skip branches, and makes it possible to implement
analyzeBranch for skip blocks.

The test changes are mostly due to a quirk where
the block label is not emitted if there is a terminator
that is not also a branch.

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

8 years agoAMDGPU: Use CreateStackObject instead of CreateSpillStackObject
Matt Arsenault [Wed, 10 Aug 2016 19:11:36 +0000 (19:11 +0000)]
AMDGPU: Use CreateStackObject instead of CreateSpillStackObject

I'm not sure what the difference is, but no other target
uses this for emergency spill slots.

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

8 years ago[sancov] Run more sancov tests on non-x86-Linux machines
Reid Kleckner [Wed, 10 Aug 2016 19:03:18 +0000 (19:03 +0000)]
[sancov] Run more sancov tests on non-x86-Linux machines

Add the $arch-registered-target features that clang uses to disable
tests that require a registered backend, so that we can run the sancov
tests on Windows. LLVM's lit suite did not appear to have a per-test way
to do this, and I would rather not split up the sancov tests into
architecture directories.

Split out of https://reviews.llvm.org/D23321

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

8 years ago[x86, AVX] allow FP vector select folding to bitwise logic ops (PR28895)
Sanjay Patel [Wed, 10 Aug 2016 19:00:11 +0000 (19:00 +0000)]
[x86, AVX] allow FP vector select folding to bitwise logic ops (PR28895)

This handles the case in:
https://llvm.org/bugs/show_bug.cgi?id=28895

...but we are not getting all of the possibilities yet.
Eg, we use 'X86::FANDN' for scalar FP select combines.

That enhancement is filed as:
https://llvm.org/bugs/show_bug.cgi?id=28925

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

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

8 years ago[IndVarSimplify] Eliminate zext of a signed IV when the IV is known to be non-negative
Andrew Kaylor [Wed, 10 Aug 2016 18:56:35 +0000 (18:56 +0000)]
[IndVarSimplify] Eliminate zext of a signed IV when the IV is known to be non-negative

Patch by Li Huang

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

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

8 years agoLiveIntervalAnalysis: fix a crash in repairOldRegInRange
Nicolai Haehnle [Wed, 10 Aug 2016 18:51:14 +0000 (18:51 +0000)]
LiveIntervalAnalysis: fix a crash in repairOldRegInRange

Summary:
See the new test case for one that was (non-deterministically) crashing
on trunk and deterministically hit the assertion that I added in D23302.
Basically, the machine function contains a sequence

     DS_WRITE_B32 %vreg4, %vreg14:sub0, ...
     DS_WRITE_B32 %vreg4, %vreg14:sub0, ...
     %vreg14:sub1<def> = COPY %vreg14:sub0

and SILoadStoreOptimizer::mergeWrite2Pair merges the two DS_WRITE_B32
instructions into one before calling repairIntervalsInRange.

Now repairIntervalsInRange wants to repair %vreg14, in particular, and
ends up trying to repair %vreg14:sub1 as well, but that only becomes
active _after_ the range that is to be repaired, hence the crash due
to LR.find(...) == LR.begin() at the start of repairOldRegInRange.

I believe that just skipping those subrange is fine, but again, not too
familiar with that code.

Reviewers: MatzeB, kparzysz, tstellarAMD

Subscribers: llvm-commits, MatzeB

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

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

8 years ago[ValueTracking] An improvement to IR ValueTracking on Non-negative Integers
Andrew Kaylor [Wed, 10 Aug 2016 18:47:19 +0000 (18:47 +0000)]
[ValueTracking] An improvement to IR ValueTracking on Non-negative Integers

Patch by Li Huang

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

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

8 years ago[Hexagon] Remove unused variants of LO/HI instructions
Krzysztof Parzyszek [Wed, 10 Aug 2016 18:40:36 +0000 (18:40 +0000)]
[Hexagon] Remove unused variants of LO/HI instructions

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

8 years agoCodegen: Tail Merge: Be less aggressive with special cases.
Kyle Butt [Wed, 10 Aug 2016 18:36:18 +0000 (18:36 +0000)]
Codegen: Tail Merge: Be less aggressive with special cases.

This change makes it possible for tail-duplication and tail-merging to
be disjoint. By being less aggressive when merging during layout, there are no
overlapping cases between tail-duplication and tail-merging, provided the
thresholds are disjoint.

There is a remaining TODO to benchmark the succ_size() test for non-layout tail
merging.

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

8 years ago[X86][SSE] Dropped blend(insertps(x,y),zero) combine - this is now handled by target...
Simon Pilgrim [Wed, 10 Aug 2016 18:10:29 +0000 (18:10 +0000)]
[X86][SSE] Dropped blend(insertps(x,y),zero) combine - this is now handled by target shuffle chain combining

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

8 years ago[ADT] Removed synthesized constructor introduced in r278251, since MSVC doesn't suppo...
Tim Shen [Wed, 10 Aug 2016 18:08:38 +0000 (18:08 +0000)]
[ADT] Removed synthesized constructor introduced in r278251, since MSVC doesn't support them

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

8 years agoTargetOpcodes: Rewrite the documentation for SUBREG_TO_REG
Matthias Braun [Wed, 10 Aug 2016 18:05:50 +0000 (18:05 +0000)]
TargetOpcodes: Rewrite the documentation for SUBREG_TO_REG

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

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

8 years ago[Hexagon] Simplify the SplitConst32/64 pass
Krzysztof Parzyszek [Wed, 10 Aug 2016 18:05:47 +0000 (18:05 +0000)]
[Hexagon] Simplify the SplitConst32/64 pass

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

8 years ago[Hexagon] Add extra patterns for single-precision min/max instructions
Krzysztof Parzyszek [Wed, 10 Aug 2016 17:56:24 +0000 (17:56 +0000)]
[Hexagon] Add extra patterns for single-precision min/max instructions

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

8 years ago[ADT] Add make_scope_exit().
Tim Shen [Wed, 10 Aug 2016 17:52:09 +0000 (17:52 +0000)]
[ADT] Add make_scope_exit().

Summary: make_scope_exit() is described in C++ proposal p0052r2, which uses RAII to do cleanup works at scope exit.

Reviewers: chandlerc

Subscribers: llvm-commits

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

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

8 years agoFix LCSSA increased compile time
Rong Xu [Wed, 10 Aug 2016 17:49:11 +0000 (17:49 +0000)]
Fix LCSSA increased compile time

We are seeing r276077 drastically increasing compiler time for our larger
benchmarks in PGO profile generation build (both clang based and IR based
mode) -- it can be 20x slower than without the patch (like from 30 secs to
780 secs)

The increased time are all in pass LCSSA. The problematic code is about
PostProcessPHIs after use-rewrite. Note that the InsertedPhis from ssa_updater
is accumulating (never been cleared). Since the inserted PHIs are added to the
candidate for each rewrite, The earlier ones will be repeatedly added. Later
when adding the new PHIs to the work-list, we don't check the duplication
either. This can result in extremely long work-list that containing tons of
duplicated PHIs.

This patch fixes the issue by hoisting the code out of the loop.

Differential Revision: http://reviews.llvm.org/D23344

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

8 years ago[Hexagon] Fix table-gen decode conflict warnings for CONST32/64
Krzysztof Parzyszek [Wed, 10 Aug 2016 17:22:24 +0000 (17:22 +0000)]
[Hexagon] Fix table-gen decode conflict warnings for CONST32/64

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

8 years agoGlobalISel: fixup copy/paste comment error
Tim Northover [Wed, 10 Aug 2016 16:51:18 +0000 (16:51 +0000)]
GlobalISel: fixup copy/paste comment error

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

8 years agoGlobalISel: avoid inserting redundant COPYs for bitcasts.
Tim Northover [Wed, 10 Aug 2016 16:51:14 +0000 (16:51 +0000)]
GlobalISel: avoid inserting redundant COPYs for bitcasts.

If the value produced by the bitcast hasn't been referenced yet, we can simply
reuse the input register avoiding an unnecessary COPY instruction.

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

8 years ago[Hexagon] Use integer instructions for floating point immediates
Krzysztof Parzyszek [Wed, 10 Aug 2016 16:46:36 +0000 (16:46 +0000)]
[Hexagon] Use integer instructions for floating point immediates

Floating point instructions use general purpose registers, so the few
instructions that can put floating point immediates into registers are,
in fact, integer instruction. Use them explicitly instead of having
pseudo-instructions specifically for dealing with floating point values.

Simplify the constant loading instructions (from sdata) to have only two:
one for 32-bit values and one for 64-bit values: CONST32 and CONST64.

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

8 years ago[Coroutines] Part 6: Elide dynamic allocation of a coroutine frame when possible
Gor Nishanov [Wed, 10 Aug 2016 16:40:39 +0000 (16:40 +0000)]
[Coroutines] Part 6: Elide dynamic allocation of a coroutine frame when possible

Summary:
A particular coroutine usage pattern, where a coroutine is created, manipulated and
destroyed by the same calling function, is common for coroutines implementing
RAII idiom and is suitable for allocation elision optimization which avoid
dynamic allocation by storing the coroutine frame as a static `alloca` in its
caller.

coro.free and coro.alloc intrinsics are used to indicate which code needs to be suppressed
when dynamic allocation elision happens:
```
entry:
  %elide = call i8* @llvm.coro.alloc()
  %need.dyn.alloc = icmp ne i8* %elide, null
  br i1 %need.dyn.alloc, label %coro.begin, label %dyn.alloc
dyn.alloc:
  %alloc = call i8* @CustomAlloc(i32 4)
  br label %coro.begin
coro.begin:
  %phi = phi i8* [ %elide, %entry ], [ %alloc, %dyn.alloc ]
  %hdl = call i8* @llvm.coro.begin(i8* %phi, i32 0, i8* null,
                          i8* bitcast ([2 x void (%f.frame*)*]* @f.resumers to i8*))
```
and
```
  %mem = call i8* @llvm.coro.free(i8* %hdl)
  %need.dyn.free = icmp ne i8* %mem, null
  br i1 %need.dyn.free, label %dyn.free, label %if.end
dyn.free:
  call void @CustomFree(i8* %mem)
  br label %if.end
if.end:
  ...
```

If heap allocation elision is performed, we replace coro.alloc with a static alloca on the caller frame and coro.free with null constant.

Also, we need to make sure that if there are any tail calls referencing the coroutine frame, we need to remote tail call attribute, since now coroutine frame lives on the stack.

Documentation and overview is here: http://llvm.org/docs/Coroutines.html.

Upstreaming sequence (rough plan)
1.Add documentation. (https://reviews.llvm.org/D22603)
2.Add coroutine intrinsics. (https://reviews.llvm.org/D22659)
3.Add empty coroutine passes. (https://reviews.llvm.org/D22847)
4.Add coroutine devirtualization + tests.
ab) Lower coro.resume and coro.destroy (https://reviews.llvm.org/D22998)
c) Do devirtualization (https://reviews.llvm.org/D23229)
5.Add CGSCC restart trigger + tests. (https://reviews.llvm.org/D23234)
6.Add coroutine heap elision + tests.  <= we are here
7.Add the rest of the logic (split into more patches)

Reviewers: mehdi_amini, majnemer

Subscribers: mehdi_amini, llvm-commits

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

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

8 years agoFix build break of VS 2013 debug builds
Roger Ferrer Ibanez [Wed, 10 Aug 2016 16:39:58 +0000 (16:39 +0000)]
Fix build break of VS 2013 debug builds

In debug mode extra macros are enabled for several C++ algorithms. Some of them
may cause unfortunate build failures.

This commit adds a redundant operator() to work around one of those troublesome
macros which was hit accidentally by change r278012.

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

8 years ago[Hexagon] Delete HexagonSelectCCInfo.td
Krzysztof Parzyszek [Wed, 10 Aug 2016 16:23:53 +0000 (16:23 +0000)]
[Hexagon] Delete HexagonSelectCCInfo.td

This file is not used. The location assignment of call arguments and
return values is implemented directly in HexagonISelLowering.

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

8 years ago[Hexagon] Remove unneeded/unused ISD opcodes ARGEXTEND and FCONST32
Krzysztof Parzyszek [Wed, 10 Aug 2016 16:20:33 +0000 (16:20 +0000)]
[Hexagon] Remove unneeded/unused ISD opcodes ARGEXTEND and FCONST32

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

8 years ago[X86][XOP] Tweak vpermil2pd test to stop it being combined away
Simon Pilgrim [Wed, 10 Aug 2016 15:15:56 +0000 (15:15 +0000)]
[X86][XOP] Tweak vpermil2pd test to stop it being combined away

The target shuffle combined to a BLENDPD pattern which we will shortly add support for.

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

8 years ago[X86][SSE] Regenerate vector shift lowering tests
Simon Pilgrim [Wed, 10 Aug 2016 15:13:49 +0000 (15:13 +0000)]
[X86][SSE] Regenerate vector shift lowering tests

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

8 years ago[LVI] Handle conditions in the form of (cond1 && cond2)
Artur Pilipenko [Wed, 10 Aug 2016 15:13:15 +0000 (15:13 +0000)]
[LVI] Handle conditions in the form of (cond1 && cond2)

Teach LVI how to gather information from conditions in the form of (cond1 && cond2). Our out-of-tree front-end emits range checks in this form.

Reviewed By: sanjoy

Differential Revision: http://reviews.llvm.org/D23200

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

8 years agouse different comparison predicates for better test coverage
Sanjay Patel [Wed, 10 Aug 2016 15:06:11 +0000 (15:06 +0000)]
use different comparison predicates for better test coverage

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

8 years ago[X86][SSE] Add support for combining target shuffles to MOVSS/MOVSD
Simon Pilgrim [Wed, 10 Aug 2016 14:15:41 +0000 (14:15 +0000)]
[X86][SSE] Add support for combining target shuffles to MOVSS/MOVSD

Only do this on pre-SSE41 targets where we should be lowering to BLENDPS/BLENDPD instead

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

8 years agoAdd a test case for r278217 "[LVI] Relax the assertion about LVILatticeVal type in...
Artur Pilipenko [Wed, 10 Aug 2016 13:51:01 +0000 (13:51 +0000)]
Add a test case for r278217 "[LVI] Relax the assertion about LVILatticeVal type in getConstantRange"

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

8 years ago[LVI] NFC. Make getValueFromCondition return LVILatticeValue instead of changing...
Artur Pilipenko [Wed, 10 Aug 2016 13:38:07 +0000 (13:38 +0000)]
[LVI] NFC. Make getValueFromCondition return LVILatticeValue instead of changing reference argument

Instead of returning bool and setting LVILatticeValue reference argument return LVILattice value. Use overdefined value to denote the case when we didn't gather any information from the condition.

This change was separated from the review "[LVI] Handle conditions in the form of (cond1 && cond2)" (https://reviews.llvm.org/D23200#inline-199531). Once getValueFromCondition returns LVILatticeValue we can cache the result in Visited map.

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

8 years agoTeach CorrelatedValuePropagation to mark adds as no wrap
Artur Pilipenko [Wed, 10 Aug 2016 13:08:34 +0000 (13:08 +0000)]
Teach CorrelatedValuePropagation to mark adds as no wrap

This is a resubmission of previously reverted r277592. It was hitting overly strong assertion in getConstantRange which was relaxed in r278217.

Use LVI to prove that adds do not wrap. The change is motivated by https://llvm.org/bugs/show_bug.cgi?id=28620 bug and it's the first step to fix that problem.

Reviewed By: sanjoy

Differential Revision: http://reviews.llvm.org/D23059

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

8 years ago[X86][SSE] Only treat SM_SentinelUndef as UNDEF in shuffle mask predicates
Simon Pilgrim [Wed, 10 Aug 2016 12:55:25 +0000 (12:55 +0000)]
[X86][SSE] Only treat SM_SentinelUndef as UNDEF in shuffle mask predicates

isUndefOrEqual and isUndefOrInRange treated all -ve shuffle mask values as UNDEF, now it has to be SM_SentinelUndef (-1)

We already have asserts to check that lowered SHUFFLE_VECTOR indices are in the range -1 <= index < 2*masksize (or masksize for unary shuffles)

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

8 years ago[LVI] Relax the assertion about LVILatticeVal type in getConstantRange
Artur Pilipenko [Wed, 10 Aug 2016 12:54:54 +0000 (12:54 +0000)]
[LVI] Relax the assertion about LVILatticeVal type in getConstantRange

The problem was triggered by my recent change in CVP (D23059). Current code expected that integer constants are represented by constantrange LVILatticeVal and never represented as LVILatticeVal with constant tag. That is true for ConstantInt constants, although ConstantExpr integer type constants are legally represented as constant LVILatticeVal.

This code fails with CVP change in:

@b = global i32 0, align 4
define void @test6(i32 %a) {
bb:
  %add = add i32 %a, ptrtoint (i32* @b to i32)
  ret void
}
Currently getConstantRange code is not executed by any of the upstream passes. I'm going to add a test case to test/Transforms/CorrelatedValuePropagation/add.ll once I resubmit the CVP change.

Reviewed By: sanjoy

Differential Revision: http://reviews.llvm.org/D23194

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

8 years ago[X86][SSE] Reorder shuffle mask undef helper predicates. NFCI
Simon Pilgrim [Wed, 10 Aug 2016 12:34:23 +0000 (12:34 +0000)]
[X86][SSE] Reorder shuffle mask undef helper predicates. NFCI

To make it easier for a more complex helper to use a simpler one

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

8 years ago[X86][SSE] Regenerate SSE1 tests
Simon Pilgrim [Wed, 10 Aug 2016 12:26:40 +0000 (12:26 +0000)]
[X86][SSE] Regenerate SSE1 tests

Properly demonstrate the nasty codegen we get for vselect without integer vectors

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

8 years agoRegenerate test
Simon Pilgrim [Wed, 10 Aug 2016 12:24:19 +0000 (12:24 +0000)]
Regenerate test

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

8 years ago[DAGCombine] Avoid INSERT_SUBVECTOR reinsertions (PR28678)
Simon Pilgrim [Wed, 10 Aug 2016 10:50:53 +0000 (10:50 +0000)]
[DAGCombine] Avoid INSERT_SUBVECTOR reinsertions (PR28678)

If the input vector to INSERT_SUBVECTOR is another INSERT_SUBVECTOR, and this inserted subvector replaces the last insertion, then insert into the common source vector.

i.e.
INSERT_SUBVECTOR( INSERT_SUBVECTOR( Vec, SubOld, Idx ), SubNew, Idx ) --> INSERT_SUBVECTOR( Vec, SubNew, Idx )

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

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

8 years ago[ARM] Improve sxta{b|h} and uxta{b|h} tests
Sam Parker [Wed, 10 Aug 2016 09:34:34 +0000 (09:34 +0000)]
[ARM] Improve sxta{b|h} and uxta{b|h} tests

Created a Thumb2 predicated pattern matcher that uses Thumb2 and
HasT2ExtractPack and used it to redefine the patterns for sxta{b|h}
and uxta{b|h}. Also used the similar patterns to fill in isel pattern
gaps for the corresponding instructions in the ARM backend.
The patch is mainly changes to tests since most of this functionality
appears not to have been tested.

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

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

8 years ago[x86] Fix a bug in the auto-upgrade from r276416 where we failed to give
Chandler Carruth [Wed, 10 Aug 2016 07:41:26 +0000 (07:41 +0000)]
[x86] Fix a bug in the auto-upgrade from r276416 where we failed to give
a sufficiently low alignment for the IR load created.

There is no test case because we don't have any test cases for the *IR*
produced by the autoupgrade, only the x86 assembly, and it happens that
the x86 assembly for this intrinsic as it is tested in the autoupgrade
path just happens to not produce a separate load instruction where we
might have observed the alignment.

I'm going to follow up on the original commit to suggest getting
IR-level testing in addition to the asm level testing here so that we
can see and test these kinds of issues. We might never get an x86
instruction out with an alignment constraint, but we could stil
miscompile code by folding against the alignment marked on (or inferred
for in this case) the load.

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

8 years ago[SimplifyLibCalls] Restore the old behaviour, emit a libcall.
Davide Italiano [Wed, 10 Aug 2016 06:33:32 +0000 (06:33 +0000)]
[SimplifyLibCalls] Restore the old behaviour, emit a libcall.

Hal pointed out that the semantic of our intrinsic and the libc
call are slightly different. Add a comment while I'm here to
explain why we can't emit an intrinsic. Thanks Hal!

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

8 years agoDo not directly use inline threshold cl options in cost analysis.
Easwaran Raman [Wed, 10 Aug 2016 00:48:04 +0000 (00:48 +0000)]
Do not directly use inline threshold cl options in cost analysis.

This adds an InlineParams struct which is populated from the command line options by getInlineParams and passed to getInlineCost for the call analyzer to use.

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

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

8 years ago[OptDiag] Add class Doxygen comment
Adam Nemet [Wed, 10 Aug 2016 00:44:56 +0000 (00:44 +0000)]
[OptDiag] Add class Doxygen comment

This was requested in D22694.

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

8 years ago[Inliner,OptDiag] Add hotness attribute to opt diagnostics
Adam Nemet [Wed, 10 Aug 2016 00:44:44 +0000 (00:44 +0000)]
[Inliner,OptDiag] Add hotness attribute to opt diagnostics

Summary:
The inliner not being a function pass requires the work-around of
generating the OptimizationRemarkEmitter and in turn BFI on demand.
This will go away after the new PM is ready.

BFI is only computed inside ORE if the user has requested hotness
information for optimization diagnostitics (-pass-remark-with-hotness at
the 'opt' level).  Thus there is no additional overhead without the
flag.

Reviewers: hfinkel, davidxl, eraman

Subscribers: llvm-commits

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

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

8 years ago[scudo] Documentation update for Scudo, from https://reviews.llvm.org/D23332
Kostya Serebryany [Tue, 9 Aug 2016 23:57:04 +0000 (23:57 +0000)]
[scudo] Documentation update for Scudo, from https://reviews.llvm.org/D23332

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

8 years ago[IR] Remove some unused #includes (NFC)
Vedant Kumar [Tue, 9 Aug 2016 23:14:37 +0000 (23:14 +0000)]
[IR] Remove some unused #includes (NFC)

I needed a reader-writer lock for a downstream project and noticed that
llvm has one. Function.cpp is the only file in-tree that refers to it.
To anyone reading this: are you using RWMutex in out-of-tree code? Maybe
it's not worth keeping around any more...

Since we're not actually using RWMutex *here*, remove the #include (and
a few other stale headers while we're at it).

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

8 years agoMake LLVM_PRETTY_FUNCTION support __func__.
Zachary Turner [Tue, 9 Aug 2016 23:03:55 +0000 (23:03 +0000)]
Make LLVM_PRETTY_FUNCTION support __func__.

In case there are compilers that support neither __FUNCSIG__ or
__PRETTY_FUNCTION__, we fall back to __func__ as a last resort,
which should be guaranteed by C++11 and C99.

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

8 years agoGlobalISel: support 'undef' constant.
Tim Northover [Tue, 9 Aug 2016 23:01:30 +0000 (23:01 +0000)]
GlobalISel: support 'undef' constant.

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

8 years ago[LoopSimplify] Rebuild LCSSA for the inner loop after separating nested loops.
Michael Zolotukhin [Tue, 9 Aug 2016 22:44:56 +0000 (22:44 +0000)]
[LoopSimplify] Rebuild LCSSA for the inner loop after separating nested loops.

Summary:
This hopefully fixes PR28825. The problem now was that a value from the
original loop was used in a subloop, which became a sibling after separation.
While a subloop doesn't need an lcssa phi node, a sibling does, and that's
where we broke LCSSA. The most natural way to fix this now is to simply call
formLCSSA on the original loop: it'll do what we've been doing before plus
it'll cover situations described above.

I think we don't need to run formLCSSARecursively here, and we have an assert
to verify this (I've tried testing it on LLVM testsuite + SPECs). I'd be happy
to be corrected here though.

I also changed a run line in the test from '-lcssa -loop-unroll' to
'-lcssa -loop-simplify -indvars', because it exercises LCSSA
preservation to the same extent, but also makes less unrelated
transformation on the CFG, which makes it easier to verify.

Reviewers: chandlerc, sanjoy, silvas

Subscribers: llvm-commits

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

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

8 years ago[ValueTracking] Improve ValueTracking on left shift with nsw flag
Andrew Kaylor [Tue, 9 Aug 2016 22:41:35 +0000 (22:41 +0000)]
[ValueTracking] Improve ValueTracking on left shift with nsw flag

Patch by Li Huang

Differential Revison: https://reviews.llvm.org/D23296

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

8 years ago[WebAssembly] Add -emscripten-cxx-exceptions-whitelist option
Derek Schuff [Tue, 9 Aug 2016 22:37:00 +0000 (22:37 +0000)]
[WebAssembly] Add -emscripten-cxx-exceptions-whitelist option

This patch adds -emscripten-cxx-exceptions-whitelist option to
WebAssemblyLowerEmscriptenExceptions pass. This options is the list of
function names in which Emscripten-style exception handling is enabled.
This is to support emscripten's EXCEPTION_CATCHING_WHITELIST which
exists because of the performance impact of emscripten's non-zero-cost
EH method.

Patch by Heejin Ahn

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

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

8 years agoAdd a platform independent version of __PRETTY_FUNCTION__.
Zachary Turner [Tue, 9 Aug 2016 22:03:45 +0000 (22:03 +0000)]
Add a platform independent version of __PRETTY_FUNCTION__.

MSVC doesn't have this, it only has __FUNCSIG__.  So this adds
a new macro called LLVM_PRETTY_FUNCTION which evaluates to the
right thing on any platform.

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

8 years agoGlobalISel: first translation support for Constants.
Tim Northover [Tue, 9 Aug 2016 21:28:04 +0000 (21:28 +0000)]
GlobalISel: first translation support for Constants.

For now put them all in the entry block. This should be correct but may give
poor runtime performance. Hopefully MachineSinking combined with
isReMaterializable can solve those issues, but if not the interface is sound
enough to support alternatives.

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

8 years agoadd test cases for missed vselect optimizations (PR28895)
Sanjay Patel [Tue, 9 Aug 2016 21:07:17 +0000 (21:07 +0000)]
add test cases for missed vselect optimizations (PR28895)

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

8 years ago[ExecutionEngine] Disable weak symbol tests for COFF.
Lang Hames [Tue, 9 Aug 2016 20:48:22 +0000 (20:48 +0000)]
[ExecutionEngine] Disable weak symbol tests for COFF.

COFF doesn't support weak linkage on functions.

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

8 years agoFix the runtime error caused by "Use ValueOffsetPair to enhance value reuse during...
Wei Mi [Tue, 9 Aug 2016 20:40:03 +0000 (20:40 +0000)]
Fix the runtime error caused by "Use ValueOffsetPair to enhance value reuse during SCEV expansion".

The patch is to fix the bug in PR28705. It was caused by setting wrong return
value for SCEVExpander::findExistingExpansion. The return values of findExistingExpansion
have different meanings when the function is used in different ways so it is easy to make
mistake. The fix creates two new interfaces to replace SCEVExpander::findExistingExpansion,
and specifies where each interface is expected to be used.

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

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

8 years agoRecommit "Use ValueOffsetPair to enhance value reuse during SCEV expansion".
Wei Mi [Tue, 9 Aug 2016 20:37:50 +0000 (20:37 +0000)]
Recommit "Use ValueOffsetPair to enhance value reuse during SCEV expansion".

The fix for PR28705 will be committed consecutively.

In D12090, the ExprValueMap was added to reuse existing value during SCEV expansion.
However, const folding and sext/zext distribution can make the reuse still difficult.

A simplified case is: suppose we know S1 expands to V1 in ExprValueMap, and
  S1 = S2 + C_a
  S3 = S2 + C_b
where C_a and C_b are different SCEVConstants. Then we'd like to expand S3 as
V1 - C_a + C_b instead of expanding S2 literally. It is helpful when S2 is a
complex SCEV expr and S2 has no entry in ExprValueMap, which is usually caused
by the fact that S3 is generated from S1 after const folding.

In order to do that, we represent ExprValueMap as a mapping from SCEV to
ValueOffsetPair. We will save both S1->{V1, 0} and S2->{V1, C_a} into the
ExprValueMap when we create SCEV for V1. When S3 is expanded, it will first
expand S2 to V1 - C_a because of S2->{V1, C_a} in the map, then expand S3 to
V1 - C_a + C_b.

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

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

8 years agoWithout explicitly including <string>, I'm getting an error on the new code in this...
Chris Dewhurst [Tue, 9 Aug 2016 20:32:59 +0000 (20:32 +0000)]
Without explicitly including <string>, I'm getting an error on the new code in this file. Won't present an issue for anyone that isn't having the same trouble as me.

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

8 years ago[ADT] Change iterator_adaptor_base's default template arguments to forward more under...
Tim Shen [Tue, 9 Aug 2016 20:23:13 +0000 (20:23 +0000)]
[ADT] Change iterator_adaptor_base's default template arguments to forward more underlying typedefs

Reviewers: chandlerc

Subscribers: llvm-commits

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

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

8 years agoregenerate checks and remove 'opt' run dependency
Sanjay Patel [Tue, 9 Aug 2016 20:09:16 +0000 (20:09 +0000)]
regenerate checks and remove 'opt' run dependency

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

8 years ago[EarlyCSE] Teach about CSE'ing over invariant.start intrinsics
Anna Thomas [Tue, 9 Aug 2016 20:00:47 +0000 (20:00 +0000)]
[EarlyCSE] Teach about CSE'ing over invariant.start intrinsics

Summary:
Teach EarlyCSE about invariant.start intrinsic. Specifically, we can perform
store-load, load-load forwarding over this call.

Reviewers: majnemer, reames, dberlin, sanjoy

Subscribers: llvm-commits

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

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

8 years ago[llvm-cov] Swapped the line and count columns.
Ying Yi [Tue, 9 Aug 2016 19:53:35 +0000 (19:53 +0000)]
[llvm-cov]  Swapped the line and count columns.

In the coverage report, the line and count columns have been swapped to make it more readable.
A follow-up commit in compiler-rt is needed

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

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

8 years agoupdate to use FileCheck and auto-generate checks
Sanjay Patel [Tue, 9 Aug 2016 19:42:52 +0000 (19:42 +0000)]
update to use FileCheck and auto-generate checks

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

8 years agoRe-apply r278065 (Weak symbol support in RuntimeDyld) with a fix for ELF.
Lang Hames [Tue, 9 Aug 2016 19:27:17 +0000 (19:27 +0000)]
Re-apply r278065 (Weak symbol support in RuntimeDyld) with a fix for ELF.

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

8 years ago[vim] Update the llvm.vim syntax file
David Majnemer [Tue, 9 Aug 2016 18:34:19 +0000 (18:34 +0000)]
[vim] Update the llvm.vim syntax file

We never updated this file to contain the WinEH instructions.
Also, add the dereferenceable attribute.

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

8 years ago[X86] Don't model UD2/UD2B as a terminator
David Majnemer [Tue, 9 Aug 2016 17:55:12 +0000 (17:55 +0000)]
[X86] Don't model UD2/UD2B as a terminator

A UD2 might make its way into the program via a call to @llvm.trap.
Obviously, calls are not terminators.  However, we modeled the X86
instruction, UD2, as a terminator.  Later on, this confuses the epilogue
insertion machinery which results in the epilogue getting inserted
before the UD2.  For some platforms, like x64, the result is a
violation of the ABI.

Instead, model UD2/UD2B as a side effecting instruction which may
observe memory.

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

8 years ago[DAGCombiner] Better support for shifting large value type by constants
Simon Pilgrim [Tue, 9 Aug 2016 17:39:11 +0000 (17:39 +0000)]
[DAGCombiner] Better support for shifting large value type by constants

As detailed on D22726, much of the shift combining code assume constant values will fit into a uint64_t value and calls ConstantSDNode::getZExtValue where it probably shouldn't (leading to asserts). Using APInt directly avoids this problem but we encounter other assertions if we attempt to compare/operate on 2 APInt of different bitwidths.

This patch adds a helper function to ensure that 2 APInt values are zero extended as required so that they can be safely used together. I've only added an initial example use for this to the '(SHIFT (SHIFT x, c1), c2) --> (SHIFT x, (ADD c1, c2))' combines. Further cases can easily be added as required.

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

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

8 years ago[AliasAnalysis] Treat invariant.start as read-memory
Anna Thomas [Tue, 9 Aug 2016 17:18:05 +0000 (17:18 +0000)]
[AliasAnalysis] Treat invariant.start as read-memory

Summary:
We teach alias analysis that invariant.start is readonly.
This helps with GVN and memcopy optimizations that currently treat.
invariant.start as a clobber.
We need to treat this as readonly, so that DSE does not incorrectly
remove stores prior to the invariant.start

Reviewers: sanjoy, reames, majnemer, dberlin

Subscribers: llvm-commits

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

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

8 years agoauto-generate checks
Sanjay Patel [Tue, 9 Aug 2016 17:03:51 +0000 (17:03 +0000)]
auto-generate checks

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

8 years agoauto-generate checks
Sanjay Patel [Tue, 9 Aug 2016 17:02:17 +0000 (17:02 +0000)]
auto-generate checks

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

8 years agoauto-generate checks
Sanjay Patel [Tue, 9 Aug 2016 16:59:54 +0000 (16:59 +0000)]
auto-generate checks

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

8 years agotest-release.sh: Drop autoconf support
Hans Wennborg [Tue, 9 Aug 2016 16:46:02 +0000 (16:46 +0000)]
test-release.sh: Drop autoconf support

The autoconf build was deleted some time ago.

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

8 years agoadd tests for missing vector icmp folds
Sanjay Patel [Tue, 9 Aug 2016 16:39:05 +0000 (16:39 +0000)]
add tests for missing vector icmp folds

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

8 years agoupdate to use FileCheck and auto-generate checks
Sanjay Patel [Tue, 9 Aug 2016 16:19:57 +0000 (16:19 +0000)]
update to use FileCheck and auto-generate checks

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

8 years agoregenerate checks
Sanjay Patel [Tue, 9 Aug 2016 16:17:46 +0000 (16:17 +0000)]
regenerate checks

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

8 years agoadd tests for missing vector icmp folds
Sanjay Patel [Tue, 9 Aug 2016 16:05:57 +0000 (16:05 +0000)]
add tests for missing vector icmp folds

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

8 years ago[Profile] turn off verbose warnings by default
Xinliang David Li [Tue, 9 Aug 2016 15:35:28 +0000 (15:35 +0000)]
[Profile] turn off verbose warnings by default

no prof data for func warning is turned off by default
due to its high verbosity and minimal usefulness.

Differential Revision: http://reviews.llvm.org/D23295

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

8 years ago[LVI] Make LVI smarter about comparisons with non-constants
Artur Pilipenko [Tue, 9 Aug 2016 14:50:08 +0000 (14:50 +0000)]
[LVI] Make LVI smarter about comparisons with non-constants

Make LVI smarter about comparisons with a non-constant. For example, a s< b constraints a to be in [INT_MIN, INT_MAX) range. This is a part of https://llvm.org/bugs/show_bug.cgi?id=28620 fix.

Reviewed By: sanjoy

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

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

8 years ago[X86][XOP] Add support for combining target shuffles to VPERMIL2PD/VPERMIL2PS
Simon Pilgrim [Tue, 9 Aug 2016 12:56:15 +0000 (12:56 +0000)]
[X86][XOP] Add support for combining target shuffles to VPERMIL2PD/VPERMIL2PS

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

8 years agoAdd `#ifdef __cplusplus` around `extern "C"` in Compiler.h. NFC.
Kuba Brecka [Tue, 9 Aug 2016 12:12:15 +0000 (12:12 +0000)]
Add `#ifdef __cplusplus` around `extern "C"` in Compiler.h.  NFC.

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

8 years agoAVX-512: A new test for FMA intrinsic
Elena Demikhovsky [Tue, 9 Aug 2016 11:54:14 +0000 (11:54 +0000)]
AVX-512: A new test for FMA intrinsic

A new test that explores sub-optimal sequence of FMA intrinsic and FNEG operation.
An upcoming patch will fix it.

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