OSDN Git Service

android-x86/external-llvm.git
5 years ago[llvm-objdump] - Split disassembleObject() into two methods. NFCI.
George Rimar [Wed, 23 Jan 2019 10:33:26 +0000 (10:33 +0000)]
[llvm-objdump] - Split disassembleObject() into two methods. NFCI.

Currently, disassembleObject() is a ~550 lines length function.

This patch splits it into two, where first do all helper objects initializations
and calls the second which does all the rest job.
This is a straightforward split.

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

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

5 years ago[SystemZ] Fix test case for buildbot.
Jonas Paulsson [Wed, 23 Jan 2019 10:29:12 +0000 (10:29 +0000)]
[SystemZ]  Fix test case for buildbot.

llvm-clang-x86_64-expensive-checks-win triggered this assert:

"llvm.dbg.value intrinsic requires a !dbg attachment"

Hopefully, adding reasonable !dbg operands solves this.

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

5 years ago[ARM] Alter the register allocation order for minsize on Thumb2
David Green [Wed, 23 Jan 2019 10:18:30 +0000 (10:18 +0000)]
[ARM] Alter the register allocation order for minsize on Thumb2

Currently in Arm code, we allocate LR first, under the assumption that
it needs to be saved anyway. Unfortunately this has the disadvantage
that it will require any instructions using it to be the longer thumb2
instructions, not the shorter thumb1 ones.

This switches the order when we are optimising for minsize, returning to
the default order so that more lower registers can be used. It can end
up requiring more pushed registers, but on average produces smaller code.

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

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

5 years ago[llvm-symbolizer] Allow single letter command flags grouping.
Dmitry Venikov [Wed, 23 Jan 2019 09:49:37 +0000 (09:49 +0000)]
[llvm-symbolizer] Allow single letter command flags grouping.

Summary: Currently llvm-symbolizer doesn't allow flags combining. This patch allows such grouping behavior just like addr2line. Motivation: https://bugs.llvm.org/show_bug.cgi?id=40304

Reviewers: jhenderson, ruiu

Reviewed By: jhenderson

Subscribers: rupprecht, llvm-commits

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

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

5 years ago[ARM][CGP] Check trunc type before replacing
Sam Parker [Wed, 23 Jan 2019 09:18:44 +0000 (09:18 +0000)]
[ARM][CGP] Check trunc type before replacing

In the last stage of type promotion, we replace any zext that uses a
new trunc with the operand of the trunc. This is okay when we only
allowed one type to be optimised, but now its the case that the trunc
maybe needed to produce a more narrow type than the one we were
optimising for. So we need to check this before doing the replacement.

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

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

5 years ago[llvm-objcopy] [COFF] Clear the unwritten tail of coff_section::Header::Name
Martin Storsjo [Wed, 23 Jan 2019 09:12:53 +0000 (09:12 +0000)]
[llvm-objcopy] [COFF] Clear the unwritten tail of coff_section::Header::Name

This should fix the add-gnu-debuglink test on all buildbots.

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

5 years ago[DAGCombine] Enable more pre-indexed stores
Sam Parker [Wed, 23 Jan 2019 09:11:49 +0000 (09:11 +0000)]
[DAGCombine] Enable more pre-indexed stores

The current check in CombineToPreIndexedLoadStore is too
conversative, preventing a pre-indexed store when the base pointer
is a predecessor of the value being stored. Instead, we should check
the pointer operand of the store.

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

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

5 years ago[SLH][AArch64] Remove accidentally retained -debug-only line from test.
Kristof Beyls [Wed, 23 Jan 2019 09:10:12 +0000 (09:10 +0000)]
[SLH][AArch64] Remove accidentally retained -debug-only line from test.

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

5 years agoReapply: [llvm-objcopy] [COFF] Implement --add-gnu-debuglink
Martin Storsjo [Wed, 23 Jan 2019 08:25:28 +0000 (08:25 +0000)]
Reapply: [llvm-objcopy] [COFF] Implement --add-gnu-debuglink

This was reverted since it broke a couple buildbots. The reason
for the breakage is not yet known, but this time, the test has
got more diagnostics added, to hopefully allow figuring out
what goes wrong.

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

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

5 years ago[SLH] AArch64: correctly pick temporary register to mask SP
Kristof Beyls [Wed, 23 Jan 2019 08:18:39 +0000 (08:18 +0000)]
[SLH] AArch64: correctly pick temporary register to mask SP

As part of speculation hardening, the stack pointer gets masked with the
taint register (X16) before a function call or before a function return.
Since there are no instructions that can directly mask writing to the
stack pointer, the stack pointer must first be transferred to another
register, where it can be masked, before that value is transferred back
to the stack pointer.
Before, that temporary register was always picked to be x17, since the
ABI allows clobbering x17 on any function call, resulting in the
following instruction pattern being inserted before function calls and
returns/tail calls:

mov x17, sp
and x17, x17, x16
mov sp, x17
However, x17 can be live in those locations, for example when the call
is an indirect call, using x17 as the target address (blr x17).

To fix this, this patch looks for an available register just before the
call or terminator instruction and uses that.

In the rare case when no register turns out to be available (this
situation is only encountered twice across the whole test-suite), just
insert a full speculation barrier at the start of the basic block where
this occurs.

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

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

5 years ago[SystemZ] Handle DBG_VALUE instructions in two places in backend.
Jonas Paulsson [Wed, 23 Jan 2019 07:42:26 +0000 (07:42 +0000)]
[SystemZ]  Handle DBG_VALUE instructions in two places in backend.

Two backend optimizations failed to handle cases when compiled with -g, due
to failing to consider DBG_VALUE instructions. This was in
SystemZTargetLowering::emitSelect() and
SystemZElimCompare::getRegReferences().

This patch makes sure that DBG_VALUEs are recognized so that they do not
affect these optimizations.

Tests for branch-on-count, load-and-trap and consecutive selects.

Review: Ulrich Weigand
https://reviews.llvm.org/D57048

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

5 years ago[IRCE] Support narrow latch condition for wide range checks
Max Kazantsev [Wed, 23 Jan 2019 07:20:56 +0000 (07:20 +0000)]
[IRCE] Support narrow latch condition for wide range checks

This patch relaxes restrictions on types of latch condition and range check.
In current implementation, they should match. This patch allows to handle
wide range checks against narrow condition. The motivating example is the
following:

  int N = ...
  for (long i = 0; (int) i < N; i++) {
    if (i >= length) deopt;
  }

In this patch, the option that enables this support is turned off by
default. We'll wait until it is switched to true.

Differential Revision: https://reviews.llvm.org/D56837
Reviewed By: reames

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

5 years ago[Pipeliner] Add two pragmas to control software pipelining optimization
Brendon Cahoon [Wed, 23 Jan 2019 03:26:10 +0000 (03:26 +0000)]
[Pipeliner] Add two pragmas to control software pipelining optimization

#pragma clang loop pipeline(disable)

    Disable SWP optimization for the next loop.
    “disable” is the only possible value.

#pragma clang loop pipeline_initiation_interval(number)

    Set value of initiation interval for SWP
    optimization to specified number value for
    the next loop. Number is the positive value
    greater than 0.

These pragmas could be used for debugging or reducing
compile time purposes. It is possible to disable SWP for
concrete loops to save compilation time or to find bugs
by not doing SWP to certain loops. It is possible to set
value of initiation interval to concrete number to save
compilation time by not doing extra pipeliner passes or
to check created schedule for specific initiation interval.

That is llvm part of the fix

Clang part of fix: https://reviews.llvm.org/D55710

Patch by Alexey Lapshin!

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

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

5 years agohwasan: Move memory access checks into small outlined functions on aarch64.
Peter Collingbourne [Wed, 23 Jan 2019 02:20:10 +0000 (02:20 +0000)]
hwasan: Move memory access checks into small outlined functions on aarch64.

Each hwasan check requires emitting a small piece of code like this:
https://clang.llvm.org/docs/HardwareAssistedAddressSanitizerDesign.html#memory-accesses

The problem with this is that these code blocks typically bloat code
size significantly.

An obvious solution is to outline these blocks of code. In fact, this
has already been implemented under the -hwasan-instrument-with-calls
flag. However, as currently implemented this has a number of problems:
- The functions use the same calling convention as regular C functions.
  This means that the backend must spill all temporary registers as
  required by the platform's C calling convention, even though the
  check only needs two registers on the hot path.
- The functions take the address to be checked in a fixed register,
  which increases register pressure.
Both of these factors can diminish the code size effect and increase
the performance hit of -hwasan-instrument-with-calls.

The solution that this patch implements is to involve the aarch64
backend in outlining the checks. An intrinsic and pseudo-instruction
are created to represent a hwasan check. The pseudo-instruction
is register allocated like any other instruction, and we allow the
register allocator to select almost any register for the address to
check. A particular combination of (register selection, type of check)
triggers the creation in the backend of a function to handle the check
for specifically that pair. The resulting functions are deduplicated by
the linker. The pseudo-instruction (really the function) is specified
to preserve all registers except for the registers that the AAPCS
specifies may be clobbered by a call.

To measure the code size and performance effect of this change, I
took a number of measurements using Chromium for Android on aarch64,
comparing a browser with inlined checks (the baseline) against a
browser with outlined checks.

Code size: Size of .text decreases from 243897420 to 171619972 bytes,
or a 30% decrease.

Performance: Using Chromium's blink_perf.layout microbenchmarks I
measured a median performance regression of 6.24%.

The fact that a perf/size tradeoff is evident here suggests that
we might want to make the new behaviour conditional on -Os/-Oz.
But for now I've enabled it unconditionally, my reasoning being that
hwasan users typically expect a relatively large perf hit, and ~6%
isn't really adding much. We may want to revisit this decision in
the future, though.

I also tried experimenting with varying the number of registers
selectable by the hwasan check pseudo-instruction (which would result
in fewer variants being created), on the hypothesis that creating
fewer variants of the function would expose another perf/size tradeoff
by reducing icache pressure from the check functions at the cost of
register pressure. Although I did observe a code size increase with
fewer registers, I did not observe a strong correlation between the
number of registers and the performance of the resulting browser on the
microbenchmarks, so I conclude that we might as well use ~all registers
to get the maximum code size improvement. My results are below:

Regs | .text size | Perf hit
-----+------------+---------
~all | 171619972  | 6.24%
  16 | 171765192  | 7.03%
   8 | 172917788  | 5.82%
   4 | 177054016  | 6.89%

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

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

5 years agogn build: Merge r351820.
Peter Collingbourne [Wed, 23 Jan 2019 02:19:56 +0000 (02:19 +0000)]
gn build: Merge r351820.

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

5 years agogn build: Merge r351880
Nico Weber [Wed, 23 Jan 2019 02:10:10 +0000 (02:10 +0000)]
gn build: Merge r351880

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

5 years agoMemoryBlock: Do not automatically extend a given size to a multiple of page size.
Rui Ueyama [Wed, 23 Jan 2019 02:03:26 +0000 (02:03 +0000)]
MemoryBlock: Do not automatically extend a given size to a multiple of page size.

Previously, MemoryBlock automatically extends a requested buffer size to a
multiple of page size because (I believe) doing it was thought to be harmless
and with that you could get more memory (on average 2KiB on 4KiB-page systems)
"for free".

That programming interface turned out to be error-prone. If you request N
bytes, you usually expect that a resulting object returns N for `size()`.
That's not the case for MemoryBlock.

Looks like there is only one place where we take the advantage of
allocating more memory than the requested size. So, with this patch, I
simply removed the automatic size expansion feature from MemoryBlock
and do it on the caller side when needed. MemoryBlock now always
returns a buffer whose size is equal to the requested size.

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

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

5 years ago[llvm-objcopy] Remove os-dependent message from test
Jordan Rupprecht [Wed, 23 Jan 2019 01:42:02 +0000 (01:42 +0000)]
[llvm-objcopy] Remove os-dependent message from test

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

5 years ago[CodeView] Allow empty types in member functions
Josh Stone [Wed, 23 Jan 2019 00:53:22 +0000 (00:53 +0000)]
[CodeView] Allow empty types in member functions

Summary:
`CodeViewDebug::lowerTypeMemberFunction` used to default to a `Void`
return type if the function's type array was empty. After D54667, it
started blindly indexing the 0th item for the return type, which fails
in `getOperand` for empty arrays if assertions are enabled.

This patch restores the `Void` return type for empty type arrays, and
adds a test generated by Rust in line-only debuginfo mode.

Reviewers: zturner, rnk

Reviewed By: rnk

Subscribers: hiraditya, JDevlieghere, llvm-commits

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

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

5 years ago[llvm-objcopy] Fix error message for msvc tests
Jordan Rupprecht [Wed, 23 Jan 2019 00:35:04 +0000 (00:35 +0000)]
[llvm-objcopy] Fix error message for msvc tests

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

5 years ago[llvm-objcopy] Return Error from Buffer::allocate(), [ELF]Writer::finalize(), and...
Jordan Rupprecht [Tue, 22 Jan 2019 23:49:16 +0000 (23:49 +0000)]
[llvm-objcopy] Return Error from Buffer::allocate(), [ELF]Writer::finalize(), and [ELF]Writer::commit()

Summary:
This patch changes a few methods to return Error instead of manually calling error/reportError to abort. This will make it easier to extract into a library.

Note that error() takes just a string (this patch also adds an overload that takes an Error), while reportError() takes string + [error/code]. To help unify things, use FileError to associate a given filename with an error. Note that this takes some special care (for now), e.g. calling reportError(FileName, <something that could be FileError>) will duplicate the filename. The goal is to eventually remove reportError() and have every error associated with a file to be a FileError, and just one error handling block at the tool level.

This change was suggested in D56806. I took it a little further than suggested, but completely fixing llvm-objcopy will take a couple more patches. If this approach looks good, I'll commit this and apply similar patche(s) for the rest.

This change is NFC in terms of non-error related code, although the error message changes in one context.

Reviewers: alexshap, jhenderson, jakehehrlich, mstorsjo, espindola

Reviewed By: alexshap, jhenderson

Subscribers: llvm-commits, emaste, arichardson

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

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

5 years agoFixed isReMaterializable setting for LUI instruction.
Ana Pazos [Tue, 22 Jan 2019 22:59:47 +0000 (22:59 +0000)]
Fixed isReMaterializable setting for LUI instruction.

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

5 years ago[HotColdSplit] Calculate BFI lazily to reduce compile-time, NFC
Vedant Kumar [Tue, 22 Jan 2019 22:49:22 +0000 (22:49 +0000)]
[HotColdSplit] Calculate BFI lazily to reduce compile-time, NFC

The splitting pass does not need BFI unless the Module actually has a profile
summary. Do not calcualte BFI unless the summary is present.

For the sqlite3 amalgamation, this reduces time spent in the splitting pass
from 0.4% of the total to under 0.1%.

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

5 years ago[Chrono] Remove ATTRIBUTE_ALWAYS inline from Chrono.h.
Davide Italiano [Tue, 22 Jan 2019 22:49:19 +0000 (22:49 +0000)]
[Chrono] Remove ATTRIBUTE_ALWAYS inline from Chrono.h.

I discussed this with Pavel, who told me there was no real
thought behind this, and had no objection to remove the
attributes.

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

5 years ago[HotColdSplit] Calculate domtrees lazily to reduce compile-time, NFC
Vedant Kumar [Tue, 22 Jan 2019 22:49:08 +0000 (22:49 +0000)]
[HotColdSplit] Calculate domtrees lazily to reduce compile-time, NFC

The splitting pass does not need (post)domtrees until after it's found a
cold block. Defer domtree calculation until a cold block is found.

For the sqlite3 amalgamation, this reduces time spent in the splitting
pass from 0.8% of the total to 0.4%.

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

5 years ago[ADT] Move away from __attribute__((always_inline)).
Davide Italiano [Tue, 22 Jan 2019 22:40:35 +0000 (22:40 +0000)]
[ADT] Move away from __attribute__((always_inline)).

Some member functions of StringRef/SmallVector/StringSwitch
are marked with the `always_inline` attribute. The result
is that  the body of these functions is not emitted, hence the
debugger can't evaluate them (a typical example is
StringRef::size()), even if the code is built with `-O0`.

The main driver behind this was that of getting faster turnaround
when running `check-llvm`. A previous commit clarifies how to
get good performance when running the testsuite, so we can
get rid of the attribute here.

An alternative approach considered was that of using attribute `used`,
but in the end we preferred to not slap yet another attribute on
these functions.

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

5 years ago[LegalizeTypes] Add debug prints to the top of PromoteFloatOperand and PromoteFloatRe...
Craig Topper [Tue, 22 Jan 2019 22:33:55 +0000 (22:33 +0000)]
[LegalizeTypes] Add debug prints to the top of PromoteFloatOperand and PromoteFloatResult.

Also add debug prints in the default case of the switches in these routines.

Most if not all of the type legalization handlers already do this so this makes promoting floats consistent

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

5 years agoAMDGPU/GlobalISel: Start selectively legalizing 16-bit operations
Matt Arsenault [Tue, 22 Jan 2019 22:00:19 +0000 (22:00 +0000)]
AMDGPU/GlobalISel: Start selectively legalizing 16-bit operations

It might be a bit nicer to use the fancy .legalIf and co. predicates,
but this was requiring more boilerplate and disables the coverage
assertions.

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

5 years ago[Docs] Add a note clarifying how to get good test performances.
Davide Italiano [Tue, 22 Jan 2019 21:52:50 +0000 (21:52 +0000)]
[Docs] Add a note clarifying how to get good test performances.

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

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

5 years agoAMDGPU/GlobalISel: Handle legality/regbanks for 32/64-bit shifts
Matt Arsenault [Tue, 22 Jan 2019 21:51:38 +0000 (21:51 +0000)]
AMDGPU/GlobalISel: Handle legality/regbanks for 32/64-bit shifts

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

5 years agoFileOutputBuffer: handle mmap(2) failure
Rui Ueyama [Tue, 22 Jan 2019 21:49:56 +0000 (21:49 +0000)]
FileOutputBuffer: handle mmap(2) failure

If the underlying filesystem does not support mmap system call,
FileOutputBuffer may fail when it attempts to mmap an output temporary
file. This patch handles such situation.

Unfortunately, it looks like it is very hard to test this functionality
without a filesystem that doesn't support mmap using llvm-lit. I tested
this locally by passing an invalid parameter to mmap so that it fails and
falls back to the in-memory buffer. Maybe that's all what we can do.
I believe it is reasonable to submit this without a test.

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

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

5 years agoGlobalISel: Allow shift amount to be a different type
Matt Arsenault [Tue, 22 Jan 2019 21:42:11 +0000 (21:42 +0000)]
GlobalISel: Allow shift amount to be a different type

For AMDGPU the shift amount is never 64-bit, and
this needs to use a 32-bit shift.

X86 uses i8, but seemed to be hacking around this before.

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

5 years ago[FileCheck] Suppress old -v/-vv diags if dumping input
Joel E. Denny [Tue, 22 Jan 2019 21:41:42 +0000 (21:41 +0000)]
[FileCheck] Suppress old -v/-vv diags if dumping input

The old diagnostic form of the trace produced by -v and -vv looks
like:

```
check1:1:8: remark: CHECK: expected string found in input
CHECK: abc
       ^
<stdin>:1:3: note: found here
; abc def
  ^~~
```

When dumping annotated input is requested (via -dump-input), I find
that this old trace is not useful and is sometimes harmful:

1. The old trace is mostly redundant because the same basic
   information also appears in the input dump's annotations.

2. The old trace buries any error diagnostic between it and the input
   dump, but I find it useful to see any error diagnostic up front.

3. FILECHECK_OPTS=-dump-input=fail requests annotated input dumps only
   for failed FileCheck calls.  However, I have to also add -v or -vv
   to get a full set of annotations, and that can produce massive
   output from all FileCheck calls in all tests.  That's a real
   problem when I run this in the IDE I use, which grinds to a halt as
   it tries to capture all that output.

When -dump-input=fail|always, this patch suppresses the old trace from
-v or -vv.  Error diagnostics still print as usual.  If you want the
old trace, perhaps to see variable expansions, you can set
-dump-input=none (the default).

Reviewed By: probinson

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

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

5 years agoGlobalISel: Make buildConstant handle vectors
Matt Arsenault [Tue, 22 Jan 2019 21:31:02 +0000 (21:31 +0000)]
GlobalISel: Make buildConstant handle vectors

Produce a splat build_vector similar to how
SelectionDAG::getConstant does.

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

5 years ago[X86][AVX512F_SCALAR]: Adding full coverage of MC encoding for the AVX512F_SCALAR...
Craig Topper [Tue, 22 Jan 2019 20:48:24 +0000 (20:48 +0000)]
[X86][AVX512F_SCALAR]: Adding full coverage of MC encoding for the AVX512F_SCALAR isa sets. NFC

Adding MC regressions tests to cover the AVX512F_SCALAR isa sets.
This patch is part of a larger task to cover MC encoding of all X86 isa sets started in revision: https://reviews.llvm.org/D39952

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

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

5 years agoGlobalISel: Implement widen for extract_vector_elt elt type
Matt Arsenault [Tue, 22 Jan 2019 20:38:15 +0000 (20:38 +0000)]
GlobalISel: Implement widen for extract_vector_elt elt type

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

5 years agoGlobalISel: Implement fewerElementsVector for basic FP ops
Matt Arsenault [Tue, 22 Jan 2019 20:14:29 +0000 (20:14 +0000)]
GlobalISel: Implement fewerElementsVector for basic FP ops

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

5 years agoAdd missing include (cstdlib) to Demangle.h
Konstantin Zhuravlyov [Tue, 22 Jan 2019 19:18:18 +0000 (19:18 +0000)]
Add missing include (cstdlib) to Demangle.h

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

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

5 years agoAMDGPU/GlobalISel: Remove vectors from legal constant types
Matt Arsenault [Tue, 22 Jan 2019 19:04:51 +0000 (19:04 +0000)]
AMDGPU/GlobalISel: Remove vectors from legal constant types

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

5 years agoGlobalISel: Support narrowing zextload/sextload
Matt Arsenault [Tue, 22 Jan 2019 19:02:10 +0000 (19:02 +0000)]
GlobalISel: Support narrowing zextload/sextload

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

5 years ago[SelectionDAGBuilder] Defer C_Register Assignments to be in line with
Nirav Dave [Tue, 22 Jan 2019 18:57:49 +0000 (18:57 +0000)]
[SelectionDAGBuilder] Defer C_Register Assignments to be in line with
those of C_RegisterClass. NFCI.

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

5 years agoGlobalISel: Disallow vectors for G_CONSTANT/G_FCONSTANT
Matt Arsenault [Tue, 22 Jan 2019 18:53:41 +0000 (18:53 +0000)]
GlobalISel: Disallow vectors for G_CONSTANT/G_FCONSTANT

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

5 years agoFileOutputBuffer: Handle "-" as stdout.
Rui Ueyama [Tue, 22 Jan 2019 18:44:04 +0000 (18:44 +0000)]
FileOutputBuffer: Handle "-" as stdout.

I was honestly a bit surprised that we didn't do this before. This
patch is to handle "-" as the stdout so that if you pass `-o -` to
lld, for example, it writes an output to stdout instead of file `-`.

I thought that we might want to handle this at a higher level than
FileOutputBuffer, because if we land this patch, we can no longer
create a file whose name is `-` (there's a workaround though; you can
pass `./-` instead of `-`). However, because raw_fd_ostream already
handles `-` as a special file name, I think it's okay and actually
consistent to handle `-` as a special name in FileOutputBuffer.

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

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

5 years agoCodegen support for atomicrmw fadd/fsub
Matt Arsenault [Tue, 22 Jan 2019 18:36:06 +0000 (18:36 +0000)]
Codegen support for atomicrmw fadd/fsub

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

5 years agoReapply "IR: Add fp operations to atomicrmw"
Matt Arsenault [Tue, 22 Jan 2019 18:18:02 +0000 (18:18 +0000)]
Reapply "IR: Add fp operations to atomicrmw"

This reapplies commits r351778 and r351782 with
RISCV test fixes.

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

5 years ago[llvm-mca][X86] Tidyup avx512 placeholder tests
Simon Pilgrim [Tue, 22 Jan 2019 17:52:15 +0000 (17:52 +0000)]
[llvm-mca][X86] Tidyup avx512 placeholder tests

Ensure we keep avx512f/bw/dq + vl versions separate, add example broadcast tests - this should allow us to better the test coverage of test\CodeGen\X86\avx512-schedule.ll

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

5 years ago[DEBUGINFO, NVPTX] Enable support for the debug info on NVPTX target.
Alexey Bataev [Tue, 22 Jan 2019 17:43:37 +0000 (17:43 +0000)]
[DEBUGINFO, NVPTX] Enable support for the debug info on NVPTX target.

Summary: Enable full support for the debug info.

Reviewers: echristo

Subscribers: jholewinski, aprantl, JDevlieghere, llvm-commits

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

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

5 years agoRevert r351520, "Re-enable terminator folding in LoopSimplifyCFG"
Jordan Rupprecht [Tue, 22 Jan 2019 17:39:02 +0000 (17:39 +0000)]
Revert r351520, "Re-enable terminator folding in LoopSimplifyCFG"

This is still causing compilation crashes in some targets. Will follow up shortly with a repro.

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

5 years ago[DEBUG_INFO, NVPTX] Fix relocation info.
Alexey Bataev [Tue, 22 Jan 2019 17:24:16 +0000 (17:24 +0000)]
[DEBUG_INFO, NVPTX] Fix relocation info.

Summary: Initial function labels must follow the debug location for the correct relocation info generation.

Reviewers: tra, jlebar, echristo

Subscribers: jholewinski, llvm-commits

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

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

5 years ago[llvm-mca][X86] Add VPOPCNTDQ tests
Simon Pilgrim [Tue, 22 Jan 2019 17:19:44 +0000 (17:19 +0000)]
[llvm-mca][X86] Add VPOPCNTDQ tests

Matches test coverage of test\CodeGen\X86\avx512vpopcntdq-schedule.ll

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

5 years ago[x86] add partial undef 'and' test; NFC
Sanjay Patel [Tue, 22 Jan 2019 17:01:06 +0000 (17:01 +0000)]
[x86] add partial undef 'and' test; NFC

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

5 years ago[docs] Scudo: document error messages & their potential cause
Kostya Kortchinsky [Tue, 22 Jan 2019 16:43:45 +0000 (16:43 +0000)]
[docs] Scudo: document error messages & their potential cause

Summary:
A couple of changes in the Scudo documentation:
- tag the shell code blocks as `console`;
- document error messages that are displayed in some termination conditions,
  the reason they triggered, and potential causes.

Reviewers: eugenis, enh

Reviewed By: eugenis

Subscribers: llvm-commits

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

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

5 years agoAdd DIGlobalVariableExpression to LangRef
Adrian Prantl [Tue, 22 Jan 2019 16:40:18 +0000 (16:40 +0000)]
Add DIGlobalVariableExpression to LangRef

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

5 years ago[llvm-mca][X86] Add missing CLWB/CLZERO/FSGSBASE/LWP/MWAITX/RDPID/SHA tests
Simon Pilgrim [Tue, 22 Jan 2019 16:39:28 +0000 (16:39 +0000)]
[llvm-mca][X86] Add missing CLWB/CLZERO/FSGSBASE/LWP/MWAITX/RDPID/SHA tests

We're getting pretty close to matching/exceeding test coverage of the test\CodeGen\X86\*-schedule.ll files, which should allow us to get rid of -print-schedule and fix PR37160

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

5 years ago[llvm-mca][X86] Add missing enter/leave, invlpg/invlpga, rdmsr/wrmsr, rdpmc and rdtsc...
Simon Pilgrim [Tue, 22 Jan 2019 16:29:26 +0000 (16:29 +0000)]
[llvm-mca][X86] Add missing enter/leave, invlpg/invlpga, rdmsr/wrmsr, rdpmc and rdtsc/rdtscp tests

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

5 years ago[x86] add another partial undef vector binop test; NFC
Sanjay Patel [Tue, 22 Jan 2019 16:26:09 +0000 (16:26 +0000)]
[x86] add another partial undef vector binop test; NFC

The existing test unintentionally shows that we have prematurely
optimized the shuffle into a vector concat and lost the undef info,
so it is not affected by a basic improvement to
SimplifyDemandedVectorElts.

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

5 years agoUse response file when generating LLVM-C.dll
Serge Guelton [Tue, 22 Jan 2019 16:25:17 +0000 (16:25 +0000)]
Use response file when generating LLVM-C.dll

As discovered in D56774 the command line gets to long, so use a response file to give the script the libs. This change has been tested and is confirmed working for me.

Commited on behalf of Jakob Bornecrantz

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

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

5 years ago[llvm-mca][X86] Add missing mfence/pinsrw tests
Simon Pilgrim [Tue, 22 Jan 2019 16:01:08 +0000 (16:01 +0000)]
[llvm-mca][X86] Add missing mfence/pinsrw tests

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

5 years ago[llvm-mca][X86] Add missing monitor/mwait tests
Simon Pilgrim [Tue, 22 Jan 2019 15:48:16 +0000 (15:48 +0000)]
[llvm-mca][X86] Add missing monitor/mwait tests

These technically should be under a MONITOR cpuid bit, but we tag them as SSE3 so I've done that here as well.

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

5 years ago[llvm-mca][X86] Add missing vperm2i128 tests
Simon Pilgrim [Tue, 22 Jan 2019 14:54:24 +0000 (14:54 +0000)]
[llvm-mca][X86] Add missing vperm2i128 tests

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

5 years ago[llvm-mca][X86] Add missing tzcntw tests
Simon Pilgrim [Tue, 22 Jan 2019 14:53:52 +0000 (14:53 +0000)]
[llvm-mca][X86] Add missing tzcntw tests

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

5 years ago[DAGCombiner] narrow vector binop with 2 insert subvector operands
Sanjay Patel [Tue, 22 Jan 2019 14:24:13 +0000 (14:24 +0000)]
[DAGCombiner] narrow vector binop with 2 insert subvector operands

vecbo (insertsubv undef, X, Z), (insertsubv undef, Y, Z) --> insertsubv VecC, (vecbo X, Y), Z

This is another step in generic vector narrowing. It's also a step towards more horizontal op
formation specifically for x86 (although we still failed to match those in the affected tests).

The scalarization cases are also not optimal (we should be scalarizing those), but it's still
an improvement to use a narrower vector op when we know part of the result must be constant
because both inputs are undef in some vector lanes.

I think a similar match but checking for a constant operand might help some of the cases in
D51553.

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

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

5 years ago[llvm-objdump] - Introduce getRelocsMap() helper. NFCI.
George Rimar [Tue, 22 Jan 2019 14:09:37 +0000 (14:09 +0000)]
[llvm-objdump] - Introduce getRelocsMap() helper. NFCI.

Currently disassembleObject() is a ~550 lines length function.
This patch extracts the code that creates a section->their relocation
mapping into a new helper function to simplify/reduce it a bit.

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

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

5 years ago[RISCV][NFC] Change naming scheme for RISC-V specific DAG nodes
Alex Bradbury [Tue, 22 Jan 2019 14:05:11 +0000 (14:05 +0000)]
[RISCV][NFC] Change naming scheme for RISC-V specific DAG nodes

Previously we had names like 'Call' or 'Tail'. This potentially clashes with
the naming scheme used elsewhere in RISCVInstrInfo.td. Many other backends
would use names like AArch64call or PPCtail. I prefer the SystemZ approach,
which uses prefixed all-lowercase names. This matches the naming scheme used
for target-independent SelectionDAG nodes.

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

5 years ago[MCA] Add tests for int-to-fpu transfer delays. NFC
Andrea Di Biagio [Tue, 22 Jan 2019 13:59:08 +0000 (13:59 +0000)]
[MCA] Add tests for int-to-fpu transfer delays. NFC

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

5 years agoSlight fix for r351820
Serge Guelton [Tue, 22 Jan 2019 13:57:29 +0000 (13:57 +0000)]
Slight fix for r351820

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

5 years agoFix llvm::is_trivially_copyable portability issues
Serge Guelton [Tue, 22 Jan 2019 13:48:55 +0000 (13:48 +0000)]
Fix llvm::is_trivially_copyable portability issues

llvm::is_trivially_copyable portability is verified at compile time using
std::is_trivially_copyable as the reference implementation.

Unfortunately, the latter is not available on all platforms, so introduce
a proper configure check to detect if it is available on the target platform.

In a similar manner, std::is_copy_assignable is not fully supported for gcc4.9.
Provide a portable (?) implementation instead.

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

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

5 years ago[X86][SSE] Canonicalize OR(AND(X,C),AND(Y,~C)) -> OR(AND(X,C),ANDNP(C,Y))
Simon Pilgrim [Tue, 22 Jan 2019 13:44:49 +0000 (13:44 +0000)]
[X86][SSE] Canonicalize OR(AND(X,C),AND(Y,~C)) -> OR(AND(X,C),ANDNP(C,Y))

For constant bit select patterns, replace one AND with a ANDNP, allowing us to reuse the constant mask. Only do this if the mask has multiple uses (to avoid losing load folding) or if we have XOP as its VPCMOV can handle most folding commutations.

This also requires computeKnownBitsForTargetNode support for X86ISD::ANDNP and X86ISD::FOR to prevent regressions in fabs/fcopysign patterns.

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

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

5 years ago[X86][BtVer2] SSE2 vector shifts has local forwarding disabled
Simon Pilgrim [Tue, 22 Jan 2019 13:27:18 +0000 (13:27 +0000)]
[X86][BtVer2] SSE2 vector shifts has local forwarding disabled

Similar to horizontal ops on D56777, the sse2 (but not mmx) bit shift ops has local forwarding disabled, adding +1cy to the use latency for the result.

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

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

5 years agoFix "comparison of unsigned expression >= 0 is always true" warning. NFCI.
Simon Pilgrim [Tue, 22 Jan 2019 13:18:26 +0000 (13:18 +0000)]
Fix "comparison of unsigned expression >= 0 is always true" warning. NFCI.

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

5 years ago[X86][BtVer2] X86ISD::VPERMILPV has local forwarding disabled
Simon Pilgrim [Tue, 22 Jan 2019 13:13:57 +0000 (13:13 +0000)]
[X86][BtVer2] X86ISD::VPERMILPV has local forwarding disabled

Similar to horizontal ops on D56777, the vpermilpd/vpermilps variable mask ops has local forwarding disabled, adding +1cy to the use latency for the result.

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

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

5 years agoRevert "[llvm-objcopy] [COFF] Implement --add-gnu-debuglink"
Martin Storsjo [Tue, 22 Jan 2019 12:35:34 +0000 (12:35 +0000)]
Revert "[llvm-objcopy] [COFF] Implement --add-gnu-debuglink"

This reverts commit r351801, as it caused errors on (so far)
ppc64be and aarch64 buildbots - the reason is yet unknown.

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

5 years ago[CostModel][X86] Add ICMP Predicate specific costs
Simon Pilgrim [Tue, 22 Jan 2019 12:29:38 +0000 (12:29 +0000)]
[CostModel][X86] Add ICMP Predicate specific costs

First step towards PR40376, this patch adds support for getCmpSelInstrCost to use the (optional) Instruction CmpInst predicate to indicate the type of integer comparison we're performing and alter the costs accordingly.

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

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

5 years ago[X86][SSE] Add selective commutation support for insertps (PR40340)
Simon Pilgrim [Tue, 22 Jan 2019 12:17:48 +0000 (12:17 +0000)]
[X86][SSE] Add selective commutation support for insertps (PR40340)

When we are inserting 1 "inline" element, and zeroing 2 of the other elements then we can safely commute the insertps source inputs to improve memory folding.

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

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

5 years ago[RISCV] Quick fix for PR40333
Alex Bradbury [Tue, 22 Jan 2019 12:11:53 +0000 (12:11 +0000)]
[RISCV] Quick fix for PR40333

Avoid the infinite loop caused by the target DAG combine converting ANYEXT to
SIGNEXT and the target-independent DAG combine logic converting back to
ANYEXT. Do this by not adding the new node to the worklist.

Committing directly as this definitely doesn't make the problem any worse, and
I intend to follow-up with a patch that avoids this custom combiner logic
altogether and just lowers the i32 operations to a target-specific
SelectionDAG node. This should be easier to reason about and improve codegen
quality in some cases (though may miss out on some later DAG combines).

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

5 years ago[LoopPredication] Support guards expressed as branches by widenable condition
Max Kazantsev [Tue, 22 Jan 2019 11:49:06 +0000 (11:49 +0000)]
[LoopPredication] Support guards expressed as branches by widenable condition

This patch adds support of guards expressed as branches by widenable
conditions in Loop Predication.

Differential Revision: https://reviews.llvm.org/D56081
Reviewed By: reames

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

5 years ago[X86] Add test for matchAddressRecursively's MUL handling
Simon Pilgrim [Tue, 22 Jan 2019 11:39:21 +0000 (11:39 +0000)]
[X86] Add test for matchAddressRecursively's MUL handling

Noticed in code coverage tests that this isn't tested.

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

5 years ago[NFC] Add function to parse widenable conditional branches
Max Kazantsev [Tue, 22 Jan 2019 11:21:32 +0000 (11:21 +0000)]
[NFC] Add function to parse widenable conditional branches

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

5 years ago[llvm-objcopy] [COFF] Implement --add-gnu-debuglink
Martin Storsjo [Tue, 22 Jan 2019 10:58:18 +0000 (10:58 +0000)]
[llvm-objcopy] [COFF] Implement --add-gnu-debuglink

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

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

5 years ago[llvm-objcopy] [COFF] Update symbol indices in weak externals
Martin Storsjo [Tue, 22 Jan 2019 10:58:09 +0000 (10:58 +0000)]
[llvm-objcopy] [COFF] Update symbol indices in weak externals

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

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

5 years ago[llvm-objcopy] Consistently use createStringError instead of make_error<StringError>
Martin Storsjo [Tue, 22 Jan 2019 10:57:59 +0000 (10:57 +0000)]
[llvm-objcopy] Consistently use createStringError instead of make_error<StringError>

This was requested in the review of D57006.

Also add missing quotes around symbol names in error messages.

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

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

5 years ago[NFC][llvm-readobj]Normalise --/- inconsistency in test options
James Henderson [Tue, 22 Jan 2019 10:57:21 +0000 (10:57 +0000)]
[NFC][llvm-readobj]Normalise --/- inconsistency in test options

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

5 years ago[X86] HADDPS/HADDPD scalar lowering was added at rL350421
Simon Pilgrim [Tue, 22 Jan 2019 10:49:41 +0000 (10:49 +0000)]
[X86] HADDPS/HADDPD scalar lowering was added at rL350421

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

5 years agoRevert r351778: IR: Add fp operations to atomicrmw
Chandler Carruth [Tue, 22 Jan 2019 10:29:58 +0000 (10:29 +0000)]
Revert r351778: IR: Add fp operations to atomicrmw

This broke the RISCV build, and even with that fixed, one of the RISCV
tests behaves surprisingly differently with asserts than without,
leaving there no clear test pattern to use. Generally it seems bad for
hte IR to differ substantially due to asserts (as in, an alloca is used
with asserts that isn't needed without!) and nothing I did simply would
fix it so I'm reverting back to green.

This also required reverting the RISCV build fix in r351782.

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

5 years ago[llvm-symbolizer] Add support for --basenames/-s
James Henderson [Tue, 22 Jan 2019 10:24:32 +0000 (10:24 +0000)]
[llvm-symbolizer] Add support for --basenames/-s

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

--basenames is a GNU addr2line switch which strips the directory names
from the file path in the output.

Reviewed by: ruiu

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

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

5 years ago[NFC] Factor out some reusable logic
Max Kazantsev [Tue, 22 Jan 2019 10:13:36 +0000 (10:13 +0000)]
[NFC] Factor out some reusable logic

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

5 years ago[NFC] Add detector for guards expressed as branch by widenable conditions
Max Kazantsev [Tue, 22 Jan 2019 09:36:22 +0000 (09:36 +0000)]
[NFC] Add detector for guards expressed as branch by widenable conditions

This patch adds a function to detect guards expressed in explicit control
flow form as branch by `and` with widenable condition intrinsic call:

    %wc = call i1 @llvm.experimental.widenable.condition()
    %guard_cond = and i1, %some_cond, %wc
    br i1 %guard_cond, label %guarded, label %deopt

  deopt:
    <maybe some non-side-effecting instructions>
    deoptimize()

This form can be used as alternative to implicit control flow guard
representation expressed by `experimental_guard` intrinsic.

Differential Revision: https://reviews.llvm.org/D56074
Reviewed By: reames

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

5 years ago[llvm-readelf]Revert --dyn-symbols behaviour to make it GNU compatible, and add new...
James Henderson [Tue, 22 Jan 2019 09:35:35 +0000 (09:35 +0000)]
[llvm-readelf]Revert --dyn-symbols behaviour to make it GNU compatible, and add new --hash-symbols switch for old behaviour

In r287786, the behaviour of --dyn-symbols in llvm-readelf (but not
llvm-readobj) was changed to print the dynamic symbols as derived from
the hash table, rather than to print the dynamic symbol table contents
directly. The original change was initially submitted without review,
and some comments were made on the commit mailing list implying that the
new behavious is GNU compatible. I argue that it is not:

  1) It does not include a null symbol.
  2) It prints the symbols based on an order derived from the hash
     table.
  3) It prints an extra column indicating which bucket it came from.
     This could break parsers that expect a fixed number of columns,
     with the first column being the symbol index.
  4) If the input happens to have both .hash and .gnu.hash section, it
     prints interpretations of them both, resulting in most symbols
     being printed twice.
  5) There is no way of just printing the raw dynamic symbol table,
     because --symbols also prints the static symbol table.

This patch reverts the --dyn-symbols behaviour back to its old behaviour
of just printing the contents of the dynamic symbol table, similar to
what is printed by --symbols. As the hashed interpretation is still
desirable to validate the hash table, it puts it under a new switch
"--hash-symbols". This is a no-op on all output forms except for GNU
output style for ELF. If there is no hash table, it does nothing,
unlike the previous behaviour which printed the raw dynamic symbol
table, since the raw dynsym is available under --dyn-symbols.

The yaml input for the test is based on that in
test/tools/llvm-readobj/demangle.test, but stripped down to the bare
minimum to provide a valid dynamic symbol.

Note: some LLD tests needed updating. I will commit a separate patch for
those.

Reviewed by: grimar, rupprecht

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

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

5 years agoRevert "Remove static_assert(value == std::is_trivially_copyable<T>::value)"
Vitaly Buka [Tue, 22 Jan 2019 07:22:45 +0000 (07:22 +0000)]
Revert "Remove static_assert(value == std::is_trivially_copyable<T>::value)"

Upgraded the bot as workaround.

This reverts commit r351784.

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

5 years ago[RISCV][NFC] Add break to case statement in RISCVDAGToDAGISel::Select
Alex Bradbury [Tue, 22 Jan 2019 07:22:00 +0000 (07:22 +0000)]
[RISCV][NFC] Add break to case statement in RISCVDAGToDAGISel::Select

The break isn't strictly needed yet as there is no subsequent entry in the
case. But adding to prevent mistakes further down the road.

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

5 years agoRemove static_assert(value == std::is_trivially_copyable<T>::value)
Vitaly Buka [Tue, 22 Jan 2019 06:26:50 +0000 (06:26 +0000)]
Remove static_assert(value == std::is_trivially_copyable<T>::value)

This fails to compile with clang ang libstdc++ 4.6

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

5 years ago[RISCV] Fix build after r351778
Alex Bradbury [Tue, 22 Jan 2019 05:06:57 +0000 (05:06 +0000)]
[RISCV] Fix build after r351778

Also add a comment to explain the expansion strategy for atomicrmw
{fadd,fsub}.

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

5 years agoIR: Add fp operations to atomicrmw
Matt Arsenault [Tue, 22 Jan 2019 03:32:36 +0000 (03:32 +0000)]
IR: Add fp operations to atomicrmw

Add just fadd/fsub for now.

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

5 years ago[ARM] Combine ands+lsls to lsls+lsrs for Thumb1.
Eli Friedman [Tue, 22 Jan 2019 01:51:37 +0000 (01:51 +0000)]
[ARM] Combine ands+lsls to lsls+lsrs for Thumb1.

This patch may seem familiar... but my previous patch handled the
equivalent lsls+and, not this case.  Usually instcombine puts the
"and" after the shift, so this case doesn't come up. However, if the
shift comes out of a GEP, it won't get canonicalized by instcombine,
and DAGCombine doesn't have an equivalent transform.

This also modifies isDesirableToCommuteWithShift to suppress DAGCombine
transforms which would make the overall code worse.

I'm not really happy adding a bunch of code to handle this, but it would
probably be tricky to substantially improve the behavior of DAGCombine
here.

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

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

5 years ago[CVP] Use LVI to constant fold deopt operands
Philip Reames [Tue, 22 Jan 2019 01:34:33 +0000 (01:34 +0000)]
[CVP] Use LVI to constant fold deopt operands

Deopt operands are generally intended to record information about a site in code with minimal perturbation of the surrounding code. Idiomatically, they also tend to appear down rare paths. Putting these together, we have an obvious case for extending CVP w/deopt operand constant folding. Arguably, we should be doing this for all operands on all instructions, but that's definitely a much larger and risky change.

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

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

5 years ago[LangRef] Clarify semantics of volatile operations.
Eli Friedman [Tue, 22 Jan 2019 00:42:20 +0000 (00:42 +0000)]
[LangRef] Clarify semantics of volatile operations.

Specifically, clarify the following:

1. Volatile load and store may access addresses that are not memory.
2. Volatile load and store do not modify arbitrary memory.
3. Volatile load and store do not trap.

Prompted by recent volatile discussion on llvmdev.

Currently, there's sort of a split in the source code about whether
volatile operations are allowed to trap; this resolves that dispute in
favor of not allowing them to trap.

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

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

5 years agoGlobalISel: Fix out of bounds crashes in verifier
Matt Arsenault [Tue, 22 Jan 2019 00:29:37 +0000 (00:29 +0000)]
GlobalISel: Fix out of bounds crashes in verifier

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

5 years ago[AArch64] Add patterns for zext/sext of shift amount.
Eli Friedman [Tue, 22 Jan 2019 00:21:35 +0000 (00:21 +0000)]
[AArch64] Add patterns for zext/sext of shift amount.

Not sure this is the best fix, but it saves an instruction for certain
constructs involving variable shifts.

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

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

5 years agoAMDGPU/GlobalISel: Legalize more fp<->int conversions
Matt Arsenault [Tue, 22 Jan 2019 00:20:17 +0000 (00:20 +0000)]
AMDGPU/GlobalISel: Legalize more fp<->int conversions

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

5 years agoDocument toolchain update policy
JF Bastien [Mon, 21 Jan 2019 23:53:52 +0000 (23:53 +0000)]
Document toolchain update policy

Summary:
Capture the current agreed-upon toolchain update policy based on the following
discussions:

  - LLVM dev meeting 2018 BoF "Migrating to C++14, and beyond!"
    llvm.org/devmtg/2018-10/talk-abstracts.html#bof3
  - A Short Policy Proposal Regarding Host Compilers
    lists.llvm.org/pipermail/llvm-dev/2018-May/123238.html
  - Using C++14 code in LLVM (2018)
    lists.llvm.org/pipermail/llvm-dev/2018-May/123182.html
  - Using C++14 code in LLVM (2017)
    lists.llvm.org/pipermail/llvm-dev/2017-October/118673.html
  - Using C++14 code in LLVM (2016)
    lists.llvm.org/pipermail/llvm-dev/2016-October/105483.html
  - Document and Enforce new Host Compiler Policy
    llvm.org/D47073
  - Require GCC 5.1 and LLVM 3.5 at a minimum
    llvm.org/D46723

Subscribers: jkorous, dexonsmith, llvm-commits

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

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