platform/upstream/llvm.git
8 years agoRevert r261070, it caused PR26652 / PR26653.
Nico Weber [Wed, 17 Feb 2016 18:47:29 +0000 (18:47 +0000)]
Revert r261070, it caused PR26652 / PR26653.

llvm-svn: 261127

8 years ago[WinEH] Optimize WinEH state stores
David Majnemer [Wed, 17 Feb 2016 18:37:11 +0000 (18:37 +0000)]
[WinEH] Optimize WinEH state stores

32-bit x86 Windows targets use a linked-list of nodes allocated on the
stack, referenced to via thread-local storage.  The personality routine
interprets one of the fields in the node as a 'state number' which
indicates where the personality routine should transfer control.

State transitions are possible only before call-sites which may throw
exceptions.  Our previous scheme had us update the state number before
all call-sites which may throw.

Instead, we can try to minimize the number of times we need to store by
reasoning about the nearest store which dominates the current call-site.
If the last store agrees with the current call-site, then we know that
the state-update is redundant and can be elided.

This is largely straightforward: an RPO walk of the blocks allows us to
correctly forward propagate the information when the function is a DAG.
Currently, loops are not handled optimally and may trigger superfluous
state stores.

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

llvm-svn: 261122

8 years ago[tsan] Fix signal number definitions for FreeBSD
Ed Maste [Wed, 17 Feb 2016 18:25:27 +0000 (18:25 +0000)]
[tsan] Fix signal number definitions for FreeBSD

The change in r253983 for OS X also applies to FreeBSD.

llvm-svn: 261121

8 years ago[tsan] Fix build warnings on FreeBSD
Ed Maste [Wed, 17 Feb 2016 18:22:50 +0000 (18:22 +0000)]
[tsan] Fix build warnings on FreeBSD

The change in r252165 for OS X applies to FreeBSD as well.

llvm-svn: 261120

8 years agoAdd a profile summary class specific to instrumentation profiles.
Easwaran Raman [Wed, 17 Feb 2016 18:18:47 +0000 (18:18 +0000)]
Add a profile summary class specific to instrumentation profiles.

Modify ProfileSummary class to make it not instrumented profile specific.
Add a new InstrumentedProfileSummary class that inherits from ProfileSummary.

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

llvm-svn: 261119

8 years ago[Hexagon] Loop instructions don't need special processing. Extension and fitting...
Colin LeMahieu [Wed, 17 Feb 2016 18:14:05 +0000 (18:14 +0000)]
[Hexagon] Loop instructions don't need special processing.  Extension and fitting is performed by generic code and the comment is incorrect, loops don't have a separate extended opcode.

llvm-svn: 261118

8 years ago[NVPTX] Annotate convergent intrinsics as convergent.
Justin Lebar [Wed, 17 Feb 2016 17:46:54 +0000 (17:46 +0000)]
[NVPTX] Annotate convergent intrinsics as convergent.

Summary:
Previously the machine instructions for bar.sync &co. were not marked as
convergent.  This resulted in some MI passes (such as TailDuplication,
fixed in an upcoming patch) doing unsafe things to these instructions.

Reviewers: jingyue

Subscribers: llvm-commits, tra, jholewinski, hfinkel

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

llvm-svn: 261115

8 years ago[NVPTX] Test that MachineSink won't sink across llvm.cuda.syncthreads.
Justin Lebar [Wed, 17 Feb 2016 17:46:52 +0000 (17:46 +0000)]
[NVPTX] Test that MachineSink won't sink across llvm.cuda.syncthreads.

Summary:
The syncthreads MI is modeled as mayread/maywrite -- convergence doesn't
even come into play here.  Nonetheless this property is highly implicit
in the tablegen files, so a test seems appropriate.

Reviewers: jingyue

Subscribers: llvm-commits, jholewinski

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

llvm-svn: 261114

8 years ago[NVPTX] Annotate call machine instructions as calls.
Justin Lebar [Wed, 17 Feb 2016 17:46:50 +0000 (17:46 +0000)]
[NVPTX] Annotate call machine instructions as calls.

Summary:
Otherwise we'll try to do unsafe optimizations on these MIs, such as
sinking loads below calls.

(I suspect that this is not the only bug in the NVPTX instruction
tablegen files; I need to comb through them.)

Reviewers: jholewinski, tra

Subscribers: jingyue, jhen, llvm-commits

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

llvm-svn: 261113

8 years ago[IR] Add {is,set,setNot}Convergent() functions to CallSite, CallInstr, and InvokeInstr.
Justin Lebar [Wed, 17 Feb 2016 17:46:47 +0000 (17:46 +0000)]
[IR] Add {is,set,setNot}Convergent() functions to CallSite, CallInstr, and InvokeInstr.

Summary:
(CallSite already has isConvergent() and setConvergent().)

No functional changes.

Reviewers: reames

Subscribers: llvm-commits, jingyue, arsenm

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

llvm-svn: 261112

8 years agoUpdate langref to indicate that calls may be convergent.
Justin Lebar [Wed, 17 Feb 2016 17:46:41 +0000 (17:46 +0000)]
Update langref to indicate that calls may be convergent.

Summary:
As previously written, only functions could be convergent.  But calls
need to have a notion of convergence as well.

To see why this is important, consider an indirect call.  We may or may
not want to disable optimizations around it and behave as though we're
calling a convergent function -- it depends on the semantics of the
language we're compiling.  Thus the need for this attr on the call.

Reviewers: jingyue, joker.eph

Subscribers: llvm-commits, tra, jhen, arsenm, chandlerc, hfinkel, resistor

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

llvm-svn: 261111

8 years agoFix typo in comment.
Justin Lebar [Wed, 17 Feb 2016 17:46:39 +0000 (17:46 +0000)]
Fix typo in comment.

llvm-svn: 261110

8 years agoCorrect more typos in conditional expressions
David Majnemer [Wed, 17 Feb 2016 17:19:00 +0000 (17:19 +0000)]
Correct more typos in conditional expressions

We didn't correctly handle some edge cases, causing us to bail out
before correcting all the typos.

llvm-svn: 261109

8 years ago[CMake] [NFC] Move macro definitions out of config-ix.cmake
Chris Bieneman [Wed, 17 Feb 2016 16:57:38 +0000 (16:57 +0000)]
[CMake] [NFC] Move macro definitions out of config-ix.cmake

This change should have no functional impact, it just moves some macro definitions out of config-ix.cmake into CompilerRTUtils.cmake.

This step will allow these macros to be re-used by the separated builtin build.

llvm-svn: 261108

8 years agoRepresent the dynamic table itself with a DynRegionInfo.
Rafael Espindola [Wed, 17 Feb 2016 16:48:00 +0000 (16:48 +0000)]
Represent the dynamic table itself with a DynRegionInfo.

The dynamic table is also an array of a fixed structure, so it can be
represented with a DynReginoInfo.

No major functionality change. The extra error checking is covered by
existing tests with a broken dynamic program header.

Idea extracted from r260488. I did the extra cleanups.

llvm-svn: 261107

8 years ago[CMake] Push the dependency on AddLLVM into the test and unites layers
Chris Bieneman [Wed, 17 Feb 2016 16:38:54 +0000 (16:38 +0000)]
[CMake] Push the dependency on AddLLVM into the test and unites layers

Compiler-rt only relies on LLVM for lit support. Pushing this dependency down into the test and unitest layers will allow builtin libraries to be built without LLVM.

llvm-svn: 261105

8 years agoFix some erroneous lit test failures due to unlucky name of working directory.
Mitch Bodart [Wed, 17 Feb 2016 16:35:18 +0000 (16:35 +0000)]
Fix some erroneous lit test failures due to unlucky name of working directory.

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

llvm-svn: 261104

8 years agoAdd a unwrapOrError utility and use it to simplify ELFDumper.cpp.
Rafael Espindola [Wed, 17 Feb 2016 16:21:49 +0000 (16:21 +0000)]
Add a unwrapOrError utility and use it to simplify ELFDumper.cpp.

Utility extracted from r260488.

llvm-svn: 261103

8 years ago[clang-tidy] Match the type against the get() method we are calling,
Samuel Benzaquen [Wed, 17 Feb 2016 16:13:14 +0000 (16:13 +0000)]
[clang-tidy] Match the type against the get() method we are calling,
instead of a get() method we find in the class.

The duck typed smart pointer class could have overloaded get() methods
and we should only skip the one that matches.

llvm-svn: 261102

8 years ago[X86][SSE] Update pshufb mask tests.
Simon Pilgrim [Wed, 17 Feb 2016 15:52:39 +0000 (15:52 +0000)]
[X86][SSE] Update pshufb mask tests.

We are getting better at combining constant pshufb masks - use a real input instead of undef.

Add test for decoding multi-use bitcasted masks as well (actual support will come soon).

llvm-svn: 261101

8 years ago[Refactor] Move isl_ctx into Scop.
Hongbin Zheng [Wed, 17 Feb 2016 15:49:21 +0000 (15:49 +0000)]
[Refactor] Move isl_ctx into Scop.

  After we moved isl_ctx into Scop, we need to free the isl_ctx after
  freeing all isl objects, which requires the ScopInfo pass to be freed
  at last. But this is not guaranteed by the PassManager, and we need
  extra code to free the isl_ctx at the right time.

  We introduced a shared pointer to manage the isl_ctx, and distribute
  it to all analyses that create isl objects. As such, whenever we free
  an analyses with the shared_ptr (and also free the isl objects which
  are created by the analyses), we decrease the (shared) reference
  counter of the shared_ptr by 1. Whenever the reference counter reach
  0 in the releaseMemory function of an analysis, that analysis will
  be the last one that hold any isl objects, and we can safely free the
  isl_ctx with that analysis.

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

llvm-svn: 261100

8 years agoChange how readobj stores info about dynamic symbols.
Rafael Espindola [Wed, 17 Feb 2016 15:38:21 +0000 (15:38 +0000)]
Change how readobj stores info about dynamic symbols.

We used to keep both a section and a pointer to the first symbol.

The oddity of keeping a section for dynamic symbols is because there is
a DT_SYMTAB but no DT_SYMTABZ, so to print the table we have to find the
size via a section table.

The reason for still keeping a pointer to the first symbol is because we
want to be able to print relocation tables even if the section table is
missing (it is mandatory only for files used in linking).

With this patch we keep just a DynRegionInfo. This then requires
changing a few places that were asking for a Elf_Shdr but actually just
needed the first symbol.

The test change is to delete the program header pointer.
Now that we use the information of both DT_SYMTAB and .dynsym, we don't
depend on the sh_entsize of .dynsym if we see DT_SYMTAB.

Note: It is questionable if it is worth it putting the effort to report
broken sh_entsize given that in files with no section table we have to
assume it is sizeof(Elf_Sym), but that is for another change.

Extracted from r260488.

llvm-svn: 261099

8 years ago[OPENMP] Fix tests incompatibility with ARM buildbots.
Alexey Bataev [Wed, 17 Feb 2016 15:36:39 +0000 (15:36 +0000)]
[OPENMP] Fix tests incompatibility with ARM buildbots.

llvm-svn: 261098

8 years ago[Hexagon] Fold object construction into map::insert
Krzysztof Parzyszek [Wed, 17 Feb 2016 15:02:07 +0000 (15:02 +0000)]
[Hexagon] Fold object construction into map::insert

llvm-svn: 261096

8 years ago[X86][SSE] Update pshufb mask test to use a real input instead of undef
Simon Pilgrim [Wed, 17 Feb 2016 14:56:58 +0000 (14:56 +0000)]
[X86][SSE] Update pshufb mask test to use a real input instead of undef

We are getting better at combining constant pshufb masks - this test would've failed once we decode bitcasted masks as well.

llvm-svn: 261095

8 years agoTypo.
Chad Rosier [Wed, 17 Feb 2016 14:45:36 +0000 (14:45 +0000)]
Typo.

llvm-svn: 261093

8 years agoAVX512: Fix LowerMSCATTER() return value.
Igor Breger [Wed, 17 Feb 2016 14:04:33 +0000 (14:04 +0000)]
AVX512: Fix LowerMSCATTER() return value.
Bug description:
  The bug was discovered when test was compiled with -O0.
  In case scatter result is DAG root , VectorLegalizer failed (assert) due to LowerMSCATTER() return kmask as result.
Change LowerMSCATTER() to return chain as original node do.

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

llvm-svn: 261090

8 years ago[OPENMP 4.5] Codegen support for data members in 'firstprivate' clause.
Alexey Bataev [Wed, 17 Feb 2016 13:19:37 +0000 (13:19 +0000)]
[OPENMP 4.5] Codegen support for data members in 'firstprivate' clause.

Added codegen for captured data members in non-static member functions.

llvm-svn: 261089

8 years ago[libcxx] Fix definition of regex_traits::__regex_word on big-endian glibc systems
Daniel Sanders [Wed, 17 Feb 2016 13:16:31 +0000 (13:16 +0000)]
[libcxx] Fix definition of regex_traits::__regex_word on big-endian glibc systems

Summary:
On glibc, the bits used for the various character classes is endian dependant
(see _ISbit() in ctypes.h) but __regex_word does not account for this and uses
a spare bit that isn't spare on big-endian. On big-endian, it overlaps with the
bit for graphic characters which causes '-', '@', etc. to be considered a word
character.

Fixed this by defining the value using _ISbit(15) on MIPS glibc systems. We've
restricted this to MIPS for now to avoid the risk of introducing failures in
other targets.

Fixes PR26476.

Reviewers: hans, mclow.lists

Subscribers: dsanders, cfe-commits

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

llvm-svn: 261088

8 years ago[ELF][MIPS] Update test case expectations due changes in MIPS/MC
Simon Atanasyan [Wed, 17 Feb 2016 12:49:43 +0000 (12:49 +0000)]
[ELF][MIPS] Update test case expectations due changes in MIPS/MC

llvm-svn: 261085

8 years ago[OpenCL] Added half type literal with suffix h.
Anastasia Stulova [Wed, 17 Feb 2016 11:34:37 +0000 (11:34 +0000)]
[OpenCL] Added half type literal with suffix h.

OpenCL Extension v1.2 s9.5 allows half precision floating point
type literals with suffices h or H when cl_khr_fp16 is enabled.

Example:  half x = 1.0h;

Patch by Liu Yaxun (Sam)!

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

llvm-svn: 261084

8 years ago[mips] Removed the SHF_ALLOC flag and the SHT_REL flag from the .pdr section.
Scott Egerton [Wed, 17 Feb 2016 11:15:16 +0000 (11:15 +0000)]
[mips] Removed the SHF_ALLOC flag and the SHT_REL flag from the .pdr section.

This section is used for debug information and has no need to be
in memory at runtime. This patch also fixes an error when compiling
the Linux kernel. The error is that there are relocations within the
.pdr section in a VDSO. SHT_REL was removed as it is a section type
and not a section flag, therefore it does not make sense for it to
be there. With this patch, LLVM now emits the same flags as
the GNU assembler.

llvm-svn: 261083

8 years ago[X86][AVX] Support bit-blend integer shuffles for 256-bit integer vectors
Simon Pilgrim [Wed, 17 Feb 2016 10:50:06 +0000 (10:50 +0000)]
[X86][AVX] Support bit-blend integer shuffles for 256-bit integer vectors

AVX1 doesn't support the shuffling of 256-bit integer vectors. For 32/64-bit elements we get around this by shuffling as float/double but for 8/16-bit elements (assuming they can't widen) we currently just split, shuffle as 128-bit vectors and concatenate the results back.

This patch adds the ability to lower using the bit-blend patterns before defaulting to the splitting behaviour.

Part 2 of 2

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

llvm-svn: 261082

8 years ago[X86][AVX] Support bit-mask integer shuffles for 256-bit integer vectors
Simon Pilgrim [Wed, 17 Feb 2016 10:37:49 +0000 (10:37 +0000)]
[X86][AVX] Support bit-mask integer shuffles for 256-bit integer vectors

AVX1 doesn't support the shuffling of 256-bit integer vectors. For 32/64-bit elements we get around this by shuffling as float/double but for 8/16-bit elements (assuming they can't widen) we currently just split, shuffle as 128-bit vectors and concatenate the results back.

This patch adds the ability to lower using the bit-mask patterns before defaulting to the splitting behaviour. In some cases this ends up matching what AVX2 would do anyhow or what AVX1 does on the split vectors.

Part 1 of 2

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

llvm-svn: 261081

8 years ago[OPENMP] Fix handling loop-based directives with arrays.
Alexey Bataev [Wed, 17 Feb 2016 10:29:05 +0000 (10:29 +0000)]
[OPENMP] Fix handling loop-based directives with arrays.
Patch fixes possible problems with correct handling arrays as
expressions in initialization, conditions etc in loop-based constructs.

llvm-svn: 261080

8 years ago[X86][SSE] Tidyup BUILD_VECTOR operand collection. NFCI.
Simon Pilgrim [Wed, 17 Feb 2016 10:12:30 +0000 (10:12 +0000)]
[X86][SSE] Tidyup BUILD_VECTOR operand collection. NFCI.

Avoid reuse of operand variables, keep them local to a particular lowering - the operand collection is unique to each case anyhow.

Renamed from V to Ops to more closely match their purpose.

llvm-svn: 261078

8 years ago[Hexagon] cast<> a reference instead of referencing + dereferencing.
Benjamin Kramer [Wed, 17 Feb 2016 09:28:45 +0000 (09:28 +0000)]
[Hexagon] cast<> a reference instead of referencing + dereferencing.

llvm-svn: 261077

8 years ago[compiler-rt][msan] Ensure initialisation before calling __msan_unpoison
Jonas Hahnfeld [Wed, 17 Feb 2016 07:12:18 +0000 (07:12 +0000)]
[compiler-rt][msan] Ensure initialisation before calling __msan_unpoison

__msan_unpoison uses intercepted memset which currently leads to a SEGV
when linking with libc++ under CentOS 7.

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

llvm-svn: 261073

8 years agollvm-dwp: Support for type units when merging DWPs into larger DWPs
David Blaikie [Wed, 17 Feb 2016 07:00:24 +0000 (07:00 +0000)]
llvm-dwp: Support for type units when merging DWPs into larger DWPs

llvm-svn: 261072

8 years agoFix the hash function.
David Blaikie [Wed, 17 Feb 2016 07:00:22 +0000 (07:00 +0000)]
Fix the hash function.

llvm-svn: 261071

8 years agoDetecte vector reduction operations just before instruction selection.
Cong Hou [Wed, 17 Feb 2016 06:37:04 +0000 (06:37 +0000)]
Detecte vector reduction operations just before instruction selection.

This patch detects vector reductions before instruction selection. Vector
reductions are vectorized reduction operations, and for such operations we have
freedom to reorganize the elements of the result as long as the reduction of them
stay unchanged. This will enable some reduction pattern recognition during
instruction combine such as SAD/dot-product on X86. A flag is added to
SDNodeFlags to mark those vector reduction nodes to be checked during instruction
combine.

To detect those vector reductions, we search def-use chains starting from the
given instruction, and check if all uses fall into two categories:

1. Reduction with another vector.
2. Reduction on all elements.

in which 2 is detected by recognizing the pattern that the loop vectorizer
generates to reduce all elements in the vector outside of the loop, which
includes several ShuffleVector and one ExtractElement instructions.

Differential revision: http://reviews.llvm.org/D15250

llvm-svn: 261070

8 years agoMake getOffset a member function of DynamicReloc<ELFT>.
Rui Ueyama [Wed, 17 Feb 2016 06:08:42 +0000 (06:08 +0000)]
Make getOffset a member function of DynamicReloc<ELFT>.

Logically it belongs to DynamicReloc, and it is more readable to
be a member of the class.

llvm-svn: 261069

8 years agoUse shorter names for the .gnu.hash class.
Rui Ueyama [Wed, 17 Feb 2016 05:40:03 +0000 (05:40 +0000)]
Use shorter names for the .gnu.hash class.

llvm-svn: 261067

8 years agoUse stable_partition instead of erasing all elements and fill it again.
Rui Ueyama [Wed, 17 Feb 2016 05:40:01 +0000 (05:40 +0000)]
Use stable_partition instead of erasing all elements and fill it again.

llvm-svn: 261066

8 years agoUse an accurate type instead of unsigned.
Rui Ueyama [Wed, 17 Feb 2016 05:06:40 +0000 (05:06 +0000)]
Use an accurate type instead of unsigned.

These values are offsets in the string table (which must fit in
host computer's memory space), so size_t is better than unsigned.

llvm-svn: 261065

8 years agoSplit SymbolTableSection::writeGlobalSymbols.
Rui Ueyama [Wed, 17 Feb 2016 04:56:44 +0000 (04:56 +0000)]
Split SymbolTableSection::writeGlobalSymbols.

Previously, we added garbage-collected symbols to the symbol table
and filter them out when we were writing symbols to the file. In
this patch, garbage-collected symbols are filtered out from beginning.

llvm-svn: 261064

8 years agoRevert r260979 "[X86] Enable the LEA optimization pass by default."
Hans Wennborg [Wed, 17 Feb 2016 02:49:59 +0000 (02:49 +0000)]
Revert r260979 "[X86] Enable the LEA optimization pass by default."

Asserts are still firing in Chromium builds. PR26575.

llvm-svn: 261058

8 years agorevert r261038: arm/aarch64 bot failure
Xinliang David Li [Wed, 17 Feb 2016 02:39:34 +0000 (02:39 +0000)]
revert r261038: arm/aarch64 bot failure

llvm-svn: 261057

8 years agoRevert "Query the StringMap only once when creating MDString (NFC)"
Mehdi Amini [Wed, 17 Feb 2016 02:18:58 +0000 (02:18 +0000)]
Revert "Query the StringMap only once when creating MDString (NFC)"

This reverts commit r261030 and r261036.
(The revision was marked "approved" on phabricator, but some concerns
were raised on the mailing list. Thanks D. Blaikie for notifying me.)

From: Mehdi Amini <mehdi.amini@apple.com>
llvm-svn: 261055

8 years ago[cmake] Revert r260742 (and r260744) to improve order file support.
Chandler Carruth [Wed, 17 Feb 2016 02:13:35 +0000 (02:13 +0000)]
[cmake] Revert r260742 (and r260744) to improve order file support.

This appears to be passing '-Wl,-order_file' to Linux link commands,
which then causes the linker to silently, behind the scenes, write the
output to 'rder_file' instead of somewhere else. Will work with Chris to
figure out the proper support for this, but so far there are numerous
people who can't get Clang to update when they build because of this.

llvm-svn: 261054

8 years ago[AttrDocs.td] Fix up some reST syntax.
Sean Silva [Wed, 17 Feb 2016 02:08:19 +0000 (02:08 +0000)]
[AttrDocs.td] Fix up some reST syntax.

llvm-svn: 261053

8 years ago[AliasSetTracker] Teach AliasSetTracker about MemSetInst
Haicheng Wu [Wed, 17 Feb 2016 02:01:50 +0000 (02:01 +0000)]
[AliasSetTracker] Teach AliasSetTracker about MemSetInst

This change is to fix the problem discussed in
http://lists.llvm.org/pipermail/llvm-dev/2016-February/095446.html.

llvm-svn: 261052

8 years agoWebAssembly: update expected failures
JF Bastien [Wed, 17 Feb 2016 01:59:23 +0000 (01:59 +0000)]
WebAssembly: update expected failures

r261050 seems to inadvertently fix the assertion failure.

llvm-svn: 261051

8 years ago[WebAssembly] Call memcpy for large byval copies.
Dan Gohman [Wed, 17 Feb 2016 01:43:37 +0000 (01:43 +0000)]
[WebAssembly] Call memcpy for large byval copies.

This fixes very slow compilation on
test/CodeGen/Generic/2010-11-04-BigByval.ll . Note that MaxStoresPerMemcpy
and friends are not yet carefully tuned so the cutoff point is currently
somewhat arbitrary. However, it's important that there be a cutoff point
so that we don't emit unbounded quantities of loads and stores.

llvm-svn: 261050

8 years ago[msan] Extend prlimit test.
Evgeniy Stepanov [Wed, 17 Feb 2016 01:34:56 +0000 (01:34 +0000)]
[msan] Extend prlimit test.

llvm-svn: 261049

8 years ago[msan] Intercept prlimit.
Evgeniy Stepanov [Wed, 17 Feb 2016 01:26:57 +0000 (01:26 +0000)]
[msan] Intercept prlimit.

llvm-svn: 261048

8 years agoTest simplification
Xinliang David Li [Wed, 17 Feb 2016 00:59:01 +0000 (00:59 +0000)]
Test simplification

llvm-svn: 261047

8 years agoRestrengthen tests relaxed in r259955
Xinliang David Li [Wed, 17 Feb 2016 00:58:13 +0000 (00:58 +0000)]
Restrengthen tests relaxed in r259955

llvm-svn: 261046

8 years agoTeach clang to use the ThinLTO pipeline
Mehdi Amini [Wed, 17 Feb 2016 00:42:20 +0000 (00:42 +0000)]
Teach clang to use the ThinLTO pipeline

Summary: Use the new pipeline implemented in D17115

Reviewers: tejohnson

Subscribers: joker.eph, cfe-commits

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

From: Mehdi Amini <mehdi.amini@apple.com>
llvm-svn: 261045

8 years agoWebAssembly: update expected test failures
JF Bastien [Wed, 17 Feb 2016 00:34:15 +0000 (00:34 +0000)]
WebAssembly: update expected test failures

r261032 adds frame address support.

llvm-svn: 261044

8 years agoAdd .gitignore for build directories
Matt Arsenault [Wed, 17 Feb 2016 00:27:31 +0000 (00:27 +0000)]
Add .gitignore for build directories

llvm-svn: 261043

8 years agoamdgcn: Use new workitem intrinsics
Matt Arsenault [Wed, 17 Feb 2016 00:27:27 +0000 (00:27 +0000)]
amdgcn: Use new workitem intrinsics

llvm-svn: 261042

8 years ago[LCG] Construct an actual call graph with call-edge SCCs nested inside
Chandler Carruth [Wed, 17 Feb 2016 00:18:16 +0000 (00:18 +0000)]
[LCG] Construct an actual call graph with call-edge SCCs nested inside
reference-edge SCCs.

This essentially builds a more normal call graph as a subgraph of the
"reference graph" that was the old model. This allows both to exist and
the different use cases to use the aspect which addresses their needs.
Specifically, the pass manager and other *ordering* constrained logic
can use the reference graph to achieve conservative order of visit,
while analyses reasoning about attributes and other properties derived
from reachability can reason about the direct call graph.

Note that this isn't necessarily complete: it doesn't model edges to
declarations or indirect calls. Those can be found by scanning the
instructions of the function if desirable, and in fact every user
currently does this in order to handle things like calls to instrinsics.
If useful, we could consider caching this information in the call graph
to save the instruction scans, but currently that doesn't seem to be
important.

An important realization for why the representation chosen here works is
that the call graph is a formal subset of the reference graph and thus
both can live within the same data structure. All SCCs of the call graph
are necessarily contained within an SCC of the reference graph, etc.

The design is to build 'RefSCC's to model SCCs of the reference graph,
and then within them more literal SCCs for the call graph.

The formation of actual call edge SCCs is not done lazily, unlike
reference edge 'RefSCC's. Instead, once a reference SCC is formed, it
directly builds the call SCCs within it and stores them in a post-order
sequence. This is used to provide a consistent platform for mutation and
update of the graph. The post-order also allows for very efficient
updates in common cases by bounding the number of nodes (and thus edges)
considered.

There is considerable common code that I'm still looking for the best
way to factor out between the various DFS implementations here. So far,
my attempts have made the code harder to read and understand despite
reducing the duplication, which seems a poor tradeoff. I've not given up
on figuring out the right way to do this, but I wanted to wait until
I at least had the system working and tested to continue attempting to
factor it differently.

This also requires introducing several new algorithms in order to handle
all of the incremental update scenarios for the more complex structure
involving two edge colorings. I've tried to comment the algorithms
sufficiently to make it clear how this is expected to work, but they may
still need more extensive documentation.

I know that there are some changes which are not strictly necessarily
coupled here. The process of developing this started out with a very
focused set of changes for the new structure of the graph and
algorithms, but subsequent changes to bring the APIs and code into
consistent and understandable patterns also ended up touching on other
aspects. There was no good way to separate these out without causing
*massive* merge conflicts. Ultimately, to a large degree this is
a rewrite of most of the core algorithms in the LCG class and so I don't
think it really matters much.

Many thanks to the careful review by Sanjoy Das!

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

llvm-svn: 261040

8 years ago[X86] Fix a shrink-wrapping miscompile around __chkstk
Reid Kleckner [Wed, 17 Feb 2016 00:17:33 +0000 (00:17 +0000)]
[X86] Fix a shrink-wrapping miscompile around __chkstk

__chkstk clobbers EAX. If EAX is live across the prologue, then we have
to take extra steps to save it. We already had code to do this if EAX
was a register parameter. This change adapts it to work when shrink
wrapping is used.

llvm-svn: 261039

8 years agoNew test case: make sure alloc bit is not set for covmap section on Linux
Xinliang David Li [Wed, 17 Feb 2016 00:14:52 +0000 (00:14 +0000)]
New test case: make sure alloc bit is not set for covmap section on Linux

llvm-svn: 261038

8 years ago[WebAssembly] Use SDValue::getConstantOperandVal. NFC.
Dan Gohman [Wed, 17 Feb 2016 00:14:03 +0000 (00:14 +0000)]
[WebAssembly] Use SDValue::getConstantOperandVal. NFC.

llvm-svn: 261037

8 years agoFix MSVC bot: apparently visual studio does not like explicitly defaulted move ctor
Mehdi Amini [Wed, 17 Feb 2016 00:11:59 +0000 (00:11 +0000)]
Fix MSVC bot: apparently visual studio does not like explicitly defaulted move ctor

From: Mehdi Amini <mehdi.amini@apple.com>
llvm-svn: 261036

8 years agoImprove diagnostics for ill-formed literal operator declarations.
Richard Smith [Wed, 17 Feb 2016 00:04:04 +0000 (00:04 +0000)]
Improve diagnostics for ill-formed literal operator declarations.

Patch by Erik Pilkington!

llvm-svn: 261034

8 years agoFix build LLVM with -D LLVM_USE_INTEL_JITEVENTS:BOOL=ON on Windows
Andrew Kaylor [Tue, 16 Feb 2016 23:52:18 +0000 (23:52 +0000)]
Fix build LLVM with -D LLVM_USE_INTEL_JITEVENTS:BOOL=ON on Windows

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

llvm-svn: 261033

8 years ago[WebAssembly] Implement __builtin_frame_address.
Dan Gohman [Tue, 16 Feb 2016 23:48:04 +0000 (23:48 +0000)]
[WebAssembly] Implement __builtin_frame_address.

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

llvm-svn: 261032

8 years agoQuery the StringMap only once when creating MDString (NFC)
Mehdi Amini [Tue, 16 Feb 2016 23:05:56 +0000 (23:05 +0000)]
Query the StringMap only once when creating MDString (NFC)

Summary: Loading IR with debug info improves MDString::get() from 19ms to 10ms.

Reviewers: dexonsmith

Subscribers: llvm-commits

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

From: Mehdi Amini <mehdi.amini@apple.com>
llvm-svn: 261030

8 years agoDefine the ThinLTO Pipeline (experimental)
Mehdi Amini [Tue, 16 Feb 2016 23:02:29 +0000 (23:02 +0000)]
Define the ThinLTO Pipeline (experimental)

Summary:
On the contrary to Full LTO, ThinLTO can afford to shift compile time
from the frontend to the linker: both phases are parallel (even if
it is not totally "free": projects like clang are reusing product
from the "compile phase" for multiple link, think about
libLLVMSupport reused for opt, llc, etc.).

This pipeline is based on the proposal in D13443 for full LTO. We
didn't move forward on this proposal because the LTO link was far too
long after that. We believe that we can afford it with ThinLTO.

The ThinLTO pipeline integrates in the regular O2/O3 flow:

 - The compile phase perform the inliner with a somehow lighter
   function simplification. (TODO: tune the inliner thresholds here)
   This is intendend to simplify the IR and get rid of obvious things
   like linkonce_odr that will be inlined.
 - The link phase will run the pipeline from the start, extended with
   some specific passes that leverage the augmented knowledge we have
   during LTO. Especially after the inliner is done, a sequence of
   globalDCE/globalOpt is performed, followed by another run of the
   "function simplification" passes. It is not clear if this part
   of the pipeline will stay as is, as the split model of ThinLTO
   does not allow the same benefit as FullLTO without added tricks.

The measurements on the public test suite as well as on our internal
suite show an overall net improvement. The binary size for the clang
executable is reduced by 5%. We're still tuning it with the bringup
of ThinLTO and it will evolve, but this should provide a good starting
point.

Reviewers: tejohnson

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

From: Mehdi Amini <mehdi.amini@apple.com>
llvm-svn: 261029

8 years agoRefactor the PassManagerBuilder: extract a "addFunctionSimplificationPasses()" (NFC)
Mehdi Amini [Tue, 16 Feb 2016 22:54:27 +0000 (22:54 +0000)]
Refactor the PassManagerBuilder: extract a "addFunctionSimplificationPasses()" (NFC)

It is intended to contains the passes run over a function after the
inliner is done with a function and before it moves to its callers.

From: Mehdi Amini <mehdi.amini@apple.com>
llvm-svn: 261028

8 years agoFix test from r261013
Adam Nemet [Tue, 16 Feb 2016 22:50:19 +0000 (22:50 +0000)]
Fix test from r261013

llvm-svn: 261027

8 years ago[X86][AVX] Regenerated vselect tests
Simon Pilgrim [Tue, 16 Feb 2016 22:33:27 +0000 (22:33 +0000)]
[X86][AVX] Regenerated vselect tests

llvm-svn: 261026

8 years ago[X86] Remove the now-unused X86ISD::PSIGN. NFC.
Ahmed Bougacha [Tue, 16 Feb 2016 22:14:12 +0000 (22:14 +0000)]
[X86] Remove the now-unused X86ISD::PSIGN. NFC.

llvm-svn: 261025

8 years ago[X86] Generalize logic blend of (x, -x) combine to match (-x, x).
Ahmed Bougacha [Tue, 16 Feb 2016 22:14:07 +0000 (22:14 +0000)]
[X86] Generalize logic blend of (x, -x) combine to match (-x, x).

I suspect this is what let PR26110 lie dormant for so long.

llvm-svn: 261024

8 years ago[X86] Don't turn (c?-v:v) into (c?-v:0) by blindly using PSIGN.
Ahmed Bougacha [Tue, 16 Feb 2016 22:14:03 +0000 (22:14 +0000)]
[X86] Don't turn (c?-v:v) into (c?-v:0) by blindly using PSIGN.

Currently, we sometimes miscompile this vector pattern:
    (c ? -v : v)
We lower it to (because "c" is <4 x i1>, lowered as a vector mask):
    (~c & v) | (c & -v)

When we have SSSE3, we incorrectly lower that to PSIGN, which does:
    (c < 0 ? -v : c > 0 ? v : 0)
in other words, when c is either all-ones or all-zero:
    (c ? -v : 0)
While this is an old bug, it rarely triggers because the PSIGN combine
is too sensitive to operand order. This will be improved separately.

Note that the PSIGN tests are also incorrect. Consider:
    %b.lobit = ashr <4 x i32> %b, <i32 31, i32 31, i32 31, i32 31>
    %sub = sub nsw <4 x i32> zeroinitializer, %a
    %0 = xor <4 x i32> %b.lobit, <i32 -1, i32 -1, i32 -1, i32 -1>
    %1 = and <4 x i32> %a, %0
    %2 = and <4 x i32> %b.lobit, %sub
    %cond = or <4 x i32> %1, %2
    ret <4 x i32> %cond
if %b is zero:
    %b.lobit = <4 x i32> zeroinitializer
    %sub = sub nsw <4 x i32> zeroinitializer, %a
    %0 = <4 x i32> <i32 -1, i32 -1, i32 -1, i32 -1>
    %1 = <4 x i32> %a
    %2 = <4 x i32> zeroinitializer
    %cond = or <4 x i32> %a, zeroinitializer
    ret <4 x i32> %a
whereas we currently generate:
    psignd %xmm1, %xmm0
    retq
which returns 0, as %xmm1 is 0.

Instead, use a pure logic sequence, as described in:
https://graphics.stanford.edu/~seander/bithacks.html#ConditionalNegate

Fixes PR26110.

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

llvm-svn: 261023

8 years ago[X86] Extract PSIGN/BLENDVP tests into vector-blend.ll. NFC.
Ahmed Bougacha [Tue, 16 Feb 2016 22:13:59 +0000 (22:13 +0000)]
[X86] Extract PSIGN/BLENDVP tests into vector-blend.ll. NFC.

We're going to stop generating PSIGN, so calling a test "psign"
isn't ideal. Instead, call these tests what they really are:
variable blends using logic.
Also add a test to exhibit a case we're currently missing in
the PSIGN combine.

llvm-svn: 261022

8 years ago[X86] Extract PSIGN/BLENDVP combine. NFC.
Ahmed Bougacha [Tue, 16 Feb 2016 22:13:55 +0000 (22:13 +0000)]
[X86] Extract PSIGN/BLENDVP combine. NFC.

llvm-svn: 261021

8 years ago[X86] Extract ANDNP combine. NFC.
Ahmed Bougacha [Tue, 16 Feb 2016 22:13:49 +0000 (22:13 +0000)]
[X86] Extract ANDNP combine. NFC.

This makes it IMO more readable and reduces indentation.

llvm-svn: 261020

8 years agoBitcode writer: fix a typo, using getName() instead of getSourceFileName()
Mehdi Amini [Tue, 16 Feb 2016 22:07:03 +0000 (22:07 +0000)]
Bitcode writer: fix a typo, using getName() instead of getSourceFileName()

When emitting the source filename, the encoding of the string
was checked against the name instead of the filename.

From: Mehdi Amini <mehdi.amini@apple.com>
llvm-svn: 261019

8 years ago[CUDA] pass debug options to ptxas.
Artem Belevich [Tue, 16 Feb 2016 22:03:20 +0000 (22:03 +0000)]
[CUDA] pass debug options to ptxas.

ptxas optimizations are disabled if we need to generate debug info
as ptxas does not accept '-g' otherwise.

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

llvm-svn: 261018

8 years ago[WebAssembly] Update torture test expectations
Derek Schuff [Tue, 16 Feb 2016 21:52:06 +0000 (21:52 +0000)]
[WebAssembly] Update torture test expectations

These were fixed with r260978

llvm-svn: 261017

8 years ago[codeview] Bail on a DBG_VALUE register operand with no register
Reid Kleckner [Tue, 16 Feb 2016 21:49:26 +0000 (21:49 +0000)]
[codeview] Bail on a DBG_VALUE register operand with no register

This apparently comes up when the register allocator decides that a
variable will become undef along a certain path.

Also improve the error message we emit when we can't map from LLVM
register number to CV register number.

llvm-svn: 261016

8 years ago[WebAssemly] Don't move calls or stores past intervening loads
Derek Schuff [Tue, 16 Feb 2016 21:44:19 +0000 (21:44 +0000)]
[WebAssemly] Don't move calls or stores past intervening loads

The register stackifier currently checks for intervening stores (and
loads that may alias them) but doesn't account for the fact that the
instruction being moved may affect intervening loads.

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

llvm-svn: 261014

8 years ago[LTO] Support Statistics
Adam Nemet [Tue, 16 Feb 2016 21:41:51 +0000 (21:41 +0000)]
[LTO] Support Statistics

Summary:
I thought -Xlinker -mllvm -Xlinker -stats worked at some point but maybe
it never did.

For clang, I believe that stats are printed from cc1_main.  This patch
also prints them for LTO, specifically right after codegen happens.

I only looked at the C API for LTO briefly to see if this is a good
place.  Probably there are still cases where this wouldn't be printed
but it seems to be working for the common case.  I also experimented
putting this in the LTOCodeGenerator destructor but that didn't trigger
for me because ld64 does not destroy the LTOCodeGenerator.

Reviewers: dexonsmith, joker.eph

Subscribers: rafael, joker.eph, llvm-commits

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

llvm-svn: 261013

8 years ago[codeview] Fix assertion on non-memory, non-register DBG_VALUE instructions
Reid Kleckner [Tue, 16 Feb 2016 21:14:51 +0000 (21:14 +0000)]
[codeview] Fix assertion on non-memory, non-register DBG_VALUE instructions

Eventually we should find a way to describe constant variables, but it
is not obvious how to do this at the moment.

llvm-svn: 261010

8 years agoMissing semicolons are kind of important. Who knew?
Aaron Ballman [Tue, 16 Feb 2016 21:06:10 +0000 (21:06 +0000)]
Missing semicolons are kind of important. Who knew?

llvm-svn: 261009

8 years agoAdd a nullPointerConstant() AST matcher to handle variations of null pointer constant...
Aaron Ballman [Tue, 16 Feb 2016 21:02:23 +0000 (21:02 +0000)]
Add a nullPointerConstant() AST matcher to handle variations of null pointer constants in one matcher.

llvm-svn: 261008

8 years ago[Hexagon] Adding relocation for code size, cold path optimization allowing a 23-bit...
Colin LeMahieu [Tue, 16 Feb 2016 20:38:17 +0000 (20:38 +0000)]
[Hexagon] Adding relocation for code size, cold path optimization allowing a 23-bit 4-byte aligned relocation to be a valid instruction encoding.

The usual way to get a 32-bit relocation is to use a constant extender which doubles the size of the instruction, 4 bytes to 8 bytes.

Another way is to put a .word32 and mix code and data within a function.  The disadvantage is it's not a valid instruction encoding and jumping over it causes prefetch stalls inside the hardware.

This relocation packs a 23-bit value in to an "r0 = add(rX, #a)" instruction by overwriting the source register bits.  Since r0 is the return value register, if this instruction is placed after a function call which return void, r0 will be filled with an undefined value, the prefetch won't be confused, and the callee can access the constant value by way of the link register.

llvm-svn: 261006

8 years agoStop using "template" when printing qualtype names
Reid Kleckner [Tue, 16 Feb 2016 20:34:27 +0000 (20:34 +0000)]
Stop using "template" when printing qualtype names

Summary:
The keyword "template" isn't necessary when
printing a fully-qualified qualtype name, and, in fact,
results in a syntax error if one tries to use it. So stop
printing it.

Reviewers: rsmith, rnk

Subscribers: rnk, klimek, cfe-commits

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

llvm-svn: 261005

8 years ago[AArch64] Add pass to remove redundant copy after RA
Jun Bum Lim [Tue, 16 Feb 2016 20:02:39 +0000 (20:02 +0000)]
[AArch64] Add pass to remove redundant copy after RA

Summary:
This change will add a pass to remove unnecessary zero copies in target blocks
of cbz/cbnz instructions. E.g., the copy instruction in the code below can be
removed because the cbz jumps to BB1 when x0 is zero :
  BB0:
    cbz x0, .BB1
  BB1:
    mov x0, xzr

Jun

Reviewers: gberry, jmolloy, HaoLiu, MatzeB, mcrosier

Subscribers: mcrosier, mssimpso, haicheng, bmakam, llvm-commits, aemerson, rengolin

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

llvm-svn: 261004

8 years ago[GlobalISel] Re-apply r260922-260923 with MSVC-friendly code.
Quentin Colombet [Tue, 16 Feb 2016 19:26:02 +0000 (19:26 +0000)]
[GlobalISel] Re-apply r260922-260923 with MSVC-friendly code.
Original message:
Get rid of the ifdefs in TargetLowering.
Introduce a new API used only by GlobalISel: CallLowering.
This API will contain target hooks dedicated to call lowering.

llvm-svn: 260998

8 years agoExclude PCH/missing-file.cpp on Windows, it does not pass reliably
Reid Kleckner [Tue, 16 Feb 2016 19:16:28 +0000 (19:16 +0000)]
Exclude PCH/missing-file.cpp on Windows, it does not pass reliably

Tag the test with "REQUIRES: can-remove-opened-file", which is what we
use for the similar test Modules/explicit-build-missing-file.cpp.

llvm-svn: 260994

8 years ago[typo-correction] Apply name specifier corrections when forming a NNS
Reid Kleckner [Tue, 16 Feb 2016 19:16:20 +0000 (19:16 +0000)]
[typo-correction] Apply name specifier corrections when forming a NNS

Previously we would leave behind the old name specifier prefix, which
creates an invalid AST.  Other callers of CorrectTypo update their
CXXScopeSpec objects with the correction specifier if one is present.

llvm-svn: 260993

8 years agoclang-cl: Expose -isystem.
Nico Weber [Tue, 16 Feb 2016 19:05:50 +0000 (19:05 +0000)]
clang-cl: Expose -isystem.

Like cl.exe, clang-cl allows adding system include directories via the
INCLUDE env var.  Having a driver flag for this functionality is useful,
so add this too.

(In the future, we probably also want to have a flag alternative to
VCINSTALLDIR as used in MSVCToolChain::getVisualStudioBinaries(), and
a way to override the registry accesses in MSVCToolChain::getWindowsSDKDir()
-- maybe -ivcroot= and -iwinsdkroot=?).

llvm-svn: 260990

8 years agoPass a std::unique_ptr to IRMover::move.
Rafael Espindola [Tue, 16 Feb 2016 18:50:12 +0000 (18:50 +0000)]
Pass a std::unique_ptr to IRMover::move.

It was already the one "destroying" the source module, now the API
reflects that.

llvm-svn: 260989

8 years ago[WebAssembly] Insert COPY_LOCAL between CopyToReg and FrameIndex DAG nodes
Derek Schuff [Tue, 16 Feb 2016 18:18:36 +0000 (18:18 +0000)]
[WebAssembly] Insert COPY_LOCAL between CopyToReg and FrameIndex DAG nodes

CopyToReg nodes don't support FrameIndex operands. Other targets select
the FI to some LEA-like instruction, but since we don't have that, we
need to insert some kind of instruction that can take an FI operand and
produces a value usable by CopyToReg (i.e. in a vreg). So insert a dummy
copy_local between Op and its FI operand. This results in a redundant
copy which we should optimize away later (maybe in the post-FI-lowering
peephole pass).

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

llvm-svn: 260987

8 years ago[AMDGPU] Rename $dst operand to $vdst for VOP instructions.
Tom Stellard [Tue, 16 Feb 2016 18:14:56 +0000 (18:14 +0000)]
[AMDGPU] Rename $dst operand to $vdst for VOP instructions.

Summary: This change renames output operand for VOP instructions from dst to vdst. This is needed to enable decoding named operands for disassembler.

Reviewers: vpykhtin, tstellarAMD, arsenm

Subscribers: arsenm, llvm-commits, nhaustov

Projects: #llvm-amdgpu-spb

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

llvm-svn: 260986