OSDN Git Service
James Molloy [Tue, 13 Sep 2016 10:28:11 +0000 (10:28 +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).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281314
91177308-0d34-0410-b5e6-
96231b3b80d8
Eric Liu [Tue, 13 Sep 2016 10:05:44 +0000 (10:05 +0000)]
[WebAssembly] Trying to fix broken tests in CodeGen/WebAssembly caused by r281285.
Reviewers: bkramer, ddcc, dschuff, sunfish
Subscribers: jfb, llvm-commits, dschuff
Differential Revision: https://reviews.llvm.org/D24497
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281312
91177308-0d34-0410-b5e6-
96231b3b80d8
Ayman Musa [Tue, 13 Sep 2016 09:12:45 +0000 (09:12 +0000)]
Remove MVT:i1 xor instruction before SELECT. (Performance improvement).
Differential Revision: https://reviews.llvm.org/D23764
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281308
91177308-0d34-0410-b5e6-
96231b3b80d8
Sjoerd Meijer [Tue, 13 Sep 2016 08:51:59 +0000 (08:51 +0000)]
Revert of r281304 as it is causing build bot failures in hexagon
hwloop regression tests. These tests pass locally; will be investigating
where these differences come from.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281306
91177308-0d34-0410-b5e6-
96231b3b80d8
Sjoerd Meijer [Tue, 13 Sep 2016 08:08:06 +0000 (08:08 +0000)]
This adds a new field isAdd to MCInstrDesc. The ARM and Hexagon instruction
descriptions now tag add instructions, and the Hexagon backend is using this to
identify loop induction statements.
Patch by Sam Parker and Sjoerd Meijer.
Differential Revision: https://reviews.llvm.org/D23601
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281304
91177308-0d34-0410-b5e6-
96231b3b80d8
Elena Demikhovsky [Tue, 13 Sep 2016 07:57:00 +0000 (07:57 +0000)]
AVX-512: Fix for PR28175 - Scalar code optimization.
Optimized (truncate (assertzext x) to i1) and anyext i1 to i8/16/32.
Optimization of this patterns is a one more step towards i1 optimization on AVX-512.
Differential Revision: https://reviews.llvm.org/D24456
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281302
91177308-0d34-0410-b5e6-
96231b3b80d8
Diana Picus [Tue, 13 Sep 2016 07:45:17 +0000 (07:45 +0000)]
[AArch64] Support stackmap/patchpoint in getInstSizeInBytes
We currently return 4 for stackmaps and patchpoints, which is very optimistic
and can in rare cases cause the branch relaxation pass to fail to relax certain
branches.
This patch causes getInstSizeInBytes to return a pessimistic estimate of the
size as the number of bytes requested in the stackmap/patchpoint. In the future,
we could provide a more accurate estimate by sharing some of the logic in
AArch64::LowerSTACKMAP/PATCHPOINT.
Fixes part of https://llvm.org/bugs/show_bug.cgi?id=28750
Differential Revision: https://reviews.llvm.org/D24073
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281301
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Tue, 13 Sep 2016 07:40:53 +0000 (07:40 +0000)]
[X86] Remove masked shufpd/shufps intrinsics and autoupgrade to native vector shuffles. They were removed from clang previously but accidentally left in the backend.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281300
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Tue, 13 Sep 2016 07:40:48 +0000 (07:40 +0000)]
[X86] Remove some dead intrinsics. They aren't implemented and clang doesn't reference them.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281299
91177308-0d34-0410-b5e6-
96231b3b80d8
Davide Italiano [Tue, 13 Sep 2016 06:31:37 +0000 (06:31 +0000)]
[Docs] Fix a broken link in the Kaleidoscope tutorial.
Patch by: Alfred Perlstein <alfred@FreeBSD.org>
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281297
91177308-0d34-0410-b5e6-
96231b3b80d8
Davide Italiano [Tue, 13 Sep 2016 06:29:17 +0000 (06:29 +0000)]
[LTO] Only expose the dataLayout string instead of the whole module.
Differential Revision: https://reviews.llvm.org/D24494
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281296
91177308-0d34-0410-b5e6-
96231b3b80d8
Zachary Turner [Tue, 13 Sep 2016 04:11:57 +0000 (04:11 +0000)]
Revert "[Support][CommandLine] Add cl::getRegisteredSubcommands()"
This reverts r281290, as it breaks unit tests.
http://lab.llvm.org:8011/builders/clang-x86-windows-msvc2015/builds/303
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281292
91177308-0d34-0410-b5e6-
96231b3b80d8
Dean Michael Berris [Tue, 13 Sep 2016 02:35:00 +0000 (02:35 +0000)]
[Support][CommandLine] Add cl::getRegisteredSubcommands()
This should allow users of the library to get a range to iterate through
all the subcommands that are registered to the global parser. This
allows users to define subcommands in libraries that self-register to
have dispatch done at a different stage (like main). It allows for
writing code like the following:
for (auto *S : cl::getRegisteredSubcommands()) {
if (*S) {
// Dispatch on S->getName().
}
}
This change also contains tests that show this usage pattern.
Reviewers: zturner, dblaikie, echristo
Subscribers: llvm-commits, mehdi_amini
Differential Revision: https://reviews.llvm.org/D24489
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281290
91177308-0d34-0410-b5e6-
96231b3b80d8
Davide Italiano [Tue, 13 Sep 2016 02:22:02 +0000 (02:22 +0000)]
[lib/LTO] Expose getModule() in lto::InputFile.
lld will use this to get the datalayout string and emit a
diagnostic if empty.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281289
91177308-0d34-0410-b5e6-
96231b3b80d8
Peter Collingbourne [Tue, 13 Sep 2016 01:12:59 +0000 (01:12 +0000)]
DebugInfo: New metadata representation for global variables.
This patch reverses the edge from DIGlobalVariable to GlobalVariable.
This will allow us to more easily preserve debug info metadata when
manipulating global variables.
Fixes PR30362. A program for upgrading test cases is attached to that
bug.
Differential Revision: http://reviews.llvm.org/D20147
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281284
91177308-0d34-0410-b5e6-
96231b3b80d8
Michael Kuperstein [Tue, 13 Sep 2016 00:57:43 +0000 (00:57 +0000)]
[DAG] Refactor BUILD_VECTOR combine to make it easier to extend. NFCI.
This should make it easier to add cases that we currently don't cover,
like supporting more kinds of type mismatches and more than 2 input vectors.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281283
91177308-0d34-0410-b5e6-
96231b3b80d8
Hans Wennborg [Tue, 13 Sep 2016 00:21:32 +0000 (00:21 +0000)]
X86: Conditional tail calls should not have isBarrier = 1
That confuses e.g. machine basic block placement, which then doesn't
realize that control can fall through a block that ends with a conditional
tail call. Instead, isBranch=1 should be set.
Also, mark EFLAGS as used by these instructions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281281
91177308-0d34-0410-b5e6-
96231b3b80d8
Eric Christopher [Tue, 13 Sep 2016 00:19:29 +0000 (00:19 +0000)]
Temporarily Revert "[MC] Defer asm errors to post-statement failure" as it's causing errors on the sanitizer bots.
This reverts commit r281249.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281280
91177308-0d34-0410-b5e6-
96231b3b80d8
Adam Nemet [Mon, 12 Sep 2016 23:46:34 +0000 (23:46 +0000)]
[OptDiag] Add getHotness accessor
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281274
91177308-0d34-0410-b5e6-
96231b3b80d8
Philip Reames [Mon, 12 Sep 2016 22:38:44 +0000 (22:38 +0000)]
[LVI] Complete the abstract of the cache layer [NFCI]
Convert the previous introduced is-a relationship between the LVICache and LVIImple clases into a has-a relationship and hide all the implementation details of the cache from the lazy query layer.
The only slightly concerning change here is removing the addition of a queried block into the SeenBlock set in LVIImpl::getBlockValue. As far as I can tell, this was effectively dead code. I think it *used* to be the case that getCachedValueInfo wasn't const and might end up inserting elements in the cache during lookup. That's no longer true and hasn't been for a while. I did fixup the const usage to make that more obvious.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281272
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Mon, 12 Sep 2016 22:28:29 +0000 (22:28 +0000)]
add more tests for PR30273
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281270
91177308-0d34-0410-b5e6-
96231b3b80d8
Lang Hames [Mon, 12 Sep 2016 22:05:14 +0000 (22:05 +0000)]
[ORC] Clang-format RPCSerialization.h.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281269
91177308-0d34-0410-b5e6-
96231b3b80d8
Lang Hames [Mon, 12 Sep 2016 22:05:12 +0000 (22:05 +0000)]
[ORC] Add some more documentation to RPCSerialization.h.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281268
91177308-0d34-0410-b5e6-
96231b3b80d8
Philip Reames [Mon, 12 Sep 2016 22:03:36 +0000 (22:03 +0000)]
[LVI] Sink a couple more cache manipulation routines into the cache itself [NFCI]
The only interesting bit here is the refactor of the handle callback and even that's pretty straight-forward.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281267
91177308-0d34-0410-b5e6-
96231b3b80d8
Philip Reames [Mon, 12 Sep 2016 21:46:58 +0000 (21:46 +0000)]
[LVI] Abstract out the actual cache logic [NFCI]
Seperate the caching logic from the implementation of the lazy analysis. For the moment, the lazy analysis impl has a is-a relationship with the cache; this will change to a has-a relationship shortly. This was done as two steps merely to keep the changes simple and the diff understandable.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281266
91177308-0d34-0410-b5e6-
96231b3b80d8
Nico Weber [Mon, 12 Sep 2016 21:40:50 +0000 (21:40 +0000)]
Revert r281215, it caused PR30358.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281263
91177308-0d34-0410-b5e6-
96231b3b80d8
Nico Weber [Mon, 12 Sep 2016 21:15:44 +0000 (21:15 +0000)]
attempt to unbreak build after r281254
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281262
91177308-0d34-0410-b5e6-
96231b3b80d8
Lang Hames [Mon, 12 Sep 2016 20:45:01 +0000 (20:45 +0000)]
[ORC] Add missing <thread> header to RPCSerialization.h.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281257
91177308-0d34-0410-b5e6-
96231b3b80d8
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.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281254
91177308-0d34-0410-b5e6-
96231b3b80d8
Dehao Chen [Mon, 12 Sep 2016 20:29:54 +0000 (20:29 +0000)]
Fix the bug introduced in r281252.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281253
91177308-0d34-0410-b5e6-
96231b3b80d8
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
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281252
91177308-0d34-0410-b5e6-
96231b3b80d8
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
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281249
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Mon, 12 Sep 2016 19:50:08 +0000 (19:50 +0000)]
[InstCombine] add test for PR30327
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281248
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Mon, 12 Sep 2016 19:29:26 +0000 (19:29 +0000)]
[InstCombine] regenerate checks
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281247
91177308-0d34-0410-b5e6-
96231b3b80d8
Elena Demikhovsky [Mon, 12 Sep 2016 19:03:21 +0000 (19:03 +0000)]
AVX-512: Added a test for -O0 mode. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281246
91177308-0d34-0410-b5e6-
96231b3b80d8
Elena Demikhovsky [Mon, 12 Sep 2016 18:50:47 +0000 (18:50 +0000)]
AVX-512: Simplified masked_gather_scatter test. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281244
91177308-0d34-0410-b5e6-
96231b3b80d8
Hemant Kulkarni [Mon, 12 Sep 2016 17:40:10 +0000 (17:40 +0000)]
Fix test failure in r281232
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281240
91177308-0d34-0410-b5e6-
96231b3b80d8
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!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281238
91177308-0d34-0410-b5e6-
96231b3b80d8
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
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281233
91177308-0d34-0410-b5e6-
96231b3b80d8
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
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281232
91177308-0d34-0410-b5e6-
96231b3b80d8
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.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281231
91177308-0d34-0410-b5e6-
96231b3b80d8
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
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281230
91177308-0d34-0410-b5e6-
96231b3b80d8
Ahmed Bougacha [Mon, 12 Sep 2016 16:21:49 +0000 (16:21 +0000)]
[GlobalISel] Fix mismatched "<..)" in intrinsic MO printing. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281229
91177308-0d34-0410-b5e6-
96231b3b80d8
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
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281228
91177308-0d34-0410-b5e6-
96231b3b80d8
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.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281224
91177308-0d34-0410-b5e6-
96231b3b80d8
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.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281223
91177308-0d34-0410-b5e6-
96231b3b80d8
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.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281221
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Mon, 12 Sep 2016 15:52:28 +0000 (15:52 +0000)]
fix formatting; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281220
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Mon, 12 Sep 2016 15:51:42 +0000 (15:51 +0000)]
[InstCombine] add tests to show missing vector folds
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281219
91177308-0d34-0410-b5e6-
96231b3b80d8
Igor Breger [Mon, 12 Sep 2016 15:27:02 +0000 (15:27 +0000)]
add select i1 test, reproduser pr30249.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281218
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Mon, 12 Sep 2016 15:24:31 +0000 (15:24 +0000)]
[InstCombine] add helper function for foldICmpUsingKnownBits; NFCI
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281217
91177308-0d34-0410-b5e6-
96231b3b80d8
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
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281216
91177308-0d34-0410-b5e6-
96231b3b80d8
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.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281215
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Mon, 12 Sep 2016 14:25:46 +0000 (14:25 +0000)]
fix formatting/typos; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281214
91177308-0d34-0410-b5e6-
96231b3b80d8
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).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281213
91177308-0d34-0410-b5e6-
96231b3b80d8
Chad Rosier [Mon, 12 Sep 2016 13:24:47 +0000 (13:24 +0000)]
[LoopInterchange] Improve debug output. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281212
91177308-0d34-0410-b5e6-
96231b3b80d8
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
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281211
91177308-0d34-0410-b5e6-
96231b3b80d8
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.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281208
91177308-0d34-0410-b5e6-
96231b3b80d8
Tim Northover [Mon, 12 Sep 2016 12:10:41 +0000 (12:10 +0000)]
GlobalISel: support translation of global addresses.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281207
91177308-0d34-0410-b5e6-
96231b3b80d8
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.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281205
91177308-0d34-0410-b5e6-
96231b3b80d8
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.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281204
91177308-0d34-0410-b5e6-
96231b3b80d8
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
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281201
91177308-0d34-0410-b5e6-
96231b3b80d8
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.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281196
91177308-0d34-0410-b5e6-
96231b3b80d8
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.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281190
91177308-0d34-0410-b5e6-
96231b3b80d8
Duncan P. N. Exon Smith [Mon, 12 Sep 2016 00:17:09 +0000 (00:17 +0000)]
MC: Move MCSection::begin/end to header, NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281188
91177308-0d34-0410-b5e6-
96231b3b80d8
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
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281187
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Mon, 12 Sep 2016 00:12:56 +0000 (00:12 +0000)]
[InstCombine] regenerate checks
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281186
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Mon, 12 Sep 2016 00:08:33 +0000 (00:08 +0000)]
[InstCombine] regenerate checks
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281185
91177308-0d34-0410-b5e6-
96231b3b80d8
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.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281184
91177308-0d34-0410-b5e6-
96231b3b80d8
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.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281183
91177308-0d34-0410-b5e6-
96231b3b80d8
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.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281182
91177308-0d34-0410-b5e6-
96231b3b80d8
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.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281181
91177308-0d34-0410-b5e6-
96231b3b80d8
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.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281180
91177308-0d34-0410-b5e6-
96231b3b80d8
Lang Hames [Sun, 11 Sep 2016 21:34:13 +0000 (21:34 +0000)]
[ORC] Update examples for header changes in r281171.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281178
91177308-0d34-0410-b5e6-
96231b3b80d8
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.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281177
91177308-0d34-0410-b5e6-
96231b3b80d8
Duncan P. N. Exon Smith [Sun, 11 Sep 2016 21:04:36 +0000 (21:04 +0000)]
ScalarOpts: Sort includes, NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281176
91177308-0d34-0410-b5e6-
96231b3b80d8
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.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281175
91177308-0d34-0410-b5e6-
96231b3b80d8
Lang Hames [Sun, 11 Sep 2016 19:12:19 +0000 (19:12 +0000)]
[ORC] Fix the RPC unit test for header changes in r281171.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281173
91177308-0d34-0410-b5e6-
96231b3b80d8
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.)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281172
91177308-0d34-0410-b5e6-
96231b3b80d8
Lang Hames [Sun, 11 Sep 2016 18:41:05 +0000 (18:41 +0000)]
[ORC] Rename RPCChannel to RPCByteChannel. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281171
91177308-0d34-0410-b5e6-
96231b3b80d8
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.)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281170
91177308-0d34-0410-b5e6-
96231b3b80d8
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.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281169
91177308-0d34-0410-b5e6-
96231b3b80d8
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.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281168
91177308-0d34-0410-b5e6-
96231b3b80d8
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>).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281167
91177308-0d34-0410-b5e6-
96231b3b80d8
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
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281164
91177308-0d34-0410-b5e6-
96231b3b80d8
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.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281163
91177308-0d34-0410-b5e6-
96231b3b80d8
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).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281162
91177308-0d34-0410-b5e6-
96231b3b80d8
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.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281161
91177308-0d34-0410-b5e6-
96231b3b80d8
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.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281160
91177308-0d34-0410-b5e6-
96231b3b80d8
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.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281158
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sun, 11 Sep 2016 05:33:43 +0000 (05:33 +0000)]
[AVX-512] Add test cases to demonstrate opportunities for commuting vpternlog. Commuting will be added in a future commit.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281157
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sun, 11 Sep 2016 05:33:40 +0000 (05:33 +0000)]
[AVX-512] Add VPTERNLOG to load folding tables.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281156
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sun, 11 Sep 2016 05:33:38 +0000 (05:33 +0000)]
[X86] Side effecting asm in AVX512 integer stack folding test should return 2 x i64 not 8 x i64.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281155
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sun, 11 Sep 2016 05:33:35 +0000 (05:33 +0000)]
[X86] Make a helper method into a static function local to the cpp file.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281154
91177308-0d34-0410-b5e6-
96231b3b80d8
Justin Lebar [Sun, 11 Sep 2016 01:39:08 +0000 (01:39 +0000)]
Add handling of !invariant.load to PropagateMetadata.
Summary:
This will let e.g. the load/store vectorizer propagate this metadata
appropriately.
Reviewers: arsenm
Subscribers: tra, jholewinski, hfinkel, mzolotukhin
Differential Revision: https://reviews.llvm.org/D23479
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281153
91177308-0d34-0410-b5e6-
96231b3b80d8
Justin Lebar [Sun, 11 Sep 2016 01:39:04 +0000 (01:39 +0000)]
[NVPTX] Use ldg for explicitly invariant loads.
Summary:
With this change (plus some changes to prevent !invariant from being
clobbered within llvm), clang will be able to model the __ldg CUDA
builtin as an invariant load, rather than as a target-specific llvm
intrinsic. This will let the optimizer play with these loads --
specifically, we should be able to vectorize them in the load-store
vectorizer.
Reviewers: tra
Subscribers: jholewinski, hfinkel, llvm-commits, chandlerc
Differential Revision: https://reviews.llvm.org/D23477
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281152
91177308-0d34-0410-b5e6-
96231b3b80d8
Justin Lebar [Sun, 11 Sep 2016 01:38:58 +0000 (01:38 +0000)]
[CodeGen] Split out the notions of MI invariance and MI dereferenceability.
Summary:
An IR load can be invariant, dereferenceable, neither, or both. But
currently, MI's notion of invariance is IR-invariant &&
IR-dereferenceable.
This patch splits up the notions of invariance and dereferenceability at
the MI level. It's NFC, so adds some probably-unnecessary
"is-dereferenceable" checks, which we can remove later if desired.
Reviewers: chandlerc, tstellarAMD
Subscribers: jholewinski, arsenm, nemanjai, llvm-commits
Differential Revision: https://reviews.llvm.org/D23371
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281151
91177308-0d34-0410-b5e6-
96231b3b80d8
Sjoerd Meijer [Sat, 10 Sep 2016 20:54:19 +0000 (20:54 +0000)]
MCInstrDesc: Flags (uint64_t) was checked using (1 << MCID::XYZ), but this
should have been (1ULL << MCID::XYZ). Currently this works because enum Flag
has 31 values, but extending it will result in a compile warnings/errors.
This was part of the accepted patch in https://reviews.llvm.org/D23601, but
it was suggested to apply this first as a separate patch.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281149
91177308-0d34-0410-b5e6-
96231b3b80d8
Arnold Schwaighofer [Sat, 10 Sep 2016 19:42:53 +0000 (19:42 +0000)]
It should also be legal to pass a swifterror parameter to a call as a swifterror
argument.
rdar://
28233388
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281147
91177308-0d34-0410-b5e6-
96231b3b80d8
Vedant Kumar [Sat, 10 Sep 2016 19:37:26 +0000 (19:37 +0000)]
[llvm-cov] Move the 'jump to first unexecuted line' link
Having it in the same row as the source name is jarring. Move it next to
the "Source" column label.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281146
91177308-0d34-0410-b5e6-
96231b3b80d8