platform/upstream/llvm.git
5 years ago[clang-tidy] update FunctionSizeCheck for D56444
Sam McCall [Mon, 14 Jan 2019 10:40:41 +0000 (10:40 +0000)]
[clang-tidy] update FunctionSizeCheck for D56444

Reviewers: JonasToth, aaron.ballman

Subscribers: xazax.hun, cfe-commits

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

llvm-svn: 351048

5 years ago[AST] RecursiveASTVisitor visits lambda classes when implicit visitation is on.
Sam McCall [Mon, 14 Jan 2019 10:31:42 +0000 (10:31 +0000)]
[AST] RecursiveASTVisitor visits lambda classes when implicit visitation is on.

Summary:
This fixes ASTContext's parent map for nodes in such classes (e.g. operator()).
https://bugs.llvm.org/show_bug.cgi?id=39949

This also changes the observed shape of the AST for implicit RAVs.
- this includes AST MatchFinder: cxxRecordDecl() now matches lambda classes,
functionDecl() matches the call operator, and the parent chain is body -> call
operator -> lambda class -> lambdaexpr rather than body -> lambdaexpr.
- this appears not to matter for the ASTImporterLookupTable builder
- this doesn't matter for the other RAVs in-tree.

In order to do this, we remove the TraverseLambdaBody hook. The problem is it's
hard/weird to ensure this hook is called when traversing via the implicit class.
There were just two users of this hook in-tree, who use it to skip bodies.
I replaced these with explicitly traversing the captures only. Another approach
would be recording the bodies when the lambda is visited, and then recognizing
them later.
I'd be open to suggestion on how to preserve this hook, instead.

Reviewers: aaron.ballman, JonasToth

Subscribers: cfe-commits, rsmith, jdennett

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

llvm-svn: 351047

5 years ago[MIPS GlobalISel] Add pre legalizer combiner pass
Petar Avramovic [Mon, 14 Jan 2019 10:27:05 +0000 (10:27 +0000)]
[MIPS GlobalISel] Add pre legalizer combiner pass

Introduce GlobalISel pre legalizer pass for MIPS.
It will be used to cope with instructions that require
combining before legalization.

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

llvm-svn: 351046

5 years ago[BasicBlockUtils] Generalize DeleteDeadBlock to deal with multiple dead blocks
Max Kazantsev [Mon, 14 Jan 2019 10:26:26 +0000 (10:26 +0000)]
[BasicBlockUtils] Generalize DeleteDeadBlock to deal with multiple dead blocks

Utility function `DeleteDeadBlock` expects that all predecessors of a block being
deleted are already deleted, with the exception of single-block loop. It makes it
hard to use for deletion of a set of blocks that may contain cyclic dependencies.
The is no correct order of invocations of this function that does not produce
dangling pointers on already deleted blocks.

This patch introduces a generalized version of this function `DeleteDeadBlocks`
that allows us to remove multiple blocks at once, even if there are cycles among
them. The only requirement is that no block being deleted should have a predecessor
that is not being deleted.

The logic of `DeleteDeadBlocks` is following:
  for each block
    create relevant DT updates;
    remove all instructions (replace with undef if needed);
    replace terminator with unreacheable;
  apply DT updates;
  for each block
    delete block;

Therefore, `DeleteDeadBlock` becomes a particular case of
the general algorithm called for a single block.

Differential Revision: https://reviews.llvm.org/D56120
Reviewed By: skatkov

llvm-svn: 351045

5 years ago[Sparc] Add Sparc V8 support
Daniel Cederman [Mon, 14 Jan 2019 10:15:20 +0000 (10:15 +0000)]
[Sparc] Add Sparc V8 support

Summary:
Adds the register class implementation for Sparc.
Adds support for DW_CFA_GNU_window_save.
Adds save and restore context functionality.

Adds getArch() function to each Registers_ class to be able to separate
between DW_CFA_AARCH64_negate_ra_state and DW_CFA_GNU_window_save which
are both represented by the same constant.

On Sparc the return address is the address of the call instruction, so
an offset needs to be added when returning to skip the call instruction
and its delay slot. If the function returns a struct it is also necessary
to skip one extra instruction on Sparc V8.

Reviewers: jyknight, mclow.lists, mstorsjo, compnerd

Reviewed By: jyknight, compnerd

Subscribers: jgorbe, mgorny, christof, llvm-commits, fedor.sergeev, JDevlieghere, ldionne, libcxx-commits

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

llvm-svn: 351044

5 years ago[llvm-symbolizer] Add -addresses, -a as aliases for -print-address
Dmitry Venikov [Mon, 14 Jan 2019 10:10:51 +0000 (10:10 +0000)]
[llvm-symbolizer] Add -addresses, -a as aliases for -print-address

Summary: Provides -addresses, -a as aliases for -print-address. Motivation: https://bugs.llvm.org/show_bug.cgi?id=40067.

Reviewers: jhenderson, ruiu, rnk, fjricci

Reviewed By: jhenderson

Subscribers: rupprecht, llvm-commits

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

llvm-svn: 351043

5 years agoFix defines.txt
Thomas Preud'homme [Mon, 14 Jan 2019 10:10:48 +0000 (10:10 +0000)]
Fix defines.txt

Support arbitrary suffix when matching FileCheck executable name in
defines.txt to successfully match FileCheck.EXE on Microsoft Windows.

llvm-svn: 351042

5 years ago[clangd] Index main-file symbols (bug 39761)
Sam McCall [Mon, 14 Jan 2019 10:01:17 +0000 (10:01 +0000)]
[clangd] Index main-file symbols (bug 39761)

Patch by Nathan Ridge!

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

llvm-svn: 351041

5 years ago[asan] Add fallback for Thumb after r350139
Diana Picus [Mon, 14 Jan 2019 09:45:49 +0000 (09:45 +0000)]
[asan] Add fallback for Thumb after r350139

This reverts r350806 which marked some tests as UNSUPPORTED on ARM and
instead reintroduces the old code path only for Thumb, since that seems
to be the only target that broke.

It would still be nice to find the root cause of the breakage, but with
the branch point for LLVM 8.0 scheduled for next week it's better to put
things in a stable state while we investigate.

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

llvm-svn: 351040

5 years agoDetect incorrect FileCheck variable CLI definition
Thomas Preud'homme [Mon, 14 Jan 2019 09:29:10 +0000 (09:29 +0000)]
Detect incorrect FileCheck variable CLI definition

Summary:
While the backend code of FileCheck relies on definition of variable
from the command-line to have an equal sign '=' and a variable name
before that, the frontend does not actually enforce it. This leads to
FileCheck crashing when invoked with invalid syntax for the -D option.

This patch adds the missing validation in the frontend. It also makes
the -D option an AlwaysPrefix option to be able to detect -D=FOO as
being a define without variable and -D as missing its value.

Copyright:
- Linaro (changes in version 2 of revision D55940)
- GraphCore (changes in later versions)

Reviewers: jdenny

Subscribers: JonChesterfield, hiraditya, kristina, probinson,
llvm-commits

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

llvm-svn: 351039

5 years agoAdd support for prefix-only CLI options
Thomas Preud'homme [Mon, 14 Jan 2019 09:28:53 +0000 (09:28 +0000)]
Add support for prefix-only CLI options

Summary:
Add support for options that always prefix their value, giving an error
if the value is in the next argument or if the option is given a value
assignment (ie. opt=val). This is the desired behavior for the -D option
of FileCheck for instance.

Copyright:
- Linaro (changes in version 2 of revision D55940)
- GraphCore (changes in later versions and introduced when creating
  D56549)

Reviewers: jdenny

Subscribers: llvm-commits, probinson, kristina, hiraditya,
JonChesterfield

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

llvm-svn: 351038

5 years ago[CMake] LLVM exports utility targets since r350959, so we can use them without standa...
Stefan Granitz [Mon, 14 Jan 2019 09:24:50 +0000 (09:24 +0000)]
[CMake] LLVM exports utility targets since r350959, so we can use them without standalone-checks now

llvm-svn: 351037

5 years ago[X86] Remove mask parameter from avx512 pmultishiftqb intrinsics. Use select in IR...
Craig Topper [Mon, 14 Jan 2019 08:46:51 +0000 (08:46 +0000)]
[X86] Remove mask parameter from avx512 pmultishiftqb intrinsics. Use select in IR instead.

Fixes PR40259

llvm-svn: 351036

5 years ago[X86] Remove mask parameter from avx512 pmultishiftqb intrinsics. Use select in IR...
Craig Topper [Mon, 14 Jan 2019 08:46:45 +0000 (08:46 +0000)]
[X86] Remove mask parameter from avx512 pmultishiftqb intrinsics. Use select in IR instead.

Fixes PR40259

llvm-svn: 351035

5 years ago[X86] Add new test file that was supposed to go with r351028.
Craig Topper [Mon, 14 Jan 2019 08:46:42 +0000 (08:46 +0000)]
[X86] Add new test file that was supposed to go with r351028.

llvm-svn: 351034

5 years ago[X86] Update type profile for DBPSADBW to indicate the immediate is an i8 not just...
Craig Topper [Mon, 14 Jan 2019 02:59:08 +0000 (02:59 +0000)]
[X86] Update type profile for DBPSADBW to indicate the immediate is an i8 not just any int.

Removes some type checks from X86GenDAGISel.inc

llvm-svn: 351033

5 years ago[X86] Remove unused intrinsic handlers. NFC
Craig Topper [Mon, 14 Jan 2019 01:56:59 +0000 (01:56 +0000)]
[X86] Remove unused intrinsic handlers. NFC

llvm-svn: 351032

5 years ago[X86] Remove FPCLASS intrinsic handler. Use INTR_TYPE_2OP instead. NFC
Craig Topper [Mon, 14 Jan 2019 01:44:09 +0000 (01:44 +0000)]
[X86] Remove FPCLASS intrinsic handler. Use INTR_TYPE_2OP instead. NFC

llvm-svn: 351031

5 years agolld/include/lld/Core/TODO.txt
Nico Weber [Mon, 14 Jan 2019 00:45:27 +0000 (00:45 +0000)]
lld/include/lld/Core/TODO.txt

- fix minor grammar stuff (I'm not a native speaker either, but it's hopefully a net improvement)
- mention that lld/coff is used in production
- update AArch64, ARM to production quality
- remove lld/include/lld/Core/TODO.txt which looks outdated

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

llvm-svn: 351030

5 years ago[X86] Remove mask parameter from vpshufbitqmb intrinsics. Change result to a vXi1...
Craig Topper [Mon, 14 Jan 2019 00:03:55 +0000 (00:03 +0000)]
[X86] Remove mask parameter from vpshufbitqmb intrinsics. Change result to a vXi1 vector.

We'll do the scalar<->vXi1 conversions with bitcasts in IR.

Fixes PR40258

llvm-svn: 351029

5 years ago[X86] Remove mask parameter from vpshufbitqmb intrinsics. Change result to a vXi1...
Craig Topper [Mon, 14 Jan 2019 00:03:50 +0000 (00:03 +0000)]
[X86] Remove mask parameter from vpshufbitqmb intrinsics. Change result to a vXi1 vector.

The input mask can be represented with an AND in IR.

Fixes PR40258

llvm-svn: 351028

5 years ago[libcxx] Mark do_open, do_get and do_close parameters unused when catopen is missing
Petr Hosek [Sun, 13 Jan 2019 22:15:37 +0000 (22:15 +0000)]
[libcxx] Mark do_open, do_get and do_close parameters unused when catopen is missing

When catopen is missing, do_open, do_get and do_close end up being
no-op, and as such their parameters will be unused which triggers a
warning/error when building with -Wunused-parameter.

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

llvm-svn: 351027

5 years ago[DAGCombiner] If add_sat(x,y) can't overflow -> add(x,y)
Simon Pilgrim [Sun, 13 Jan 2019 22:08:26 +0000 (22:08 +0000)]
[DAGCombiner] If add_sat(x,y) can't overflow -> add(x,y)

NOTE: We need more powerful signed overflow detection in computeOverflowKind
llvm-svn: 351026

5 years agoFix unused variable warning. NFCI.
Simon Pilgrim [Sun, 13 Jan 2019 21:53:12 +0000 (21:53 +0000)]
Fix unused variable warning. NFCI.

llvm-svn: 351025

5 years ago[DAGCombiner] Some very basic add/sub saturation combines.
Simon Pilgrim [Sun, 13 Jan 2019 21:50:24 +0000 (21:50 +0000)]
[DAGCombiner] Some very basic add/sub saturation combines.

Handle combines with zero and constant canonicalization for adds.

llvm-svn: 351024

5 years ago[X86] Add some basic add/sub saturation combine tests.
Simon Pilgrim [Sun, 13 Jan 2019 21:21:46 +0000 (21:21 +0000)]
[X86] Add some basic add/sub saturation combine tests.

The actual combines will be added in a future commit.

llvm-svn: 351023

5 years ago[LegalizeDAG] Remove 'NeedInvert' code from expansion of BR_CC. Replace with an assert.
Craig Topper [Sun, 13 Jan 2019 19:33:30 +0000 (19:33 +0000)]
[LegalizeDAG] Remove 'NeedInvert' code from expansion of BR_CC. Replace with an assert.

I accidentally triggered this code while doing some experiments and it doesn't look lke it could possibly work.

It calls 'getNOT' on a node that should be a CondCode.

I think to do this right we would need to swap the branch target and the fallthrough target. But that's not easy to do. Or we could create an explicit SetCC and feed that into a new BR_CC?

llvm-svn: 351022

5 years ago[X86] Rename overly verbose method; NFC
Nikita Popov [Sun, 13 Jan 2019 16:41:26 +0000 (16:41 +0000)]
[X86] Rename overly verbose method; NFC

As suggested on D56636.

llvm-svn: 351021

5 years agoRemove TypeBuilder.h, and fix the few locations using it.
James Y Knight [Sun, 13 Jan 2019 16:09:28 +0000 (16:09 +0000)]
Remove TypeBuilder.h, and fix the few locations using it.

This shortcut mechanism for creating types was added 10 years ago, but
has seen almost no uptake since then, neither internally nor in
external projects.

The very small number of characters saved by using it does not seem
worth the mental overhead of an additional type-creation API, so,
delete it.

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

llvm-svn: 351020

5 years ago[OpenMP] Fix LIBOMP_USE_DEBUGGER=ON build (PR38612)
Roman Lebedev [Sun, 13 Jan 2019 12:54:34 +0000 (12:54 +0000)]
[OpenMP] Fix LIBOMP_USE_DEBUGGER=ON build (PR38612)

Summary:
Two things:
1. Those two variables had the wrong sigdness, which was resulting in "sign mismatch in comparison" warning.
2. The whole `kmp_debugger.cpp` wasn't being built, or rather, it was being built as-if `USE_DEBUGGER` was off,
   thus, nothing provided the definition of `__kmp_omp_debug_struct_info`, `__kmp_debugging`.
   Makes sense, because `USE_DEBUGGER` is set in `kmp_config.h`, which is not included explicitly.
   It is included by `kmp.h`, but that one is only included inside of the `#if USE_DEBUGGER` block..
   I *think* this is the only source file with this issue,
   everything else seem to `#include` either `kmp.h` or `kmp_config.h`.
   The alternative solution would be to add `add_compile_options(-include kmp_config.h)` in CMake.

I did verify that `__kmp_omp_debug_struct_info` becomes available with this patch.

Fixes [[ https://bugs.llvm.org/show_bug.cgi?id=38612 | PR38612 ]].

Reviewers: AndreyChurbanov, jlpeyton, Hahnfeld

Reviewed By: jlpeyton

Subscribers: guansong, jfb, openmp-commits

Tags: #openmp

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

llvm-svn: 351019

5 years ago[X86] Add more ISD nodes to handle masked versions of VCVT(T)PD2DQZ128/VCVT(T)PD2UDQZ...
Craig Topper [Sun, 13 Jan 2019 02:59:59 +0000 (02:59 +0000)]
[X86] Add more ISD nodes to handle masked versions of VCVT(T)PD2DQZ128/VCVT(T)PD2UDQZ128 which only produce 2 result elements and zeroes the upper elements.

We can't represent this properly with vselect like we normally do. We also have to update the instruction definition to use a VK2WM mask instead of VK4WM to represent this.

Fixes another case from PR34877

llvm-svn: 351018

5 years ago[X86] Add X86ISD::VMFPROUND to handle the masked case of VCVTPD2PSZ128 which only...
Craig Topper [Sun, 13 Jan 2019 02:59:57 +0000 (02:59 +0000)]
[X86] Add X86ISD::VMFPROUND to handle the masked case of VCVTPD2PSZ128 which only produces 2 result elements and zeroes the upper elements.

We can't represent this properly with vselect like we normally do. We also have to update the instruction definition to use a VK2WM mask instead of VK4WM to represent this.

Fixes another case from PR34877.

llvm-svn: 351017

5 years agoGive helper classes/functions local linkage. NFC.
Benjamin Kramer [Sat, 12 Jan 2019 18:36:22 +0000 (18:36 +0000)]
Give helper classes/functions local linkage. NFC.

llvm-svn: 351016

5 years agoNFC: Make utility private
Stephen Kelly [Sat, 12 Jan 2019 17:07:05 +0000 (17:07 +0000)]
NFC: Make utility private

No callers are external to the class anymore.

llvm-svn: 351015

5 years ago[ASTDump] NFC: Move dump of individual Stmts to TextNodeDumper
Stephen Kelly [Sat, 12 Jan 2019 16:53:27 +0000 (16:53 +0000)]
[ASTDump] NFC: Move dump of individual Stmts to TextNodeDumper

Reviewers: aaron.ballman

Subscribers: cfe-commits

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

llvm-svn: 351014

5 years ago[X86] More aggressive shuffle mask widening in combineExtractWithShuffle
Simon Pilgrim [Sat, 12 Jan 2019 16:38:56 +0000 (16:38 +0000)]
[X86] More aggressive shuffle mask widening in combineExtractWithShuffle

Use demanded extract index to set most of the shuffle mask to undef, making it easier to widen and peek through.

llvm-svn: 351013

5 years agoImplement TemplateArgument dumping in terms of Visitor
Stephen Kelly [Sat, 12 Jan 2019 16:35:37 +0000 (16:35 +0000)]
Implement TemplateArgument dumping in terms of Visitor

Summary: Split the output streaming from the traversal to other AST nodes.

Reviewers: aaron.ballman

Subscribers: cfe-commits

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

llvm-svn: 351012

5 years ago[ASTDump] Change parameter to StringRef
Stephen Kelly [Sat, 12 Jan 2019 15:45:05 +0000 (15:45 +0000)]
[ASTDump] Change parameter to StringRef

llvm-svn: 351011

5 years ago[LoopVectorizer] give more advice in remark about failure to vectorize call
Sanjay Patel [Sat, 12 Jan 2019 15:27:15 +0000 (15:27 +0000)]
[LoopVectorizer] give more advice in remark about failure to vectorize call

Something like this is requested by:
https://bugs.llvm.org/show_bug.cgi?id=40265
...and it seems like a common enough case that we should acknowledge it.

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

llvm-svn: 351010

5 years ago[Algorithm] Add make_const_ref corresponding to make_const_ptr
Stephen Kelly [Sat, 12 Jan 2019 15:23:30 +0000 (15:23 +0000)]
[Algorithm] Add make_const_ref corresponding to make_const_ptr

Reviewers: aaron.ballman

Subscribers: dexonsmith, kristina, llvm-commits

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

llvm-svn: 351009

5 years ago[DAGCombiner] fold insert_subvector of insert_subvector
Sanjay Patel [Sat, 12 Jan 2019 15:12:28 +0000 (15:12 +0000)]
[DAGCombiner] fold insert_subvector of insert_subvector

This pattern:

    t33: v8i32 = insert_subvector undef:v8i32, t35, Constant:i64<0>
  t21: v16i32 = insert_subvector undef:v16i32, t33, Constant:i64<0>

...shows up in PR33758:
https://bugs.llvm.org/show_bug.cgi?id=33758
...although this patch doesn't make any difference to the final result on that yet.

In the affected tests here, it looks like it just makes RA wiggle. But we might
as well squash this to prevent it interfering with other pattern-matching.

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

llvm-svn: 351008

5 years ago[analyzer] Fix unused variable warnings in Release builds
Benjamin Kramer [Sat, 12 Jan 2019 12:43:53 +0000 (12:43 +0000)]
[analyzer] Fix unused variable warnings in Release builds

This was just an inlined version of isa<CXXConstructExpr>. NFC.

llvm-svn: 351007

5 years ago[llvm-objdump] - Change the output for --all-headers.
George Rimar [Sat, 12 Jan 2019 12:17:24 +0000 (12:17 +0000)]
[llvm-objdump] - Change the output for --all-headers.

This is for https://bugs.llvm.org/show_bug.cgi?id=40008,

it starts printing the file headers when --all-headers is given and
do a minor cosmetic change.

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

llvm-svn: 351006

5 years agoUse getShiftAmountTy for shift amounts.
Simon Pilgrim [Sat, 12 Jan 2019 12:00:43 +0000 (12:00 +0000)]
Use getShiftAmountTy for shift amounts.

llvm-svn: 351005

5 years agogn build: Unbreak Windows build
Nico Weber [Sat, 12 Jan 2019 11:56:47 +0000 (11:56 +0000)]
gn build: Unbreak Windows build

I didn't break all that much during upstreaming, just needs two small fixes:

- fix spelling of MCJITTests.def file
- make libLTO a shared_library to put it in bin/ on Windows where it is in the
  CMake build too

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

llvm-svn: 351004

5 years ago[X86] Add more usub.sat vector tests; NFC
Nikita Popov [Sat, 12 Jan 2019 11:43:04 +0000 (11:43 +0000)]
[X86] Add more usub.sat vector tests; NFC

Add additional vXi32 and vXi64 tests.

llvm-svn: 351003

5 years ago[NetBSD] Enable additional sanitizer types
Michal Gorny [Sat, 12 Jan 2019 11:18:35 +0000 (11:18 +0000)]
[NetBSD] Enable additional sanitizer types

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

llvm-svn: 351002

5 years ago[ORC][MIPS] Fill delay-slot after `jr` instruction
Simon Atanasyan [Sat, 12 Jan 2019 11:12:08 +0000 (11:12 +0000)]
[ORC][MIPS] Fill delay-slot after `jr` instruction

MIPS `jr` instruction uses a delay-slot. To escape execution of
arbitrary instruction we should either fill the delay-slot by `nop`
instruction or swap `jr` instruction and logically preceding
instruction. This fix implements the second method to generate a bit
more effective code.

llvm-svn: 351001

5 years ago[ORC][MIPS] Setup t9 register and call function through this register
Simon Atanasyan [Sat, 12 Jan 2019 11:12:04 +0000 (11:12 +0000)]
[ORC][MIPS] Setup t9 register and call function through this register

MIPS ABI states that every function must be called through jalr $t9. In
other words, a function expect that t9 register points to the beginning
of its code. A function uses this register to calculate offset to the
Global Offset Table and save it to the `gp` register.
```
lui   $gp, %hi(_gp_disp)
addiu $gp, %lo(_gp_disp)
addu  $gp, $gp, $t9
```

If `t9` and as a result `$gp` point to the wrong place the following code
loads incorrect value from GOT and passes control to invalid code.
```
lw    $v0,%call16(foo)($gp)
jalr  $t9
```

OrcMips32 and OrcMips64 writeResolverCode methods pass control to the
resolved address, but do not setup `$t9` before the call. The `t9` holds
value of the beginning of `resolver` code so any attempts to call
routines via GOT failed.

This change fixes the problem. The `OrcLazy/hidden-visibility.ll` test
starts to pass correctly. Before the change it fails on MIPS because the
`exitOnLazyCallThroughFailure` called from the resolver code could not
call libc routine `exit` via GOT.

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

llvm-svn: 351000

5 years ago[X86] Improve vXi64 ISD::ABS codegen with SSE41+
Simon Pilgrim [Sat, 12 Jan 2019 10:28:12 +0000 (10:28 +0000)]
[X86] Improve vXi64 ISD::ABS codegen with SSE41+

Make use of vblendvpd to select on the signbit

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

llvm-svn: 350999

5 years ago[X86][AARCH64] Improve ISD::ABS support
Simon Pilgrim [Sat, 12 Jan 2019 09:59:32 +0000 (09:59 +0000)]
[X86][AARCH64] Improve ISD::ABS support

This patch takes some of the code from D49837 to allow us to enable ISD::ABS support for all SSE vector types.

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

llvm-svn: 350998

5 years agoReapply "[DemandedBits] Use SetVector for Worklist"
Nikita Popov [Sat, 12 Jan 2019 09:09:15 +0000 (09:09 +0000)]
Reapply "[DemandedBits] Use SetVector for Worklist"

DemandedBits currently uses a simple vector for the worklist, which
means that instructions may be inserted multiple times into it.
Especially in combination with the deep lattice, this may cause
instructions too be recomputed very often. To avoid this, switch
to a SetVector.

Reapplying with a smaller number of inline elements in the
SmallSetVector, to avoid running into the SmallDenseMap issue
described in D56455.

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

llvm-svn: 350997

5 years ago[llvm-objcopy] [COFF] Remove pointless Reader/Writer base classes. NFC.
Martin Storsjo [Sat, 12 Jan 2019 08:30:09 +0000 (08:30 +0000)]
[llvm-objcopy] [COFF] Remove pointless Reader/Writer base classes. NFC.

These were copied as part of the original design from the ELF
backend, but aren't necessary at the moment.

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

llvm-svn: 350996

5 years ago[X86] Remove X86ISD::SELECT as its no longer used by any of our intrinsic lowering.
Craig Topper [Sat, 12 Jan 2019 08:15:54 +0000 (08:15 +0000)]
[X86] Remove X86ISD::SELECT as its no longer used by any of our intrinsic lowering.

llvm-svn: 350995

5 years ago[X86] Add ISD node for masked version of CVTPS2PH.
Craig Topper [Sat, 12 Jan 2019 08:05:12 +0000 (08:05 +0000)]
[X86] Add ISD node for masked version of CVTPS2PH.

The 128-bit input produces 64-bits of output and fills the upper 64-bits with 0. The mask only applies to the lower elements. But we can't represent this with a vselect like we normally do.

This also avoids the need to have a special X86ISD::SELECT when avx512bw isn't enabled since vselect v8i16 isn't legal there.

Fixes another instruction for PR34877.

llvm-svn: 350994

5 years ago[RISCV] Introduce codegen patterns for RV64M-only instructions
Alex Bradbury [Sat, 12 Jan 2019 07:43:06 +0000 (07:43 +0000)]
[RISCV] Introduce codegen patterns for RV64M-only instructions

As discussed on llvm-dev
<http://lists.llvm.org/pipermail/llvm-dev/2018-December/128497.html>, we have
to be careful when trying to select the *w RV64M instructions. i32 is not a
legal type for RV64 in the RISC-V backend, so operations have been promoted by
the time they reach instruction selection. Information about whether the
operation was originally a 32-bit operations has been lost, and it's easy to
write incorrect patterns.

Similarly to the variable 32-bit shifts, a DAG combine on ANY_EXTEND will
produce a SIGN_EXTEND if this is likely to result in sdiv/udiv/urem being
selected (and so save instructions to sext/zext the input operands).

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

llvm-svn: 350993

5 years ago[RISCV] Add patterns for RV64I SLLW/SRLW/SRAW instructions
Alex Bradbury [Sat, 12 Jan 2019 07:32:31 +0000 (07:32 +0000)]
[RISCV] Add patterns for RV64I SLLW/SRLW/SRAW instructions

This restores support for selecting the SLLW/SRLW/SRAW instructions, which was
removed in rL348067 as the previous patterns made some unsafe assumptions.
Also see the related llvm-dev discussion
<http://lists.llvm.org/pipermail/llvm-dev/2018-December/128497.html>

Ultimately I didn't introduce a custom SelectionDAG node, but instead added a
DAG combine that inserts an AssertZext i5 on the shift amount for an i32
variable-length shift and also added an ANY_EXTEND DAG-combine which will
instead produce a SIGN_EXTEND for an i32 variable-length shift, increasing the
opportunity to safely select SLLW/SRLW/SRAW.

There are obviously different ways of addressing this (a number discussed in
the llvm-dev thread), so I'd welcome further feedback and comments.

Note that there are now some cases in
test/CodeGen/RISCV/rv64i-exhaustive-w-insts.ll where sraw/srlw/sllw is
selected even though sra/srl/sll could be used without any extra instructions.
Given both are semantically equivalent, there doesn't seem a good reason to
prefer one vs the other. Given that would require more logic to still select
sra/srl/sll in those cases, I've left it preferring the *w variants.

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

llvm-svn: 350992

5 years ago[X86] Remove unnecessary code from getMaskNode.
Craig Topper [Sat, 12 Jan 2019 06:13:44 +0000 (06:13 +0000)]
[X86] Remove unnecessary code from getMaskNode.

We no longer need to extend mask scalars before bitcasting them to vXi1. This was only needed for the truncate intrinsics. And was really a bug in our lowering of them.

llvm-svn: 350991

5 years agoAdd SymbolFileBreakpad.
Jason Molenda [Sat, 12 Jan 2019 03:17:39 +0000 (03:17 +0000)]
Add SymbolFileBreakpad.

llvm-svn: 350990

5 years ago[X86] When lowering v1i1/v2i1/v4i1/v8i1 load/store with avx512f, but not avx512dq...
Craig Topper [Sat, 12 Jan 2019 02:22:10 +0000 (02:22 +0000)]
[X86] When lowering v1i1/v2i1/v4i1/v8i1 load/store with avx512f, but not avx512dq, use v16i1 as the intermediate mask type instead of v8i1.

We still use i8 for the load/store type. So we need to convert to/from i16 to around the mask type.

By doing this we get an i8->i16 extload which we can then pattern match to a KMOVW if the access is aligned.

llvm-svn: 350989

5 years ago[X86] Change some patterns that select MOVZX16rm8 to instead select MOVZX32rm8 and...
Craig Topper [Sat, 12 Jan 2019 02:22:06 +0000 (02:22 +0000)]
[X86] Change some patterns that select MOVZX16rm8 to instead select MOVZX32rm8 and extract the subregister.

This should be a shorter encoding and is consistent with what we do for zext i8->i16

llvm-svn: 350988

5 years ago[ARM] Fix typo
Evandro Menezes [Sat, 12 Jan 2019 01:06:43 +0000 (01:06 +0000)]
[ARM] Fix typo

Fix typo in r350952.

llvm-svn: 350986

5 years ago[X86] Add ISD nodes for masked truncate so we can properly represent when the output...
Craig Topper [Sat, 12 Jan 2019 00:55:27 +0000 (00:55 +0000)]
[X86] Add ISD nodes for masked truncate so we can properly represent when the output has more elements than the input due to needing to be 128 bits.

We can't properly represent this with a vselect since the upper elements of the result are supposed to be zeroed regardless of the mask.

This also reuses the new nodes even when the result type fits in 128 bits if the input is q/d and the result is w/b since vselect w/b using k-register condition isn't legal without avx512bw. Currently we're doing this even when avx512bw is enabled, but I might change that.

This fixes some of PR34877

llvm-svn: 350985

5 years agoNFC: Port loop to cxx_range_for
Stephen Kelly [Sat, 12 Jan 2019 00:42:59 +0000 (00:42 +0000)]
NFC: Port loop to cxx_range_for

llvm-svn: 350984

5 years ago[sanitizer] Move android's GetPageSize to a header (NFC)
Evgeniy Stepanov [Sat, 12 Jan 2019 00:09:24 +0000 (00:09 +0000)]
[sanitizer] Move android's GetPageSize to a header (NFC)

No need to pay function call overhead for a function that returns a
constant.

llvm-svn: 350983

5 years ago[analyzer] Support for OSObjects out parameters in RetainCountChecker
George Karpenkov [Fri, 11 Jan 2019 23:35:17 +0000 (23:35 +0000)]
[analyzer] Support for OSObjects out parameters in RetainCountChecker

rdar://46357478
rdar://47121327

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

llvm-svn: 350982

5 years ago[analyzer] Introduce a convenience method for getting a CallEvent from an arbitrary...
George Karpenkov [Fri, 11 Jan 2019 23:35:04 +0000 (23:35 +0000)]
[analyzer] Introduce a convenience method for getting a CallEvent from an arbitrary Stmt

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

llvm-svn: 350981

5 years agosanitizer_common: Change gen_dynamic_list.py to take a -o argument instead of writing...
Peter Collingbourne [Fri, 11 Jan 2019 23:30:24 +0000 (23:30 +0000)]
sanitizer_common: Change gen_dynamic_list.py to take a -o argument instead of writing to stdout.

This makes the script a little more gn friendly; gn does not support
redirecting the output of a script.

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

llvm-svn: 350980

5 years agogn build: Add a stage2 toolchain for Android.
Peter Collingbourne [Fri, 11 Jan 2019 23:18:51 +0000 (23:18 +0000)]
gn build: Add a stage2 toolchain for Android.

This makes it possible to build llvm-symbolizer for Android, which
is one of the prerequisites for running the sanitizer tests on Android.

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

llvm-svn: 350979

5 years ago[lldbsuite] Skip TestExitDuringStep on Windows
Stella Stamenova [Fri, 11 Jan 2019 23:08:35 +0000 (23:08 +0000)]
[lldbsuite] Skip TestExitDuringStep on Windows

This test is flaky on Windows and will occasionally hang or fail.

llvm-svn: 350978

5 years agogn build: Create a template for unix toolchains.
Peter Collingbourne [Fri, 11 Jan 2019 22:57:57 +0000 (22:57 +0000)]
gn build: Create a template for unix toolchains.

Also change the toolchain description to use current_os instead of
host_os so that the template can be used for cross builds, and add
a current_os to the win toolchain to match the unix toolchain.

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

llvm-svn: 350977

5 years ago[AArch64] Improve Exynos predicates
Evandro Menezes [Fri, 11 Jan 2019 22:39:47 +0000 (22:39 +0000)]
[AArch64] Improve Exynos predicates

Expand the predicate using shifted arithmetic and logic instructions to also
consider the respective not shifted instructions.

llvm-svn: 350976

5 years agoAdd a release note about MSP430 support.
Rui Ueyama [Fri, 11 Jan 2019 22:31:35 +0000 (22:31 +0000)]
Add a release note about MSP430 support.

llvm-svn: 350975

5 years agogn build: Merge r350958.
Peter Collingbourne [Fri, 11 Jan 2019 22:15:53 +0000 (22:15 +0000)]
gn build: Merge r350958.

llvm-svn: 350974

5 years ago[CMake] Fix standalone build after LLVM exports utility targets
Stefan Granitz [Fri, 11 Jan 2019 21:59:58 +0000 (21:59 +0000)]
[CMake] Fix standalone build after LLVM exports utility targets

LLVM started exporting targets for utilites with https://reviews.llvm.org/rL350959, which broke compiler-rt standalone builds because it was used to define FileCheck manually.
Changed this, so FileCheck gets imported now.

llvm-svn: 350973

5 years agoChange from a to a . Fixes PR#39871.
Marshall Clow [Fri, 11 Jan 2019 21:57:12 +0000 (21:57 +0000)]
Change  from a  to a . Fixes PR#39871.

llvm-svn: 350972

5 years ago[ConstantFolding] Fold undef for integer intrinsics
Nikita Popov [Fri, 11 Jan 2019 21:18:00 +0000 (21:18 +0000)]
[ConstantFolding] Fold undef for integer intrinsics

This fixes https://bugs.llvm.org/show_bug.cgi?id=40110.

This implements handling of undef operands for integer intrinsics in
ConstantFolding, in particular for the bitcounting intrinsics (ctpop,
cttz, ctlz), the with.overflow intrinsics, the saturating math
intrinsics and the funnel shift intrinsics.

The undef behavior follows what InstSimplify does for the general cas
e of non-constant operands. For the bitcount intrinsics (where
InstSimplify doesn't do undef handling -- there cannot be a combination
of an undef + non-constant operand) I'm using a 0 result if the intrinsic
is defined for zero and undef otherwise.

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

llvm-svn: 350971

5 years ago[Darwin][Driver] Don't pass a file as object_path_lto during ThinLTO
Steven Wu [Fri, 11 Jan 2019 21:16:04 +0000 (21:16 +0000)]
[Darwin][Driver] Don't pass a file as object_path_lto during ThinLTO

Summary:
After r327851, Driver::GetTemporaryPath will create the file rather than
just create a potientially unqine filename. If clang driver pass the
file as parameter as -object_path_lto, ld64 will pass it back to libLTO
as GeneratedObjectsDirectory, which is going to cause a LLVM ERROR if it
is not a directory.
Now during thinLTO, pass a temp directory path to linker instread.

rdar://problem/47194182

Reviewers: arphaman, dexonsmith

Reviewed By: arphaman

Subscribers: mehdi_amini, inglorion, jkorous, cfe-commits

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

llvm-svn: 350970

5 years ago[SLP]Moved NVPTX test under NVPTX directory, NFC.
Alexey Bataev [Fri, 11 Jan 2019 20:42:48 +0000 (20:42 +0000)]
[SLP]Moved NVPTX test under NVPTX directory, NFC.

llvm-svn: 350969

5 years agoFix unchecked Error introduced in r350956
Alexandre Ganea [Fri, 11 Jan 2019 20:39:38 +0000 (20:39 +0000)]
Fix unchecked Error introduced in r350956

llvm-svn: 350968

5 years ago[SLP]Update test checks for the SPL vectorizer, NFC.
Alexey Bataev [Fri, 11 Jan 2019 20:21:14 +0000 (20:21 +0000)]
[SLP]Update test checks for the SPL vectorizer, NFC.

llvm-svn: 350967

5 years ago[X86] Fix incomplete handling of register-assigned variables in parsing.
Nirav Dave [Fri, 11 Jan 2019 20:17:36 +0000 (20:17 +0000)]
[X86] Fix incomplete handling of register-assigned variables in parsing.

Teach x86 assembly operand parsing to distinguish between assembler
variable assigned to named registers and those assigned to immediate
values.

Reviewers: rnk, nickdesaulniers, void

Subscribers: hiraditya, jyknight, llvm-commits

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

llvm-svn: 350966

5 years ago[Sanitizer] Disable getusershell interception for Android
David Carlier [Fri, 11 Jan 2019 20:09:24 +0000 (20:09 +0000)]
[Sanitizer] Disable getusershell interception for Android

Reviewers: vitalybuka, pcc, eugenis

Reviewed By: eugenis

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

llvm-svn: 350965

5 years agogn build: Create a variable for the host toolchain and start using it in the tblgen...
Peter Collingbourne [Fri, 11 Jan 2019 19:53:06 +0000 (19:53 +0000)]
gn build: Create a variable for the host toolchain and start using it in the tblgen template.

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

llvm-svn: 350964

5 years agogn build: s/root_out_dir/root_build_dir/g in llvm/utils/gn/build/write_cmake_config...
Peter Collingbourne [Fri, 11 Jan 2019 19:51:49 +0000 (19:51 +0000)]
gn build: s/root_out_dir/root_build_dir/g in llvm/utils/gn/build/write_cmake_config.gni.

This makes the generated files go to the right place when using a non-default toolchain.

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

llvm-svn: 350963

5 years ago[RISCV][NFC] Add CHECK lines for atomic operations on RV64I
Alex Bradbury [Fri, 11 Jan 2019 19:46:48 +0000 (19:46 +0000)]
[RISCV][NFC] Add CHECK lines for atomic operations on RV64I

As or RV32I, we include these for completeness. Committing now to make it
easier to review the RV64A patch.

llvm-svn: 350962

5 years ago[llvm-mca] Update tests for Exynos (NFC)
Evandro Menezes [Fri, 11 Jan 2019 19:36:27 +0000 (19:36 +0000)]
[llvm-mca] Update tests for Exynos (NFC)

Update test cases for Exynos M4.

llvm-svn: 350961

5 years ago[AArch64] Add pipeline model for Exynos M4
Evandro Menezes [Fri, 11 Jan 2019 19:36:25 +0000 (19:36 +0000)]
[AArch64] Add pipeline model for Exynos M4

Add the scheduling and cost model for Exynos M4.

llvm-svn: 350960

5 years ago[CMake] Export utility targets to the build/install tree depending on LLVM_BUILD...
Stefan Granitz [Fri, 11 Jan 2019 19:34:34 +0000 (19:34 +0000)]
[CMake] Export utility targets to the build/install tree depending on LLVM_BUILD/INSTALL_UTILS

Summary:
Allow external projects to import test-related targets like FileCheck, count, not etc. and query binary paths, properties, etc.
This would be useful for LLDB, because it reduces the difference between in-tree vs. standalone builds and simplifies CMake logic.

Reviewers: chapuni, gottesmm, beanz

Reviewed By: beanz

Subscribers: mgorny, lldb-commits, llvm-commits, #lldb

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

llvm-svn: 350959

5 years agoImplement Attr dumping in terms of visitors
Stephen Kelly [Fri, 11 Jan 2019 19:16:01 +0000 (19:16 +0000)]
Implement Attr dumping in terms of visitors

Remove now-vestigial dumpType and dumpBareDeclRef methods. The old
tablegen generated code used to expect them to be present, but the new
generated code has no such requirement.

Reviewers: aaron.ballman

Subscribers: mgorny, cfe-commits

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

llvm-svn: 350958

5 years ago[ASTDump] Add utility for dumping a label with child nodes
Stephen Kelly [Fri, 11 Jan 2019 19:11:17 +0000 (19:11 +0000)]
[ASTDump] Add utility for dumping a label with child nodes

Summary:
Use it to add optional label nodes to Stmt dumps.  This preserves
behavior of InitExprList dump:

// CHECK-NEXT: `-InitListExpr {{.+}} <col:13, col:15> 'U [3]'
// CHECK-NEXT:   |-array_filler: InitListExpr {{.+}} <col:15> 'U' field Field {{.+}} 'i' 'int'
// CHECK-NEXT:   `-InitListExpr {{.+}} <col:14> 'U' field Field {{.+}} 'i' 'int'
// CHECK-NEXT:     `-IntegerLiteral {{.+}} <col:14> 'int' 1

Reviewers: aaron.ballman

Subscribers: cfe-commits

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

llvm-svn: 350957

5 years ago[LLD][COFF] Support /ignore:4099. Support /ignore with comma-separated arguments.
Alexandre Ganea [Fri, 11 Jan 2019 19:10:01 +0000 (19:10 +0000)]
[LLD][COFF] Support /ignore:4099. Support /ignore with comma-separated arguments.

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

llvm-svn: 350956

5 years ago[Bug 39548][Clang] PGO bootstrap fails with python3: errors in perf-helper.py
Serge Guelton [Fri, 11 Jan 2019 19:04:48 +0000 (19:04 +0000)]
[Bug 39548][Clang] PGO bootstrap fails with python3: errors in perf-helper.py

Current clang fail to bootstrap in PGO mode when only python3 is available,
because perf-helper.py is not compatible with python3.

Commited on behalf of  Romain Geissler.

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

llvm-svn: 350955

5 years ago[test] Update support for Exynos M4 (NFC)
Evandro Menezes [Fri, 11 Jan 2019 18:54:41 +0000 (18:54 +0000)]
[test] Update support for Exynos M4 (NFC)

Update test cases for Exynos M4.

llvm-svn: 350954

5 years ago[AArch64] Create feature set for Exynos M4
Evandro Menezes [Fri, 11 Jan 2019 18:54:25 +0000 (18:54 +0000)]
[AArch64] Create feature set for Exynos M4

Complete the feature set for Exynos M4 and update test cases.

llvm-svn: 350953

5 years ago[MergeFunc] Update clang test for r350939
Vedant Kumar [Fri, 11 Jan 2019 18:51:02 +0000 (18:51 +0000)]
[MergeFunc] Update clang test for r350939

In r350939, the MergeFunc pass learned to erase duplicate functions
which are discardable if unused.

llvm-svn: 350952

5 years ago[Legalizer] Use correct ValueType of SELECT_CC node during Float promotion
Pirama Arumuga Nainar [Fri, 11 Jan 2019 18:46:02 +0000 (18:46 +0000)]
[Legalizer] Use correct ValueType of SELECT_CC node during Float promotion

Summary:
When legalizing the result of a SELECT_CC node by promoting the
floating-point type, use the promoted-to type rather than the original
type.

Fix PR40273.

Reviewers: efriedma, majnemer

Subscribers: llvm-commits

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

llvm-svn: 350951

5 years agoFix build breaks after the ParseCompileUnit changes.
Zachary Turner [Fri, 11 Jan 2019 18:35:58 +0000 (18:35 +0000)]
Fix build breaks after the ParseCompileUnit changes.

The addition of SymbolFileBreakpad crossed paths with my change,
so this interface needs to be fixed up as well.

llvm-svn: 350950

5 years ago[LTO] Add option to enable LTOUnit splitting, and disable unless needed
Teresa Johnson [Fri, 11 Jan 2019 18:32:07 +0000 (18:32 +0000)]
[LTO] Add option to enable LTOUnit splitting, and disable unless needed

Summary:
Adds a new -f[no]split-lto-unit flag that is disabled by default to
control module splitting during ThinLTO. It is automatically enabled
for -fsanitize=cfi and -fwhole-program-vtables.

The new EnableSplitLTOUnit codegen flag is passed down to llvm
via a new module flag of the same name.

Depends on D53890.

Reviewers: pcc

Subscribers: ormris, mehdi_amini, inglorion, eraman, steven_wu, dexonsmith, cfe-commits, llvm-commits

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

llvm-svn: 350949

5 years ago[LTO] Record whether LTOUnit splitting is enabled in index
Teresa Johnson [Fri, 11 Jan 2019 18:31:57 +0000 (18:31 +0000)]
[LTO] Record whether LTOUnit splitting is enabled in index

Summary:
Records in the module summary index whether the bitcode was compiled
with the option necessary to enable splitting the LTO unit
(e.g. -fsanitize=cfi, -fwhole-program-vtables, or -fsplit-lto-unit).

The information is passed down to the ModuleSummaryIndex builder via a
new module flag "EnableSplitLTOUnit", which is propagated onto a flag
on the summary index.

This is then used during the LTO link to check whether all linked
summaries were built with the same value of this flag. If not, an error
is issued when we detect a situation requiring whole program visibility
of the class hierarchy. This is the case when both of the following
conditions are met:
1) We are performing LowerTypeTests or Whole Program Devirtualization.
2) There are type tests or type checked loads in the code.

Note I have also changed the ThinLTOBitcodeWriter to also gate the
module splitting on the value of this flag.

Reviewers: pcc

Subscribers: ormris, mehdi_amini, Prazek, inglorion, eraman, steven_wu, dexonsmith, arphaman, dang, llvm-commits

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

llvm-svn: 350948