OSDN Git Service

android-x86/external-llvm.git
6 years agoRevert r327397 [CodeView] Omit forward references for unnamed structs and ...
Brock Wyma [Tue, 13 Mar 2018 15:56:20 +0000 (15:56 +0000)]
Revert r327397 [CodeView] Omit forward references for unnamed structs and ...

This reverts commit r327397 to investigate a buildbot failure.

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

6 years agotest commit: fix formatting of a comment
Zaara Syeda [Tue, 13 Mar 2018 15:49:05 +0000 (15:49 +0000)]
test commit: fix formatting of a comment
This is  a simple change to do the test commit.

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

6 years ago[dsymutil] Unify error handling outside DwarfLinker.
Jonas Devlieghere [Tue, 13 Mar 2018 15:47:38 +0000 (15:47 +0000)]
[dsymutil] Unify error handling outside DwarfLinker.

This is a follow-up to r327137 where we unified error handling for the
DwarfLinker. This replaces calls to errs() and outs() with the
appropriate ostream wrapper everywhere in dsymutil.

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

6 years ago[mips] Guard traps for microMIPS correctly
Simon Dardis [Tue, 13 Mar 2018 15:46:58 +0000 (15:46 +0000)]
[mips] Guard traps for microMIPS correctly

This is part of fixing the instruction predicates for MIPS.

Reviewers: atanasyan, abeserminji

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

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

6 years ago[ThinLTO] Clear dllimport when setting dso_local.
Rafael Espindola [Tue, 13 Mar 2018 15:24:51 +0000 (15:24 +0000)]
[ThinLTO] Clear dllimport when setting dso_local.

This is PR36686.

If a user of a library is LTOed with that library we take the
opportunity to set dso_local, but we don't clear dllimport, which
creates an invalid IR.

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

6 years ago[X86][Btver2] Split i8/i16/i32/i64 div/idiv costs
Simon Pilgrim [Tue, 13 Mar 2018 15:22:24 +0000 (15:22 +0000)]
[X86][Btver2] Split i8/i16/i32/i64 div/idiv costs

We were assuming a mixture of 32/64 division costs.

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

6 years ago[MC] Move the instruction latency computation from TargetSchedModel to MCSchedModel.
Andrea Di Biagio [Tue, 13 Mar 2018 15:22:13 +0000 (15:22 +0000)]
[MC] Move the instruction latency computation from TargetSchedModel to MCSchedModel.

The goal is to make the latency information accessible through the MCSchedModel
interface. This is particularly important for tools like llvm-mca that only have
access to the MCSchedModel API.

This partially fixes PR36676.
No functional change intended.

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

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

6 years ago[InstCombine] fix fmul reassociation to avoid creating an extra fdiv
Sanjay Patel [Tue, 13 Mar 2018 14:46:32 +0000 (14:46 +0000)]
[InstCombine] fix fmul reassociation to avoid creating an extra fdiv

This was supposed to be an NFC refactoring that will eventually allow
eliminating the isFast() predicate, but there's a rare possibility
that we would pessimize the code as shown in the test case because
we failed to check 'hasOneUse()' properly. This version also removes
an inefficiency of the old code; we would look for:
(X * C) * C1 --> X * (C * C1)
...but that pattern is always handled by
SimplifyAssociativeOrCommutative().

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

6 years ago[mips] Fix the definitions of the EVA instructions
Simon Dardis [Tue, 13 Mar 2018 14:39:44 +0000 (14:39 +0000)]
[mips] Fix the definitions of the EVA instructions

Correct their availability to their respective ISAs.

Reviewers: atanasyan

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

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

6 years ago[dsymutil] Remove old error/warn functions. NFC.
Jonas Devlieghere [Tue, 13 Mar 2018 14:28:07 +0000 (14:28 +0000)]
[dsymutil] Remove old error/warn functions. NFC.

This removes the old error and warn functions that were still present in
the dwarf linker.

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

6 years ago[dsymutil] Perform analyzeContextInfo and CloneDIEs in parallel
Jonas Devlieghere [Tue, 13 Mar 2018 14:27:15 +0000 (14:27 +0000)]
[dsymutil] Perform analyzeContextInfo and CloneDIEs in parallel

This patch makes dsymutil perform analyzeContextInfo and CloneDIEs in
parallel. For the same object file, there is a dependency between the
two. However, we can do analyzeContextInfo for the next object file
while cloning DIEs for the current. This is exactly the approach taken
in this patch.

For WebCore, this leads to a performance improvement of 29% and for
clang we see similar results with at 32% improvement.

A big thanks to Pete Cooper who came up with the original idea and
the PoC.

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

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

6 years ago[SROA] Take advantage of separate alignments for memcpy source and destination
Daniel Neilson [Tue, 13 Mar 2018 14:25:33 +0000 (14:25 +0000)]
[SROA] Take advantage of separate alignments for memcpy source and destination

Summary:
This change is part of step five in the series of changes to remove alignment argument from
memcpy/memmove/memset in favour of alignment attributes. In particular, this changes the
SROA pass to cease using the old getAlignment() & setAlignment() APIs of MemoryIntrinsic in
favour of getting source & dest specific alignments through the new API. This allows us
to enhance visitMemTransferInst to be more aggressive setting the alignment in memcpy
calls that it creates, as well as to only change the alignment of a memcpy/memmove
argument that it replaces.

Steps:
Step 1) Remove alignment parameter and create alignment parameter attributes for
memcpy/memmove/memset. ( rL322965, rC322964, rL322963 )
Step 2) Expand the IRBuilder API to allow creation of memcpy/memmove with differing
source and dest alignments. ( rL323597 )
Step 3) Update Clang to use the new IRBuilder API. ( rC323617 )
Step 4) Update Polly to use the new IRBuilder API. ( rL323618 )
Step 5) Update LLVM passes that create memcpy/memmove calls to use the new IRBuilder API,
and those that use use MemIntrinsicInst::[get|set]Alignment() to use [get|set]DestAlignment()
and [get|set]SourceAlignment() instead. ( rL323886, rL323891, rL324148, rL324273, rL324278,
rL324384, rL324395, rL324402, rL324626, rL324642, rL324653, rL324654, rL324773, rL324774,
rL324781, rL324784, rL324955, rL324960, rL325816 )
Step 6) Remove the single-alignment IRBuilder API for memcpy/memmove, and the
MemIntrinsicInst::[get|set]Alignment() methods.

Reference
   http://lists.llvm.org/pipermail/llvm-dev/2015-August/089384.html
   http://lists.llvm.org/pipermail/llvm-commits/Week-of-Mon-20151109/312083.html

Reviewers: chandlerc, bollu, efriedma

Reviewed By: efriedma

Subscribers: efriedma, eraman, llvm-commits

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

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

6 years ago[CodeView] Omit forward references for unnamed structs and unions
Brock Wyma [Tue, 13 Mar 2018 14:14:16 +0000 (14:14 +0000)]
[CodeView] Omit forward references for unnamed structs and unions

Codeview references to unnamed structs and unions are expected to refer to the
complete type definition instead of a forward reference so Visual Studio can
resolve the type properly.

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

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

6 years ago[llvm-mca] Use a const ArrayRef in a few places. NFC
Andrea Di Biagio [Tue, 13 Mar 2018 13:58:02 +0000 (13:58 +0000)]
[llvm-mca] Use a const ArrayRef in a few places. NFC

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

6 years ago[TTI] Fix a typo in the comment
Haicheng Wu [Tue, 13 Mar 2018 13:52:47 +0000 (13:52 +0000)]
[TTI] Fix a typo in the comment

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

6 years ago[llvm-mca] Fix unused variable warning in opt mode.
Clement Courbet [Tue, 13 Mar 2018 13:44:18 +0000 (13:44 +0000)]
[llvm-mca] Fix unused variable warning in opt mode.

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

6 years ago[llvm-mca] Refactor event listeners to make the backend agnostic to event types.
Clement Courbet [Tue, 13 Mar 2018 13:11:01 +0000 (13:11 +0000)]
[llvm-mca] Refactor event listeners to make the backend agnostic to event types.

Summary: This is a first step towards making the pipeline configurable.

Subscribers: llvm-commits, andreadb

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

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

6 years ago[mips] Don't create nested CALLSEQ_START..CALLSEQ_END nodes.
Simon Dardis [Tue, 13 Mar 2018 12:50:03 +0000 (12:50 +0000)]
[mips] Don't create nested CALLSEQ_START..CALLSEQ_END nodes.

For the MIPS O32 ABI, the current call lowering logic naively lowers each
call, creating the reserved argument area to hold the argument spill areas for
$a0..$a3 and the outgoing parameter area if one is required at each call site.

In the case of a sufficently large byval argument, a call to memcpy is used
to write the start+16..end of the argument into the outgoing parameter area.
This is done within the CALLSEQ_START..CALLSEQ_END of the callee. The CALLSEQ
nodes are responsible for performing the necessary stack adjustments.

Since the O32/N32/N64 MIPS ABIs do not have a red-zone and writing below the
stack pointer and reading the values back is unpredictable, the call to memcpy
cannot be hoisted out of the callee's CALLSEQ nodes.

However, for the O32 ABI requires the reserved argument area for functions
which have parameters. The naive lowering of calls will then create nested
CALLSEQ sequences. For N32 and N64 these nodes are also created, but with
zero stack adjustments as those ABIs do not have a reserved argument area.

This patch addresses the correctness issue by recognizing the special case
of lowering a byval argument that uses memcpy. By recognizing that the
incoming chain already has a CALLSEQ_START node on it when calling memcpy,
the CALLSEQ nodes are not created. For the N32 and N64 ABIs, this is not an
issue, as no stack adjustment has to be performed.

For the O32 ABI, the correctness reasoning is different. In the case of a
sufficently large byval argument, registers a0..a3 are going to be used for
the callee's arguments, mandating the creation of the reserved argument area.
The call to memcpy in the naive case will also create its own reserved
argument area. However, since the reserved argument area consists of undefined
values, both calls can use the same reserved argument area.

Reviewers: abeserminji, atanasyan

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

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

6 years ago[X86][SSE41] createVariablePermute v2X64 - PCMPEQQ can test for index 0/1 and select...
Simon Pilgrim [Tue, 13 Mar 2018 12:22:58 +0000 (12:22 +0000)]
[X86][SSE41] createVariablePermute v2X64 - PCMPEQQ can test for index 0/1 and select between them.

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

6 years ago[dsymutil] Unbreak non-Darwin bots.
Jonas Devlieghere [Tue, 13 Mar 2018 11:32:19 +0000 (11:32 +0000)]
[dsymutil] Unbreak non-Darwin bots.

BinaryHolder -> BinHolder

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

6 years ago[dsymutil] Introduce LinkContext. NFC.
Jonas Devlieghere [Tue, 13 Mar 2018 10:52:49 +0000 (10:52 +0000)]
[dsymutil] Introduce LinkContext. NFC.

This patch introduces the LinkContext which is necessary to have
dsymutil perform analysis and cloning of DIEs in parallel. As requested
in D43945, I'm landing this as two separate commits.

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

6 years ago[Evaluator] Evaluate load/store with bitcast
Eugene Leviant [Tue, 13 Mar 2018 10:19:50 +0000 (10:19 +0000)]
[Evaluator] Evaluate load/store with bitcast

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

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

6 years ago[CodeGenPrepare] Respect endianness in splitMergedValStore.
Jonas Paulsson [Tue, 13 Mar 2018 08:36:20 +0000 (08:36 +0000)]
[CodeGenPrepare]  Respect endianness in splitMergedValStore.

splitMergedValStore will split a store into two if target prefers this, or if
-force-split-store is passed.

This patch adds the missing handling for endianness in this function along
with a test case.

Review: Eli Friedman
https://reviews.llvm.org/D44396

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

6 years ago[SCEV][NFC] Smarter implementation of isAvailableAtLoopEntry
Max Kazantsev [Tue, 13 Mar 2018 07:46:06 +0000 (07:46 +0000)]
[SCEV][NFC] Smarter implementation of isAvailableAtLoopEntry

isAvailableAtLoopEntry duplicates logic of `properlyDominates` after checking invariance.
This patch replaces this logic with invocation of this method which is more profitable
because it supports caching.

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

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

6 years ago[MergeICmps] Make sure that the comparison only has one use.
Clement Courbet [Tue, 13 Mar 2018 07:05:55 +0000 (07:05 +0000)]
[MergeICmps] Make sure that the comparison only has one use.

Summary: Fixes PR36557.

Reviewers: trentxintong, spatel

Subscribers: mstorsjo, llvm-commits

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

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

6 years agobpf: Enhance debug information for peephole optimization passes
Yonghong Song [Tue, 13 Mar 2018 06:47:07 +0000 (06:47 +0000)]
bpf: Enhance debug information for peephole optimization passes

Add more debug information for peephole optimization passes.

These would only be enabled for debug version binary and could help
analyzing why some optimization opportunities were missed.

Signed-off-by: Jiong Wang <jiong.wang@netronome.com>
Signed-off-by: Yonghong Song <yhs@fb.com>
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@327371 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agobpf: New post-RA peephole optimization pass to eliminate bad RA codegen
Yonghong Song [Tue, 13 Mar 2018 06:47:06 +0000 (06:47 +0000)]
bpf: New post-RA peephole optimization pass to eliminate bad RA codegen

This new pass eliminate identical move:

  MOV rA, rA

This is particularly possible to happen when sub-register support
enabled. The special type cast insn MOV_32_64 involves different
register class on src (i32) and dst (i64), RA could generate useless
instruction due to this.

This pass also could serve as the bast for further post-RA optimization.

Signed-off-by: Jiong Wang <jiong.wang@netronome.com>
Signed-off-by: Yonghong Song <yhs@fb.com>
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@327370 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agobpf: Don't expand BSWAP on i32, promote it
Yonghong Song [Tue, 13 Mar 2018 06:47:05 +0000 (06:47 +0000)]
bpf: Don't expand BSWAP on i32, promote it

Currently, there is no ALU32 bswap support in eBPF ISA.

BSWAP on i32 was set to EXPAND which would need about eight instructions
for single BSWAP.

It would be more efficient to promote it to i64, then doing BSWAP on i64.
For eBPF programs, most of the promotion are zero extensions which are
likely be elimiated later by peephole optimizations.

Signed-off-by: Jiong Wang <jiong.wang@netronome.com>
Signed-off-by: Yonghong Song <yhs@fb.com>
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@327369 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agobpf: Support subregister definition check on PHI node
Yonghong Song [Tue, 13 Mar 2018 06:47:04 +0000 (06:47 +0000)]
bpf: Support subregister definition check on PHI node

This patch relax the subregister definition check on Phi node.
Previously, we just cancel the optimizatoin when the definition is Phi
node while actually we could further check the definitions of incoming
parameters of PHI node.

This helps catch more elimination opportunities.

Signed-off-by: Jiong Wang <jiong.wang@netronome.com>
Signed-off-by: Yonghong Song <yhs@fb.com>
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@327368 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agobpf: Extends zero extension elimination beyond comparison instructions
Yonghong Song [Tue, 13 Mar 2018 06:47:03 +0000 (06:47 +0000)]
bpf: Extends zero extension elimination beyond comparison instructions

The current zero extension elimination was restricted to operands of
comparison. It actually could be extended to more cases.

For example:

  int *inc_p (int *p, unsigned a)
  {
    return p + a;
  }

'a' will be promoted to i64 during addition, and the zero extension could
be eliminated as well.

For the elimination optimization, it should be much better to start
recognizing the candidate sequence from the SRL instruction instead of J*
instructions.

This patch makes it an generic zero extension elimination pass instead of
one restricted with comparison.

Signed-off-by: Jiong Wang <jiong.wang@netronome.com>
Signed-off-by: Yonghong Song <yhs@fb.com>
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@327367 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agobpf: J*_RR should check both operands
Yonghong Song [Tue, 13 Mar 2018 06:47:02 +0000 (06:47 +0000)]
bpf: J*_RR should check both operands

There is a mistake in current code that we "break" out the optimization
when the first operand of J*_RR doesn't qualify the elimination. This
caused some elimination opportunities missed, for example the one in the
testcase.

The code should just fall through to handle the second operand.

Signed-off-by: Jiong Wang <jiong.wang@netronome.com>
Signed-off-by: Yonghong Song <yhs@fb.com>
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@327366 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agobpf: Tighten subregister definition check
Yonghong Song [Tue, 13 Mar 2018 06:47:00 +0000 (06:47 +0000)]
bpf: Tighten subregister definition check

The current subregister definition check stops after the MOV_32_64
instruction.

This means we are thinking all the following instruction sequences
are safe to be eliminated:

  MOV_32_64 rB, wA
  SLL_ri    rB, rB, 32
  SRL_ri    rB, rB, 32

However, this is *not* true. The source subregister wA of MOV_32_64 could
come from a implicit truncation of 64-bit register in which case the high
bits of the 64-bit register is not zeroed, therefore we can't eliminate
above sequence.

For example, for i32_val, we shouldn't do the elimination:

  long long bar ();

  int foo (int b, int c)
  {
    unsigned int i32_val = (unsigned int) bar();

    if (i32_val < 10)
      return b;
    else
      return c;
  }

Signed-off-by: Jiong Wang <jiong.wang@netronome.com>
Signed-off-by: Yonghong Song <yhs@fb.com>
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@327365 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agobpf: Add more check directives in peephole testcase
Yonghong Song [Tue, 13 Mar 2018 06:46:59 +0000 (06:46 +0000)]
bpf: Add more check directives in peephole testcase

Improve the test accuracy by adding more check directives.

Shifts are expected to be eliminated for zero extension but not for signed
extension.

Signed-off-by: Jiong Wang <jiong.wang@netronome.com>
Signed-off-by: Yonghong Song <yhs@fb.com>
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@327364 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoRevert [SCEV] Fix isKnownPredicate
Serguei Katkov [Tue, 13 Mar 2018 06:36:00 +0000 (06:36 +0000)]
Revert [SCEV] Fix isKnownPredicate

It is a revert of rL327362 which causes build bot failures with assert like

Assertion `isAvailableAtLoopEntry(RHS, L) && "RHS is not available at Loop Entry"' failed.

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

6 years ago[SCEV] Fix isKnownPredicate
Serguei Katkov [Tue, 13 Mar 2018 06:10:27 +0000 (06:10 +0000)]
[SCEV] Fix isKnownPredicate

IsKnownPredicate is updated to implement the following algorithm
proposed by @sanjoy and @mkazantsev :
isKnownPredicate(Pred, LHS, RHS) {
  Collect set S all loops on which either LHS or RHS depend.
  If S is non-empty
    a. Let PD be the element of S which is dominated by all other elements of S
    b. Let E(LHS) be value of LHS on entry of PD.
       To get E(LHS), we should just take LHS and replace all AddRecs that
       are attached to PD on with their entry values.
       Define E(RHS) in the same way.
    c. Let B(LHS) be value of L on backedge of PD.
       To get B(LHS), we should just take LHS and replace all AddRecs that
       are attached to PD on with their backedge values.
       Define B(RHS) in the same way.
    d. Note that E(LHS) and E(RHS) are automatically available on entry of PD,
       so we can assert on that.
    e. Return true if isLoopEntryGuardedByCond(Pred, E(LHS), E(RHS)) &&
                      isLoopBackedgeGuardedByCond(Pred, B(LHS), B(RHS))
Return true if Pred, L, R is known from ranges, splitting etc.
}
This is follow-up for https://reviews.llvm.org/D42417.

Reviewers: sanjoy, mkazantsev, reames
Reviewed By: sanjoy, mkazantsev
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D43507

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

6 years agoReland r327041: [ThinLTO] Keep available_externally symbols live
Vlad Tsyrklevich [Tue, 13 Mar 2018 05:08:48 +0000 (05:08 +0000)]
Reland r327041: [ThinLTO] Keep available_externally symbols live

Summary:
This change fixes PR36483. The bug was originally introduced by a change
that marked non-prevailing symbols dead. This broke LowerTypeTests
handling of available_externally functions, which are non-prevailing.
LowerTypeTests uses liveness information to avoid emitting thunks for
unused functions.

Marking available_externally functions dead is incorrect, the functions
are used though the function definitions are not. This change keeps them
live, and lets the EliminateAvailableExternally/GlobalDCE passes remove
them later instead.

(Reland with a suspected fix for a unit test failure I haven't been able
to reproduce locally)

Reviewers: pcc, tejohnson

Reviewed By: tejohnson

Subscribers: grimar, mehdi_amini, inglorion, eraman, llvm-commits

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

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

6 years ago[LTO] Return proper error object rather than null LTOModule
Adam Nemet [Tue, 13 Mar 2018 04:37:01 +0000 (04:37 +0000)]
[LTO] Return proper error object rather than null LTOModule

This caused a crash in LTOModule::createInLocalContext.

rdar://37926841

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

6 years ago[ThinLTO] Add funtions in callees metadata to CallGraphEdges
Taewook Oh [Tue, 13 Mar 2018 04:26:58 +0000 (04:26 +0000)]
[ThinLTO] Add funtions in callees metadata to CallGraphEdges

Summary:
If there's a callees metadata attached to the indirect call instruction, add CallGraphEdges to the callees mentioned in the metadata when computing FunctionSummary.

* Why this is necessary:
Consider following code example:
```
(foo.c)
static int f1(int x) {...}
static int f2(int x);
static int (*fptr)(int) = f2;
static int f2(int x) {
  if (x) fptr=f1; return f1(x);
}
int foo(int x) {
  (*fptr)(x); // !callees metadata of !{i32 (i32)* @f1, i32 (i32)* @f2} would be attached to this call.
}

(bar.c)
int bar(int x) {
  return foo(x);
}
```

At LTO time when `foo.o` is imported into `bar.o`, function `foo` might be inlined into `bar` and PGO-guided indirect call promotion will run after that. If the profile data tells that the promotion of `@f1` or `@f2` is beneficial, the optimizer will check if the "promoted" `@f1` or `@f2` (such as `@f1.llvm.0` or `@f2.llvm.0`) is available. Without this patch, importing `!callees` metadata would only add promoted declarations of `@f1` and `@f2` to the `bar.o`, but still the optimizer will assume that the function is available and perform the promotion. The result of that is link failure with `undefined reference to @f1.llvm.0`.

This patch fixes this problem by adding callees in the `!callees` metadata to CallGraphEdges so that their definition would be properly imported into.

One may ask that there already is a logic to add indirect call promotion targets to be added to CallGraphEdges. However, if profile data says "indirect call promotion is only beneficial under a certain inline context", the logic wouldn't work. In the code example above, if profile data is like
```
bar:1000000:100000
  1:100000
    1: foo:100000
        1: 100000 f1:100000
```
, Computing FunctionSummary for `foo.o` wouldn't add `foo->f1` to CallGraphEdges. (Also, it is at least "possible" that one can provide profile data to only link step but not to compilation step).

Reviewers: tejohnson, mehdi_amini, pcc

Reviewed By: tejohnson

Subscribers: inglorion, eraman, llvm-commits

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

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

6 years ago[LegalizeTypes] In SplitVecOp_TruncateHelper, use GetSplitVector on the input instead...
Craig Topper [Tue, 13 Mar 2018 01:17:40 +0000 (01:17 +0000)]
[LegalizeTypes] In SplitVecOp_TruncateHelper, use GetSplitVector on the input instead of creating new extract_subvectors.

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

6 years agoObjCARC: address review comments from majnemer
Saleem Abdulrasool [Mon, 12 Mar 2018 23:48:20 +0000 (23:48 +0000)]
ObjCARC: address review comments from majnemer

I forgot to incorporate these comments into the original revision.  This
is just code cleanup addressing the feedback, NFC.

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

6 years ago[llvm] Fix mc tests
Alexander Shaposhnikov [Mon, 12 Mar 2018 23:36:25 +0000 (23:36 +0000)]
[llvm] Fix mc tests

This diff adjusts the mc tests after changing the format
of llvm-readobj output for .group sections.

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

6 years ago[InstCombine] add test to show fmul transform creates extra fdiv; NFC
Sanjay Patel [Mon, 12 Mar 2018 23:10:08 +0000 (23:10 +0000)]
[InstCombine] add test to show fmul transform creates extra fdiv; NFC

Also, move fmul reassociation tests to the same file as other fmul transforms.

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

6 years ago[llvm-readobj] Extend the output of -elf-section-groups
Alexander Shaposhnikov [Mon, 12 Mar 2018 22:40:09 +0000 (22:40 +0000)]
[llvm-readobj] Extend the output of -elf-section-groups

This diff extends the output of -elf-section-groups
(llvm style, gnu style is unchanged since it's meant to be
compatible with binutils readelf) with sh_link and sh_info.
This change will enable us to use llvm-readobj -elf-section-groups
for testing llvm-objcopy's support for .group sections.

Test plan: make check-all

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

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

6 years agoBlockExtractor: Don’t delete functions directly
Volkan Keles [Mon, 12 Mar 2018 22:28:18 +0000 (22:28 +0000)]
BlockExtractor: Don’t delete functions directly

Blocks may have function calls, so don’t erase functions
directly to avoid erasing a function that has a user.

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

6 years ago[PatternMatch] enhance m_NaN() to ignore undef elements in vectors
Sanjay Patel [Mon, 12 Mar 2018 22:18:47 +0000 (22:18 +0000)]
[PatternMatch] enhance m_NaN() to ignore undef elements in vectors

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

6 years agoObjCARC: teach the cloner about funclets
Saleem Abdulrasool [Mon, 12 Mar 2018 21:46:09 +0000 (21:46 +0000)]
ObjCARC: teach the cloner about funclets

In the case that the CallInst that is being moved has an associated
operand bundle which is a funclet, the move will construct an invalid
instruction.  The new site will have a different token and needs to be
reassociated with the new instruction.

Unfortunately, there is no way to alter the bundle after the
construction of the instruction.  Replace the call instruction cloning
with a custom helper to clone the instruction and reassociate the
funclet token.

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

6 years ago[InstSimplify] add fcmp tests for constant NaN vector with undef elt; NFC
Sanjay Patel [Mon, 12 Mar 2018 21:44:17 +0000 (21:44 +0000)]
[InstSimplify] add fcmp tests for constant NaN vector with undef elt; NFC

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

6 years ago[X86][Btver2] Clean up formatting/comments in scheduler model. NFCI.
Simon Pilgrim [Mon, 12 Mar 2018 21:35:12 +0000 (21:35 +0000)]
[X86][Btver2] Clean up formatting/comments in scheduler model. NFCI.

Moved 'special cases' to be closer to other system classes.

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

6 years agoRemove the LoopInstSimplify pass (-loop-instsimplify)
Vedant Kumar [Mon, 12 Mar 2018 20:49:42 +0000 (20:49 +0000)]
Remove the LoopInstSimplify pass (-loop-instsimplify)

LoopInstSimplify is unused and untested. Reading through the commit
history the pass also seems to have a high maintenance burden.

It would be best to retire the pass for now. It should be easy to
recover if we need something similar in the future.

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

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

6 years agoImprove caching scheme in ProvenanceAnalysis.
Michael Zolotukhin [Mon, 12 Mar 2018 20:36:25 +0000 (20:36 +0000)]
Improve caching scheme in ProvenanceAnalysis.

Summary:
ProvenanceAnalysis::related(A, B) currently memoizes its results, and on big
tests the cache grows too large, and we're spending most of the time
growing/looking through DenseMap.

This patch reduces the size of the cache by normalizing keys first: we do that
by calling GetUnderlyingObjCPtr on the input values. The results of
GetUnderlyingObjCPtr are also memoized in a separate cache.

The patch doesn't bring noticable changes to compile time on CTMark, however
significantly helps one of our internal tests.

Reviewers: gottesmm

Subscribers: hiraditya, llvm-commits

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

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

6 years ago[llvm-readobj][ELF] Move ELF note parsing into libObject
Scott Linder [Mon, 12 Mar 2018 19:28:50 +0000 (19:28 +0000)]
[llvm-readobj][ELF] Move ELF note parsing into libObject

Clean up the parsing of notes in llvm-readobj, improve bounds checking, and
allow the parsing code to be reused.

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

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

6 years ago[PowerPC][NFC] Explicitly state types on FP SDAG patterns in anticipation of adding...
Lei Huang [Mon, 12 Mar 2018 19:26:18 +0000 (19:26 +0000)]
[PowerPC][NFC] Explicitly state types on FP SDAG patterns in anticipation of adding the f128 type

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

6 years ago[AArch64] Fold adds with tprel_lo12_nc and secrel_lo12 into a following ldr/str
Martin Storsjo [Mon, 12 Mar 2018 18:47:43 +0000 (18:47 +0000)]
[AArch64] Fold adds with tprel_lo12_nc and secrel_lo12 into a following ldr/str

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

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

6 years ago[InstCombine] Replace calls to getNumUses with hasNUses or hasNUsesOrMore
Craig Topper [Mon, 12 Mar 2018 18:46:05 +0000 (18:46 +0000)]
[InstCombine] Replace calls to getNumUses with hasNUses or hasNUsesOrMore

getNumUses is a linear time operation. It traverses the user linked list to the end and counts as it goes. Since we are only interested in small constant counts, we should use hasNUses or hasNUsesMore more that terminate the traversal as soon as it can provide the answer.

There are still two other locations in InstCombine, but changing those would force a rebase of D44266 which if accepted would remove them.

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

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

6 years ago[CallSiteSplitting] Use !Instruction::use_empty instead of checking for a non-zero...
Craig Topper [Mon, 12 Mar 2018 18:40:59 +0000 (18:40 +0000)]
[CallSiteSplitting] Use !Instruction::use_empty instead of checking for a non-zero return from getNumUses

getNumUses is a linear operation. It walks a linked list to get a count. So in this case its better to just ask if there are any users rather than how many.

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

6 years ago[NFC] Replace iterators in PrintHelp with range-based for
Jan Korous [Mon, 12 Mar 2018 18:31:07 +0000 (18:31 +0000)]
[NFC] Replace iterators in PrintHelp with range-based for

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

6 years ago[NFC] PrintHelp cleanup
Jan Korous [Mon, 12 Mar 2018 18:30:47 +0000 (18:30 +0000)]
[NFC] PrintHelp cleanup

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

6 years ago[Hexagon] Fix typo in testcase
Krzysztof Parzyszek [Mon, 12 Mar 2018 18:29:47 +0000 (18:29 +0000)]
[Hexagon] Fix typo in testcase

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

6 years ago[Hexagon] Counting leading/trailing bits is cheap
Krzysztof Parzyszek [Mon, 12 Mar 2018 18:18:23 +0000 (18:18 +0000)]
[Hexagon] Counting leading/trailing bits is cheap

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

6 years ago[PatternMatch, InstSimplify] allow undef elements when matching vector -0.0
Sanjay Patel [Mon, 12 Mar 2018 18:17:01 +0000 (18:17 +0000)]
[PatternMatch, InstSimplify] allow undef elements when matching vector -0.0

This is the FP equivalent of D42818. Use it for the few cases in InstSimplify
with -0.0 folds (that's the only current use of m_NegZero()).

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

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

6 years ago[X86][Btver2] FSqrt/FDiv reg-reg instructions don't use the AGU.
Simon Pilgrim [Mon, 12 Mar 2018 18:12:46 +0000 (18:12 +0000)]
[X86][Btver2] FSqrt/FDiv reg-reg instructions don't use the AGU.

I love you llvm-mca.

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

6 years agoupdate_mir_test_checks: Fix handling of IR input after r326284
Justin Bogner [Mon, 12 Mar 2018 18:06:58 +0000 (18:06 +0000)]
update_mir_test_checks: Fix handling of IR input after r326284

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

6 years ago[SelectionDAG] Improve handling of dangling debug info
Bjorn Pettersson [Mon, 12 Mar 2018 18:02:39 +0000 (18:02 +0000)]
[SelectionDAG] Improve handling of dangling debug info

Summary:
1) Make sure to discard dangling debug info if the variable (or
variable fragment) is mapped to something new before we had a
chance to resolve the dangling debug info.

2) When resolving debug info, make sure to bump the associated
SDNodeOrder to ensure that the DBG_VALUE is emitted after the
instruction that defines the value used in the DBG_VALUE.
This will avoid a debug-use before def scenario as seen in
https://bugs.llvm.org/show_bug.cgi?id=36417.

The new test case, test/DebugInfo/X86/sdag-dangling-dbgvalue.ll,
show some other limitations in how dangling debug info is
handled in the SelectionDAG. Since we currently only support
having one dangling dbg.value per Value, we will end up dropping
debug info when there are more than one variable that is described
by the same "dangling value".

Reviewers: aprantl

Reviewed By: aprantl

Subscribers: aprantl, eraman, llvm-commits, JDevlieghere

Tags: #debug-info

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

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

6 years ago[Hexagon] Subtarget feature to emit one instruction per packet
Krzysztof Parzyszek [Mon, 12 Mar 2018 17:47:46 +0000 (17:47 +0000)]
[Hexagon] Subtarget feature to emit one instruction per packet

This adds two features: "packets", and "nvj".

Enabling "packets" allows the compiler to generate instruction packets,
while disabling it will prevent it and disable all optimizations that
generate them. This feature is enabled by default on all subtargets.
The feature "nvj" allows the compiler to generate new-value jumps and it
implies "packets". It is enabled on all subtargets.

The exception is made for packets with endloop instructions, since they
require a certain minimum number of instructions in the packets to which
they apply. Disabling "packets" will not prevent hardware loops from
being generated.

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

6 years ago[InstCombine] [NFC] Add tests for peeking through FP casts for sign-bit compares...
Roman Lebedev [Mon, 12 Mar 2018 17:43:02 +0000 (17:43 +0000)]
[InstCombine] [NFC] Add tests for peeking through FP casts for sign-bit compares (PR36682)

Summary:
This pattern came up in PR36682:
https://bugs.llvm.org/show_bug.cgi?id=36682
https://godbolt.org/g/LhuD9A

Tests for proposed fix in D44367.

Looking at the IR pattern in question, as per [[ https://github.com/rutgers-apl/alive-nj | alive-nj ]], for all the type combinations i checked
(input: `i16`, `i32`, `i64`; intermediate: `half`/`i16`, `float`/`i32`, `double`/`i64`)
for the following `icmp` comparisons the `sitofp`+`bitcast` can be dropped:
* `eq 0`
* `ne 0`
* `slt 0`
* `sle 0`
* `sge 0`
* `sgt 0`
* `slt 1`
* `sge 1`
* `sle -1`
* `sgt -1`
I did not check vectors, but i'm guessing it's the same there.
{F5887419}

Thus all these cases are in the testcase (along with the vector variant with additional `undef` element in the middle).
There are no negative patterns here (unless alive-nj lied/is broken), all of these should be optimized.

Generated with {F5887551}

Reviewers: spatel, majnemer, efriedma, arsenm

Reviewed By: spatel

Subscribers: nlopes, wdng, llvm-commits

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

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

6 years ago[X86] Deleting README-MMX.txt now that all tasks have been completed.
Simon Pilgrim [Mon, 12 Mar 2018 17:29:54 +0000 (17:29 +0000)]
[X86] Deleting README-MMX.txt now that all tasks have been completed.

MMX buildvectors were improved at rL327247 - new MMX bugs should be raised on bugzilla

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

6 years ago[AMDGPU][MC][GFX8] Added BUFFER_STORE_LDS_DWORD Instruction
Dmitry Preobrazhensky [Mon, 12 Mar 2018 17:29:24 +0000 (17:29 +0000)]
[AMDGPU][MC][GFX8] Added BUFFER_STORE_LDS_DWORD Instruction

See bug 36558: https://bugs.llvm.org/show_bug.cgi?id=36558

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

Reviewers: artem.tamazov, arsenm

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

6 years ago[X86] Add all of the MRM_C0-MRM_FF forms to the switch in RecognizableInstr::emitInst...
Craig Topper [Mon, 12 Mar 2018 17:24:50 +0000 (17:24 +0000)]
[X86] Add all of the MRM_C0-MRM_FF forms to the switch in RecognizableInstr::emitInstructionSpecifier. NFC

Remove the special casing for MRM_F8 by using HANDLE_OPTIONAL.

This should be NFC as the forms that were missing aren't used by any instructions today. They exist in the enum so that we didn't have to put them in one at a time when instructions are added. But looks like we failed here.

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

6 years ago[X86][Btver2] Prefix all scheduler defs. NFCI.
Simon Pilgrim [Mon, 12 Mar 2018 17:07:08 +0000 (17:07 +0000)]
[X86][Btver2] Prefix all scheduler defs. NFCI.

These are all global, so prefix with 'J' to help prevent accidental name clashes with other models.

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

6 years ago[X86] Remove use of MVT class from the ShuffleDecode library.
Craig Topper [Mon, 12 Mar 2018 16:43:11 +0000 (16:43 +0000)]
[X86] Remove use of MVT class from the ShuffleDecode library.

MVT belongs to the CodeGen layer, but ShuffleDecode is used by the X86 InstPrinter which is part of the MC layer. This only worked because MVT is completely implemented in a header file with no other library dependencies.

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

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

6 years ago[AMDGPU] Fix lowering enqueue kernel when kernel has no name
Yaxun Liu [Mon, 12 Mar 2018 16:34:06 +0000 (16:34 +0000)]
[AMDGPU] Fix lowering enqueue kernel when kernel has no name

Since the enqueued kernels have internal linkage, their names may be dropped.
In this case, give them unique names __amdgpu_enqueued_kernel or
__amdgpu_enqueued_kernel.n where n is a sequential number starting from 1.

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

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

6 years ago[X86][Btver2] Extend JWriteResFpuPair to accept resource/uop counts. NFCI.
Simon Pilgrim [Mon, 12 Mar 2018 16:02:56 +0000 (16:02 +0000)]
[X86][Btver2] Extend JWriteResFpuPair to accept resource/uop counts. NFCI.

This allows the single resource classes (VarBlend, MPSAD, VarVecShift) to use the JWriteResFpuPair macro.

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

6 years ago[AMDGPU][MC][DOC] Updated AMD GPU assembler description
Dmitry Preobrazhensky [Mon, 12 Mar 2018 15:55:08 +0000 (15:55 +0000)]
[AMDGPU][MC][DOC] Updated AMD GPU assembler description

See bug 36572: https://bugs.llvm.org/show_bug.cgi?id=36572

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

Reviewers: artem.tamazov, vpykhtin

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

6 years ago[InstSimplify] add test for m_NegZero with undef elt; NFC
Sanjay Patel [Mon, 12 Mar 2018 15:47:32 +0000 (15:47 +0000)]
[InstSimplify] add test for m_NegZero with undef elt; NFC

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

6 years ago[X86][Btver2] Use JWriteResFpuPair wrapper for AES/CLMUL/HADD scheduler cases. NFCI.
Simon Pilgrim [Mon, 12 Mar 2018 15:29:00 +0000 (15:29 +0000)]
[X86][Btver2] Use JWriteResFpuPair wrapper for AES/CLMUL/HADD scheduler cases. NFCI.

These are single pipe and have the default resource/uop counts like JWriteResFpuPair so there's no need to handle them separately.

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

6 years ago[Hexagon] Add REQUIRES: asserts to testcases that use -stats
Krzysztof Parzyszek [Mon, 12 Mar 2018 15:20:36 +0000 (15:20 +0000)]
[Hexagon] Add REQUIRES: asserts to testcases that use -stats

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

6 years ago[Hexagon] Add REQUIRES: asserts to testcases that use -debug-only
Krzysztof Parzyszek [Mon, 12 Mar 2018 15:11:16 +0000 (15:11 +0000)]
[Hexagon] Add REQUIRES: asserts to testcases that use -debug-only

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

6 years ago[AMDGPU][MC] Corrected GATHER4 opcodes
Dmitry Preobrazhensky [Mon, 12 Mar 2018 15:03:34 +0000 (15:03 +0000)]
[AMDGPU][MC] Corrected GATHER4 opcodes

See bug 36252: https://bugs.llvm.org/show_bug.cgi?id=36252

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

Reviewers: artem.tamazov, arsenm

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

6 years ago[llvm-readobj] Make header self-contained
Benjamin Kramer [Mon, 12 Mar 2018 15:02:59 +0000 (15:02 +0000)]
[llvm-readobj] Make header self-contained

Patch by Dean Sturtevant!

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

6 years agoUpdating MIR Language Reference to include new syntax for symbols and physregs.
Puyan Lotfi [Mon, 12 Mar 2018 14:51:19 +0000 (14:51 +0000)]
Updating MIR Language Reference to include new syntax for symbols and physregs.

External symbols now get the sigil '&' while physical registers get the sigil
'$' for their prefix.

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

6 years ago[DebugInfo] Replace unreachable with None
Jonas Devlieghere [Mon, 12 Mar 2018 14:45:08 +0000 (14:45 +0000)]
[DebugInfo] Replace unreachable with None

Invalid user input should not trigger assertions and unreachables. We
already return an Option so we should just return None here.

Fixes https://bugs.chromium.org/p/oss-fuzz/issues/detail?id=5532

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

6 years ago[Hexagon] fix 'must explicitly initialize the const member' error which clang 3.8...
Sam McCall [Mon, 12 Mar 2018 14:40:48 +0000 (14:40 +0000)]
[Hexagon] fix 'must explicitly initialize the const member' error which clang 3.8 emits

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

6 years ago[Hexagon] Add more lit tests
Krzysztof Parzyszek [Mon, 12 Mar 2018 14:01:28 +0000 (14:01 +0000)]
[Hexagon] Add more lit tests

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

6 years agoAMDGPU/GlobalISel: Legality and RegBankInfo for G_{INSERT|EXTRACT}_VECTOR_ELT
Matt Arsenault [Mon, 12 Mar 2018 13:35:53 +0000 (13:35 +0000)]
AMDGPU/GlobalISel: Legality and RegBankInfo for G_{INSERT|EXTRACT}_VECTOR_ELT

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

6 years agoAMDGPU/GlobalISel: InstrMapping for G_MERGE_VALUES
Matt Arsenault [Mon, 12 Mar 2018 13:35:49 +0000 (13:35 +0000)]
AMDGPU/GlobalISel: InstrMapping for G_MERGE_VALUES

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

6 years agoAMDGPU/GlobalISel: Make some G_MERGE_VALUEs legal
Matt Arsenault [Mon, 12 Mar 2018 13:35:43 +0000 (13:35 +0000)]
AMDGPU/GlobalISel: Make some G_MERGE_VALUEs legal

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

6 years agoRevert r326710 "Fuzzer: remove temporary files after we're done with them."
Hans Wennborg [Mon, 12 Mar 2018 13:22:12 +0000 (13:22 +0000)]
Revert r326710 "Fuzzer: remove temporary files after we're done with them."

This broke some Windows buildbots; see llvm-commits thread.

> These were just copies of the relevant fuzzer binary with (presumably)
> meaningful suffixes, but accounted for more than 10% of my build
> directory (> 8GB). Hard drive space is cheap, but not that cheap.

(Also reverts follow-up r326710 which didn't help.)

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

6 years ago[mips] Split out ASEPredicate from InsnPredicates (NFC)
Simon Dardis [Mon, 12 Mar 2018 13:16:12 +0000 (13:16 +0000)]
[mips] Split out ASEPredicate from InsnPredicates (NFC)

This simplifies tagging instructions with the correct ISA and ASE, albeit making
instruction definitions a bit more verbose.

Reviewers: atanasyan, abeserminji

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

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

6 years agoMC intel asm parser: Allow @ at the start of function names.
Nico Weber [Mon, 12 Mar 2018 12:47:27 +0000 (12:47 +0000)]
MC intel asm parser: Allow @ at the start of function names.

Ports parts of r193000 to the intel parser. Fixes part of PR36676.

https://reviews.llvm.org/D44359

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

6 years ago[X86][SSE] createVariablePermute - PSHUFB requires SSSE3 not just SSE3
Simon Pilgrim [Mon, 12 Mar 2018 12:30:04 +0000 (12:30 +0000)]
[X86][SSE] createVariablePermute - PSHUFB requires SSSE3 not just SSE3

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

6 years agoFix compilation on Darwin with expensive checks.
Jonas Devlieghere [Mon, 12 Mar 2018 11:01:05 +0000 (11:01 +0000)]
Fix compilation on Darwin with expensive checks.

After r327219 was landed, the bot with expensive checks on GreenDragon
started failing. The problem was missing symbols `regex_t` and
`regmatch_t` in `xlocale/_regex.h`. The latter was included because
after the change in r327219, `random` is needed, which transitively
includes `xlocale.h.` which in turn conditionally includes
`xlocale/_regex.h` when _REGEX_H_ is defined. Because this is the header
guard in `regex_impl.h` and because `regex_impl.h` was included before
the other LLVM includes, `xlocale/_regex.h` was included without the
necessary types being available.

This commit fixes this by moving the include of `regex_impl.h` all the
way down. I also added a comment to stress the significance of its
position.

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

6 years ago[ThinLTO] Recommit of import global variables
Eugene Leviant [Mon, 12 Mar 2018 10:30:50 +0000 (10:30 +0000)]
[ThinLTO] Recommit of import global variables

This wasreverted in r326638 due to link problems and fixed
afterwards

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

6 years agoBack out "Re-land: Teach CorrelatedValuePropagation to reduce the width of udiv/urem...
Justin Lebar [Mon, 12 Mar 2018 09:26:09 +0000 (09:26 +0000)]
Back out "Re-land: Teach CorrelatedValuePropagation to reduce the width of udiv/urem instructions."

This reverts r326908, originally landed as D44102.

Reverted for causing performance regressions on x86.  (These regressions
are not yet understood.)

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

6 years ago[X86] Don't compute known bits twice for the same SDValue in LowerMUL.
Craig Topper [Mon, 12 Mar 2018 05:35:02 +0000 (05:35 +0000)]
[X86] Don't compute known bits twice for the same SDValue in LowerMUL.

We called MaskedValueIsZero with two different masks, but underneath that calls computeKnownBits before applying the mask. This means we compute the same known bits twice due to the two calls. Instead just call computeKnownBits directly and apply the two masks ourselves.

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

6 years ago[CGP] Fix the remove of matched phis in complex addressing mode
Serguei Katkov [Mon, 12 Mar 2018 03:50:07 +0000 (03:50 +0000)]
[CGP] Fix the remove of matched phis in complex addressing mode

When we replace the Phi we created with matched ones it is possible that
there are two identical phi nodes in IR. And matcher is smart enough to find that
new created phi matches both of them. So we try to replace our phi node with
matched ones twice and what is bad we delete our phi node twice causing a crash.

As soon as we found that we have two identical Phi nodes it makes sense to do
a clean-up and replace one phi node by other one.
The patch implements it.

Reviewers: john.brawn, reames
Reviewed By: john.brawn
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D43758

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

6 years ago[X86][MMX] Support MMX build vectors to avoid SSE usage (PR29222)
Simon Pilgrim [Sun, 11 Mar 2018 19:22:13 +0000 (19:22 +0000)]
[X86][MMX] Support MMX build vectors to avoid SSE usage (PR29222)

64-bit MMX vector generation usually ends up lowering into SSE instructions before being spilled/reloaded as a MMX type.

This patch creates a MMX vector from MMX source values, taking the lowest element from each source and constructing broadcasts/build_vectors with direct calls to the MMX PUNPCKL/PSHUFW intrinsics.

We're missing a few consecutive load combines that could be handled in a future patch if that would be useful - my main interest here is just avoiding a lot of the MMX/SSE crossover.

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

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

6 years ago[X86][AVX512] Added more non-VLX test cases
Simon Pilgrim [Sun, 11 Mar 2018 18:28:37 +0000 (18:28 +0000)]
[X86][AVX512] Added more non-VLX test cases

Cleaned up check prefixes so that they actually share a bit more

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

6 years ago[X86][AVX] createVariablePermute - scale v16i16 variable permutes to use v32i8 codegen
Simon Pilgrim [Sun, 11 Mar 2018 17:23:54 +0000 (17:23 +0000)]
[X86][AVX] createVariablePermute - scale v16i16 variable permutes to use v32i8 codegen

XOP was already doing this, and now AVX performs v32i8 variable permutes as well.

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

6 years ago[X86][AVX] createVariablePermute - widen permutes for cases where the source vector...
Simon Pilgrim [Sun, 11 Mar 2018 17:00:46 +0000 (17:00 +0000)]
[X86][AVX] createVariablePermute - widen permutes for cases where the source vector is wider than the destination type

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

6 years ago[InstCombine] add tests for casted sign-bit cmp (PR36682); NFC
Sanjay Patel [Sun, 11 Mar 2018 16:45:31 +0000 (16:45 +0000)]
[InstCombine] add tests for casted sign-bit cmp (PR36682); NFC

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