]> granicus.if.org Git - llvm/log
llvm
6 years agogn build: Set is_clang to true in stage2 toolchains.
Peter Collingbourne [Fri, 25 Jan 2019 01:18:55 +0000 (01:18 +0000)]
gn build: Set is_clang to true in stage2 toolchains.

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

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

6 years agoGlobalISel: Add convenience mutatations to scalarize
Matt Arsenault [Fri, 25 Jan 2019 00:51:00 +0000 (00:51 +0000)]
GlobalISel: Add convenience mutatations to scalarize

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

6 years agosimplify COFF module assembly test and move it to Object
Bob Haarman [Fri, 25 Jan 2019 00:33:05 +0000 (00:33 +0000)]
simplify COFF module assembly test and move it to Object

Reviewers: pcc, rnk

Subscribers: llvm-commits

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

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

6 years agogn build: Build clang with -fno-strict-aliasing, make building with gcc much quieter
Nico Weber [Fri, 25 Jan 2019 00:29:17 +0000 (00:29 +0000)]
gn build: Build clang with -fno-strict-aliasing, make building with gcc much quieter

- gcc doesn't understand -Wstring-conversion, so pass that only to clang
- disable a few gcc warnings that are noisy and also disabled in the cmake build
- -Wstrict-aliasing pointed out that the cmake build builds clang with
  -fno-strict-aliasing, so do that too

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

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

6 years agoTry to address Windows bot failure after r352080
Vedant Kumar [Fri, 25 Jan 2019 00:15:16 +0000 (00:15 +0000)]
Try to address Windows bot failure after r352080

See the bot error message reported in https://reviews.llvm.org/D57082.

Avoid trying to match full class names in -debug-pass-manager output,
because they aren't portable.

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

6 years agoGlobalISel: Add helper to LLT to get a scalar or vector
Matt Arsenault [Fri, 25 Jan 2019 00:10:49 +0000 (00:10 +0000)]
GlobalISel: Add helper to LLT to get a scalar or vector

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

6 years ago[GlobalISel][AArch64] Avoid unused variable warning for variable only used in assert
Benjamin Kramer [Thu, 24 Jan 2019 23:45:07 +0000 (23:45 +0000)]
[GlobalISel][AArch64] Avoid unused variable warning for variable only used in assert

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

6 years ago[PowerPC] Exploit store instructions that store a single vector element
Nemanja Ivanovic [Thu, 24 Jan 2019 23:44:28 +0000 (23:44 +0000)]
[PowerPC] Exploit store instructions that store a single vector element

This patch exploits the instructions that store a single element from a vector
to preform a (store (extract_elt)). We already have code that does this with
ISA 3.0 instructions that were added to handle i8/i16 types. However, we had
never exploited the existing ones that handle f32/f64/i32/i64 types.

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

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

6 years agoRegBankSelect: Fix use after free in r352123
Matt Arsenault [Thu, 24 Jan 2019 23:42:01 +0000 (23:42 +0000)]
RegBankSelect: Fix use after free in r352123

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

6 years ago[GlobalISel][AArch64] Avoid unused function warnings in Release builds
Benjamin Kramer [Thu, 24 Jan 2019 23:39:47 +0000 (23:39 +0000)]
[GlobalISel][AArch64] Avoid unused function warnings in Release builds

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

6 years agopdbutil: Remove unused variables
David Blaikie [Thu, 24 Jan 2019 23:13:20 +0000 (23:13 +0000)]
pdbutil: Remove unused variables

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

6 years ago[x86] move half-size shuffle mask creation to helper; NFC
Sanjay Patel [Thu, 24 Jan 2019 23:12:36 +0000 (23:12 +0000)]
[x86] move half-size shuffle mask creation to helper; NFC

As noted in D57156, we want to check at least part of
this pattern earlier (in combining), so this will allow
the code to be shared instead of duplicated.

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

6 years ago[GISel]: Change how CSE is enabled by default for each pass
Aditya Nandakumar [Thu, 24 Jan 2019 23:11:25 +0000 (23:11 +0000)]
[GISel]: Change how CSE is enabled by default for each pass

https://reviews.llvm.org/D57178

Now add a hook in TargetPassConfig to query if CSE needs to be
enabled. By default this hook returns false only for O0 opt level but
this can be overridden by the target.
As a consequence of the default of enabled for non O0, a few tests
needed to be updated to not use CSE (by passing in -O0) to the run
line.

reviewed by: arsenm

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

6 years agoSuppress unused capture warning in CheckCopy
Jessica Paquette [Thu, 24 Jan 2019 22:51:31 +0000 (22:51 +0000)]
Suppress unused capture warning in CheckCopy

Werror bots didn't like the lambda + assert thing in my previous commit.

Capture everything to suppress the error.

Example failure here:
http://lab.llvm.org:8011/builders/lld-x86_64-darwin13/builds/29393

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

6 years agoRegBankSelect: Support some more complex part mappings
Matt Arsenault [Thu, 24 Jan 2019 22:47:04 +0000 (22:47 +0000)]
RegBankSelect: Support some more complex part mappings

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

6 years ago[elfabi] Add support for reading dynamic symbols from binaries
Armando Montanez [Thu, 24 Jan 2019 22:39:21 +0000 (22:39 +0000)]
[elfabi] Add support for reading dynamic symbols from binaries

This patch adds initial support for reading dynamic symbols from ELF binaries. Currently, STT_NOTYPE, STT_OBJECT, STT_FUNC, and STT_TLS are explicitly supported. Other symbol types are mapped to ELFSymbolType::Unknown to improve signal/noise ratio.

Symbols must meet two criteria to be read into in an ELFStub:

 - The symbol's binding must be STB_GLOBAL or STB_WEAK.
 - The symbol's visibility must be STV_DEFAULT or STV_PROTECTED.

This filters out symbols that aren't of interest during compile-time linking against a shared object.

This change uses DT_HASH and DT_GNU_HASH to determine the size of .dynsym. Using hash tables to determine the number of symbols in .dynsym allows llvm-elfabi to work on binaries without relying on section headers.

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

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

6 years ago[PDB] Increase TPI hash bucket count.
Zachary Turner [Thu, 24 Jan 2019 22:25:55 +0000 (22:25 +0000)]
[PDB] Increase TPI hash bucket count.

PDBs contain several serialized hash tables. In the microsoft-pdb
repo published to support LLVM implementing PDB support, the
provided initializes the bucket count for the TPI and IPI streams
to the maximum size. This occurs in tpi.cpp L33 and tpi.cpp L398.
In the LLVM code for generating PDBs, these streams are created with
minimum number of buckets. This difference makes LLVM generated
PDBs slower for when used for debugging.

Patch by C.J. Hebert
Differential Revision: https://reviews.llvm.org/D56942

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

6 years ago[GlobalISel][AArch64] Add isel support for FP16 vector @llvm.ceil
Jessica Paquette [Thu, 24 Jan 2019 22:00:41 +0000 (22:00 +0000)]
[GlobalISel][AArch64] Add isel support for FP16 vector @llvm.ceil

This patch adds support for vector @llvm.ceil intrinsics when full 16 bit
floating point support isn't available.

To do this, this patch...

- Implements basic isel for G_UNMERGE_VALUES
- Teaches the legalizer about 16 bit floats
- Teaches AArch64RegisterBankInfo to respect floating point registers on
  G_BUILD_VECTOR and G_UNMERGE_VALUES
- Teaches selectCopy about 16-bit floating point vectors

It also adds

- A legalizer test for the 16-bit vector ceil which verifies that we create a
  G_UNMERGE_VALUES and G_BUILD_VECTOR when full fp16 isn't supported
- An instruction selection test which makes sure we lower to G_FCEIL when
  full fp16 is supported
- A test for selecting G_UNMERGE_VALUES

And also updates arm64-vfloatintrinsics.ll to show that the new ceiling types
work as expected.

https://reviews.llvm.org/D56682

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

6 years agoallow COFF .def directive in module assembly when using ThinLTO
Bob Haarman [Thu, 24 Jan 2019 21:41:03 +0000 (21:41 +0000)]
allow COFF .def directive in module assembly when using ThinLTO

Summary:
Using COFF's .def directive in module assembly used to crash ThinLTO
with "this directive only supported on COFF targets" when getting
symbol information in ModuleSymbolTable.  This change allows
ModuleSymbolTable to process such code and adds a test to verify that
the .def directive has the desired effect on the native object file,
with and without ThinLTO.

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

Reviewers: rnk, pcc, vlad.tsyrklevich

Subscribers: mehdi_amini, eraman, hiraditya, dexonsmith, llvm-commits

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

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

6 years ago[Analysis] Fix isSafeToLoadUnconditionally handling of volatile.
Eli Friedman [Thu, 24 Jan 2019 21:31:13 +0000 (21:31 +0000)]
[Analysis] Fix isSafeToLoadUnconditionally handling of volatile.

A volatile operation cannot be used to prove an address points to normal
memory.  (LangRef was recently updated to state it explicitly.)

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

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

6 years agoLimit dyld image suffixes guessed by guessLibraryShortName()
Michael Trent [Thu, 24 Jan 2019 20:59:44 +0000 (20:59 +0000)]
Limit dyld image suffixes guessed by guessLibraryShortName()

Summary:
guessLibraryShortName() separates a full Mach-O dylib install name path
into a short name and a dyld image suffix. The short name is the name
of the dylib without its path or extension. The dyld image suffix is a
string used by dyld to load variants of dylibs if available at runtime;
for example, "when binding this process, load 'debug' variants of all
required dylibs." dyld knows exactly what the image suffix is, but
by convention diagnostic tools such as llvm-nm attempt to guess suffix
names by looking at the install name path.

These dyld image suffixes are separated from the short name by a '_'
character. Because the '_' character is commonly used to separate words
in filenames guessLibraryShortName() cannot reliably separate a dylib's
short name from an arbitrary image suffix; imagine if both the short
name and the suffix contains an '_' character! To better deal with this
ambiguity, guessLibraryShortName() will recognize only "_debug" and
"_profile" as valid Suffix values. Calling code needs to be tolerant of
guessLibraryShortName() guessing incorrectly.

The previous implementation of guessLibraryShortName() did not allow
'_' characters to appear in short names. When present, the short name
would be  truncated, e.g., "libcompiler_rt" => "libcompiler". This
change allows "libcompiler_rt" and "libcompiler_rt_debug" to both be
recognized as "libcompiler_rt".

rdar://47412244

Reviewers: kledzik, lhames, pete

Reviewed By: pete

Subscribers: llvm-commits

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

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

6 years agoFix a compiler error introduced in r352093.
Haojian Wu [Thu, 24 Jan 2019 20:30:48 +0000 (20:30 +0000)]
Fix a compiler error introduced in r352093.

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

6 years agogn build: Merge r351990
Nico Weber [Thu, 24 Jan 2019 20:19:18 +0000 (20:19 +0000)]
gn build: Merge r351990

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

6 years ago[LICM] Cleanup duplicated code. [NFCI]
Alina Sbirlea [Thu, 24 Jan 2019 19:57:30 +0000 (19:57 +0000)]
[LICM] Cleanup duplicated code. [NFCI]

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

6 years ago[MemorySSA +LICM CFHoist] Solve PR40317.
Alina Sbirlea [Thu, 24 Jan 2019 19:48:35 +0000 (19:48 +0000)]
[MemorySSA +LICM CFHoist] Solve PR40317.

Summary:
MemorySSA needs updating each time an instruction is moved.
LICM and control flow hoisting re-hoists instructions, thus needing another update when re-moving those instructions.
Pending cleanup: the MSSA update is duplicated, should be moved inside moveInstructionBefore.

Reviewers: jnspaulsson

Subscribers: sanjoy, jlebar, Prazek, george.burgess.iv, llvm-commits

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

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

6 years agoTest cases for demanded elements on vector GEPs
Philip Reames [Thu, 24 Jan 2019 19:35:28 +0000 (19:35 +0000)]
Test cases for demanded elements on vector GEPs

This is the first part of splitting apart https://reviews.llvm.org/D57140 into usuable pieces.  Landing the tests in advance of posting a review specifically for the demanded elements part.

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

6 years ago[IRBuilder] Remove positivity check from CreateAlignmentAssumption()
Roman Lebedev [Thu, 24 Jan 2019 19:32:48 +0000 (19:32 +0000)]
[IRBuilder] Remove positivity check from CreateAlignmentAssumption()

Summary:
An alignment should be non-zero positive power-of-two, anything and everything else is UB.
We should not have that check for all these prerequisites here, it's just UB.
Also, that was likely confusing middle-end passes.

While there, `CreateIntCast()` should be called with `/*isSigned*/ false`.
Think about it, there are two explanations: "An alignment should be positive",
therefore the sign bit is unset, so `zext` and `sext` is equivalent.
Or a second one: you have `i2 0b10` - a valid alignment,
now you `sext` it: `i2 0b110` - no longer valid alignment.

Reviewers: craig.topper, jyknight, hfinkel, erichkeane, rjmccall

Reviewed By: hfinkel, rjmccall

Subscribers: hfinkel, llvm-commits

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

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

6 years ago[X86] Regenerate SBB test to fix buildbots.
Simon Pilgrim [Thu, 24 Jan 2019 18:57:48 +0000 (18:57 +0000)]
[X86] Regenerate SBB test to fix buildbots.

Some local WIP code unexpectedly managed to get in the way.

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

6 years ago[HotColdSplit] Move splitting earlier in the pipeline
Vedant Kumar [Thu, 24 Jan 2019 18:55:49 +0000 (18:55 +0000)]
[HotColdSplit] Move splitting earlier in the pipeline

Performing splitting early has several advantages:

  - Inhibiting inlining of cold code early improves code size. Compared
    to scheduling splitting at the end of the pipeline, this cuts code
    size growth in half within the iOS shared cache (0.69% to 0.34%).

  - Inhibiting inlining of cold code improves compile time. There's no
    need to inline split cold functions, or to inline as much *within*
    those split functions as they are marked `minsize`.

  - During LTO, extra work is only done in the pre-link step. Less code
    must be inlined during cross-module inlining.

An additional motivation here is that the most common cold regions
identified by the static/conservative splitting heuristic can (a) be
found before inlining and (b) do not grow after inlining. E.g.
__assert_fail, os_log_error.

The disadvantages are:

  - Some opportunities for splitting out cold code may be missed. This
    gap can potentially be narrowed by adding a worklist algorithm to the
    splitting pass.

  - Some opportunities to reduce code size may be lost (e.g. store
    sinking, when one side of the CFG diamond is split). This does not
    outweigh the code size benefits of splitting earlier.

On net, splitting early in the pipeline has substantial code size
benefits, and no major effects on memory locality or performance. We
measured memory locality using ktrace data, and consistently found that
10% fewer pages were needed to capture 95% of text page faults in key
iOS benchmarks. We measured performance on frequency-stabilized iOS
devices using LNT+externals.

This reverses course on the decision made to schedule splitting late in
r344869 (D53437).

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

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

6 years ago[x86] rename VectorShuffle -> Shuffle; NFC
Sanjay Patel [Thu, 24 Jan 2019 18:52:12 +0000 (18:52 +0000)]
[x86] rename VectorShuffle -> Shuffle; NFC

This wasn't consistent within the file, so made it harder to search.
Standardize on the shorter name to save some typing.

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

6 years agoFix emission of _fltused for MSVC.
James Y Knight [Thu, 24 Jan 2019 18:34:00 +0000 (18:34 +0000)]
Fix emission of _fltused for MSVC.

It should be emitted when any floating-point operations (including
calls) are present in the object, not just when calls to printf/scanf
with floating point args are made.

The difference caused by this is very subtle: in static (/MT) builds,
on x86-32, in a program that uses floating point but doesn't print it,
the default x87 rounding mode may not be set properly upon
initialization.

This commit also removes the walk of the types pointed to by pointer
arguments in calls. (To assist in opaque pointer types migration --
eventually the pointee type won't be available.)

That latter implies that it will no longer consider a call like
`scanf("%f", &floatvar)` as sufficient to emit _fltused on its
own. And without _fltused, `scanf("%f")` will abort with error R6002. This
new behavior is unlikely to bite anyone in practice (you'd have to
read a float, and do nothing with it!), and also, is consistent with
MSVC.

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

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

6 years ago[X86] Add PR25858 test cases
Simon Pilgrim [Thu, 24 Jan 2019 18:30:45 +0000 (18:30 +0000)]
[X86] Add PR25858 test cases

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

6 years agoRevert "[Sanitizers] UBSan unreachable incompatible with ASan in the presence of...
Julian Lettner [Thu, 24 Jan 2019 18:04:21 +0000 (18:04 +0000)]
Revert "[Sanitizers] UBSan unreachable incompatible with ASan in the presence of `noreturn` calls"

This reverts commit cea84ab93aeb079a358ab1c8aeba6d9140ef8b47.

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

6 years ago[SelectionDAGBuilder] Simplify HasSideEffect calculation. NFC.
Nirav Dave [Thu, 24 Jan 2019 17:56:03 +0000 (17:56 +0000)]
[SelectionDAGBuilder] Simplify HasSideEffect calculation. NFC.

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

6 years ago[InlineAsm] Don't calculate registers for inline asm memory operands. NFCI.
Nirav Dave [Thu, 24 Jan 2019 17:47:18 +0000 (17:47 +0000)]
[InlineAsm] Don't calculate registers for inline asm memory operands. NFCI.

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

6 years ago[x86] add low/high undef half shuffle mask helpers; NFC
Sanjay Patel [Thu, 24 Jan 2019 17:05:02 +0000 (17:05 +0000)]
[x86] add low/high undef half shuffle mask helpers; NFC

This is the most common usage for isUndefInRange,
so make the code slightly less duplicated and more
readable.

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

6 years ago[RS4GC] Expand/standardize tests introduced in rL352059
Philip Reames [Thu, 24 Jan 2019 16:45:23 +0000 (16:45 +0000)]
[RS4GC] Expand/standardize tests introduced in rL352059

Write a couple of variations on vector geps w/both scalars and vectors live over safepoints.  Use update_test_checks to show all the IR.

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

6 years ago[RS4GC] Be slightly less conservative for gep vector_base, scalar_idx
Philip Reames [Thu, 24 Jan 2019 16:34:00 +0000 (16:34 +0000)]
[RS4GC] Be slightly less conservative for gep vector_base, scalar_idx

After submitting https://reviews.llvm.org/D57138, I realized it was slightly more conservative than needed. The scalar indices don't appear to be a problem on a vector gep, we even had a test for that.

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

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

6 years ago[RS4GC] Avoid crashing on gep scalar_base, vector_idx
Philip Reames [Thu, 24 Jan 2019 16:08:18 +0000 (16:08 +0000)]
[RS4GC] Avoid crashing on gep scalar_base, vector_idx

This is an alternative to https://reviews.llvm.org/D57103.  After discussion, we dedicided to check this in as a temporary workaround, and pursue a true fix under the original thread.

The issue at hand is that the base rewriting algorithm doesn't consider the fact that GEPs can turn a scalar input into a vector of outputs. We had handling for scalar GEPs and fully vector GEPs (i.e. all vector operands), but not the scalar-base + vector-index forms. A true fix here requires treating GEP analogously to extractelement or shufflevector.

This patch is merely a workaround. It simply hides the crash at the cost of some ugly code gen for this presumable very rare pattern.

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

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

6 years ago[TargetLowering] Rename getExpandedFixedPointMultiplication to expandFixedPointMul...
Simon Pilgrim [Thu, 24 Jan 2019 15:46:54 +0000 (15:46 +0000)]
[TargetLowering] Rename getExpandedFixedPointMultiplication to expandFixedPointMul. NFCI.

Match the (much shorter) name used in various legalization methods.

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

6 years ago[SelectionDAGBuilder] Fuse inline asm input operand loops passes. NFCI.
Nirav Dave [Thu, 24 Jan 2019 15:15:32 +0000 (15:15 +0000)]
[SelectionDAGBuilder] Fuse inline asm input operand loops passes. NFCI.

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

6 years ago[Docs] Add information about unit tests to the testing guide
Michael Platings [Thu, 24 Jan 2019 15:11:26 +0000 (15:11 +0000)]
[Docs] Add information about unit tests to the testing guide

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

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

6 years ago[X86] Add missing isReg() guards in FixupSetCCs pass.
Nirav Dave [Thu, 24 Jan 2019 15:04:17 +0000 (15:04 +0000)]
[X86] Add missing isReg() guards in FixupSetCCs pass.

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

6 years ago[x86] add tests for unpack shuffle lowering; NFC
Sanjay Patel [Thu, 24 Jan 2019 14:12:34 +0000 (14:12 +0000)]
[x86] add tests for unpack shuffle lowering; NFC

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

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

6 years ago[CostModel][X86] Add SMUL fixed point cost tests
Simon Pilgrim [Thu, 24 Jan 2019 13:48:20 +0000 (13:48 +0000)]
[CostModel][X86] Add SMUL fixed point cost tests

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

6 years ago[TTI] Add generic SADDO/SSUBO costs
Simon Pilgrim [Thu, 24 Jan 2019 13:36:45 +0000 (13:36 +0000)]
[TTI] Add generic SADDO/SSUBO costs

Added x86 scalar sadd_with_overflow/ssub_with_overflow costs.

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

6 years ago[TTI] Add generic UADDSAT/USUBSAT costs
Simon Pilgrim [Thu, 24 Jan 2019 12:27:10 +0000 (12:27 +0000)]
[TTI] Add generic UADDSAT/USUBSAT costs

Add generic costs calculation for UADDSAT/USUBSAT intrinsics, this fallbacks to using generic costs for uadd_with_overflow/usub_with_overflow + a select.

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

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

6 years ago[TTI] Add generic UADDO/USUBO costs
Simon Pilgrim [Thu, 24 Jan 2019 12:10:20 +0000 (12:10 +0000)]
[TTI] Add generic UADDO/USUBO costs

Added x86 scalar uadd_with_overflow/usub_with_overflow costs.

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

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

6 years agoRevert "[HotColdSplitting] Get DT and PDT from the pass manager."
Florian Hahn [Thu, 24 Jan 2019 11:22:08 +0000 (11:22 +0000)]
Revert "[HotColdSplitting] Get DT and PDT from the pass manager."

This reverts commit a6982414edf315c39ae93f3c3322476217119e99 (llvm-svn: 352036),
because it causes a memory leak in the pass manager. Failing bot

http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-bootstrap/builds/10351/steps/check-llvm%20asan/logs/stdio

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

6 years ago[MIPS GlobalISel] Select zero extending and sign extending load
Petar Avramovic [Thu, 24 Jan 2019 10:27:21 +0000 (10:27 +0000)]
[MIPS GlobalISel] Select zero extending and sign extending load

Select zero extending and sign extending load for MIPS32.
Use size from MachineMemOperand to determine number of bytes to load.

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

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

6 years ago[MIPS GlobalISel] Combine extending loads
Petar Avramovic [Thu, 24 Jan 2019 10:09:52 +0000 (10:09 +0000)]
[MIPS GlobalISel] Combine extending loads

Use CombinerHelper to combine extending load instructions.
G_LOAD combined with G_ZEXT, G_SEXT or G_ANYEXT gives G_ZEXTLOAD,
G_SEXTLOAD or G_LOAD with same type as def of extending instruction
respectively.
Similarly G_ZEXTLOAD combined with G_ZEXT gives G_ZEXTLOAD and
G_SEXTLOAD combined with G_SEXT gives G_SEXTLOAD with same type
as def of extending instruction.

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

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

6 years ago[HotColdSplitting] Get DT and PDT from the pass manager.
Florian Hahn [Thu, 24 Jan 2019 09:44:52 +0000 (09:44 +0000)]
[HotColdSplitting] Get DT and PDT from the pass manager.

Instead of manually computing DT and PDT, we can get the from the pass
manager, which ideally has them already cached. With the new pass
manager, we could even preserve DT/PDT on a per function basis in a
module pass.

I think this also addresses the TODO about re-using the computed DTs for
BFI. IIUC, GetBFI will fetch the DT from the pass manager and when we
will fetch the cached version later.

Reviewers: vsk, hiraditya, tejohnson, thegameg, sebpop

Reviewed By: vsk

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

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

6 years agoReapply: [mips] Handle MipsMCExpr sub-expression for the MEK_DTPREL tag
Simon Atanasyan [Thu, 24 Jan 2019 09:13:14 +0000 (09:13 +0000)]
Reapply: [mips] Handle MipsMCExpr sub-expression for the MEK_DTPREL tag

This reapplies commit r351987 with a failed test fix. Now the test
accepts both DW_OP_GNU_push_tls_address and DW_OP_form_tls_address
opcode.

Original commit message:
```
  This is a fix for a regression introduced by the rL348194 commit. In
  that change new type (MEK_DTPREL) of MipsMCExpr expression was added,
  but in some places of the code this type of expression considered as
  unexpected.

  This change fixes the bug. The MEK_DTPREL type of expression is used for
  marking TLS DIEExpr only and contains a regular sub-expression. Where we
  need to handle the expression, we retrieve the sub-expression and
  handle it in a common way.
```

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

6 years ago[SystemZ] Remember to reset the NoPHIs property on MF in createPHIsForSelects()
Jonas Paulsson [Thu, 24 Jan 2019 07:54:41 +0000 (07:54 +0000)]
[SystemZ]  Remember to reset the NoPHIs property on MF in createPHIsForSelects()

After creating new PHI instructions during isel pseudo expansion, the NoPHIs
property of MF should be reset in case it was previously set.

Review: Ulrich Weigand

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

6 years ago[X86] Update SelectionDAGDumper to print the extension type and expanding flag for...
Craig Topper [Thu, 24 Jan 2019 07:51:34 +0000 (07:51 +0000)]
[X86] Update SelectionDAGDumper to print the extension type and expanding flag for masked loads. Add truncating and compressing for masked stores.

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

6 years ago[X86] Add test cases for opportunities to fold a truncate and a masked store into...
Craig Topper [Thu, 24 Jan 2019 06:15:03 +0000 (06:15 +0000)]
[X86] Add test cases for opportunities to fold a truncate and a masked store into a truncating masked store.

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

6 years ago[NFC] Add another failing test on LoopSimplifyCFG
Max Kazantsev [Thu, 24 Jan 2019 05:43:19 +0000 (05:43 +0000)]
[NFC] Add another failing test on LoopSimplifyCFG

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

6 years ago[LoopSimplifyCFG] Fix inconsistency in live blocks markup
Max Kazantsev [Thu, 24 Jan 2019 05:20:29 +0000 (05:20 +0000)]
[LoopSimplifyCFG] Fix inconsistency in live blocks markup

When we choose whether or not we should mark block as dead, we have an
inconsistent logic in markup of live blocks.
- We take candidate IF its terminator branches on constant AND it is immediately
  in current loop;
- We mark successor live IF its terminator doesn't branch by constant OR it branches
  by constant and the successor is its always taken block.

What we are missing here is that when the terminator branches on a constant but is
not taken as a candidate because is it not immediately in the current loop, we will
mark only one (always taken) successor as live. Therefore, we do NOT do the actual
folding but may NOT mark one of the successors as live. So the result of markup is
wrong in this case, and we may then hit various asserts.

Thanks Jordan Rupprech for reporting this!

Differential Revision: https://reviews.llvm.org/D57095
Reviewed By: rupprecht

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

6 years ago[NFC] Add a failing test on live block markup in term folding
Max Kazantsev [Thu, 24 Jan 2019 05:05:55 +0000 (05:05 +0000)]
[NFC] Add a failing test on live block markup in term folding

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

6 years agoDebugInfo: Use assembly label arithmetic for address pool size for easier reading...
David Blaikie [Thu, 24 Jan 2019 03:27:57 +0000 (03:27 +0000)]
DebugInfo: Use assembly label arithmetic for address pool size for easier reading/editing

Recommits 350048, 350050 That broke buildbots because of some typos in
the test case.

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

6 years agoRevert "[RISCV] Set isAsCheapAsAMove for ADDI, ORI, XORI, LUI"
Ana Pazos [Thu, 24 Jan 2019 03:00:26 +0000 (03:00 +0000)]
Revert "[RISCV] Set isAsCheapAsAMove for ADDI, ORI, XORI, LUI"

This reverts commit ccfb060ecb5d7e18ea729455660484d576bde2cc.

Some tests need to to fixed before reapplying this commit.

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

6 years ago[RISCV] Set isAsCheapAsAMove for ADDI, ORI, XORI, LUI
Ana Pazos [Thu, 24 Jan 2019 02:41:40 +0000 (02:41 +0000)]
[RISCV] Set isAsCheapAsAMove for ADDI, ORI, XORI, LUI

Summary:
Affected instructions:
PseudoLI simplest form (ADDI with X0)
ALU operations with immediate (they do not set status flag - ADDI, ORI, XORI)

Reviewers: asb

Reviewed By: asb

Subscribers: shiva0217, rkruppe, kito-cheng, asb, rbar, johnrusso, simoncook, sabuasal, niosHD, zzheng, edward-jones, mgrang, rogfer01, MartinMosbeck, brucehoult, the_o, PkmX, jocewei

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

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

6 years ago[RISCV] Set isReMaterializable for ORI, XORI
Ana Pazos [Thu, 24 Jan 2019 02:31:23 +0000 (02:31 +0000)]
[RISCV] Set isReMaterializable for ORI, XORI

Reviewers: asb

Reviewed By: asb

Subscribers: asb, rbar, johnrusso, simoncook, sabuasal, niosHD, kito-cheng, shiva0217, zzheng, edward-jones, rogfer01, MartinMosbeck, brucehoult, the_o, rkruppe, PkmX, jocewei

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

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

6 years ago[docs] Remove extra character from git URL in Getting Started guide.
Douglas Yung [Thu, 24 Jan 2019 01:22:32 +0000 (01:22 +0000)]
[docs] Remove extra character from git URL in Getting Started guide.

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

6 years agollvm-symbolizer: Extract individual test cases now that it's easier to use directly...
David Blaikie [Thu, 24 Jan 2019 01:19:17 +0000 (01:19 +0000)]
llvm-symbolizer: Extract individual test cases now that it's easier to use directly (without a piped input file)

Pulling out the split-dwarf tests by way of example of how I think
llvm-symbolizer should be tested going forward. Open to
debate/discussion, though.

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

6 years ago[Sanitizers] UBSan unreachable incompatible with ASan in the presence of `noreturn...
Julian Lettner [Thu, 24 Jan 2019 01:06:19 +0000 (01:06 +0000)]
[Sanitizers] UBSan unreachable incompatible with ASan in the presence of `noreturn` calls

Summary:
UBSan wants to detect when unreachable code is actually reached, so it
adds instrumentation before every `unreachable` instruction. However,
the optimizer will remove code after calls to functions marked with
`noreturn`. To avoid this UBSan removes `noreturn` from both the call
instruction as well as from the function itself. Unfortunately, ASan
relies on this annotation to unpoison the stack by inserting calls to
`_asan_handle_no_return` before `noreturn` functions. This is important
for functions that do not return but access the the stack memory, e.g.,
unwinder functions *like* `longjmp` (`longjmp` itself is actually
"double-proofed" via its interceptor). The result is that when ASan and
UBSan are combined, the `noreturn` attributes are missing and ASan
cannot unpoison the stack, so it has false positives when stack
unwinding is used.

Changes:
  # UBSan now adds the `expect_noreturn` attribute whenever it removes
    the `noreturn` attribute from a function
  # ASan additionally checks for the presence of this attribute

Generated code:
```
call void @__asan_handle_no_return    // Additionally inserted to avoid false positives
call void @longjmp
call void @__asan_handle_no_return
call void @__ubsan_handle_builtin_unreachable
unreachable
```

The second call to `__asan_handle_no_return` is redundant. This will be
cleaned up in a follow-up patch.

rdar://problem/40723397

Reviewers: delcypher, eugenis

Tags: #sanitizers

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

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

6 years agogn build: Merge r351320 (the 9.0.0 version bump)
Nico Weber [Thu, 24 Jan 2019 01:00:52 +0000 (01:00 +0000)]
gn build: Merge r351320 (the 9.0.0 version bump)

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

6 years agoUpdate entry count for cold calls
David Callahan [Thu, 24 Jan 2019 00:55:23 +0000 (00:55 +0000)]
Update entry count for cold calls

Summary:
Profile sample files include the number of times each entry or inlined
call site is sampled. This is translated into the entry count metadta
on functions.

When sample data is being read, if a call site that was inlined
in the sample program is considered cold and not inlined, then
the entry count of the out-of-line functions does not reflect
the current compilation.

In this patch, we note call sites where the function was not inlined
and as a last action of the sample profile loading, we update the
called function's entry count to reflect the calls from these
call sites which are not included in the profile file.

Reviewers: danielcdh, wmi, Kader, modocache

Reviewed By: wmi

Subscribers: davidxl, eraman, llvm-commits

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

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

6 years ago[llvm-symbolizer] Add support for -i and -inlines as aliases for -inlining
Douglas Yung [Thu, 24 Jan 2019 00:34:09 +0000 (00:34 +0000)]
[llvm-symbolizer] Add support for -i and -inlines as aliases for -inlining

This change adds two options, -i and -inlines as aliases for the -inlining option to llvm-symbolizer to improve compatibility with the GNU addr2line utility which accepts these options.

It also modifies existing tests that use -inlining to exercise these new aliases as well.

This fixes PR40073.

Reviewed by: jhenderson, Quolyk, ruiu

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

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

6 years agoRevert "[mips] Handle MipsMCExpr sub-expression for the MEK_DTPREL tag"
Amara Emerson [Thu, 24 Jan 2019 00:24:59 +0000 (00:24 +0000)]
Revert "[mips] Handle MipsMCExpr sub-expression for the MEK_DTPREL tag"

This reverts commit r351987 as it broke some bots.

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

6 years ago[llvm] Clarify responsiblity of some of DILocation discriminator APIs
Mircea Trofin [Thu, 24 Jan 2019 00:10:25 +0000 (00:10 +0000)]
[llvm] Clarify responsiblity of some of DILocation discriminator APIs

Summary:
Renamed setBaseDiscriminator to cloneWithBaseDiscriminator, to match
similar APIs. Also changed its behavior to copy over the other
discriminator components, instead of eliding them.

Renamed cloneWithDuplicationFactor to
cloneByMultiplyingDuplicationFactor, which more closely matches what
this API does.

Reviewers: dblaikie, wmi

Reviewed By: dblaikie

Subscribers: zzheng, llvm-commits

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

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

6 years ago[ADT] Notify ilist traits about in-list transfers
Reid Kleckner [Wed, 23 Jan 2019 22:59:52 +0000 (22:59 +0000)]
[ADT] Notify ilist traits about in-list transfers

Summary:
Previously no client of ilist traits has needed to know about transfers
of nodes within the same list, so as an optimization, ilist doesn't call
transferNodesFromList in that case. However, now there are clients that
want to use ilist traits to cache instruction ordering information to
optimize dominance queries of instructions in the same basic block.
This change updates the existing ilist traits users to detect in-list
transfers and do nothing in that case.

After this change, we can start caching instruction ordering information
in LLVM IR data structures. There are two main ways to do that:
- by putting an order integer into the Instruction class
- by maintaining order integers in a hash table on BasicBlock

I plan to implement and measure both, but I wanted to commit this change
first to enable other out of tree ilist clients to implement this
optimization as well.

Reviewers: lattner, hfinkel, chandlerc

Subscribers: hiraditya, dexonsmith, llvm-commits

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

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

6 years ago[LV][VPlan] Change to implement VPlan based predication for
Hideki Saito [Wed, 23 Jan 2019 22:43:12 +0000 (22:43 +0000)]
[LV][VPlan] Change to implement VPlan based predication for
VPlan-native path

Context: Patch Series #2 for outer loop vectorization support in LV
using VPlan. (RFC:
http://lists.llvm.org/pipermail/llvm-dev/2017-December/119523.html).

Patch series #2 checks that inner loops are still trivially lock-step
among all vector elements. Non-loop branches are blindly assumed as
divergent.

Changes here implement VPlan based predication algorithm to compute
predicates for blocks that need predication. Predicates are computed
for the VPLoop region in reverse post order. A block's predicate is
computed as OR of the masks of all incoming edges. The mask for an
incoming edge is computed as AND of predecessor block's predicate and
either predecessor's Condition bit or NOT(Condition bit) depending on
whether the edge from predecessor block to the current block is true
or false edge.

Reviewers: fhahn, rengolin, hsaito, dcaballe

Reviewed By: fhahn

Patch by Satish Guggilla, thanks!

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

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

6 years agohwasan: Read shadow address from ifunc if we don't need a frame record.
Peter Collingbourne [Wed, 23 Jan 2019 22:39:11 +0000 (22:39 +0000)]
hwasan: Read shadow address from ifunc if we don't need a frame record.

This saves a cbz+cold call in the interceptor ABI, as well as a realign
in both ABIs, trading off a dcache entry against some branch predictor
entries and some code size.

Unfortunately the functionality is hidden behind a flag because ifunc is
known to be broken on static binaries on Android.

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

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

6 years ago[mips] Handle MipsMCExpr sub-expression for the MEK_DTPREL tag
Simon Atanasyan [Wed, 23 Jan 2019 22:02:53 +0000 (22:02 +0000)]
[mips] Handle MipsMCExpr sub-expression for the MEK_DTPREL tag

This is a fix for a regression introduced by the rL348194 commit. In
that change new type (MEK_DTPREL) of MipsMCExpr expression was added,
but in some places of the code this type of expression considered as
unexpected.

This change fixes the bug. The MEK_DTPREL type of expression is used for
marking TLS DIEExpr only and contains a regular sub-expression. Where we
need to handle the expression, we retrieve the sub-expression and
handle it in a common way.

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

6 years agoRevert r351938 "[ARM] Alter the register allocation order for minsize on Thumb2"
Reid Kleckner [Wed, 23 Jan 2019 21:10:48 +0000 (21:10 +0000)]
Revert r351938 "[ARM] Alter the register allocation order for minsize on Thumb2"

This change caused fatal backend errors when compiling a file in libvpx
for Android.

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

6 years ago[DEBUGINFO, NVPTX] Enable support for the debug info on NVPTX target.
Alexey Bataev [Wed, 23 Jan 2019 18:59:54 +0000 (18:59 +0000)]
[DEBUGINFO, NVPTX] Enable support for the debug info on NVPTX target.

Enable full support for the debug info.

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

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

6 years agoRevert "[DEBUGINFO, NVPTX] Enable support for the debug info on NVPTX target."
Alexey Bataev [Wed, 23 Jan 2019 18:48:36 +0000 (18:48 +0000)]
Revert "[DEBUGINFO, NVPTX] Enable support for the debug info on NVPTX target."

This reverts commit r351972. Some pieces of the patch was not applied
correctly.

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

6 years ago[DEBUGINFO, NVPTX] Enable support for the debug info on NVPTX target.
Alexey Bataev [Wed, 23 Jan 2019 18:28:59 +0000 (18:28 +0000)]
[DEBUGINFO, NVPTX] Enable support for the debug info on NVPTX target.

Enable full support for the debug info. Recommit to fix the emission of
the not required closing brace.

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

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

6 years ago[X86] Autogenerate complete checks. NFC
Craig Topper [Wed, 23 Jan 2019 18:25:49 +0000 (18:25 +0000)]
[X86] Autogenerate complete checks. NFC

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

6 years ago[llvm-symbolizer] Improve compatibility of --functions with GNU addr2line
James Henderson [Wed, 23 Jan 2019 17:27:48 +0000 (17:27 +0000)]
[llvm-symbolizer] Improve compatibility of --functions with GNU addr2line

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

GNU addr2line's --functions switch is off by default, has a short alias
of -f, and does not take an argument. This patch changes llvm-symbolizer
to allow the second and third point (changing the default behaviour may
have negative impacts on users). If the option is missing a value, it
now treats it as "linkage".

This change does cause one previously valid command-line to behave
differently. Before --functions <value> was accepted, but now only
--functions=<value> is allowed (as well as --functions). The old
behaviour will result in the value being treated as a positional
argument.

The previous testing for --functions=short has been pulled out into a
new test that also tests the other accepted values and option formats.

Reviewed by: ruiu

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

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

6 years agoRevert "[DEBUGINFO, NVPTX] Enable support for the debug info on NVPTX target."
Haojian Wu [Wed, 23 Jan 2019 16:39:57 +0000 (16:39 +0000)]
Revert "[DEBUGINFO, NVPTX] Enable support for the debug info on NVPTX target."

This reverts commit r351846.

This patch may generate illegal assembly code, see

```
$ ./bin/clang -cc1 -triple nvptx64-nvidia-cuda -aux-triple x86_64-grtev4-linux-gnu -S -disable-free -disable-llvm-verifier -discard-value-names -main-file-name new.cc -mrelocation-model pic -pic-level 2 -mthread-model posix -fmerge-all-constants -mdisable-fp-elim -relaxed-aliasing -no-integrated-as -mpie-copy-relocations -munwind-tables -fcuda-is-device -target-feature +ptx60 -target-cpu sm_35 -dwarf-column-info -debug-info-kind=line-directives-only -dwarf-version=2 -debugger-tuning=gdb -o empty.s -x cuda empty.cc
$  cat empty.s
//
// Generated by LLVM NVPTX Back-End
//

.version 6.0
.target sm_35
.address_size 64

}
```

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

6 years ago[MC][X86] Correctly model additional operand latency caused by transfer delays from...
Andrea Di Biagio [Wed, 23 Jan 2019 16:35:07 +0000 (16:35 +0000)]
[MC][X86] Correctly model additional operand latency caused by transfer delays from the integer to the floating point unit.

This patch adds a new ReadAdvance definition named ReadInt2Fpu.
ReadInt2Fpu allows x86 scheduling models to accurately describe delays caused by
data transfers from the integer unit to the floating point unit.
ReadInt2Fpu currently defaults to a delay of zero cycles (i.e. no delay) for all
x86 models excluding BtVer2. That means, this patch is only a functional change
for the Jaguar cpu model only.

Tablegen definitions for instructions (V)PINSR* have been updated to account for
the new ReadInt2Fpu. That read is mapped to the the GPR input operand.
On Jaguar, int-to-fpu transfers are modeled as a +6cy delay. Before this patch,
that extra delay was added to the opcode latency. In practice, the insert opcode
only executes for 1cy. Most of the actual latency is actually contributed by the
so-called operand-latency. According to the AMD SOG for family 16h, (V)PINSR*
latency is defined by expression f+1, where f is defined as a forwarding delay
from the integer unit to the fpu.

When printing instruction latency from MCA (see InstructionInfoView.cpp) and LLC
(only when flag -print-schedule is speified), we now need to account for any
extra forwarding delays. We do this by checking if scheduling classes declare
any negative ReadAdvance entries. Quoting a code comment in TargetSchedule.td:
"A negative advance effectively increases latency, which may be used for
cross-domain stalls". When computing the instruction latency for the purpose of
our scheduling tests, we now add any extra delay to the formula. This avoids
regressing existing codegen and mca schedule tests. It comes with the cost of an
extra (but very simple) hook in MCSchedModel.

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

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

6 years ago[llvm-readelf] Don't suppress static symbol table with --dyn-symbols + --symbols
James Henderson [Wed, 23 Jan 2019 16:15:39 +0000 (16:15 +0000)]
[llvm-readelf] Don't suppress static symbol table with --dyn-symbols + --symbols

In r287786, a bug was introduced into llvm-readelf where it didn't print
the static symbol table if both --symbols and --dyn-symbols were
specified, even if there was no dynamic symbol table. This is obviously
incorrect.

This patch fixes this issue, by delegating the decision of which symbol
tables should be printed to the final dumper, rather than trying to
decide in the command-line option handling layer. The decision was made
to follow the approach taken in this patch because the LLVM style dumper
uses a different order to the original GNU style behaviour (and GNU
readelf) for ELF output. Other approaches resulted in behaviour changes
for other dumpers which felt wrong. In particular, I wanted to avoid
changing the order of the output for --symbols --dyn-symbols for LLVM
style, keep what is emitted by --symbols unchanged for all dumpers, and
avoid having different orders of .dynsym and .symtab dumping for GNU
"--symbols" and "--symbols --dyn-symbols".

Reviewed by: grimar, rupprecht

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

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

6 years agoFix indentation. NFCI.
Simon Pilgrim [Wed, 23 Jan 2019 16:01:19 +0000 (16:01 +0000)]
Fix indentation. NFCI.

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

6 years ago[IR] Match intrinsic parameter by scalar/vectorwidth
Simon Pilgrim [Wed, 23 Jan 2019 16:00:22 +0000 (16:00 +0000)]
[IR] Match intrinsic parameter by scalar/vectorwidth

This patch replaces the existing LLVMVectorSameWidth matcher with LLVMScalarOrSameVectorWidth.

The matching args must be either scalars or vectors with the same number of elements, but in either case the scalar/element type can differ, specified by LLVMScalarOrSameVectorWidth.

I've updated the _overflow intrinsics to demonstrate this - allowing it to return a i1 or <N x i1> overflow result, matching the scalar/vectorwidth of the other (add/sub/mul) result type.

The masked load/store/gather/scatter intrinsics have also been updated to use this, although as we specify the reference type to be llvm_anyvector_ty we guarantee the mask will be <N x i1> so no change in behaviour

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

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

6 years ago[Hexagon] Remove incorrect bit negation
Krzysztof Parzyszek [Wed, 23 Jan 2019 15:36:33 +0000 (15:36 +0000)]
[Hexagon] Remove incorrect bit negation

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

6 years ago[AArch64] Fix out of bounds strlen
Benjamin Kramer [Wed, 23 Jan 2019 14:51:21 +0000 (14:51 +0000)]
[AArch64] Fix out of bounds strlen

CFIInst is not zero-terminated. This is one of more annoying functional
differences between StringRef and ArrayRef.

Found by asan.

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

6 years agoRe-land rL322538 "Add a value_type to ArrayRef."
Clement Courbet [Wed, 23 Jan 2019 14:20:59 +0000 (14:20 +0000)]
Re-land rL322538 "Add a value_type to ArrayRef."

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

6 years agoMove saturated arithmetic intrinsics to other integer intrinsics. NFCI.
Simon Pilgrim [Wed, 23 Jan 2019 13:49:10 +0000 (13:49 +0000)]
Move saturated arithmetic intrinsics to other integer intrinsics. NFCI.

They were in the floating point group.

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

6 years ago[llvm-objdump] - Move common code to a new printRelocation() helper. NFC.
George Rimar [Wed, 23 Jan 2019 13:39:12 +0000 (13:39 +0000)]
[llvm-objdump] - Move common code to a new printRelocation() helper. NFC.

This extracts the common code for printing relocations into a new helper function.

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

6 years ago[AMDGPU] With XNACK, cannot clause a load with result coalesced with operand
Tim Renouf [Wed, 23 Jan 2019 13:38:06 +0000 (13:38 +0000)]
[AMDGPU] With XNACK, cannot clause a load with result coalesced with operand

Summary:
With XNACK, an smem load whose result is coalesced with an operand (thus
it overwrites its own operand) cannot appear in a clause, because some
other instruction might XNACK and restart the whole clause.

The clause breaker already realized that an smem that overwrites an
operand cannot appear in a clause, and broke the clause. The problem
that this commit fixes is that the SIFormMemoryClauses optimization
formed a bundle with early clobber, which caused the earlier code that
set up the coalesced operand to be removed as dead.

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

Change-Id: I703c4d5b0bf7d6060222bec491f45c18bb3c0016

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

6 years ago[llvm-objcopy] [COFF] Error out on use of unhandled options
Martin Storsjo [Wed, 23 Jan 2019 11:54:55 +0000 (11:54 +0000)]
[llvm-objcopy] [COFF] Error out on use of unhandled options

Prefer erroring out than silently not doing what was requested.

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

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

6 years ago[llvm-objcopy] [COFF] Fix handling of aux symbols for big objects
Martin Storsjo [Wed, 23 Jan 2019 11:54:51 +0000 (11:54 +0000)]
[llvm-objcopy] [COFF] Fix handling of aux symbols for big objects

The aux symbols were stored in an opaque std::vector<uint8_t>,
with contents interpreted according to the rest of the symbol.

All aux symbol types but one fit in 18 bytes (sizeof(coff_symbol16)),
and if written to a bigobj, two extra padding bytes are written (as
sizeof(coff_symbol32) is 20). In the storage agnostic intermediate
representation, store the aux symbols as a series of coff_symbol16
sized opaque blobs. (In practice, all such aux symbols only consist
of one aux symbol, so this is more flexible than what reality needs.)

The special case is the file aux symbols, which are written in
potentially more than one aux symbol slot, without any padding,
as one single long string. This can't be stored in the same opaque
vector of fixed sized aux symbol entries. The file aux symbols will
occupy a different number of aux symbol slots depending on the type
of output object file. As nothing in the intermediate process needs
to have accurate raw symbol indices, updating that is moved into the
writer class.

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

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

6 years ago[llvm-objcopy] [COFF] Remove testcase debugging lines. NFC.
Martin Storsjo [Wed, 23 Jan 2019 11:54:36 +0000 (11:54 +0000)]
[llvm-objcopy] [COFF] Remove testcase debugging lines. NFC.

These are no longer necessary as the testcase now seems to run fine
on the buildbots that previously failed on this case, after SVN r351934.

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

6 years ago[HotColdSplitting] Remove unused SSAUpdater.h include (NFC).
Florian Hahn [Wed, 23 Jan 2019 11:51:38 +0000 (11:51 +0000)]
[HotColdSplitting] Remove unused SSAUpdater.h include (NFC).

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

6 years ago[llvm-objdump] - Move variable. NFC.
George Rimar [Wed, 23 Jan 2019 10:52:38 +0000 (10:52 +0000)]
[llvm-objdump] - Move variable. NFC.

It was too far from the place where it is used.

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

6 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

6 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

6 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