5 years agoRevert https://reviews.llvm.org/D23279 because the tests have failed on several platforms
Alexander Shaposhnikov [Fri, 2 Sep 2016 00:24:06 +0000 (00:24 +0000)]
Revert https://reviews.llvm.org/D23279 because the tests have failed on several platforms

llvm-svn: 280438

5 years ago[SE] Make Kernel movable
Jason Henline [Fri, 2 Sep 2016 00:22:05 +0000 (00:22 +0000)]
[SE] Make Kernel movable

Kernel is basically just a smart pointer to the underlying
implementation, so making it movable prevents having to store a
std::unique_ptr to it.

Reviewers: jlebar

Subscribers: jprice, parallel_libs-commits

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

llvm-svn: 280437

5 years agoClean up handling of reading module files from stdin. Don't bother trying to
Richard Smith [Fri, 2 Sep 2016 00:18:05 +0000 (00:18 +0000)]
Clean up handling of reading module files from stdin. Don't bother trying to
look for a corresponding file, since we're not going to read it anyway.

No observable behavior change (though we now avoid pointlessly trying to stat
or open a file named "-").

llvm-svn: 280436

5 years agoRefactor to avoid holding a reference to a container element that could go away
Richard Smith [Fri, 2 Sep 2016 00:10:28 +0000 (00:10 +0000)]
Refactor to avoid holding a reference to a container element that could go away
during this function, and to avoid rolling back changes to the module manager's
data structures. Instead, we defer registering the module file until after we
have successfully finished loading it.

llvm-svn: 280434

5 years agoExplicitly require DominatorTreeAnalysis pass for instsimplify pass.
Dehao Chen [Thu, 1 Sep 2016 23:51:37 +0000 (23:51 +0000)]
Explicitly require DominatorTreeAnalysis pass for instsimplify pass.

Summary: DominatorTreeAnalysis is always required by instsimplify.

Reviewers: davidxl, danielcdh

Subscribers: llvm-commits

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

llvm-svn: 280432

5 years agoAdd clang-reorder-fields to clang-tools-extra
Alexander Shaposhnikov [Thu, 1 Sep 2016 23:49:48 +0000 (23:49 +0000)]
Add clang-reorder-fields to clang-tools-extra

This diff adds v0 of clang-reorder-fields tool to clang/tools/extra.
The main idea behind this tool is to simplify and make less error-prone refactoring of large codebases when
someone needs to change the order fields of a struct/class (for example to remove excess padding).

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

llvm-svn: 280431

5 years ago[SelectionDAGBuilder] Add const to relevant places
Aditya Kumar [Thu, 1 Sep 2016 23:35:26 +0000 (23:35 +0000)]
[SelectionDAGBuilder] Add const to relevant places

Reviewers: hans, evandro, sebpop

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

llvm-svn: 280430

5 years agoRefactor LICM to expose canSinkOrHoistInst to LoopSink pass.
Dehao Chen [Thu, 1 Sep 2016 23:31:25 +0000 (23:31 +0000)]
Refactor LICM to expose canSinkOrHoistInst to LoopSink pass.

Summary: LoopSink pass shares the same canSinkOrHoistInst functionality with LICM pass. This patch exposes this function in preparation of https://reviews.llvm.org/D22778

Reviewers: chandlerc, davidxl, danielcdh

Subscribers: llvm-commits

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

llvm-svn: 280429

5 years ago[StreamExecutor] Read dev array directly in test
Jason Henline [Thu, 1 Sep 2016 23:27:39 +0000 (23:27 +0000)]
[StreamExecutor] Read dev array directly in test

Step 2 of getting GlobalDeviceMemory to own its handle.

Use the SimpleHostPlatformDevice allocate methods to create device
arrays for tests, and check for successful copies by dereferncing the
device array handle directly because we know it is really a host

Reviewers: jlebar

Subscribers: jprice, parallel_libs-commits

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

llvm-svn: 280428

5 years agoRefactor replaceDominatedUsesWith to have a flag to control whether to replace uses...
Dehao Chen [Thu, 1 Sep 2016 23:26:48 +0000 (23:26 +0000)]
Refactor replaceDominatedUsesWith to have a flag to control whether to replace uses in BB itself.

Summary: This is in preparation for LoopSink pass which calls replaceDominatedUsesWith to update after sinking.

Reviewers: chandlerc, davidxl, danielcdh

Subscribers: llvm-commits

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

llvm-svn: 280427

5 years agoRemove excessive padding from MismatchingNewDeleteDetector
Alexander Shaposhnikov [Thu, 1 Sep 2016 23:18:00 +0000 (23:18 +0000)]
Remove excessive padding from MismatchingNewDeleteDetector

The class MismatchingNewDeleteDetector is in
lib/Sema/SemaExprCXX.cpp inside the anonymous namespace.
This diff reorders the fields and removes the excessive padding.
Test plan: make -j8 check-clang

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

llvm-svn: 280426

5 years agoRefactor LICM pass in preparation for LoopSink pass.
Dehao Chen [Thu, 1 Sep 2016 23:15:50 +0000 (23:15 +0000)]
Refactor LICM pass in preparation for LoopSink pass.

Summary: LoopSink pass uses some common function in LICM. This patch refactor the LICM code to make it usable by LoopSink pass (https://reviews.llvm.org/D22778).

Reviewers: chandlerc, davidxl, danielcdh

Subscribers: llvm-commits

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

llvm-svn: 280425

5 years ago[Legalizer] Don't throw away false low half when expanding GT/LT SETCC
Michael Kuperstein [Thu, 1 Sep 2016 23:02:32 +0000 (23:02 +0000)]
[Legalizer] Don't throw away false low half when expanding GT/LT SETCC

When expanding a SETCC for which the low half is known to evaluate to false,
we can only throw it away for LT/GT comparisons, not LE/GE.

This fixes PR29170.

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

llvm-svn: 280424

5 years agoAdd comments.
Rui Ueyama [Thu, 1 Sep 2016 22:48:05 +0000 (22:48 +0000)]
Add comments.

llvm-svn: 280423

5 years agoUn-XFAIL cfi/stats.cpp, it passes since fixing llvm-symbolizer to look for dwarf...
Reid Kleckner [Thu, 1 Sep 2016 22:46:26 +0000 (22:46 +0000)]
Un-XFAIL cfi/stats.cpp, it passes since fixing llvm-symbolizer to look for dwarf again

llvm-svn: 280422

5 years ago[ELF] Do not omit debug sections when computing build-id
Petr Hosek [Thu, 1 Sep 2016 22:43:03 +0000 (22:43 +0000)]
[ELF] Do not omit debug sections when computing build-id

The primary use of build-id is in debugging, hence omitting debug
sections when computing it significantly reduces its usability as
changes in debug section content wouldn't alter the build-id.

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

llvm-svn: 280421

5 years ago[WebAssembly] Change wasm SizeType to match asmjs
Derek Schuff [Thu, 1 Sep 2016 22:38:37 +0000 (22:38 +0000)]
[WebAssembly] Change wasm SizeType to match asmjs

We want wasm and asmjs to have matching ABIs, and right now asmjs uses
unsigned int for its size_t. This causes exported symbols in libcxx to
not match and can cause weird breakage where libcxx doesn't get linked
as a result.  Long-term we probably want wasm32, wasm64, and asmjs to
all use unsigned long, but that would cause unnecessary ABI churn for
asmjs so defer that until we can make all the ABI changes at once.

Patch by Jacob Gravelle

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

llvm-svn: 280420

5 years agoMake the coding standards a bit more clear that we prefer the fancy new
Chandler Carruth [Thu, 1 Sep 2016 22:18:25 +0000 (22:18 +0000)]
Make the coding standards a bit more clear that we prefer the fancy new
auto-brief format for doxygen comments. Most notable is switching to
that in the example doxygen comment. I've also tweaked the wording but
am happy to tweak it further if others have suggestions here.

Mostly doing this to capture something I and others have been writing
consistently and repeatedly in code reviews.

llvm-svn: 280419

5 years ago[SelectionDAG] Generate vector_shuffle nodes for undersized result vector sizes
Michael Kuperstein [Thu, 1 Sep 2016 21:32:09 +0000 (21:32 +0000)]
[SelectionDAG] Generate vector_shuffle nodes for undersized result vector sizes

Prior to this, we could generate a vector_shuffle from an IR shuffle when the
size of the result was exactly the sum of the sizes of the input vectors.
If the output vector was narrower - e.g. a <12 x i8> being formed by a shuffle
with two <8 x i8> inputs - we would lower the shuffle to a sequence of extracts
and inserts.

Instead, we can form a larger vector_shuffle, and then extract a subvector
of the right size - e.g. shuffle the two <8 x i8> inputs into a <16 x i8>
and then extract a <12 x i8>.

This also includes a target-specific X86 combine that in the presence of
AVX2 combines:
(vector_shuffle <mask> (concat_vectors t1, undef)
                       (concat_vectors t2, undef))
(vector_shuffle <mask> (concat_vectors t1, t2), undef)
in cases where this allows us to form VPERMD/VPERMQ.

(This is not a separate commit, as that pattern does not appear without
the DAGBuilder change.)

llvm-svn: 280418

5 years agocstdio: limit gets to CRT versions below 14
Saleem Abdulrasool [Thu, 1 Sep 2016 21:09:19 +0000 (21:09 +0000)]
cstdio: limit gets to CRT versions below 14

Microsoft removed gets from the CRT in Visual Studio 2015 onwards [1].
Attempting to reference it when targeting CRT versions 14 and above will cause
compile errors.

[1] https://msdn.microsoft.com/en-us/library/2029ea5f.aspx

Patch by Shoaib Meenai!

llvm-svn: 280417

5 years ago[CMake] Add option (defaulted off) to exclude atomic.c
Chris Bieneman [Thu, 1 Sep 2016 21:05:49 +0000 (21:05 +0000)]
[CMake] Add option (defaulted off) to exclude atomic.c

The atomic builtin source is problematic when cross-compiling builtins because it requires a variable and sometimes large set of system headers. This option allows users to optionally prevent it from being built.

llvm-svn: 280416

5 years ago[WebAssembly] Add asm.js-style setjmp/longjmp handling for wasm (reland r280302)
Heejin Ahn [Thu, 1 Sep 2016 21:05:15 +0000 (21:05 +0000)]
[WebAssembly] Add asm.js-style setjmp/longjmp handling for wasm (reland r280302)

Summary: This patch adds asm.js-style setjmp/longjmp handling support for WebAssembly. It also uses JavaScript's try and catch mechanism.

Reviewers: jpp, dschuff

Subscribers: jfb, dschuff

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

llvm-svn: 280415

5 years agobugpoint: clang-format and modernize comments in ListReducer. NFC
Justin Bogner [Thu, 1 Sep 2016 21:04:36 +0000 (21:04 +0000)]
bugpoint: clang-format and modernize comments in ListReducer. NFC

llvm-svn: 280414

5 years agobuild: don't add -fPIC on Windows
Saleem Abdulrasool [Thu, 1 Sep 2016 20:49:54 +0000 (20:49 +0000)]
build: don't add -fPIC on Windows

`-fPIC` doesn't make much sense for Windows, since Windows DLLs aren't compiled
position independent and are instead relocated at runtime.

Patch by Shoaib Meenai!

llvm-svn: 280413

5 years agoGlobalISel: add a G_PHI instruction to give phis a type.
Tim Northover [Thu, 1 Sep 2016 20:45:41 +0000 (20:45 +0000)]
GlobalISel: add a G_PHI instruction to give phis a type.

They're another source of generic vregs, which are going to need a type on the
definition when we remove the register width from MachineRegisterInfo.

llvm-svn: 280412

5 years ago[tsan] Bump stack frame size limit.
Evgeniy Stepanov [Thu, 1 Sep 2016 20:43:59 +0000 (20:43 +0000)]
[tsan] Bump stack frame size limit.

llvm-svn: 280411

5 years agoFix the ASan fuse-lld.cc test after LLD r280012
Reid Kleckner [Thu, 1 Sep 2016 20:28:59 +0000 (20:28 +0000)]
Fix the ASan fuse-lld.cc test after LLD r280012

With that change, images built with 'lld-link /debug' always have a
debug directory. If no PDB filename was passed on the command line, then
the filename in the executable is empty.

PDB information would never work anyway if the PDB file name is empty,
so go ahead and try DWARF in that case.

llvm-svn: 280410

5 years agoWhen we reach the end of a #include of a header of a local submodule that we
Richard Smith [Thu, 1 Sep 2016 20:15:25 +0000 (20:15 +0000)]
When we reach the end of a #include of a header of a local submodule that we
textually included, create an ImportDecl just as we would if we reached a
#include of any other modular header. This is necessary in order to correctly
determine the set of variables to initialize for an imported module.

This should hopefully make the modules selfhost buildbot green again.

llvm-svn: 280409

5 years agoAllow mapping scalar MemoryAccesses to array elements.
Michael Kruse [Thu, 1 Sep 2016 19:53:31 +0000 (19:53 +0000)]
Allow mapping scalar MemoryAccesses to array elements.

Change the code around setNewAccessRelation to allow to use a an existing array
element for memory instead of an ad-hoc alloca. This facility will be used for
DeLICM/DeGVN to convert scalar dependencies into regular ones.

The changes necessary include:
- Make the code generator use the implicit locations instead of the alloca ones.
- A test case
- Make the JScop importer accept changes of scalar accesses for that test case.
- Adapt the MemoryAccess interface to the fact that the MemoryKind can change.
  They are named (get|is)OriginalXXX() to get the status of the memory access
  before any change by setNewAccessRelation() (some properties such as
  getIncoming() do not change even if the kind is changed and are still
  required). To get the modified properties, there is (get|is)LatestXXX(). The
  old accessors without Original|Latest become synonyms of the
  (get|is)OriginalXXX() to not make functional changes in unrelated code.

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

llvm-svn: 280408

5 years ago[CMake] NFC. Missed the other uses in r280406
Chris Bieneman [Thu, 1 Sep 2016 19:47:39 +0000 (19:47 +0000)]
[CMake] NFC. Missed the other uses in r280406

Doh! Obviously need to slow down.

llvm-svn: 280407

5 years ago[CMake] NFC. Fixing spelling from r280400
Chris Bieneman [Thu, 1 Sep 2016 19:46:02 +0000 (19:46 +0000)]
[CMake] NFC. Fixing spelling from r280400


llvm-svn: 280406

5 years ago[LV] Use ScalarParts for ad-hoc pointer IV scalarization (NFCI)
Matthew Simpson [Thu, 1 Sep 2016 19:40:19 +0000 (19:40 +0000)]
[LV] Use ScalarParts for ad-hoc pointer IV scalarization (NFCI)

We can now maintain scalar values in VectorLoopValueMap. Thus, we no longer
have to create temporary vectors with insertelement instructions when handling
pointer induction variables. This case was mistakenly missed from r279649 when
refactoring the other scalarization code.

llvm-svn: 280405

5 years agoCheck validity of new access relations. NFC.
Michael Kruse [Thu, 1 Sep 2016 19:16:58 +0000 (19:16 +0000)]
Check validity of new access relations. NFC.

There are some constraints on maps that can be access relations. In builds with assertions enabled, verify

  - The access domain is the same space as the statement's domain (modulo parameters).
  - Whether an access is defined for every instance of the statement. (codegen does not yet support partial access relations)
  - Whether the access range links to an array, represented by a ScopArrayInfo.
  - The number of access dimensions equals the dimensions of the array.
  - The array is not an indirect access. (also not supported by codegen)

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

llvm-svn: 280404

5 years ago[InstCombine] add tests to show potential shuffle+insert folds
Sanjay Patel [Thu, 1 Sep 2016 19:14:19 +0000 (19:14 +0000)]
[InstCombine] add tests to show potential shuffle+insert folds

llvm-svn: 280403

5 years ago[X86] Loosen memory folding requirements for cvtdq2pd and cvtps2pd instructions.
Andrey Turetskiy [Thu, 1 Sep 2016 18:50:02 +0000 (18:50 +0000)]
[X86] Loosen memory folding requirements for cvtdq2pd and cvtps2pd instructions.

According to spec cvtdq2pd and cvtps2pd instructions don't require memory operand to be aligned
to 16 bytes. This patch removes this requirement from the memory folding table.

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

llvm-svn: 280402

5 years ago[StreamExecutor] Dev handles in platform interface
Jason Henline [Thu, 1 Sep 2016 18:48:21 +0000 (18:48 +0000)]
[StreamExecutor] Dev handles in platform interface

This is the first in a series of patches that will convert
GlobalDeviceMemory to own its device memory handle. The first step is to
remove GlobalDeviceMemoryBase from the PlatformInterface interfaces and
use raw handles there instead. This is useful because
GlobalDeviceMemoryBase is going to lose its importance in this process.

Reviewers: jlebar

Subscribers: jprice, parallel_libs-commits

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

llvm-svn: 280401

5 years ago[CMake] Don't copy headers on fully standalone
Chris Bieneman [Thu, 1 Sep 2016 18:46:53 +0000 (18:46 +0000)]
[CMake] Don't copy headers on fully standalone

In r280108 I tried to make the headers copy relative to LLVM_BINARY_DIR, and the intent was that it would only happen on in-tree builds or runtimes directory builds. It didn't actually work that way.

This patch adds a check for CMAKE_SOURCE_DIR being equal to CMAKE_CURRENT_SOURCE_DIR. In this case we set a variable LIBCXX_USING_INSTLLED_LLVM. This doesn't necessarily mean the LLVM is installed (it could be a build directory), but it means we need to treat the LLVM directory as read-only.

llvm-svn: 280400

5 years agoAMDGPU: Add runtime metadata for pointee alignment of argument.
Yaxun Liu [Thu, 1 Sep 2016 18:46:49 +0000 (18:46 +0000)]
AMDGPU: Add runtime metadata for pointee alignment of argument.

Add runtime metdata for pointee alignment of pointer type kernel argument. The key is KeyArgPointeeAlign and the value is a 32 bit unsigned integer.

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

llvm-svn: 280399

5 years agoRevert "Copy over most of the scariness_score test to the general tests"
Filipe Cabecinhas [Thu, 1 Sep 2016 18:40:12 +0000 (18:40 +0000)]
Revert "Copy over most of the scariness_score test to the general tests"

This reverts commit r280361 until we have the proper change in place.

llvm-svn: 280398

5 years ago[SE] Make Stream movable
Jason Henline [Thu, 1 Sep 2016 18:35:37 +0000 (18:35 +0000)]
[SE] Make Stream movable

The example code makes it clear that this is a much better design

Reviewers: jlebar

Subscribers: jprice, parallel_libs-commits

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

llvm-svn: 280397

5 years ago[lib/LTO] Simplify a bit. NFCI.
Davide Italiano [Thu, 1 Sep 2016 18:34:47 +0000 (18:34 +0000)]
[lib/LTO] Simplify a bit. NFCI.

llvm-svn: 280396

5 years agoWhen updating a ValueObjectRegister, set the flag to remind yourself of whether it...
Enrico Granata [Thu, 1 Sep 2016 18:31:40 +0000 (18:31 +0000)]
When updating a ValueObjectRegister, set the flag to remind yourself of whether it changed

llvm-svn: 280395

5 years ago[CMake] Properly connecting Compiler-RT check and test-depends
Chris Bieneman [Thu, 1 Sep 2016 18:28:49 +0000 (18:28 +0000)]
[CMake] Properly connecting Compiler-RT check and test-depends

This correctly connects compiler-rt-test-depends to test-depends and
check-compiler-rt to check-all.

Based on LLVM r280392, and Compiler-RT r280393.

llvm-svn: 280394

5 years ago[CMake] Adding compiler-rt-test-depends target
Chris Bieneman [Thu, 1 Sep 2016 18:26:51 +0000 (18:26 +0000)]
[CMake] Adding compiler-rt-test-depends target

This exposes a target for building the compiler-rt test dependencies and matches llvm-test-depends.

llvm-svn: 280393

5 years ago[CMake] Connecting check-all and test-depends targets correctly
Chris Bieneman [Thu, 1 Sep 2016 18:26:01 +0000 (18:26 +0000)]
[CMake] Connecting check-all and test-depends targets correctly

My previous attempt at this connected the sub-project check targets to the test-depends target instead of to the check-all target. That resulted in the tests running multiple times on bots that built "test-depends" and "check-all" in separate build invocations.

llvm-svn: 280392

5 years agoRename some variables to have meaningful names. NFC.
Michael Kuperstein [Thu, 1 Sep 2016 18:24:42 +0000 (18:24 +0000)]
Rename some variables to have meaningful names. NFC.

llvm-svn: 280391

5 years ago[LV] Move VectorParts allocation and mapping into PHI widening (NFC)
Matthew Simpson [Thu, 1 Sep 2016 18:14:27 +0000 (18:14 +0000)]
[LV] Move VectorParts allocation and mapping into PHI widening (NFC)

This patch moves the allocation of VectorParts for PHI nodes into the actual
PHI widening code. Previously, we allocated these VectorParts in
vectorizeBlockInLoop, and passed them by reference to widenPHIInstruction. Upon
returning, we would then map the VectorParts in VectorLoopValueMap. This
behavior is problematic for the cases where we only want to generate a scalar
version of a PHI node. For example, if in the future we only generate a scalar
version of an induction variable, we would end up inserting an empty vector
entry into the map once we return to vectorizeBlockInLoop. We now no longer
need to pass VectorParts to the various PHI widening functions, and we can keep
VectorParts allocation as close as possible to the point at which they are
actually mapped in VectorLoopValueMap.

llvm-svn: 280390

5 years agoChange the formula for tagged NSIndexPath data formatting
Enrico Granata [Thu, 1 Sep 2016 18:09:01 +0000 (18:09 +0000)]
Change the formula for tagged NSIndexPath data formatting

Fixes rdar://25192935

llvm-svn: 280389

5 years ago[codeview] Properly propagate the TypeLeafKind through the pipeline.
Zachary Turner [Thu, 1 Sep 2016 18:08:19 +0000 (18:08 +0000)]
[codeview] Properly propagate the TypeLeafKind through the pipeline.

llvm-svn: 280388

5 years agoFix dll_host.cc test after adding div and gep trace coverage points
Reid Kleckner [Thu, 1 Sep 2016 18:08:05 +0000 (18:08 +0000)]
Fix dll_host.cc test after adding div and gep trace coverage points

llvm-svn: 280387

5 years ago[DAGCombine] Don't fold a trunc if it feeds an anyext
Michael Kuperstein [Thu, 1 Sep 2016 17:59:24 +0000 (17:59 +0000)]
[DAGCombine] Don't fold a trunc if it feeds an anyext

Legalization tends to create anyext(trunc) patterns. This should always be
combined - into either a single trunc, a single ext, or nothing if the
types match exactly. But if we happen to combine the trunc first, we may pull
the trunc away from the anyext or make it implicit (e.g. the truncate(extract)
-> extract(bitcast) fold).

To prevent this, we can avoid doing the fold, similarly to how we already handle

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

llvm-svn: 280386

5 years agoAMDGPU/SI: MIMG TD Refactoring.
Changpeng Fang [Thu, 1 Sep 2016 17:54:54 +0000 (17:54 +0000)]
AMDGPU/SI: MIMG TD Refactoring.

 Created a new td file MIMGInstructions.td which contains all definitions
of MIMG related instructions.

Reviewed by:
  kzhuravl, vpykhtin

Differential Revision:

llvm-svn: 280385

5 years ago[SE] Docs use JAVADOC_AUTOBRIEF
Jason Henline [Thu, 1 Sep 2016 17:47:17 +0000 (17:47 +0000)]

That way we don't have to explicitly annotate each brief description as

llvm-svn: 280384

5 years ago[lit] Use multiprocessing by default on Windows
Reid Kleckner [Thu, 1 Sep 2016 17:19:44 +0000 (17:19 +0000)]
[lit] Use multiprocessing by default on Windows

Apparently nobody evaluated multiprocessing on Windows since Daniel
enabled multiprocessing on Unix in r193279. It works so far as I can

Today this is worth about an 8x speedup (631.29s to 73.25s) on my 24
core Windows machine. Hopefully this will improve Windows buildbot cycle
time, where currently it takes more time to run check-all than it does
to self-host with assertions enabled:
  build stage 2 ninja all ( 28 mins, 22 secs )
  ninja check 2 stage 2   ( 37 mins, 38 secs )

llvm-svn: 280382

5 years ago[CMake] Revive LLVM_*_DIRS variables
Chris Bieneman [Thu, 1 Sep 2016 16:43:39 +0000 (16:43 +0000)]
[CMake] Revive LLVM_*_DIRS variables

This is a partial revert of r280013. Brad King pointed out these variable names are matching CMake conventions, so we should preserve them.

I've also added a direct mapping of the LLVM_*_DIR variables which we need to make projects support building in and out of tree.

llvm-svn: 280380

5 years ago[EarlyCSE] Change C API pass interface for EarlyCSE w/ MemorySSA
Geoff Berry [Thu, 1 Sep 2016 15:07:46 +0000 (15:07 +0000)]
[EarlyCSE] Change C API pass interface for EarlyCSE w/ MemorySSA

Previous change broke the C API for creating an EarlyCSE pass w/
MemorySSA by adding a bool parameter to control whether MemorySSA was
used or not.  This broke the OCaml bindings.  Instead, change the old C
API entry point back and add a new one to request an EarlyCSE pass with

llvm-svn: 280379

5 years agobuild: profile is not a sanitizer
Saleem Abdulrasool [Thu, 1 Sep 2016 15:05:36 +0000 (15:05 +0000)]
build: profile is not a sanitizer

There was an invalid entry in the sanitizer list, remove it.  This has no effect
on the building, just removes the definition of a cached variable.

llvm-svn: 280378

5 years ago[mips] Include missed file from previous commit
Simon Dardis [Thu, 1 Sep 2016 15:03:13 +0000 (15:03 +0000)]
[mips] Include missed file from previous commit

llvm-svn: 280377

5 years ago[X86][SSE] Dropped (V)CVTPD2PS intrinsic patterns now that its bound to X86vfpround
Simon Pilgrim [Thu, 1 Sep 2016 14:59:20 +0000 (14:59 +0000)]
[X86][SSE] Dropped (V)CVTPD2PS intrinsic patterns now that its bound to X86vfpround

It now uses X86vfpround patterns directly instead.

Followup to D23797

llvm-svn: 280376

5 years agoAdd missing REQUIRES.
Rafael Espindola [Thu, 1 Sep 2016 14:59:11 +0000 (14:59 +0000)]
Add missing REQUIRES.

llvm-svn: 280375

5 years ago[mips] interAptiv based generic schedule model
Simon Dardis [Thu, 1 Sep 2016 14:53:53 +0000 (14:53 +0000)]
[mips] interAptiv based generic schedule model

This scheduler describes a processor which covers all MIPS ISAs based
around the interAptiv and P5600 timings.

Reviewers: vkalintiris, dsanders

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

llvm-svn: 280374

5 years agoTry to fix another profile test
Renato Golin [Thu, 1 Sep 2016 14:44:02 +0000 (14:44 +0000)]
Try to fix another profile test

Another CFG optimisation patch (280364) has broken bad profile tests, and this
is a similar attempt to fix the test without changing the semantics.

llvm-svn: 280373

5 years agoRemove extra scariness.Clear() call.
Filipe Cabecinhas [Thu, 1 Sep 2016 14:41:17 +0000 (14:41 +0000)]
Remove extra scariness.Clear() call.

llvm-svn: 280372

5 years ago[CMake] Fix LLVM_ENABLE_EH and LLVM_ENABLE_RTTI on MSVC
Andrey Bokhanko [Thu, 1 Sep 2016 14:39:54 +0000 (14:39 +0000)]

Patch by Johannes Sebastian Mueller-Roemer.

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

llvm-svn: 280371

5 years ago[InstCombine] remove fold of an icmp pattern that should never happen
Sanjay Patel [Thu, 1 Sep 2016 14:20:43 +0000 (14:20 +0000)]
[InstCombine] remove fold of an icmp pattern that should never happen

While removing a scalar shackle from an icmp fold, I noticed that I couldn't find any tests to trigger
this code path.

The 'and' shrinking transform should be handled by InstCombiner::foldCastedBitwiseLogic()
or eliminated with InstSimplify. The icmp narrowing is part of InstCombiner::foldICmpWithCastAndCast().

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

llvm-svn: 280370

5 years ago[Hexagon] Deal with undefs when extending live intervals
Krzysztof Parzyszek [Thu, 1 Sep 2016 13:59:35 +0000 (13:59 +0000)]
[Hexagon] Deal with undefs when extending live intervals

Reapply r280275, since MSVC accepts r280358.

llvm-svn: 280369

5 years agoOptimized FMA intrinsic + FNEG , like
Elena Demikhovsky [Thu, 1 Sep 2016 13:58:53 +0000 (13:58 +0000)]
Optimized FMA intrinsic + FNEG , like

and FNEG + FMA, like
a*b-c or (-a)*b+c.

The bug description is here :  https://llvm.org/bugs/show_bug.cgi?id=28892

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

llvm-svn: 280368

5 years ago[analyzer] ExprEngine: remove second call to PreStmt<CastExpr>
Aleksei Sidorin [Thu, 1 Sep 2016 13:55:38 +0000 (13:55 +0000)]
[analyzer] ExprEngine: remove second call to PreStmt<CastExpr>

This patch also introduces AnalysisOrderChecker which is intended for testing
of callback call correctness.

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

llvm-svn: 280367

5 years agoSign extend a value before passing it to the Target.
Rafael Espindola [Thu, 1 Sep 2016 13:52:52 +0000 (13:52 +0000)]
Sign extend a value before passing it to the Target.

This is what InputSectionBase<ELFT>::relocate does and we need to be
consistent. The other option would be to be more explicit about which
relocations are signed and which are not, and sign extend only when
appropriated. That would require extending the target interface.

llvm-svn: 280366

5 years agoFix profile test assuming dumb compiler
Renato Golin [Thu, 1 Sep 2016 13:45:47 +0000 (13:45 +0000)]
Fix profile test assuming dumb compiler

Commit r280364 has introduced some call-graph optmisations making a profiler
test "fail" due to not expecting the compiler to be "smart", and fold constants
across functions. This commit works around the issue, leaving the origial
semantics intact.

llvm-svn: 280365

5 years ago[SimplifyCFG] Handle tail-sinking of more than 2 incoming branches
James Molloy [Thu, 1 Sep 2016 12:58:13 +0000 (12:58 +0000)]
[SimplifyCFG] Handle tail-sinking of more than 2 incoming branches

This was a real restriction in the original version of SinkIfThenCodeToEnd. Now it's been rewritten, the restriction can be lifted.

As part of this, we handle a very common and useful case where one of the incoming branches is actually conditional. Consider:

   if (a)
   else if (b)

This produces the following CFG:

        /    \
      [x(1)] [if]
        |     | \
        |     |  \
        |  [x(2)] |
         \    |  /
          [ end ]

[end] has two unconditional predecessor arcs and one conditional. The conditional refers to the implicit empty 'else' arc. This same pattern can also be caused by an empty default block in a switch.

We can't sink the call to x() down to end because no call to x() happens on the third incoming arc (assume that x() has sideeffects for the sake of argument; if something is safe to speculate we could indeed sink nevertheless but this cannot happen in the general case and causes many extra selects).

We are now able to detect this case and split off the unconditional arcs to a common successor:

        /    \
      [x(1)] [if]
        |     | \
        |     |  \
        |  [x(2)] |
         \   /    |
     [sink.split] |
           \     /
           [ end ]

Now we can sink the call to x() into %sink.split. This can cause significant code simplification in many testcases.

llvm-svn: 280364

5 years agoClear scariness score when initializing ErrorDoubleFree
Filipe Cabecinhas [Thu, 1 Sep 2016 12:51:58 +0000 (12:51 +0000)]
Clear scariness score when initializing ErrorDoubleFree

llvm-svn: 280363

5 years agoCopy over most of the scariness_score test to the general tests
Filipe Cabecinhas [Thu, 1 Sep 2016 12:29:13 +0000 (12:29 +0000)]
Copy over most of the scariness_score test to the general tests

The abort() test wasn't copied over (original case 22). This is because
it doesn't work on OS X.

If theres no buildbot problem with this test later today, I will
minimize the Linux version.

llvm-svn: 280361

5 years ago[analyzer] Add more FileIDs to PlistDiagnostic map to avoid assertion
Aleksei Sidorin [Thu, 1 Sep 2016 12:25:16 +0000 (12:25 +0000)]
[analyzer] Add more FileIDs to PlistDiagnostic map to avoid assertion

Some FileIDs that may be used by PlistDiagnostics were not added while building
a list of pieces. This caused assertion violation in GetFID() function.
This patch adds some missing FileIDs to avoid the assertion. It also contains
small refactoring of PlistDiagnostics::FlushDiagnosticsImpl().

Patch by Aleksei Sidorin, Ilya Palachev.

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

llvm-svn: 280360

5 years ago[include-fixer] Fix an undefined variable exception in vim script when there is
Haojian Wu [Thu, 1 Sep 2016 12:17:28 +0000 (12:17 +0000)]
[include-fixer] Fix an undefined variable exception in vim script when there is
only one candidate header.

llvm-svn: 280359

5 years agoAdd an optional parameter with a list of undefs to extendToIndices
Krzysztof Parzyszek [Thu, 1 Sep 2016 12:10:36 +0000 (12:10 +0000)]
Add an optional parameter with a list of undefs to extendToIndices

Reapply r280268, hopefully in a version that MSVC likes.

llvm-svn: 280358

5 years ago[IR] Properly handle escape characters in Attribute::getAsString()
Honggyu Kim [Thu, 1 Sep 2016 11:44:06 +0000 (11:44 +0000)]
[IR] Properly handle escape characters in Attribute::getAsString()

If an attribute name has special characters such as '\01', it is not
properly printed in LLVM assembly language format.  Since the format
expects the special characters are printed as it is, it has to contain
escape characters to make it printable.

  attributes #0 = { ... "counting-function"="^A__gnu_mcount_nc" ...

  attributes #0 = { ... "counting-function"="\01__gnu_mcount_nc" ...

Reviewers: hfinkel, rengolin, rjmccall, compnerd

Subscribers: nemanjai, mcrosier, hans, shenhan, majnemer, llvm-commits

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

llvm-svn: 280357

5 years agoMinidump parsing
Dimitar Vlahovski [Thu, 1 Sep 2016 11:29:53 +0000 (11:29 +0000)]
Minidump parsing

This is a Minidump parsing code.
There are still some more structures/data streams that need to be added.
The aim ot this is to be used in the implementation of
a minidump debugging plugin that works on all platforms/architectures.
Currently we have a windows-only plugin that uses the WinAPI to parse
the dump files.
Also added unittests for the current functionality.

Reviewers: labath, amccarth

Subscribers: tberghammer, danalbert, srhines, lldb-commits, dschuff

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

llvm-svn: 280356

5 years ago[Frontend] Fix mcount inlining bug
Honggyu Kim [Thu, 1 Sep 2016 11:29:21 +0000 (11:29 +0000)]
[Frontend] Fix mcount inlining bug

Since some profiling tools, such as gprof, ftrace, and uftrace, use
-pg option to generate a mcount function call at the entry of each
function. Function invocation can be detected by this hook function.

But mcount insertion is done before function inlining phase in clang,
sometime a function that already has a mcount call can be inlined in the
middle of another function.

This patch adds an attribute "counting-function" to each function
rather than emitting the mcount call directly in frontend so that this
attribute can be processed in backend. Then the mcount calls can be
properly inserted in backend after all the other optimizations are

Link: https://llvm.org/bugs/show_bug.cgi?id=28660
Reviewers: hans, rjmccall, hfinkel, rengolin, compnerd

Subscribers: shenhan, cfe-commits

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

llvm-svn: 280355

5 years ago[analyzer][test commit] ExprEngine.cpp: Remove training whitespace; NFC
Aleksei Sidorin [Thu, 1 Sep 2016 11:11:46 +0000 (11:11 +0000)]
[analyzer][test commit] ExprEngine.cpp: Remove training whitespace; NFC

llvm-svn: 280352

5 years ago[SimplifyCFG] Change the algorithm in SinkThenElseCodeToEnd
James Molloy [Thu, 1 Sep 2016 10:44:35 +0000 (10:44 +0000)]
[SimplifyCFG] Change the algorithm in SinkThenElseCodeToEnd

r279460 rewrote this function to be able to handle more than two incoming edges and took pains to ensure this didn't regress anything.

This time we change the logic for determining if an instruction should be sunk. Previously we used a single pass greedy algorithm - sink instructions until one requires more than one PHI node or we run out of instructions to sink.

This had the problem that sinking instructions that had non-identical but trivially the same operands needed extra logic so we sunk them aggressively. For example:

    %a = load i32* %b          %d = load i32* %b
    %c = gep i32* %a, i32 0    %e = gep i32* %d, i32 1

Sinking %c and %e would naively require two PHI merges as %a != %d. But the loads are obviously equivalent (and maybe can't be hoisted because there is no common predecessor).

This is why we implemented the fairly complex function areValuesTriviallySame(), to look through trivial differences like this. However it's just not clever enough.

Instead, throw areValuesTriviallySame away, use pointer equality to check equivalence of operands and switch to a two-stage algorithm.

In the "scan" stage, we look at every sinkable instruction in isolation from end of block to front. If it's sinkable, we keep track of all operands that required PHI merging.

In the "sink" stage, we iteratively sink the last non-terminator in the source blocks. But when calculating how many PHIs are actually required to be inserted (to work out if we should stop or not) we remove any values that have already been sunk from the set of PHI-merges required, which allows us to be more aggressive.

This turns an algorithm with potentially recursive lookahead (looking through GEPs, casts, loads and any other instruction potentially not CSE'd) to two linear scans.

llvm-svn: 280351

5 years agoAdd ISD::EH_DWARF_CFA, simplify @llvm.eh.dwarf.cfa on Mips, fix on PowerPC
Hal Finkel [Thu, 1 Sep 2016 10:28:47 +0000 (10:28 +0000)]
Add ISD::EH_DWARF_CFA, simplify @llvm.eh.dwarf.cfa on Mips, fix on PowerPC

LLVM has an @llvm.eh.dwarf.cfa intrinsic, used to lower the GCC-compatible
__builtin_dwarf_cfa() builtin. As pointed out in PR26761, this is currently
broken on PowerPC (and likely on ARM as well). Currently, @llvm.eh.dwarf.cfa is
lowered using:


where FRAME_TO_ARGS_OFFSET defaults to the constant zero. On x86,
FRAME_TO_ARGS_OFFSET is lowered to 2*SlotSize. This setup, however, does not
work for PowerPC. Because of the way that the stack layout works, the canonical
frame address is not exactly (FRAMEADDR + FRAME_TO_ARGS_OFFSET) on PowerPC
(there is a lower save-area offset as well), so it is not just a matter of
implementing FRAME_TO_ARGS_OFFSET for PowerPC (unless we redefine its
semantics -- We can do that, since it is currently used only for
@llvm.eh.dwarf.cfa lowering, but the better to directly lower the CFA construct
itself (since it can be easily represented as a fixed-offset FrameIndex)). Mips
currently does this, but by using a custom lowering for ADD that specifically
recognizes the (FRAMEADDR, FRAME_TO_ARGS_OFFSET) pattern.

This change introduces a ISD::EH_DWARF_CFA node, which by default expands using
the existing logic, but can be directly lowered by the target. Mips is updated
to use this method (which simplifies its implementation, and I suspect makes it
more robust), and updates PowerPC to do the same.

Fixes PR26761.

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

llvm-svn: 280350

5 years ago[AMDGPU] Scalar Memory instructions TD refactoring
Valery Pykhtin [Thu, 1 Sep 2016 09:56:47 +0000 (09:56 +0000)]
[AMDGPU] Scalar Memory instructions TD refactoring

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

llvm-svn: 280349

5 years agoEliminate LayoutInputSection class
Eugene Leviant [Thu, 1 Sep 2016 09:55:57 +0000 (09:55 +0000)]
Eliminate LayoutInputSection class

Previously we used LayoutInputSection class to correctly assign
symbols defined in linker script. This patch removes it and uses
pointer to preceding input section in SymbolAssignment class instead.

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

llvm-svn: 280348

5 years agoAdd a counter-function insertion pass
Hal Finkel [Thu, 1 Sep 2016 09:42:39 +0000 (09:42 +0000)]
Add a counter-function insertion pass

As discussed in https://reviews.llvm.org/D22666, our current mechanism to
support -pg profiling, where we insert calls to mcount(), or some similar
function, is fundamentally broken. We insert these calls in the frontend, which
means they get duplicated when inlining, and so the accumulated execution
counts for the inlined-into functions are wrong.

Because we don't want the presence of these functions to affect optimizaton,
they should be inserted in the backend. Here's a pass which would do just that.
The knowledge of the name of the counting function lives in the frontend, so
we're passing it here as a function attribute. Clang will be updated to use
this mechanism.

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

llvm-svn: 280347

5 years ago[Support] Fix a warning introduced in r280339 due to the member
Chandler Carruth [Thu, 1 Sep 2016 09:31:02 +0000 (09:31 +0000)]
[Support] Fix a warning introduced in r280339 due to the member
initializers not being in the same order as the members.

Specifically, 'preg' is the first member followed by 'error', so they
will be initialized in that order and should be written in the member
initializer list in that order.

For the constructor in question, there is no change in behavior.

llvm-svn: 280345

5 years agoXFail TestMemoryFind on 32-bit architectures
Pavel Labath [Thu, 1 Sep 2016 09:17:37 +0000 (09:17 +0000)]
XFail TestMemoryFind on 32-bit architectures

the test fails for a very prosaic reason: `(const char *)0x1000` returns "4096" on x86_64 and
"1000" (without the "0x") on i386. I haven't tried other 32-bit arches, but I am guessing the
behaviour is the same. XFAIL until someone can get a chance to look at this.

llvm-svn: 280344

5 years ago[ScopInfo] Add missing ISL annotations NFC.
Michael Kruse [Thu, 1 Sep 2016 09:03:27 +0000 (09:03 +0000)]
[ScopInfo] Add missing ISL annotations NFC.

llvm-svn: 280343

5 years ago[SimplifyCFG] Fix nondeterministic iteration order
James Molloy [Thu, 1 Sep 2016 09:01:34 +0000 (09:01 +0000)]
[SimplifyCFG] Fix nondeterministic iteration order

We iterate over the result from SafeToMergeTerminators, so make it a SmallSetVector instead of a SmallPtrSet.

Should fix stage3 convergence builds.

llvm-svn: 280342

5 years agoUpdate ISL to isl-0.17.1-203-g3fef898.
Michael Kruse [Thu, 1 Sep 2016 08:26:22 +0000 (08:26 +0000)]
Update ISL to isl-0.17.1-203-g3fef898.

This version has isl_space_has_equal_tuples added to the public API.

llvm-svn: 280341

5 years agoCommit of forgotten header for r280339 "[LLVM/Support] - Create no-arguments construc...
George Rimar [Thu, 1 Sep 2016 08:02:20 +0000 (08:02 +0000)]
Commit of forgotten header for r280339 "[LLVM/Support] - Create no-arguments constructor for llvm::Regex"

llvm-svn: 280340

5 years ago[LLVM/Support] - Create no-arguments constructor for llvm::Regex
George Rimar [Thu, 1 Sep 2016 08:00:28 +0000 (08:00 +0000)]
[LLVM/Support] - Create no-arguments constructor for llvm::Regex

This is useful when need to defer the construction,
e.g. using Regex as a member of class.

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

llvm-svn: 280339

5 years ago[SimplifyCFG] Improve FoldValueComparisonIntoPredecessors to handle more cases
James Molloy [Thu, 1 Sep 2016 07:45:25 +0000 (07:45 +0000)]
[SimplifyCFG] Improve FoldValueComparisonIntoPredecessors to handle more cases

A very important case is not handled here: multiple arcs to a single block with a PHI. Consider:

      %1 = icmp %b, 1
      br %1, label %c, label %e
      %2 = icmp %b, 2
      br %2, label %d, label %e
      br %e
      phi [0, %a], [1, %c], [2, %d]

FoldValueComparisonIntoPredecessors will refuse to fold this, as it doesn't know how to deal with two arcs to a common destination with different PHI values. The answer is obvious - just split all conflicting arcs.

llvm-svn: 280338

5 years agoRemove whitespace to test commit access
Honggyu Kim [Thu, 1 Sep 2016 06:14:45 +0000 (06:14 +0000)]
Remove whitespace to test commit access

llvm-svn: 280337

5 years ago[NFC] Remove unnecessary comment
Dean Michael Berris [Thu, 1 Sep 2016 01:58:24 +0000 (01:58 +0000)]
[NFC] Remove unnecessary comment

llvm-svn: 280336

5 years agoFix libc++ configuration with -fsanitize-coverage
Ivan Krasin [Thu, 1 Sep 2016 01:38:32 +0000 (01:38 +0000)]
Fix libc++ configuration with -fsanitize-coverage

a recent change (r280015) in libc++ configuration broke LibFuzzer bot:

It's not restricted just to that bot; any code that uses the sanitize coverage and configures libc++ hits it.

This CL fixes the issue.

Reviewers: compnerd

Subscribers: aizatsky

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

llvm-svn: 280335

5 years ago[XRay] Detect and emit sleds for sibling/tail calls
Dean Michael Berris [Thu, 1 Sep 2016 01:29:13 +0000 (01:29 +0000)]
[XRay] Detect and emit sleds for sibling/tail calls

This change promotes the 'isTailCall(...)' member function to
TargetInstrInfo as a query interface for determining on a per-target
basis whether a given MachineInstr is a tail call instruction. We build
upon this in the XRay instrumentation pass to emit special sleds for
tail call optimisations, where we emit the correct kind of sled.

The tail call sleds look like a mix between the function entry and
function exit sleds. Form-wise, the sled comes before the "jmp"
instruction that implements the tail call similar to how we do it for
the function entry sled. Functionally, because we know this is a tail
call, it behaves much like an exit sled -- i.e. at runtime we may use
the exit trampolines instead of a different kind of trampoline.

A follow-up change to recognise these sleds will be done in compiler-rt,
so that we can start intercepting these initially as exits, but also
have the option to have different log entries to more accurately reflect
that this is actually a tail call.

Reviewers: echristo, rSerge, majnemer

Subscribers: mehdi_amini, dberris, llvm-commits

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

llvm-svn: 280334

5 years agoFix typos in comments.
George Burgess IV [Thu, 1 Sep 2016 01:26:58 +0000 (01:26 +0000)]
Fix typos in comments.

llvm-svn: 280333

5 years ago[libFuzzer] add -minimize_crash flag (to minimize crashers). also add two tests that...
Kostya Serebryany [Thu, 1 Sep 2016 01:22:27 +0000 (01:22 +0000)]
[libFuzzer] add -minimize_crash flag (to minimize crashers). also add two tests that I failed to commit last time

llvm-svn: 280332

5 years ago[XRay][NFC] Promote isTailCall() as virtual in TargetInstrInfo.
Dean Michael Berris [Thu, 1 Sep 2016 01:03:22 +0000 (01:03 +0000)]
[XRay][NFC] Promote isTailCall() as virtual in TargetInstrInfo.

This change is broken out from D23986, where XRay detects tail call

llvm-svn: 280331