oota-llvm.git
8 years agoWebAssembly: test that valid -mcpu flags are accepted.
JF Bastien [Thu, 23 Jul 2015 23:00:04 +0000 (23:00 +0000)]
WebAssembly: test that valid -mcpu flags are accepted.

Summary: AArch64 has a similar test.

Subscribers: sunfish, aemerson, llvm-commits, jfb

Differential Revision: http://reviews.llvm.org/D11479

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

8 years agofix crash in machine trace metrics due to processing dbg_value instructions (PR24199)
Sanjay Patel [Thu, 23 Jul 2015 22:56:53 +0000 (22:56 +0000)]
fix crash in machine trace metrics due to processing dbg_value instructions (PR24199)

The test in PR24199 ( https://llvm.org/bugs/show_bug.cgi?id=24199 ) crashes because machine
trace metrics was not ignoring dbg_value instructions when calculating data dependencies.

The machine-combiner pass asks machine trace metrics to calculate an instruction trace,
does some reassociations, and calls MachineInstr::eraseFromParentAndMarkDBGValuesForRemoval()
along with MachineTraceMetrics::invalidate(). The dbg_value instructions have their operands
invalidated, but the instructions are not expected to be deleted.

On a subsequent loop iteration of the machine-combiner pass, machine trace metrics would be
called again and die while accessing the invalid debug instructions.

Differential Revision: http://reviews.llvm.org/D11423

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

8 years ago[RewriteStatepointsForGC] Rename PhiState to reflect that it's associated w/more...
Philip Reames [Thu, 23 Jul 2015 22:49:14 +0000 (22:49 +0000)]
[RewriteStatepointsForGC] Rename PhiState to reflect that it's associated w/more than just PHIs

Today, Select instructions also have associated PhiStates.  In the near future, so will ExtractElement and SuffleVector.

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

8 years ago[RewriteStatepointsForGC] Use idomatic mechanisms for debug tracing [NFC]
Philip Reames [Thu, 23 Jul 2015 22:25:26 +0000 (22:25 +0000)]
[RewriteStatepointsForGC] Use idomatic mechanisms for debug tracing [NFC]

Deleting much of the code using trace-rewrite-statepoints and use idiomatic DEBUG statements instead.  This includes adding operator<< to a helper class.

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

8 years ago[ARM] Register (existing) ARMLoadStoreOpt pass with LLVM pass manager.
David Gross [Thu, 23 Jul 2015 22:12:46 +0000 (22:12 +0000)]
[ARM] Register (existing) ARMLoadStoreOpt pass with LLVM pass manager.

Summary: Among other things, this allows -print-after-all/-print-before-all to dump IR around this pass.

Subscribers: aemerson, llvm-commits, rengolin

Differential Revision: http://reviews.llvm.org/D11373

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

8 years agoMoving tests in to X86 directory.
Colin LeMahieu [Thu, 23 Jul 2015 21:55:26 +0000 (21:55 +0000)]
Moving tests in to X86 directory.

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

8 years agoTest commit.
David Gross [Thu, 23 Jul 2015 21:46:09 +0000 (21:46 +0000)]
Test commit.

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

8 years ago[RewriteStatepointsForGC] Simplify code around meet of PhiStates [NFC]
Philip Reames [Thu, 23 Jul 2015 21:41:27 +0000 (21:41 +0000)]
[RewriteStatepointsForGC] Simplify code around meet of PhiStates [NFC]

We don't need to pass in the map from BDV to PhiStates; we can instead handle that externally and let the MeetPhiStates helper class just meet PhiStates.

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

8 years agoUsing an input object file instead of trying to generate an object file.
Colin LeMahieu [Thu, 23 Jul 2015 21:40:19 +0000 (21:40 +0000)]
Using an input object file instead of trying to generate an object file.

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

8 years agoSpecifying a test triple.
Colin LeMahieu [Thu, 23 Jul 2015 21:24:52 +0000 (21:24 +0000)]
Specifying a test triple.

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

8 years ago[llvm-objdump] Add -D and --disassemble-all flags that attempt disassembly on all...
Colin LeMahieu [Thu, 23 Jul 2015 20:58:49 +0000 (20:58 +0000)]
[llvm-objdump] Add -D and --disassemble-all flags that attempt disassembly on all sections instead of just text sections.

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

8 years ago[Scalarizer] Fix potential for stale data in Scattered across invocations
Matt Wala [Thu, 23 Jul 2015 20:53:46 +0000 (20:53 +0000)]
[Scalarizer] Fix potential for stale data in Scattered across invocations

Summary:
Scalarizer has two data structures that hold information about changes
to the function, Gathered and Scattered. These are cleared in finish()
at the end of runOnFunction() if finish() detects any changes to the
function.

However, finish() was checking for changes by only checking if
Gathered was non-empty. The function visitStore() only modifies
Scattered without touching Gathered. As a result, Scattered could have
ended up having stale data if Scalarizer only scalarized store
instructions. Since the data in Scattered is used during the execution
of the pass, this introduced dangling pointer errors.

The fix is to check whether both Scattered and Gathered are empty
before deciding what to do in finish(). This also fixes a problem
where the Function can be modified although the pass returns false.

Reviewers: rnk

Subscribers: rnk, srhines, llvm-commits

Differential Revision: http://reviews.llvm.org/D10459

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

8 years agoX86: Use dyn_cast instead of isa+cast, NFC
Duncan P. N. Exon Smith [Thu, 23 Jul 2015 19:27:07 +0000 (19:27 +0000)]
X86: Use dyn_cast instead of isa+cast, NFC

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

8 years agoThis patch eanble register coalescing to coalesce the following:
Weiming Zhao [Thu, 23 Jul 2015 19:24:53 +0000 (19:24 +0000)]
This patch eanble register coalescing to coalesce the following:

  %vreg2<def> = MOVi32imm 1; GPR32:%vreg2
  %W1<def> = COPY %vreg2; GPR32:%vreg2
into:
  %W1<def> = MOVi32imm 1
Patched by Lawrence Hu (lawrence@codeaurora.org)

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

8 years ago[libFuzzer] dump long running units to disk
Kostya Serebryany [Thu, 23 Jul 2015 18:37:22 +0000 (18:37 +0000)]
[libFuzzer] dump long running units to disk

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

8 years agoNFC. Explicitly specify attributes in BasicAA/cs-cs.ll test.
Igor Laevsky [Thu, 23 Jul 2015 14:31:18 +0000 (14:31 +0000)]
NFC. Explicitly specify attributes in BasicAA/cs-cs.ll test.
This will simplify verifying correctness for a changes which modify attributes.

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

8 years agoDelete dead code.
Rafael Espindola [Thu, 23 Jul 2015 13:42:16 +0000 (13:42 +0000)]
Delete dead code.

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

8 years agoUse helper function. NFC.
Rafael Espindola [Thu, 23 Jul 2015 12:51:44 +0000 (12:51 +0000)]
Use helper function. NFC.

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

8 years agoAdd a version of getSymbol with an explicit symbol table. Use it. NFC.
Rafael Espindola [Thu, 23 Jul 2015 12:49:40 +0000 (12:49 +0000)]
Add a version of getSymbol with an explicit symbol table. Use it. NFC.

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

8 years ago[X86] Allow load folding into PUSH instructions
Michael Kuperstein [Thu, 23 Jul 2015 12:23:45 +0000 (12:23 +0000)]
[X86] Allow load folding into PUSH instructions

Adds pushes to the folding tables.
This also required a fix to the TD definition, since the memory forms of
the push instructions did not have the right mayLoad/mayStore flags.

Differential Revision: http://reviews.llvm.org/D11340

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

8 years ago[x86] change FP scalar builtin naming convention
Asaf Badouh [Thu, 23 Jul 2015 12:10:51 +0000 (12:10 +0000)]
[x86] change FP scalar builtin naming convention

Differential Revision: http://reviews.llvm.org/D11454

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

8 years ago[asan] Rename the ABI versioning symbol to '__asan_version_mismatch_check' instead...
Kuba Brecka [Thu, 23 Jul 2015 10:54:06 +0000 (10:54 +0000)]
[asan] Rename the ABI versioning symbol to '__asan_version_mismatch_check' instead of abusing '__asan_init'

We currently version `__asan_init` and when the ABI version doesn't match, the linker gives a `undefined reference to '__asan_init_v5'` message. From this, it might not be obvious that it's actually a version mismatch error. This patch makes the error message much clearer by changing the name of the undefined symbol to be `__asan_version_mismatch_check_xxx` (followed by the version string). We obviously don't want the initializer to be named like that, so it's a separate symbol that is used only for the purpose of version checking.

Reviewed at http://reviews.llvm.org/D11004

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

8 years ago[X86] Fix order of operands for ins and outs instructions when parsing intel syntax
Michael Kuperstein [Thu, 23 Jul 2015 10:23:48 +0000 (10:23 +0000)]
[X86] Fix order of operands for ins and outs instructions when parsing intel syntax

Patch by: marina.yatsina@intel.com
Differential Revision: http://reviews.llvm.org/D11337

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

8 years ago[GMR] Add a late run of GlobalsModRef to the main pass pipeline behind
Chandler Carruth [Thu, 23 Jul 2015 09:34:01 +0000 (09:34 +0000)]
[GMR] Add a late run of GlobalsModRef to the main pass pipeline behind
the general GMR-in-non-LTO flag.

Without this, we have the global information during the CGSCC pipeline
for GVN and such, but don't have it available during the late loop
optimizations such as the vectorizer. Moreover, after the CGSCC pipeline
has finished we have substantially more accurate and refined call graph
information, function annotations, etc, which will make GMR even more
powerful than it is early in the pipelien.

Note that we have to play silly games with preserving AliasAnalysis
(which is now trivially preserved) in order to let a module analysis
magically be preserved into the entire function pass pipeline.
Simultaneously we have to not make GMR an immutable pass in order to be
able to re-run it and collect fresh data on the final call graph.

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

8 years agoSupport printing relocations in files with no section table.
Rafael Espindola [Thu, 23 Jul 2015 09:11:05 +0000 (09:11 +0000)]
Support printing relocations in files with no section table.

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

8 years agoUse typdef to simplify the code. NFC.
Rafael Espindola [Thu, 23 Jul 2015 08:48:14 +0000 (08:48 +0000)]
Use typdef to simplify the code. NFC.

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

8 years agoX86: Fixed assertion failure in 32-bit mode
Elena Demikhovsky [Thu, 23 Jul 2015 08:25:23 +0000 (08:25 +0000)]
X86: Fixed assertion failure in 32-bit mode
The DAG Node "SCALAR_TO_VECTOR" may be created if the type of the scalar element is legal.
Added a check for the scalar type before creating this node.
Added a test that fails with assertion on the current version.

Differential Revision: http://reviews.llvm.org/D11413

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

8 years agoAvoid using -Wl,-z,defs on Cygwin.
Yaron Keren [Thu, 23 Jul 2015 08:06:12 +0000 (08:06 +0000)]
Avoid using -Wl,-z,defs on Cygwin.

Prior to CMAKE 2.8.4 that was covered by the WIN32 conditional but
from 2.8.4 CMAKE no longer defined WIN32 when running under Cygwin
and it needs its own test.

Patch by Martell Malone!

http://reviews.llvm.org/D11347

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

8 years agoRevert r242990: "AVX-512: Implemented encoding , DAG lowering and ..."
Chandler Carruth [Thu, 23 Jul 2015 08:03:44 +0000 (08:03 +0000)]
Revert r242990: "AVX-512: Implemented encoding , DAG lowering and ..."

This commit broke the build. Numerous build bots broken, and it was
blocking my progress so reverting.

It should be trivial to reproduce -- enable the BPF backend and it
should fail when running llvm-tblgen.

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

8 years ago[GMR] Switch the function info we store for every function to be a much
Chandler Carruth [Thu, 23 Jul 2015 07:50:52 +0000 (07:50 +0000)]
[GMR] Switch the function info we store for every function to be a much
more dense datastructure. We actually only have 3 bits of information
and an often-null pointer here. This fits very nicely into a
pointer-size value in the DenseMap from Function -> Info. Then we take
one more pointer hop to get to a secondary DenseMap from GlobalValue ->
ModRefInfo when we actually have precise info for particular globals.

This is more code than I would really like to do this packing, but it
ended up reasonably cleanly laid out. It should ensure we don't hit
scaling limitations with more widespread use of GMR.

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

8 years agoAVX-512: Implemented encoding , DAG lowering and intrinsics for Integer Truncate...
Igor Breger [Thu, 23 Jul 2015 07:39:21 +0000 (07:39 +0000)]
AVX-512: Implemented encoding , DAG lowering and intrinsics for Integer Truncate with/without saturation
Added tests for DAG lowering ,encoding and intrinsic

Differential Revision: http://reviews.llvm.org/D11218

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

8 years ago[ScalarEvolution] Change addRequired to addRequiredTransitive on two passes where...
Craig Topper [Thu, 23 Jul 2015 07:33:48 +0000 (07:33 +0000)]
[ScalarEvolution] Change addRequired to addRequiredTransitive on two passes where ScalarEvolution stores long lived raw pointers to objects those passes own.

This prevents the pointers from dangling when those passes are freed.

http://reviews.llvm.org/D11236
Patch by Steve King.

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

8 years agoReplace a 0 with nullptr. NFC
Craig Topper [Thu, 23 Jul 2015 07:17:53 +0000 (07:17 +0000)]
Replace a 0 with nullptr. NFC

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

8 years agoAVX : Fix ISA disabling in case AVX512VL , some instructions should be disabled only...
Igor Breger [Thu, 23 Jul 2015 07:11:14 +0000 (07:11 +0000)]
AVX : Fix ISA disabling in case AVX512VL , some instructions should be disabled only if AVX512BW and AVX512VL present.
Tests added.

Differential Revision: http://reviews.llvm.org/D11414

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

8 years agoRemove unnecessary in C++11 c_str() calls
Yaron Keren [Thu, 23 Jul 2015 05:49:29 +0000 (05:49 +0000)]
Remove unnecessary in C++11 c_str() calls

While theoratically required in pre-C++11 to avoid re-allocation upon call,
C++11 guarantees that c_str() returns a pointer to the internal array so
pre-calling c_str() is no longer required.

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

8 years ago[NVPTX] run LSR before straight-line optimizations
Jingyue Wu [Thu, 23 Jul 2015 04:59:07 +0000 (04:59 +0000)]
[NVPTX] run LSR before straight-line optimizations

Summary:
Straight-line optimizations can simplify the loop body and make LSR's
cost analysis more precise. This significantly improves several Eigen3
CUDA benchmarks.

With this change, EigenContractionKernel runs up to 40% faster
(https://bitbucket.org/eigen/eigen/src/753ceee5f206ff7dde9f6a41a5a420749fc9406f/unsupported/Eigen/CXX11/src/Tensor/TensorContractionCuda.h?at=default#cl-502).
EigenConvolutionKernel2D runs up to 10% faster
(https://bitbucket.org/eigen/eigen/src/753ceee5f206ff7dde9f6a41a5a420749fc9406f/unsupported/Eigen/CXX11/src/Tensor/TensorConvolution.h?at=default#cl-605).

I have some difficulties writing small tests that benefit from this
reordering due to a seemingly issue with LSR (being discussed at
http://lists.cs.uiuc.edu/pipermail/llvmdev/2015-July/088244.html).

See the review thread for the compilation time impact of GVN.

Reviewers: eliben, jholewinski

Subscribers: llvm-commits, jholewinski

Differential Revision: http://reviews.llvm.org/D11304

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

8 years agoRefactor duplicated code and check for invalid symbol table size.
Rafael Espindola [Thu, 23 Jul 2015 03:24:22 +0000 (03:24 +0000)]
Refactor duplicated code and check for invalid symbol table size.

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

8 years ago[GMR] Further improve the FunctionInfo API inside of GlobalsModRef, NFC.
Chandler Carruth [Thu, 23 Jul 2015 00:12:32 +0000 (00:12 +0000)]
[GMR] Further improve the FunctionInfo API inside of GlobalsModRef, NFC.

This takes the operation of merging a callee's information into the
current information and embeds it into the FunctionInfo type itself.
This is much cleaner as now we don't need to expose iteration of the
globals, etc.

Also, switched all the uses of a raw integer two maintain the mod/ref
info during the SCC walk into just directly manipulating it in the
FunctionInfo object.

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

8 years ago[GMR] Wrap all of the per-function information behind a more strongly
Chandler Carruth [Wed, 22 Jul 2015 23:56:31 +0000 (23:56 +0000)]
[GMR] Wrap all of the per-function information behind a more strongly
typed interface as a precursor to rewriting how it is stored.

This way we know that the access paths are controlled and it should be
easy to store these bits in a different way.

No functionality changed.

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

8 years ago[dsymutil] Check archive members timestamps.
Frederic Riss [Wed, 22 Jul 2015 23:24:00 +0000 (23:24 +0000)]
[dsymutil] Check archive members timestamps.

The debug map contains the timestamp of the object files in references.
We do not check these in the general case, but it's really useful if
you have archives where different versions of an object file have been
appended. This allows llvm-dsymutil to find the right one.

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

8 years ago[PM/AA] Cleanup comments, formatting, and organization of the AA
Chandler Carruth [Wed, 22 Jul 2015 23:16:02 +0000 (23:16 +0000)]
[PM/AA] Cleanup comments, formatting, and organization of the AA
interface prior to making more substantial and invasive changes.

No functionality changed, and should hopefully keep subsequent patches
as clean and focused as possible in addition to making the comments and
such more clear.

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

8 years ago[PM/AA] Extract the ModRef enums from the AliasAnalysis class in
Chandler Carruth [Wed, 22 Jul 2015 23:15:57 +0000 (23:15 +0000)]
[PM/AA] Extract the ModRef enums from the AliasAnalysis class in
preparation for de-coupling the AA implementations.

In order to do this, they had to become fake-scoped using the
traditional LLVM pattern of a leading initialism. These can't be actual
scoped enumerations because they're bitfields and thus inherently we use
them as integers.

I've also renamed the behavior enums that are specific to reasoning
about the mod/ref behavior of functions when called. This makes it more
clear that they have a very narrow domain of applicability.

I think there is a significantly cleaner API for all of this, but
I don't want to try to do really substantive changes for now, I just
want to refactor the things away from analysis groups so I'm preserving
the exact original design and just cleaning up the names, style, and
lifting out of the class.

Differential Revision: http://reviews.llvm.org/D10564

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

8 years ago[GMR] Continue my quest to remove linked datastructures from GMR, NFC.
Chandler Carruth [Wed, 22 Jul 2015 22:32:34 +0000 (22:32 +0000)]
[GMR] Continue my quest to remove linked datastructures from GMR, NFC.

This replaces the next-to-last std::map with a DenseMap. While DenseMap
doesn't yet make tons of sense (there are 32 bytes or so in the value
type), my next change will reduce the value type to a single pointer --
we only need a pointer and 3 bits, and that is exactly what we can have.

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

8 years ago[ConstantFolding] Support folding loads from a GlobalAlias
David Majnemer [Wed, 22 Jul 2015 22:29:30 +0000 (22:29 +0000)]
[ConstantFolding] Support folding loads from a GlobalAlias

The MSVC ABI requires that we generate an alias for the vtable which
means looking through a GlobalAlias which cannot be overridden improves
our ability to devirtualize.

Found while investigating PR20801.

Patch by Andrew Zhogin!

Differential Revision: http://reviews.llvm.org/D11306

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

8 years agoRevert "Improve merging of stores from static constructors in GlobalOpt"
Anthony Pesch [Wed, 22 Jul 2015 22:26:54 +0000 (22:26 +0000)]
Revert "Improve merging of stores from static constructors in GlobalOpt"

This reverts commit 0a9dee959a30b81b9e7df64c9a58ff9898c24024.

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

8 years agoRevert "IPO: Avoid brace initialization of a map, some versions of libc++ don't like it"
Anthony Pesch [Wed, 22 Jul 2015 22:26:52 +0000 (22:26 +0000)]
Revert "IPO: Avoid brace initialization of a map, some versions of libc++ don't like it"

This reverts commit fc2dad0c68f8d32273d3c2d790ed496961f829af.

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

8 years ago[GMR] Make the collection of readers and writers of globals much more
Chandler Carruth [Wed, 22 Jul 2015 22:10:05 +0000 (22:10 +0000)]
[GMR] Make the collection of readers and writers of globals much more
efficient, NFC.

Previously, we built up vectors of function pointers to track readers
and writers. The primary problem here is that we would add the same
function to this vector every time we found an instruction that reads or
writes to the pointer. This could be a *lot* of redudant function
pointers. Instead of doing that, we can use a SmallPtrSet.

This does more than just reduce the size of the list of readers or
writers. We walk the entire lists of each and do a map lookup for each
one. By having sets, we will only do one map lookup per reader or writer
function.

But only one user of the pointer analyzer actually needs this
information, so we can also skip accumulating it (and doing a lot of
heap allocations) for all the other pointer analysis. This is
particularly useful because there are very many more pointers in some of
the other cases.

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

8 years agoForce the gnu archive format to fix the test on darwin.
Rafael Espindola [Wed, 22 Jul 2015 22:09:44 +0000 (22:09 +0000)]
Force the gnu archive format to fix the test on darwin.

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

8 years agofix typo; NFC
Sanjay Patel [Wed, 22 Jul 2015 21:56:41 +0000 (21:56 +0000)]
fix typo; NFC

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

8 years agofix indent; NFC
Sanjay Patel [Wed, 22 Jul 2015 21:47:13 +0000 (21:47 +0000)]
fix indent; NFC

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

8 years agoIPO: Avoid brace initialization of a map, some versions of libc++ don't like it
Justin Bogner [Wed, 22 Jul 2015 21:41:12 +0000 (21:41 +0000)]
IPO: Avoid brace initialization of a map, some versions of libc++ don't like it

Should fix the build failure on these darwin bots:

http://lab.llvm.org:8080/green/job/clang-stage1-cmake-RA-incremental_build/12427/
http://lab.llvm.org:8080/green/job/clang-stage1-configure-RA_build/10389/

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

8 years ago[lit] Fix launching executables relative to the cwd after 'cd'
Reid Kleckner [Wed, 22 Jul 2015 21:35:27 +0000 (21:35 +0000)]
[lit] Fix launching executables relative to the cwd after 'cd'

This was affecting test/asan/TestCases/Windows/coverage-basic.cc in
compiler-rt. It does something like:

  cd %T/mydir
  %clang %s -o t.exe
  ./t.exe

Previously, we'd end up looking for t.exe relative to the cwd of the lit
process, not the cwd of the test.

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

8 years ago[PeepholeOptimizer] Refactor optimizeUncoalescable logic
Bruno Cardoso Lopes [Wed, 22 Jul 2015 21:30:16 +0000 (21:30 +0000)]
[PeepholeOptimizer] Refactor optimizeUncoalescable logic

Reapply r242294.

- Create a new CopyRewriter for Uncoalescable copy-like instructions
- Change the ValueTracker to return a ValueTrackerResult

This makes optimizeUncoalescable looks more like optimizeCoalescable and
use the CopyRewritter infrastructure.

This is also the preparation for looking up into PHI nodes in the
ValueTracker.

rdar://problem/20404526

Differential Revision: http://reviews.llvm.org/D11195

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

8 years agoWebAssembly: basic bitcode → assembly CodeGen test
JF Bastien [Wed, 22 Jul 2015 21:28:15 +0000 (21:28 +0000)]
WebAssembly: basic bitcode â†’ assembly CodeGen test

Summary:
Add a basic CodeGen bitcode test which (for now) only prints out the function name and nothing else. The current code merely implements the basic needed for the test run to not crash / assert. Getting to that point required:

 - Basic InstPrinter.
 - Basic AsmPrinter.
 - DiagnosticInfoUnsupported (not strictly required, but nice to have, duplicated from AMDGPU/BPF's ISelLowering).
 - Some SP and register setup in WebAssemblyTargetLowering.
 - Basic LowerFormalArguments.
 - GenInstrInfo.
 - Placeholder LowerFormalArguments.
 - Placeholder CanLowerReturn and LowerReturn.
 - Basic DAGToDAGISel::Select, which requiresGenDAGISel.inc as well as GET_INSTRINFO_ENUM with GenInstrInfo.inc.
 - Remove WebAssemblyFrameLowering::determineCalleeSaves and rely on default.
 - Implement WebAssemblyFrameLowering::hasFP, same as AArch64's implementation.

Follow-up patches will implement a real AsmPrinter, which will require adding MI opcodes specific to WebAssembly.

Reviewers: sunfish

Subscribers: aemerson, jfb, llvm-commits

Differential Revision: http://reviews.llvm.org/D11369

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

8 years agoMIR Serialization: Serialize the machine instruction's debug location.
Alex Lorenz [Wed, 22 Jul 2015 21:15:11 +0000 (21:15 +0000)]
MIR Serialization: Serialize the machine instruction's debug location.

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

8 years agoRename RunCallBacksToRun to llvm::sys::RunSignalHandlers
Yaron Keren [Wed, 22 Jul 2015 21:11:17 +0000 (21:11 +0000)]
Rename RunCallBacksToRun to llvm::sys::RunSignalHandlers

And expose it in Signals.h, allowing clients to call it directly,
possibly LLVMErrorHandler which currently calls RunInterruptHandlers
but not RunSignalHandlers, thus for example not printing the stack
backtrace on Unixish OSes. On Windows it does happen because
RunInterruptHandlers ends up calling the callbacks as well via
Cleanup(). This difference in behaviour and code structures in
*/Signals.inc should be patched in the future.

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

8 years agoImprove merging of stores from static constructors in GlobalOpt
Anthony Pesch [Wed, 22 Jul 2015 21:10:45 +0000 (21:10 +0000)]
Improve merging of stores from static constructors in GlobalOpt

Summary:
While working on a project I wound up generating a fairly large lookup table (10k entries) of callbacks inside of a static constructor. Clang was taking upwards of ~10 minutes to compile the lookup table. I generated a smaller test case (http://www.inolen.com/static_initializer_test.ll) that, after running with -ftime-report, pointed fingers at GlobalOpt and MemCpyOptimizer.

Running globalopt took around ~9 minutes. The slowdown came from how GlobalOpt merged stores from static constructors individually into the global initializer in EvaluateStaticConstructor. For each store it discovered and wanted to commit, it would copy the existing global initializer and then merge in the individual store. I changed this so that stores are now grouped by global, and sorted from most significant to least significant by their GEP indexes (e.g. a store to GEP 0, 0 comes before GEP 0, 0, 1). With this representation, the existing initializer can be copied and all new stores merged into it in a single pass.

With this patch and http://reviews.llvm.org/D11198, the lookup table that was taking ~10 minutes to compile now compiles in around 5 seconds. I've ran 'make check' and the test-suite, which all passed.

I'm not really sure who to tag as a reviewer, Lang mentioned that Chandler may be appropriate.

Reviewers: chandlerc, nlewycky

Subscribers: nlewycky, llvm-commits

Differential Revision: http://reviews.llvm.org/D11200

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

8 years agoMIR Parser: Extract the MDNode parsing code into a separate method. NFC.
Alex Lorenz [Wed, 22 Jul 2015 21:07:04 +0000 (21:07 +0000)]
MIR Parser: Extract the MDNode parsing code into a separate method. NFC.

This change would allow the machine instruction parser to reuse this method when
parsing the metadata node for the machine instruction's debug location property.

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

8 years agoFix -Wextra-semi warnings.
Hans Wennborg [Wed, 22 Jul 2015 20:46:11 +0000 (20:46 +0000)]
Fix -Wextra-semi warnings.

Patch by Eugene Zelenko!

Differential Revision: http://reviews.llvm.org/D11400

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

8 years agoFix fetching the symbol table of a thin archive.
Rafael Espindola [Wed, 22 Jul 2015 19:34:26 +0000 (19:34 +0000)]
Fix fetching the symbol table of a thin archive.

We were trying to read it as an external file.

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

8 years agoDe-duplicate Unix & Windows CallBacksToRun
Yaron Keren [Wed, 22 Jul 2015 19:01:14 +0000 (19:01 +0000)]
De-duplicate Unix & Windows CallBacksToRun

Move CallBacksToRun into the common Signals.cpp, create RunCallBacksToRun()
and use these in both Unix/Signals.inc and Windows/Signals.inc.

Lots of potential code to be merged here.

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

8 years agoTest commit, added blank line
Anthony Pesch [Wed, 22 Jul 2015 18:50:10 +0000 (18:50 +0000)]
Test commit, added blank line

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

8 years agoSimplify switch as all cases other than default return true. NFC.
Chad Rosier [Wed, 22 Jul 2015 18:41:57 +0000 (18:41 +0000)]
Simplify switch as all cases other than default return true. NFC.

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

8 years agoIdentify thin archives as archives.
Rafael Espindola [Wed, 22 Jul 2015 18:29:39 +0000 (18:29 +0000)]
Identify thin archives as archives.

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

8 years agoRemove C++98 workaround in llvm::sys::DontRemoveFileOnSignal()
Yaron Keren [Wed, 22 Jul 2015 18:23:51 +0000 (18:23 +0000)]
Remove C++98 workaround in llvm::sys::DontRemoveFileOnSignal()

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

8 years ago[Release] Allow release testers to disable certain components
Renato Golin [Wed, 22 Jul 2015 18:21:39 +0000 (18:21 +0000)]
[Release] Allow release testers to disable certain components

Not all components build correctly on all targets and the release
script had no way to disable them other than editing the script locally.

This change provides a way to disable the test-suite, compiler-rt and
the libraries, as well as allowing you to re-run on the same directory
without checking out all sources again.

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

8 years agoMIR Serialization: Serialize the metadata machine operands.
Alex Lorenz [Wed, 22 Jul 2015 17:58:46 +0000 (17:58 +0000)]
MIR Serialization: Serialize the metadata machine operands.

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

8 years ago[ARM] Make the frame lowering code ready for shrink-wrapping.
Quentin Colombet [Wed, 22 Jul 2015 16:34:37 +0000 (16:34 +0000)]
[ARM] Make the frame lowering code ready for shrink-wrapping.

Shrink-wrapping can now be tested on ARM with -enable-shrink-wrap.

Related to <rdar://problem/20821730>

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

8 years agoDelete ELFEntityIterator. NFC.
Rafael Espindola [Wed, 22 Jul 2015 14:09:20 +0000 (14:09 +0000)]
Delete ELFEntityIterator. NFC.

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

8 years ago[X86][AVX512] add reduce/range/scalef/rndScale
Asaf Badouh [Wed, 22 Jul 2015 12:00:43 +0000 (12:00 +0000)]
[X86][AVX512] add reduce/range/scalef/rndScale
include encoding and intrinsics

Differential Revision: http://reviews.llvm.org/D11222

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

8 years ago[GMR] Add a flag to enable GlobalsModRef in the normal compilation
Chandler Carruth [Wed, 22 Jul 2015 11:57:28 +0000 (11:57 +0000)]
[GMR] Add a flag to enable GlobalsModRef in the normal compilation
pipeline.

Even before I started improving its runtime, it was already crazy fast
once the call graph exists, and if we can get it to be conservatively
correct, will still likely catch a lot of interesting and useful cases.
So it may well be useful to enable by default.

But more importantly for me, this should make it easier for me to test
that changes aren't breaking it in fundamental ways by enabling it for
normal builds.

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

8 years ago[dsymutil] Remove extra semicolon. NFC.
Benjamin Kramer [Wed, 22 Jul 2015 11:54:19 +0000 (11:54 +0000)]
[dsymutil] Remove extra semicolon. NFC.

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

8 years ago[GMR] Switch from std::set to SmallPtrSet. NFC.
Chandler Carruth [Wed, 22 Jul 2015 11:47:54 +0000 (11:47 +0000)]
[GMR] Switch from std::set to SmallPtrSet. NFC.

This almost certainly doesn't matter in some deep sense, but std::set is
essentially always going to be slower here. Now the alias query should
be essentially constant time instead of having to chase the set tree
each time.

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

8 years ago[GMR] Only look in the associated allocs map for an underlying value if
Chandler Carruth [Wed, 22 Jul 2015 11:43:24 +0000 (11:43 +0000)]
[GMR] Only look in the associated allocs map for an underlying value if
it wasn't one of the indirect globals (which clearly cannot be an
allocation function call). Also only do a single lookup into this map
instead of two. NFC.

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

8 years ago[GMR] Switch to a DenseMap and clean up the iteration loop. NFC.
Chandler Carruth [Wed, 22 Jul 2015 11:36:09 +0000 (11:36 +0000)]
[GMR] Switch to a DenseMap and clean up the iteration loop. NFC.

Since we have to iterate this map not that infrequently, we should use
a map that is efficient for iteration. It is also almost certainly much
faster for lookups as well. There is more to do in terms of reducing the
wasted overhead of GMR's runtime though. Not sure how much is worthwhile
though.

The loop improvements should hopefully address the code review that
Duncan gave when he saw this code as I moved it around.

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

8 years agoFix a -Winconsistent-missing-override failure in the .intel_syntax
Chandler Carruth [Wed, 22 Jul 2015 11:22:29 +0000 (11:22 +0000)]
Fix a -Winconsistent-missing-override failure in the .intel_syntax
patch.

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

8 years agoFix test from r242886 to use the right triple.
Michael Kuperstein [Wed, 22 Jul 2015 11:19:22 +0000 (11:19 +0000)]
Fix test from r242886 to use the right triple.

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

8 years ago[PM/AA] Try to fix libc++ build bots which require the type used in
Chandler Carruth [Wed, 22 Jul 2015 11:10:41 +0000 (11:10 +0000)]
[PM/AA] Try to fix libc++ build bots which require the type used in
std::list to be complete by hoisting the entire definition into the
class. Ugly, but hopefully works.

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

8 years ago[X86] Add .intel_syntax noprefix directive to intel-syntax x86 asm output
Michael Kuperstein [Wed, 22 Jul 2015 10:49:44 +0000 (10:49 +0000)]
[X86] Add .intel_syntax noprefix directive to intel-syntax x86 asm output

Patch by: michael.zuckerman@intel.com
Differential Revision: http://reviews.llvm.org/D11223

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

8 years agoFix mem2reg to correctly handle allocas only used in a single block
Michael Kuperstein [Wed, 22 Jul 2015 10:29:29 +0000 (10:29 +0000)]
Fix mem2reg to correctly handle allocas only used in a single block

Currently, a load from an alloca that is used in as single block and is not preceded
by a store is replaced by undef. This is not always correct if the single block is
inside a loop.
Fix the logic so that:
1) If there are no stores in the block, replace the load with an undef, as before.
2) If there is a store (regardless of where it is in the block w.r.t the load), bail
out, and let the rest of mem2reg handle this alloca.

Patch by: gil.rapaport@intel.com
Differential Revision: http://reviews.llvm.org/D11355

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

8 years ago[asan] Improve moving of non-instrumented allocas
Kuba Brecka [Wed, 22 Jul 2015 10:25:38 +0000 (10:25 +0000)]
[asan] Improve moving of non-instrumented allocas

In r242510, non-instrumented allocas are now moved into the first basic block.  This patch limits that to only move allocas that are present *after* the first instrumented one (i.e. only move allocas up).  A testcase was updated to show behavior in these two cases.  Without the patch, an alloca could be moved down, and could cause an invalid IR.

Differential Revision: http://reviews.llvm.org/D11339

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

8 years ago[PM/AA] Remove all of the dead AliasAnalysis pointers being threaded
Chandler Carruth [Wed, 22 Jul 2015 09:52:54 +0000 (09:52 +0000)]
[PM/AA] Remove all of the dead AliasAnalysis pointers being threaded
through APIs that are no longer necessary now that the update API has
been removed.

This will make changes to the AA interfaces significantly less
disruptive (I hope). Either way, it seems like a really nice cleanup.

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

8 years ago[PM/AA] Remove the last of the legacy update API from AliasAnalysis as
Chandler Carruth [Wed, 22 Jul 2015 09:49:59 +0000 (09:49 +0000)]
[PM/AA] Remove the last of the legacy update API from AliasAnalysis as
part of simplifying its interface and usage in preparation for porting
to work with the new pass manager.

Note that this will likely expose that we have dead arguments, members,
and maybe even pass requirements for AA. I'll be cleaning those up in
seperate patches. This just zaps the actual update API.

Differential Revision: http://reviews.llvm.org/D11325

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

8 years ago[PM/AA] Switch to an early-exit. NFC. This was split out of another
Chandler Carruth [Wed, 22 Jul 2015 09:44:54 +0000 (09:44 +0000)]
[PM/AA] Switch to an early-exit. NFC. This was split out of another
change because the diff is *useless*. I assure you, I just switched to
early-return in this function.

Cleanup in preparation for my next commit, as requested in code review!

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

8 years ago[PM/AA] Put the 'final' keyword in the correct place. And actually
Chandler Carruth [Wed, 22 Jul 2015 09:34:18 +0000 (09:34 +0000)]
[PM/AA] Put the 'final' keyword in the correct place. And actually
succeed at compiling my change before committing it too!

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

8 years ago[PM/AA] Replace the only use of the AliasAnalysis::deleteValue API (in
Chandler Carruth [Wed, 22 Jul 2015 09:27:58 +0000 (09:27 +0000)]
[PM/AA] Replace the only use of the AliasAnalysis::deleteValue API (in
GlobalsModRef) with CallbackVHs that trigger the same behavior.

This is technically more expensive, but in benchmarking some LTO runs,
it seems unlikely to even be above the noise floor. The only way I was
able to measure the performance of GMR at all was to run nothing else
but this one analysis on a linked clang bitcode file. The call graph
analysis still took 5x more time than GMR, and this change at most made
GMR 2% slower (this is well within the noise, so its hard for me to be
sure that this is an actual change). However, in a real LTO run over the
same bitcode, the GMR run takes so little time that the pass timers
don't measure it.

With this, I can remove the last update API from the AliasAnalysis
interface, but I'll actually remove the interface hook point in
a follow-up commit.

Differential Revision: http://reviews.llvm.org/D11324

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

8 years agoAVX-512: Added intrinsics for VCVT* instructions.
Elena Demikhovsky [Wed, 22 Jul 2015 08:56:00 +0000 (08:56 +0000)]
AVX-512: Added intrinsics for VCVT* instructions.
All SKX forms. All VCVT instructions for float/double/int/long types.

Differential Revision: http://reviews.llvm.org/D11343

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

8 years ago[LoopUnswitch] Code refactoring to separate trivial loop unswitch and non-trivial...
Chen Li [Wed, 22 Jul 2015 05:26:29 +0000 (05:26 +0000)]
[LoopUnswitch] Code refactoring to separate trivial loop unswitch and non-trivial loop unswitch in processCurrentLoop()

Summary: The current code in LoopUnswtich::processCurrentLoop() mixes trivial loop unswitch and non-trivial loop unswitch together. It goes over all basic blocks in the loop and checks if a condition is trivial or non-trivial unswitch condition. However, trivial unswitch condition can only occur in the loop header basic block (where it controls whether or not the loop does something at all). This refactoring separate trivial loop unswitch and non-trivial loop unswitch. Before going over all basic blocks in the loop, it checks if the loop header contains a trivial unswitch condition. If so, unswitch it. Otherwise, go over all blocks like before but don't check trivial condition any more since they are not possible to be in the other blocks. This code has no functionality change.

Reviewers: meheff, reames, broune

Subscribers: llvm-commits

Differential Revision: http://reviews.llvm.org/D11276

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

8 years ago[BranchFolding] do not iterate the aliases of virtual registers
Jingyue Wu [Wed, 22 Jul 2015 04:16:52 +0000 (04:16 +0000)]
[BranchFolding] do not iterate the aliases of virtual registers

Summary:
MCRegAliasIterator only works for physical registers. So, do not run it
on virtual registers.

With this issue fixed, we can resurrect the BranchFolding pass in NVPTX
backend.

Reviewers: jholewinski, bkramer

Subscribers: henryhu, meheff, llvm-commits, jholewinski

Differential Revision: http://reviews.llvm.org/D11174

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

8 years ago[SROA] Fix a nasty pile of bugs to do with big-endian, different alloca
Chandler Carruth [Wed, 22 Jul 2015 03:32:42 +0000 (03:32 +0000)]
[SROA] Fix a nasty pile of bugs to do with big-endian, different alloca
types and loads, loads or stores widened past the size of an alloca,
etc.

This started off with a bug report about big-endian behavior with
bitfields and loads and stores to a { i32, i24 } struct. An initial
attempt to fix this was sent for review in D10357, but that didn't
really get to the root of the problem.

The core issue was that canConvertValue and convertValue in SROA were
handling different bitwidth integers by doing a zext of the integer. It
wouldn't do a trunc though, only a zext! This would in turn lead SROA to
form an i24 load from an i24 alloca, zext it to i32, and then use it.
This would at least produce the wrong value for big-endian systems.

One of my many false starts here was to correct the computation for
big-endian systems by shifting. But this doesn't actually work because
the original code has a 64-bit store to the entire 8 bytes, and a 32-bit
load of the last 4 bytes, and because the alloc size is 8 bytes, we
can't lose that last (least significant if bigendian) byte! The real
problem here is that we're forming an i24 load in SROA which is actually
not sufficiently wide to load all of the necessary bits here. The source
has an i32 load, and SROA needs to form that as well.

The straightforward way to do this is to disable the zext logic in
canConvertValue and convertValue, forcing us to actually load all
32-bits. This seems like a really good change, but it in turn breaks
several other parts of SROA.

First in the chain of knock-on failures, we had places where we were
doing integer-widening promotion even though some of the integer loads
or stores extended *past the end* of the alloca's memory! There was even
a comment about preventing this, but it only prevented the case where
the type had a different bit size from its store size. So I added checks
to handle the cases where we actually have a widened load or store and
to avoid trying to special integer widening promotion in those cases.

Second, we actually rely on the ability to promote in the face of loads
past the end of an alloca! This is important so that we can (for
example) speculate loads around PHI nodes to do more promotion. The bits
loaded are garbage, but as long as they aren't used and the alignment is
suitable high (which it wasn't in the test case!) this is "fine". And we
can't stop promoting here, lots of things stop working well if we do. So
we need to add specific logic to handle the extension (and truncation)
case, but *only* where that extension or truncation are over bytes that
*are outside the alloca's allocated storage* and thus totally bogus to
load or store.

And of course, once we add back this correct handling of extension or
truncation, we need to correctly handle bigendian systems to avoid
re-introducing the exact bug that started us off on this chain of misery
in the first place, but this time even more subtle as it only happens
along speculated loads atop a PHI node.

I've ported an existing test for PHI speculation to the big-endian test
file and checked that we get that part correct, and I've added several
more interesting big-endian test cases that should help check that we're
getting this correct.

Fun times.

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

8 years agoSetVector: add reverse_iterator support.
Richard Smith [Wed, 22 Jul 2015 01:30:58 +0000 (01:30 +0000)]
SetVector: add reverse_iterator support.

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

8 years ago[Fuzzer] Rely on $PATH expansion instead of hardcoding paths in tests. NFC.
Alexey Samsonov [Tue, 21 Jul 2015 22:51:55 +0000 (22:51 +0000)]
[Fuzzer] Rely on $PATH expansion instead of hardcoding paths in tests. NFC.

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

8 years ago[Fuzzer] Clearly separate regular and DFSan tests. NFC.
Alexey Samsonov [Tue, 21 Jul 2015 22:51:49 +0000 (22:51 +0000)]
[Fuzzer] Clearly separate regular and DFSan tests. NFC.

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

8 years ago[dsymutil] Implement ODR uniquing for C++ code.
Frederic Riss [Tue, 21 Jul 2015 22:41:43 +0000 (22:41 +0000)]
[dsymutil] Implement ODR uniquing for C++ code.

This optimization allows the DWARF linker to reuse definition of
types it has emitted in previous CUs rather than reemitting them
in each CU that references them. The size and link time gains are
huge. For example when linking the DWARF for a debug build of
clang, this generates a ~150M dwarf file instead of a ~700M one
(the numbers date back a bit and must not be totally accurate
these days).

As with all the other parts of the llvm-dsymutil codebase, the
goal is to keep bit-for-bit compatibility with dsymutil-classic.
The code is littered with a lot of FIXMEs that should be
addressed once we can get rid of the compatibilty goal.

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

8 years agoMIR Serialization: Start serializing the CFI operands with .cfi_def_cfa_offset.
Alex Lorenz [Tue, 21 Jul 2015 22:28:27 +0000 (22:28 +0000)]
MIR Serialization: Start serializing the CFI operands with .cfi_def_cfa_offset.

This commit begins serialization of the CFI index machine operands by
serializing one kind of CFI instruction - the .cfi_def_cfa_offset instruction.

Reviewers: Duncan P. N. Exon Smith

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

8 years agoFix a performance problem in memcpyopt by removing a linear scan over ranges when...
Nick Lewycky [Tue, 21 Jul 2015 21:56:26 +0000 (21:56 +0000)]
Fix a performance problem in memcpyopt by removing a linear scan over ranges when inserting a new range. No functionality change intended. Patch by Anthony Pesch!

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

8 years ago[MDA] change BlockScanLimit into a command line option.
Jingyue Wu [Tue, 21 Jul 2015 21:50:39 +0000 (21:50 +0000)]
[MDA] change BlockScanLimit into a command line option.

Summary:
In the benchmark (https://github.com/vetter/shoc) we are researching,
the duplicated load is not eliminated because MemoryDependenceAnalysis
hit the BlockScanLimit. This patch change it into a command line option
instead of a hardcoded value.

Patched by Xuetian Weng.

Test Plan: test/Analysis/MemoryDependenceAnalysis/memdep-block-scan-limit.ll

Reviewers: jingyue, reames

Subscribers: reames, llvm-commits

Differential Revision: http://reviews.llvm.org/D11366

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

8 years ago[AsmPrinter] Check for valid constants in handleIndirectSymViaGOTPCRel
Bruno Cardoso Lopes [Tue, 21 Jul 2015 21:45:42 +0000 (21:45 +0000)]
[AsmPrinter] Check for valid constants in handleIndirectSymViaGOTPCRel

Check whether BaseCst is valid before extracting a GlobalValue.
This fixes PR24163.

Patch by David Majnemer.

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

8 years ago[Object][ELF] Handle files with no section header string table.
Michael J. Spencer [Tue, 21 Jul 2015 21:40:33 +0000 (21:40 +0000)]
[Object][ELF] Handle files with no section header string table.

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

8 years ago[PPC64LE] More vector swap optimization TLC
Bill Schmidt [Tue, 21 Jul 2015 21:40:17 +0000 (21:40 +0000)]
[PPC64LE] More vector swap optimization TLC

This makes one substantive change and a few stylistic changes to the
VSX swap optimization pass.

The substantive change is to permit LXSDX and LXSSPX instructions to
participate in swap optimization computations.  The previous change to
insert a swap following a SUBREG_TO_REG widening operation makes this
almost trivial.

I experimented with also permitting STXSDX and STXSSPX instructions.
This can be done using similar techniques:  we could insert a swap
prior to a narrowing COPY operation, and then permit these stores to
participate.  I prototyped this, but discovered that the pattern of a
narrowing COPY followed by an STXSDX does not occur in any of our
test-suite code.  So instead, I added commentary indicating that this
could be done.

Other TLC:
 - I changed SH_COPYSCALAR to SH_COPYWIDEN to more clearly indicate
 the direction of the copy.
 - I factored the insertion of swap instructions into a separate
 function.

Finally, I added a new test case to check that the scalar-to-vector
loads are working properly with swap optimization.

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