platform/upstream/llvm.git
6 years ago[InstCombine][NFC] Regenerate checks in and-or-not.ll
Roman Lebedev [Thu, 26 Apr 2018 21:13:09 +0000 (21:13 +0000)]
[InstCombine][NFC] Regenerate checks in and-or-not.ll

llvm-svn: 330994

6 years agoRevert "Fix a bug that prevents global variables from having a DW_OP_deref."
Adrian Prantl [Thu, 26 Apr 2018 20:59:58 +0000 (20:59 +0000)]
Revert "Fix a bug that prevents global variables from having a DW_OP_deref."

This reverts commit r3309704 while investigating bot breakage.

llvm-svn: 330993

6 years ago[InstCombine] Simplify Add with remainder expressions as operands.
Sanjoy Das [Thu, 26 Apr 2018 20:52:28 +0000 (20:52 +0000)]
[InstCombine] Simplify Add with remainder expressions as operands.

Summary:
Simplify integer add expression X % C0 + (( X / C0 ) % C1) * C0 to
X % (C0 * C1).  This is a common pattern seen in code generated by the XLA
GPU backend.

Add test cases for this new optimization.

Patch by Bixia Zheng!

Reviewers: sanjoy

Reviewed By: sanjoy

Subscribers: efriedma, craig.topper, lebedev.ri, llvm-commits, jlebar

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

llvm-svn: 330992

6 years agoAdd test cases to prepare for the optimization that simplifies Add with
Sanjoy Das [Thu, 26 Apr 2018 20:52:27 +0000 (20:52 +0000)]
Add test cases to prepare for the optimization that simplifies Add with
remainder expressions as operands.

Summary:
Add test cases to prepare for the new optimization that Simplifies integer add
expression X % C0 + (( X / C0 ) % C1) * C0 to X % (C0 * C1).

Patch by Bixia Zheng!

Reviewers: sanjoy

Reviewed By: sanjoy

Subscribers: jlebar, llvm-commits

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

llvm-svn: 330991

6 years ago[asan] Align __asan_global_start so that it works with LLD
Reid Kleckner [Thu, 26 Apr 2018 20:46:50 +0000 (20:46 +0000)]
[asan] Align __asan_global_start so that it works with LLD

Otherwise LLD will not align the .ASAN$GA section start, and
&__asan_globals + 1 will not be the start of the next real ASan global
metadata in .ASAN$GL.

We discovered this issue when attempting to use LLD on Windows in
Chromium: https://crbug.com/837090

llvm-svn: 330990

6 years agoEnable full debug info in the ASan runtime on Windows
Reid Kleckner [Thu, 26 Apr 2018 20:34:19 +0000 (20:34 +0000)]
Enable full debug info in the ASan runtime on Windows

Clang-cl supports the -gline-tables-only flag, so we were going down
that path. Honestly, we should just go ahead and enable full codeview
support.

llvm-svn: 330989

6 years ago[GlobalISel] Reporting rules covered as part of the InstructionSelect's debug-only...
Roman Tereshin [Thu, 26 Apr 2018 20:22:17 +0000 (20:22 +0000)]
[GlobalISel] Reporting rules covered as part of the InstructionSelect's debug-only printing

The main goal of this change is to make it much easier to track which
rules are actually covered by Testgen'erated regression tests.

Reviewers: aemerson, dsanders

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

llvm-svn: 330988

6 years ago[X86] Make __builtin_ia32_readeflags_u32 and __builtin_ia32_writeeflags_u32 only...
Craig Topper [Thu, 26 Apr 2018 20:14:46 +0000 (20:14 +0000)]
[X86] Make __builtin_ia32_readeflags_u32 and __builtin_ia32_writeeflags_u32 only available on 32-bit targets.

These builtins can't be handled by the backend on 64-bit targets. So error up front instead of throwing an isel error.

Fixes PR37225

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

llvm-svn: 330987

6 years ago[InstCombine][NFC] add2.ll: add a few commutative checks.
Roman Lebedev [Thu, 26 Apr 2018 20:07:17 +0000 (20:07 +0000)]
[InstCombine][NFC] add2.ll: add a few commutative checks.

Fixes some missing test coverage in InstCombineAddSub.cpp, visitAdd()

llvm-svn: 330986

6 years ago[InstCombine][NFC] Autogenerate checks in add2.ll
Roman Lebedev [Thu, 26 Apr 2018 20:07:12 +0000 (20:07 +0000)]
[InstCombine][NFC] Autogenerate checks in add2.ll

llvm-svn: 330985

6 years ago[LLD][WASM] Handle WASM_SYMBOL_TYPE_SECTION in toString().
Roman Lebedev [Thu, 26 Apr 2018 20:00:11 +0000 (20:00 +0000)]
[LLD][WASM] Handle WASM_SYMBOL_TYPE_SECTION in toString().

Fixes build. If this is not the desired solution, please revert.
WasmSymbolType was changed in rL330982 / D44184

llvm-svn: 330984

6 years ago[mips] Accept 32-bit offsets for lb and lbu commands
Simon Atanasyan [Thu, 26 Apr 2018 19:55:28 +0000 (19:55 +0000)]
[mips] Accept 32-bit offsets for lb and lbu commands

`lb` and `lbu` commands accepts 16-bit signed offsets. But GAS accepts
larger offsets for these commands. If an offset does not fit in 16-bit
range, `lb` command is translated into lui/lb or lui/addu/lb series.
It's interesting that initially LLVM assembler supported this feature,
but later it was broken.

This patch restores support for 32-bit offsets. It replaces `mem_simm16`
operand for `LB` and `LBu` definitions by the new `mem_simmptr` operand.
This operand is intended to check that offset fits to the same size as
using for pointers. Later we will be able to extend this rule and
accepts 64-bit offsets when it is possible.

Some issues remain:
- The regression also affects LD, SD, LH, LHU commands. I'm going
  to fix them by a separate patch.

- GAS accepts any 32-bit values as an offset. Now LLVM accepts signed
  16-bit values and this patch extends the range to signed 32-bit offsets.
  In other words, the following code accepted by GAS and still triggers
  an error by LLVM:
```
  lb      $4, 0x80000004

  # gas
  lui     a0, 0x8000
    lb      a0, 4(a0)
```

- In case of 64-bit pointers GAS accepts a 64-bit offset and translates
  it to the li/dsll/lb series of commands. LLVM still rejects it.
  Probably this feature has never been implemented in LLVM. This issue
  is for a separate patch.
```
  lb      $4, 0x800000001

  # gas
  li      a0, 0x8000
  dsll    a0, a0, 0x14
  lb      a0, 4(a0)
```

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

llvm-svn: 330983

6 years ago[WebAssembly] Write DWARF data into wasm object file
Sam Clegg [Thu, 26 Apr 2018 19:27:28 +0000 (19:27 +0000)]
[WebAssembly] Write DWARF data into wasm object file

- Writes ".debug_XXX" into corresponding custom sections.
- Writes relocation records into "reloc.debug_XXX" sections.

Patch by Yury Delendik!

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

llvm-svn: 330982

6 years agoDAG: Fix not legalizing vector fcanonicalizes
Matt Arsenault [Thu, 26 Apr 2018 19:21:37 +0000 (19:21 +0000)]
DAG: Fix not legalizing vector fcanonicalizes

If an fcanoncialize was done on a vector type that was legal,

llvm-svn: 330981

6 years agoAMDGPU: Extend extract_vector_elt fneg combine to fabs
Matt Arsenault [Thu, 26 Apr 2018 19:21:32 +0000 (19:21 +0000)]
AMDGPU: Extend extract_vector_elt fneg combine to fabs

Fixes a regression in a future commit.

llvm-svn: 330980

6 years agoAMDGPU: Consolidate SubtargetPredicate definitions
Matt Arsenault [Thu, 26 Apr 2018 19:21:26 +0000 (19:21 +0000)]
AMDGPU: Consolidate SubtargetPredicate definitions

llvm-svn: 330979

6 years agoDelete unused variable.
Rafael Espindola [Thu, 26 Apr 2018 19:21:07 +0000 (19:21 +0000)]
Delete unused variable.

llvm-svn: 330978

6 years agoSpecify REQUIRES: default_triple in a few tests
Justin Bogner [Thu, 26 Apr 2018 19:15:25 +0000 (19:15 +0000)]
Specify REQUIRES: default_triple in a few tests

These were all failing when specifying LLVM_DEFAULT_TARGET_TRIPLE=''.

llvm-svn: 330977

6 years ago[AArch64] Fix scavenged spill slot base when stack realignment required.
Geoff Berry [Thu, 26 Apr 2018 18:50:45 +0000 (18:50 +0000)]
[AArch64] Fix scavenged spill slot base when stack realignment required.

Summary:
Use the FP for scavenged spill slot accesses to prevent corruption of
the callee-save region when the SP is re-aligned.

Based on problem and patch reported by @paulwalker-arm

This is an alternative to solution proposed in D45770

Reviewers: t.p.northover, paulwalker-arm, thegameg, javed.absar

Subscribers: qcolombet, mcrosier, paulwalker-arm, kristof.beyls, rengolin, javed.absar, llvm-commits

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

llvm-svn: 330976

6 years ago[NFC][InstCombine] rem.ll: add a few commutative tests.
Roman Lebedev [Thu, 26 Apr 2018 18:44:37 +0000 (18:44 +0000)]
[NFC][InstCombine] rem.ll: add a few commutative tests.

This closes a gap in missing test coverage in
isKnownToBeAPowerOfTwo() from ValueTracking.cpp

llvm-svn: 330975

6 years ago[NFC][InstCombine] Regenerate rem.ll test
Roman Lebedev [Thu, 26 Apr 2018 18:44:32 +0000 (18:44 +0000)]
[NFC][InstCombine] Regenerate rem.ll test

llvm-svn: 330974

6 years ago[llvm-objcopy] Implement --redefine-sym option
Alexander Shaposhnikov [Thu, 26 Apr 2018 18:28:17 +0000 (18:28 +0000)]
[llvm-objcopy] Implement --redefine-sym option

This diff implements --redefine-sym option
for changing the name of a symbol.

Test plan: make check-all

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

llvm-svn: 330973

6 years agoaugmenting description for fcmp fmf - NFC
Michael Berg [Thu, 26 Apr 2018 18:17:58 +0000 (18:17 +0000)]
augmenting description for fcmp fmf - NFC

llvm-svn: 330972

6 years ago[WebAssembly] Add version to linking section (to match llvm-side change)
Sam Clegg [Thu, 26 Apr 2018 18:17:21 +0000 (18:17 +0000)]
[WebAssembly] Add version to linking section (to match llvm-side change)

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

llvm-svn: 330971

6 years agoFix a bug that prevents global variables from having a DW_OP_deref.
Adrian Prantl [Thu, 26 Apr 2018 18:17:04 +0000 (18:17 +0000)]
Fix a bug that prevents global variables from having a DW_OP_deref.

For local variables the first DW_OP_deref is consumed by turning the
location kind into a memeory location, but that only makes sense for
values that are in a register to begin with, which cannot happen for
global variables that are attached to a symbol.

rdar://problem/39741860

llvm-svn: 330970

6 years ago[WebAssembly] Add version to object file metadata
Sam Clegg [Thu, 26 Apr 2018 18:15:32 +0000 (18:15 +0000)]
[WebAssembly] Add version to object file metadata

Summary: See https://github.com/WebAssembly/tool-conventions/issues/54

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

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

llvm-svn: 330969

6 years ago[Tablegen] SubtargetEmitter: move the logic that prints predicates for variant schedu...
Andrea Di Biagio [Thu, 26 Apr 2018 18:03:24 +0000 (18:03 +0000)]
[Tablegen] SubtargetEmitter: move the logic that prints predicates for variant scheduling classes to helper functions. NFC

llvm-svn: 330968

6 years agoAdd a comment. NFC.
Rafael Espindola [Thu, 26 Apr 2018 18:03:04 +0000 (18:03 +0000)]
Add a comment. NFC.

llvm-svn: 330967

6 years agoReplace SharedSymbols with Defined when creating copy relocations.
Rafael Espindola [Thu, 26 Apr 2018 17:58:58 +0000 (17:58 +0000)]
Replace SharedSymbols with Defined when creating copy relocations.

This is slightly simpler to read IMHO. Now if a symbol has a position
in the file, it is Defined.

The main motivation is that with this a SharedSymbol doesn't need a
section, which reduces the size of SymbolUnion.

With this the peak allocation when linking chromium goes from 568.1 to
564.2 MB.

llvm-svn: 330966

6 years ago[GlobalMerge] Fix a typo
Haicheng Wu [Thu, 26 Apr 2018 17:56:50 +0000 (17:56 +0000)]
[GlobalMerge] Fix a typo

now => know

llvm-svn: 330965

6 years agoRevert "Enable EliminateAvailableExternally pass for -O1"
Vlad Tsyrklevich [Thu, 26 Apr 2018 17:54:53 +0000 (17:54 +0000)]
Revert "Enable EliminateAvailableExternally pass for -O1"

This reverts commit r330961 because it breaks a handful of clang tests.

llvm-svn: 330964

6 years ago[llvm-objcopy] Add --localize-symbol option
Paul Semel [Thu, 26 Apr 2018 17:44:43 +0000 (17:44 +0000)]
[llvm-objcopy] Add --localize-symbol option

llvm-svn: 330963

6 years agoUpdate stale comment in AsmWriter.cpp
Vlad Tsyrklevich [Thu, 26 Apr 2018 17:34:51 +0000 (17:34 +0000)]
Update stale comment in AsmWriter.cpp

Summary:
The old comment referred to llvm/IR/Writer.h which doesn't longer exist.
This patch replaces it with an up-to-date description of AsmWriter library.

Patch by Alex Yursha.

Reviewers: gribozavr, vlad.tsyrklevich

Reviewed By: vlad.tsyrklevich

Subscribers: llvm-commits

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

llvm-svn: 330962

6 years agoEnable EliminateAvailableExternally pass for -O1
Vlad Tsyrklevich [Thu, 26 Apr 2018 17:33:24 +0000 (17:33 +0000)]
Enable EliminateAvailableExternally pass for -O1

Summary:
Follow-up to D43690, the EliminateAvailableExternally pass currently
runs under -O0 and -O2 and up. Under -O1 we would still want to drop
available_externally symbols to reduce space without inlining having
run.

Reviewers: tejohnson

Reviewed By: tejohnson

Subscribers: mehdi_amini, llvm-commits, kcc

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

llvm-svn: 330961

6 years agoSimplify processRelocAux.
Rafael Espindola [Thu, 26 Apr 2018 17:22:44 +0000 (17:22 +0000)]
Simplify processRelocAux.

It returns a different Expr only in the case of creating a function
symbol pointing to its plt entry. We can just add a call to
addPltEntry to avoid that and return void.

With this patch further simplifications of how we handle copy
relocations are possible.

llvm-svn: 330960

6 years ago[WebAssembly] objdump: Don't assume all relocations have symbols
Sam Clegg [Thu, 26 Apr 2018 17:05:04 +0000 (17:05 +0000)]
[WebAssembly] objdump: Don't assume all relocations have symbols

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

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

llvm-svn: 330959

6 years ago[docs] provide the specific sanitizer option to detect junk-in-the-ftrunc
Sanjay Patel [Thu, 26 Apr 2018 17:04:07 +0000 (17:04 +0000)]
[docs] provide the specific sanitizer option to detect junk-in-the-ftrunc

llvm-svn: 330958

6 years ago[WebAssembly] Implement getRelocationValueString()
Sam Clegg [Thu, 26 Apr 2018 16:41:51 +0000 (16:41 +0000)]
[WebAssembly] Implement getRelocationValueString()

And use it in llvm-objdump.

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

llvm-svn: 330957

6 years ago[mips] Fix a test case which is keeping the expensive checks bot win red (NFC)
Simon Dardis [Thu, 26 Apr 2018 16:22:47 +0000 (16:22 +0000)]
[mips] Fix a test case which is keeping the expensive checks bot win red (NFC)

llvm-svn: 330956

6 years agoMove old test into test/libcxx, and implement new version of test for ostreambuf_iter...
Marshall Clow [Thu, 26 Apr 2018 16:16:45 +0000 (16:16 +0000)]
Move old test into test/libcxx, and implement new version of test for ostreambuf_iterator::failed. Fixes PR#37245. Thanks to Billy O'Neill for the bug report.

llvm-svn: 330955

6 years ago[AMDGPU][Waitcnt] As of gfx7, VMEM operations do not increment the export counter...
Mark Searles [Thu, 26 Apr 2018 16:11:19 +0000 (16:11 +0000)]
[AMDGPU][Waitcnt] As of gfx7, VMEM operations do not increment the export counter and the input registers are available in the next instruction; update the waitcnt pass to take this into account.

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

llvm-svn: 330954

6 years agoDelete GotPltIndex.
Rafael Espindola [Thu, 26 Apr 2018 16:09:30 +0000 (16:09 +0000)]
Delete GotPltIndex.

It was always an offset of PltIndex.

This doesn't reduce the size of the structures, but makes it easier to
do so in a followup patch.

llvm-svn: 330953

6 years ago[mips] Correct the definitions of some control instructions
Simon Dardis [Thu, 26 Apr 2018 16:06:34 +0000 (16:06 +0000)]
[mips] Correct the definitions of some control instructions

Correct the definitions of ei, di, eret, deret, wait, syscall and break.
Also provide microMIPS specific aliases to match the MIPS aliases.

Additionally correct the definition of the wait instruction so that
it is present in the instruction mapping tables.

Reviewers: smaksimovic, abeserminji, atanasyan

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

llvm-svn: 330952

6 years ago[DAGCombiner] limit ftrunc optimizations with function attribute
Sanjay Patel [Thu, 26 Apr 2018 16:04:44 +0000 (16:04 +0000)]
[DAGCombiner] limit ftrunc optimizations with function attribute

As noted, the attribute name is subject to change once we have
the clang side implemented, but it's clear that we need some
kind of attribute-based predication here based on the discussion
for:
rL330437

llvm-svn: 330951

6 years ago[x86] add tests to show potential opt-out of ftrunc optimization; NFC
Sanjay Patel [Thu, 26 Apr 2018 15:36:15 +0000 (15:36 +0000)]
[x86] add tests to show potential opt-out of ftrunc optimization; NFC

This is another preliminary step for disabling this transform as
discussed in the post-commit thread for:
rL330437
I'm using one of the names suggested there for the attribute, but
we can fix that up as needed once the clang side of this is sorted
out.

llvm-svn: 330950

6 years ago[RISCV] Implement isLoadFromStackSlot and isStoreToStackSlot
Alex Bradbury [Thu, 26 Apr 2018 15:34:27 +0000 (15:34 +0000)]
[RISCV] Implement isLoadFromStackSlot and isStoreToStackSlot

This causes some slight shuffling but no meaningful codegen differences on the
corpus I used for testing, but it has a larger impact when combined with e.g.
rematerialisation. Regardless, it makes sense to report as accurate
target-specific information as possible.

llvm-svn: 330949

6 years ago[NVPTX] Make the legalizer expand shufflevector of <2 x half>
Benjamin Kramer [Thu, 26 Apr 2018 15:26:29 +0000 (15:26 +0000)]
[NVPTX] Make the legalizer expand shufflevector of <2 x half>

There's no direct instruction for this, but it's trivially implemented
with two movs. Without this the code generator just dies when
encountering a shufflevector.

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

llvm-svn: 330948

6 years ago[DAGCombiner] refactor FP->int->FP folds; NFC
Sanjay Patel [Thu, 26 Apr 2018 15:20:18 +0000 (15:20 +0000)]
[DAGCombiner] refactor FP->int->FP folds; NFC

As discussed in the post-review comments for rL330437,
we need to guard this fold to allow existing code to
keep working with the undefined behavior that they've
come to rely on.

That would mean duplicating more code than we already
have, so let's fix that first.

llvm-svn: 330947

6 years agoAdd getDeserializationListener to ASTReader
Yuka Takahashi [Thu, 26 Apr 2018 15:09:13 +0000 (15:09 +0000)]
Add getDeserializationListener to ASTReader

Summary:
We need to know if ASTReader already has a DeserializationListner or
not, and this also helps to create a multiplexing deserialization
listener if there is one already attached.

Reviewers: v.g.vassilev, rsmith, dblaikie, thakis

Subscribers: cfe-commits

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

llvm-svn: 330946

6 years ago[SLP] Add tests for transposable binary operations
Matthew Simpson [Thu, 26 Apr 2018 14:50:04 +0000 (14:50 +0000)]
[SLP] Add tests for transposable binary operations

These test cases are vectorizable, but we are currently unable to vectorize
them effectively.

llvm-svn: 330945

6 years ago[OpenMP] Remove compilation warning when using clang to compile bc files.
Guansong Zhang [Thu, 26 Apr 2018 14:06:53 +0000 (14:06 +0000)]
[OpenMP] Remove compilation warning when using clang to compile bc files.

Summary: Minor printf format correction. NVCC ignore those. Clang will give warning on these if debug is enabled.

Reviewers: grokos

Reviewed By: grokos

Subscribers: openmp-commits

Tags: #openmp

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

llvm-svn: 330944

6 years ago[RISCV] Implement isZextFree
Alex Bradbury [Thu, 26 Apr 2018 14:04:18 +0000 (14:04 +0000)]
[RISCV] Implement isZextFree

This returns true for 8-bit and 16-bit loads, allowing LBU/LHU to be selected
and avoiding unnecessary masks.

llvm-svn: 330943

6 years ago[RISCV] Add test case showing suboptimal codegen when loading unsigned char/short
Alex Bradbury [Thu, 26 Apr 2018 14:00:35 +0000 (14:00 +0000)]
[RISCV] Add test case showing suboptimal codegen when loading unsigned char/short

Implementing isZextFree will allow lbu or lhu to be selected rather than
lb+mask and lh+mask.

llvm-svn: 330942

6 years ago[TTI, AArch64] Add transpose shuffle kind
Matthew Simpson [Thu, 26 Apr 2018 13:48:33 +0000 (13:48 +0000)]
[TTI, AArch64] Add transpose shuffle kind

This patch adds a new shuffle kind useful for transposing a 2xn matrix. These
transpose shuffle masks read corresponding even- or odd-numbered vector
elements from two n-dimensional source vectors and write each result into
consecutive elements of an n-dimensional destination vector. The transpose
shuffle kind is meant to model the TRN1 and TRN2 AArch64 instructions. As such,
this patch also considers transpose shuffles in the AArch64 implementation of
getShuffleCost.

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

llvm-svn: 330941

6 years ago[RISCV] Implement isTruncateFree
Alex Bradbury [Thu, 26 Apr 2018 13:37:00 +0000 (13:37 +0000)]
[RISCV] Implement isTruncateFree

Adapted from ARM's implementation introduced in r313533 and r314280.

llvm-svn: 330940

6 years ago[X86] Fix Update Kill Register in Avoid SFB Pass - Bug 37153
Lama Saba [Thu, 26 Apr 2018 13:16:11 +0000 (13:16 +0000)]
[X86] Fix Update Kill Register in Avoid SFB Pass - Bug 37153

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

Change-Id: Icf6f34f6babc3cb2ff5292fde003472473037a71
llvm-svn: 330939

6 years ago[RISCV] Implement isLegalICmpImmediate
Alex Bradbury [Thu, 26 Apr 2018 13:15:17 +0000 (13:15 +0000)]
[RISCV] Implement isLegalICmpImmediate

I'm unable to construct a representative test case that demonstrates the
advantage, but it seems sensible to report accurate target-specific
information regardless.

llvm-svn: 330938

6 years ago[RISCV] Implement isLegalAddImmediate
Alex Bradbury [Thu, 26 Apr 2018 13:00:37 +0000 (13:00 +0000)]
[RISCV] Implement isLegalAddImmediate

This causes a trivial improvement in the recently added lsr-legaladdimm.ll
test case.

llvm-svn: 330937

6 years ago[RISCV] Add test/CodeGen/RISCV/lsr-legaladdimm.ll
Alex Bradbury [Thu, 26 Apr 2018 12:57:29 +0000 (12:57 +0000)]
[RISCV] Add test/CodeGen/RISCV/lsr-legaladdimm.ll

Add a test case which will show a codegen difference upon the implementation
of a target-specific isLegalAddImmediate.

llvm-svn: 330936

6 years ago[Tablegen] Simplify code in CodeGenSchedule. NFCI
Andrea Di Biagio [Thu, 26 Apr 2018 12:56:26 +0000 (12:56 +0000)]
[Tablegen] Simplify code in CodeGenSchedule. NFCI

llvm-svn: 330935

6 years ago[AArch64][SVE] Enable DiagnosticPredicates for SVE LD1 instructions.
Sander de Smalen [Thu, 26 Apr 2018 12:54:42 +0000 (12:54 +0000)]
[AArch64][SVE] Enable DiagnosticPredicates for SVE LD1 instructions.

This patch extends the PredicateMethod of AsmOperands used in SVE's
LD1 instructions with a DiagnosticPredicate. This makes them 'context
sensitive' to the operand that has been parsed and tells the user to
use the right register (with expected shift/extend), rather than telling
the immediate is out of range when it actually parsed a register.

Patch [2/2] in a series to improve assembler diagnostics for SVE:
-  Patch [1/2]: https://reviews.llvm.org/D45879
-  Patch [2/2]: https://reviews.llvm.org/D45880

Reviewers: olista01, stoklund, craig.topper, mcrosier, rengolin, echristo, fhahn, SjoerdMeijer, evandro, javed.absar

Reviewed By: fhahn

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

llvm-svn: 330934

6 years ago[NVPTX] Deduplicate code. No functionality change.
Benjamin Kramer [Thu, 26 Apr 2018 12:30:16 +0000 (12:30 +0000)]
[NVPTX] Deduplicate code. No functionality change.

llvm-svn: 330933

6 years ago[RISCV] Implement isLegalAddressingMode for RISC-V
Alex Bradbury [Thu, 26 Apr 2018 12:13:48 +0000 (12:13 +0000)]
[RISCV] Implement isLegalAddressingMode for RISC-V

This has no impact on codegen for the current RISC-V unit tests or my small
benchmark set and very minor changes in a few programs in the GCC torture
suite. Based on this, I haven't been able to produce a representative test
program that demonstrates a benefit from isLegalAddressingMode. I'm committing
the patch anyway, on the basis that presenting accurate information to the
target-independent code is preferable to relying on incorrect generic
assumptions.

llvm-svn: 330932

6 years ago[LoopInterchange] Ignore debug intrinsics during legality checks.
Florian Hahn [Thu, 26 Apr 2018 10:26:17 +0000 (10:26 +0000)]
[LoopInterchange] Ignore debug intrinsics during legality checks.

Reviewers: aprantl, mcrosier, karthikthecool

Reviewed By: aprantl

Subscribers: mattd, vsk, #debug-info, llvm-commits

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

llvm-svn: 330931

6 years ago[AsmMatcher] Extend PredicateMethod with optional DiagnosticPredicate
Sander de Smalen [Thu, 26 Apr 2018 09:24:45 +0000 (09:24 +0000)]
[AsmMatcher] Extend PredicateMethod with optional DiagnosticPredicate

An optional, light-weight and backward-compatible mechanism to allow
specifying that a diagnostic _only_ applies to a partial mismatch (NearMiss),
rather than a full mismatch.

Patch [1/2] in a series to improve assembler diagnostics for SVE.
-  Patch [1/2]: https://reviews.llvm.org/D45879
-  Patch [2/2]: https://reviews.llvm.org/D45880

Reviewers: olista01, stoklund, craig.topper, mcrosier, rengolin, echristo, fhahn, SjoerdMeijer, evandro, javed.absar

Reviewed By: olista01

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

llvm-svn: 330930

6 years ago[AArch64][SVE] Asm: Negative tests for all LD1 gather (scalar+vector) load instructions.
Sander de Smalen [Thu, 26 Apr 2018 08:43:22 +0000 (08:43 +0000)]
[AArch64][SVE] Asm: Negative tests for all LD1 gather (scalar+vector) load instructions.

Patch [3/3] in series to add support for SVE's gather load instructions
that use scalar+vector addressing modes:
- Patch [1/3]: https://reviews.llvm.org/D45951
- Patch [2/3]: https://reviews.llvm.org/D46023
- Patch [3/3]: https://reviews.llvm.org/D45958

Reviewers: fhahn, rengolin, samparker, SjoerdMeijer, t.p.northover, echristo, evandro, javed.absar

Reviewed By: fhahn

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

llvm-svn: 330929

6 years ago[AArch64][SVE] Asm: Support for gather LD1/LDFF1 (scalar + vector) load instructions.
Sander de Smalen [Thu, 26 Apr 2018 08:19:53 +0000 (08:19 +0000)]
[AArch64][SVE] Asm: Support for gather LD1/LDFF1 (scalar + vector) load instructions.

Patch [2/3] in series to add support for SVE's gather load instructions
that use scalar+vector addressing modes:
- Patch [1/3]: https://reviews.llvm.org/D45951
- Patch [2/3]: https://reviews.llvm.org/D46023
- Patch [3/3]: https://reviews.llvm.org/D45958

Reviewers: fhahn, rengolin, samparker, SjoerdMeijer, t.p.northover, echristo, evandro, javed.absar

Reviewed By: fhahn

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

llvm-svn: 330928

6 years agoMake test more platform neutral
Serge Pavlov [Thu, 26 Apr 2018 08:08:25 +0000 (08:08 +0000)]
Make test more platform neutral

llvm-svn: 330927

6 years ago[ConfigFiles] Update argument strings when merging argrument lists
Serge Pavlov [Thu, 26 Apr 2018 06:28:47 +0000 (06:28 +0000)]
[ConfigFiles] Update argument strings when merging argrument lists

Implementation of `InputArgList` assumes its field `ArgStrings` contains
strings for each argument exactly in the same order. This condition was
broken when arguments from config file and from invocation were merged.

This change fixes https://bugs.llvm.org/show_bug.cgi?id=37196 (Clang
config files can crash argument handling).

llvm-svn: 330926

6 years agoAdd a test. NFC.
Rafael Espindola [Thu, 26 Apr 2018 06:10:18 +0000 (06:10 +0000)]
Add a test. NFC.

This would have fund a bug in a patch I am working on.

llvm-svn: 330925

6 years ago[cmake] Make linker detection take flags into account
Shoaib Meenai [Thu, 26 Apr 2018 06:04:46 +0000 (06:04 +0000)]
[cmake] Make linker detection take flags into account

LLVM might be compiled using a toolchain file which controls the linker
to use via flags (e.g. `-B` or `-fuse-ld=`). Take these flags into
account for linker detection. We can also correct the detection by
manually passing LLVM_USE_LINKER, of course, but it seems more
convenient to have the detection take flags into account.

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

llvm-svn: 330924

6 years ago[X86] Add support for _mm512_mullox_epi64 and _mm512_mask_mullox_epi64 intrinsics...
Craig Topper [Thu, 26 Apr 2018 05:38:39 +0000 (05:38 +0000)]
[X86] Add support for _mm512_mullox_epi64 and _mm512_mask_mullox_epi64 intrinsics to match icc.

On AVX512F targets we'll produce an emulated sequence using 3 pmuludqs with shifts and adds. On AVX512DQ we'll use vpmulld.

Fixes PR37140.

llvm-svn: 330923

6 years ago[X86] Print 'tbyte ptr' instead of 'xword ptr' for f80mem in Intel syntax.
Craig Topper [Thu, 26 Apr 2018 05:07:40 +0000 (05:07 +0000)]
[X86] Print 'tbyte ptr' instead of 'xword ptr' for f80mem in Intel syntax.

This matches objdump.

llvm-svn: 330922

6 years ago[X86] Remove alignment restriction on loading folding of pcmp[ei]str* during isel...
Craig Topper [Thu, 26 Apr 2018 03:53:39 +0000 (03:53 +0000)]
[X86] Remove alignment restriction on loading folding of pcmp[ei]str* during isel too.

This is a follow up to the changes in r330896 which enabled folding after isel during peephole and register allocation.

llvm-svn: 330897

6 years ago[x86] Allow folding unaligned memory operands into pcmp[ei]str*
Chandler Carruth [Thu, 26 Apr 2018 03:17:25 +0000 (03:17 +0000)]
[x86] Allow folding unaligned memory operands into pcmp[ei]str*
instructions.

These have special permission according to the x86 manual to read
unaligned memory, and this folding is done by ICC and GCC as well.

This corrects one of the issues identified in PR37246.

llvm-svn: 330896

6 years ago[x86] NFC: Add tests for idiomatic usage patterns of SSE4.2 string
Chandler Carruth [Thu, 26 Apr 2018 03:12:17 +0000 (03:12 +0000)]
[x86] NFC: Add tests for idiomatic usage patterns of SSE4.2 string
comparison instructions (pcmp[ei]stri*).

These will help show improvements from fixes to PR37246.

I've not really covered the mask forms of this intrinsic as I don't have
as good of an intuition about the likely usage patterns there. Happy for
someone to extend this with tests covering the mask form.

llvm-svn: 330895

6 years agoDiagnose missing template arguments for a variable template even when there is
Richard Smith [Thu, 26 Apr 2018 02:10:22 +0000 (02:10 +0000)]
Diagnose missing template arguments for a variable template even when there is
a preceding 'template' keyword.

We only diagnose in the dependent case (wherein we used to crash). Another bug
prevents the diagnostic from appearing in the non-template case.

llvm-svn: 330894

6 years agoRevert "[SCEV] Make computeExitLimit more simple and more powerful"
Max Kazantsev [Thu, 26 Apr 2018 02:07:40 +0000 (02:07 +0000)]
Revert "[SCEV] Make computeExitLimit more simple and more powerful"

This reverts commit 023c8be90980e0180766196cba86f81608b35d38.

This patch triggers miscompile of zlib on PowerPC platform. Most likely it is
caused by some pre-backend PPC-specific pass, but we don't clearly know the
reason yet. So we temporally revert this patch with intention to return it
once the problem is resolved. See bug 37229 for details.

llvm-svn: 330893

6 years agoSimplify. NFC.
Rui Ueyama [Thu, 26 Apr 2018 01:38:29 +0000 (01:38 +0000)]
Simplify. NFC.

llvm-svn: 330892

6 years agoRevert addition of 'concept' to diagnostics in r330890.
Richard Smith [Thu, 26 Apr 2018 01:16:08 +0000 (01:16 +0000)]
Revert addition of 'concept' to diagnostics in r330890.

Matches revert in r330888 of r330794.

llvm-svn: 330891

6 years agoFactor out common code for diagnosing missing template arguments.
Richard Smith [Thu, 26 Apr 2018 01:08:00 +0000 (01:08 +0000)]
Factor out common code for diagnosing missing template arguments.

In passing, add 'concept' to the list of template kinds in diagnostics.

llvm-svn: 330890

6 years agoFix a merge conflict that was inadvertently introduced in r330888
Faisal Vali [Thu, 26 Apr 2018 01:05:05 +0000 (01:05 +0000)]
Fix a merge conflict that was inadvertently introduced in r330888
- during the reversion of r330794

llvm-svn: 330889

6 years agoRevert rC330794 and some dependent tiny bug fixes
Faisal Vali [Thu, 26 Apr 2018 00:42:40 +0000 (00:42 +0000)]
Revert rC330794 and some dependent tiny bug fixes

See Richard's humbling feedback here:
http://lists.llvm.org/pipermail/cfe-commits/Week-of-Mon-20180423/226482.html
http://lists.llvm.org/pipermail/cfe-commits/Week-of-Mon-20180423/226486.html

Wish I'd had the patience to solicit the feedback prior to committing :)

Sorry for the noise guys.

Thank you Richard for being the steward that clang deserves!

llvm-svn: 330888

6 years agoSwitch to Clang's isDigit function.
Richard Trieu [Wed, 25 Apr 2018 23:50:55 +0000 (23:50 +0000)]
Switch to Clang's isDigit function.

std::isdigit can be overloaded, causing the template deduction to fail.  Use
Clang's isDigit function which to avoid this.  Switch the other calls for
consistency.

llvm-svn: 330887

6 years agoInclude <cctype> to get std::isdigit, fixes MSVC STL build
Reid Kleckner [Wed, 25 Apr 2018 23:38:54 +0000 (23:38 +0000)]
Include <cctype> to get std::isdigit, fixes MSVC STL build

llvm-svn: 330886

6 years ago[libcxx] func.wrap.func.con: Unset function before destroying anything
Volodymyr Sapsai [Wed, 25 Apr 2018 23:38:41 +0000 (23:38 +0000)]
[libcxx] func.wrap.func.con: Unset function before destroying anything

Be defensive against a reentrant std::function::operator=(nullptr_t), in case
the held function object has a non-trivial destructor.  Destroying the function
object in-place can lead to the destructor being called twice.

Patch by Duncan P. N. Exon Smith. C++03 support by Volodymyr Sapsai.

rdar://problem/32836603

Reviewers: EricWF, mclow.lists

Reviewed By: mclow.lists

Subscribers: cfe-commits, arphaman

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

llvm-svn: 330885

6 years ago[codeview] Ignore .cv_loc directives at the end of a function
Reid Kleckner [Wed, 25 Apr 2018 23:34:15 +0000 (23:34 +0000)]
[codeview] Ignore .cv_loc directives at the end of a function

If no data or instructions are emitted after a location directive, we
should clear the cv_loc when we change sections, or it will be emitted
at the beginning of the next section. This violates our invariant that
all .cv_loc directives belong to the same section. Add clearer
assertions for this.

llvm-svn: 330884

6 years ago[COFF] more informative "broken object file" diagnostics
Bob Haarman [Wed, 25 Apr 2018 23:33:19 +0000 (23:33 +0000)]
[COFF] more informative "broken object file" diagnostics

Summary:
When a symbol refers to a special section or a section that doesn't
exist, lld would fatal with "broken object file". This change gives a
different message for each scenario, and includes the name of the
file, name of the symbol, and the section being referred to.

Reviewers: pcc, ruiu

Reviewed By: ruiu

Subscribers: llvm-commits

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

llvm-svn: 330883

6 years ago[analyzer] Fix a crash on lifetime extension through aggregate initialization.
Artem Dergachev [Wed, 25 Apr 2018 23:02:06 +0000 (23:02 +0000)]
[analyzer] Fix a crash on lifetime extension through aggregate initialization.

If 'A' is a C++ aggregate with a reference field of type 'C', in code like
  A a = { C() };
C() is lifetime-extended by 'a'. The analyzer wasn't expecting this pattern and
crashing. Additionally, destructors aren't added in the CFG for this case,
so for now we shouldn't be inlining the constructor for C().

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

llvm-svn: 330882

6 years agoFix crash on qualified template name instantiation if the template name has no
Richard Smith [Wed, 25 Apr 2018 22:58:55 +0000 (22:58 +0000)]
Fix crash on qualified template name instantiation if the template name has no
template argument list.

llvm-svn: 330881

6 years ago[RISCV] More validations on the input value of -march=
Ana Pazos [Wed, 25 Apr 2018 22:42:38 +0000 (22:42 +0000)]
[RISCV] More validations on the input value of -march=

Supporting additional rules for parsing ISA string.

- RISC-V ISA strings must be lowercase.
E.g.: rv32IMC is not supported, rv32imc is correct.

- Multi-letter extensions are to be separated by a single
underscore '_'. The extension prefix counts as a letter.
This means extensions that start with 's', 'sx' and 'sx'
are all multi-letter.
E.g.:
xasb is a single non-standard extension named 'xasb'
xa_sb are two extensions, the non-standard user level extension
'xa', and the supervisor level extension 'sb'.

- Standard user-level extensions are specified following
a canonical order, according to Table 22.1 in
RISC-V User-Level ISA V2.2.

- Non-standard user-level 'x' extensions,
standard supervisor-level 's' extensions and
non-standard supervisor-level 'sx' extensions
are also specified following a canonical order according
to Table 22.1 in RISC-V User-Level ISA V2.2:
'x' extensions, follwed by 's' extensions and then 'sx' extensions.

- Extensions might have a version number.
Underscores may be used to separate ISA subset components to
improve readability and to provide disambiguation.
E.g.: rv32i2_m3_a1_f2_d2

- Version numbers are divided into major and minor numbers,
separated by a 'p'. If the minor version is 0, then 'p0' can
be omitted.

- Additional checks for dependent extensions and invalid
extensions combinations.
E.g.:
'e' requires rv32
'e' can't be combined with 'f' nor 'd'
'q' requires rv64

- TODO items have also been marked with comments in the code.

Reviewers: asb, kito-cheng

Reviewed By: asb

Subscribers: edward-jones, mgrang, zzheng, rbar, johnrusso, simoncook, jordy.potman.lists, sabuasal, niosHD, shiva0217, cfe-commits

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

llvm-svn: 330880

6 years agoRemove unused features from StringRefZ and move it to Symbols.h.
Rui Ueyama [Wed, 25 Apr 2018 22:34:21 +0000 (22:34 +0000)]
Remove unused features from StringRefZ and move it to Symbols.h.

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

llvm-svn: 330879

6 years ago[driver][darwin] Do not infer -simulator environment for OS version env vars
Alex Lorenz [Wed, 25 Apr 2018 22:23:26 +0000 (22:23 +0000)]
[driver][darwin] Do not infer -simulator environment for OS version env vars
with non-simulator SDKs

rdar://37955008

llvm-svn: 330878

6 years ago[debugserver] Return 'ios' instead of 'iphoneos' for the ostype.
Frederic Riss [Wed, 25 Apr 2018 22:12:12 +0000 (22:12 +0000)]
[debugserver] Return 'ios' instead of 'iphoneos' for the ostype.

When I merged the 2 codepaths that return an OS type, I hade
checked that the places accepting 'iphoneos' would also accept
'ios', but then I got it backwards and return 'iphoneos'.

We use this value to build triples, and there 'iphoneos' is
invalid.

This also makes the test slightly simpler.

llvm-svn: 330877

6 years ago[analyzer] Enable analysis of WebKit "unified sources".
Artem Dergachev [Wed, 25 Apr 2018 21:51:26 +0000 (21:51 +0000)]
[analyzer] Enable analysis of WebKit "unified sources".

Normally the analyzer begins path-sensitive analysis from functions within
the main file, even though the path is allowed to go through any functions
within the translation unit.

When a recent version of WebKit is compiled, the "unified sources" technique
is used, that assumes #including multiple code files into a single main file.
Such file would have no functions defined in it, so the analyzer wouldn't be
able to find any entry points for path-sensitive analysis.

This patch pattern-matches unified file names that are similar to those
used by WebKit and allows the analyzer to find entry points in the included
code files. A more aggressive/generic approach is being planned as well.

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

llvm-svn: 330876

6 years ago[ADT] Make filter_iterator support bidirectional iteration
Vedant Kumar [Wed, 25 Apr 2018 21:50:09 +0000 (21:50 +0000)]
[ADT] Make filter_iterator support bidirectional iteration

This makes it possible to reverse a filtered range. For example, here's
a way to visit memory accesses in a BasicBlock in reverse order:

    auto MemInsts = reverse(make_filter_range(BB, [](Instruction &I) {
      return isa<StoreInst>(&I) || isa<LoadInst>(&I);
    }));

    for (auto &MI : MemInsts)
      ...

To implement this functionality, I factored out forward iteration
functionality into filter_iterator_base, and added a specialization of
filter_iterator_impl which supports bidirectional iteration. Thanks to
Tim Shen, Zachary Turner, and others for suggesting this design and
providing feedback! This version of the patch supersedes the original
(https://reviews.llvm.org/D45792).

This was motivated by a problem we encountered in D45657: we'd like to
visit the non-debug-info instructions in a BasicBlock in reverse order.

Testing: check-llvm, check-clang

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

llvm-svn: 330875

6 years agoPack symbols a bit more.
Rafael Espindola [Wed, 25 Apr 2018 21:44:37 +0000 (21:44 +0000)]
Pack symbols a bit more.

Before this patch:

Symbol 56
Defined 80
Undefined 56
SharedSymbol 88
LazyArchive 72
LazyObject 56

With this patch

Symbol 48
Defined 72
Undefined 48
SharedSymbol 80
LazyArchive 64
LazyObject 48

The result is that peak allocation when linking chromium (according to
heaptrack) goes from 578 to 568 MB.

llvm-svn: 330874

6 years ago[Driver] Reland "Android triples are not aliases for other triples."
Dan Albert [Wed, 25 Apr 2018 21:26:06 +0000 (21:26 +0000)]
[Driver] Reland "Android triples are not aliases for other triples."

Fixed directory separators in tests to be compatible with both
Windows and !Windows.

This reverts commit aa423850afa4c16a53c4c492fe254dcad3d5a53e.

llvm-svn: 330873

6 years ago[test] Add a testcase for MinGW sysroot detections from SVN r330244. NFC.
Martin Storsjo [Wed, 25 Apr 2018 21:24:04 +0000 (21:24 +0000)]
[test] Add a testcase for MinGW sysroot detections from SVN r330244. NFC.

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

llvm-svn: 330872

6 years ago[Driver] Fix implicit config files from prefixed symlinks
Martin Storsjo [Wed, 25 Apr 2018 21:23:59 +0000 (21:23 +0000)]
[Driver] Fix implicit config files from prefixed symlinks

If -no-canonical-prefixes isn't used, the clang executable name used
is the one of the actual executable, not the name of the symlink that
the user invoked.

In these cases, the target prefix was overridden based on the clang
executable name. (On the other hand the implicit -target option
that such a symlink adds, is added as an actual command line parameter
in tools/driver/driver.cop, before resolving the symlink and finding
the actual clang executable.

Use the original ClangNameParts (set from argv[0] in
tools/driver/driver.cpp) if it seems to be initialized propery.

All existing tests of this feature used -no-canonical-prefixes
(possibly because it also makes the driver look in the directory
of the symlink instead of the directory of the executable); add
another one that uses --config-user-dir= to specify the directory
instead. (For actual users of such symlinks, outisde of the test
suite, the directory is probably the same for both.)

This makes this feature work more like what the documentation
describes.

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

llvm-svn: 330871