platform/upstream/llvm.git
7 years agoAdd a couple of test files missed in r281258.
Richard Smith [Mon, 12 Sep 2016 21:07:09 +0000 (21:07 +0000)]
Add a couple of test files missed in r281258.

llvm-svn: 281259

7 years ago[modules] When we merge two definitions of a function, mark the retained
Richard Smith [Mon, 12 Sep 2016 21:06:40 +0000 (21:06 +0000)]
[modules] When we merge two definitions of a function, mark the retained
definition as visible in the discarded definition's module, as we do for
other kinds of definition.

llvm-svn: 281258

7 years ago[ORC] Add missing <thread> header to RPCSerialization.h.
Lang Hames [Mon, 12 Sep 2016 20:45:01 +0000 (20:45 +0000)]
[ORC] Add missing <thread> header to RPCSerialization.h.

llvm-svn: 281257

7 years ago[Cmake] Use Cmake's default RPATH for unittest.
Davide Italiano [Mon, 12 Sep 2016 20:44:53 +0000 (20:44 +0000)]
[Cmake] Use Cmake's default RPATH for unittest.

Similarly to what was done in r280791 for llvm/.
This should fix a bunch of failures I saw while
trying a BUILD_SHARED_LIBS build on MacOS.
Still there are some failures, but this is a step
forward.

Thanks a lot to Chris Bieneman for the suggested
fix (in PR30345)

llvm-svn: 281256

7 years ago[sanitizer] replace CHECK with CHECK_XY in two places for better diagnostics
Kostya Serebryany [Mon, 12 Sep 2016 20:39:13 +0000 (20:39 +0000)]
[sanitizer] replace CHECK with CHECK_XY in two places for better diagnostics

llvm-svn: 281255

7 years ago[ORC] Replace the serialize/deserialize function pair with a SerializationTraits
Lang Hames [Mon, 12 Sep 2016 20:34:41 +0000 (20:34 +0000)]
[ORC] Replace the serialize/deserialize function pair with a SerializationTraits
class.

SerializationTraits provides serialize and deserialize methods corresponding to
the earlier functions, but also provides a name for the type. In future, this
name will be used to render function signatures as strings, which will in turn
be used to negotiate and verify API support between RPC clients and servers.

llvm-svn: 281254

7 years agoFix the bug introduced in r281252.
Dehao Chen [Mon, 12 Sep 2016 20:29:54 +0000 (20:29 +0000)]
Fix the bug introduced in r281252.

llvm-svn: 281253

7 years agoLower consecutive select instructions correctly.
Dehao Chen [Mon, 12 Sep 2016 20:23:28 +0000 (20:23 +0000)]
Lower consecutive select instructions correctly.

Summary: If consecutive select instructions are lowered separately in CGP, it will introduce redundant condition check and branches that cannot be removed by later optimization phases. This patch lowers all consecutive select instructions at the same to to avoid inefficent code as demonstrated in https://llvm.org/bugs/show_bug.cgi?id=29095

Reviewers: davidxl

Subscribers: vsk, llvm-commits

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

llvm-svn: 281252

7 years agoxfail TestQueues.py and TestDarwinLogFilterMatchMessage.py
Todd Fiala [Mon, 12 Sep 2016 20:23:13 +0000 (20:23 +0000)]
xfail TestQueues.py and TestDarwinLogFilterMatchMessage.py

It looks like the message-content-retrieval aspect of DarwinLog
support is flaky, not just the regex match against it.  Slightly
less frequently than the regex matching, I am seeing the
direct string-match variant of log-message-content matching
also fail.

Tracked by:
llvm.org/pr30299
rdar://28237450

llvm-svn: 281251

7 years agoconfig: Fix typo in comment
Shoaib Meenai [Mon, 12 Sep 2016 20:14:44 +0000 (20:14 +0000)]
config: Fix typo in comment

Testing commit access. NFC.

llvm-svn: 281250

7 years ago[MC] Defer asm errors to post-statement failure
Nirav Dave [Mon, 12 Sep 2016 20:03:02 +0000 (20:03 +0000)]
[MC] Defer asm errors to post-statement failure

Allow errors to be deferred and emitted as part of clean up to simplify
and shorten Assembly parser code. This will allow error messages to be
emitted in helper functions and be modified by the caller which has
better context.

As part of this many minor cleanups to the Parser:

* Unify parser cleanup on error
* Add Workaround for incorrect return values in ParseDirective instances
* Tighten checks on error-signifying return values for parser functions
  and fix in-tree TargetParsers to be more consistent with the changes.
* Fix AArch64 test cases checking for spurious error messages that are
  now fixed.

These changes should be backwards compatible with current Target Parsers
so long as the error status are correctly returned in appropriate
functions.

Reviewers: rnk, majnemer

Subscribers: aemerson, jyknight, llvm-commits

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

llvm-svn: 281249

7 years ago[InstCombine] add test for PR30327
Sanjay Patel [Mon, 12 Sep 2016 19:50:08 +0000 (19:50 +0000)]
[InstCombine] add test for PR30327

llvm-svn: 281248

7 years ago[InstCombine] regenerate checks
Sanjay Patel [Mon, 12 Sep 2016 19:29:26 +0000 (19:29 +0000)]
[InstCombine] regenerate checks

llvm-svn: 281247

7 years agoAVX-512: Added a test for -O0 mode. NFC.
Elena Demikhovsky [Mon, 12 Sep 2016 19:03:21 +0000 (19:03 +0000)]
AVX-512: Added a test for -O0 mode. NFC.

llvm-svn: 281246

7 years agoFix bitmask upper bounds check
Jonathan Peyton [Mon, 12 Sep 2016 19:02:53 +0000 (19:02 +0000)]
Fix bitmask upper bounds check

Rather than checking KMP_CPU_SETSIZE, which doesn't exist when using Hwloc, we
use the get_max_proc() function which can vary based on the operating system.
For example on Windows with multiple processor groups, it might be the case that
the highest bit possible in the bitmask is not equal to the number of hardware
threads on the machine but something higher than that.

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

llvm-svn: 281245

7 years agoAVX-512: Simplified masked_gather_scatter test. NFC.
Elena Demikhovsky [Mon, 12 Sep 2016 18:50:47 +0000 (18:50 +0000)]
AVX-512: Simplified masked_gather_scatter test. NFC.

llvm-svn: 281244

7 years agofix Xcode build after r281226
Todd Fiala [Mon, 12 Sep 2016 18:49:22 +0000 (18:49 +0000)]
fix Xcode build after r281226

llvm-svn: 281243

7 years agoRemove -fvisibility=hidden and FORCE_STATIC.
Michael Kruse [Mon, 12 Sep 2016 18:25:00 +0000 (18:25 +0000)]
Remove -fvisibility=hidden and FORCE_STATIC.

The flag -fvisibility=hidden flag was used for the integrated Integer
Set Library (and PPCG) to keep their definitions local to Polly. The
motivation was the be loaded into a DragonEgg-powered GCC, where GCC
might itself use ISL for its Graphite extension. The symbols of Polly's
ISL and GCC's ISL would clash.

The DragonEgg project is not actively developed anymore, but Polly's
unittests need to call ISL functions to set up a testing environment.
Unfortunately, the -fvisibility=hidden flag means that the ISL symbols
are not available to the gtest executable as it resides outside of
libPolly when linked dynamically. Currently, CMake links a second copy
of ISL into the unittests which leads to subtle bugs. What got observed
is that two isl_ids for isl_id_none exist, one for each library
instance. Because isl_id's are compared by address, isl_id_none could
happen to be different from isl_id_none, depending on which library
instance set the address and does the comparison.

Also remove the FORCE_STATIC flag which was introduced to keep the ISL
symbols visible inside the same libPolly shared object, even when build
with BUILD_SHARED_LIBS.

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

llvm-svn: 281242

7 years agoDiagnostics reference: "error:" should be red, not orange.
Richard Smith [Mon, 12 Sep 2016 17:55:49 +0000 (17:55 +0000)]
Diagnostics reference: "error:" should be red, not orange.

llvm-svn: 281241

7 years agoFix test failure in r281232
Hemant Kulkarni [Mon, 12 Sep 2016 17:40:10 +0000 (17:40 +0000)]
Fix test failure in r281232

llvm-svn: 281240

7 years ago[SE] Clean up device and host memory slices
Jason Henline [Mon, 12 Sep 2016 17:20:43 +0000 (17:20 +0000)]
[SE] Clean up device and host memory slices

Summary:
* Add LLVM_ATTRIBUTE_UNUSED_RESULT used to slicing methods in order to
  emphasize that the slicing is not done in place.
* Change device memory slice function name from `drop_front` to `slice`
  in order to match the naming convention of `llvm::ArrayRef` and host
  memory slice.
* Change the parameter names of host memory slice functions to
  `DropCount` and `TakeCount` to match device memory slice declarations.

Reviewers: jlebar

Subscribers: jprice, parallel_libs-commits

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

llvm-svn: 281239

7 years ago[MCJIT] Fix some inconsistent handling of name mangling inside MCJIT.
Lang Hames [Mon, 12 Sep 2016 17:19:24 +0000 (17:19 +0000)]
[MCJIT] Fix some inconsistent handling of name mangling inside MCJIT.

This patch moves symbol mangling from findSymbol to getSymbolAddress. The
findSymbol, findExistingSymbol and findModuleForSymbol methods now always take
a mangled name, allowing the 'demangle-and-retry' cruft to be removed from
findSymbol. See http://llvm.org/PR28699 for details.

Patch by James Holderness. Thanks very much James!

llvm-svn: 281238

7 years ago[asan] Ease dealing with tagged enum ErrorDescription with some macros.
Filipe Cabecinhas [Mon, 12 Sep 2016 17:12:02 +0000 (17:12 +0000)]
[asan] Ease dealing with tagged enum ErrorDescription with some macros.

Summary:
Added a macro to enumerate the (error name, error member name) pairs. This way,
when adding an error, we only need to add the pair to one place (plus add its
implementation, or course).

Reviewers: kcc, samsonov

Subscribers: llvm-commits, kubabrecka

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

llvm-svn: 281237

7 years ago[asan] Cleanup: Move tid into ErrorBase, add const to BufferedStackTrace, be consiste...
Filipe Cabecinhas [Mon, 12 Sep 2016 17:10:44 +0000 (17:10 +0000)]
[asan] Cleanup: Move tid into ErrorBase, add const to BufferedStackTrace, be consistent in constructor arguments and member order.

Summary: As mentioned in D24394, I'm moving tid to ErrorBase, since basically all errors need it.
Also mentioned in the same review are other cleanups like adding const
to BufferedStackTrace and make sure constructor orders are consistent.

Reviewers: vitalybuka, kcc, eugenis

Subscribers: llvm-commits, kubabrecka

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

llvm-svn: 281236

7 years agoStore the size of the outermost dimension in case of newly created arrays that requir...
Roman Gareev [Mon, 12 Sep 2016 17:08:31 +0000 (17:08 +0000)]
Store the size of the outermost dimension in case of newly created arrays that require memory allocation.

We do not need the size of the outermost dimension in most cases, but if we
allocate memory for newly created arrays, that size is needed.

Reviewed-by: Michael Kruse <llvm@meinersbur.de>
Differential Revision: https://reviews.llvm.org/D23991

llvm-svn: 281234

7 years agollvm-size: Add --totals option
Hemant Kulkarni [Mon, 12 Sep 2016 17:08:28 +0000 (17:08 +0000)]
llvm-size: Add --totals option

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

llvm-svn: 281233

7 years agollvm-objdump: Add --start-address and --stop-address options
Hemant Kulkarni [Mon, 12 Sep 2016 17:08:22 +0000 (17:08 +0000)]
llvm-objdump: Add --start-address and --stop-address options

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

llvm-svn: 281232

7 years ago[InstCombine] use m_APInt to allow icmp X, C folds for splat constant vectors
Sanjay Patel [Mon, 12 Sep 2016 16:25:41 +0000 (16:25 +0000)]
[InstCombine] use m_APInt to allow icmp X, C folds for splat constant vectors

isSignBitCheck could be changed to take a pointer param to avoid the 'UnusedBit' ugliness.

llvm-svn: 281231

7 years agoAMDGPU: Do not clobber SCC in SIWholeQuadMode
Nicolai Haehnle [Mon, 12 Sep 2016 16:25:20 +0000 (16:25 +0000)]
AMDGPU: Do not clobber SCC in SIWholeQuadMode

Reviewers: arsenm, tstellarAMD, mareko

Subscribers: arsenm, llvm-commits, kzhuravl

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

llvm-svn: 281230

7 years ago[GlobalISel] Fix mismatched "<..)" in intrinsic MO printing. NFC.
Ahmed Bougacha [Mon, 12 Sep 2016 16:21:49 +0000 (16:21 +0000)]
[GlobalISel] Fix mismatched "<..)" in intrinsic MO printing. NFC.

llvm-svn: 281229

7 years agoRevert "[ARM] Promote small global constants to constant pools"
James Molloy [Mon, 12 Sep 2016 16:18:23 +0000 (16:18 +0000)]
Revert "[ARM] Promote small global constants to constant pools"

This reverts commit r281213. It made a bot go bang: http://lab.llvm.org:8011/builders/clang-cmake-armv7-a15-full/builds/14625

llvm-svn: 281228

7 years agoTrivial documentation fix regarding Obj-C ARC objc_arc_weak_reference_unavailable
Jonathan Roelofs [Mon, 12 Sep 2016 16:14:52 +0000 (16:14 +0000)]
Trivial documentation fix regarding Obj-C ARC objc_arc_weak_reference_unavailable

Fixed incorrect docs that referred to:
  objc_arc_weak_unavailable
when it should be:
  objc_arc_weak_reference_unavailable

Patch by: Sean McBride!

llvm-svn: 281227

7 years agoMove StdStringExtractor to tools/debugserver
Pavel Labath [Mon, 12 Sep 2016 16:13:05 +0000 (16:13 +0000)]
Move StdStringExtractor to tools/debugserver

The class is only used in the debugserver. The rest of lldb has the StringExtractor class.

Xcode project will need to be updated after this.

llvm-svn: 281226

7 years ago[SE] RegisteredHostMemory for async device copies
Jason Henline [Mon, 12 Sep 2016 16:09:41 +0000 (16:09 +0000)]
[SE] RegisteredHostMemory for async device copies

Summary:
Improve the error-prone interface that allows users to pass host
pointers that haven't been registered to asynchronous copy methods. In
CUDA, this is an extremely easy error to make, and instead of failing at
runtime, it succeeds and gives the right answers by turning the async
copy into a sync copy. So, you silently get a huge performance
degradation if you misuse the old interface. This new interface should
prevent that.

Reviewers: jlebar

Subscribers: jprice, beanz, parallel_libs-commits

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

llvm-svn: 281225

7 years ago[BranchFolding] Unique added live-ins after hoisting code.
Ahmed Bougacha [Mon, 12 Sep 2016 16:05:31 +0000 (16:05 +0000)]
[BranchFolding] Unique added live-ins after hoisting code.

We're not supposed to have duplicate live-ins.

llvm-svn: 281224

7 years ago[X86] Copy imp-uses when folding tailcall into conditional branch.
Ahmed Bougacha [Mon, 12 Sep 2016 16:05:27 +0000 (16:05 +0000)]
[X86] Copy imp-uses when folding tailcall into conditional branch.

r280832 added 32-bit support for emitting conditional tail-calls, but
dropped imp-used parameter registers.  This went unnoticed until
r281113, which added 64-bit support, as this is only exposed with
parameter passing via registers.

Don't drop the imp-used parameters.

llvm-svn: 281223

7 years agoSimplify handling of /DISCARD/. NFC.
Rafael Espindola [Mon, 12 Sep 2016 16:05:16 +0000 (16:05 +0000)]
Simplify handling of /DISCARD/. NFC.

llvm-svn: 281222

7 years ago[FunctionAttrs] Don't try to infer returned if it is already on an argument
David Majnemer [Mon, 12 Sep 2016 16:04:59 +0000 (16:04 +0000)]
[FunctionAttrs] Don't try to infer returned if it is already on an argument

Trying to infer the 'returned' attribute if an argument is already
'returned' can lead to verification failure: inference might determine
that a different argument is passed through which would result in two
different arguments marked as 'returned'.

This fixes PR30350.

llvm-svn: 281221

7 years agofix formatting; NFC
Sanjay Patel [Mon, 12 Sep 2016 15:52:28 +0000 (15:52 +0000)]
fix formatting; NFC

llvm-svn: 281220

7 years ago[InstCombine] add tests to show missing vector folds
Sanjay Patel [Mon, 12 Sep 2016 15:51:42 +0000 (15:51 +0000)]
[InstCombine] add tests to show missing vector folds

llvm-svn: 281219

7 years agoadd select i1 test, reproduser pr30249.
Igor Breger [Mon, 12 Sep 2016 15:27:02 +0000 (15:27 +0000)]
add select i1 test, reproduser pr30249.

llvm-svn: 281218

7 years ago[InstCombine] add helper function for foldICmpUsingKnownBits; NFCI
Sanjay Patel [Mon, 12 Sep 2016 15:24:31 +0000 (15:24 +0000)]
[InstCombine] add helper function for foldICmpUsingKnownBits; NFCI

llvm-svn: 281217

7 years ago[AMDGPU] Assembler: Move disabled SDWA and DPP instruction into Disable asm variant
Sam Kolton [Mon, 12 Sep 2016 14:42:43 +0000 (14:42 +0000)]
[AMDGPU] Assembler: Move disabled SDWA and DPP instruction into Disable asm variant

Summary: This removes disabled instructions from match tables so we will not match them at all.

Reviewers: tstellarAMD, vpykhtin, artem.tamazov

Subscribers: wdng, nhaehnle, arsenm

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

llvm-svn: 281216

7 years ago[Thumb] Teach ISel how to lower compares of AND bitmasks efficiently
James Molloy [Mon, 12 Sep 2016 14:30:48 +0000 (14:30 +0000)]
[Thumb] Teach ISel how to lower compares of AND bitmasks efficiently

For the common pattern (CMPZ (AND x, #bitmask), #0), we can do some more efficient instruction selection if the bitmask is one consecutive sequence of set bits (32 - clz(bm) - ctz(bm) == popcount(bm)).

1) If the bitmask touches the LSB, then we can remove all the upper bits and set the flags by doing one LSLS.
2) If the bitmask touches the MSB, then we can remove all the lower bits and set the flags with one LSRS.
3) If the bitmask has popcount == 1 (only one set bit), we can shift that bit into the sign bit with one LSLS and change the condition query from NE/EQ to MI/PL (we could also implement this by shifting into the carry bit and branching on BCC/BCS).
4) Otherwise, we can emit a sequence of LSLS+LSRS to remove the upper and lower zero bits of the mask.

1-3 require only one 16-bit instruction and can elide the CMP. 4 requires two 16-bit instructions but can elide the CMP and doesn't require materializing a complex immediate, so is also a win.

llvm-svn: 281215

7 years agofix formatting/typos; NFC
Sanjay Patel [Mon, 12 Sep 2016 14:25:46 +0000 (14:25 +0000)]
fix formatting/typos; NFC

llvm-svn: 281214

7 years ago[ARM] Promote small global constants to constant pools
James Molloy [Mon, 12 Sep 2016 13:42:16 +0000 (13:42 +0000)]
[ARM] Promote small global constants to constant pools

If a constant is unamed_addr and is only used within one function, we can save
on the code size and runtime cost of an indirection by changing the global's storage
to inside the constant pool. For example, instead of:

      ldr r0, .CPI0
      bl printf
      bx lr
    .CPI0: &format_string
    format_string: .asciz "hello, world!\n"

We can emit:

      adr r0, .CPI0
      bl printf
      bx lr
    .CPI0: .asciz "hello, world!\n"

This can cause significant code size savings when many small strings are used in one
function (4 bytes per string).

llvm-svn: 281213

7 years ago[LoopInterchange] Improve debug output. NFC.
Chad Rosier [Mon, 12 Sep 2016 13:24:47 +0000 (13:24 +0000)]
[LoopInterchange] Improve debug output. NFC.

llvm-svn: 281212

7 years agoFix the Thumb test for vfloat intrinsics
Pablo Barrio [Mon, 12 Sep 2016 13:14:14 +0000 (13:14 +0000)]
Fix the Thumb test for vfloat intrinsics

Summary:
This test was not testing the intrinsics. A function like this:

define %v4f32 @test_v4f32.floor(%v4f32 %a){
...
        %1 = call %v4f32 @llvm.floor.v4f32(%v4f32 %a)
...
}

is transformed into the following assembly:

_test_v4f32.floor:              @ @test_v4f32.floor
...
        bl _floorf
...

In each function tested, there are two CHECK: one that checked
for the label and another one for the intrinsic that should be used
inside the function (in our case, "floor"). However, although the
first CHECK was matching the label, the second was not matching the
intrinsic, but the second "floor" in the same line as the label.

This is fixed by making the first CHECK match the entire line.

Reviewers: jmolloy, rengolin

Subscribers: rengolin, llvm-commits

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

llvm-svn: 281211

7 years agoStore an ArrayRef for Data in InputSectionData.
Rafael Espindola [Mon, 12 Sep 2016 13:13:53 +0000 (13:13 +0000)]
Store an ArrayRef for Data in InputSectionData.

llvm-svn: 281210

7 years agoRevert "Revert "Compact InputSectionData from 64 to 48 bytes. NFC.""
Rafael Espindola [Mon, 12 Sep 2016 13:06:10 +0000 (13:06 +0000)]
Revert "Revert "Compact InputSectionData from 64 to 48 bytes. NFC.""

This reverts commit r281096.

The previous link errors should be fixed by r281208.

llvm-svn: 281209

7 years agoDefine a dummy zlib::uncompress when zlib is not available.
Rafael Espindola [Mon, 12 Sep 2016 13:00:51 +0000 (13:00 +0000)]
Define a dummy zlib::uncompress when zlib is not available.

Should fix link errors in some bots when it is used.

llvm-svn: 281208

7 years agoGlobalISel: support translation of global addresses.
Tim Northover [Mon, 12 Sep 2016 12:10:41 +0000 (12:10 +0000)]
GlobalISel: support translation of global addresses.

llvm-svn: 281207

7 years ago[clang-tidy] readability-misplaced-array-index: add new check that warns when array...
Daniel Marjamaki [Mon, 12 Sep 2016 12:04:13 +0000 (12:04 +0000)]
[clang-tidy] readability-misplaced-array-index: add new check that warns when array index is misplaced.

Reviewers: alexfh

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

llvm-svn: 281206

7 years agoGlobalISel: translate GEP instructions.
Tim Northover [Mon, 12 Sep 2016 11:20:22 +0000 (11:20 +0000)]
GlobalISel: translate GEP instructions.

Unlike SDag, we use a separate G_GEP instruction (much simplified, only taking
a single byte offset) to preserve the pointer type information through
selection.

llvm-svn: 281205

7 years agoGlobalISel: disambiguate types when printing MIR
Tim Northover [Mon, 12 Sep 2016 11:20:10 +0000 (11:20 +0000)]
GlobalISel: disambiguate types when printing MIR

Some generic instructions have multiple types. While in theory these always be
discovered by inspecting the single definition of each generic vreg, in
practice those definitions won't always be local and traipsing through a big
function to find them will not be fun.

So this changes MIRPrinter to print out the type of uses as well as defs, if
they're known to be different or not known to be the same.

On the parsing side, we're a little more flexible: provided each register is
given a type in at least one place it's mentioned (and all types are
consistent) we accept the MIR. This doesn't introduce ambiguity but makes
writing tests manually a bit less painful.

llvm-svn: 281204

7 years agoclang-format: Make emacs integration work with narrowed buffers.
Daniel Jasper [Mon, 12 Sep 2016 10:02:46 +0000 (10:02 +0000)]
clang-format: Make emacs integration work with narrowed buffers.

Use (call-process region nil ...) instead of (point-min) so that the
call works in narrowed buffers.

Patch by Philipp Stephani, thank you!

llvm-svn: 281203

7 years ago[ELF/AArch64] Implement some UABS relocs
Eugene Leviant [Mon, 12 Sep 2016 10:02:41 +0000 (10:02 +0000)]
[ELF/AArch64] Implement some UABS relocs

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

llvm-svn: 281202

7 years agoFix WebAssembly broken build related to interface change in r281172.
Eric Liu [Mon, 12 Sep 2016 09:35:59 +0000 (09:35 +0000)]
Fix WebAssembly broken build related to interface change in r281172.

Reviewers: bkramer

Subscribers: jfb, llvm-commits, dschuff

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

llvm-svn: 281201

7 years ago[CFG] Add iterator_ranges to CFG and CFGBlock.
Martin Bohme [Mon, 12 Sep 2016 08:28:21 +0000 (08:28 +0000)]
[CFG] Add iterator_ranges to CFG and CFGBlock.

Summary: (Needed for D23353.)

Reviewers: alexfh

Subscribers: cfe-commits

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

llvm-svn: 281200

7 years agoAdd MiSyntaxTestCase.test_lldbmi_output_grammar test (MI)
Ilia K [Mon, 12 Sep 2016 07:14:51 +0000 (07:14 +0000)]
Add MiSyntaxTestCase.test_lldbmi_output_grammar test (MI)

Summary: This patch adds a new test and fixes extra new-line before exit

Reviewers: abidh

Subscribers: ki.stfu, dawn, lldb-commits, abidh

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

llvm-svn: 281199

7 years agoAdd virtual destructor (necessary due to the switch to shared_ptr).
Richard Smith [Mon, 12 Sep 2016 06:51:11 +0000 (06:51 +0000)]
Add virtual destructor (necessary due to the switch to shared_ptr).

llvm-svn: 281198

7 years agoAttempt #3 to placate MSVC.
Richard Smith [Mon, 12 Sep 2016 06:38:31 +0000 (06:38 +0000)]
Attempt #3 to placate MSVC.

llvm-svn: 281197

7 years agoAVX-512: Added a test case that should be optimized in the future. NFC.
Elena Demikhovsky [Mon, 12 Sep 2016 06:26:03 +0000 (06:26 +0000)]
AVX-512: Added a test case that should be optimized in the future. NFC.

llvm-svn: 281196

7 years agoAttempt #2 to placate MSVC
Richard Smith [Mon, 12 Sep 2016 06:23:26 +0000 (06:23 +0000)]
Attempt #2 to placate MSVC

llvm-svn: 281195

7 years agoAttempt to placate MSVC.
Richard Smith [Mon, 12 Sep 2016 06:13:44 +0000 (06:13 +0000)]
Attempt to placate MSVC.

llvm-svn: 281194

7 years agoGPGPU: Bail out gracefully in case of invalid IR
Tobias Grosser [Mon, 12 Sep 2016 06:06:31 +0000 (06:06 +0000)]
GPGPU: Bail out gracefully in case of invalid IR

Instead of aborting, we now bail out gracefully in case the kernel IR we
generate is invalid. This can currently happen in case the SCoP stores
pointer values, which we model as arrays, as data values into other arrays. In
this case, the original pointer value is not available on the device and can
consequently not be stored. As detecting this ahead of time is not so easy, we
detect these situations after the invalid IR has been generated and bail out.

llvm-svn: 281193

7 years agoAdd a mode to clang-tblgen to generate reference documentation for warning and
Richard Smith [Mon, 12 Sep 2016 05:58:29 +0000 (05:58 +0000)]
Add a mode to clang-tblgen to generate reference documentation for warning and
remark flags. For now I'm checking in a copy of the built documentation, but we
can replace this with a placeholder (as we do for the attributes reference
documentation) once we enable building this server-side.

llvm-svn: 281192

7 years agoFix about a dozen compile warnings
Ilia K [Mon, 12 Sep 2016 05:25:33 +0000 (05:25 +0000)]
Fix about a dozen compile warnings

Summary:
It fixes the following compile warnings:
1. '0' flag ignored with precision and ‘%d’ gnu_printf format
2. enumeral and non-enumeral type in conditional expression
3. format ‘%d’ expects argument of type ‘int’, but argument 4 has type ...
4. enumeration value ‘...’ not handled in switch
5. cast from type ‘const uint64_t* {aka ...}’ to type ‘int64_t* {aka ...}’ casts away qualifiers
6. extra ‘;’
7. comparison between signed and unsigned integer expressions
8. variable ‘register_operand’ set but not used
9. control reaches end of non-void function

Reviewers: jingham, emaste, zturner, clayborg

Subscribers: lldb-commits

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

llvm-svn: 281191

7 years agollvm/test/CodeGen/AMDGPU/infinite-loop-evergreen.ll REQUIRES +Asserts.
NAKAMURA Takumi [Mon, 12 Sep 2016 04:27:28 +0000 (04:27 +0000)]
llvm/test/CodeGen/AMDGPU/infinite-loop-evergreen.ll REQUIRES +Asserts.

This might not *crash* with -Asserts. I saw it caused infinite loop in the codegen.

llvm-svn: 281190

7 years ago[MS ABI] Add /include directives for dynamic TLS
David Majnemer [Mon, 12 Sep 2016 02:51:43 +0000 (02:51 +0000)]
[MS ABI] Add /include directives for dynamic TLS

MSVC emits /include directives in the .drective section for the
__dyn_tls_init function (decorated as ___dyn_tls_init@12 for 32-bit).

This fixes PR30347.

llvm-svn: 281189

7 years agoMC: Move MCSection::begin/end to header, NFC
Duncan P. N. Exon Smith [Mon, 12 Sep 2016 00:17:09 +0000 (00:17 +0000)]
MC: Move MCSection::begin/end to header, NFC

llvm-svn: 281188

7 years ago[InstCombine] add helper function for folding {and,or,xor} (cast X), C ; NFCI
Sanjay Patel [Mon, 12 Sep 2016 00:16:23 +0000 (00:16 +0000)]
[InstCombine] add helper function for folding {and,or,xor} (cast X), C ; NFCI

llvm-svn: 281187

7 years ago[InstCombine] regenerate checks
Sanjay Patel [Mon, 12 Sep 2016 00:12:56 +0000 (00:12 +0000)]
[InstCombine] regenerate checks

llvm-svn: 281186

7 years ago[InstCombine] regenerate checks
Sanjay Patel [Mon, 12 Sep 2016 00:08:33 +0000 (00:08 +0000)]
[InstCombine] regenerate checks

llvm-svn: 281185

7 years agoADT: Never allocate nodes in iplist<> and ilist<>
Duncan P. N. Exon Smith [Sun, 11 Sep 2016 23:43:43 +0000 (23:43 +0000)]
ADT: Never allocate nodes in iplist<> and ilist<>

Remove createNode() and any API that depending on it, and add
HasCreateNode to the list of checks for HasObsoleteCustomizations.  Now
an ilist *never* allocates (this was already true for iplist).

This factors out all the differences between iplist and ilist.  I'll aim
to rename both to "owning_ilist" eventually, to call out the interesting
(not exactly intrusive) ownership semantics.  In the meantime, I've left
both names around to reduce code churn.

One of the deleted APIs is the ilist copy constructor.  I've lifted up
and tested iplist::cloneFrom (ala simple_ilist::cloneFrom) as a
replacement.

Users of ilist<> and iplist<> that want the list to allocate nodes have
a few options:
- use std::list;
- use AllocatorList or BumpPtrList (or build a similarly trivial list);
- use cloneFrom (which is explicit at the call site); or
- allocate at the call site.

See r280573, r281177, r281181, and r281182 for examples of what to do if
you're updating out-of-tree code.

llvm-svn: 281184

7 years agoADT: Fix build after r281182
Duncan P. N. Exon Smith [Sun, 11 Sep 2016 22:55:46 +0000 (22:55 +0000)]
ADT: Fix build after r281182

Fix this bot:
  http://lab.llvm.org:8011/builders/clang-x86_64-linux-abi-test/builds/20680

which complained that a typedef of 'iterator_adaptor_base' changed
meaning in AllocatorList::IteratorImpl.  Use 'base_type' there instead.

llvm-svn: 281183

7 years agoADT: Add AllocatorList, and use it for yaml::Token
Duncan P. N. Exon Smith [Sun, 11 Sep 2016 22:40:40 +0000 (22:40 +0000)]
ADT: Add AllocatorList, and use it for yaml::Token

- Add AllocatorList, a non-intrusive list that owns an LLVM-style
  allocator and provides a std::list-like interface (trivially built on
  top of simple_ilist),
- add a typedef (and unit tests) for BumpPtrList, and
- use BumpPtrList for the list of llvm::yaml::Token (i.e., TokenQueueT).

TokenQueueT has no need for the complexity of an intrusive list.  The
only reason to inherit from ilist was to customize the allocator.
TokenQueueT was the only example in-tree of using ilist<> in a truly
non-intrusive way.

Moreover, this removes the final use of the non-intrusive
ilist_traits<>::createNode (after r280573, r281177, and r281181).  I
have a WIP patch that removes this customization point (and the API that
relies on it) that I plan to commit soon.

Note: AllocatorList owns the allocator, which limits the viable API
(e.g., splicing must be on the same list).  For now I've left out
any problematic API.  It wouldn't be hard to split AllocatorList into
two layers: an Impl class that calls DerivedT::getAlloc (via CRTP), and
derived classes that handle Allocator ownership/reference/etc semantics;
and then implement splice with appropriate assertions; but TBH we should
probably just customize the std::list allocators at that point.

llvm-svn: 281182

7 years agoAnalysis: Only allow the move-constructor for IVUsers
Duncan P. N. Exon Smith [Sun, 11 Sep 2016 22:11:37 +0000 (22:11 +0000)]
Analysis: Only allow the move-constructor for IVUsers

Force IVUsers to be moved instead of copied, properly update Parent
pointers in IVStrideUse when IVUsers is moved, and make sure we have
move constructors available in iplist and ilist.

I came across this in a WIP patch that deleted the copy constructors
from ilist.  I was surprised to find that IVUsersAnalysis couldn't be
registered in the new pass manager.

It's not clear to me whether IVUsers was getting moved only when empty,
but if it was being moved when it was non-empty then this fixes a
pointer invalidation bug and should give some sort of speedup.  Note
that the bugfix would be necessary even for a copy constructor.

llvm-svn: 281181

7 years ago[TwoAddressInstruction] When commuting an instruction don't assume that the destinati...
Craig Topper [Sun, 11 Sep 2016 22:10:42 +0000 (22:10 +0000)]
[TwoAddressInstruction] When commuting an instruction don't assume that the destination register is operand 0. Pass it from the caller.

In practice it probably is 0 so this may not be a functional change.

llvm-svn: 281180

7 years ago[libcxx] Introduce an externally-threaded libc++ variant.
Asiri Rathnayake [Sun, 11 Sep 2016 21:46:40 +0000 (21:46 +0000)]
[libcxx] Introduce an externally-threaded libc++ variant.

This patch further decouples libc++ from pthread, allowing libc++ to be built
against other threading systems. There are two main use cases:

- Building libc++ against a thread library other than pthreads.

- Building libc++ with an "external" thread API, allowing a separate library to
  provide the implementation of that API.

The two use cases are quite similar, the second one being sligtly more
de-coupled than the first. The cmake option LIBCXX_HAS_EXTERNAL_THREAD_API
enables both kinds of builds. One needs to place an <__external_threading>
header file containing an implementation of the "libc++ thread API" declared
in the <__threading_support> header.

For the second use case, the implementation of the libc++ thread API can
delegate to a custom "external" thread API where the implementation of this
external API is provided in a seperate library. This mechanism allows toolchain
vendors to distribute a build of libc++ with a custom thread-porting-layer API
(which is the "external" API above), platform vendors (recipients of the
toolchain/libc++) are then required to provide their implementation of this API
to be linked with (end-user) C++ programs.

Note that the second use case still requires establishing the basic types that
get passed between the external thread library and the libc++ library
(e.g. __libcpp_mutex_t). These cannot be opaque pointer types (libc++ sources
won't compile otherwise). It should also be noted that the second use case can
have a slight performance penalty; as all the thread constructs need to cross a
library boundary through an additional function call.

When the header <__external_threading> is omitted, libc++ is built with the
"libc++ thread API" (declared in <__threading_support>) as the "external" thread
API (basic types are pthread based). An implementation (pthread based) of this
API is provided in test/support/external_threads.cpp, which is built into a
separate DSO and linked in when running the libc++ test suite. A test run
therefore demonstrates the second use case (less the intermediate custom API).

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

Reviewers: bcraig, compnerd, EricWF, mclow.lists
llvm-svn: 281179

7 years ago[ORC] Update examples for header changes in r281171.
Lang Hames [Sun, 11 Sep 2016 21:34:13 +0000 (21:34 +0000)]
[ORC] Update examples for header changes in r281171.

llvm-svn: 281178

7 years agoScalarOpts: Use std::list for Candidates, NFC
Duncan P. N. Exon Smith [Sun, 11 Sep 2016 21:29:34 +0000 (21:29 +0000)]
ScalarOpts: Use std::list for Candidates, NFC

There is nothing intrusive about the Candidate list; use std::list over
llvm::ilist for simplicity.

llvm-svn: 281177

7 years agoScalarOpts: Sort includes, NFC
Duncan P. N. Exon Smith [Sun, 11 Sep 2016 21:04:36 +0000 (21:04 +0000)]
ScalarOpts: Sort includes, NFC

llvm-svn: 281176

7 years agoADT: Remove ilist_iterator::reset(), NFC
Duncan P. N. Exon Smith [Sun, 11 Sep 2016 20:47:27 +0000 (20:47 +0000)]
ADT: Remove ilist_iterator::reset(), NFC

ilist_iterator::reset was unnecessary API, and wasn't any clearer (or
safer) at the call site than constructing a temporary and assigning it
to the iterator.

llvm-svn: 281175

7 years ago[ORC] Fix the RPC unit test for header changes in r281171.
Lang Hames [Sun, 11 Sep 2016 19:12:19 +0000 (19:12 +0000)]
[ORC] Fix the RPC unit test for header changes in r281171.

llvm-svn: 281173

7 years agoCodeGen: Give MachineBasicBlock::reverse_iterator a handle to the current MI
Duncan P. N. Exon Smith [Sun, 11 Sep 2016 18:51:28 +0000 (18:51 +0000)]
CodeGen: Give MachineBasicBlock::reverse_iterator a handle to the current MI

Now that MachineBasicBlock::reverse_instr_iterator knows when it's at
the end (since r281168 and r281170), implement
MachineBasicBlock::reverse_iterator directly on top of an
ilist::reverse_iterator by adding an IsReverse template parameter to
MachineInstrBundleIterator.  This replaces another hard-to-reason-about
use of std::reverse_iterator on list iterators, matching the changes for
ilist::reverse_iterator from r280032 (see the "out of scope" section at
the end of that commit message).  MachineBasicBlock::reverse_iterator
now has a handle to the current node and has obvious invalidation
semantics.

r280032 has a more detailed explanation of how list-style reverse
iterators (invalidated when the pointed-at node is deleted) are
different from vector-style reverse iterators like std::reverse_iterator
(invalidated on every operation).  A great motivating example is this
commit's changes to lib/CodeGen/DeadMachineInstructionElim.cpp.

Note: If your out-of-tree backend deletes instructions while iterating
on a MachineBasicBlock::reverse_iterator or converts between
MachineBasicBlock::iterator and MachineBasicBlock::reverse_iterator,
you'll need to update your code in similar ways to r280032.  The
following table might help:

                  [Old]              ==>             [New]
        delete &*RI, RE = end()                   delete &*RI++
        RI->erase(), RE = end()                   RI++->erase()
      reverse_iterator(I)                 std::prev(I).getReverse()
      reverse_iterator(I)                          ++I.getReverse()
    --reverse_iterator(I)                            I.getReverse()
      reverse_iterator(std::next(I))                 I.getReverse()
                RI.base()                std::prev(RI).getReverse()
                RI.base()                         ++RI.getReverse()
              --RI.base()                           RI.getReverse()
     std::next(RI).base()                           RI.getReverse()

(For more details, have a look at r280032.)

llvm-svn: 281172

7 years ago[ORC] Rename RPCChannel to RPCByteChannel. NFC.
Lang Hames [Sun, 11 Sep 2016 18:41:05 +0000 (18:41 +0000)]
[ORC] Rename RPCChannel to RPCByteChannel. NFC.

llvm-svn: 281171

7 years agoCodeGen: Assert that bundle iterators are valid
Duncan P. N. Exon Smith [Sun, 11 Sep 2016 17:12:28 +0000 (17:12 +0000)]
CodeGen: Assert that bundle iterators are valid

Add an assertion to the MachineInstrBundleIterator from instr_iterator
that the underlying iterator is valid.  This is possible know that we
can check ilist_node::isSentinel (since r281168), and is consistent with
the constructors from MachineInstr* and MachineInstr&.

Avoiding the new assertion in operator== and operator!= requires four
(!!!!) new overloads each.

(As an aside, I'm strongly in favour of:
- making the conversion from instr_iterator explicit;
- making the conversion from pointer explicit;
- making the conversion from reference explicit; and
- removing all the extra overloads of operator== and operator!= except
  const_instr_iterator.

I'm not signing up for that at this point, but being clear about when
something is an MachineInstr-iterator (possibly instr_end()) vs
MachineInstr-bundle-iterator (possibly end()) vs MachineInstr* (possibly
nullptr) vs MachineInstr& (known valid) would surely make code
cleaner... and it would remove a ton of boilerplate from
MachineInstrBundleIterator operators.)

llvm-svn: 281170

7 years agoFix the modules build after r281167
Duncan P. N. Exon Smith [Sun, 11 Sep 2016 17:00:12 +0000 (17:00 +0000)]
Fix the modules build after r281167

Add an #include for <type_traits> to llvm/ADT/ilist_node_options.h to
make it standalone.

llvm-svn: 281169

7 years agoCodeGen: Turn on sentinel tracking for MachineInstr iterators
Duncan P. N. Exon Smith [Sun, 11 Sep 2016 16:38:18 +0000 (16:38 +0000)]
CodeGen: Turn on sentinel tracking for MachineInstr iterators

This is a prep commit before fixing MachineBasicBlock::reverse_iterator
invalidation semantics, ala r281167 for ilist::reverse_iterator.  This
changes MachineBasicBlock::Instructions to track which node is the
sentinel regardless of LLVM_ENABLE_ABI_BREAKING_CHECKS.

There's almost no functionality change (aside from ABI).  However, in
the rare configuration:

    #if !defined(NDEBUG) && !defined(LLVM_ENABLE_ABI_BREAKING_CHECKS)

the isKnownSentinel() assertions in ilist_iterator<>::operator* suddenly
have teeth for MachineInstr.  If these assertions start firing for your
out-of-tree backend, have a look at the suggestions in the commit
message for r279314, and at some of the commits leading up to it that
avoid dereferencing the end() iterator.

llvm-svn: 281168

7 years agoADT: Add sentinel tracking and custom tags to ilists
Duncan P. N. Exon Smith [Sun, 11 Sep 2016 16:20:53 +0000 (16:20 +0000)]
ADT: Add sentinel tracking and custom tags to ilists

This adds two declarative configuration options for intrusive lists
(available for simple_ilist, iplist, and ilist).  Both of these options
affect ilist_node interoperability and need to be passed both to the
node and the list.  Instead of adding a new traits class, they're
specified as optional template parameters (in any order).

The two options:

 1. Pass ilist_sentinel_tracking<true> or ilist_sentinel_tracking<false>
    to control whether there's a bit on ilist_node "prev" pointer
    indicating whether it's the sentinel.  The default behaviour is to
    use a bit if and only if LLVM_ENABLE_ABI_BREAKING_CHECKS.

 2. Pass ilist_tag<TagA> and ilist_tag<TagB> to allow insertion of a
    single node into two different lists (simultaneously).

I have an immediate use-case for (1) ilist_sentinel_tracking: fixing the
validation semantics of MachineBasicBlock::reverse_iterator to match
ilist::reverse_iterator (ala r280032: see the comments at the end of the
commit message there).  I'm adding (2) ilist_tag in the same commit to
validate that the options framework supports expansion.  Justin Bogner
mentioned this might enable a possible cleanup in SelectionDAG, but I'll
leave this to others to explore.  In the meantime, the unit tests and
the comments for simple_ilist and ilist_node have usage examples.

Note that there's a layer of indirection to support optional,
out-of-order, template paramaters.  Internal classes are templated on an
instantiation of the non-variadic ilist_detail::node_options.
User-facing classes use ilist_detail::compute_node_options to compute
the correct instantiation of ilist_detail::node_options.

The comments for ilist_detail::is_valid_option describe how to add new
options (e.g., ilist_packed_int<int NumBits>).

llvm-svn: 281167

7 years agoAdd missing 'REQUIRES' line
Tobias Grosser [Sun, 11 Sep 2016 13:42:42 +0000 (13:42 +0000)]
Add missing 'REQUIRES' line

llvm-svn: 281166

7 years agoGPGPU: Do not fail in case of arrays never accessed
Tobias Grosser [Sun, 11 Sep 2016 13:30:12 +0000 (13:30 +0000)]
GPGPU: Do not fail in case of arrays never accessed

If these arrays have never been accessed we failed to derive an upper bound
of the accesses and consequently a size for the outermost dimension. We
now explicitly check for empty access sets and then just use zero as size
for the outermost dimension.

llvm-svn: 281165

7 years ago[AVX512] Fix pattern for vgetmantsd and all other instructions that use same class...
Igor Breger [Sun, 11 Sep 2016 12:38:46 +0000 (12:38 +0000)]
[AVX512] Fix pattern for vgetmantsd and all other instructions that use same class. Fix memory operand size, remove unnecessary pattern.

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

llvm-svn: 281164

7 years agoFixup failing debuginfo test for change in SimplifyCFG.
James Molloy [Sun, 11 Sep 2016 09:13:32 +0000 (09:13 +0000)]
Fixup failing debuginfo test for change in SimplifyCFG.

This reverts this test back to its original pre-r280364 behaviour as we don't sink allocas any more.

llvm-svn: 281163

7 years ago[SimplifyCFG] Be even more conservative in SinkThenElseCodeToEnd
James Molloy [Sun, 11 Sep 2016 09:00:03 +0000 (09:00 +0000)]
[SimplifyCFG] Be even more conservative in SinkThenElseCodeToEnd

This should *actually* fix PR30244. This cranks up the workaround for PR30188 so that we never sink loads or stores of allocas.

The idea is that these should be removed by SROA/Mem2Reg, and any movement of them may well confuse SROA or just cause unwanted code churn. It's not ideal that the midend should be crippled like this, but that unwanted churn can really cause significant regressions in important workloads (tsan).

llvm-svn: 281162

7 years ago[AArch64] Fixup test after r281160
James Molloy [Sun, 11 Sep 2016 08:24:04 +0000 (08:24 +0000)]
[AArch64] Fixup test after r281160

How I missed this locally is beyond me. I suspect llc didn't recompile. This is just changing the CHECK line back to what it was before r280364.

llvm-svn: 281161

7 years ago[SimplifyCFG] Harden up the profitability heuristic for block splitting during sinking
James Molloy [Sun, 11 Sep 2016 08:07:30 +0000 (08:07 +0000)]
[SimplifyCFG] Harden up the profitability heuristic for block splitting during sinking

Exposed by PR30244, we will split a block currently if we think we can sink at least one instruction. However this isn't right - the reason we split predecessors is so that we can sink instructions that otherwise couldn't be sunk because it isn't safe to do so - stores, for example.

So, change the heuristic to only split if it thinks it can sink at least one non-speculatable instruction.

Should fix PR30244.

llvm-svn: 281160

7 years agoGPURuntime: ensure compilation with C99
Tobias Grosser [Sun, 11 Sep 2016 07:32:50 +0000 (07:32 +0000)]
GPURuntime: ensure compilation with C99

Otherwise, older compiler will error out on some of the C99 features we use.

llvm-svn: 281159

7 years ago[CodeGen] Make the TwoAddressInstructionPass check if the instruction is commutable...
Craig Topper [Sun, 11 Sep 2016 06:00:15 +0000 (06:00 +0000)]
[CodeGen] Make the TwoAddressInstructionPass check if the instruction is commutable before calling findCommutedOpIndices for every operand. Also make sure the operand is a register before each call to save some work on commutable instructions that might have an operand.

llvm-svn: 281158