Aaron Ballman [Wed, 13 Aug 2014 10:49:07 +0000 (10:49 +0000)]
Silence a -Wparenthesis warning with these asserts. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215537
91177308-0d34-0410-b5e6-
96231b3b80d8
Robert Khasanov [Wed, 13 Aug 2014 10:46:00 +0000 (10:46 +0000)]
[SKX] Extended non-temporal load/store instructions for AVX512VL subsets.
Added avx512_movnt_vl multiclass for handling 256/128-bit forms of instruction.
Added encoding and lowering tests.
Reviewed by Elena Demikhovsky <elena.demikhovsky@intel.com>
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215536
91177308-0d34-0410-b5e6-
96231b3b80d8
Daniel Sanders [Wed, 13 Aug 2014 10:07:34 +0000 (10:07 +0000)]
Re-commit: [mips] Implement .ent, .end, .frame, .mask and .fmask.
Patch by Matheus Almeida and Toma Tabacu
The lld test failure on the previous attempt to commit was caused by the
addition of the .pdr section causing the offsets it was checking to change.
This has been fixed by removing the .ent/.end directives from that test since
they weren't really needed.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215535
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Wed, 13 Aug 2014 10:00:46 +0000 (10:00 +0000)]
[shuffle] Make the seed an optional component and add support for
letting the python very directly compute a UUID.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215533
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Wed, 13 Aug 2014 09:19:39 +0000 (09:19 +0000)]
Revert r215415 which causse MSan to crash on a great deal of C++ code.
I've followed up on the original commit as well.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215532
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Wed, 13 Aug 2014 09:05:59 +0000 (09:05 +0000)]
[shuffle] Teach the shuffle fuzzer to fuzz blends, including forming
a tree of inputs to blend iteratively together.
This required a pretty substantial rewrite of the innards. The number of
shuffle instructions is now bounded in terms of tree-height. There is
a flag to disable blends so that its still possible to test single input
shuffles. I've also improved various aspects of how the test program is
generated, primarily to simplify the test harness and allow some
optimizations to clean up how we actually check the results and build up
the inputs.
Again, apologies for my likely horrible use of Python... But hey, it
works! (Ish?)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215530
91177308-0d34-0410-b5e6-
96231b3b80d8
Elena Demikhovsky [Wed, 13 Aug 2014 07:58:43 +0000 (07:58 +0000)]
AVX-512: Fixed a bug in shufflevector lowering.
PALIGNR instruction does not exist in AVX-512F set.
Added a test.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215526
91177308-0d34-0410-b5e6-
96231b3b80d8
Karthik Bhat [Wed, 13 Aug 2014 05:13:14 +0000 (05:13 +0000)]
InstCombine: Combine (xor (or %a, %b) (xor %a, %b)) to (add %a, %b)
Correctness proof of the transform using CVC3-
$ cat t.cvc
A, B : BITVECTOR(32);
QUERY BVXOR(A | B, BVXOR(A,B) ) = A & B;
$ cvc3 t.cvc
Valid.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215524
91177308-0d34-0410-b5e6-
96231b3b80d8
Hal Finkel [Wed, 13 Aug 2014 04:59:51 +0000 (04:59 +0000)]
[NVPTX] Remove MemIntrinsicSDNode/MemSDNode duplicate checking
As of r214452, isa<MemSDNode> will return true for nodes for which
isa<MemIntrinsicSDNode> will return true (classof now respects the actual class
hierarchy). So we no longer need to check for both MemIntrinsicSDNode and
MemSDNode separately.
No functionality change intended.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215523
91177308-0d34-0410-b5e6-
96231b3b80d8
Nick Lewycky [Wed, 13 Aug 2014 04:54:05 +0000 (04:54 +0000)]
Fix examples of "named metadata" (some of which isn't named).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215522
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Wed, 13 Aug 2014 03:21:11 +0000 (03:21 +0000)]
[shuffle] Tweak the shuffle fuzzer to support bigger seeds. I'm
currently using UUIDs to seed this in order to scan a bigger range.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215521
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Wed, 13 Aug 2014 01:25:45 +0000 (01:25 +0000)]
[x86] Rewrite a core part of the new vector shuffle lowering to handle
one pesky test case correctly.
This test case caused the old code to infloop occilating between solving
the low-half and the high-half. The 'side balancing' part of
single-input v8 shuffle lowering didn't handle the one pattern which can
cause it to occilate. Fortunately the fuzz testing found this case.
Unfortuately it was *terrible* to handle. I'm really sorry for the
amount and density of the code here, I'd love suggestions on how to
simplify it. I feel like there *must* be a simpler form here, but after
a lot of days I've not found it. This is the only one I've found that
even works. I've added the one pesky test case along with some nice
comments explaining the core problem that we have to solve here.
So far this has survived approximately 32k test cases. More strenuous
fuzzing commencing.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215519
91177308-0d34-0410-b5e6-
96231b3b80d8
Hal Finkel [Wed, 13 Aug 2014 01:15:40 +0000 (01:15 +0000)]
[PowerPC] Implement PPCTargetLowering::getTgtMemIntrinsic
This implements PPCTargetLowering::getTgtMemIntrinsic for Altivec load/store
intrinsics. As with the construction of the MachineMemOperands for the
intrinsic calls used for unaligned load/store lowering, the only slight
complication is that we need to represent a larger memory range than the
loaded/stored value-type size (because the address is rounded down to an
aligned address, and we need to conservatively represent the entire possible
range of the actual access). This required adding an extra size field to
TargetLowering::IntrinsicInfo, and this was done in a way that required no
modifications to other targets (the size defaults to the store size of the
provided memory data type).
This fixes test/CodeGen/PowerPC/unal-altivec-wint.ll (so it can be un-XFAILed).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215512
91177308-0d34-0410-b5e6-
96231b3b80d8
Hal Finkel [Wed, 13 Aug 2014 01:15:37 +0000 (01:15 +0000)]
Fix classof for ISD::INTRINSIC_W_CHAIN and INTRINSIC_VOID
Unfortunately, our use of the SDNode class hierarchy for INTRINSIC_W_CHAIN and
INTRINSIC_VOID nodes is somewhat broken right now. These nodes sometimes are
used for memory intrinsics (those with MachineMemOperands), and sometimes not.
When not, the nodes are not created as instances of MemIntrinsicSDNode, but
rather created as some other subclass of SDNode using DAG::getNode. When they
are memory intrinsics, they are created using DAG::getMemIntrinsicNode as
instances of MemIntrinsicSDNode. MemIntrinsicSDNode is a subclass of
MemSDNode, but prior to r214452, we had a non-self-consistent setup whereby
MemIntrinsicSDNode::classof on INTRINSIC_W_CHAIN and INTRINSIC_VOID would
return true but MemSDNode::classof on INTRINSIC_W_CHAIN and INTRINSIC_VOID
would return false. In r214452, MemSDNode::classof was changed to return true
for INTRINSIC_W_CHAIN and INTRINSIC_VOID, which is now self-consistent. The
problem is that neither the pre-r214452 logic and the post-r214452 logic are
really right. The truth is that not all INTRINSIC_W_CHAIN and INTRINSIC_VOID
nodes are instances of MemIntrinsicSDNode (or MemSDNode for that matter), and
the return value from classof needs to reflect that. This was broken before
r214452 (because MemIntrinsicSDNode::classof always returned true), and was
broken afterward (because MemSDNode::classof also always returned true), and
will now be correct.
The minimal solution is to grab one of the SubclassData bits (there is one left
for MemIntrinsicSDNode nodes) and use it to store whether or not a particular
INTRINSIC_W_CHAIN or INTRINSIC_VOID is really an instance of
MemIntrinsicSDNode or not. Doing this allows both MemIntrinsicSDNode::classof
and MemSDNode::classof to return the correct answer for the underlying object
for both the memory-intrinsic and non-memory-intrinsic cases.
This fixes the problem that r214452 created in the SelectionDAGDumper (thanks
to Matt Arsenault for pointing it out).
Because PowerPC does not implement getTgtMemIntrinsic, this change breaks
test/CodeGen/PowerPC/unal-altivec-wint.ll. I've XFAILed it for now, and will
fix it in a follow-up commit.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215511
91177308-0d34-0410-b5e6-
96231b3b80d8
Adam Nemet [Wed, 13 Aug 2014 00:30:05 +0000 (00:30 +0000)]
[AVX512] Verify the code generated for the intrinsic _mm512_broadcastsd_pd
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215487
91177308-0d34-0410-b5e6-
96231b3b80d8
David Blaikie [Tue, 12 Aug 2014 23:23:05 +0000 (23:23 +0000)]
Fix -Wsign-compare warnings
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215483
91177308-0d34-0410-b5e6-
96231b3b80d8
Reid Kleckner [Tue, 12 Aug 2014 22:01:39 +0000 (22:01 +0000)]
APInt: Make self-move-assignment a no-op to fix stage3 clang-cl
It's not clear what the semantics of a self-move should be. The
consensus appears to be that a self-move should leave the object in a
moved-from state, which is what our existing move assignment operator
does.
However, the MSVC 2013 STL will perform self-moves in some cases. In
particular, when doing a std::stable_sort of an already sorted APSInt
vector of an appropriate size, one of the merge steps will self-move
half of the elements.
We don't notice this when building with MSVC, because MSVC will not
synthesize the move assignment operator for APSInt. Presumably MSVC
does this because APInt, the base class, has user-declared special
members that implicitly delete move special members. Instead, MSVC
selects the copy-assign operator, which defends against self-assignment.
Clang, on the other hand, selects the move-assign operator, and we get
garbage APInts.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215478
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Tue, 12 Aug 2014 21:55:58 +0000 (21:55 +0000)]
Remove a condition that can never be true, as wittnessed by the assert
above.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215477
91177308-0d34-0410-b5e6-
96231b3b80d8
Adam Nemet [Tue, 12 Aug 2014 21:13:12 +0000 (21:13 +0000)]
[AVX512] Handle valign masking intrinsic via C++ lowering
I think that this will scale better in most cases than adding a Pat<> for each
mapping from the intrinsic DAG to the intruction (i.e. rri, rrik, rrikz). We
can just lower to the SDNode and have the resulting DAG be matches by the DAG
patterns.
Alternatively (long term), we could keep the Pat<>s but generate them via the
new AVX512_masking multiclass. The difficulty is that in order to formulate
that we would have to concatenate DAGs. Currently this is only supported if
the operators of the input DAGs are identical.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215473
91177308-0d34-0410-b5e6-
96231b3b80d8
Matt Arsenault [Tue, 12 Aug 2014 19:46:13 +0000 (19:46 +0000)]
Allwo bitcast + struct GEP transform to work with addrspacecast
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215467
91177308-0d34-0410-b5e6-
96231b3b80d8
Jan Vesely [Tue, 12 Aug 2014 17:31:20 +0000 (17:31 +0000)]
R600: Use optimized 24bit path in udivrem
v2: drop enum keyword
use correct extension mode
don't bother computing the sign in unsinged case
Signed-off-by: Jan Vesely <jan.vesely@rutgers.edu>
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215462
91177308-0d34-0410-b5e6-
96231b3b80d8
Jan Vesely [Tue, 12 Aug 2014 17:31:19 +0000 (17:31 +0000)]
R600: Remove unused code.
Signed-off-by: Jan Vesely <jan.vesely@rutgers.edu>
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215461
91177308-0d34-0410-b5e6-
96231b3b80d8
Jan Vesely [Tue, 12 Aug 2014 17:31:17 +0000 (17:31 +0000)]
R600: Use i24 optimized path for SREM
v2: add tests
rename LowerSDIV24 to LowerSDIVREM24
handle the rem part in this function
Signed-off-by: Jan Vesely <jan.vesely@rutgers.edu>
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215460
91177308-0d34-0410-b5e6-
96231b3b80d8
Quentin Colombet [Tue, 12 Aug 2014 17:11:26 +0000 (17:11 +0000)]
Fix a parentheses warning introduced in r215394.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215459
91177308-0d34-0410-b5e6-
96231b3b80d8
Duncan P. N. Exon Smith [Tue, 12 Aug 2014 16:46:37 +0000 (16:46 +0000)]
Don't upgrade global constructors when reading bitcode
An optional third field was added to `llvm.global_ctors` (and
`llvm.global_dtors`) in r209015. Most of the code has been changed to
deal with both versions of the variables. Users of the C API might
create either version, the helper functions in LLVM create the two-field
version, and clang now creates the three-field version.
However, the BitcodeReader was changed to always upgrade to the
three-field version. This created an unnecessary inconsistency in the
IR before/after serializing to bitcode.
This commit resolves the inconsistency by making the third field truly
optional (and not upgrading in the bitcode reader). Since `llvm-link`
was relying on this upgrade code, rather than deleting it I've moved it
into `ModuleLinker`, where it upgrades these arrays as necessary to
resolve inconsistencies between modules.
The ideal resolution would be to remove the 2-field version and make the
third field required. I filed PR20506 to track that.
I changed `test/Bitcode/upgrade-global-ctors.ll` to a negative test and
duplicated the `llvm-link` check in `test/Linker/global_ctors.ll` to
check both upgrade directions.
Since I came across this as part of PR5680 (serializing use-list order),
I've also added the missing `verify-uselistorder` RUN line to
`test/Bitcode/metadata-2.ll`.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215457
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Tue, 12 Aug 2014 16:00:06 +0000 (16:00 +0000)]
fixed typos
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215451
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Tue, 12 Aug 2014 15:55:27 +0000 (15:55 +0000)]
Make the test a bit more strict.
Before it would pass even if @b or @c ended up pointing to a variable named
@a123.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215450
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Tue, 12 Aug 2014 15:39:14 +0000 (15:39 +0000)]
Add a plugin testcase for merging weak variables.
I initially thought I could implement COMDATs with aliases by just
internalizing GVs instead of dropping them. This is a counter
example: Internalizing one of the @a would make @b and @c point
to different variables.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215447
91177308-0d34-0410-b5e6-
96231b3b80d8
NAKAMURA Takumi [Tue, 12 Aug 2014 14:06:21 +0000 (14:06 +0000)]
llvm/test/TableGen/*Foreach*.td: Remove XFAIL:vg_leak. They have not been failing since r215176.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215445
91177308-0d34-0410-b5e6-
96231b3b80d8
Toma Tabacu [Tue, 12 Aug 2014 12:41:44 +0000 (12:41 +0000)]
Reverted my "Testing commit access" commit.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215441
91177308-0d34-0410-b5e6-
96231b3b80d8
Toma Tabacu [Tue, 12 Aug 2014 12:29:40 +0000 (12:29 +0000)]
Testing commit access.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215440
91177308-0d34-0410-b5e6-
96231b3b80d8
Tim Northover [Tue, 12 Aug 2014 11:52:59 +0000 (11:52 +0000)]
llvm-objdump: print contents of MachO __unwind_info sections
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215437
91177308-0d34-0410-b5e6-
96231b3b80d8
Eric Christopher [Tue, 12 Aug 2014 08:00:56 +0000 (08:00 +0000)]
Have MachineRegisterInfo take and store the MachineFunction it
was created for rather than the TargetMachine since we only
needed the TM for the subtarget and we can get that from the
MF.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215432
91177308-0d34-0410-b5e6-
96231b3b80d8
Gerolf Hoflehner [Tue, 12 Aug 2014 07:54:12 +0000 (07:54 +0000)]
[MachineCombiner] Fix for ICE bug 20598
The combiner ignored DBG nodes when checking
the uses of a virtual register.
It combined a sequence like
%vreg1 = madd %vreg2, %vreg3,...
DBG_VALUE (%vreg1 ...)
%vreg4 = add %vreg1,...
to
%vreg4 = madd %vreg2, %vreg3
leaving behind a dangling DBG_VALUE with
a definition. This triggered an assertion
in the MachineTraceMetrics.cpp module.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215431
91177308-0d34-0410-b5e6-
96231b3b80d8
Justin Bogner [Tue, 12 Aug 2014 03:24:59 +0000 (03:24 +0000)]
IR: Print a newline when dumping Types
Type::dump() doesn't print a newline, which makes for a poor
experience in a debugger. This looks like it was an ommission
considering Value::dump() two lines above, so I've changed Type to add
a newline as well.
Of the two in-tree callers, one added a newline anyway, and I've
updated the other one to use Type::print instead.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215421
91177308-0d34-0410-b5e6-
96231b3b80d8
Peter Zotov [Tue, 12 Aug 2014 02:55:45 +0000 (02:55 +0000)]
[OCaml] Expose Llvm.get_operand_use.
Patch by Gabriel Radanne <drupyog@zoho.com>
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215420
91177308-0d34-0410-b5e6-
96231b3b80d8
Peter Zotov [Tue, 12 Aug 2014 02:55:40 +0000 (02:55 +0000)]
[LLVM-C] Expose User::getOperandUse as LLVMGetOperandUse.
Patch by Gabriel Radanne <drupyog@zoho.com>
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215419
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Tue, 12 Aug 2014 01:07:53 +0000 (01:07 +0000)]
DebugLocEntry: Restore the comparison predicate from before the
refactoring in 215384. This way it can unique multiple entries describing
the same piece even if they don't have the exact same location.
(The same piece may get merged in and be added from OpenRanges).
There ought to be a more elegant solution for this, though.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215418
91177308-0d34-0410-b5e6-
96231b3b80d8
Reid Kleckner [Tue, 12 Aug 2014 00:12:43 +0000 (00:12 +0000)]
msan: Handle musttail calls
First, avoid calling setTailCall(false) on musttail calls. The funciton
prototypes should be "congruent", so the shadow layout should be exactly
the same.
Second, avoid inserting instrumentation after a musttail call to
propagate the return value shadow. We don't need to propagate the
result of a tail call, it should already be in the right place.
Reviewed By: eugenis
Differential Revision: http://reviews.llvm.org/D4331
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215415
91177308-0d34-0410-b5e6-
96231b3b80d8
Reid Kleckner [Tue, 12 Aug 2014 00:05:15 +0000 (00:05 +0000)]
Move helper for getting a terminating musttail call to BasicBlock
No functional change. To be used in future commits that need to look
for such instructions.
Reviewed By: rafael
Differential Revision: http://reviews.llvm.org/D4504
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215413
91177308-0d34-0410-b5e6-
96231b3b80d8
David Blaikie [Tue, 12 Aug 2014 00:00:31 +0000 (00:00 +0000)]
Revert "Partially revert r214761 that asserted that all concrete debug info variables had DIEs, due to a failure on Darwin."
I believe this was addressed by r215157 and r215227, so let's have
another go at the bots, etc.
This reverts commit r214880.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215412
91177308-0d34-0410-b5e6-
96231b3b80d8
Quentin Colombet [Mon, 11 Aug 2014 23:52:01 +0000 (23:52 +0000)]
[MachineSink] Improve the compile time by preserving the dominance information
as long as possible.
** Context **
Each time the dominance information is modified, the dominator tree analysis
switches in a slow query mode. After a few queries without any modification on
the dominator tree, it performs an expensive update of its internal structure to
provide fast queries again.
** Problem **
Prior to this patch, the MachineSink pass was splitting the critical edges on
demand while relying heavy on the dominator tree information. In some cases,
this leads to pathological behavior where:
- We end up in the slow query mode right after splitting an edge.
- We update the dominance information.
- We break the dominance information again, thus ending up in the slow query
mode and so on.
** Proposed Solution **
To mitigate this effect, this patch postpones all the splitting of the edges at
the end of each iteration of the main loop.
The benefits are:
- The dominance information is valid for the life time of an iteration.
- This simplifies the code as we do not have to special treat instructions that
are sunk on critical edges. Indeed, the related block will be available
through the next iteration.
The downside is that when edges splitting is required, this incurs an additional
iteration of the main loop compared to the previous scheme.
** Performance **
Thanks to this patch, the motivating example compiles in 6+ minutes instead of
10+ minutes. No test case added as the motivating example as nothing special but
being huge!
I have measured only noise for both the compile time and the runtime on the llvm
test-suite + SPECs with Os and O3.
Note: The current implementation of MachineBasicBlock::SplitCriticalEdge also
uses the dominance information and therefore, hits this problem. A subsequent
patch will address that.
<rdar://problem/
17894619>
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215410
91177308-0d34-0410-b5e6-
96231b3b80d8
Michael J. Spencer [Mon, 11 Aug 2014 23:49:33 +0000 (23:49 +0000)]
[x86] Fold extract_vector_elt of a load into the Load's address computation.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215409
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Mon, 11 Aug 2014 23:22:59 +0000 (23:22 +0000)]
Add a couple of convenience accessors to DebugLocEntry::Value to further
simplify common usage patterns.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215407
91177308-0d34-0410-b5e6-
96231b3b80d8
NAKAMURA Takumi [Mon, 11 Aug 2014 23:03:38 +0000 (23:03 +0000)]
R600/SIInstrInfo.cpp: Suppress an warning. [-Wunused-variable]
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215406
91177308-0d34-0410-b5e6-
96231b3b80d8
Quentin Colombet [Mon, 11 Aug 2014 22:56:22 +0000 (22:56 +0000)]
[ARM] Mark VMOVDRR with the RegSequence property and implement the related
target hook.
This patch teaches the compiler that:
dX = VMOVDRR rY, rZ
is the same as:
dX = REG_SEQUENCE rY, ssub_0, rZ, ssub_1
<rdar://problem/
12702965>
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215404
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Mon, 11 Aug 2014 22:52:56 +0000 (22:52 +0000)]
Make these DebugLocEntry::Value comparison operators friend functions
as suggested by dblaikie in a comment on r215384.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215403
91177308-0d34-0410-b5e6-
96231b3b80d8
Jim Grosbach [Mon, 11 Aug 2014 22:42:31 +0000 (22:42 +0000)]
Add missing closing namespace comment.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215402
91177308-0d34-0410-b5e6-
96231b3b80d8
Jim Grosbach [Mon, 11 Aug 2014 22:42:28 +0000 (22:42 +0000)]
AArch64: Tidy up a few comments.
Have the comments match the actual parameter names. Found via clang-tidy.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215401
91177308-0d34-0410-b5e6-
96231b3b80d8
David Majnemer [Mon, 11 Aug 2014 22:32:02 +0000 (22:32 +0000)]
InstCombine: Combine (add (and %a, %b) (or %a, %b)) to (add %a, %b)
What follows bellow is a correctness proof of the transform using CVC3.
$ < t.cvc
A, B : BITVECTOR(32);
QUERY BVPLUS(32, A & B, A | B) = BVPLUS(32, A, B);
$ cvc3 < t.cvc
Valid.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215400
91177308-0d34-0410-b5e6-
96231b3b80d8
Tom Stellard [Mon, 11 Aug 2014 22:18:17 +0000 (22:18 +0000)]
R600/SI: Add a ComplexPattern for selecting MUBUF _OFFSET variant
This saves us from having to copy a 64-bit 0 value into VGPRs for
BUFFER_* instruction which only have a 12-bit immediate offset.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215399
91177308-0d34-0410-b5e6-
96231b3b80d8
Tom Stellard [Mon, 11 Aug 2014 22:18:14 +0000 (22:18 +0000)]
R600/SI: Add an _OFFEN variant MUBUF_STORE_* and use it for scratch writes
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215398
91177308-0d34-0410-b5e6-
96231b3b80d8
Tom Stellard [Mon, 11 Aug 2014 22:18:11 +0000 (22:18 +0000)]
R600/SI: Add check for low 32 bits of encoding to mubuf tests
There are no variable values like registers encoded in the low 32 bits of MUBUF
instructions, so it is relatively easy to check these bits, and it will
help prevent us from introducing encoding bugs.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215397
91177308-0d34-0410-b5e6-
96231b3b80d8
Tom Stellard [Mon, 11 Aug 2014 22:18:09 +0000 (22:18 +0000)]
R600/SI: Clear lds bit on MUBUF instructions used for private stores
This bit was left uninitialized, which was causing some random failures
of piglit tests.
NOTE: This is a candidate for the 3.5 branch.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215396
91177308-0d34-0410-b5e6-
96231b3b80d8
Tom Stellard [Mon, 11 Aug 2014 22:18:05 +0000 (22:18 +0000)]
R600/SI: Fix broken test
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215395
91177308-0d34-0410-b5e6-
96231b3b80d8
Quentin Colombet [Mon, 11 Aug 2014 22:17:14 +0000 (22:17 +0000)]
Add isRegSequence property.
This patch adds a new property: isRegSequence and the related target hooks:
TargetIntrInfo::getRegSequenceInputs and
TargetInstrInfo::getRegSequenceLikeInputs to specify that a target specific
instruction is a (kind of) REG_SEQUENCE.
<rdar://problem/
12702965>
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215394
91177308-0d34-0410-b5e6-
96231b3b80d8
Quentin Colombet [Mon, 11 Aug 2014 21:39:53 +0000 (21:39 +0000)]
[AArch64] Fix registerAllocator assigns same register for base and wback in
pre/post-index load and store.
Patch by Steven Wu <stevenwu@apple.com>
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215390
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Mon, 11 Aug 2014 21:06:03 +0000 (21:06 +0000)]
Debug info: Remove an obsolete constructor from DebugLocEntry.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215387
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Mon, 11 Aug 2014 21:06:00 +0000 (21:06 +0000)]
Debug info: Modify DebugLocEntry::addValue to take multiple values so it
only has to sort/unique values once per batch.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215386
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Mon, 11 Aug 2014 21:05:57 +0000 (21:05 +0000)]
Debug info: Further simplify the implementation of buildLocationList by
getting rid of the redundant DIVariable in the OpenRanges pair.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215385
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Mon, 11 Aug 2014 21:05:55 +0000 (21:05 +0000)]
Debug Info: Move the sorting and uniqueing of pieces from emitLocPieces()
into buildLocationList(). By keeping the list of Values sorted,
DebugLocEntry::Merge can also merge multi-piece entries.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215384
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Mon, 11 Aug 2014 20:59:28 +0000 (20:59 +0000)]
Debug info: Refactor DebugLocEntry's Merge function to make
buildLocationLists easier to read.
The previous implementation conflated the merging of individual pieces
and the merging of entire DebugLocEntries.
By splitting this functionality into two separate functions the intention
of the code should be clearer.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215383
91177308-0d34-0410-b5e6-
96231b3b80d8
Saleem Abdulrasool [Mon, 11 Aug 2014 20:13:25 +0000 (20:13 +0000)]
ARM: try harder to detect non-IT eligible instructions
For many Thumb-1 register register instructions, setting the CPSR is not
permitted inside an IT block. We would not correctly flag those instructions.
The previous change to identify this scenario was insufficient as it did not
actually catch all the instances. The current list is formed by manual
inspection of the ARMv6M ARM.
The change to the Thumb2 IT block test is due to the fact that the new more
stringent checking of the MIs results in the If Conversion pass being prevented
from executing (since not all the instructions in the BB are predicable). This
results in code gen changes.
Thanks to Tim Northover for pointing out that the previous patch was
insufficient and hinting that the use of the v6M ARM would be much easier to use
than the v7 or v8!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215382
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Mon, 11 Aug 2014 19:06:54 +0000 (19:06 +0000)]
Fix using -plugin-opt=apiflie when also using -plugin-opt=emit-llvm.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215378
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Mon, 11 Aug 2014 19:04:28 +0000 (19:04 +0000)]
Correct a missing RUN line in the ARM codegen test for fneg ops. We should also explicitly specify +/-neonfp.
The bug was introduced at r99570 when use of "-arm-use-neon-fp" was removed.
Differential Revision: http://reviews.llvm.org/D4846
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215377
91177308-0d34-0410-b5e6-
96231b3b80d8
Reid Kleckner [Mon, 11 Aug 2014 18:34:54 +0000 (18:34 +0000)]
Add missing test for r215031
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215374
91177308-0d34-0410-b5e6-
96231b3b80d8
Reid Kleckner [Mon, 11 Aug 2014 18:34:43 +0000 (18:34 +0000)]
MC: Diagnose an unexpected token in COFF .section instead of asserting
This can easily arise when trying to assemble and ELF style .section
directive for a COFF object file.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215373
91177308-0d34-0410-b5e6-
96231b3b80d8
Sylvestre Ledru [Mon, 11 Aug 2014 18:04:46 +0000 (18:04 +0000)]
Fix typos:
* libaries => libraries
* avaiable => available
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215366
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Mon, 11 Aug 2014 17:07:34 +0000 (17:07 +0000)]
Fix use of uninitialized variable.
Fixes linking bitcode files that use the new style comdats for constructors
with ones that don't.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215364
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Mon, 11 Aug 2014 16:55:42 +0000 (16:55 +0000)]
Use an early return. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215363
91177308-0d34-0410-b5e6-
96231b3b80d8
Daniel Sanders [Mon, 11 Aug 2014 16:10:19 +0000 (16:10 +0000)]
Revert r215359 - [mips] Implement .ent, .end, .frame, .mask and .fmask assembler directives
It seems to cause an lld test (elf/Mips/hilo16-3.test) to fail. Reverted while we investigate.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215361
91177308-0d34-0410-b5e6-
96231b3b80d8
Daniel Sanders [Mon, 11 Aug 2014 15:28:56 +0000 (15:28 +0000)]
[mips] Implement .ent, .end, .frame, .mask and .fmask assembler directives
Patch by Matheus Almeida and Toma Tabacu
Differential Revision: http://reviews.llvm.org/D4179
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215359
91177308-0d34-0410-b5e6-
96231b3b80d8
Hans Wennborg [Mon, 11 Aug 2014 13:52:46 +0000 (13:52 +0000)]
PeepholeOptimizer: make parameter ref to SmallPtrSetImpl
This makes the function type independent of the in-line size
of LocalMIs.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215356
91177308-0d34-0410-b5e6-
96231b3b80d8
Hans Wennborg [Mon, 11 Aug 2014 13:47:57 +0000 (13:47 +0000)]
Make this SmallVector size a power of two as suggested by Chandler
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215355
91177308-0d34-0410-b5e6-
96231b3b80d8
Tim Northover [Mon, 11 Aug 2014 10:10:27 +0000 (10:10 +0000)]
AArch64: add support for dynamic-loader relocations
LLD needs them, and it's good to be able to print them properly when
our object dumpers encounter them.
Patch by Daniel Stewart.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215352
91177308-0d34-0410-b5e6-
96231b3b80d8
Elena Demikhovsky [Mon, 11 Aug 2014 09:59:08 +0000 (09:59 +0000)]
AVX-512: added a missing bitcast from v16f32 to v16i32
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215351
91177308-0d34-0410-b5e6-
96231b3b80d8
Tim Northover [Mon, 11 Aug 2014 09:53:07 +0000 (09:53 +0000)]
llvm-readobj: zero out timestamp in COFF auto-generated test files.
The timestamp meant these files changed with each invocation of
relocs.py, confusing matters when we add relocations and need to
update the tests.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215350
91177308-0d34-0410-b5e6-
96231b3b80d8
Tim Northover [Mon, 11 Aug 2014 09:14:06 +0000 (09:14 +0000)]
llvm-objdump: fix remaining use of %x format specifier for 64-bit values
Third time lucky. This should finally fix the ARM (& MIPS, I think) bots.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215349
91177308-0d34-0410-b5e6-
96231b3b80d8
Oliver Stannard [Mon, 11 Aug 2014 09:12:32 +0000 (09:12 +0000)]
ARM: __gnu_h2f_ieee and __gnu_f2h_ieee always use the soft-float calling convention
By default, LLVM uses the "C" calling convention for all runtime
library functions. The half-precision FP conversion functions use the
soft-float calling convention, and are needed for some targets which
use the hard-float convention by default, so must have their calling
convention explicitly set.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215348
91177308-0d34-0410-b5e6-
96231b3b80d8
Jiangning Liu [Mon, 11 Aug 2014 05:17:19 +0000 (05:17 +0000)]
In Machine CSE pass, the source register of a COPY machine instruction can
be propagated to all its users, and this propagation could increase the
probability of finding common subexpressions. If the COPY has only one user,
the COPY itself can be removed.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215344
91177308-0d34-0410-b5e6-
96231b3b80d8
Jiangning Liu [Mon, 11 Aug 2014 05:02:04 +0000 (05:02 +0000)]
In LVI(Lazy Value Info), originally value on a BB can only be caculated once,
and the lattice will be updated to be a state other than "undefined". This
limiation could miss some opportunities of lowering "overdefined" to be an
even accurate value. So this patch ask the algorithm to try to lower the
lattice value again even if the value has been lowered to be "overdefined".
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215343
91177308-0d34-0410-b5e6-
96231b3b80d8
Hans Wennborg [Mon, 11 Aug 2014 02:50:43 +0000 (02:50 +0000)]
Re-commit "Increase the size of this SmallVector in PeepholeOptimizer." (r215340)
This time, also update the function that receives a reference to the SmallPtrSet as
a parameter.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215342
91177308-0d34-0410-b5e6-
96231b3b80d8
Hans Wennborg [Mon, 11 Aug 2014 02:34:52 +0000 (02:34 +0000)]
Revert "Increase the size of this SmallVector in PeepholeOptimizer." (r215340)
That broke the build:
/data/buildslave/clang-amd64-freebsd/src-llvm/lib/CodeGen/PeepholeOptimizer.cpp:729:46: error: non-const lvalue reference to type 'SmallPtrSet<[...], 8>' cannot bind to a value of unrelated type 'SmallPtrSet<[...], 16>'
Changed |= optimizeExtInstr(MI, MBB, LocalMIs);
^~~~~~~~
/data/buildslave/clang-amd64-freebsd/src-llvm/lib/CodeGen/PeepholeOptimizer.cpp:265:49: note: passing argument to parameter 'LocalMIs' here
SmallPtrSet<MachineInstr*, 8> &LocalMIs) {
^
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215341
91177308-0d34-0410-b5e6-
96231b3b80d8
Hans Wennborg [Mon, 11 Aug 2014 02:21:34 +0000 (02:21 +0000)]
Increase the size of this SmallVector in PeepholeOptimizer.
During a Clang build, the median size of this was 9
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215340
91177308-0d34-0410-b5e6-
96231b3b80d8
Hans Wennborg [Mon, 11 Aug 2014 02:21:32 +0000 (02:21 +0000)]
SubTargetFeature.cpp: it seems the size of this SmallVector should be 3
because some subtarget feature strings have three components.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215339
91177308-0d34-0410-b5e6-
96231b3b80d8
Hans Wennborg [Mon, 11 Aug 2014 02:21:30 +0000 (02:21 +0000)]
Increase the size of SpillPlacement::BlockFrequencies.
This SmallVector's median size during a Clang build was 7.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215338
91177308-0d34-0410-b5e6-
96231b3b80d8
Hans Wennborg [Mon, 11 Aug 2014 02:21:25 +0000 (02:21 +0000)]
LegacyPassManagers.h: increase the size of PMDataManager::HigherLevelAnalysis.
In a Clang bootstrap, the median and max size was 9.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215337
91177308-0d34-0410-b5e6-
96231b3b80d8
Hans Wennborg [Mon, 11 Aug 2014 02:21:22 +0000 (02:21 +0000)]
Increase the size of these SmallVectors in X86ISelLowering.cpp.
In a Clang bootstrap, their sizes were always 12, 16 and 16, respectively.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215336
91177308-0d34-0410-b5e6-
96231b3b80d8
Hans Wennborg [Mon, 11 Aug 2014 02:21:19 +0000 (02:21 +0000)]
Increase the size of this SmallVector in CloneNodeWithValues.
In a Clang bootstrap, the size of this vector was always 6.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215335
91177308-0d34-0410-b5e6-
96231b3b80d8
Hans Wennborg [Mon, 11 Aug 2014 02:18:15 +0000 (02:18 +0000)]
Increase the size of DwarfAccelTable::TableHeaderData::Atoms.
During a Clang bootstrap, it seems this SmallVector always contains 3 elements.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215334
91177308-0d34-0410-b5e6-
96231b3b80d8
Hans Wennborg [Mon, 11 Aug 2014 02:17:15 +0000 (02:17 +0000)]
Increase the size of PMTopLevelManager::ImmutablePasses from 8 to 16.
During a bootstrap build of Clang, this SmallVector always held 14 elements.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215333
91177308-0d34-0410-b5e6-
96231b3b80d8
Petar Jovanovic [Sun, 10 Aug 2014 22:49:54 +0000 (22:49 +0000)]
Add support for scalarizing cttz_zero_undef
Follow up to r214266. Add missing case in ScalarizeVectorResult() for
cttz_zero_undef.
Differential Revision: http://reviews.llvm.org/D4813
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215330
91177308-0d34-0410-b5e6-
96231b3b80d8
Saleem Abdulrasool [Sun, 10 Aug 2014 22:20:37 +0000 (22:20 +0000)]
ARM: correct isPredicable for MULS in ThHUMB mode
The ARM ARM states that CPSR may not be updated by a MUL in thumb mode. Due to
an ordering of Thumb 2 Size Reduction and If Conversion, we would end up
generating a THUMB MULS inside an IT block.
The If Conversion pass uses the TTI isPredicable method to ensure that it can
transform a Basic Block. However, because we only check for IT handling on
Thumb2 functions, we may miss some cases. Even then, it only validates that the
CPSR is not *live* rather than it is not accessed. This corrects the handling
for that particular case since the same restriction does not hold on the vast
majority of the instructions.
This does prevent the IfConversion optimization from kicking in in certain
cases, but generating correct code is more valuable. Addresses PR20555.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215328
91177308-0d34-0410-b5e6-
96231b3b80d8
Joerg Sonnenberger [Sun, 10 Aug 2014 12:41:50 +0000 (12:41 +0000)]
@l and friends adjust their value depending the context used in.
For ori, they are unsigned, for addi, signed. Create a new target
expression type to handle this and evaluate Fixups accordingly.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215315
91177308-0d34-0410-b5e6-
96231b3b80d8
Joerg Sonnenberger [Sun, 10 Aug 2014 11:37:07 +0000 (11:37 +0000)]
Fix tabs.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215311
91177308-0d34-0410-b5e6-
96231b3b80d8
Joerg Sonnenberger [Sun, 10 Aug 2014 11:35:12 +0000 (11:35 +0000)]
If available, pass down the Fixup object to EvaluateAsRelocatable.
At least on PowerPC, the interpretation of certain modifiers depends on
the context they appear in.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215310
91177308-0d34-0410-b5e6-
96231b3b80d8
Saleem Abdulrasool [Sat, 9 Aug 2014 23:12:20 +0000 (23:12 +0000)]
ADT: remove MinGW32 and Cygwin OSType enum
Remove the MinGW32 and Cygwin types from the OSType enumeration. These values
are represented via environments of Windows. It is a source of confusion and
needlessly clutters the code. The cost of doing this is that we must sink the
check for them into the normalization code path along with the spelling.
Addresses PR20592.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215303
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Sat, 9 Aug 2014 22:23:02 +0000 (22:23 +0000)]
fixed typos
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215299
91177308-0d34-0410-b5e6-
96231b3b80d8
Aaron Ballman [Sat, 9 Aug 2014 19:53:34 +0000 (19:53 +0000)]
Resolving some type truncation warnings in MSVC (enum to bool in this case). No functional changes intended.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215293
91177308-0d34-0410-b5e6-
96231b3b80d8
Saleem Abdulrasool [Sat, 9 Aug 2014 17:21:36 +0000 (17:21 +0000)]
MC: remove duplicated code
This removes the duplicate definition of GetXDataSection. This function is
available as a static method and is identical to the previous implementation.
This just cleans up the unnecessary duplication.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@215289
91177308-0d34-0410-b5e6-
96231b3b80d8