]> granicus.if.org Git - llvm/log
llvm
5 years agoIR: Teach GlobalIndirectSymbol::getBaseObject() to handle more kinds of expressions.
Peter Collingbourne [Wed, 24 Jul 2019 22:23:05 +0000 (22:23 +0000)]
IR: Teach GlobalIndirectSymbol::getBaseObject() to handle more kinds of expressions.

For aliases, any expression that lowers at the MC level to global_object or
global_object+constant is valid at the object file level. getBaseObject()
should return a result if the aliasee ends up being of that form even if
the IR used to produce it is somewhat unconventional.

Note that this is different from what stripInBoundsOffsets() and that family
of functions is doing. Those functions are concerned about semantic properties
of IR, whereas here we only care about the lowering result.

Therefore reimplement getBaseObject() in a way that matches the lowering
result. This fixes a crash when producing a summary for aliases such as
that in the included test case.

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

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

5 years ago[GlobalISel] Support for inlining memcpy, memset and memmove calls.
Amara Emerson [Wed, 24 Jul 2019 22:17:31 +0000 (22:17 +0000)]
[GlobalISel] Support for inlining memcpy, memset and memmove calls.

This introduces a new family of combiner helper routines that re-use the
target specific cost model from SelectionDAG, and generate inline implementations
of the memcpy family of intrinsics.

The combines are only enabled at optimization levels higher than -O0, and give
very substantial performance improvements.

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

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

5 years ago[Transforms] move copying of load metadata to helper function; NFC
Sanjay Patel [Wed, 24 Jul 2019 22:11:11 +0000 (22:11 +0000)]
[Transforms] move copying of load metadata to helper function; NFC

There's another proposed load combine that can make use of this code
in D64432.

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

5 years ago[CodeGen] Add missing comment (NFC)
Evandro Menezes [Wed, 24 Jul 2019 21:45:14 +0000 (21:45 +0000)]
[CodeGen] Add missing comment (NFC)

Add similar comments on the load limits pertaining to `memcmp()` similar to
those for other string functions.

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

5 years ago[Remarks] Add support for serializing metadata for every remark streamer
Francis Visoiu Mistrih [Wed, 24 Jul 2019 21:29:44 +0000 (21:29 +0000)]
[Remarks] Add support for serializing metadata for every remark streamer

This allows every serializer format to implement metaSerializer() and
return the corresponding meta serializer.

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

5 years ago[InstCombine] Teach foldOrOfICmps to allow icmp eq MIN_INT/MAX to be part of a range...
Craig Topper [Wed, 24 Jul 2019 20:57:29 +0000 (20:57 +0000)]
[InstCombine] Teach foldOrOfICmps to allow icmp eq MIN_INT/MAX to be part of a range comparision. Similar for foldAndOfICmps

We can treat icmp eq X, MIN_UINT as icmp ule X, MIN_UINT and allow
it to merge with icmp ugt X, C. Similar for the other constants.

We can do simliar for icmp ne X, (U)INT_MIN/MAX in foldAndOfICmps. And we already handled UINT_MIN there.

Fixes PR42691.

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

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

5 years ago[AArch64][GlobalISel] Fix a crash during s128 G_ICMP legalization due to r366317.
Amara Emerson [Wed, 24 Jul 2019 20:46:42 +0000 (20:46 +0000)]
[AArch64][GlobalISel] Fix a crash during s128 G_ICMP legalization due to r366317.

r366317 added a legalization for s128 G_ICMP narrow scalar which tried to hard
code the result type of the new legalized G_SELECT. Change this to instead use
type of the original G_ICMP result and allow the target to legalize it if necessary
later.

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

5 years agoLet CorrelatedValuePropagation preserve LazyValueInfo
David Bolvansky [Wed, 24 Jul 2019 20:27:32 +0000 (20:27 +0000)]
Let CorrelatedValuePropagation preserve LazyValueInfo

Summary:
This patch makes CorrelatedValuePropagation preserve LazyValueInfo by adding LazyValueInfo::eraseValue & calling it whenever an instruction is erased.

Passes `make check` , test-suite, and SPECrate 2017.

Patch by aqjune (Juneyoung Lee)

Reviewers: reames, mzolotukhin

Reviewed By: reames

Subscribers: xbolva00, llvm-commits

Tags: #llvm

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

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

5 years ago[Remarks][NFC] Rename remarks::Serializer to remarks::RemarkSerializer
Francis Visoiu Mistrih [Wed, 24 Jul 2019 19:47:57 +0000 (19:47 +0000)]
[Remarks][NFC] Rename remarks::Serializer to remarks::RemarkSerializer

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

5 years ago[AMDGPU] Increase kernel padding
Stanislav Mekhanoshin [Wed, 24 Jul 2019 19:40:13 +0000 (19:40 +0000)]
[AMDGPU] Increase kernel padding

To support prefetch mode 3 we need to pad current
cacheline and fill 3 cachelines after. Current padding
is only sufficient for mode 2.

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

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

5 years agoRevert "[yaml2obj] - Allow custom fields for the SHT_UNDEF sections."
JF Bastien [Wed, 24 Jul 2019 18:29:33 +0000 (18:29 +0000)]
Revert "[yaml2obj] - Allow custom fields for the SHT_UNDEF sections."

It fails on macOS with the following error:
  https://reviews.llvm.org/D65140#1599522

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

5 years agoFix signed/unsigned comparison warning. NFCI.
Simon Pilgrim [Wed, 24 Jul 2019 17:44:22 +0000 (17:44 +0000)]
Fix signed/unsigned comparison warning. NFCI.

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

5 years ago[ARM] Rewrite how VCMP are lowered, using a single node
David Green [Wed, 24 Jul 2019 17:36:47 +0000 (17:36 +0000)]
[ARM] Rewrite how VCMP are lowered, using a single node

This removes the VCEQ/VCNE/VCGE/VCEQZ/etc nodes, just using two called VCMP and
VCMPZ with an extra operand as the condition code. I believe this will make
some combines simpler, allowing us to just look at these codes and not the
operands. It also helps fill in a missing VCGTUZ MVE selection without adding
extra nodes for it.

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

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

5 years ago[DAGCombine] matchBinOpReduction - add partial reduction matching
Simon Pilgrim [Wed, 24 Jul 2019 17:29:56 +0000 (17:29 +0000)]
[DAGCombine] matchBinOpReduction - add partial reduction matching

This patch adds support for recognizing cases where a larger vector type is being used to reduce just the elements in the lower subvector:

e.g. <8 x i32> reduction pattern in a <16 x i32> vector:

<4,5,6,7,u,u,u,u,u,u,u,u,u,u,u,u>
<2,3,u,u,u,u,u,u,u,u,u,u,u,u,u,u>
<1,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u>

matchBinOpReduction returns the lower extracted subvector in such cases, assuming isExtractSubvectorCheap accepts the extraction.

I've only enabled it for X86 reduction sums so far. I intend to enable it for the bitop/minmax cases in future patches, and eventually I think its worth turning it on all the time. This is mainly just a case of ensuring calls to matchBinOpReduction don't make assumptions on the vector width based on the original vector extraction.

Fixes the x86 partial reduction sum cases in PR33758 and PR42023.

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

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

5 years ago[ARM] Disable MVE fptosi and friends
David Green [Wed, 24 Jul 2019 17:26:26 +0000 (17:26 +0000)]
[ARM] Disable MVE fptosi and friends

The prevents us from trying to convert an i1 predicate vector to a float, or
vice-versa. Better patterns are possible, which will follow in a subsequent
commit. For now we just expand them.

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

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

5 years ago[AArch64][GlobalISel] Make vector dup optimization look at last elt of ZeroVec
Jessica Paquette [Wed, 24 Jul 2019 17:18:51 +0000 (17:18 +0000)]
[AArch64][GlobalISel] Make vector dup optimization look at last elt of ZeroVec

Fix an off-by-one error which made us not look at the last element of the
zero vector. This caused a miscompile in 188.ammp.

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

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

5 years ago[ARM] More MVE compare vector splat combines for ANDs
David Green [Wed, 24 Jul 2019 17:08:09 +0000 (17:08 +0000)]
[ARM] More MVE compare vector splat combines for ANDs

Adds some extra r register compare combines, this time for ANDs.

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

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

5 years agogn build: Merge r366919
Nico Weber [Wed, 24 Jul 2019 17:04:44 +0000 (17:04 +0000)]
gn build: Merge r366919

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

5 years ago[InstCombine] Adjusted pow-exp tests for Windows [NFC]
David Bolvansky [Wed, 24 Jul 2019 17:01:20 +0000 (17:01 +0000)]
[InstCombine] Adjusted pow-exp tests for Windows [NFC]

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

Reviewers: efriedma, hans

Reviewed By: hans

Subscribers: spatel, llvm-commits

Tags: #llvm

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

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

5 years ago[ARM] MVE compare vector splat combine
David Green [Wed, 24 Jul 2019 16:58:41 +0000 (16:58 +0000)]
[ARM] MVE compare vector splat combine

MVE VCMP instructions can use a general purpose register as the second operand.
This adds the combines for it, selecting from a compare of a vdup.

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

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

5 years ago[llvm-objdump] Emit warning if --start-address/--stop-address specify range outside...
Yuanfang Chen [Wed, 24 Jul 2019 16:55:30 +0000 (16:55 +0000)]
[llvm-objdump] Emit warning if --start-address/--stop-address specify range outside file's address range.

NB: the warning is about the input file itself regardless of the options used
such as `-r`, `-s` etc..

https://bugs.llvm.org/show_bug.cgi?id=41911

Reviewers: jhenderson, grimar, MaskRay, rupprecht

Reviewed by: MaskRay, jhenderson

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

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

5 years ago[SelectionDAG] makeEquivalentMemoryOrdering - early out for equal chains (PR42727)
Simon Pilgrim [Wed, 24 Jul 2019 16:53:14 +0000 (16:53 +0000)]
[SelectionDAG] makeEquivalentMemoryOrdering - early out for equal chains (PR42727)

If we are already using the same chain for the old/new memory ops then just return.

Fixes PR42727 which had getLoad() reusing an existing node.

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

5 years ago[AMDGPU][MC][GFX10] Enabled GFX10 assembly with arbitrary wavesize assumed by the...
Dmitry Preobrazhensky [Wed, 24 Jul 2019 16:50:17 +0000 (16:50 +0000)]
[AMDGPU][MC][GFX10] Enabled GFX10 assembly with arbitrary wavesize assumed by the code

Reviewers: rampitec, arsenm

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

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

5 years ago[ARM] Better OR's for MVE compares
David Green [Wed, 24 Jul 2019 16:42:09 +0000 (16:42 +0000)]
[ARM] Better OR's for MVE compares

This adds a DeMorgan combine for OR's of compares to turn them into AND's,
helping prevent them from going into and out of gpr registers. It also fills in
the VCLE and VCLT nodes that MVE can select, allowing it to invert more
compares.

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

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

5 years ago[Remarks] Simplify the creation of remark serializers
Francis Visoiu Mistrih [Wed, 24 Jul 2019 16:36:35 +0000 (16:36 +0000)]
[Remarks] Simplify the creation of remark serializers

Introduce two new functions to create a serializer, and add support for
more combinations to the YAMLStrTabSerializer.

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

5 years ago[AMDGPU] Add all vgpr classes to asm parser
Stanislav Mekhanoshin [Wed, 24 Jul 2019 16:21:18 +0000 (16:21 +0000)]
[AMDGPU] Add all vgpr classes to asm parser

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

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

5 years agoAMDGPU: Fix test after r366913
Matt Arsenault [Wed, 24 Jul 2019 16:05:55 +0000 (16:05 +0000)]
AMDGPU: Fix test after r366913

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

5 years agoAMDGPU/GlobalISel: Don't assume instruction can be erased when selecting exts
Matt Arsenault [Wed, 24 Jul 2019 16:05:53 +0000 (16:05 +0000)]
AMDGPU/GlobalISel: Don't assume instruction can be erased when selecting exts

The G_ANYEXT handling can end up reaching selectCOPY, which mutates
the instruction in place.

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

5 years ago[SDAG] convert (sub x, 1) to (add x, -1) in ctpop expansion; NFC
Sanjay Patel [Wed, 24 Jul 2019 15:43:50 +0000 (15:43 +0000)]
[SDAG] convert (sub x, 1) to (add x, -1) in ctpop expansion; NFC

We canonicalize to the add form, so create that directly for efficiency.

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

5 years agoAMDGPU: Only allow FP types for format buffer intrinics
Matt Arsenault [Wed, 24 Jul 2019 15:37:51 +0000 (15:37 +0000)]
AMDGPU: Only allow FP types for format buffer intrinics

The code already somewhat assumes this is the case anyway.

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

5 years ago[AIX][lit] Don't depend on psutil on AIX
David Tenty [Wed, 24 Jul 2019 15:04:27 +0000 (15:04 +0000)]
[AIX][lit] Don't depend on psutil on AIX

Summary:
On AIX psutil can run into problems with permissions to read the process
tree, which causes problems for python timeout tests which need to kill off
a test and it's children.

This patch adds a workaround by invoking shell via subprocess and using a
platform specific option to ps to list all the descendant processes so we can
kill them. We add some checks so lit can tell whether timeout tests are
supported with out exposing whether we are utilizing the psutil
implementation or the alternative.

Reviewers: hubert.reinterpretcast, andusy, davide, delcypher

Reviewed By: delcypher

Subscribers: davide, delcypher, christof, lldb-commits, libcxx-commits, llvm-commits

Tags: #lldb, #libc, #llvm

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

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

5 years ago[Support] Fix `-ftime-trace-granularity` option
Anton Afanasyev [Wed, 24 Jul 2019 14:55:40 +0000 (14:55 +0000)]
[Support] Fix `-ftime-trace-granularity` option

Summary:
Move `-ftime-trace-granularity` option to frontend options. Without patch
this option is showed up in the help for any tool that links libSupport.

Reviewers: sammccall

Subscribers: hiraditya, cfe-commits, llvm-commits

Tags: #clang, #llvm

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

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

5 years ago[ARM] Better AND's for MVE compares
David Green [Wed, 24 Jul 2019 14:42:05 +0000 (14:42 +0000)]
[ARM] Better AND's for MVE compares

Add a number of folds to convert and(vcmp, vcmp) into a single VPT block, where
the second vcmp becomes predicated on the first.

The VCMP; VPST; VCMP will eventually be converted to VPT; VCMP in the
VPTBlockPass.

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

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

5 years ago[ARM] MVE floating point compares and selects
David Green [Wed, 24 Jul 2019 14:28:22 +0000 (14:28 +0000)]
[ARM] MVE floating point compares and selects

Much like integers, this adds MVE floating point compares and select. It
requires a lot more buildvector/shuffle code because we may need to expand the
compares without mve.fp, and requires support for and/or because of the way we
lower llvm condition codes.

Some original code by David Sherwood

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

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

5 years ago[llvm-ar][test] Fix move operation tests
Owen Reynolds [Wed, 24 Jul 2019 14:26:18 +0000 (14:26 +0000)]
[llvm-ar][test] Fix move operation tests

This fixes two tests that did not remove existing archives
before testing due to mistyped archive names.

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

5 years ago[ARM] Basic And/Or/Xor handling for MVE predicates
David Green [Wed, 24 Jul 2019 14:17:54 +0000 (14:17 +0000)]
[ARM] Basic And/Or/Xor handling for MVE predicates

This adds some basic, "worst case" handling for MVE predicate Or/And/Xor. It
does this by going into and out of GPRs, doing the operation on scalars.

Code by David Sherwood.

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

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

5 years agoSilence a conversion warning after r366887. NFC
Paul Robinson [Wed, 24 Jul 2019 14:15:02 +0000 (14:15 +0000)]
Silence a conversion warning after r366887. NFC

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

5 years ago[ARM] Make sure that the constant pool does not keep in the middle of an IT block.
Simi Pallipurath [Wed, 24 Jul 2019 13:54:14 +0000 (13:54 +0000)]
[ARM] Make sure that the constant pool does not keep in the middle of an IT block.

This change make sure that llvm does not emit an invalid IT block
by putting the constant pool in the middle of an IT block.

We have code to try to avoid putting a constant island in the middle of an
IT block, but it only works if we see an IT between the one currently
referencing CPE and possible insertion point. If the first instruction
we look at is the VLDRD after the IT , we never see the IT and does not
realize that the instruction doing the load could be in an IT block itself.

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

Change-Id: I24cecb37cded75e8992870bd997f6226853bd920

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

5 years agoTest commit. NFC.
Sjoerd Meijer [Wed, 24 Jul 2019 13:30:36 +0000 (13:30 +0000)]
Test commit. NFC.

Removed 2 trailing whitespaces in 2 files that used to be in different
repos to test my new github monorepo workflow.

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

5 years ago[InstSimplify] Rename SimplifyFPUnOp and SimplifyFPBinOp
Jay Foad [Wed, 24 Jul 2019 12:50:10 +0000 (12:50 +0000)]
[InstSimplify] Rename SimplifyFPUnOp and SimplifyFPBinOp

Summary:
SimplifyFPBinOp is a variant of SimplifyBinOp that lets you specify
fast math flags, but the name is misleading because both functions
can simplify both FP and non-FP ops. Instead, overload SimplifyBinOp
so that you can optionally specify fast math flags.

Likewise for SimplifyFPUnOp.

Reviewers: spatel

Reviewed By: spatel

Subscribers: xbolva00, cameron.mcinally, eraman, hiraditya, haicheng, zzheng, llvm-commits

Tags: #llvm

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

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

5 years ago[InstCombine] add tests for load narrowing; NFC
Sanjay Patel [Wed, 24 Jul 2019 12:44:21 +0000 (12:44 +0000)]
[InstCombine] add tests for load narrowing; NFC

Baseline results for D64432.

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

5 years ago[FileCheck] Use ASSERT for fatal unit tests
Thomas Preud'homme [Wed, 24 Jul 2019 12:38:34 +0000 (12:38 +0000)]
[FileCheck] Use ASSERT for fatal unit tests

Summary:
A number of EXPECT statements in FileCheck's unit tests are dependent
from results of other values being tested. This commit changes those
earlier test to use ASSERT instead of EXPECT to avoid cascade errors
when they are all related to the same issue.

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

Subscribers: JonChesterfield, rogfer01, hfinkel, kristina, rnk, tra, arichardson, grimar, dblaikie, probinson, llvm-commits, hiraditya

Tags: #llvm

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

llvm-svn: 366862

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

5 years ago[FileCheck]] Canonicalize caret location testing
Thomas Preud'homme [Wed, 24 Jul 2019 12:38:29 +0000 (12:38 +0000)]
[FileCheck]] Canonicalize caret location testing

Summary:
Testing of caret location in diagnostic message is currently made with
CHECK directive with the following general format:
CHECK: {{^         \^$}}

James Henderson suggested the following would be more readable:
CHECK: {{^}}         ^{{$}}

and when whole lines can be matched (as is the case for command-line
testing where error messages do not include path):
CHECK:         ^
using the option --match-full-lines.

This commit implements these 2 changes on all existing caret position
tests. It also aligns the caret to the character it is trying to match
in the above line.

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

Subscribers: JonChesterfield, rogfer01, hfinkel, kristina, rnk, tra, arichardson, grimar, dblaikie, probinson, llvm-commits, hiraditya

Tags: #llvm

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

llvm-svn: 366861

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

5 years agoFileCheck [8/12]: Define numeric var from expr
Thomas Preud'homme [Wed, 24 Jul 2019 12:38:22 +0000 (12:38 +0000)]
FileCheck [8/12]: Define numeric var from expr

Summary:
This patch is part of a patch series to add support for FileCheck
numeric expressions. This specific patch lift the restriction for a
numeric expression to either be a variable definition or a numeric
expression to try to match.

This commit allows a numeric variable to be set to the result of the
evaluation of a numeric expression after it has been matched
successfully. When it happens, the variable is allowed to be used on
the same line since its value is known at match time.

It also makes use of this possibility to reuse the parsing code to
parse a command-line definition by crafting a mirror string of the
-D option with the equal sign replaced by a colon sign, e.g. for option
'-D#NUMVAL=10' it creates the string
'-D#NUMVAL=10 (parsed as [[#NUMVAL:10]])' where the numeric expression
is parsed to define NUMVAL. This result in a few tests needing updating
for the location diagnostics on top of the tests for the new feature.

It also enables empty numeric expression which match any number without
defining a variable. This is done here rather than in commit #5 of the
patch series because it requires to dissociate automatic regex insertion
in RegExStr from variable definition which would make commit #5 even
bigger than it already is.

Copyright:
    - Linaro (changes up to diff 183612 of revision D55940)
    - GraphCore (changes in later versions of revision D55940 and
                 in new revision created off D55940)

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

Subscribers: hiraditya, llvm-commits, probinson, dblaikie, grimar, arichardson, tra, rnk, kristina, hfinkel, rogfer01, JonChesterfield

Tags: #llvm

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

llvm-svn: 366860

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

5 years ago[llvm-objdump] - Import the test/Object/X86/no-start-symbol.test test case and rewrit...
George Rimar [Wed, 24 Jul 2019 12:24:43 +0000 (12:24 +0000)]
[llvm-objdump] - Import the test/Object/X86/no-start-symbol.test test case and rewrite it to use YAML.

This patch removes test/Object/X86/no-start-symbol.test (rewrites
it to use YAML and moves it to llvm-objdump tests folder).

(This test was initially introduced in rL239039, but now there
is no reason to keep the precompiled binary it seems).

DIfferential revision: https://reviews.llvm.org/D65136

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

5 years ago[Object/llvm-readobj] - Cleanup testing of the dynamic objects.
George Rimar [Wed, 24 Jul 2019 12:20:42 +0000 (12:20 +0000)]
[Object/llvm-readobj] - Cleanup testing of the dynamic objects.

This patch touches a few test cases:

It removes dtflags.elf-x86-64 binary and elf-dtflags.test.
elf-dtflags.test is excessive because we have the
elf-dynamic-tags.test which test all non-machine specific tags.

It removes testing of --dynamic-table from test\Object\readobj-shared-object.test
(we have the elf-dynamic-tags.test for that), and simplifies this test case.

It moves testing of the headers from readobj-shared-object.test
to elf-file-headers.test.

Adds test/tools/llvm-readobj/elf-file-types.test and test/tools/llvm-readobj/elf-loadname.test.

It opens road for removing the readobj-shared-object.test completely soon.

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

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

5 years ago[yaml2obj] - Allow custom fields for the SHT_UNDEF sections.
George Rimar [Wed, 24 Jul 2019 12:16:22 +0000 (12:16 +0000)]
[yaml2obj] - Allow custom fields for the SHT_UNDEF sections.

This is a follow-up refactoring patch for recently
introduced functionality which which reduces the code duplication
and also makes possible to redefine all possible fields of
the first SHT_NULL section (previously it was only possible to set
sh_link and sh_size).

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

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

5 years ago[ARM] MVE predicate register support
David Green [Wed, 24 Jul 2019 11:51:36 +0000 (11:51 +0000)]
[ARM] MVE predicate register support

This adds support code for building and shuffling i1 predicate registers. It
generally uses two basic principles, either converting the predicate into an
scalar (through a PREDICATE_CAST) and doing scalar operations on it there, or
by converting the register to an full vector register and back.

Some of the code here is a not super efficient but will hopefully cover most
cases of moving i1 vectors around and can be improved in subsequent patches.

Some code by David Sherwood.

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

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

5 years ago[DWARF][NFC] Add constants for reserved values of an initial length field.
Igor Kudrin [Wed, 24 Jul 2019 11:34:29 +0000 (11:34 +0000)]
[DWARF][NFC] Add constants for reserved values of an initial length field.

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

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

5 years agoRecommit rr366796 "[Object/ELF.h] - Improve testing of the fields in ELFFile<ELFT...
George Rimar [Wed, 24 Jul 2019 11:24:37 +0000 (11:24 +0000)]
Recommit rr366796 "[Object/ELF.h] - Improve testing of the fields in ELFFile<ELFT>::sections()."

With a fix of the issue found by UBSan.

Original commit message:

This eliminates a one error untested and
also introduces a error for one more possible case
which lead to crash previously.

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

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

5 years ago[ARM] MVE integer compares and selects
David Green [Wed, 24 Jul 2019 11:08:14 +0000 (11:08 +0000)]
[ARM] MVE integer compares and selects

This adds the very basics for MVE vector predication, adding integer VCMP and
VSEL instruction support. This is done through predicate registers (MVT::v16i1,
MVT::v8i1, MVT::v4i1), but otherwise using same mechanics as NEON to custom
lower setcc's through ARMISD::VCXX nodes (VCEQ, VCGT, VCEQZ, etc).

An extra VCNE was added, as this can be handled sensibly by MVE's expanded
number of VCMP condition codes. (There are also VCLE and VCLT which are added
later).

VPSEL is also added here, simply selecting on the vselect.

Original code by David Sherwood.

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

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

5 years ago[ARM][ParallelDSP] Fix pointer operand reordering
Sam Parker [Wed, 24 Jul 2019 09:38:39 +0000 (09:38 +0000)]
[ARM][ParallelDSP] Fix pointer operand reordering

While combining two loads into a single load, we often need to
reorder the pointer operands for the new load. This reordering was
broken in the cases where there was a chain of values that built up
the pointer.

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

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

5 years ago[Remark] Suppress the "-Wreturn-type" compiler warning, NFC
Haojian Wu [Wed, 24 Jul 2019 07:55:01 +0000 (07:55 +0000)]
[Remark] Suppress the "-Wreturn-type" compiler warning, NFC

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

5 years agoRevert "FileCheck [8/12]: Define numeric var from expr"
Thomas Preud'homme [Wed, 24 Jul 2019 07:32:34 +0000 (07:32 +0000)]
Revert "FileCheck [8/12]: Define numeric var from expr"

This reverts commit 1b05977538d9487aa845ee2f3bec8b89c63c4f29.

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

5 years agoRevert "[FileCheck]] Canonicalize caret location testing"
Thomas Preud'homme [Wed, 24 Jul 2019 07:32:18 +0000 (07:32 +0000)]
Revert "[FileCheck]] Canonicalize caret location testing"

This reverts commit ba4e8d791342219c072a5c8de8a3f41fbb53c6be.

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

5 years agoRevert "[FileCheck] Use ASSERT for fatal unit tests"
Thomas Preud'homme [Wed, 24 Jul 2019 07:32:11 +0000 (07:32 +0000)]
Revert "[FileCheck] Use ASSERT for fatal unit tests"

This reverts commit fb596735fe9c1ea22afb1727cbbba449bd6334c2.

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

5 years ago[RISCV] Implement benchmark::cycleclock::Now
Roger Ferrer Ibanez [Wed, 24 Jul 2019 05:33:46 +0000 (05:33 +0000)]
[RISCV] Implement benchmark::cycleclock::Now

This is a cherrypick of D64237 onto llvm/utils/benchmark and
libcxx/utils/google-benchmark.

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

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

5 years ago[PowerPC][NFC] use opcode instead of MachineInstr for instrHasImmForm().
Chen Zheng [Wed, 24 Jul 2019 04:50:23 +0000 (04:50 +0000)]
[PowerPC][NFC] use opcode instead of MachineInstr for instrHasImmForm().

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

5 years ago[AArch64] Fix -Wunused-variable in -DLLVM_ENABLE_ASSERTIONS=off builds after r366857
Fangrui Song [Wed, 24 Jul 2019 01:59:44 +0000 (01:59 +0000)]
[AArch64] Fix -Wunused-variable in -DLLVM_ENABLE_ASSERTIONS=off builds after r366857

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

5 years ago[SafeStack] Insert the deref before remaining elements
Petr Hosek [Wed, 24 Jul 2019 00:16:23 +0000 (00:16 +0000)]
[SafeStack] Insert the deref before remaining elements

This is a follow up to D64971. While we need to insert the deref after
the offset, it needs to come before the remaining elements in the
original expression since the deref needs to happen before the LLVM
fragment if present.

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

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

5 years ago[Remarks] String tables should be move-only
Francis Visoiu Mistrih [Tue, 23 Jul 2019 22:50:08 +0000 (22:50 +0000)]
[Remarks] String tables should be move-only

Copying them is expensive. This allows the tables to be moved around at
lower cost, and allows a remarks::StringTable to be constructed from
a remarks::ParsedStringTable.

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

5 years ago[FileCheck] Use ASSERT for fatal unit tests
Thomas Preud'homme [Tue, 23 Jul 2019 22:41:51 +0000 (22:41 +0000)]
[FileCheck] Use ASSERT for fatal unit tests

Summary:
A number of EXPECT statements in FileCheck's unit tests are dependent
from results of other values being tested. This commit changes those
earlier test to use ASSERT instead of EXPECT to avoid cascade errors
when they are all related to the same issue.

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

Subscribers: JonChesterfield, rogfer01, hfinkel, kristina, rnk, tra, arichardson, grimar, dblaikie, probinson, llvm-commits, hiraditya

Tags: #llvm

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

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

5 years ago[FileCheck]] Canonicalize caret location testing
Thomas Preud'homme [Tue, 23 Jul 2019 22:41:46 +0000 (22:41 +0000)]
[FileCheck]] Canonicalize caret location testing

Summary:
Testing of caret location in diagnostic message is currently made with
CHECK directive with the following general format:
CHECK: {{^         \^$}}

James Henderson suggested the following would be more readable:
CHECK: {{^}}         ^{{$}}

and when whole lines can be matched (as is the case for command-line
testing where error messages do not include path):
CHECK:         ^
using the option --match-full-lines.

This commit implements these 2 changes on all existing caret position
tests. It also aligns the caret to the character it is trying to match
in the above line.

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

Subscribers: JonChesterfield, rogfer01, hfinkel, kristina, rnk, tra, arichardson, grimar, dblaikie, probinson, llvm-commits, hiraditya

Tags: #llvm

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

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

5 years agoFileCheck [8/12]: Define numeric var from expr
Thomas Preud'homme [Tue, 23 Jul 2019 22:41:38 +0000 (22:41 +0000)]
FileCheck [8/12]: Define numeric var from expr

Summary:
This patch is part of a patch series to add support for FileCheck
numeric expressions. This specific patch lift the restriction for a
numeric expression to either be a variable definition or a numeric
expression to try to match.

This commit allows a numeric variable to be set to the result of the
evaluation of a numeric expression after it has been matched
successfully. When it happens, the variable is allowed to be used on
the same line since its value is known at match time.

It also makes use of this possibility to reuse the parsing code to
parse a command-line definition by crafting a mirror string of the
-D option with the equal sign replaced by a colon sign, e.g. for option
'-D#NUMVAL=10' it creates the string
'-D#NUMVAL=10 (parsed as [[#NUMVAL:10]])' where the numeric expression
is parsed to define NUMVAL. This result in a few tests needing updating
for the location diagnostics on top of the tests for the new feature.

It also enables empty numeric expression which match any number without
defining a variable. This is done here rather than in commit #5 of the
patch series because it requires to dissociate automatic regex insertion
in RegExStr from variable definition which would make commit #5 even
bigger than it already is.

Copyright:
    - Linaro (changes up to diff 183612 of revision D55940)
    - GraphCore (changes in later versions of revision D55940 and
                 in new revision created off D55940)

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

Subscribers: hiraditya, llvm-commits, probinson, dblaikie, grimar, arichardson, tra, rnk, kristina, hfinkel, rogfer01, JonChesterfield

Tags: #llvm

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

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

5 years ago[DWARF] Use 32-bit format specifier for offset
Jonas Devlieghere [Tue, 23 Jul 2019 22:34:21 +0000 (22:34 +0000)]
[DWARF] Use 32-bit format specifier for offset

This should fix PR42730.

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

5 years ago[AArch64][GlobalISel] Add support for s128 loads, stores, extracts, truncs.
Amara Emerson [Tue, 23 Jul 2019 22:05:13 +0000 (22:05 +0000)]
[AArch64][GlobalISel] Add support for s128 loads, stores, extracts, truncs.

We need to be able to load and store s128 for memcpy inlining, where we want to
generate Q register mem ops. Making these legal also requires that we add some
support in other instructions. Regbankselect should also know about these since
they have no GPR register class that can hold them, so need special handling to
live on the FPR bank.

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

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

5 years agoFix "control reaches end of non-void function" warning. NFCI.
Simon Pilgrim [Tue, 23 Jul 2019 21:59:48 +0000 (21:59 +0000)]
Fix "control reaches end of non-void function" warning. NFCI.

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

5 years ago[docs] Clarify where the indirect UB due to write-write races comes from
Eli Friedman [Tue, 23 Jul 2019 21:51:26 +0000 (21:51 +0000)]
[docs] Clarify where the indirect UB due to write-write races comes from

This is based on https://bugs.llvm.org/show_bug.cgi?id=42435#c3.

Patch by Ralf Jung.

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

5 years ago[GlobalISel][AArch64] Save a copy on G_SELECT by fixing condition to GPR
Jessica Paquette [Tue, 23 Jul 2019 21:39:50 +0000 (21:39 +0000)]
[GlobalISel][AArch64] Save a copy on G_SELECT by fixing condition to GPR

The condition can never be fed by FPRs, so it should always be on a GPR.

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

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

5 years ago[ARM] Add opt-bisect support to ARMParallelDSP.
Eli Friedman [Tue, 23 Jul 2019 20:48:46 +0000 (20:48 +0000)]
[ARM] Add opt-bisect support to ARMParallelDSP.

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

5 years ago[Remarks] Introduce a new format: yaml-strtab
Francis Visoiu Mistrih [Tue, 23 Jul 2019 20:42:46 +0000 (20:42 +0000)]
[Remarks] Introduce a new format: yaml-strtab

This exposes better support to use a string table with a format through
an actual new remark::Format, called yaml-strtab.

This can now be used with -fsave-optimization-record=yaml-strtab.

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

5 years ago[Remarks][NFC] Move the YAML serializer to its own header
Francis Visoiu Mistrih [Tue, 23 Jul 2019 19:28:03 +0000 (19:28 +0000)]
[Remarks][NFC] Move the YAML serializer to its own header

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

5 years ago[PowerPC] Remove redundant load immediate instructions
Yi-Hong Lyu [Tue, 23 Jul 2019 19:11:07 +0000 (19:11 +0000)]
[PowerPC] Remove redundant load immediate instructions

Currently PowerPC backend emits code like this:

  r3 = li 0
  std r3, 264(r1)
  r3 = li 0
  std r3, 272(r1)

This patch fixes that and other cases where a register already contains a value that is loaded so we will get:

  r3 = li 0
  std r3, 264(r1)
  std r3, 272(r1)

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

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

5 years agogn build: Merge r366832
Nico Weber [Tue, 23 Jul 2019 19:02:47 +0000 (19:02 +0000)]
gn build: Merge r366832

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

5 years ago[X86] In lowerVectorShuffle, instead of creating a new node to canonicalize the shuff...
Craig Topper [Tue, 23 Jul 2019 18:46:15 +0000 (18:46 +0000)]
[X86] In lowerVectorShuffle, instead of creating a new node to canonicalize the shuffle mask by commuting, just commute the mask and swap V1/V2.

LegalizeDAG tries to legal the DAG by legalizing nodes before
their operands.

If we create a new node, we end up legalizing it after its operands.
This prevents some of the optimizations that can be done when the
operand is a build_vector since the build_vector will have been
legalized to something else.

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

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

5 years ago[Remarks] Add unit tests for YAML serialization
Francis Visoiu Mistrih [Tue, 23 Jul 2019 18:09:12 +0000 (18:09 +0000)]
[Remarks] Add unit tests for YAML serialization

Add tests for both the string table and non string table case.

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

5 years ago[IndVars] Fix a subtle bug in optimizeLoopExits
Philip Reames [Tue, 23 Jul 2019 17:45:11 +0000 (17:45 +0000)]
[IndVars] Fix a subtle bug in optimizeLoopExits

The original code failed to account for the fact that one exit can have a pointer exit count without all of them having pointer exit counts.  This could cause two separate bugs:
1) We might exit the loop early, and leave optimizations undone.  This is what triggered the assertion failure in the reported test case.
2) We might optimize one exit, then exit without indicating a change.  This could result in an analysis invalidaton bug if no other transform is done by the rest of indvars.

Note that the pointer exit counts are a really fragile concept.  They show up only when we have a pointer IV w/o a datalayout to provide their size.  It's really questionable to me whether the complexity implied is worth it.

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

5 years ago[IR][Verifier] Allow IntToPtrInst to be !dereferenceable
Ryan Taylor [Tue, 23 Jul 2019 17:19:56 +0000 (17:19 +0000)]
[IR][Verifier] Allow IntToPtrInst to be !dereferenceable

Summary:
Allow IntToPtrInst to carry !dereferenceable metadata tag.
This is valid since !dereferenceable can be only be applied to
pointer type values.

Change-Id: If8a6e3c616f073d51eaff52ab74535c29ed497b4

Subscribers: llvm-commits

Tags: #llvm

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

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

5 years ago[RISCV][NFC] Correct RUN in rvi-pseudos-invalid.s
Sam Elliott [Tue, 23 Jul 2019 17:14:42 +0000 (17:14 +0000)]
[RISCV][NFC] Correct RUN in rvi-pseudos-invalid.s

This test should test both riscv32 and riscv64.

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

5 years ago[CMake] Add -z defs on Solaris
Rainer Orth [Tue, 23 Jul 2019 16:27:34 +0000 (16:27 +0000)]
[CMake] Add -z defs on Solaris

Like other ELF targets, shared objects should be linked with -z defs on Solaris.

Tested on x86_64-pc-solaris2.11 and sparcv9-sun-solaris2.11.

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

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

5 years ago[GlobalISel][AArch64] Teach GISel to handle shifts in load addressing modes
Jessica Paquette [Tue, 23 Jul 2019 16:09:42 +0000 (16:09 +0000)]
[GlobalISel][AArch64] Teach GISel to handle shifts in load addressing modes

When we select the XRO variants of loads, we can pull in very specific shifts
(of the size of an element). E.g.

```
ldr x1, [x2, x3, lsl #3]
```

This teaches GISel to handle these when they're coming from shifts
specifically.

This adds a new addressing mode function, `selectAddrModeShiftedExtendXReg`
which recognizes this pattern.

This also packs this up with `selectAddrModeRegisterOffset` into
`selectAddrModeXRO`. This is intended to be equivalent to `selectAddrModeXRO`
in AArch64ISelDAGtoDAG.

Also update load-addressing-modes to show that all of the cases here work.

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

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

5 years ago[TargetLowering] SimplifyMultipleUseDemandedBits - add VECTOR_SHUFFLE support.
Simon Pilgrim [Tue, 23 Jul 2019 15:35:55 +0000 (15:35 +0000)]
[TargetLowering] SimplifyMultipleUseDemandedBits - add VECTOR_SHUFFLE support.

If all the demanded elts are from one operand and are inline, then we can use the operand directly.

The changes are mainly from SSE41 targets which has blendvpd but not cmpgtq, allowing the v2i64 comparison to be simplified as we only need the signbit from alternate v4i32 elements.

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

5 years agoRevert "[Object/ELF.h] - Improve testing of the fields in ELFFile<ELFT>::sections()."
Vlad Tsyrklevich [Tue, 23 Jul 2019 15:02:13 +0000 (15:02 +0000)]
Revert "[Object/ELF.h] - Improve testing of the fields in ELFFile<ELFT>::sections()."

This reverts commit r366796 because it was causing ubsan buildbot
failures.

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

5 years ago[llvm-ar] Fix support for archives with members larger than 4GB
Owen Reynolds [Tue, 23 Jul 2019 14:44:21 +0000 (14:44 +0000)]
[llvm-ar] Fix support for archives with members larger than 4GB

llvm-ar outputs a strange error message when handling archives with
members larger than 4GB due to not checking file size when passing the
value as an unsigned 32 bit integer. This overflow issue caused
malformed archives to be created.:

https://bugs.llvm.org/show_bug.cgi?id=38058

This change allows for members above 4GB and will error in a case that
is over the formats size limit, a 10 digit decimal integer.

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

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

5 years ago[ARM][LowOverheadLoops] Fix branch target codegen
Sam Parker [Tue, 23 Jul 2019 14:08:46 +0000 (14:08 +0000)]
[ARM][LowOverheadLoops] Fix branch target codegen

While lowering test.set.loop.iterations, it wasn't checked how the
brcond was using the result and so the wls could branch to the loop
preheader instead of not entering it. The same was true for
loop.decrement.reg.

So brcond and br_cc and now lowered manually when using the hwloop
intrinsics. During this we now check whether the result has been
negated and whether we're using SETEQ or SETNE and 0 or 1. We can
then figure out which basic block the WLS and LE should be targeting.

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

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

5 years agoFix MSVC warning about extending a uint32_t shift result to uint64_t. NFCI.
Simon Pilgrim [Tue, 23 Jul 2019 14:04:54 +0000 (14:04 +0000)]
Fix MSVC warning about extending a uint32_t shift result to uint64_t. NFCI.

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

5 years ago[SLPVectorizer] Revert local change that got accidently got committed in rL366799
Simon Pilgrim [Tue, 23 Jul 2019 13:42:01 +0000 (13:42 +0000)]
[SLPVectorizer] Revert local change that got accidently got committed in rL366799

This wasn't part of D63281

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

5 years agoRevert [RISCV] Re-enable rv32i-aliases-invalid.s test
Sam Elliott [Tue, 23 Jul 2019 13:30:56 +0000 (13:30 +0000)]
Revert [RISCV] Re-enable rv32i-aliases-invalid.s test

This reverts r366797 (git commit 53f9fec8e8b58f5a904bbfb4a1d648cde65aa860)

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

5 years ago[NFC][InstCombine] Fixup commutative/negative tests with icmp preds in @llvm.umul...
Roman Lebedev [Tue, 23 Jul 2019 12:42:57 +0000 (12:42 +0000)]
[NFC][InstCombine] Fixup commutative/negative tests with icmp preds in @llvm.umul.with.overflow tests

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

5 years ago[InstSimplify][NFC] Tests for skipping 'div-by-0' checks before inverted @llvm.umul...
Roman Lebedev [Tue, 23 Jul 2019 12:42:49 +0000 (12:42 +0000)]
[InstSimplify][NFC] Tests for skipping 'div-by-0' checks before inverted @llvm.umul.with.overflow

It would be already handled by the non-inverted case if we were hoisting
the `not` in InstCombine, but we don't (granted, we don't sink it
in this case either), so this is a separate case.

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

5 years ago[NFC][PhaseOredering][SimplifyCFG] Add more runlines to umul.with.overflow tests
Roman Lebedev [Tue, 23 Jul 2019 12:42:41 +0000 (12:42 +0000)]
[NFC][PhaseOredering][SimplifyCFG] Add more runlines to umul.with.overflow tests

This way it will be more obvious that the problem is both
in cost threshold and in hardcoded benefit check,
plus will show how the instsimplify cleans this all in the end.

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

5 years ago[TargetLowering] Add SimplifyMultipleUseDemandedBits
Simon Pilgrim [Tue, 23 Jul 2019 12:39:08 +0000 (12:39 +0000)]
[TargetLowering] Add SimplifyMultipleUseDemandedBits

This patch introduces the DAG version of SimplifyMultipleUseDemandedBits, which attempts to peek through ops (mainly and/or/xor so far) that don't contribute to the demandedbits/elts of a node - which means we can do this even in cases where we have multiple uses of an op, which normally requires us to demanded all bits/elts. The intention is to remove a similar instruction - SelectionDAG::GetDemandedBits - once SimplifyMultipleUseDemandedBits has matured.

The InstCombine version of SimplifyMultipleUseDemandedBits can constant fold which I haven't added here yet, and so far I've only wired this up to some basic binops (and/or/xor/add/sub/mul) to demonstrate its use.

We do see a couple of regressions that need to be addressed:

    AMDGPU unsigned dot product codegen retains an AND mask (for ZERO_EXTEND) that it previously removed (but otherwise the dotproduct codegen is a lot better).

    X86/AVX2 has poor handling of vector ANY_EXTEND/ANY_EXTEND_VECTOR_INREG - it prematurely gets converted to ZERO_EXTEND_VECTOR_INREG.

The code owners have confirmed its ok for these cases to fixed up in future patches.

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

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

5 years ago[RISCV] Re-enable rv32i-aliases-invalid.s test
Sam Elliott [Tue, 23 Jul 2019 11:40:55 +0000 (11:40 +0000)]
[RISCV] Re-enable rv32i-aliases-invalid.s test

We were getting test failures on some builders, which pointed to @LINE
being an undefined variable. I think that these failures should have
been fixed by https://reviews.llvm.org/rL366434, so I'm re-enabling the
test.

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

5 years ago[Object/ELF.h] - Improve testing of the fields in ELFFile<ELFT>::sections().
George Rimar [Tue, 23 Jul 2019 11:37:14 +0000 (11:37 +0000)]
[Object/ELF.h] - Improve testing of the fields in ELFFile<ELFT>::sections().

This eliminates a one error untested and
also introduces a error for one more possible case
which lead to crash previously.

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

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

5 years ago[yaml2obj] - Add a support for defining null sections in YAMLs.
George Rimar [Tue, 23 Jul 2019 11:03:37 +0000 (11:03 +0000)]
[yaml2obj] - Add a support for defining null sections in YAMLs.

ELF spec shows (Figure 4-10: Section Header Table Entry:Index 0,
http://www.sco.com/developers/gabi/latest/ch4.sheader.html)
that section header at index 0 (null section) can have sh_size and
sh_link fields set to non-zero values.

It says (https://docs.oracle.com/cd/E19683-01/817-3677/6mj8mbtc9/index.html):

"If the number of sections is greater than or equal to SHN_LORESERVE (0xff00),
this member has the value zero and the actual number of section header table
entries is contained in the sh_size field of the section header at index 0.
Otherwise, the sh_size member of the initial entry contains 0."

and:

"If the section name string table section index is greater than or equal to SHN_LORESERVE
(0xff00), this member has the value SHN_XINDEX (0xffff) and the actual index of the section
name string table section is contained in the sh_link field of the section header at index 0.
Otherwise, the sh_link member of the initial entry contains 0."

At this moment it is not possible to create custom section headers at index 0 using yaml2obj.

This patch implements this.

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

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

5 years ago[SLPVectorizer] Remove null-pointer test. NFCI.
Simon Pilgrim [Tue, 23 Jul 2019 10:51:43 +0000 (10:51 +0000)]
[SLPVectorizer] Remove null-pointer test. NFCI.

cast<CallInst> shouldn't return null and we dereference the pointer in a lot of other places, causing both MSVC + cppcheck to warn about dereferenced null pointers

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

5 years ago[ARM] Rename NEONModImm to VMOVModImm. NFC
David Green [Tue, 23 Jul 2019 09:19:24 +0000 (09:19 +0000)]
[ARM] Rename NEONModImm to VMOVModImm. NFC

Rename NEONModImm to VMOVModImm as it is used in both NEON and MVE.

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

5 years ago[Attributor][NFC] Re-run clang-format on the Attributor.cpp
Hideto Ueno [Tue, 23 Jul 2019 08:29:22 +0000 (08:29 +0000)]
[Attributor][NFC] Re-run clang-format on the Attributor.cpp

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

5 years ago[Attributor] Deduce "dereferenceable" attribute
Hideto Ueno [Tue, 23 Jul 2019 08:16:17 +0000 (08:16 +0000)]
[Attributor] Deduce "dereferenceable" attribute

Summary:
Deduce dereferenceable attribute in Attributor.

These will be added in a later patch.
* dereferenceable(_or_null)_globally (D61652)
* Deduction based on load instruction (similar to D64258)

Reviewers: jdoerfert, sstefan1

Reviewed By: jdoerfert

Subscribers: hiraditya, jfb, llvm-commits

Tags: #llvm

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

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

5 years ago[llvm-objcopy] Allow strip symtab in executables and DSOs
Eugene Leviant [Tue, 23 Jul 2019 08:03:30 +0000 (08:03 +0000)]
[llvm-objcopy] Allow strip symtab in executables and DSOs

Re-commit of the patch after addressing -Wl,--emit-relocs case.
Differential revision: https://reviews.llvm.org/D61672

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