]> granicus.if.org Git - llvm/log
llvm
5 years ago[X86] Remove custom handling for extloads from LowerLoad.
Craig Topper [Fri, 9 Aug 2019 20:27:22 +0000 (20:27 +0000)]
[X86] Remove custom handling for extloads from LowerLoad.

We don't appear to need this with widening legalization.

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

5 years ago[CodeGen] Require a name for a block addr target
Bill Wendling [Fri, 9 Aug 2019 20:18:30 +0000 (20:18 +0000)]
[CodeGen] Require a name for a block addr target

Summary:
A block address may be used in inline assembly. In which case it
requires a name so that the asm parser has something to parse. Creating
a name for every block address is a large hammer, but is necessary
because at the point when a temp symbol is created we don't necessarily
know if it's used in inline asm. This ensures that it exists regardless.

Reviewers: nickdesaulniers, craig.topper

Subscribers: nathanchance, javed.absar, llvm-commits

Tags: #llvm

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

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

5 years ago[MC] Don't recreate a label if it's already used
Bill Wendling [Fri, 9 Aug 2019 20:16:31 +0000 (20:16 +0000)]
[MC] Don't recreate a label if it's already used

Summary:
This patch keeps track of MCSymbols created for blocks that were
referenced in inline asm. It prevents creating a new symbol which
doesn't refer to the block.

Inline asm may have a reference to a label. The asm parser however
doesn't recognize it as a label and tries to create a new symbol. The
result being that instead of the original symbol (e.g. ".Ltmp0") the
parser replaces it in the inline asm with the new one (e.g. ".Ltmp00")
without updating it in the symbol table. So the machine basic block
retains the "old" symbol (".Ltmp0"), but the inline asm uses the new one
(".Ltmp00").

Reviewers: nickdesaulniers, craig.topper

Subscribers: nathanchance, javed.absar, llvm-commits

Tags: #llvm

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

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

5 years ago[Docs][llvm-strip] Fix an indentation issue.
Michael Pozulp [Fri, 9 Aug 2019 19:41:13 +0000 (19:41 +0000)]
[Docs][llvm-strip] Fix an indentation issue.

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

5 years agogn build: Merge r368432.
Peter Collingbourne [Fri, 9 Aug 2019 19:28:53 +0000 (19:28 +0000)]
gn build: Merge r368432.

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

5 years agogn build: Merge r368439.
Peter Collingbourne [Fri, 9 Aug 2019 19:28:44 +0000 (19:28 +0000)]
gn build: Merge r368439.

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

5 years agogn build: Merge r368402.
Peter Collingbourne [Fri, 9 Aug 2019 19:28:35 +0000 (19:28 +0000)]
gn build: Merge r368402.

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

5 years agogn build: Merge r368392.
Peter Collingbourne [Fri, 9 Aug 2019 19:28:26 +0000 (19:28 +0000)]
gn build: Merge r368392.

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

5 years agogn build: Merge r368358.
Peter Collingbourne [Fri, 9 Aug 2019 19:28:17 +0000 (19:28 +0000)]
gn build: Merge r368358.

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

5 years ago[Docs][llvm-strip] Add help text to llvm-strip rst doc
Michael Pozulp [Fri, 9 Aug 2019 19:10:55 +0000 (19:10 +0000)]
[Docs][llvm-strip] Add help text to llvm-strip rst doc

Summary: Addresses https://bugs.llvm.org/show_bug.cgi?id=42383

Reviewers: jhenderson, alexshap, rupprecht

Reviewed By: jhenderson

Subscribers: wolfgangp, jakehehrlich, llvm-commits

Tags: #llvm

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

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

5 years ago[TableGen] Add "InitValue": Handle operands with set bit values in decoder methods
Daniel Sanders [Fri, 9 Aug 2019 17:30:33 +0000 (17:30 +0000)]
[TableGen] Add "InitValue": Handle operands with set bit values in decoder methods

Summary:
The problem:
  When an operand had bits explicitly set to "1" (as in the InitValue.td test case attached), the decoder was ignoring those bits, and the DecoderMethod was receiving an input where the bits were still zero.

The solution:
  We added an "InitValue" variable that stores the initial value of the operand based on what bits were explicitly initialized to 1 in TableGen code. The generated decoder code then uses that initial value to initialize the "tmp" variable, then calls fieldFromInstruction to read the values for the remaining bits that were left unknown in TableGen.

This is mainly useful when there are variations of an instruction that differ based on what bits are set in the operands, since this change makes it possible to access those bits in a DecoderMethod. The DecoderMethod can use those bits to know how to handle the input.

Patch by Nicolas Guillemot

Reviewers: craig.topper, dsanders, fhahn

Reviewed By: dsanders

Subscribers: llvm-commits

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

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

5 years ago[InstCombine] Refactor optimizeExp2() (NFC)
Evandro Menezes [Fri, 9 Aug 2019 17:22:56 +0000 (17:22 +0000)]
[InstCombine] Refactor optimizeExp2() (NFC)

Refactor `LibCallSimplifier::optimizeExp2()` to use the new
`emitBinaryFloatFnCall()` version that fetches the function name from TLI.

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

5 years ago[Transforms] Add a emitBinaryFloatFnCall() version that fetches the function name...
Evandro Menezes [Fri, 9 Aug 2019 17:06:46 +0000 (17:06 +0000)]
[Transforms] Add a emitBinaryFloatFnCall() version that fetches the function name from TLI

Add the counterpart to a similar function for single operands.

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

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

5 years ago[Transforms] Fix comments for hasFloatFn() and getFloatFnName() (NFC)
Evandro Menezes [Fri, 9 Aug 2019 16:59:14 +0000 (16:59 +0000)]
[Transforms] Fix comments for hasFloatFn() and getFloatFnName() (NFC)

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

5 years agoPrint reasonable representations of type names in llvm-nm, readelf and readobj
Sunil Srivastava [Fri, 9 Aug 2019 16:54:51 +0000 (16:54 +0000)]
Print reasonable representations of type names in llvm-nm, readelf and readobj

For type values that do not have proper names, print reasonable representation
in llvm-nm, llvm-readobj and llvm-readelf, matching GNU tools.s

Fixes PR41713.

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

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

5 years agoTitle: Improve Loop Cache Analysis LIT tests.
Whitney Tsang [Fri, 9 Aug 2019 16:18:22 +0000 (16:18 +0000)]
Title: Improve Loop Cache Analysis LIT tests.
Summary: Make LIT tests unsensitive to analysis output order.
Authored By: etiotto

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

5 years ago[Transforms] Rename hasUnaryFloatFn() and getUnaryFloatFn() (NFC)
Evandro Menezes [Fri, 9 Aug 2019 16:04:18 +0000 (16:04 +0000)]
[Transforms] Rename hasUnaryFloatFn() and getUnaryFloatFn() (NFC)

Rename `hasUnaryFloatFn()` to `hasFloatFn()` and `getUnaryFloatFn()` to `getFloatFnName()`.

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

5 years ago[NFC] Added tests for D65898
David Bolvansky [Fri, 9 Aug 2019 15:52:26 +0000 (15:52 +0000)]
[NFC] Added tests for D65898

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

5 years ago[AArch64][x86] add tests for pessimization of expression with X*2.0 (PR32939); NFC
Sanjay Patel [Fri, 9 Aug 2019 14:52:31 +0000 (14:52 +0000)]
[AArch64][x86] add tests for pessimization of expression with X*2.0 (PR32939); NFC

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

5 years ago[DAGCombiner] remove redundant fold for X*1.0; NFC
Sanjay Patel [Fri, 9 Aug 2019 14:30:59 +0000 (14:30 +0000)]
[DAGCombiner] remove redundant fold for X*1.0; NFC

This is handled at node creation time (similar to X/1.0)
after:
rL357029
(no fast-math-flags needed)

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

5 years ago[MachinePipeliner] Avoid indeterminate order in FuncUnitSorter
Jinsong Ji [Fri, 9 Aug 2019 14:10:57 +0000 (14:10 +0000)]
[MachinePipeliner] Avoid indeterminate order in FuncUnitSorter

Summary:
This is exposed by adding a new testcase in PowerPC in
https://reviews.llvm.org/rL367732

The testcase got different output on different platform, hence breaking
buildbots.

The problem is that we get differnt FuncUnitOrder when calculateResMII.

The root cause is:
1. Two MachineInstr might get SAME priority(MFUsx) from minFuncUnits.
2. Current comparison operator() will return `MFUs1 > MFUs2`.
3. We use iterators for MachineInstr, so the input to FuncUnitSorter
   might be different on differnt platform due to the iterator nature.

So for two MI with same MFU, their order is actually depends on the
iterator order, which is platform (implemtation) dependent.

This is risky, and may cause cross-compiling problems.

The fix is to check make sure we assign a determine order when they are
equal.

Reviewers: bcahoon, hfinkel, jmolloy

Subscribers: nemanjai, hiraditya, MaskRay, llvm-commits

Tags: #llvm

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

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

5 years agoTitle: Loop Cache Analysis
Whitney Tsang [Fri, 9 Aug 2019 13:56:29 +0000 (13:56 +0000)]
Title: Loop Cache Analysis
Summary: Implement a new analysis to estimate the number of cache lines
required by a loop nest.
The analysis is largely based on the following paper:

Compiler Optimizations for Improving Data Locality
By: Steve Carr, Katherine S. McKinley, Chau-Wen Tseng
http://www.cs.utexas.edu/users/mckinley/papers/asplos-1994.pdf
The analysis considers temporal reuse (accesses to the same memory
location) and spatial reuse (accesses to memory locations within a cache
line). For simplicity the analysis considers memory accesses in the
innermost loop in a loop nest, and thus determines the number of cache
lines used when the loop L in loop nest LN is placed in the innermost
position.

The result of the analysis can be used to drive several transformations.
As an example, loop interchange could use it determine which loops in a
perfect loop nest should be interchanged to maximize cache reuse.
Similarly, loop distribution could be enhanced to take into
consideration cache reuse between arrays when distributing a loop to
eliminate vectorization inhibiting dependencies.

The general approach taken to estimate the number of cache lines used by
the memory references in the inner loop of a loop nest is:

Partition memory references that exhibit temporal or spatial reuse into
reference groups.
For each loop L in the a loop nest LN: a. Compute the cost of the
reference group b. Compute the 'cache cost' of the loop nest by summing
up the reference groups costs
For further details of the algorithm please refer to the paper.
Authored By: etiotto
Reviewers: hfinkel, Meinersbur, jdoerfert, kbarton, bmahjour, anemet,
fhahn
Reviewed By: Meinersbur
Subscribers: reames, nemanjai, MaskRay, wuzish, Hahnfeld, xusx595,
venkataramanan.kumar.llvm, greened, dmgreen, steleman, fhahn, xblvaOO,
Whitney, mgorny, hiraditya, mgrang, jsji, llvm-commits
Tag: LLVM
Differential Revision: https://reviews.llvm.org/D63459

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

5 years ago[X86][SSE] Swap X86ISD::BLENDV inputs with an inverted selection mask (PR42825)
Simon Pilgrim [Fri, 9 Aug 2019 12:44:20 +0000 (12:44 +0000)]
[X86][SSE] Swap X86ISD::BLENDV inputs with an inverted selection mask (PR42825)

As discussed on PR42825, if we are inverting the selection mask we can just swap the inputs and avoid the inversion.

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

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

5 years ago[GlobalOpt] prevent crashing on large integer types (PR42932)
Sanjay Patel [Fri, 9 Aug 2019 12:43:25 +0000 (12:43 +0000)]
[GlobalOpt] prevent crashing on large integer types (PR42932)

This is a minimal fix (copy the predicate for the assert) to
prevent the crashing seen in:
https://bugs.llvm.org/show_bug.cgi?id=42932
...when converting a constant integer of arbitrary width to uint64_t.

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

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

5 years ago[MCA] Fix MSVC 19.16 build with libc++
Andrea Di Biagio [Fri, 9 Aug 2019 12:41:24 +0000 (12:41 +0000)]
[MCA] Fix MSVC 19.16 build with libc++

MSVC (19.16) wants to see the definition of Instruction in
`std::pair<unsigned, const Instruction &> SourceRef` to decide
if it is assignable.

Patch by Orivej Desh.

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

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

5 years ago[llvm-readelf]Print filename for multiple inputs and fix formatting regression
James Henderson [Fri, 9 Aug 2019 12:30:08 +0000 (12:30 +0000)]
[llvm-readelf]Print filename for multiple inputs and fix formatting regression

This patch addresses two closely related bugs:
https://bugs.llvm.org/show_bug.cgi?id=42930 and
https://bugs.llvm.org/show_bug.cgi?id=42931.

GNU readelf prints the file name for every input unless there is only
one input and that input is not an archive. This patch adds the printing
for multiple inputs. A previous change did it for archives, but
introduced a regression with GNU compatibility for single-output
formatting, resulting in a spurious initial blank line. This is fixed in
this patch too.

Reviewed by: grimar, MaskRay

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

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

5 years ago[Mips][Codegen] Fix fast-isel mixing of FGR64 and AFGR64 registers
Simon Atanasyan [Fri, 9 Aug 2019 12:02:32 +0000 (12:02 +0000)]
[Mips][Codegen] Fix fast-isel mixing of FGR64 and AFGR64 registers

Fast-isel was picking AFGR64 register class for processing call
arguments when +fp64 options was used. We simply check is option +fp64
is used and pick appropriate register.

Patch by Mirko Brkusanin.

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

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

5 years ago[MCA] Add flag -show-encoding to llvm-mca.
Andrea Di Biagio [Fri, 9 Aug 2019 11:26:27 +0000 (11:26 +0000)]
[MCA] Add flag -show-encoding to llvm-mca.

Flag -show-encoding enables the printing of instruction encodings as part of the
the instruction info view.

Example (with flags -mtriple=x86_64--  -mcpu=btver2):

Instruction Info:
[1]: #uOps
[2]: Latency
[3]: RThroughput
[4]: MayLoad
[5]: MayStore
[6]: HasSideEffects (U)
[7]: Encoding Size

[1]    [2]    [3]    [4]    [5]    [6]    [7]    Encodings:     Instructions:
 1      2     1.00                         4     c5 f0 59 d0    vmulps   %xmm0, %xmm1, %xmm2
 1      4     1.00                         4     c5 eb 7c da    vhaddps  %xmm2, %xmm2, %xmm3
 1      4     1.00                         4     c5 e3 7c e3    vhaddps  %xmm3, %xmm3, %xmm4

In this example, column Encoding Size is the size in bytes of the instruction
encoding. Column Encodings reports the actual instruction encodings as byte
sequences in hex (objdump style).

The computation of encodings is done by a utility class named mca::CodeEmitter.

In future, I plan to expose the CodeEmitter to the instruction builder, so that
information about instruction encoding sizes can be used by the simulator. That
would be a first step towards simulating the throughput from the decoders in the
hardware frontend.

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

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

5 years ago[AArch64] Set pref. func. align to 8 bytes on Neoverse E1 & Cortex-A65
Pablo Barrio [Fri, 9 Aug 2019 11:05:15 +0000 (11:05 +0000)]
[AArch64] Set pref. func. align to 8 bytes on Neoverse E1 & Cortex-A65

Summary:
The Arm Neoverse E1 and Cortex-A65 Software Optimization Guide [1][2],
Section "4.7 Branch instruction alignment" state:

"It is preferable for branch targets, including subroutine entry points,
to be placed on aligned 64-bit boundaries to maximize instruction fetch
efficiency."

This patch sets the preferred function alignment on Neoverse E1 and
Cortex-A65 to 2^3=8B. This was already the case in some Cortex-A CPUs
such as Cortex-A53.

[1] https://developer.arm.com/docs/swog466751/latest/arm-neoversetm-e1-core-software-optimization-guide
[2] https://developer.arm.com/docs/swog010045/latest/arm-cortex-a65-core-software-optimization-guide

Reviewers: dmgreen, fhahn, samparker

Subscribers: javed.absar, kristof.beyls, hiraditya, llvm-commits

Tags: #llvm

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

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

5 years ago[llvm-readobj] - Remove `error(llvm::Expected<T> &&E)`
George Rimar [Fri, 9 Aug 2019 11:03:21 +0000 (11:03 +0000)]
[llvm-readobj] - Remove `error(llvm::Expected<T> &&E)`

This is a bit strange method. It works like a unwrapOrError,
but named error. It does not report an Input name.
I removed it.

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

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

5 years ago[llvm-readobj] - Remove deprecated unwrapOrError(Expected<T> EO).
George Rimar [Fri, 9 Aug 2019 10:53:12 +0000 (10:53 +0000)]
[llvm-readobj] - Remove deprecated unwrapOrError(Expected<T> EO).

This patch changes the code to use a modern unwrapOrError(StringRef Input, Expected<T> EO)
version that contains the input source name and removes the deprecated version.

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

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

5 years agoAArch64: support TLS on Darwin platforms in GlobalISel.
Tim Northover [Fri, 9 Aug 2019 09:32:38 +0000 (09:32 +0000)]
AArch64: support TLS on Darwin platforms in GlobalISel.

All TLS access on Darwin is in the "general dynamic" form where we call
a function to resolve the address, so implementation is pretty simple.

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

5 years ago[llvm-readobj] - Remove unwrapOrError(ErrorOr<T> EO) helper.
George Rimar [Fri, 9 Aug 2019 08:29:26 +0000 (08:29 +0000)]
[llvm-readobj] - Remove unwrapOrError(ErrorOr<T> EO) helper.

It is outdated. Using of Expected<> is preferred, also it does
not provide a way to report a file name.

I updated the code to use the modern version of unwrapOrError instead.

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

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

5 years agoGlobalISel: pack various parameters for lowerCall into a struct.
Tim Northover [Fri, 9 Aug 2019 08:26:38 +0000 (08:26 +0000)]
GlobalISel: pack various parameters for lowerCall into a struct.

I've now needed to add an extra parameter to this call twice recently. Not only
is the signature getting extremely unwieldy, but just updating all of the
callsites and implementations is a pain. Putting the parameters in a struct
sidesteps both issues.

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

5 years ago[ARM][ParallelDSP] Replace SExt uses
Sam Parker [Fri, 9 Aug 2019 07:48:50 +0000 (07:48 +0000)]
[ARM][ParallelDSP] Replace SExt uses

As loads are combined and widened, we replaced their sext users
operands whereas we should have been replacing the uses of the sext.
I've added a load of tests, with only a few of them originally
causing assertion failures, the rest improve pattern coverage.

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

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

5 years ago[InstSimplify] Report "Changed" also when only deleting dead instructions
Bjorn Pettersson [Fri, 9 Aug 2019 07:08:25 +0000 (07:08 +0000)]
[InstSimplify] Report "Changed" also when only deleting dead instructions

Summary:
Make sure that we report that changes has been made
by InstSimplify also in situations when only trivially
dead instructions has been removed. If for example a call
is removed the call graph must be updated.

Bug seem to have been introduced by llvm-svn r367173
(commit 02b9e45a7e4b81), since the code in question
was rewritten in that commit.

Reviewers: spatel, chandlerc, foad

Reviewed By: spatel

Subscribers: hiraditya, llvm-commits

Tags: #llvm

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

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

5 years ago[X86] Remove code that expands truncating stores from combineStore.
Craig Topper [Fri, 9 Aug 2019 06:59:53 +0000 (06:59 +0000)]
[X86] Remove code that expands truncating stores from combineStore.

We shouldn't form trunc stores that need to be expanded now that
we are using widening legalization.

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

5 years agoFix rpath for MacOS/iOS
Haibo Huang [Fri, 9 Aug 2019 06:05:32 +0000 (06:05 +0000)]
Fix rpath for MacOS/iOS

Summary: libs can be installed to ../lib64.

Subscribers: mgorny, llvm-commits

Tags: #llvm

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

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

5 years ago[X86] Remove stale FIXME from combineMaskedStore. NFC
Craig Topper [Fri, 9 Aug 2019 05:55:41 +0000 (05:55 +0000)]
[X86] Remove stale FIXME from combineMaskedStore. NFC

I believe PR34584 was tracking that FIXME, but its since been
closed and a test case was added.

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

5 years ago[X86] Remove DAG combine expansion of extending masked load and truncating masked...
Craig Topper [Fri, 9 Aug 2019 05:53:37 +0000 (05:53 +0000)]
[X86] Remove DAG combine expansion of extending masked load and truncating masked store.

The only way to generate these was through promoting legalization
of narrow vectors, but we widen those types now. So we shouldn't
produce these nodes.

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

5 years ago[X86] Remove handler for (U/S)(ADD/SUB)SAT from ReplaceNodeResults. Remove TypeWidenV...
Craig Topper [Fri, 9 Aug 2019 05:17:52 +0000 (05:17 +0000)]
[X86] Remove handler for (U/S)(ADD/SUB)SAT from ReplaceNodeResults. Remove TypeWidenVector check from code that handles X86ISD::VPMADDWD and X86ISD::AVG.

More unneeded code since we now legalize narrow vectors by widening.

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

5 years ago[X86] Remove ISD::SETCC handling from ReplaceNodeResults.
Craig Topper [Fri, 9 Aug 2019 05:17:48 +0000 (05:17 +0000)]
[X86] Remove ISD::SETCC handling from ReplaceNodeResults.

This is no longer needed since we widen v2i32 instead of promoting.

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

5 years ago[X86] Simplify ISD::LOAD handling in ReplaceNodeResults and ISD::STORE handling in...
Craig Topper [Fri, 9 Aug 2019 03:09:43 +0000 (03:09 +0000)]
[X86] Simplify ISD::LOAD handling in ReplaceNodeResults and ISD::STORE handling in LowerStore now that v2i32 is widened to v4i32.

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

5 years ago[X86] Merge v2f32 and v2i32 gather/scatter handling in ReplaceNodeResults/LowerMSCATT...
Craig Topper [Fri, 9 Aug 2019 03:09:28 +0000 (03:09 +0000)]
[X86] Merge v2f32 and v2i32 gather/scatter handling in ReplaceNodeResults/LowerMSCATTER now that v2i32 is also widened like v2f32.

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

5 years ago[X86] Now unreachable handling for f64->v2i32/v4i16/v8i8 bitcasts from ReplaceNodeRes...
Craig Topper [Fri, 9 Aug 2019 03:09:19 +0000 (03:09 +0000)]
[X86] Now unreachable handling for f64->v2i32/v4i16/v8i8 bitcasts from ReplaceNodeResults.

We rely on the generic type legalizer for this now.

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

5 years ago[X86] Simplify ReplaceNodeResults handling for FP_TO_SINT/UINT for vectors to only...
Craig Topper [Fri, 9 Aug 2019 03:09:10 +0000 (03:09 +0000)]
[X86] Simplify ReplaceNodeResults handling for FP_TO_SINT/UINT for vectors to only handle widening.

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

5 years ago[X86] Simplify ReplaceNodeResults handling for SIGN_EXTEND/ZERO_EXTEND/TRUNCATE for...
Craig Topper [Fri, 9 Aug 2019 03:08:54 +0000 (03:08 +0000)]
[X86] Simplify ReplaceNodeResults handling for SIGN_EXTEND/ZERO_EXTEND/TRUNCATE for vectors to only handle widening.

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

5 years ago[X86] Simplify ReplaceNodeResults handling for UDIV/UREM/SDIV/SREM for vectors to...
Craig Topper [Fri, 9 Aug 2019 03:08:45 +0000 (03:08 +0000)]
[X86] Simplify ReplaceNodeResults handling for UDIV/UREM/SDIV/SREM for vectors to only handle widening.

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

5 years ago[X86] Remove vector promotion handling from the ReplaceNodeResults ISD::MUL handling...
Craig Topper [Fri, 9 Aug 2019 03:08:28 +0000 (03:08 +0000)]
[X86] Remove vector promotion handling from the ReplaceNodeResults ISD::MUL handling code.

We now widen illegal vector types so we don't need this anymore.

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

5 years agoDebugInfo/DWARF: Provide some (pretty half-hearted) error handling access when parsin...
David Blaikie [Fri, 9 Aug 2019 01:14:33 +0000 (01:14 +0000)]
DebugInfo/DWARF: Provide some (pretty half-hearted) error handling access when parsing units

This isn't the most robust error handling API, but does allow clients to
opt-in to getting Errors they can handle. I suspect the long-term
solution would be to move away from the lazy unit parsing and have an
explicit step that parses the unit and then allows access to the other
APIs that require a parsed unit.

llvm-dwarfdump could be expanded to use this (or newer/better API) to
demonstrate the benefit of it - but for now lld will use this in a
follow-up cl which ensures lld can exit non-zero on errors like this (&
provide more descriptive diagnostics including which object file the
error came from).

(error access to later errors when parsing nested DIEs would be good too
- but, again, exposing that without it being a hassle for every consumer
may be tricky)

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

5 years agoChange the return type of UpgradeARCRuntimeCalls to void
Akira Hatanaka [Thu, 8 Aug 2019 23:33:17 +0000 (23:33 +0000)]
Change the return type of UpgradeARCRuntimeCalls to void

Nothing is using the function return.

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

5 years agoRemove else-after-return
David Blaikie [Thu, 8 Aug 2019 23:17:23 +0000 (23:17 +0000)]
Remove else-after-return

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

5 years agoFix -DBUILD_SHARED_LIBS=ON build after rL368358
Sam Clegg [Thu, 8 Aug 2019 23:00:28 +0000 (23:00 +0000)]
Fix -DBUILD_SHARED_LIBS=ON build after rL368358

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

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

5 years agoFix llvm.aarch64.irg properties.
Evgeniy Stepanov [Thu, 8 Aug 2019 22:42:48 +0000 (22:42 +0000)]
Fix llvm.aarch64.irg properties.

Summary:
IRG does not access any memory.
Replace IntrInaccessibleMemOnly with IntrNoMem | IntrHasSideEffects.

Reviewers: chill

Subscribers: javed.absar, kristof.beyls, llvm-commits

Tags: #llvm

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

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

5 years ago[InstCombine][NFC] Added comments about constants in tests for pow->exp2 fold
David Bolvansky [Thu, 8 Aug 2019 22:37:51 +0000 (22:37 +0000)]
[InstCombine][NFC] Added comments about constants in tests for pow->exp2 fold

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

5 years agoAdded Delta IR Reduction Tool
Diego Trevino Ferrer [Thu, 8 Aug 2019 22:16:33 +0000 (22:16 +0000)]
Added Delta IR Reduction Tool

Summary: Tool parses input IR file, and runs the delta debugging algorithm to reduce the functions inside the input file.

Reviewers: alexshap, chandlerc

Subscribers: mgorny, llvm-commits

Tags: #llvm

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

llvm-svn: 368071

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

5 years agoLinker: Add support for GlobalIFunc.
Peter Collingbourne [Thu, 8 Aug 2019 22:09:18 +0000 (22:09 +0000)]
Linker: Add support for GlobalIFunc.

GlobalAlias and GlobalIFunc ought to be treated the same by the IR
linker, so we can generalize the code to be in terms of their common
base class GlobalIndirectSymbol.

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

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

5 years ago[LICM] Support unary FNeg in LICM
Cameron McInally [Thu, 8 Aug 2019 21:38:31 +0000 (21:38 +0000)]
[LICM] Support unary FNeg in LICM

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

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

5 years ago[X86] Improve codegen of v8i64->v8i16 and v16i32->v16i8 truncate with avx512vl, avx51...
Craig Topper [Thu, 8 Aug 2019 21:36:47 +0000 (21:36 +0000)]
[X86] Improve codegen of v8i64->v8i16 and v16i32->v16i8 truncate with avx512vl, avx512bw, min-legal-vector-width<=256 and prefer-vector-width=256

Under this configuration we'll want to split the v8i64 or v16i32 into two vectors. The default legalization will try to truncate each of those 256-bit pieces one step to 128-bit, concatenate those, then truncate one more time from the new 256 to 128 bits.

With this patch we now truncate the two splits to 64-bits then concatenate those. We have to do this two different ways depending on whether have widening legalization enabled. Without widening legalization we have to manually construct X86ISD::VTRUNC to prevent the ISD::TRUNCATE with a narrow result being promoted to 128 bits with a larger element type than what we want followed by something like a pshufb to grab the lower half of each element to finish the job. With widening legalization we just get the right thing. When we switch to widening by default we can just delete the other code path.

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

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

5 years ago[SelectionDAG][X86] Move setcc mask splitting for mload/mstore/mgather/mscatter from...
Craig Topper [Thu, 8 Aug 2019 21:14:08 +0000 (21:14 +0000)]
[SelectionDAG][X86] Move setcc mask splitting for mload/mstore/mgather/mscatter from DAGCombiner to the type legalizer.

We may be able to look to how VSELECT is handled to further
improve this, but this appears to be neutral or an improvement
on the test cases we have.

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

5 years ago[LegalizeTypes] Remove SplitVSETCC helper and just call SplitVecRes_SETCC.
Craig Topper [Thu, 8 Aug 2019 21:13:58 +0000 (21:13 +0000)]
[LegalizeTypes] Remove SplitVSETCC helper and just call SplitVecRes_SETCC.

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

5 years ago[Attributor][NFC] Include only what is needed
Johannes Doerfert [Thu, 8 Aug 2019 20:54:23 +0000 (20:54 +0000)]
[Attributor][NFC] Include only what is needed

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

5 years ago[MBP] Disable aggressive loop rotate in plain mode
Guozhi Wei [Thu, 8 Aug 2019 20:25:23 +0000 (20:25 +0000)]
[MBP] Disable aggressive loop rotate in plain mode

Patch https://reviews.llvm.org/D43256 introduced more aggressive loop layout optimization which depends on profile information. If profile information is not available, the statically estimated profile information(generated by BranchProbabilityInfo.cpp) is used. If user program doesn't behave as BranchProbabilityInfo.cpp expected, the layout may be worse.

To be conservative this patch restores the original layout algorithm in plain mode. But user can still try the aggressive layout optimization with -force-precise-rotation-cost=true.

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

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

5 years agogn build: Merge r368331.
Peter Collingbourne [Thu, 8 Aug 2019 20:11:23 +0000 (20:11 +0000)]
gn build: Merge r368331.

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

5 years agolit: Bump version to 0.10.0
Tom Stellard [Thu, 8 Aug 2019 19:22:23 +0000 (19:22 +0000)]
lit: Bump version to 0.10.0

Reviewers: hans

Subscribers: hans, delcypher, llvm-commits

Tags: #llvm

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

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

5 years ago[llvm-mc] Add reportWarning() to MCContext
Brian Cain [Thu, 8 Aug 2019 19:13:23 +0000 (19:13 +0000)]
[llvm-mc] Add reportWarning() to MCContext

Adding reportWarning() to MCContext, so that it can be used from
the Hexagon assembler backend.

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

5 years ago[X86] Make CMPXCHG16B feature imply CMPXCHG8B feature.
Craig Topper [Thu, 8 Aug 2019 18:11:17 +0000 (18:11 +0000)]
[X86] Make CMPXCHG16B feature imply CMPXCHG8B feature.

This fixes znver1 so that it properly enables CMPXHG8B. We can
probably remove explicit CMPXCHG8B from CPUs that also have
CMPXCHG16B, but keeping this simple to allow cherry pick to 9.0.

Fixes PR42935.

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

5 years ago[globalisel][legalizer] Attempt to write down the minimal legalization rules
Daniel Sanders [Thu, 8 Aug 2019 17:54:23 +0000 (17:54 +0000)]
[globalisel][legalizer] Attempt to write down the minimal legalization rules

Summary:
There aren't very many requirements on the legalization rules but we should
document them.

Reviewers: aditya_nandakumar, volkan, bogner, paquette, aemerson, rovka, arsenm, Petar.Avramovic

Subscribers: wdng, kristof.beyls, llvm-commits

Tags: #llvm

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

# Conflicts:
# llvm/docs/GlobalISel.rst

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

5 years ago[AArch64] Do not emit '#' before immediates in inline asm
Pirama Arumuga Nainar [Thu, 8 Aug 2019 17:50:39 +0000 (17:50 +0000)]
[AArch64] Do not emit '#' before immediates in inline asm

Summary:
The A64 assembly language does not require the '#' character to
introduce constant immediate operands.  Avoid the '#' since the AArch64
asm parser does not accept '#' before the lane specifier and rejects the
following:
  __asm__ ("fmla v2.4s, v0.4s, v1.s[%0]" :: "I"(0x1))

Fix a test to not expect the '#' and add a new test case with the above
asm.

Fixes: https://github.com/android-ndk/ndk/issues/1036
Reviewers: peter.smith, kristof.beyls

Subscribers: javed.absar, hiraditya, llvm-commits, srhines

Tags: #llvm

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

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

5 years agoRe-commit "[PowerPC][NFC][MachinePipeliner] Add some regression testcases""
Jinsong Ji [Thu, 8 Aug 2019 17:37:58 +0000 (17:37 +0000)]
Re-commit "[PowerPC][NFC][MachinePipeliner] Add some regression testcases""

Remove sms-cpy1.ll first while I investigate the problem.

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

5 years agolit: Use a License classifier that pypi will accept
Tom Stellard [Thu, 8 Aug 2019 17:23:33 +0000 (17:23 +0000)]
lit: Use a License classifier that pypi will accept

Summary:
'OSI Approved :: Apache-2.0 with LLVM exception' is not a valid
classifier.  'OSI Approved :: Apache Software License' is the closest
fit for the new license, so we've decided to use this one.

The classifiers seem to only be used for searching on the pypi website,
so this does not actually change the license of the code.
We still pass 'Apache-2.0 with LLVM exception' as the license to setup(),
and this appears alongside the classifier on the pypi webpage for lit.

Reviewers: chandlerc, ddunbar, joerg

Reviewed By: joerg

Subscribers: delcypher, llvm-commits

Tags: #llvm

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

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

5 years ago[ObjC][ARC] Upgrade calls to ARC runtime functions to intrinsic calls if
Akira Hatanaka [Thu, 8 Aug 2019 16:59:31 +0000 (16:59 +0000)]
[ObjC][ARC] Upgrade calls to ARC runtime functions to intrinsic calls if
the bitcode has the arm64 retainAutoreleasedReturnValue marker

The ARC middle-end passes stopped optimizing or transforming bitcode
that has been compiled with old compilers after we started emitting
calls to ARC runtime functions as intrinsic calls instead of normal
function calls in the front-end and made changes to teach the ARC
middle-end passes about those intrinsics (see r349534). This patch
converts calls to ARC runtime functions that are not intrinsic functions
to intrinsic function calls if the bitcode has the arm64
retainAutoreleasedReturnValue marker. Checking for the presence of the
marker is necessary to make sure we aren't changing ARC function calls
that were originally MRR message sends (see r349952).

rdar://problem/53280660

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

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

5 years ago[X86] XFormVExtractWithShuffleIntoLoad - handle shuffle mask scaling
Simon Pilgrim [Thu, 8 Aug 2019 16:05:23 +0000 (16:05 +0000)]
[X86] XFormVExtractWithShuffleIntoLoad - handle shuffle mask scaling

If the target shuffle mask is from a wider type, attempt to scale the mask so that the extraction can attempt to peek through.

Fixes the regression mentioned in rL368307

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

5 years ago[X86] SimplifyDemandedVectorElts - attempt to recombine target shuffle using Demanded...
Simon Pilgrim [Thu, 8 Aug 2019 15:54:20 +0000 (15:54 +0000)]
[X86] SimplifyDemandedVectorElts - attempt to recombine target shuffle using DemandedElts mask

If we don't demand all elements, then attempt to combine to a simpler shuffle.

At the moment we can only do this if Depth == 0 as combineX86ShufflesRecursively uses Depth to track whether the shuffle has really changed or not - we'll need to change this before we can properly start merging combineX86ShufflesRecursively into SimplifyDemandedVectorElts.

The insertps-combine.ll regression is because XFormVExtractWithShuffleIntoLoad can't see through shuffles of different widths - this will be fixed in a follow-up commit.

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

5 years agoEnable assembly output of local commons for AIX
David Tenty [Thu, 8 Aug 2019 15:40:35 +0000 (15:40 +0000)]
Enable assembly output of local commons for AIX

Summary:
This patch enable assembly output of local commons for AIX using .lcomm
directives. Adds a EmitXCOFFLocalCommonSymbol to MCStreamer so we can emit the
AIX version of .lcomm assembly directives which include a csect name. Handle the
case of BSS locals in PPCAIXAsmPrinter by using EmitXCOFFLocalCommonSymbol. Adds
a test for generating .lcomm on AIX Targets.

Reviewers: cebowleratibm, hubert.reinterpretcast, Xiangling_L, jasonliu, sfertile

Reviewed By: sfertile

Subscribers: wuzish, nemanjai, hiraditya, kbarton, MaskRay, jsji, llvm-commits

Tags: #llvm

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

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

5 years ago[ARM] Add support for MVE pre and post inc loads and stores
David Green [Thu, 8 Aug 2019 15:27:58 +0000 (15:27 +0000)]
[ARM] Add support for MVE pre and post inc loads and stores

This adds pre- and post- increment and decrements for MVE loads and stores. It
uses the builtin pre and post load/store detection, unlike Neon. Loads are
selected with the code in tryT2IndexedLoad, stores are selected with tablegen
patterns. The immediates have a +/-7bit range, multiplied by the size of the
element.

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

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

5 years ago[ARM] MVE big endian loads/stores
David Green [Thu, 8 Aug 2019 15:15:19 +0000 (15:15 +0000)]
[ARM] MVE big endian loads/stores

This adds some missing patterns for big endian loads/stores, allowing unaligned
loads/stores to also be selected with an extra VREV, which produces better code
than aligning through a stack. Also moves VLDR_P0 to not be LE only, and
adjusts some of the tests to show all that working.

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

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

5 years ago[RISCV] Allow ABI Names in Inline Assembly Constraints
Sam Elliott [Thu, 8 Aug 2019 14:59:16 +0000 (14:59 +0000)]
[RISCV] Allow ABI Names in Inline Assembly Constraints

Summary:
Clang will replace references to registers using ABI names in inline
assembly constraints with references to architecture names, but other
frontends do not. LLVM uses the regular assembly parser to parse inline asm,
so inline assembly strings can contain references to registers using their
ABI names.

This patch adds support for parsing constraints using either the ABI name or
the architectural register name. This means we do not need to implement the
ABI name replacement code in every single frontend, especially those like
Rust which are a very thin shim on top of LLVM IR's inline asm, and that
constraints can more closely match the assembly strings they refer to.

Reviewers: asb, simoncook

Reviewed By: simoncook

Subscribers: hiraditya, rbar, johnrusso, JDevlieghere, apazos, sabuasal, niosHD, kito-cheng, shiva0217, jrtc27, MaskRay, zzheng, edward-jones, rogfer01, MartinMosbeck, brucehoult, the_o, rkruppe, PkmX, jocewei, psnobl, benna, Jim, s.egerton, llvm-commits

Tags: #llvm

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

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

5 years ago[RISCV] Minimal stack realignment support
Sam Elliott [Thu, 8 Aug 2019 14:40:54 +0000 (14:40 +0000)]
[RISCV] Minimal stack realignment support

Summary:
Currently the RISC-V backend does not realign the stack. This can be an issue even for the RV32I/RV64I ABIs (where the stack is 16-byte aligned), though is rare. It will be much more comment with RV32E (though the alignment requirements for common data types remain under-documented...).

This patch adds minimal support for stack realignment. It should cope with large realignments. It will error out if the stack needs realignment and variable sized objects are present.

It feels like a lot of the code like getFrameIndexReference and determineFrameLayout could be refactored somehow, as right now it feels fiddly and brittle. We also seem to allocate a lot more memory than GCC does for equivalent C code.

Reviewers: asb

Reviewed By: asb

Subscribers: wwei, jrtc27, s.egerton, MaskRay, Jim, lenary, hiraditya, rbar, johnrusso, simoncook, apazos, sabuasal, niosHD, kito-cheng, shiva0217, zzheng, edward-jones, rogfer01, MartinMosbeck, brucehoult, the_o, rkruppe, PkmX, jocewei, psnobl, benna, llvm-commits

Tags: #llvm

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

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

5 years ago[FileCheck] Add missing includes in header
Thomas Preud'homme [Thu, 8 Aug 2019 13:56:59 +0000 (13:56 +0000)]
[FileCheck] Add missing includes in header

Reviewers: jhenderson, chandlerc, jdenny, probinson, grimar, arichardson, rnk

Subscribers: hiraditya, llvm-commits

Tags: #llvm

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

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

5 years agoAdd llvm.licm.disable metadata
Tim Corringham [Thu, 8 Aug 2019 13:46:17 +0000 (13:46 +0000)]
Add llvm.licm.disable metadata

For some targets the LICM pass can result in sub-optimal code in some
cases where it would be better not to run the pass, but it isn't
always possible to suppress the transformations heuristically.

Where the front-end has insight into such cases it is beneficial
to attach loop metadata to disable the pass - this change adds the
llvm.licm.disable metadata to enable that.

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

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

5 years ago[X86][SSE] matchBinaryPermuteShuffle - split INSERTPS combines
Simon Pilgrim [Thu, 8 Aug 2019 13:23:53 +0000 (13:23 +0000)]
[X86][SSE] matchBinaryPermuteShuffle - split INSERTPS combines

We need to prefer INSERTPS with zeros over SHUFPS, but fallback to INSERTPS if that fails.

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

5 years ago[Reassociate] add more tests with negative FP constants; NFC
Sanjay Patel [Thu, 8 Aug 2019 13:08:17 +0000 (13:08 +0000)]
[Reassociate] add more tests with negative FP constants; NFC

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

5 years agoFix check in tools/gold/X86/strip_names.ll regarding unnamed args
Bjorn Pettersson [Thu, 8 Aug 2019 12:11:13 +0000 (12:11 +0000)]
Fix check in tools/gold/X86/strip_names.ll regarding unnamed args

After r367755 value numbers are printed for unnamed
function arguments. The tools/gold/X86/strip_names.ll
was not updated in that commit, so this patch can be
seen as a follow up to r367755.

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

5 years ago[X86][SSE] Add x64 load use test case
Simon Pilgrim [Thu, 8 Aug 2019 11:24:23 +0000 (11:24 +0000)]
[X86][SSE] Add x64 load use test case

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

5 years ago[TargetLowering] SimplifyDemandedBits - call SimplifyMultipleUseDemandedBits for...
Simon Pilgrim [Thu, 8 Aug 2019 10:37:03 +0000 (10:37 +0000)]
[TargetLowering] SimplifyDemandedBits - call SimplifyMultipleUseDemandedBits for ISD::EXTRACT_VECTOR_ELT

This patch attempts to peek through vectors based on the demanded bits/elt of a particular ISD::EXTRACT_VECTOR_ELT node, allowing us to avoid dependencies on ops that have no impact on the extract.

In particular this helps remove some unnecessary scalar->vector->scalar patterns.

The wasm shift patterns are annoying - @tlively has indicated that the wasm vector shift codegen are to be refactored in the near-term and isn't considered a major issue.

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

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

5 years ago[MCA] Remove dependency from InstrBuilder in mca::Context. NFC
Andrea Di Biagio [Thu, 8 Aug 2019 10:30:58 +0000 (10:30 +0000)]
[MCA] Remove dependency from InstrBuilder in mca::Context. NFC

InstrBuilder is not required to construct the default pipeline.

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

5 years ago[MIPS GlobalISel] Select jump_table and brjt
Petar Avramovic [Thu, 8 Aug 2019 10:21:12 +0000 (10:21 +0000)]
[MIPS GlobalISel] Select jump_table and brjt

G_JUMP_TABLE and G_BRJT appear from translation of switch statement.
Select these two instructions for MIPS32, both pic and non-pic.

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

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

5 years ago[llcm-readobj] - Fix BB after t368272.
George Rimar [Thu, 8 Aug 2019 10:05:00 +0000 (10:05 +0000)]
[llcm-readobj] - Fix BB after t368272.

Seems I forgot to update this test case.

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

5 years ago[yaml2obj/obj2yaml] - Add a basic support for extended section indexes.
George Rimar [Thu, 8 Aug 2019 09:49:05 +0000 (09:49 +0000)]
[yaml2obj/obj2yaml] - Add a basic support for extended section indexes.

In some cases a symbol might have section index == SHN_XINDEX.
This is an escape value indicating that the actual section header index
is too large to fit in the containing field.
Then the SHT_SYMTAB_SHNDX section is used. It contains the 32bit values
that stores section indexes.

ELF gABI says that there can be multiple SHT_SYMTAB_SHNDX sections,
i.e. for example one for .symtab and one for .dynsym
(1) https://groups.google.com/forum/#!topic/generic-abi/-XJAV5d8PRg
(2) DT_SYMTAB_SHNDX: http://www.sco.com/developers/gabi/latest/ch5.dynamic.html

In this patch I am only supporting a single SHT_SYMTAB_SHNDX associated
with a .symtab. This is a more or less common case which is used a few tests I saw in LLVM.

I decided not to create the SHT_SYMTAB_SHNDX section as "implicit",
but implement is like a kind of regular section for now.
i.e. tools do not recreate this section or its content, like they do for
symbol table sections, for example. That should allow to write all kind of
possible broken test cases for our needs and keep the output closer to requested.

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

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

5 years ago[ARM] Select VFMA
Sam Tebbs [Thu, 8 Aug 2019 08:21:01 +0000 (08:21 +0000)]
[ARM] Select VFMA

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

5 years ago[ELF] - An attemp to fix builld bit after r368260
George Rimar [Thu, 8 Aug 2019 07:29:07 +0000 (07:29 +0000)]
[ELF] - An attemp to fix builld bit after r368260

BB: http://lab.llvm.org:8011/builders/lld-perf-testsuite/builds/17577/steps/build-bin%2Flld/logs/stdio

The error is:
/home/buildslave/slave_as-bldslv8/lld-perf-testsuite/llvm/include/llvm/Object/ELF.h:67:14:
error: 'static' function 'defaultWarningHandler' declared in header file should be declared 'static inline' [-Werror,-Wunneeded-internal-declaration]
static Error defaultWarningHandler(const Twine &Msg) { return createError(Msg); }
             ^

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

5 years ago[llvm-readobj/libObject] - Introduce a custom warning handler for `ELFFile<ELFT>...
George Rimar [Thu, 8 Aug 2019 07:17:35 +0000 (07:17 +0000)]
[llvm-readobj/libObject] - Introduce a custom warning handler for `ELFFile<ELFT>` methods.

Currently, we have a code duplication in llvm-readobj which was introduced in D63266.
The duplication was introduced to allow llvm-readobj to dump the partially
broken object. Methods in ELFFile<ELFT> perform a strict validation of the inputs,
what is itself good, but not for dumper tools, that might want to dump the information,
even if some pieces are broken/unexpected.

This patch introduces a warning handler which can be passed to ELFFile<ELFT> methods
and can allow skipping the non-critical errors when needed/possible.

For demonstration, I removed the duplication from llvm-readobj and implemented a warning using
the new custom warning handler. It also deduplicates the strings printed, making the output less verbose.

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

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

5 years ago[X86] Remove -x86-experimental-vector-widening-legalization command line option and...
Craig Topper [Thu, 8 Aug 2019 06:48:22 +0000 (06:48 +0000)]
[X86] Remove -x86-experimental-vector-widening-legalization command line option and all its uses.

This option is now defaulted to true and we don't want to support
turning it off so remove the option.

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

5 years ago[ARM] Tighten up VLDRH.32 with low alignments
David Green [Thu, 8 Aug 2019 06:22:03 +0000 (06:22 +0000)]
[ARM] Tighten up VLDRH.32 with low alignments

VLDRH needs to have an alignment of at least 2, including the
widening/narrowing versions. This tightens up the ISel patterns for it and
alters allowsMisalignedMemoryAccesses so that unaligned accesses are expanded
through the stack. It also fixed some incorrect shift amounts, which seemed to
be passing a multiple not a shift.

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

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

5 years ago[ARM] Rejig MVE load store tests. NFC
David Green [Thu, 8 Aug 2019 05:58:48 +0000 (05:58 +0000)]
[ARM] Rejig MVE load store tests. NFC

This adjusts the load/store tests for better testing of alignments. It also
adds some extra alignment 1 tests, useful for future commits.

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

5 years agoRevert "Temporarily bump minimum compiler version"
JF Bastien [Thu, 8 Aug 2019 05:47:59 +0000 (05:47 +0000)]
Revert "Temporarily bump minimum compiler version"

It's been in for more than 30 min and no bots have complained. Let's see if some
slow ones catch up. I'll do another manual pass on bots later (in case some that
were down are back up), and then turn this on permanently through a regular
review.

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

5 years agoTemporarily bump minimum compiler version
JF Bastien [Thu, 8 Aug 2019 05:12:20 +0000 (05:12 +0000)]
Temporarily bump minimum compiler version

It's pretty hard to find a reliable list of which bots use which compiler version... so I'm going to commit this change which allows us to mandate the compilers required for C++14. This bump is what we've already agreed to do, so I'll use the list of failures to figure out which bots need to bump their compiler version. I'll revert the change in a few minutes.

The last discussion of this is here: http://lists.llvm.org/pipermail/llvm-dev/2019-August/134360.html

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

5 years ago[X86] Add CMOV_FR32X and CMOV_FR64X to the isCMOVPseudo function.
Craig Topper [Thu, 8 Aug 2019 04:40:59 +0000 (04:40 +0000)]
[X86] Add CMOV_FR32X and CMOV_FR64X to the isCMOVPseudo function.

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

5 years ago[GISel][NFC]: Make members of CombinerHelper accessible in derived classes
Aditya Nandakumar [Thu, 8 Aug 2019 02:24:57 +0000 (02:24 +0000)]
[GISel][NFC]: Make members of CombinerHelper accessible in derived classes

https://reviews.llvm.org/D65842

Make some members protected to enable access in derived classes.

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