platform/upstream/llvm.git
5 years ago[DebugInfo] GSYM cleanups after D63104/r364427
Fangrui Song [Fri, 28 Jun 2019 08:58:05 +0000 (08:58 +0000)]
[DebugInfo] GSYM cleanups after D63104/r364427

llvm-svn: 364634

5 years ago[ARM] MVE loads and stores
David Green [Fri, 28 Jun 2019 08:41:40 +0000 (08:41 +0000)]
[ARM] MVE loads and stores

This fills in the gaps for basic MVE loads and stores, allowing unaligned
access and adding far too many tests. These will become important as
narrowing/expanding and pre/post inc are added. Big endian might still not be
handled very well, because we have not yet added bitcasts (and I'm not sure how
we want it to work yet). I've included the alignment code anyway which maps
with our current patterns. We plan to return to that later.

Code written by Simon Tatham, with additional tests from Me and Mikhail Maltsev.

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

llvm-svn: 364633

5 years ago[AVR] Don't look for the TargetFrameLowering in the FrameLowering implementation
Dylan McKay [Fri, 28 Jun 2019 08:35:21 +0000 (08:35 +0000)]
[AVR] Don't look for the TargetFrameLowering in the FrameLowering implementation

c.f. r364349

llvm-svn: 364632

5 years ago[ARM] Mark div and rem as expand for MVE
David Green [Fri, 28 Jun 2019 08:18:55 +0000 (08:18 +0000)]
[ARM] Mark div and rem as expand for MVE

We don't have vector operations for these, so they need to be expanded for both
integer and float.

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

llvm-svn: 364631

5 years ago[CTU] Add missing statistics
Gabor Marton [Fri, 28 Jun 2019 08:08:51 +0000 (08:08 +0000)]
[CTU] Add missing statistics

Reviewers: xazax.hun

Subscribers: rnkovacs, dkrupp, Szelethus, gamesh411, cfe-commits

Tags: #clang

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

llvm-svn: 364630

5 years ago[ARM] Select MVE fp add and sub
David Green [Fri, 28 Jun 2019 07:41:09 +0000 (07:41 +0000)]
[ARM] Select MVE fp add and sub

The same as integer arithmetic, we can add simple floating point MVE addition and
subtraction patterns.

Initial code by David Sherwood

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

llvm-svn: 364629

5 years ago[HardwareLoops] Loop counter guard intrinsic
Sam Parker [Fri, 28 Jun 2019 07:38:16 +0000 (07:38 +0000)]
[HardwareLoops] Loop counter guard intrinsic

Introduce llvm.test.set.loop.iterations which sets the loop counter
and also produces an i1 after testing that the count is not zero.

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

llvm-svn: 364628

5 years ago[ARM] Select MVE add and sub
David Green [Fri, 28 Jun 2019 07:21:11 +0000 (07:21 +0000)]
[ARM] Select MVE add and sub

This adds the first few patterns for MVE code generation, adding simple integer
add and sub patterns.

Initial code by David Sherwood

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

llvm-svn: 364627

5 years ago[ARM] MVE vector shuffles
David Green [Fri, 28 Jun 2019 07:08:42 +0000 (07:08 +0000)]
[ARM] MVE vector shuffles

This patch adds necessary shuffle vector and buildvector support for ARM MVE.
It essentially adds support for VDUP, VREVs and some VMOVs, which are often
required by other code (like upcoming patches).

This mostly uses the same code from Neon that already generated
NEONvdup/NEONvduplane/NEONvrev's. These have been renamed to ARMvdup/etc and
moved to ARMInstrInfo as they are common to both architectures. Most of the
selection code seems to be applicable to both, but NEON does have some more
instructions making some parts specific.

Most code originally by David Sherwood.

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

llvm-svn: 364626

5 years ago[X86] Connect the output chain properly when combining vzext_movl+load into vzext_load.
Craig Topper [Fri, 28 Jun 2019 06:58:50 +0000 (06:58 +0000)]
[X86] Connect the output chain properly when combining vzext_movl+load into vzext_load.

llvm-svn: 364625

5 years agoSilence gcc warning in testcase [NFC]
Mikael Holmen [Fri, 28 Jun 2019 06:45:20 +0000 (06:45 +0000)]
Silence gcc warning in testcase [NFC]

Without the fix gcc (7.4.0) complains with

../unittests/ADT/APIntTest.cpp: In member function 'virtual void {anonymous}::APIntTest_MultiplicativeInverseExaustive_Test::TestBody()':
../unittests/ADT/APIntTest.cpp:2510:36: error: comparison between signed and unsigned integer expressions [-Werror=sign-compare]
     for (unsigned Value = 0; Value < (1 << BitWidth); ++Value) {
                              ~~~~~~^~~~~~~~~~~~~~~~~

llvm-svn: 364624

5 years ago[X86] Remove some duplicate patterns that already exist as part of their instruction...
Craig Topper [Fri, 28 Jun 2019 05:03:47 +0000 (05:03 +0000)]
[X86] Remove some duplicate patterns that already exist as part of their instruction definition. NFC

llvm-svn: 364623

5 years ago[Support] Fix add fs::getUmask() patch
Alex Brachet [Fri, 28 Jun 2019 04:07:13 +0000 (04:07 +0000)]
[Support] Fix add fs::getUmask() patch

llvm-svn: 364622

5 years ago[Support] Add fs::getUmask() function and change fs::setPermissions
Alex Brachet [Fri, 28 Jun 2019 03:21:00 +0000 (03:21 +0000)]
[Support] Add fs::getUmask() function and change fs::setPermissions

Summary: This patch changes fs::setPermissions to optionally set permissions while respecting the umask. It also adds the function fs::getUmask() which returns the current umask.

Reviewers: jhenderson, rupprecht, aprantl, lhames

Reviewed By: jhenderson, rupprecht

Subscribers: sanaanajjar231288, hiraditya, llvm-commits

Tags: #llvm

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

llvm-svn: 364621

5 years ago[NFC][PowerPC] Move XS*QP series instruction apart from XS*QPO series in position...
Zi Xuan Wu [Fri, 28 Jun 2019 02:51:03 +0000 (02:51 +0000)]
[NFC][PowerPC] Move XS*QP series instruction apart from XS*QPO series in position of td file

llvm-svn: 364620

5 years ago[AMDGPU] Packed thread ids in function call ABI
Stanislav Mekhanoshin [Fri, 28 Jun 2019 01:52:13 +0000 (01:52 +0000)]
[AMDGPU] Packed thread ids in function call ABI

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

llvm-svn: 364619

5 years agoGlobalISel: Use Register
Matt Arsenault [Fri, 28 Jun 2019 01:47:44 +0000 (01:47 +0000)]
GlobalISel: Use Register

llvm-svn: 364618

5 years ago[PowerPC][NFC] Use `|=` to update `Simplified` flag
Kai Luo [Fri, 28 Jun 2019 01:38:42 +0000 (01:38 +0000)]
[PowerPC][NFC] Use `|=` to update `Simplified` flag

llvm-svn: 364617

5 years agoAMDGPU/GlobalISel: Convert to using Register
Matt Arsenault [Fri, 28 Jun 2019 01:16:46 +0000 (01:16 +0000)]
AMDGPU/GlobalISel: Convert to using Register

llvm-svn: 364616

5 years agoGlobalISel: Convert rest of MachineIRBuilder to using Register
Matt Arsenault [Fri, 28 Jun 2019 01:16:41 +0000 (01:16 +0000)]
GlobalISel: Convert rest of MachineIRBuilder to using Register

llvm-svn: 364615

5 years agoFixing a couple of wrong logical operator bugs.
Ali Tamur [Fri, 28 Jun 2019 00:11:26 +0000 (00:11 +0000)]
Fixing a couple of wrong logical operator bugs.

llvm-svn: 364614

5 years ago[GlobalISel][IRTranslator] Fix some PHI bugs related to jump tables when optimization...
Amara Emerson [Thu, 27 Jun 2019 23:56:34 +0000 (23:56 +0000)]
[GlobalISel][IRTranslator] Fix some PHI bugs related to jump tables when optimizations are used.

The new switch lowering code that tries to generate jump tables and range checks
were tested at -O0 on arm64, but on -O3 the generic switch lowering code goes to
town on trying to generate optimized lowerings, e.g. multiple jump tables, range
checks etc. This exposed bugs in the way PHI nodes are handled because the CFG
looks even stranger after all of this is done.

llvm-svn: 364613

5 years ago[InlineCost] make InlineCost assignable
Fedor Sergeev [Thu, 27 Jun 2019 23:41:03 +0000 (23:41 +0000)]
[InlineCost] make InlineCost assignable

Summary:
Current InlineCost is not assignable because of const members Cost and Threshold.
I dont see practical benefits from having them const (access to these members is
private and internal interactions are rather simple). On other hand that makes
it hard to use as a member in some other data structure where assignability is necessary.

I'm going to use InlineCost in a downstream inliner that maintains a complex queue
of candidate call-sites and thus keeping and recalculating InlineCost is necessary.

This patch just removes 'const' from both members, making InlineCost assignable.

Reviewers: eraman, greened, chandlerc, yrouban, apilipenko
Reviewed By: apilipenko
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D63823

llvm-svn: 364612

5 years agoFix ASAN error caused by commit r364512.
Rumeet Dhindsa [Thu, 27 Jun 2019 23:37:04 +0000 (23:37 +0000)]
Fix ASAN error caused by commit r364512.

This patch intends to fix ASAN stack-use-after-scope error.
This is at least a short-term fix to unbreak LLVM's mainline.

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

llvm-svn: 364611

5 years ago[LangRef] Clarify codegen expectations for intrinsics with fp/integer-only overloads.
Amara Emerson [Thu, 27 Jun 2019 23:33:05 +0000 (23:33 +0000)]
[LangRef] Clarify codegen expectations for intrinsics with fp/integer-only overloads.

This change is a result of discussions on list: "GlobalISel: Ambiguous intrinsic semantics problem"

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

llvm-svn: 364610

5 years agohwasan: Fix an off-by-one error in PrintTagsAroundAddr.
Peter Collingbourne [Thu, 27 Jun 2019 23:24:36 +0000 (23:24 +0000)]
hwasan: Fix an off-by-one error in PrintTagsAroundAddr.

Previously we were printing 16 rows of tags, not 17.

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

llvm-svn: 364609

5 years agohwasan: Use llvm.read_register intrinsic to read the PC on aarch64 instead of taking...
Peter Collingbourne [Thu, 27 Jun 2019 23:24:07 +0000 (23:24 +0000)]
hwasan: Use llvm.read_register intrinsic to read the PC on aarch64 instead of taking the function's address.

This shaves an instruction (and a GOT entry in PIC code) off prologues of
functions with stack variables.

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

llvm-svn: 364608

5 years agohwasan: Teach the runtime to identify the local variable being accessed in UAR reports.
Peter Collingbourne [Thu, 27 Jun 2019 23:16:13 +0000 (23:16 +0000)]
hwasan: Teach the runtime to identify the local variable being accessed in UAR reports.

Each function's PC is recorded in the ring buffer. From there we can access
the function's local variables and reconstruct the tag of each one with the
help of the information printed by llvm-symbolizer's new FRAME command. We
can then find the variable that was likely being accessed by matching the
pointer's tag against the reconstructed tag.

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

llvm-svn: 364607

5 years agoRevert "[JITLink][MachO/x86-64] Add a testcase for X86_64_RELOC_GOT."
Lang Hames [Thu, 27 Jun 2019 23:00:30 +0000 (23:00 +0000)]
Revert "[JITLink][MachO/x86-64] Add a testcase for X86_64_RELOC_GOT."

Reverts commit r364600 while I investigate bot failures.

llvm-svn: 364606

5 years ago[analyzer] Fix clang-tidy crash on GCCAsmStmt
Nathan Huckleberry [Thu, 27 Jun 2019 22:46:40 +0000 (22:46 +0000)]
[analyzer] Fix clang-tidy crash on GCCAsmStmt

Summary:
Added entry in switch statement to recognize GCCAsmStmt
as a possible block terminator.

Handling to build CFG using GCCAsmStmt was already implemented.

Reviewers: nickdesaulniers, george.karpenkov, NoQ

Reviewed By: nickdesaulniers, NoQ

Subscribers: xbolva00, tmroeder, xazax.hun, baloghadamsoftware, szepet, a.sidorin, mikhail.ramalho, Szelethus, donat.nagy, dkrupp, Charusso, cfe-commits

Tags: #clang

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

llvm-svn: 364605

5 years ago[CodeGen] [SelectionDAG] More efficient code for X % C == 0 (UREM case) (try 3)
Roman Lebedev [Thu, 27 Jun 2019 21:52:10 +0000 (21:52 +0000)]
[CodeGen] [SelectionDAG] More efficient code for X % C == 0 (UREM case) (try 3)

Summary:
I'm submitting a new revision since i don't understand how to reclaim/reopen/take over the existing one, D50222.
There is no such action in "Add Action" menu...

This implements an optimization described in Hacker's Delight 10-17: when `C` is constant,
the result of `X % C == 0` can be computed more cheaply without actually calculating the remainder.
The motivation is discussed here: https://bugs.llvm.org/show_bug.cgi?id=35479.

This is a recommit, the original commit rL364563 was reverted in rL364568
because test-suite detected miscompile - the new comparison constant 'Q'
was being computed incorrectly (we divided by `D0` instead of `D`).

Original patch D50222 by @hermord (Dmytro Shynkevych)

Notes:
- In principle, it's possible to also handle the `X % C1 == C2` case, as discussed on bugzilla.
  This seems to require an extra branch on overflow, so I refrained from implementing this for now.
- An explicit check for when the `REM` can be reduced to just its LHS is included:
  the `X % C` == 0 optimization breaks `test1` in `test/CodeGen/X86/jump_sign.ll` otherwise.
  I hadn't managed to find a better way to not generate worse output in this case.
- The `test/CodeGen/X86/jump_sign.ll` regresses, and is being fixed by a followup patch D63390.

Reviewers: RKSimon, craig.topper, spatel, hermord, xbolva00

Reviewed By: RKSimon, xbolva00

Subscribers: dexonsmith, kristina, xbolva00, javed.absar, llvm-commits, hermord

Tags: #llvm

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

llvm-svn: 364600

5 years ago[NFC][APInt] Add (exhaustive) test for multiplicativeInverse()
Roman Lebedev [Thu, 27 Jun 2019 21:51:54 +0000 (21:51 +0000)]
[NFC][APInt] Add (exhaustive) test for multiplicativeInverse()

Else there is no direct test coverage at all.
The function should either return '0' or precise answer.

llvm-svn: 364599

5 years ago[JITLink][MachO/x86-64] Add a testcase for X86_64_RELOC_GOT.
Lang Hames [Thu, 27 Jun 2019 21:50:29 +0000 (21:50 +0000)]
[JITLink][MachO/x86-64] Add a testcase for X86_64_RELOC_GOT.

This is the data-section counterpart to X86_64_RELOC_GOTPCREL.

llvm-svn: 364598

5 years ago[NFC][GVNSink] Pre-commit unary FNeg test to fpmath.ll
Cameron McInally [Thu, 27 Jun 2019 21:23:07 +0000 (21:23 +0000)]
[NFC][GVNSink] Pre-commit unary FNeg test to fpmath.ll

llvm-svn: 364597

5 years ago[WebAssembly] Enable an atomic.notify MC test
Heejin Ahn [Thu, 27 Jun 2019 21:22:04 +0000 (21:22 +0000)]
[WebAssembly] Enable an atomic.notify MC test

Summary:
Assembly of atomic.notify has been fixed in r364576, so we can enable
it.

Reviewers: aardappel

Subscribers: dschuff, sbc100, jgravelle-google, sunfish, jfb, llvm-commits

Tags: #llvm

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

llvm-svn: 364596

5 years agoPattern match struct types in test case.
Akira Hatanaka [Thu, 27 Jun 2019 21:16:19 +0000 (21:16 +0000)]
Pattern match struct types in test case.

This simplifies the test cases in a patch I'm planning to send later.

llvm-svn: 364595

5 years ago[libFuzzer] Migrate to the new exception syscalls on Fuchsia
Petr Hosek [Thu, 27 Jun 2019 21:13:06 +0000 (21:13 +0000)]
[libFuzzer] Migrate to the new exception syscalls on Fuchsia

This is part of the transition to the new Fuchsia exception syscalls
signature.

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

llvm-svn: 364594

5 years ago[sanitizer_common] Switch from zx_clock_get_new to zx_clock_get
Petr Hosek [Thu, 27 Jun 2019 21:13:05 +0000 (21:13 +0000)]
[sanitizer_common] Switch from zx_clock_get_new to zx_clock_get

This is part of the soft-transition to the new system call name.
These two system calls are the same so this change is no-op.

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

llvm-svn: 364593

5 years ago[GVN] Add support for unary FNeg to GVN pass
Cameron McInally [Thu, 27 Jun 2019 21:05:02 +0000 (21:05 +0000)]
[GVN] Add support for unary FNeg to GVN pass

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

llvm-svn: 364592

5 years ago[compiler-rt] Rename lit.*.cfg.* -> lit.*.cfg.py.*
Reid Kleckner [Thu, 27 Jun 2019 20:56:04 +0000 (20:56 +0000)]
[compiler-rt] Rename lit.*.cfg.* -> lit.*.cfg.py.*

These lit configuration files are really Python source code. Using the
.py file extension helps editors and tools use the correct language
mode. LLVM and Clang already use this convention for lit configuration,
this change simply applies it to all of compiler-rt.

Reviewers: vitalybuka, dberris

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

llvm-svn: 364591

5 years agoConvert line endings to LF.
Alexandre Ganea [Thu, 27 Jun 2019 20:46:11 +0000 (20:46 +0000)]
Convert line endings to LF.

llvm-svn: 364590

5 years agoMake nrvo-string test more robust.
Adrian Prantl [Thu, 27 Jun 2019 20:38:37 +0000 (20:38 +0000)]
Make nrvo-string test more robust.

This is a follow-up to r364466, but better implemented. Original
commit message still applies:

    The breakpoint locations were in places where clang doesn't actually
    emit a source location for and depend on the debugger's ability to
    move the breakpoint forward onto a line that is already in the
    function epilogue. In my testing older versions of LLDB fail to do
    that, so I'm modifying the test to force a break-able location by
    calling a noinline function.

    <rdar://problem/52079841>

llvm-svn: 364589

5 years ago[x86] remove whitespace; NFC
Sanjay Patel [Thu, 27 Jun 2019 20:37:12 +0000 (20:37 +0000)]
[x86] remove whitespace; NFC

llvm-svn: 364588

5 years ago[NFC][GVN] Pre-commit unary FNeg tests to fpmath.ll
Cameron McInally [Thu, 27 Jun 2019 20:33:44 +0000 (20:33 +0000)]
[NFC][GVN] Pre-commit unary FNeg tests to fpmath.ll

llvm-svn: 364587

5 years ago[libcxxabi] Use an explicit list to export symbols from the dylib
Louis Dionne [Thu, 27 Jun 2019 20:17:22 +0000 (20:17 +0000)]
[libcxxabi] Use an explicit list to export symbols from the dylib

Reviewers: EricWF

Subscribers: mgorny, christof, jkorous, dexonsmith, libcxx-commits

Tags: #libc

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

llvm-svn: 364586

5 years ago[x86] prevent crashing from select narrowing with AVX512
Sanjay Patel [Thu, 27 Jun 2019 20:16:58 +0000 (20:16 +0000)]
[x86] prevent crashing from select narrowing with AVX512

llvm-svn: 364585

5 years ago[GN] Update build file
Vitaly Buka [Thu, 27 Jun 2019 19:55:22 +0000 (19:55 +0000)]
[GN] Update build file

llvm-svn: 364583

5 years ago[GN] Set exit code to 1 if changes are needed
Vitaly Buka [Thu, 27 Jun 2019 19:55:21 +0000 (19:55 +0000)]
[GN] Set exit code to 1 if changes are needed

llvm-svn: 364582

5 years ago[PowerPC][NFC] Remove unused (and unsupported) fusion feature bits.
Jinsong Ji [Thu, 27 Jun 2019 19:35:11 +0000 (19:35 +0000)]
[PowerPC][NFC] Remove unused (and unsupported) fusion feature bits.

FeatureFusion bits was first introduced in
https://reviews.llvm.org/rL253724. for add/load integer fusion for P8.
The only use of `hasFusion` was https://reviews.llvm.org/rL255319.

However, this was removed later in https://reviews.llvm.org/rL280440.

So, there is NO any reference to fusion in code now.

Leaving it there is misleading and confusing, so remove it for now.
We can alwasy add back if we ever support fusion in the future.

llvm-svn: 364581

5 years agoUse "willreturn" in isGuaranteedToTransferExecutionToSuccessor
Johannes Doerfert [Thu, 27 Jun 2019 19:29:48 +0000 (19:29 +0000)]
Use "willreturn" in isGuaranteedToTransferExecutionToSuccessor

The `willreturn` function attribute guarantees that a function call will
come back to the call site if the call is also known not to throw.
Therefore, this attribute can be used in
`isGuaranteedToTransferExecutionToSuccessor`.

Patch by Hideto Ueno (@uenoku)

Reviewers: jdoerfert, sstefan1

Reviewed By: jdoerfert

Subscribers: hiraditya, jfb, llvm-commits

Tags: #llvm

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

llvm-svn: 364580

5 years agoUpdate -analyze -scalar-evolution output for multiple exit loops w/computable exit...
Philip Reames [Thu, 27 Jun 2019 19:22:43 +0000 (19:22 +0000)]
Update -analyze -scalar-evolution output for multiple exit loops w/computable exit values

The previous output was next to useless if *any* exit was not computable.  If we have more than one exit, show the exit count for each so that it's easier to see what's going from with SCEV analysis when debugging.

llvm-svn: 364579

5 years ago[NFC][CodeGen] Add negative test for X u% C == 0 fold (D63391)
Roman Lebedev [Thu, 27 Jun 2019 19:09:51 +0000 (19:09 +0000)]
[NFC][CodeGen] Add negative test for X u% C == 0 fold (D63391)

The fold (D63391) uses multiplicativeInverse(),
but it is not guaranteed to always succeed,
and '100' appears to be one of the problematic values.

llvm-svn: 364578

5 years agoCorrect the file path. NFC.
Michael Liao [Thu, 27 Jun 2019 19:05:46 +0000 (19:05 +0000)]
Correct the file path. NFC.

llvm-svn: 364577

5 years ago[WebAssembly] AsmParser: better atomic inst detection
Wouter van Oortmerssen [Thu, 27 Jun 2019 18:58:26 +0000 (18:58 +0000)]
[WebAssembly] AsmParser: better atomic inst detection

Summary:
Previously missed atomic.notify.

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

Reviewers: aheejin

Subscribers: sbc100, jgravelle-google, sunfish, jfb, llvm-commits, dschuff

Tags: #llvm

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

llvm-svn: 364576

5 years ago[OPENMP]Generate correctly implicit flags for mapped data.
Alexey Bataev [Thu, 27 Jun 2019 18:53:07 +0000 (18:53 +0000)]
[OPENMP]Generate correctly implicit flags for mapped data.

Implicit flag must not be emitted for explicitly specified firstprivate
variables, but for implicitly captured sizes of the VLAs.

llvm-svn: 364575

5 years agoAdd a missing '__uncvref_t' to the SFINAE constraints for optional's assignment opera...
Marshall Clow [Thu, 27 Jun 2019 18:40:55 +0000 (18:40 +0000)]
Add a missing '__uncvref_t' to the SFINAE constraints for optional's assignment operator. Fixes PR38638. Thanks to Jonathan Wakely for the report

llvm-svn: 364574

5 years ago[llvm-objdump] Update the doc for --disassemble-functions.
Yuanfang Chen [Thu, 27 Jun 2019 18:39:34 +0000 (18:39 +0000)]
[llvm-objdump] Update the doc for --disassemble-functions.

Update the doc after llvm-svn: 364121 is landed.
With two more trivial fixes that are not related to
--disassemble-functions but still about llvm-objdump.

Reviewers: jhenderson, grimar, MaskRay, rupprecht, peter.smith

Reviewed by: jhenderson, MaskRay

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

llvm-svn: 364573

5 years ago[OPENMP][NVPTX]Relax flush directive.
Alexey Bataev [Thu, 27 Jun 2019 18:33:09 +0000 (18:33 +0000)]
[OPENMP][NVPTX]Relax flush directive.

Summary:
According to the OpenMP standard, flush  makes a thread’s temporary view of memory consistent with memory and enforces an order on the memory operations of the variables explicitly specified or implied.

According to the Cuda toolkit documentation (https://docs.nvidia.com/cuda/archive/8.0/cuda-c-programming-guide/index.html#memory-fence-functions), __threadfence() functions provides required functionality.

__threadfence_system() also provides required functionality, but it also
includes some extra functionality, like synchronization of page-locked
host memory, synchronization for the host, etc. It is not required per
the standard and we can use more relaxed version of memory fence
operation.

Reviewers: grokos, gtbercea, kkwli0

Subscribers: guansong, jfb, jdoerfert, openmp-commits, caomhin

Tags: #openmp

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

llvm-svn: 364572

5 years agoRevert "[LiveDebugValues] Emit the debug entry values"
Djordje Todorovic [Thu, 27 Jun 2019 18:12:04 +0000 (18:12 +0000)]
Revert "[LiveDebugValues] Emit the debug entry values"

Appears that the 'test/DebugInfo/MIR/X86/dbginfo-entryvals.mir'
does not pass on Windows.

This reverts commit rL364553.

llvm-svn: 364571

5 years ago[WebAssembly] Fix p2align in assembler.
Wouter van Oortmerssen [Thu, 27 Jun 2019 18:11:15 +0000 (18:11 +0000)]
[WebAssembly] Fix p2align in assembler.

Summary:
- Match the syntax output by InstPrinter.
- Fix it always emitting 0 for align. Had to work around fact that
  opcode is not available for GetDefaultP2Align while parsing.
- Updated tests that were erroneously happy with a p2align=0

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

Reviewers: aheejin, sbc100

Subscribers: jgravelle-google, sunfish, jfb, llvm-commits, dschuff

Tags: #llvm

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

llvm-svn: 364570

5 years ago[X86] combineX86ShufflesRecursively - merge shuffles with more than 2 inputs
Simon Pilgrim [Thu, 27 Jun 2019 17:30:51 +0000 (17:30 +0000)]
[X86] combineX86ShufflesRecursively - merge shuffles with more than 2 inputs

We already had the infrastructure for this, but were waiting for the fix for a number of regressions which were handled by the recent shuffle(extract_subvector(),extract_subvector()) -> extract_subvector(shuffle()) shuffle combines

llvm-svn: 364569

5 years agoRevert "[CodeGen] [SelectionDAG] More efficient code for X % C == 0 (UREM case) ...
Roman Lebedev [Thu, 27 Jun 2019 17:22:31 +0000 (17:22 +0000)]
Revert "[CodeGen] [SelectionDAG] More efficient code for X % C == 0 (UREM case) (try 2)"

*Appears* to break test-suite on
http://lab.llvm.org:8011/builders/clang-cmake-x86_64-sde-avx512-linux/builds/23790

FAIL: burg.execution_time
FAIL: spiff.execution_time
FAIL: employ.execution_time
FAIL: llu.execution_time
FAIL: gramschmidt.execution_time
FAIL: fdtd-apml.execution_time

This reverts commit r364563.

llvm-svn: 364568

5 years agoFix lld build on Windows with MSVC due to C2461
Michael Liao [Thu, 27 Jun 2019 17:19:28 +0000 (17:19 +0000)]
Fix lld build on Windows with MSVC due to C2461

- It seems the same name of class and one of its fields confuses MSVC,
  https://docs.microsoft.com/en-us/cpp/error-messages/compiler-errors-1/compiler-error-c2461?view=vs-2019
- Patch from Andryeyev, German <german.andryeyev@amd.com>

llvm-svn: 364567

5 years agoAMDGPU: Make fixing i1 copies robust against re-ordering
Nicolai Haehnle [Thu, 27 Jun 2019 16:56:44 +0000 (16:56 +0000)]
AMDGPU: Make fixing i1 copies robust against re-ordering

Summary:
The new test case led to incorrect code.

Change-Id: Ief48b227e97aa662dd3535c9bafb27d4a184efca

Reviewers: arsenm, david-salinas

Subscribers: kzhuravl, jvesely, wdng, yaxunl, dstuttard, tpr, t-tye, llvm-commits

Tags: #llvm

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

llvm-svn: 364566

5 years ago[ARM] Move low overhead loop codegen tests into a separate file. NFC
David Green [Thu, 27 Jun 2019 16:56:41 +0000 (16:56 +0000)]
[ARM] Move low overhead loop codegen tests into a separate file. NFC

llvm-svn: 364565

5 years agoUse getConstantOperandAPInt instead of getConstantOperandVal for comparisons.
Simon Pilgrim [Thu, 27 Jun 2019 16:46:00 +0000 (16:46 +0000)]
Use getConstantOperandAPInt instead of getConstantOperandVal for comparisons.

getConstantOperandAPInt avoids any large integer issues - these are unlikely but the fuzzers do like to mess around.....

llvm-svn: 364564

5 years ago[CodeGen] [SelectionDAG] More efficient code for X % C == 0 (UREM case) (try 2)
Roman Lebedev [Thu, 27 Jun 2019 16:45:42 +0000 (16:45 +0000)]
[CodeGen] [SelectionDAG] More efficient code for X % C == 0 (UREM case) (try 2)

Summary:
I'm submitting a new revision since i don't understand how to reclaim/reopen/take over the existing one, D50222.
There is no such action in "Add Action" menu...
Original patch D50222 by @hermord (Dmytro Shynkevych)

This implements an optimization described in Hacker's Delight 10-17: when `C` is constant,
the result of `X % C == 0` can be computed more cheaply without actually calculating the remainder.
The motivation is discussed here: https://bugs.llvm.org/show_bug.cgi?id=35479.

Original patch author: @hermord (Dmytro Shynkevych)!

Notes:
- In principle, it's possible to also handle the `X % C1 == C2` case, as discussed on bugzilla.
  This seems to require an extra branch on overflow, so I refrained from implementing this for now.
- An explicit check for when the `REM` can be reduced to just its LHS is included:
  the `X % C` == 0 optimization breaks `test1` in `test/CodeGen/X86/jump_sign.ll` otherwise.
  I hadn't managed to find a better way to not generate worse output in this case.
- The `test/CodeGen/X86/jump_sign.ll` regresses, and is being fixed by a followup patch D63390.

Reviewers: RKSimon, craig.topper, spatel, hermord, xbolva00

Reviewed By: RKSimon, xbolva00

Subscribers: xbolva00, javed.absar, llvm-commits, hermord

Tags: #llvm

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

llvm-svn: 364563

5 years agoAdd a sanity check to the domain socket tests.
Adrian Prantl [Thu, 27 Jun 2019 16:45:23 +0000 (16:45 +0000)]
Add a sanity check to the domain socket tests.

rdar://problem/52062631

llvm-svn: 364562

5 years ago[X86] getTargetVShiftByConstNode - reduce variable scope. NFCI.
Simon Pilgrim [Thu, 27 Jun 2019 16:33:44 +0000 (16:33 +0000)]
[X86] getTargetVShiftByConstNode - reduce variable scope. NFCI.

Fixes cppcheck warning.

llvm-svn: 364561

5 years ago[ARM] Fix formatting issue in ARMISelLowering.cpp
Sam Tebbs [Thu, 27 Jun 2019 16:28:28 +0000 (16:28 +0000)]
[ARM] Fix formatting issue in ARMISelLowering.cpp

Fix a formatting error in ARMISelLowering.cpp::Expand64BitShift. My test
commit after receiving write access.

llvm-svn: 364560

5 years ago[llvm-nm] Fix for BZ41711 - Class character for a symbol with undefined
Chris Jackson [Thu, 27 Jun 2019 16:27:53 +0000 (16:27 +0000)]
[llvm-nm] Fix for BZ41711 - Class character for a symbol with undefined
          binding does not match class assigned by GNU nm

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

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

llvm-svn: 364559

5 years agoRevert Add github lockdown app to auto-close pull requests.
Tom Stellard [Thu, 27 Jun 2019 16:23:26 +0000 (16:23 +0000)]
Revert Add github lockdown app to auto-close pull requests.

This reverts r364358 (git commit b37f2f33916f90279f3ada3941fe6a2f8420f913)

Moving this file to a separate repository https://github.com/llvm/.github,
 so it doesn't pollute the main tree.  It also did not appear to be working.

llvm-svn: 364558

5 years agoRecommit [PowerPC] Update P9 vector costs for insert/extract element
Roland Froese [Thu, 27 Jun 2019 16:20:24 +0000 (16:20 +0000)]
Recommit [PowerPC] Update P9 vector costs for insert/extract element

Recommit patch D60160 after regression fix patch D63463.

llvm-svn: 364557

5 years ago[debug-info] Make a couple of tests more robust.
Paul Robinson [Thu, 27 Jun 2019 15:53:07 +0000 (15:53 +0000)]
[debug-info] Make a couple of tests more robust.

llvm-svn: 364556

5 years ago[Attr] Add "willreturn" function attribute
Johannes Doerfert [Thu, 27 Jun 2019 15:51:40 +0000 (15:51 +0000)]
[Attr] Add "willreturn" function attribute

This patch introduces a new function attribute, willreturn, to indicate
that a call of this function will either exhibit undefined behavior or
comes back and continues execution at a point in the existing call stack
that includes the current invocation.

This attribute guarantees that the function does not have any endless
loops, endless recursion, or terminating functions like abort or exit.

Patch by Hideto Ueno (@uenoku)

Reviewers: jdoerfert

Subscribers: mehdi_amini, hiraditya, steven_wu, dexonsmith, lebedev.ri, llvm-commits

Tags: #llvm

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

llvm-svn: 364555

5 years agoFollowup to revision 364545: Turns out that clang issues different errors for C+...
Marshall Clow [Thu, 27 Jun 2019 15:37:31 +0000 (15:37 +0000)]
Followup to revision 364545: Turns out that clang issues different errors for C++11 vs c++2a, so I tweaked the 'expected-error' bits that I added to match either of them.

llvm-svn: 364554

5 years ago[LiveDebugValues] Emit the debug entry values
Djordje Todorovic [Thu, 27 Jun 2019 15:35:48 +0000 (15:35 +0000)]
[LiveDebugValues] Emit the debug entry values

Emit replacements for clobbered parameters location if the parameter
has unmodified value throughout the funciton. This is basic scenario
where we can use the debug entry values.

([12/13] Introduce the debug entry values.)

Co-authored-by: Ananth Sowda <asowda@cisco.com>
Co-authored-by: Nikola Prica <nikola.prica@rt-rk.com>
Co-authored-by: Ivan Baev <ibaev@cisco.com>
Differential Revision: https://reviews.llvm.org/D58042

llvm-svn: 364553

5 years ago[docs][llvm-nm][llvm-objdump] Improve "See Also" section
James Henderson [Thu, 27 Jun 2019 15:18:15 +0000 (15:18 +0000)]
[docs][llvm-nm][llvm-objdump] Improve "See Also" section

The "See Also" section for llvm-nm didn't actually contain any links,
and the tools referred to didn't make much sense (referring to non-LLVM
tools, when we have equivalents, or tools that aren't really to do with
symbol dumping). llvm-objdump's didn't refer to llvm-readelf.

Reviewed by: grimar

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

llvm-svn: 364552

5 years ago[clangd] Emit semantic highlighting tokens when the main AST is built.
Johan Vikstrom [Thu, 27 Jun 2019 15:13:03 +0000 (15:13 +0000)]
[clangd] Emit semantic highlighting tokens when the main AST is built.

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

llvm-svn: 364551

5 years agoBitcode: derive all types used from records instead of Values.
Tim Northover [Thu, 27 Jun 2019 14:46:51 +0000 (14:46 +0000)]
Bitcode: derive all types used from records instead of Values.

There is existing bitcode that we need to support where the structured nature
of pointer types is used to derive the result type of some operation. For
example a GEP's operation and result will be based on its input Type.

When pointers become opaque, the BitcodeReader will still have access to this
information because it's explicitly told how to construct the more complex
types used, but this information will not be attached to any Value that gets
looked up. This changes BitcodeReader so that in all places which use type
information in this manner, it's derived from a side-table rather than from the
Value in question.

llvm-svn: 364550

5 years ago[LiveRangeEdit] Fix build failure caused by the rL364536
Djordje Todorovic [Thu, 27 Jun 2019 14:31:52 +0000 (14:31 +0000)]
[LiveRangeEdit] Fix build failure caused by the rL364536

llvm-svn: 364549

5 years ago[TargetLowering] SimplifyDemandedVectorElts - add shift/rotate support.
Simon Pilgrim [Thu, 27 Jun 2019 14:25:54 +0000 (14:25 +0000)]
[TargetLowering] SimplifyDemandedVectorElts - add shift/rotate support.

llvm-svn: 364548

5 years ago[scudo][standalone] Introduce the C & C++ wrappers [fixed]
Kostya Kortchinsky [Thu, 27 Jun 2019 14:23:26 +0000 (14:23 +0000)]
[scudo][standalone] Introduce the C & C++ wrappers [fixed]

Summary:
This is a redo of D63612.

Two problems came up on some bots:
- `__builtin_umull_overflow` was not declared. This is likely due to an
  older clang or gcc, so add a guard with `__has_builtin` and fallback
  to a division in the event the builtin doesn't exist;
- contradicting definition for `malloc`, etc. This is AFAIU due to the
  fact that we ended up transitively including `stdlib.h` in the `.inc`
  due to it being the flags parser header: so move the include to the
  cc instead.

This should fix the issues, but since those didn't come up in my local
tests it's mostly guesswork.

Rest is the same!

Reviewers: morehouse, hctim, eugenis, vitalybuka, dyung, hans

Reviewed By: morehouse, dyung, hans

Subscribers: srhines, mgorny, delcypher, jfb, #sanitizers, llvm-commits

Tags: #llvm, #sanitizers

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

llvm-svn: 364547

5 years ago[InstCombine] remove 'tmp' names and regenerate checks; NFC
Sanjay Patel [Thu, 27 Jun 2019 14:20:10 +0000 (14:20 +0000)]
[InstCombine] remove 'tmp' names and regenerate checks; NFC

llvm-svn: 364546

5 years agoProvide hashers for string_view only if they are using the default char_traits. Seen...
Marshall Clow [Thu, 27 Jun 2019 14:18:32 +0000 (14:18 +0000)]
Provide hashers for string_view only if they are using the default char_traits. Seen on SO: test/std/strings/string.view/string.view.hash/char_type.hash.fail.cpp

llvm-svn: 364545

5 years ago[PowerPC][HTM] Fix disassembling buffer overflow for tabortdc and others
Jinsong Ji [Thu, 27 Jun 2019 14:11:31 +0000 (14:11 +0000)]
[PowerPC][HTM] Fix disassembling buffer overflow for tabortdc and others

This was reported in https://bugs.llvm.org/show_bug.cgi?id=41751
llvm-mc aborted when disassembling tabortdc.

This patch try to clean up TM related DAGs.

* Fixes the problem by remove explicit output of cr0, and put it as implicit def.
* Update int_ppc_tbegin pattern to accommodate the implicit def of cr0.
* Update the TCHECK operand and int_ppc_tcheck accordingly.
* Add some builtin test and disassembly tests.
* Remove unused CRRC0/crrc0

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

llvm-svn: 364544

5 years agoRevert r363658 "[SVE][IR] Scalable Vector IR Type with pr42210 fix"
Hans Wennborg [Thu, 27 Jun 2019 13:55:02 +0000 (13:55 +0000)]
Revert r363658 "[SVE][IR] Scalable Vector IR Type with pr42210 fix"

We saw a 70% ThinLTO link time increase in Chromium for Android, see
crbug.com/978817. Sounds like more of PR42210.

> Recommit of D32530 with a few small changes:
>   - Stopped recursively walking through aggregates in
>     the verifier, so that we don't impose too much
>     overhead on large modules under LTO (see PR42210).
>   - Changed tests to match; the errors are slightly
>     different since they only report the array or
>     struct that actually contains a scalable vector,
>     rather than all aggregates which contain one in
>     a nested member.
>   - Corrected an older comment
>
> Reviewers: thakis, rengolin, sdesmalen
>
> Reviewed By: sdesmalen
>
> Differential Revision: https://reviews.llvm.org/D63321

llvm-svn: 364543

5 years ago[DWARF] Handle the DW_OP_entry_value operand
Djordje Todorovic [Thu, 27 Jun 2019 13:52:34 +0000 (13:52 +0000)]
[DWARF] Handle the DW_OP_entry_value operand

Add the IR and the AsmPrinter parts for handling of the DW_OP_entry_values
DWARF operation.

([11/13] Introduce the debug entry values.)

Co-authored-by: Ananth Sowda <asowda@cisco.com>
Co-authored-by: Nikola Prica <nikola.prica@rt-rk.com>
Co-authored-by: Ivan Baev <ibaev@cisco.com>
Differential Revision: https://reviews.llvm.org/D60866

llvm-svn: 364542

5 years ago[TargetLowering] SimplifyDemandedBits - use DemandedElts to better identify partial...
Simon Pilgrim [Thu, 27 Jun 2019 13:48:43 +0000 (13:48 +0000)]
[TargetLowering] SimplifyDemandedBits - use DemandedElts to better identify partial splat shift amounts

llvm-svn: 364541

5 years ago[mips] Mark pseudo select instructions by the `hasNoSchedulingInfo` tag
Simon Atanasyan [Thu, 27 Jun 2019 13:41:30 +0000 (13:41 +0000)]
[mips] Mark pseudo select instructions by the `hasNoSchedulingInfo` tag

llvm-svn: 364540

5 years ago[mips] Add new items to the list of features unsupported by P5600
Simon Atanasyan [Thu, 27 Jun 2019 13:41:23 +0000 (13:41 +0000)]
[mips] Add new items to the list of features unsupported by P5600

llvm-svn: 364539

5 years ago[docs][tools] Add missing "program" tags to rst files
James Henderson [Thu, 27 Jun 2019 13:24:46 +0000 (13:24 +0000)]
[docs][tools] Add missing "program" tags to rst files

Sphinx allows for definitions of command-line options using
`.. option <name>` and references to those options via `:option:<name>`.
However, it looks like there is no scoping of these options by default,
meaning that links can end up pointing to incorrect documents. See for
example the llvm-mca document, which contains references to -o that,
prior to this patch, pointed to a different document. What's worse is
that these links appear to be non-deterministic in which one is picked
(on my machine, some references end up pointing to opt, whereas on the
live docs, they point to llvm-dwarfdump, for example).

The fix is to add the .. program <name> tag. This essentially namespaces
the options (definitions and references) to the named program, ensuring
that the links are kept correct.

Reviwed by: andreadb

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

llvm-svn: 364538

5 years ago[clangd] Fix a case where we fail to detect a header-declared symbol in rename.
Haojian Wu [Thu, 27 Jun 2019 13:24:10 +0000 (13:24 +0000)]
[clangd] Fix a case where we fail to detect a header-declared symbol in rename.

Summary:
Failing case:

```
 #include "foo.h"
 void fo^o() {}
```

getRenameDecl() returns the decl of the symbol under the cursor (which is
in the current main file), instead, we use the canonical decl to determine
whether a symbol is declared in #included header.

Reviewers: sammccall

Subscribers: ilya-biryukov, MaskRay, jkorous, arphaman, kadircet, cfe-commits

Tags: #clang

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

llvm-svn: 364537

5 years ago[Backend] Keep call site info valid through the backend
Djordje Todorovic [Thu, 27 Jun 2019 13:10:29 +0000 (13:10 +0000)]
[Backend] Keep call site info valid through the backend

Handle call instruction replacements and deletions in order to preserve
valid state of the call site info of the MachineFunction.

NOTE: If the call site info is enabled for a new target, the assertion from
the MachineFunction::DeleteMachineInstr() should help to locate places
where the updateCallSiteInfo() should be called in order to preserve valid
state of the call site info.

([10/13] Introduce the debug entry values.)

Co-authored-by: Ananth Sowda <asowda@cisco.com>
Co-authored-by: Nikola Prica <nikola.prica@rt-rk.com>
Co-authored-by: Ivan Baev <ibaev@cisco.com>
Differential Revision: https://reviews.llvm.org/D61062

llvm-svn: 364536

5 years ago[clang-tidy] Fix NDEBUG build [NFC]
Mikael Holmen [Thu, 27 Jun 2019 12:47:57 +0000 (12:47 +0000)]
[clang-tidy] Fix NDEBUG build [NFC]

llvm-svn: 364535

5 years ago[ARM] Fix bogus assertions in copyPhysReg v8.1-M cases.
Simon Tatham [Thu, 27 Jun 2019 12:41:12 +0000 (12:41 +0000)]
[ARM] Fix bogus assertions in copyPhysReg v8.1-M cases.

The code to generate register move instructions in and out of VPR and
FPSCR_NZCV had assertions checking that the other register involved
was a GPR _pair_, instead of a single GPR as it should have been.

Reviewers: miyuki, ostannard

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

Tags: #llvm

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

llvm-svn: 364534

5 years ago[ARM] Fix handling of zero offsets in LOB instructions.
Simon Tatham [Thu, 27 Jun 2019 12:41:07 +0000 (12:41 +0000)]
[ARM] Fix handling of zero offsets in LOB instructions.

The BF and WLS/WLSTP instructions have various branch-offset fields
occupying different positions and lengths in the instruction encoding,
and all of them were decoded at disassembly time by the function
DecodeBFLabelOffset() which returned SoftFail if the offset was zero.

In fact, it's perfectly fine and not even a SoftFail for most of those
offset fields to be zero. The only one that can't be zero is the 4-bit
field labelled `boff` in the architecture spec, occupying bits {26-23}
of the BF instruction family. If that one is zero, the encoding
overlaps other instructions (WLS, DLS, LETP, VCTP), so it ought to be
a full Fail.

Fixed by adding an extra template parameter to DecodeBFLabelOffset
which controls whether a zero offset is accepted or rejected. Adjusted
existing tests (only in error messages for bad disassemblies); added
extra tests to demonstrate zero offsets being accepted in all the
right places, and a few demonstrating rejection of zero `boff`.

Reviewers: DavidSpickett, ostannard

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

Tags: #llvm

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

llvm-svn: 364533

5 years ago[ARM] Make coprocessor number restrictions consistent.
Simon Tatham [Thu, 27 Jun 2019 12:40:55 +0000 (12:40 +0000)]
[ARM] Make coprocessor number restrictions consistent.

Different versions of the Arm architecture disallow the use of generic
coprocessor instructions like MCR and CDP on different sets of
coprocessors. This commit centralises the check of the coprocessor
number so that it's consistent between assembly and disassembly, and
also updates it for the new restrictions in Arm v8.1-M.

New tests added that check all the coprocessor numbers; old tests
updated, where they used a number that's now become illegal in the
context in question.

Reviewers: DavidSpickett, ostannard

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

Tags: #llvm

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

llvm-svn: 364532

5 years ago[ARM] Tighten restrictions on use of SP in v8.1-M CSEL.
Simon Tatham [Thu, 27 Jun 2019 12:40:40 +0000 (12:40 +0000)]
[ARM] Tighten restrictions on use of SP in v8.1-M CSEL.

In the `CSEL Rd,Rm,Rn` instruction family (also including CSINC, CSINV
and CSNEG), the architecture lists it as CONSTRAINED UNPREDICTABLE
(i.e. SoftFail) to use SP in the Rd or Rm slot, but outright illegal
to use it in the Rn slot, not least because some encodings of that
form are used by MVE instructions such as UQRSHLL.

MC was treating all three slots the same, as SoftFail. So the only
reason UQRSHLL was disassembled correctly at all was because the MVE
decode table is separate from the Thumb2 one and takes priority; if
you turned off MVE, then encodings such as `[0x5f,0xea,0x0d,0x83]`
would disassemble as spurious CSELs.

Fixed by inventing another version of the `GPRwithZR` register class,
which disallows SP completely instead of just SoftFailing it.

Reviewers: DavidSpickett, ostannard

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

Tags: #llvm

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

llvm-svn: 364531

5 years ago[X86] getFauxShuffle - add DemandedElts as a filter
Simon Pilgrim [Thu, 27 Jun 2019 12:35:52 +0000 (12:35 +0000)]
[X86] getFauxShuffle - add DemandedElts as a filter

This is currently benign but will be used in the future based on the elements referenced by the parent shuffle(s).

llvm-svn: 364530