OSDN Git Service

android-x86/external-llvm.git
6 years agoFix printing of stack id in MachineFrameInfo
Matt Arsenault [Mon, 9 Apr 2018 21:04:30 +0000 (21:04 +0000)]
Fix printing of stack id in MachineFrameInfo

uint8_t is printed as a char, so it needs to be
casted to do the right thing.

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

6 years ago[MemorySSAUpdater] Mark Phi users of a node being moved as non-optimize
Zhaoshi Zheng [Mon, 9 Apr 2018 20:55:37 +0000 (20:55 +0000)]
[MemorySSAUpdater] Mark Phi users of a node being moved as non-optimize

Fix PR36484, as suggested:

<quote>
during moves, mark the direct users of the erased things that were phis as "not to be optimized"
<quote>

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

6 years agoAMDGPU: Remove max_scratch_backing_memory_byte_size from kernel header
Konstantin Zhuravlyov [Mon, 9 Apr 2018 20:47:22 +0000 (20:47 +0000)]
AMDGPU: Remove max_scratch_backing_memory_byte_size from kernel header

1. Remove max_scratch_backing_memory_byte_size from kernel header
2. Make it a reserved field
3. Ignore it while parsing assembly for backwards compatibility
4. Bump up minor version of kernel header

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

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

6 years ago[X86] Don't use Lower512IntUnary to split bitcasts with v32i16/v64i8 types on targets...
Craig Topper [Mon, 9 Apr 2018 20:37:14 +0000 (20:37 +0000)]
[X86] Don't use Lower512IntUnary to split bitcasts with v32i16/v64i8 types on targets without AVX512BW.

LowerIntUnary as its name says has an assert for integer types. But for the bitcast case one side might be an FP type.

Rather than making sure the function really works for fp types and renaming it. Just do really basic splitting directly. The LowerIntUnary has the advantage that it can peek through BUILD_VECTOR because every other call is during Lowering. But these calls are during legalization and will be followed by a DAG combine round.

Revert some change to LowerVectorIntUnary that were originally made just to make these two calls work even in pure integer cases.

This was found purely by compiling the avx512f-builtins.c test from clang so I've copied over the offending function from that.

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

6 years ago[Debuginfo][COFF] Minimal serialization support for precompiled types records
Alexandre Ganea [Mon, 9 Apr 2018 20:17:56 +0000 (20:17 +0000)]
[Debuginfo][COFF] Minimal serialization support for precompiled types records

This change adds support for the LF_PRECOMP and LF_ENDPRECOMP records required
to read/write Microsoft precompiled types .objs.
See https://en.wikipedia.org/wiki/Precompiled_header#Microsoft_Visual_C_and_C++

This also adds handling for the .debug$P section, which is actually a .debug$T
section in disguise, found only in precompiled .objs.

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

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

6 years agoAArch64: Allow offsets to be folded into addresses with ELF.
Peter Collingbourne [Mon, 9 Apr 2018 19:59:57 +0000 (19:59 +0000)]
AArch64: Allow offsets to be folded into addresses with ELF.

This is a code size win in code that takes offseted addresses
frequently, such as C++ constructors that typically need to compute
an offseted address of a vtable. It reduces the size of Chromium for
Android's .text section by 46KB, or 56KB with ThinLTO (which exposes
more opportunities to use a direct access rather than a GOT access).

Because the addend range is limited in COFF and Mach-O, this is
enabled for ELF only.

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

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

6 years agoRevert "AMDGPU: enable 128-bit for local addr space under an option"
Alex Shlyapnikov [Mon, 9 Apr 2018 19:47:38 +0000 (19:47 +0000)]
Revert "AMDGPU: enable 128-bit for local addr space under an option"

This reverts commit r329591.

It breaks various bots:
http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-fast/builds/16516
http://lab.llvm.org:8011/builders/clang-ppc64be-linux/builds/17374
http://lab.llvm.org:8011/builders/clang-ppc64le-linux/builds/15992
http://lab.llvm.org:8011/builders/clang-ppc64be-linux-lnt
http://lab.llvm.org:8011/builders/clang-ppc64le-linux-lnt/builds/11251
...

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

6 years ago[WebAssembly] Change std::sort to llvm::sort in response to r327219
Mandeep Singh Grang [Mon, 9 Apr 2018 19:38:31 +0000 (19:38 +0000)]
[WebAssembly] Change std::sort to llvm::sort in response to r327219

Summary:
r327219 added wrappers to std::sort which randomly shuffle the container before sorting.
This will help in uncovering non-determinism caused due to undefined sorting
order of objects having the same key.

To make use of that infrastructure we need to invoke llvm::sort instead of std::sort.

Note: This patch is one of a series of patches to replace *all* std::sort to llvm::sort.
Refer the comments section in D44363 for a list of all the required patches.

Reviewers: sunfish, RKSimon

Reviewed By: sunfish

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

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

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

6 years ago[X86] Remove GCCBuiltin name from pmuldq/pmuludq intrinsics so clang can custom lower...
Craig Topper [Mon, 9 Apr 2018 19:17:38 +0000 (19:17 +0000)]
[X86] Remove GCCBuiltin name from pmuldq/pmuludq intrinsics so clang can custom lower to native IR. Update fast-isel intrinsic tests for clang's new codegen.

In somes cases fast-isel fails to remove the and/shifts and uses blends or conditional moves.

But once masking gets involved, fast-isel aborts on the mask portion and we DAG combine more thorougly.

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

6 years ago[SLP] Additional tests for reorder reuse vectorization, NFC.
Alexey Bataev [Mon, 9 Apr 2018 19:02:34 +0000 (19:02 +0000)]
[SLP] Additional tests for reorder reuse vectorization, NFC.

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

6 years agoFix type mismatch between MachineMemOperand constructor and accessors. NFC
Daniel Sanders [Mon, 9 Apr 2018 18:42:19 +0000 (18:42 +0000)]
Fix type mismatch between MachineMemOperand constructor and accessors. NFC

This allows MachineMemOperand::getSize()'s result to be fed directly into
MachineMemOperand::MachineMemOperand() without a narrowing type conversion
warning.

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

6 years ago[demangler] Support for fold expressions.
Erik Pilkington [Mon, 9 Apr 2018 18:33:01 +0000 (18:33 +0000)]
[demangler] Support for fold expressions.

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

6 years ago[demangler] Support for <data-member-prefix>.
Erik Pilkington [Mon, 9 Apr 2018 18:32:25 +0000 (18:32 +0000)]
[demangler] Support for <data-member-prefix>.

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

6 years ago[demangler] Support for partially substituted sizeof....
Erik Pilkington [Mon, 9 Apr 2018 18:31:50 +0000 (18:31 +0000)]
[demangler] Support for partially substituted sizeof....

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

6 years ago[GISel] Refactor MachineIRBuilder to allow transformations while
Aditya Nandakumar [Mon, 9 Apr 2018 17:30:56 +0000 (17:30 +0000)]
[GISel] Refactor MachineIRBuilder to allow transformations while
building.

https://reviews.llvm.org/D45067

This change attempts to do two things:
1) It separates out the state that is stored in the
MachineIRBuilder(InsertionPt, MF, MRI, InsertFunction etc) into a
separate object called MachineIRBuilderState.
2) Add the ability to constant fold operations while building instructions
(optionally). MachineIRBuilder is now refactored into a MachineIRBuilderBase
which contains lots of non foldable build methods and their implementation.
Instructions which can be constant folded/transformed are now in a class
called FoldableInstructionBuilder which uses CRTP to use the implementation
of the derived class for buildBinaryOps. Additionally buildInstr in the derived
class can be used to implement other kinds of transformations.

Also because of separation of state, given a MachineIRBuilder in an API,
if one wishes to use another MachineIRBuilder, a new one can be
constructed from the state locally. For eg,

void doFoo(MachineIRBuilder &B) {
  MyCustomBuilder CustomB(B.getState());
  // Use CustomB for building.
}

reviewed by : aemerson

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

6 years ago[X86] Revert the SLM part of r328914.
Craig Topper [Mon, 9 Apr 2018 17:07:40 +0000 (17:07 +0000)]
[X86] Revert the SLM part of r328914.

While it appears to be correct information based on Intel's optimization manual and Agner's data, it causes perf regressions on a couple of the benchmarks in our internal list.

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

6 years ago[llvm-mca] Fix MCACommentConsumer
Fangrui Song [Mon, 9 Apr 2018 17:06:57 +0000 (17:06 +0000)]
[llvm-mca] Fix MCACommentConsumer

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

6 years agoAMDGPU: enable 128-bit for local addr space under an option
Marek Olsak [Mon, 9 Apr 2018 16:56:32 +0000 (16:56 +0000)]
AMDGPU: enable 128-bit for local addr space under an option

Author: Samuel Pitoiset

ds_read_b128 and ds_write_b128 have been recently enabled
under the amdgpu-ds128 option because the performance benefit
is unclear.

Though, using 128-bit loads/stores for the local address space
appears to introduce regressions in tessellation shaders. Not
sure what is broken, but as ds_read_b128/ds_write_b128 are not
enabled by default, just introduce a global option and enable
128-bit only if requested (until it's fixed/used correctly).

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=105464

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

6 years ago[llvm-mca] Add the ability to mark regions of code for analysis (PR36875)
Andrea Di Biagio [Mon, 9 Apr 2018 16:39:52 +0000 (16:39 +0000)]
[llvm-mca] Add the ability to mark regions of code for analysis (PR36875)

This patch teaches llvm-mca how to parse code comments in search for special
"markers" used to select regions of code.

Example:

# LLVM-MCA-BEGIN My Code Region
  ....
# LLVM-MCA-END

The MCAsmLexer now delegates to an object of class MCACommentParser (i.e. an
AsmCommentConsumer) the parsing of code comments to search for begin/end code
region markers.

A comment starting with substring "LLVM-MCA-BEGIN" marks the beginning of a new
region of code.  A comment starting with substring "LLVM-MCA-END" marks the end
of the last region.

This implementation doesn't allow regions to overlap. Each region can have a
optional description; internally, each region is identified by a range of source
code locations (SMLoc).

MCInst objects are added to a region R only if the source location for the
MCInst is in the range of locations specified by R.

By default, the tool allocates an implicit "Default" code region which contains
every source location.  See new tests llvm-mca-marker-*.s for a few examples.

A new Backend object is created for every region. So, the analysis is conducted
on every parsed code region.  The final report is the union of the reports
generated for every code region.  Note that empty regions are skipped.

Special "[#] Code Region - ..." strings are used in the report to mark the
portion which is specific to a code region only. For example, see
llvm-mca-markers-5.s.

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

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

6 years agoAMDGPU: Initialize GlobalISel passes
Tom Stellard [Mon, 9 Apr 2018 16:09:13 +0000 (16:09 +0000)]
AMDGPU: Initialize GlobalISel passes

Summary:
This fixes AMDGPU GlobalISel test failures when enabling the AMDGPU
target without any other targets that use GlobalISel.

Reviewers: arsenm

Subscribers: kzhuravl, wdng, nhaehnle, yaxunl, rovka, kristof.beyls, dstuttard, tpr, llvm-commits, t-tye

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

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

6 years ago[X86][SSE] Add floating point add/mul strict (ordered) vector.reduce tests (PR36732)
Simon Pilgrim [Mon, 9 Apr 2018 16:01:44 +0000 (16:01 +0000)]
[X86][SSE] Add floating point add/mul strict (ordered) vector.reduce tests (PR36732)

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

6 years agoSupport generic expansion of ordered vector reduction (PR36732)
Simon Pilgrim [Mon, 9 Apr 2018 15:44:20 +0000 (15:44 +0000)]
Support generic expansion of ordered vector reduction (PR36732)

Without the fast math flags, the llvm.experimental.vector.reduce.fadd/fmul intrinsic expansions must be expanded in order.

This patch scalarizes the reduction, applying the accumulator at the start of the sequence: ((((Acc + Scl[0]) + Scl[1]) + Scl[2]) + ) ... + Scl[NumElts-1]

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

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

6 years ago[llvm-cov] Implement -ignore-filename-regex= option for excluding source files.
Max Moroz [Mon, 9 Apr 2018 15:20:35 +0000 (15:20 +0000)]
[llvm-cov] Implement -ignore-filename-regex= option for excluding source files.

Summary:
The option is helpful for large projects where it's not feasible to specify sources which
user would like to see in the report. Instead, it allows to black-list specific sources via
regular expressions (e.g. now it's possible to skip all files that have "test" in its name).

This also partially fixes https://bugs.llvm.org/show_bug.cgi?id=34277

Reviewers: vsk, morehouse, liaoyuke

Reviewed By: vsk

Subscribers: kcc, mgorny, llvm-commits

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

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

6 years ago[MachineLICM] Re-enable hoisting of constant stores
Zaara Syeda [Mon, 9 Apr 2018 14:50:02 +0000 (14:50 +0000)]
[MachineLICM] Re-enable hoisting of constant stores

This patch fixes an issue exposed on the SystemZ build bots when committing
https://reviews.llvm.org/rL327856. The hoisting was temporarily disabled with
an option. This patch now re-enables hoisting and checks that we only hoist a
store instruction when all its operands are either constant caller preserved
registers or immediates.

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

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

6 years ago[CodeGen/AccelTable] Don't emit zero-CU name indexes
Pavel Labath [Mon, 9 Apr 2018 14:38:53 +0000 (14:38 +0000)]
[CodeGen/AccelTable] Don't emit zero-CU name indexes

Summary:
If an input DICompileUnit is completely empty (e.g., the result of
running "clang -g" on an empty file), we don't bother emitting an empty
DWARF CU. When we do that, we must make sure we don't also emit a DWARF v5
name index, as DWARF specifies that each index must reference at least
one compilation unit.

Reviewers: JDevlieghere, aprantl, dblaikie

Subscribers: llvm-commits

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

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

6 years ago[RuntimeDyld][PowerPC] Fix a newly added test in r329355
Krasimir Georgiev [Mon, 9 Apr 2018 14:29:23 +0000 (14:29 +0000)]
[RuntimeDyld][PowerPC] Fix a newly added test in r329355

Summary: The bit widths are wrong.

Reviewers: bkramer, lhames, hans

Reviewed By: hans

Subscribers: hans, nemanjai, kbarton, llvm-commits

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

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

6 years ago[MergeICmp] Update debug msg.NFC
Xin Tong [Mon, 9 Apr 2018 14:29:13 +0000 (14:29 +0000)]
[MergeICmp] Update debug msg.NFC

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

6 years agoRevert r329403 "[llvm-mca] Do not separate iterations with a newline in the timeline...
Hans Wennborg [Mon, 9 Apr 2018 13:53:41 +0000 (13:53 +0000)]
Revert r329403 "[llvm-mca] Do not separate iterations with a newline in the timeline view."

This made AArch64/CortexA57/direct-branch.s fail on Windows, e.g.
http://lab.llvm.org:8011/builders/clang-x86-windows-msvc2015/builds/11251

> Also, update a few tests to minimize the diff in D45369.
> No functional change intended.

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

6 years ago[X86][MMX] Fix missing itinerary for PALIGNR
Simon Pilgrim [Mon, 9 Apr 2018 13:52:33 +0000 (13:52 +0000)]
[X86][MMX] Fix missing itinerary for PALIGNR

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

6 years ago[X86][MMX] Fix missing itinerary for MOVQ2DQ instruction format
Simon Pilgrim [Mon, 9 Apr 2018 13:42:14 +0000 (13:42 +0000)]
[X86][MMX] Fix missing itinerary for MOVQ2DQ instruction format

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

6 years ago[X86][MMX] Fix missing itinerary for CVTPI2PS
Simon Pilgrim [Mon, 9 Apr 2018 13:27:47 +0000 (13:27 +0000)]
[X86][MMX] Fix missing itinerary for CVTPI2PS

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

6 years ago[MergeICmp] Split blocks that do other work.
Xin Tong [Mon, 9 Apr 2018 13:14:06 +0000 (13:14 +0000)]
[MergeICmp] Split blocks that do other work.

Summary:
We do not try to move the instructions and split the block till we
know the blocks can be split, i.e. BCE-cmp-insts can be separated from
non-BCE-cmp-insts.

Reviewers: davide, courbet

Subscribers: llvm-commits

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

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

6 years ago[AMDGPU][MC][GFX9] Added instructions s_mul_hi_*32, s_lshl*_add_u32
Dmitry Preobrazhensky [Mon, 9 Apr 2018 13:10:33 +0000 (13:10 +0000)]
[AMDGPU][MC][GFX9] Added instructions s_mul_hi_*32, s_lshl*_add_u32

See bugs
  36841: https://bugs.llvm.org/show_bug.cgi?id=36841
  36842: https://bugs.llvm.org/show_bug.cgi?id=36842

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

Reviewers: artem.tamazov, arsenm, timcorringham

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

6 years ago[X86][MMX] Fix flipped reg/mem typo in MMX_MISC_FUNC_ITINS
Simon Pilgrim [Mon, 9 Apr 2018 13:02:07 +0000 (13:02 +0000)]
[X86][MMX] Fix flipped reg/mem typo in MMX_MISC_FUNC_ITINS

The RR/RM itineraries were the wrong way around

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

6 years ago[X86][SSE] Fix f32 mul/div itinerary groups typo
Simon Pilgrim [Mon, 9 Apr 2018 10:45:53 +0000 (10:45 +0000)]
[X86][SSE] Fix f32 mul/div itinerary groups typo

The RM folded itineraries were incorrectly using the f64 version.

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

6 years agoMake the test case from r329552 more portable
Pavel Labath [Mon, 9 Apr 2018 09:11:40 +0000 (09:11 +0000)]
Make the test case from r329552 more portable

- when tuning for SCE debugger (default for ps4 targets), we will not emit
  the DW_AT_linkage_name, which this test needs. I explicitly set the
  debugger tuning parameter to get the attribute always.
- darwin targets did not like the "section .text.startup" fragment of
  the test. This is not actually needed for the test, so I remove it.

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

6 years ago[dsymutil] Remove trailing colon. NFC
Jonas Devlieghere [Mon, 9 Apr 2018 09:10:34 +0000 (09:10 +0000)]
[dsymutil] Remove trailing colon. NFC

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

6 years ago[dsymutil] Don't try to load Swift ASTs as objects.
Jonas Devlieghere [Mon, 9 Apr 2018 09:09:59 +0000 (09:09 +0000)]
[dsymutil] Don't try to load Swift ASTs as objects.

With the threading refactoring, loading of object files happens before
checking whether we're dealing with a swift AST. While that's not an
issue per se, it causes a warning to be printed:

  warning: /path/to/a.swiftmodule: The file was not recognized as a valid object file
  note: while processing /path/to/a.swiftmodule

This suppresses the warning by checking for a Swift AST before
attempting to load is as an object file.

rdar://39240444

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

6 years ago[CodeGen/AccelTable]: Don't emit accelerator entries for functions with no names
Pavel Labath [Mon, 9 Apr 2018 08:41:57 +0000 (08:41 +0000)]
[CodeGen/AccelTable]: Don't emit accelerator entries for functions with no names

Summary:
We were emitting accelerator entries for functions with no name, which
is contrary to the DWARF v5 spec: "All other (i.e., *not*
DW_TAG_namespace) debugging information entries without a DW_AT_name
attribute are excluded." Besides that, a name table entry with an empty
string as a key is fairly useless.

We can sometimes end up with functions which have a DW_AT_linkage_name but no
DW_AT_name. One such example is the global-constructor-initialization functions,
which C++ compilers synthesize for each compilation unit with global
constructors.
A very strict reading of the DWARF v5 spec would suggest that we should not even
emit the accelerator entry for the linkage name in this case, but I don't think
we should go that far.

I found this when running the dwarf verifier over llvm codebase compiled
with DWARF v5 accelerator tables.

Reviewers: JDevlieghere, aprantl, dblaikie

Subscribers: vleschuk, clayborg, echristo, probinson, llvm-commits

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

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

6 years ago[DAGCombine] Improve ReduceLoad for SRL
Sam Parker [Mon, 9 Apr 2018 08:16:11 +0000 (08:16 +0000)]
[DAGCombine] Improve ReduceLoad for SRL

Recommitting r329283, third time lucky...

If the SRL node is only used by an AND, we may be able to set the
ExtVT to the width of the mask, making the AND redundant. To support
this, another check has been added in isLegalNarrowLoad which queries
whether the load is valid.

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

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

6 years ago[X86] Merge some of the autoupgrade handling for masked intrinsics that just need...
Craig Topper [Mon, 9 Apr 2018 06:15:09 +0000 (06:15 +0000)]
[X86] Merge some of the autoupgrade handling for masked intrinsics that just need to upgrade to an unmasked version plus a select. NFCI

These are were previously grouped in small groups of similarish intrinsics. But all the intrinsics have the same number of arguments and the same order. So we can move them all into a larger group for handling.

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

6 years ago[IRCE] Relax restriction on collected range checks
Max Kazantsev [Mon, 9 Apr 2018 06:01:22 +0000 (06:01 +0000)]
[IRCE] Relax restriction on collected range checks

In IRCE, we have a very old legacy check that works when we collect comparisons that we
treat as range checks. It ensures that the value against which the indvar is compared is
loop invariant and is also positive.

This latter condition remained there since the times when IRCE was only able to handle
signed latch comparison. As the optimization evolved, it now learned how to intersect
signed or unsigned ranges, and this logic has no reliance on the fact that the right border
of each range should be positive.

The old implementation of this non-negativity check was also naive enough and just looked
into ranges (while most of other IRCE logic tries to use power of SCEV implications), so this
check did not allow to deal with the most simple case that looks like follows:

  int size; // not known non-negative
  int length; //known non-negative;
  i = 0;
  if (size != 0) {
    do {
      range_check(i < size);
      range_check(i < length);
    ++i;
    } while (i < size)
  }

In this case, even if from some dominating conditions IRCE could parse loop
structure, it could only remove the range check against `length` and simply
ignored the check against `size`.

In this patch we remove this obsolete check. It will allow IRCE to pick comparison
against `size` as a potential range check and then let Range Intersection logic
decide whether it is OK to eliminate it or not.

Differential Revision: https://reviews.llvm.org/D45362
Reviewed By: samparker

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

6 years ago[NFC] fix trivial typos in comments and error message
Hiroshi Inoue [Mon, 9 Apr 2018 04:37:53 +0000 (04:37 +0000)]
[NFC] fix trivial typos in comments and error message

"is is" -> "is", "are are" -> "are"

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

6 years ago[XRay][llvm+clang] Consolidate attribute list files
Dean Michael Berris [Mon, 9 Apr 2018 04:02:09 +0000 (04:02 +0000)]
[XRay][llvm+clang] Consolidate attribute list files

Summary:
This change consolidates the always/never lists that may be provided to
clang to externally control which functions should be XRay instrumented
by imbuing attributes. The files follow the same format as defined in
https://clang.llvm.org/docs/SanitizerSpecialCaseList.html for the
sanitizer blacklist.

We also deprecate the existing `-fxray-instrument-always=` and
`-fxray-instrument-never=` flags, in favour of `-fxray-attr-list=`.

This fixes http://llvm.org/PR34721.

Reviewers: echristo, vlad.tsyrklevich, eugenis

Reviewed By: vlad.tsyrklevich

Subscribers: llvm-commits, cfe-commits

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

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

6 years agoRemove MachineLoopInfo dependency from AsmPrinter.
Michael Zolotukhin [Mon, 9 Apr 2018 00:54:47 +0000 (00:54 +0000)]
Remove MachineLoopInfo dependency from AsmPrinter.

Summary:
Currently MachineLoopInfo is used in only two places:
1) for computing IsBasicBlockInsideInnermostLoop field of MCCodePaddingContext, and it is never used.
2) in emitBasicBlockLoopComments, which is called only if `isVerbose()` is true.
Despite that, we currently have a dependency on MachineLoopInfo, which makes
pass manager to compute it and MachineDominator Tree. This patch removes the
use (1) and makes the use (2) lazy, thus avoiding some redundant
recomputations.

Reviewers: opaparo, gadi.haber, rafael, craig.topper, zvi

Subscribers: rengolin, javed.absar, hiraditya, llvm-commits

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

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

6 years ago[TargetSchedule] shrink interface for init(); NFCI
Sanjay Patel [Sun, 8 Apr 2018 19:56:04 +0000 (19:56 +0000)]
[TargetSchedule] shrink interface for init(); NFCI

The TargetSchedModel is always initialized using the TargetSubtargetInfo's
MCSchedModel and TargetInstrInfo, so we don't need to extract those and
pass 3 parameters to init().

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

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

6 years ago[X86] Add SchedWrites for CMOV and SETCC. Use them to remove InstRWs.
Craig Topper [Sun, 8 Apr 2018 17:53:18 +0000 (17:53 +0000)]
[X86] Add SchedWrites for CMOV and SETCC. Use them to remove InstRWs.

Summary:
Cmov and setcc previously used WriteALU, but on Intel processors at least they are more restricted than basic ALU ops.

This patch adds new SchedWrites for them and removes the InstRWs. I had to leave some InstRWs for CMOVA/CMOVBE and SETA/SETBE because those have an extra uop relative to the other condition codes on Intel CPUs.

The test changes are due to fixing a missing ZnAGU dependency on the memory form of setcc.

Reviewers: RKSimon, andreadb, GGanesh

Reviewed By: RKSimon

Subscribers: GGanesh, llvm-commits

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

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

6 years ago[X86][Znver1] Remove InstRWs for BLENDVPS/PD
Craig Topper [Sun, 8 Apr 2018 17:53:15 +0000 (17:53 +0000)]
[X86][Znver1] Remove InstRWs for BLENDVPS/PD

Summary:
This removes the InstRWs for BLENDVPS/PD in favor of WriteFVarBlend. The latency listed was 3 cycles but WriteFVarBlend is defined as 1 cycle latency. The 1 cycle latency matches Agner Fog's data.

The patterns were missing the VEX forms which is why there are no test changes. We don't test "-mcpu=znver1 -mattr=-avx"

Reviewers: RKSimon, GGanesh

Reviewed By: RKSimon

Subscribers: llvm-commits

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

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

6 years ago[dsymutil] Don't crash on empty CU
Jonas Devlieghere [Sun, 8 Apr 2018 17:35:17 +0000 (17:35 +0000)]
[dsymutil] Don't crash on empty CU

Add some additional checks so we don't crash on empty compile units.

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

6 years ago[Support] Change std::sort to llvm::sort in response to r327219
Mandeep Singh Grang [Sun, 8 Apr 2018 16:46:22 +0000 (16:46 +0000)]
[Support] Change std::sort to llvm::sort in response to r327219

Summary:
r327219 added wrappers to std::sort which randomly shuffle the container before sorting.
This will help in uncovering non-determinism caused due to undefined sorting
order of objects having the same key.

To make use of that infrastructure we need to invoke llvm::sort instead of std::sort.

Note: This patch is one of a series of patches to replace *all* std::sort to llvm::sort.
Refer the comments section in D44363 for a list of all the required patches.

Reviewers: chandlerc, jordan_rose, bkramer

Reviewed By: bkramer

Subscribers: llvm-commits

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

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

6 years ago[PowerPC] Change std::sort to llvm::sort in response to r327219
Mandeep Singh Grang [Sun, 8 Apr 2018 16:45:04 +0000 (16:45 +0000)]
[PowerPC] Change std::sort to llvm::sort in response to r327219

Summary:
r327219 added wrappers to std::sort which randomly shuffle the container before sorting.
This will help in uncovering non-determinism caused due to undefined sorting
order of objects having the same key.

To make use of that infrastructure we need to invoke llvm::sort instead of std::sort.

Note: This patch is one of a series of patches to replace *all* std::sort to llvm::sort.
Refer the comments section in D44363 for a list of all the required patches.

Reviewers: hfinkel, RKSimon

Reviewed By: RKSimon

Subscribers: nemanjai, kbarton, llvm-commits

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

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

6 years ago[X86] Change std::sort to llvm::sort in response to r327219
Mandeep Singh Grang [Sun, 8 Apr 2018 16:42:52 +0000 (16:42 +0000)]
[X86] Change std::sort to llvm::sort in response to r327219

Summary:
r327219 added wrappers to std::sort which randomly shuffle the container before sorting.
This will help in uncovering non-determinism caused due to undefined sorting
order of objects having the same key.

To make use of that infrastructure we need to invoke llvm::sort instead of std::sort.

Note: This patch is one of a series of patches to replace *all* std::sort to llvm::sort.
Refer the comments section in D44363 for a list of all the required patches.

Reviewers: chandlerc, craig.topper, RKSimon

Reviewed By: chandlerc, craig.topper

Subscribers: llvm-commits

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

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

6 years agoNFC: Update NewGVN invariant.group test
Piotr Padlewski [Sun, 8 Apr 2018 16:04:09 +0000 (16:04 +0000)]
NFC: Update NewGVN invariant.group test

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

6 years ago[llvm-mca] Simplify code. NFC
Andrea Di Biagio [Sun, 8 Apr 2018 15:10:19 +0000 (15:10 +0000)]
[llvm-mca] Simplify code. NFC

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

6 years agoMark invariant.group as experimental
Piotr Padlewski [Sun, 8 Apr 2018 13:53:04 +0000 (13:53 +0000)]
Mark invariant.group as experimental

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

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

6 years ago[LIR] Reorder header. NFC
Xin Tong [Sun, 8 Apr 2018 13:19:53 +0000 (13:19 +0000)]
[LIR] Reorder header. NFC

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

6 years ago[X86] Regenerate and + immediate mask tests
Simon Pilgrim [Sun, 8 Apr 2018 12:31:52 +0000 (12:31 +0000)]
[X86] Regenerate and + immediate mask tests

Added i686 checks

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

6 years ago[X86][PKU] Regenerate rdpkru/wrpkru intrinsic tests
Simon Pilgrim [Sun, 8 Apr 2018 12:30:30 +0000 (12:30 +0000)]
[X86][PKU] Regenerate rdpkru/wrpkru intrinsic tests

Added i686 checks

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

6 years ago[X86][SSE3] Regenerate mwait/monitor intrinsic tests
Simon Pilgrim [Sun, 8 Apr 2018 12:29:11 +0000 (12:29 +0000)]
[X86][SSE3] Regenerate mwait/monitor intrinsic tests

Added i686 checks

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

6 years agoNFC: delete ValueMap move ctor
Piotr Padlewski [Sun, 8 Apr 2018 12:23:58 +0000 (12:23 +0000)]
NFC: delete ValueMap move ctor

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

6 years agoDAGCombiner: Combine SDIV with non-splat vector pow2 divisor
Zvi Rackover [Sun, 8 Apr 2018 11:35:20 +0000 (11:35 +0000)]
DAGCombiner: Combine SDIV with non-splat vector pow2 divisor

Summary:
Extend existing SDIV combine for pow2 constant divider to handle
non-splat vectors of pow2 constants.

Reviewers: RKSimon, craig.topper, spatel, hfinkel, efriedma

Reviewed By: RKSimon

Subscribers: magabari, llvm-commits

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

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

6 years ago[X86][Btver2] Add vector extract costs
Simon Pilgrim [Sun, 8 Apr 2018 11:26:26 +0000 (11:26 +0000)]
[X86][Btver2] Add vector extract costs

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

6 years ago[ADT] Fix MapVector when 'Map::mapped_type != unsigned'.
Eric Fiselier [Sun, 8 Apr 2018 08:48:58 +0000 (08:48 +0000)]
[ADT] Fix MapVector when 'Map::mapped_type != unsigned'.

Previously MapVector assumed `Map::mapped_type` was `unsigned`.
This caused problems when using MapVector with a user-specified
map where this didn't hold (For example StringMap<unsigned>).

This patch adjusts MapVector to use the same type as the underlying
map, avoiding reference binding errors in functions like `insert`.

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

6 years ago[LLVMTestingSupport] Add explicit linkage to LLVMSupport
Michal Gorny [Sun, 8 Apr 2018 06:49:17 +0000 (06:49 +0000)]
[LLVMTestingSupport] Add explicit linkage to LLVMSupport

Explicitly link LLVMTestingSupport library against LLVMSupport. This
is necessary to fix linking errors when LLVMTestingSupport is built
as a shared library (with BUILD_SHARED_LIBS=ON) and -Wl,-z,defs is used.

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

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

6 years ago[DAGCombiner] Fold (zext (and/or/xor (shl/shr (load x), cst), cst))
Guozhi Wei [Sat, 7 Apr 2018 23:36:10 +0000 (23:36 +0000)]
[DAGCombiner] Fold (zext (and/or/xor (shl/shr (load x), cst), cst))

In our real world application, we found the following optimization is missed in DAGCombiner

(zext (and/or/xor (shl/shr (load x), cst), cst)) -> (and/or/xor (shl/shr (zextload x), (zext cst)), (zext cst))

If the user of original zext is an add, it may enable further lea optimization on x86.

This patch add a new function CombineZExtLogicopShiftLoad to do this optimization.

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

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

6 years agoRevert "Followup for r329293: Temporarily disable the breaking test on windows."
Philip Pfaffe [Sat, 7 Apr 2018 20:22:38 +0000 (20:22 +0000)]
Revert "Followup for r329293: Temporarily disable the breaking test on windows."

This reverts commit r329393 / b52ba35e7759cd4002221be1dbb63ec80fde21ec.

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

6 years ago[X86] Regenerate atom pshufb test
Simon Pilgrim [Sat, 7 Apr 2018 19:50:09 +0000 (19:50 +0000)]
[X86] Regenerate atom pshufb test

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

6 years ago[X86] Combine vXi64 multiplies to MULDQ/MULUDQ during DAG combine instead of lowering.
Craig Topper [Sat, 7 Apr 2018 19:09:52 +0000 (19:09 +0000)]
[X86] Combine vXi64 multiplies to MULDQ/MULUDQ during DAG combine instead of lowering.

Previously we used a custom lowering for this because of the AVX1 splitting requirement. But we can do the split during DAG combine if we check the types and subtarget

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

6 years ago[DAGCombiner] Add a combine to turn a build vector of zero extends of extract vector...
Craig Topper [Sat, 7 Apr 2018 19:09:50 +0000 (19:09 +0000)]
[DAGCombiner] Add a combine to turn a build vector of zero extends of extract vector elts into a vector zero extend and possibly an extract subvector.

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

6 years ago[llgo] Move SetSubprogram
Robert Widmann [Sat, 7 Apr 2018 16:26:59 +0000 (16:26 +0000)]
[llgo] Move SetSubprogram

Summary: Fixes the bots - I moved LLVMSetSubprogram into the DIBuilder bindings, so the Go bindings need to move as well.

Reviewers: whitequark

Reviewed By: whitequark

Subscribers: llvm-commits

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

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

6 years ago[CostModel][X86] Regenerate vector reduction cost tests with update_analyze_test_chec...
Simon Pilgrim [Sat, 7 Apr 2018 14:20:10 +0000 (14:20 +0000)]
[CostModel][X86] Regenerate vector reduction cost tests with update_analyze_test_checks.py

NOTE: We're only really interested in the extractelement cost (which represents the entire reduction).

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

6 years ago[InstCombine] simplify code that propagates FMF; NFC
Sanjay Patel [Sat, 7 Apr 2018 14:14:23 +0000 (14:14 +0000)]
[InstCombine] simplify code that propagates FMF; NFC

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

6 years ago[CostModel][X86] Regenerate vector select cost tests with update_analyze_test_checks.py
Simon Pilgrim [Sat, 7 Apr 2018 14:09:54 +0000 (14:09 +0000)]
[CostModel][X86] Regenerate vector select cost tests with update_analyze_test_checks.py

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

6 years ago[InstCombine] add/move tests for fsub folds; NFC
Sanjay Patel [Sat, 7 Apr 2018 14:07:58 +0000 (14:07 +0000)]
[InstCombine] add/move tests for fsub folds; NFC

There are a pair of folds that try to merge fneg into fsub
with an intervening cast, but as shown in the FIXME tests,
they can create extra instructions.

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

6 years ago[CostModel][X86] Regenerate vector integer truncation cost tests with update_analyze_...
Simon Pilgrim [Sat, 7 Apr 2018 14:05:35 +0000 (14:05 +0000)]
[CostModel][X86] Regenerate vector integer truncation cost tests with update_analyze_test_checks.py

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

6 years ago[CostModel][X86] Regenerate silvermont (and added goldmont) cost tests with update_an...
Simon Pilgrim [Sat, 7 Apr 2018 14:02:14 +0000 (14:02 +0000)]
[CostModel][X86] Regenerate silvermont (and added goldmont) cost tests with update_analyze_test_checks.py

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

6 years ago[CostModel][X86] Fix v32i16/v64i8 SETCC costs on AVX512BW targets
Simon Pilgrim [Sat, 7 Apr 2018 13:24:33 +0000 (13:24 +0000)]
[CostModel][X86] Fix v32i16/v64i8 SETCC costs on AVX512BW targets

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

6 years ago[CostModel][X86] Regenerate vector comparison cost tests with update_analyze_test_che...
Simon Pilgrim [Sat, 7 Apr 2018 12:47:35 +0000 (12:47 +0000)]
[CostModel][X86] Regenerate vector comparison cost tests with update_analyze_test_checks.py

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

6 years ago[llvm-exegesis] Fix unused return value warning and add a useful error message for...
Simon Pilgrim [Sat, 7 Apr 2018 11:37:21 +0000 (11:37 +0000)]
[llvm-exegesis] Fix unused return value warning and add a useful error message for event counter reads.

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

6 years agoReapply ARM: Do not spill CSR to stack on entry to noreturn functions
Tim Northover [Sat, 7 Apr 2018 10:57:03 +0000 (10:57 +0000)]
Reapply ARM: Do not spill CSR to stack on entry to noreturn functions

Should fix UBSan bot by also checking there's no "uwtable" attribute
before skipping. Otherwise the unwind table will be useless since its
moves expect CSRs to actually be preserved.

A noreturn nounwind function can be expected to never return in any way, and by
never returning it will also never have to restore any callee-saved registers
for its caller. This makes it possible to skip spills of those registers during
function entry, saving some stack space and time in the process. This is rather
useful for embedded targets with limited stack space.

Should fix PR9970.

Patch mostly by myeisha (pmb).

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

6 years ago[InstCombine] Get rid of select of bittest (PR36950 / PR17564)
Roman Lebedev [Sat, 7 Apr 2018 10:37:24 +0000 (10:37 +0000)]
[InstCombine] Get rid of select of bittest (PR36950 / PR17564)

Summary:
See [[ https://bugs.llvm.org/show_bug.cgi?id=36950 | PR36950 ]], [[ https://bugs.llvm.org/show_bug.cgi?id=17564 | PR17564 ]], D45065, D45107
https://godbolt.org/g/iAYRup

Alive proof: https://rise4fun.com/Alive/uiH

Testing: `ninja check-llvm`

Reviewers: spatel, craig.topper

Reviewed By: spatel

Subscribers: llvm-commits

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

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

6 years ago[unittests] ADT: silence -Wself-assign diagnostics
Roman Lebedev [Sat, 7 Apr 2018 10:37:18 +0000 (10:37 +0000)]
[unittests] ADT: silence -Wself-assign diagnostics

Summary:
D44883 extends -Wself-assign to also work on C++ classes.
In it's current state (as suggested by @rjmccall), it is not under it's own sub-group.
Since that diag is enabled by `-Wall`, stage2 testing showed that:
* It does not fire on any llvm code
* It does fire for these 3 unittests
* It does fire for libc++ tests

This diff simply silences those new warnings in llvm's unittests.
A similar diff will be needed for libcxx. (`libcxx/test/std/language.support/support.types/byteops/`, maybe something else)

Since i don't think we want to repeat rL322901, let's talk about it.
I've subscribed everyone who i think might be interested...

There are several ways forward:
* Not extend -Wself-assign, close D44883. Not very productive outcome i'd say.
* Keep D44883 in it's current state.
  Unless your custom overloaded operators do something unusual for when self-assigning,
  the warning is no less of a false-positive than the current -Wself-assign.
  Except for tests of course, there you'd want to silence it. The current suggestion is:
  ```
  S a;
  a = (S &)a;
  ```
* Split the diagnostic in two - `-Wself-assign-builtin` (i.e. what is `-Wself-assign` in trunk),
  and `-Wself-assign-overloaded` - the new part in D44883.
  Since, as i said, i'm not really sure why it would be less of a error than the current `-Wself-assign`,
  both would still be in `-Wall`. That way one could simply pass `-Wno-self-assign-overloaded` for all the tests.
  Pretty simple to do, and will surely work.
* Split the diagnostic in two - `-Wself-assign-trivial`, and `-Wself-assign-nontrivial`.
  The choice of which diag to emit would depend on trivial-ness of that particular operator.
  The current `-Wself-assign` would be `-Wself-assign-trivial`.
  https://godbolt.org/g/gwDASe - `A`, `B` and `C` case would be treated as trivial, and `D`, `E` and `F` as non-trivial.
  Will be the most complicated to implement.

Thoughts?

Reviewers: aaron.ballman, rsmith, rtrieu, rjmccall, dblaikie, atrick, gottesmm

Reviewed By: dblaikie

Subscribers: lebedev.ri, phosek, vsk, rnk, thakis, sammccall, mclow.lists, llvm-commits, rjmccall

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

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

6 years agoFix stack-use-after-scope in test previously hidden by -fmerge-all-constants
Vitaly Buka [Sat, 7 Apr 2018 09:46:00 +0000 (09:46 +0000)]
Fix stack-use-after-scope in test previously hidden by -fmerge-all-constants

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

6 years ago[LLVM-C] Move DIBuilder Bindings For Block Scopes
Robert Widmann [Sat, 7 Apr 2018 06:07:55 +0000 (06:07 +0000)]
[LLVM-C] Move DIBuilder Bindings For Block Scopes

Summary: Move LLVMDIBuilderCreateFunction , LLVMDIBuilderCreateLexicalBlock, and LLVMDIBuilderCreateLexicalBlockFile from Go to LLVM-C.

Reviewers: whitequark, harlanhaskins, deadalnix

Reviewed By: whitequark, harlanhaskins

Subscribers: llvm-commits

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

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

6 years agoRevert "ARM: Do not spill CSR to stack on entry to noreturn functions"
Vitaly Buka [Sat, 7 Apr 2018 05:36:44 +0000 (05:36 +0000)]
Revert "ARM: Do not spill CSR to stack on entry to noreturn functions"

Breaks ubsan test TestCases/Misc/missing_return.cpp on ARM

This reverts commit r329287

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

6 years agoConvert line endings of lib/WindowsManifest/CMakeLists.txt to unix.
Nico Weber [Sat, 7 Apr 2018 04:28:08 +0000 (04:28 +0000)]
Convert line endings of lib/WindowsManifest/CMakeLists.txt to unix.

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

6 years agoRemove trailing space in build file.
Nico Weber [Sat, 7 Apr 2018 03:30:28 +0000 (03:30 +0000)]
Remove trailing space in build file.

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

6 years ago[unittests] Change std::sort to llvm::sort in response to r327219
Mandeep Singh Grang [Sat, 7 Apr 2018 01:29:45 +0000 (01:29 +0000)]
[unittests] Change std::sort to llvm::sort in response to r327219

r327219 added wrappers to std::sort which randomly shuffle the container before
sorting.  This will help in uncovering non-determinism caused due to undefined
sorting order of objects having the same key.

To make use of that infrastructure we need to invoke llvm::sort instead of
std::sort.

Note: This patch is one of a series of patches to replace *all* std::sort to
llvm::sort.  Refer the comments section in D44363 for a list of all the
required patches.

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

6 years ago[Support] Make line-number cache robust against access patterns.
Graydon Hoare [Sat, 7 Apr 2018 00:44:02 +0000 (00:44 +0000)]
[Support] Make line-number cache robust against access patterns.

Summary:
The LLVM SourceMgr class (which is used indirectly by Swift, though not Clang)
has a routine for looking up line numbers of SMLocs. This routine uses a
shared, special-purpose cache that handles exactly one access pattern
efficiently: looking up the line number of an SMLoc that points into the same
buffer as the last query made to the SourceMgr, at a location in the buffer at
or ahead of the last query.

When this works it's fine, but when it fails it's catastrophic for performancer:
one recent out-of-order access from a Swift utility routine ran for tens of
seconds, spending 99% of its time repeatedly scanning buffers for '\n'.

This change removes the shared cache from the SourceMgr and installs a new
cache in each SrcBuffer. The per-SrcBuffer caches are also "full", in the sense
that rather than caching a single last-query pointer, they cache _all_ the
line-ending offsets, in a binary-searchable array, such that once it's
populated (on first access), all subsequent access patterns run at the same
speed.

Performance measurements I've done show this is actually a little bit faster on
real codebases (though only a couple fractions of a percent). Memory usage is
up by a few tens to hundreds of bytes per SrcBuffer that has a line lookup done
on it; I've attempted to minimize this by using dynamic selection of integer
sized when storing offset arrays. But the main motive here is to
make-impossible the cases we don't always see, that show up by surprise when
there is an out-of-order access pattern.

Reviewers: jordan_rose

Reviewed By: jordan_rose

Subscribers: probinson, llvm-commits

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

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

6 years agoWindows needs the current codepage instead of utf8 sometimes
Aaron Smith [Sat, 7 Apr 2018 00:32:59 +0000 (00:32 +0000)]
Windows needs the current codepage instead of utf8 sometimes

Llvm-mc (and tools that use Path.inc on Windows) assume that strings are utf-8
encoded, however, this is not always the case. On Windows the default codepage
is not utf-8, so most of the time the strings are not utf-8 encoded.

The lld test 'format-binary-non-ascii' uses llvm-mc with a file with non-ascii
characters in the name which is how this bug was found. The test fails when run
using Python 3 because it uses properly encoded unicode strings (Python 2 actually
ends up using a byte string which is not utf-8 encoded, so the test passes, but
that's separate issue).

Patch by Stella Stamenova!

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

6 years ago[lit] Fix several Python 2/3 compatibility issues and tests
Aaron Smith [Sat, 7 Apr 2018 00:21:28 +0000 (00:21 +0000)]
[lit] Fix several Python 2/3 compatibility issues and tests

- In Python 2.x, basestring is the base string type, but in
  Python 3.x basestring is not defined and instead str includes
  unicode strings.

- When Python is in a path that includes spaces, it needs to
  be specified with quotes in the test files for it to run.

- The cache.ll test relies on files of a specific size being
  created by Python, but on some versions of Windows the
  files that are created by the current code are one byte
  larger than expected. To fix the test, update file creation
  to always make files of the expected size.

Patch by Stella Stamenova!

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

6 years ago[NVPTX] add support for initializing fp16 arrays.
Artem Belevich [Fri, 6 Apr 2018 22:25:08 +0000 (22:25 +0000)]
[NVPTX] add support for initializing fp16 arrays.

Previously HalfTy was not handled which would either trigger an assertion,
or result in array initialized with garbage.

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

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

6 years agoFix warning by cl::opt<int> -> cl::opt<unsigned>
Vitaly Buka [Fri, 6 Apr 2018 21:41:17 +0000 (21:41 +0000)]
Fix warning by cl::opt<int> -> cl::opt<unsigned>

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

6 years agoRuntime flag to control branch funnel threshold
Vitaly Buka [Fri, 6 Apr 2018 21:32:36 +0000 (21:32 +0000)]
Runtime flag to control branch funnel threshold

Reviewers: pcc

Subscribers: hiraditya, llvm-commits

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

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

6 years agoRevert r324557, "gold-plugin: Do not set codegen opt level based on LTO opt level."
Peter Collingbourne [Fri, 6 Apr 2018 21:14:33 +0000 (21:14 +0000)]
Revert r324557, "gold-plugin: Do not set codegen opt level based on LTO opt level."

It was reported that this change measurably regressed -plugin-opt=O3
performance.

There is an ongoing discussion on llvm-dev about the correct way to
set the CG opt level, see thread "[llvm-dev] [RFC] Adding function
attributes to represent codegen optimization level".

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

6 years ago[Release Notes] Add release note for "-fmerge-all-constants"
Manoj Gupta [Fri, 6 Apr 2018 21:11:09 +0000 (21:11 +0000)]
[Release Notes] Add release note for "-fmerge-all-constants"

Summary:
Add note that "-fmerge-all-constants" is not applied as default
anymore.

Reviewers: rjmccall, rsmith, chandlerc

Subscribers: llvm-commits, thakis

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

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

6 years ago[NVPTX] Fixed vectorized LDG for f16.
Artem Belevich [Fri, 6 Apr 2018 21:10:24 +0000 (21:10 +0000)]
[NVPTX] Fixed vectorized LDG for f16.

v2f16 is a special case in NVPTX. v4f16 may be loaded as a pair of v2f16
and that was not previously handled correctly by tryLDGLDU()

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

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

6 years ago [RISCV] Tablegen-driven Instruction Compression.
Sameer AbuAsal [Fri, 6 Apr 2018 21:07:05 +0000 (21:07 +0000)]
[RISCV] Tablegen-driven Instruction Compression.

Summary:

    This patch implements a tablegen-driven Instruction Compression
    mechanism for generating RISCV compressed instructions
    (C Extension) from the expanded instruction form.

    This tablegen backend processes CompressPat declarations in a
    td file and generates all the compile-time and runtime checks
    required to validate the declarations, validate the input
    operands and generate correct instructions.

    The checks include validating register operands, immediate
    operands, fixed register operands and fixed immediate operands.

    Example:
      class CompressPat<dag input, dag output> {
        dag Input  = input;
        dag Output    = output;
        list<Predicate> Predicates = [];
      }

      let Predicates = [HasStdExtC] in {
      def : CompressPat<(ADD GPRNoX0:$rs1, GPRNoX0:$rs1, GPRNoX0:$rs2),
                        (C_ADD GPRNoX0:$rs1, GPRNoX0:$rs2)>;
      }

    The result is an auto-generated header file
    'RISCVGenCompressEmitter.inc' which exports two functions for
    compressing/uncompressing MCInst instructions, plus
    some helper functions:

      bool compressInst(MCInst& OutInst, const MCInst &MI,
                        const MCSubtargetInfo &STI,
                        MCContext &Context);

      bool uncompressInst(MCInst& OutInst, const MCInst &MI,
                          const MCRegisterInfo &MRI,
                          const MCSubtargetInfo &STI);

    The clients that include this auto-generated header file and
    invoke these functions can compress an instruction before emitting
    it, in the target-specific ASM or ELF streamer, or can uncompress
    an instruction before printing it, when the expanded instruction
    format aliases is favored.

    The following clients were added to implement compression\uncompression
    for RISCV:

    1) RISCVAsmParser::MatchAndEmitInstruction:
       Inserted a call to compressInst() to compresses instructions
       parsed by llvm-mc coming from an ASM input.
    2) RISCVAsmPrinter::EmitInstruction:
       Inserted a call to compressInst() to compress instructions that
       were lowered from Machine Instructions (MachineInstr).
    3) RVInstPrinter::printInst:
       Inserted a call to uncompressInst() to print the expanded
       version of the instruction instead of the compressed one (e.g,
       add s0, s0, a5 instead of c.add s0, a5) when -riscv-no-aliases
       is not passed.

This patch squashes D45119, D42780 and D41932. It was reviewed in  smaller patches by
asb, efriedma, apazos and mgrang.

Reviewers: asb, efriedma, apazos, llvm-commits, sabuasal

Reviewed By: sabuasal

Subscribers: mgorny, eraman, asb, rbar, johnrusso, simoncook, jordy.potman.lists, apazos, niosHD, kito-cheng, shiva0217, zzheng

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

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

6 years ago[TableGen] Change std::sort to llvm::sort in response to r327219
Mandeep Singh Grang [Fri, 6 Apr 2018 20:18:05 +0000 (20:18 +0000)]
[TableGen] Change std::sort to llvm::sort in response to r327219

Summary:
r327219 added wrappers to std::sort which randomly shuffle the container before sorting.
This will help in uncovering non-determinism caused due to undefined sorting
order of objects having the same key.

To make use of that infrastructure we need to invoke llvm::sort instead of std::sort.

Note: This patch is one of a series of patches to replace *all* std::sort to llvm::sort.
Refer the comments section in D44363 for a list of all the required patches.

Reviewers: stoklund, kparzysz, dsanders

Reviewed By: dsanders

Subscribers: llvm-commits

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

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

6 years ago[StackProtector] Ignore certain intrinsics when calculating sspstrong heuristic.
Matt Davis [Fri, 6 Apr 2018 20:14:13 +0000 (20:14 +0000)]
[StackProtector] Ignore certain intrinsics when calculating sspstrong heuristic.

Summary:
The 'strong' StackProtector heuristic takes into consideration call instructions.
Certain intrinsics, such as lifetime.start, can cause the
StackProtector to protect functions that do not need to be protected.

Specifically, a volatile variable, (not optimized away), but belonging to a stack
allocation will encourage a llvm.lifetime.start to be inserted during
compilation. Because that intrinsic is a 'call' the strong StackProtector
will see that the alloca'd variable is being passed to a call instruction, and
insert a stack protector. In this case the intrinsic isn't really lowered to a
call. This can cause unnecessary stack checking, at the cost of additional
(wasted) CPU cycles.

In the future we should rely on TargetTransformInfo::isLoweredToCall, but as of
now that routine considers all intrinsics as not being lowerable. That needs
to be corrected, and such a change is on my list of things to get moving on.

As a side note, the updated stack-protector-dbginfo.ll test always seems to
pass.  I never see the dbg.declare/dbg.value reaching the
StackProtector::HasAddressTaken, but I don't see any code excluding dbg
intrinsic calls either, so I think it's the safest thing to do.

Reviewers: void, timshen

Reviewed By: timshen

Subscribers: llvm-commits

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

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