Arnaud A. de Grandmaison [Thu, 11 Jun 2015 07:45:05 +0000 (07:45 +0000)]
[PHIElim] Use ranges and const-ify, NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239508
91177308-0d34-0410-b5e6-
96231b3b80d8
Nemanja Ivanovic [Thu, 11 Jun 2015 06:21:25 +0000 (06:21 +0000)]
LLVM support for vector quad bit permute and gather instructions through builtins
This patch corresponds to review:
http://reviews.llvm.org/D10096
This is the back end portion of the patch related to D10095.
The patch adds the instructions and back end intrinsics for:
vbpermq
vgbbd
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239505
91177308-0d34-0410-b5e6-
96231b3b80d8
Reid Kleckner [Thu, 11 Jun 2015 01:31:48 +0000 (01:31 +0000)]
Revert "Move dllimport name mangling to IR mangler."
This reverts commit r239437.
This broke clang-cl self-hosts. We'd end up calling the __imp_ symbol
directly instead of using it to do an indirect function call.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239502
91177308-0d34-0410-b5e6-
96231b3b80d8
Pete Cooper [Thu, 11 Jun 2015 01:04:56 +0000 (01:04 +0000)]
Remove MachineModuleInfo::UsedFunctions as it has no users.
It hasn't been used since r130964.
This also removes MachineModuleInfo::isUsedFunction and
MachineModuleInfo::AnalyzeModule, both of which were only
there to support UsedFunctions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239501
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Wed, 10 Jun 2015 23:27:33 +0000 (23:27 +0000)]
change assert that will never fire to llvm_unreachable
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239497
91177308-0d34-0410-b5e6-
96231b3b80d8
Jingyue Wu [Wed, 10 Jun 2015 22:54:02 +0000 (22:54 +0000)]
[NFC] added a missing space
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239495
91177308-0d34-0410-b5e6-
96231b3b80d8
Pete Cooper [Wed, 10 Jun 2015 22:38:46 +0000 (22:38 +0000)]
Stop returning a Use* from allocHungOffUses.
This always just set the User::OperandList which is now set
in that method instead of being returned.
Reviewed by Duncan Exon Smith.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239493
91177308-0d34-0410-b5e6-
96231b3b80d8
Pete Cooper [Wed, 10 Jun 2015 22:38:41 +0000 (22:38 +0000)]
Add User::growHungoffUses and use it to grow the hung off uses. NFC.
PhiNode, SwitchInst, LandingPad and IndirectBr all had virtually identical
logic for growing the hung off uses.
Move it to User so that they can all call a single shared implementation.
Their destructors were all empty after this change and were deleted. They all
have virtual clone_impl methods which can be used as vtable anchors.
Reviewed by Duncan Exon Smith.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239492
91177308-0d34-0410-b5e6-
96231b3b80d8
Pete Cooper [Wed, 10 Jun 2015 22:38:38 +0000 (22:38 +0000)]
Delete User::dropHungOffUses and move it in to ~User which is the only caller. NFC.
Now that the subclasses which care about hung off uses let ~User clean it up,
there's no need for a separate method. Just inline it to ~User and delete it.
Reviewed by Duncan Exon Smith.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239491
91177308-0d34-0410-b5e6-
96231b3b80d8
Pete Cooper [Wed, 10 Jun 2015 22:38:34 +0000 (22:38 +0000)]
Make User track whether a class has 'hung off uses' and delete them in its destructor.
Currently all of the logic for deleting hung off uses, which PHI/switch/etc use,
is in their classes.
This adds a bit to Value which tracks whether that user had hung off uses,
then User can be responsible for clearing them instead of the sub classes.
Note, the bit used here was taken from NumOperands which was 30-bits.
Given the reduction to 29 bits, and the average User being just over 100 bytes,
a single User with 29-bits of num operands would need 50GB of RAM for itself
so its reasonable to assume that 29-bits is enough for now.
This is a step towards hiding all the hung off uses logic in the User.
Reviewed by Duncan Exon Smith.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239490
91177308-0d34-0410-b5e6-
96231b3b80d8
Pete Cooper [Wed, 10 Jun 2015 22:38:30 +0000 (22:38 +0000)]
Move the special Phi logic for hung off uses in to User::allocHungOffUses. NFC.
PhiNode's need to allocate space for an array of Use[N] and then BasicBlock*[N].
They had their own allocHungOffUses to handle all of this. This moves the logic
in to User::allocHungOffUses and PhiNode passes in a bool to say to allocate
the BB* space too.
Reviewed by Duncan Exon Smith.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239489
91177308-0d34-0410-b5e6-
96231b3b80d8
Peter Collingbourne [Wed, 10 Jun 2015 21:14:34 +0000 (21:14 +0000)]
ArgumentPromotion: Drop sret attribute on functions that are only called directly.
If the first argument to a function is a 'this' argument and the second
has the sret attribute, the ArgumentPromotion pass may promote the 'this'
argument to more than one argument, violating the IR constraint that 'sret'
may only be applied to the first or second argument.
Although this IR constraint is arguably unnecessary, it highlighted the fact
that ArgPromotion does not need to preserve this attribute. Dropping the
attribute reduces register pressure in the backend by avoiding the register
copy required by sret. Because sret implies noalias, we also replace the
former with the latter.
Differential Revision: http://reviews.llvm.org/D10353
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239488
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Wed, 10 Jun 2015 20:32:21 +0000 (20:32 +0000)]
[x86] Add a reassociation optimization to increase ILP via the MachineCombiner pass
This is a reimplementation of D9780 at the machine instruction level rather than the DAG.
Use the MachineCombiner pass to reassociate scalar single-precision AVX additions (just a
starting point; see the TODO comments) to increase ILP when it's safe to do so.
The code is closely based on the existing MachineCombiner optimization that is implemented
for AArch64.
This patch should not cause the kind of spilling tragedy that led to the reversion of r236031.
Differential Revision: http://reviews.llvm.org/D10321
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239486
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Wed, 10 Jun 2015 19:52:58 +0000 (19:52 +0000)]
punctuation policing; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239484
91177308-0d34-0410-b5e6-
96231b3b80d8
Reid Kleckner [Wed, 10 Jun 2015 18:14:07 +0000 (18:14 +0000)]
[WinEH] _except_handlerN uses 0 instead of 1 to indicate catch-all
Our usage of 1 was a holdover from __C_specific_handler.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239482
91177308-0d34-0410-b5e6-
96231b3b80d8
Teresa Johnson [Wed, 10 Jun 2015 17:49:28 +0000 (17:49 +0000)]
Add new EliminateAvailableExternally module pass, which is performed in
O2 compiles just before GlobalDCE, unless we are preparing for LTO.
This pass eliminates available externally globals (turning them into
declarations), regardless of whether they are dead/unreferenced, since
we are guaranteed to have a copy available elsewhere at link time.
This enables additional opportunities for GlobalDCE.
If we are preparing for LTO (e.g. a -flto -c compile), the pass is not
included as we want to preserve available externally functions for possible
link time inlining. The FE indicates whether we are doing an -flto compile
via the new PrepareForLTO flag on the PassManagerBuilder.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239480
91177308-0d34-0410-b5e6-
96231b3b80d8
Alexey Samsonov [Wed, 10 Jun 2015 17:37:38 +0000 (17:37 +0000)]
[GVN] Set proper debug locations for some instructions created by GVN.
Determining proper debug locations for instructions created in
PHITransAddr is tricky. We use a simple approach here and simply copy
debug locations from instructions computing load address to
"corresponding" instructions re-creating the address computation
in predecessor basic blocks.
This may not always be correct, given all the rearrangement and
simplification going on, and debug locations may jump around a lot,
as the basic blocks we copy locations between may be very far from
each other.
Still, this would work good in most simple cases (e.g. when chain
of address computing instruction is short, or our mapping turns out
to be 1-to-1), and we desire to have *some* reasonable debug locations
associated with newly inserted instructions.
See http://reviews.llvm.org/D10351 review thread for more details.
Test Plan: regression test suite
Reviewers: spatel, dblaikie
Subscribers: llvm-commits
Differential Revision: http://reviews.llvm.org/D10351
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239479
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Wed, 10 Jun 2015 17:08:12 +0000 (17:08 +0000)]
fix typo in comment; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239478
91177308-0d34-0410-b5e6-
96231b3b80d8
Colin LeMahieu [Wed, 10 Jun 2015 16:52:32 +0000 (16:52 +0000)]
[Hexagon] Adding decoders for signed operands and ensuring all signed operand types disassemble correctly.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239477
91177308-0d34-0410-b5e6-
96231b3b80d8
Benjamin Kramer [Wed, 10 Jun 2015 14:43:59 +0000 (14:43 +0000)]
[Hexagon] Make global arrays 'static const'. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239475
91177308-0d34-0410-b5e6-
96231b3b80d8
Igor Laevsky [Wed, 10 Jun 2015 13:24:00 +0000 (13:24 +0000)]
[Statepoints] Add test case to check that statepoint is marked with Throwable attribute.
Differential Revision: http://reviews.llvm.org/D10215
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239473
91177308-0d34-0410-b5e6-
96231b3b80d8
Igor Laevsky [Wed, 10 Jun 2015 12:31:53 +0000 (12:31 +0000)]
[StatepointLowering] Reuse stack slots across basic blocks
During statepoint lowering we can sometimes avoid spilling of the value if we know that it was already spilled for previous statepoint.
We were doing this by checking if incoming statepoint value was lowered into load from stack slot. This was working only in boundaries of one basic block.
But instead of looking at the lowered node we can look directly at the llvm-ir value and if it was gc.relocate (or some simple modification of it) look up stack slot for it's derived pointer and reuse stack slot from it. This allows us to look across basic block boundaries.
Differential Revision: http://reviews.llvm.org/D10251
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239472
91177308-0d34-0410-b5e6-
96231b3b80d8
Daniel Sanders [Wed, 10 Jun 2015 12:11:26 +0000 (12:11 +0000)]
Replace string GNU Triples with llvm::Triple in MCSubtargetInfo and create*MCSubtargetInfo(). NFC.
Summary:
This continues the patch series to eliminate StringRef forms of GNU triples
from the internals of LLVM that began in r239036.
Reviewers: rafael
Reviewed By: rafael
Subscribers: rafael, ted, jfb, llvm-commits, rengolin, jholewinski
Differential Revision: http://reviews.llvm.org/D10311
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239467
91177308-0d34-0410-b5e6-
96231b3b80d8
Daniel Sanders [Wed, 10 Jun 2015 10:54:40 +0000 (10:54 +0000)]
Replace string GNU Triples with llvm::Triple in create*MCRelocationInfo(). NFC.
Summary:
This continues the patch series to eliminate StringRef forms of GNU triples
from the internals of LLVM that began in r239036.
Reviewers: rafael
Reviewed By: rafael
Subscribers: rafael, llvm-commits, rengolin
Differential Revision: http://reviews.llvm.org/D10307
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239465
91177308-0d34-0410-b5e6-
96231b3b80d8
Daniel Sanders [Wed, 10 Jun 2015 10:35:34 +0000 (10:35 +0000)]
Replace string GNU Triples with llvm::Triple in MCAsmBackend subclasses and create*AsmBackend(). NFC.
Summary:
This continues the patch series to eliminate StringRef forms of GNU triples
from the internals of LLVM that began in r239036.
Reviewers: echristo, rafael
Reviewed By: rafael
Subscribers: rafael, llvm-commits, rengolin
Differential Revision: http://reviews.llvm.org/D10243
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239464
91177308-0d34-0410-b5e6-
96231b3b80d8
Elena Demikhovsky [Wed, 10 Jun 2015 06:49:28 +0000 (06:49 +0000)]
AVX-512: Fixed a bug in comparison of i1 vectors.
cmp eq should give kxnor instruction
cmp neq should give kxor
https://llvm.org/bugs/show_bug.cgi?id=23631
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239460
91177308-0d34-0410-b5e6-
96231b3b80d8
Yaron Keren [Wed, 10 Jun 2015 06:00:59 +0000 (06:00 +0000)]
Replace magic number 19 with the constant GlobalValueSubClassDataBits.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239459
91177308-0d34-0410-b5e6-
96231b3b80d8
Alexei Starovoitov [Wed, 10 Jun 2015 03:06:06 +0000 (03:06 +0000)]
fix crash
fix segfault by checking for UnknownArch, since
getArchTypePrefix() will return nullptr for UnknownArch.
This fixes regression caused by r238424.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239456
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Wed, 10 Jun 2015 02:07:37 +0000 (02:07 +0000)]
Remove unnecessary conversion from StringRef to std::string and back to StringRef. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239455
91177308-0d34-0410-b5e6-
96231b3b80d8
Reid Kleckner [Wed, 10 Jun 2015 01:34:54 +0000 (01:34 +0000)]
[WinEH] Call llvm.stackrestore in __except blocks
We have to do this manually, the runtime only sets up ebp. Fixes a crash
when returning after catching an exception.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239451
91177308-0d34-0410-b5e6-
96231b3b80d8
Reid Kleckner [Wed, 10 Jun 2015 01:13:44 +0000 (01:13 +0000)]
Remove safeseh debug print and remove extra braces
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239449
91177308-0d34-0410-b5e6-
96231b3b80d8
Reid Kleckner [Wed, 10 Jun 2015 01:02:30 +0000 (01:02 +0000)]
[WinEH] Emit .safeseh directives for all 32-bit exception handlers
Use a "safeseh" string attribute to do this. You would think we chould
just accumulate the set of personalities like we do on dwarf, but this
fails to account for the LSDA-loading thunks we use for
__CxxFrameHandler3. Each of those needs to make it into .sxdata as well.
The string attribute seemed like the most straightforward approach.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239448
91177308-0d34-0410-b5e6-
96231b3b80d8
Reid Kleckner [Wed, 10 Jun 2015 00:04:53 +0000 (00:04 +0000)]
Fix -Wsign-compare warning in WinException.cpp
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239445
91177308-0d34-0410-b5e6-
96231b3b80d8
Pete Cooper [Tue, 9 Jun 2015 23:33:35 +0000 (23:33 +0000)]
Fix warning of comparing different enums. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239443
91177308-0d34-0410-b5e6-
96231b3b80d8
NAKAMURA Takumi [Tue, 9 Jun 2015 23:33:25 +0000 (23:33 +0000)]
Add explicit -mtriple=arm-unknown to llvm/test/CodeGen/ARM/disable-tail-calls.ll, to satisfy *-win32.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239442
91177308-0d34-0410-b5e6-
96231b3b80d8
Pete Cooper [Tue, 9 Jun 2015 22:35:55 +0000 (22:35 +0000)]
Revert "Move MCSymbol Value in to the union of Offset and CommonSize."
This reverts commit
2e449ec5bcdf67b52b315b16c2128aaf25d5b73c.
This was svn r239440. Its currently failing an ARM test so reverting while I work out
what to do next.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239441
91177308-0d34-0410-b5e6-
96231b3b80d8
Pete Cooper [Tue, 9 Jun 2015 22:21:37 +0000 (22:21 +0000)]
Move MCSymbol Value in to the union of Offset and CommonSize.
It wasn't possible to have a variable Symbol with offset or 'isCommon' so
this just enables better packing of the MCSymbol class.
Reviewed by Rafael Espindola.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239440
91177308-0d34-0410-b5e6-
96231b3b80d8
Tobias Edler von Koch [Tue, 9 Jun 2015 22:10:58 +0000 (22:10 +0000)]
[RegisterScavenger] Fix handling of predicated instructions
Summary:
The RegisterScavenger explicitly ignores <kill> flags on operands of
predicated instructions and therefore assumes that such registers remain
live. When it then scavenges such a register, it inserts a spill of this
(killed) register. This is invalid code and gets flagged up by the
verifier.
Nowadays kill flags are set correctly on predicated instructions. This
patch makes the Scavenger respect them.
The bug has so far only been triggered by an internal pass, so I don't
have a test case unfortunately.
Fixes PR23119.
Reviewers: hfinkel, tobiasvk_caf
Subscribers: llvm-commits
Differential Revision: http://reviews.llvm.org/D9039
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239439
91177308-0d34-0410-b5e6-
96231b3b80d8
Alexey Samsonov [Tue, 9 Jun 2015 22:10:29 +0000 (22:10 +0000)]
[BasicBlockUtils] Set debug locations for instructions created in SplitBlockPredecessors.
Test Plan: regression test suite
Reviewers: eugenis, dblaikie
Subscribers: llvm-commits
Differential Revision: http://reviews.llvm.org/D10343
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239438
91177308-0d34-0410-b5e6-
96231b3b80d8
Peter Collingbourne [Tue, 9 Jun 2015 22:09:53 +0000 (22:09 +0000)]
Move dllimport name mangling to IR mangler.
This ensures that LTO clients see the correct external symbol name.
Differential Revision: http://reviews.llvm.org/D10318
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239437
91177308-0d34-0410-b5e6-
96231b3b80d8
Jingyue Wu [Tue, 9 Jun 2015 21:50:32 +0000 (21:50 +0000)]
[NVPTX] fix a crash bug in NVPTXFavorNonGenericAddrSpaces
Summary:
We used to assume V->RAUW only modifies the operand list of V's user.
However, if V and V's user are Constants, RAUW may replace and invalidate V's
user entirely.
This patch fixes the above issue by letting the caller replace the
operand instead of calling RAUW on Constants.
Test Plan: @nested_const_expr and @rauw in access-non-generic.ll
Reviewers: broune, jholewinski
Reviewed By: broune, jholewinski
Subscribers: jholewinski, llvm-commits
Differential Revision: http://reviews.llvm.org/D10345
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239435
91177308-0d34-0410-b5e6-
96231b3b80d8
Peter Collingbourne [Tue, 9 Jun 2015 21:50:22 +0000 (21:50 +0000)]
LibDriver, llvm-lib: introduce.
llvm-lib is intended to be a lib.exe compatible utility that also
understands bitcode. The implementation lives in a library so that
lld can use it to implement /lib.
Differential Revision: http://reviews.llvm.org/D10297
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239434
91177308-0d34-0410-b5e6-
96231b3b80d8
Reid Kleckner [Tue, 9 Jun 2015 21:42:19 +0000 (21:42 +0000)]
[WinEH] Add 32-bit SEH state table emission prototype
This gets all the handler info through to the asm printer and we can
look at the .xdata tables now. I've convinced one small catch-all test
case to work, but other than that, it would be a stretch to say this is
functional.
The state numbering algorithm avoids doing any scope reconstruction as
we do for C++ to simplify the implementation.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239433
91177308-0d34-0410-b5e6-
96231b3b80d8
Chad Rosier [Tue, 9 Jun 2015 20:59:41 +0000 (20:59 +0000)]
[AArch64] Remove an overly conservative check when generating store pairs.
Store instructions do not modify register values and therefore it's safe
to form a store pair even if the source register has been read in between
the two store instructions.
Previously, the read of w1 (see below) prevented the formation of a stp.
str w0, [x2]
ldr w8, [x2, #8]
add w0, w8, w1
str w1, [x2, #4]
ret
We now generate the following code.
stp w0, w1, [x2]
ldr w8, [x2, #8]
add w0, w8, w1
ret
All correctness tests with -Ofast on A57 with Spec200x and EEMBC pass.
Performance results for SPEC2K were within noise.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239432
91177308-0d34-0410-b5e6-
96231b3b80d8
Pete Cooper [Tue, 9 Jun 2015 20:58:03 +0000 (20:58 +0000)]
Use AlignOf traits to enable static_assert.
This is better than runtime asserts. Thanks to David Blaikie for the help here.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239431
91177308-0d34-0410-b5e6-
96231b3b80d8
Benjamin Kramer [Tue, 9 Jun 2015 20:41:21 +0000 (20:41 +0000)]
Replace loop with std::equal. NFC intended.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239430
91177308-0d34-0410-b5e6-
96231b3b80d8
Pete Cooper [Tue, 9 Jun 2015 20:41:08 +0000 (20:41 +0000)]
Reduce duplication in MCSymbol Name handling. NFC>
Based on feedback to r239428 by David Blaikie, use const_cast to reduce
duplication of the const and non-const versions of getNameEntryPtr.
Also have that method return the pointer to the name directly instead
of users having to then get the name from the union.
Finally, add a FIXME that we should use a static_assert once available in
the new operator.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239429
91177308-0d34-0410-b5e6-
96231b3b80d8
Pete Cooper [Tue, 9 Jun 2015 19:56:05 +0000 (19:56 +0000)]
Make MCSymbol::Name be a union of uint64_t and a pointer.
This should hopefully fix the 32-bit bots which were allocating space for a pointer
but needed to be aligned to 64-bits.
Now we allocate enough space for a uint64_t and a pointer and cast to the appropriate storage
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239428
91177308-0d34-0410-b5e6-
96231b3b80d8
Akira Hatanaka [Tue, 9 Jun 2015 19:07:19 +0000 (19:07 +0000)]
Remove DisableTailCalls from TargetOptions and the code in resetTargetOptions
that was resetting it.
Remove the uses of DisableTailCalls in subclasses of TargetLowering and use
the value of function attribute "disable-tail-calls" instead. Also,
unconditionally add pass TailCallElim to the pipeline and check the function
attribute at the start of runOnFunction to disable the pass on a per-function
basis.
This is part of the work to remove TargetMachine::resetTargetOptions, and since
DisableTailCalls was the last non-fast-math option that was being reset in that
function, we should be able to remove the function entirely after the work to
propagate IR-level fast-math flags to DAG nodes is completed.
Out-of-tree users should remove the uses of DisableTailCalls and make changes
to attach attribute "disable-tail-calls"="true" or "false" to the functions in
the IR.
rdar://problem/
13752163
Differential Revision: http://reviews.llvm.org/D10099
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239427
91177308-0d34-0410-b5e6-
96231b3b80d8
Alexei Starovoitov [Tue, 9 Jun 2015 18:53:30 +0000 (18:53 +0000)]
[bpf] enable BPF backend in autoconf build
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239425
91177308-0d34-0410-b5e6-
96231b3b80d8
Pete Cooper [Tue, 9 Jun 2015 18:50:18 +0000 (18:50 +0000)]
Change from alignof to llvm::alignOf to appease Visual Studio
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239424
91177308-0d34-0410-b5e6-
96231b3b80d8
Pete Cooper [Tue, 9 Jun 2015 18:36:13 +0000 (18:36 +0000)]
Allocate space for MCSymbol::Name only if required.
Similarly to User which allocates a number of Use's prior to the this pointer,
allocate space for the Name* for MCSymbol only when we need a name.
Given that an MCSymbol is 48-bytes on 64-bit systems, this saves a decent % of space.
Given the verify_uselistorder test case with debug info and llc, 50k symbols have names
out of 700k so this optimises for the common case of temporary unnamed symbols.
Reviewed by David Blaikie.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239423
91177308-0d34-0410-b5e6-
96231b3b80d8
Arnold Schwaighofer [Tue, 9 Jun 2015 18:19:17 +0000 (18:19 +0000)]
MergeFunctions: Don't replace a weak function use by another equivalent weak function
We don't know whether the weak functions definition is the definitive definition.
rdar://
21303727
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239422
91177308-0d34-0410-b5e6-
96231b3b80d8
David Blaikie [Tue, 9 Jun 2015 18:01:51 +0000 (18:01 +0000)]
Revert "[DWARF] Fix a few corner cases in expression emission"
This reverts commit r239380 due to apparently GDB regressions:
http://lab.llvm.org:8011/builders/clang-x86_64-ubuntu-gdb-75/builds/22562
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239420
91177308-0d34-0410-b5e6-
96231b3b80d8
Samuel Antao [Tue, 9 Jun 2015 16:29:34 +0000 (16:29 +0000)]
The constant initialization for globals in NVPTX is generated as an
array of bytes. The generation of this byte arrays was expecting
the host to be little endian, which prevents big endian hosts to be
used in the generation of the PTX code. This patch fixes the
problem by changing the way the bytes are extracted so that it
works for either little and big endian.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239412
91177308-0d34-0410-b5e6-
96231b3b80d8
Eli Bendersky [Tue, 9 Jun 2015 15:57:30 +0000 (15:57 +0000)]
Add more wrappers for symbol APIs to the C API.
This represents some of the functionality we expose in the llvmlite Python
binding.
Patch by Antoine Pitrou
Differential Revision: http://reviews.llvm.org/D10222
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239411
91177308-0d34-0410-b5e6-
96231b3b80d8
Alexei Starovoitov [Tue, 9 Jun 2015 15:46:00 +0000 (15:46 +0000)]
[bpf] make BPF backend non-experimental
only cmake build change. autoconf build and docs will follow
email thread:
http://lists.cs.uiuc.edu/pipermail/llvmdev/2015-June/thread.html#86523
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239410
91177308-0d34-0410-b5e6-
96231b3b80d8
Rui Ueyama [Tue, 9 Jun 2015 15:20:42 +0000 (15:20 +0000)]
Remove object_error::success and use std::error_code() instead
make_error_code(object_error) is slow because object::object_category()
uses a ManagedStatic variable. But the real problem is that the function is
called too frequently. This patch uses std::error_code() instead of
object_error::success. In most cases, we return "success", so this patch
reduces number of function calls to that function.
http://reviews.llvm.org/D10333
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239409
91177308-0d34-0410-b5e6-
96231b3b80d8
Toma Tabacu [Tue, 9 Jun 2015 13:33:26 +0000 (13:33 +0000)]
Recommit "[mips] [IAS] Restore STI.FeatureBits in .set pop." (r239144).
Specified the llvm namespace for the 2 calls to make_unique() which caused
compilation errors in Visual Studio 2013.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239405
91177308-0d34-0410-b5e6-
96231b3b80d8
Elena Demikhovsky [Tue, 9 Jun 2015 13:02:10 +0000 (13:02 +0000)]
X86-MPX: Implemented encoding for MPX instructions.
Added encoding tests.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239403
91177308-0d34-0410-b5e6-
96231b3b80d8
Aaron Ballman [Tue, 9 Jun 2015 12:03:46 +0000 (12:03 +0000)]
Removing spurious semi colons; NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239399
91177308-0d34-0410-b5e6-
96231b3b80d8
Toma Tabacu [Tue, 9 Jun 2015 10:43:49 +0000 (10:43 +0000)]
Revert "[mips] [IAS] Add support for BNE and BEQ with an immediate operand." (r239396).
It was breaking buildbots.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239397
91177308-0d34-0410-b5e6-
96231b3b80d8
Toma Tabacu [Tue, 9 Jun 2015 10:34:31 +0000 (10:34 +0000)]
[mips] [IAS] Add support for BNE and BEQ with an immediate operand.
Summary:
For some branches, GAS accepts an immediate instead of the 2nd register operand.
We only implement this for BNE and BEQ for now. Other branch instructions can be added later, if needed.
Reviewers: dsanders
Reviewed By: dsanders
Subscribers: seanbruno, emaste, llvm-commits
Differential Revision: http://reviews.llvm.org/D9666
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239396
91177308-0d34-0410-b5e6-
96231b3b80d8
Daniel Sanders [Tue, 9 Jun 2015 10:34:05 +0000 (10:34 +0000)]
[nvptx] Only support the 'm' inline assembly memory constraint. NFC.
Summary:
NVPTX doesn't seem to support any additional constraints. Therefore remove
the target hook.
No functional change intended.
Reviewers: jholewinski
Reviewed By: jholewinski
Subscribers: jholewinski, llvm-commits
Differential Revision: http://reviews.llvm.org/D8209
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239395
91177308-0d34-0410-b5e6-
96231b3b80d8
Daniel Sanders [Tue, 9 Jun 2015 09:47:46 +0000 (09:47 +0000)]
[ADT] Assert that SmallVectorBase::grow_pod() successfully reallocates memory.
Summary:
If malloc/realloc fails then the SmallVector becomes unusable since begin() and
end() will return NULL. This is unlikely to occur but was the cause of recent
bugpoint test failures on my machine.
It is not clear whether not checking for malloc/realloc failure is a deliberate
decision and adding checks has the potential to impact compiler performance.
Therefore, this patch only adds the check to builds with assertions enabled for
the moment.
Reviewers: bkramer
Reviewed By: bkramer
Subscribers: bkramer, llvm-commits
Differential Revision: http://reviews.llvm.org/D9520
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239392
91177308-0d34-0410-b5e6-
96231b3b80d8
Denis Protivensky [Tue, 9 Jun 2015 09:28:37 +0000 (09:28 +0000)]
MergeFunctions: Fix gcc warning in condition
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239391
91177308-0d34-0410-b5e6-
96231b3b80d8
NAKAMURA Takumi [Tue, 9 Jun 2015 08:03:33 +0000 (08:03 +0000)]
llvm/test/DebugInfo/X86/expressions.ll: %llc_dwarf shouldn't be used with -mtriple, since %llc_dwarf implies the triple.
In this case, use plain "llc".
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239390
91177308-0d34-0410-b5e6-
96231b3b80d8
Keno Fischer [Tue, 9 Jun 2015 02:52:47 +0000 (02:52 +0000)]
Move X86-only test case to appropriate directory
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239384
91177308-0d34-0410-b5e6-
96231b3b80d8
Lang Hames [Tue, 9 Jun 2015 02:43:27 +0000 (02:43 +0000)]
[lli] Make the OptLevel (-O=<char>) option accessible to the lazy JIT.
No test case - this only affects generated code performance.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239383
91177308-0d34-0410-b5e6-
96231b3b80d8
Keno Fischer [Tue, 9 Jun 2015 01:53:59 +0000 (01:53 +0000)]
[DWARF] Fix a few corner cases in expression emission
Summary: I noticed an object file with `DW_OP_reg4 DW_OP_breg4 0` as a DWARF expression,
which I traced to a missing break (and `++I`) in this code snippet.
While I was at it, I also added support for a few other corner cases
along the same lines that I could think of.
Test Plan: Hand-crafted test case to exercises these cases is included.
Reviewers: echristo, dblaikie, aprantl
Reviewed By: aprantl
Subscribers: llvm-commits
Differential Revision: http://reviews.llvm.org/D10302
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239380
91177308-0d34-0410-b5e6-
96231b3b80d8
Anna Zaks [Tue, 9 Jun 2015 00:58:08 +0000 (00:58 +0000)]
[asan] Prevent __attribute__((annotate)) triggering errors on Darwin
The following code triggers a fatal error in the compiler instrumentation
of ASan on Darwin because we place the attribute into llvm.metadata section,
which does not have the proper MachO section name.
void foo() __attribute__((annotate("custom")));
void foo() {;}
This commit reorders the checks so that we skip everything in llvm.metadata
first. It also removes the hard failure in case the section name does not
parse. That check will be done lower in the compilation pipeline anyway.
(Reviewed in http://reviews.llvm.org/D9093.)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239379
91177308-0d34-0410-b5e6-
96231b3b80d8
Matt Arsenault [Tue, 9 Jun 2015 00:52:41 +0000 (00:52 +0000)]
Implement computeKnownBits for min/max nodes
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239378
91177308-0d34-0410-b5e6-
96231b3b80d8
Matt Arsenault [Tue, 9 Jun 2015 00:52:37 +0000 (00:52 +0000)]
R600: Switch to using generic min / max nodes.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239377
91177308-0d34-0410-b5e6-
96231b3b80d8
Matt Arsenault [Tue, 9 Jun 2015 00:31:39 +0000 (00:31 +0000)]
MC: Add target hook to control symbol quoting
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239370
91177308-0d34-0410-b5e6-
96231b3b80d8
Arnold Schwaighofer [Tue, 9 Jun 2015 00:17:40 +0000 (00:17 +0000)]
Fix unused variable warning
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239369
91177308-0d34-0410-b5e6-
96231b3b80d8
Jingyue Wu [Tue, 9 Jun 2015 00:05:56 +0000 (00:05 +0000)]
[NVPTX] run SROA after NVPTXFavorNonGenericAddrSpaces
Summary:
This cleans up most allocas NVPTXLowerKernelArgs emits for byval
parameters.
Test Plan: makes bug21465.ll more stronger to verify no redundant local load/store.
Reviewers: eliben, jholewinski
Reviewed By: eliben, jholewinski
Subscribers: jholewinski, llvm-commits
Differential Revision: http://reviews.llvm.org/D10322
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239368
91177308-0d34-0410-b5e6-
96231b3b80d8
Arnold Schwaighofer [Tue, 9 Jun 2015 00:03:29 +0000 (00:03 +0000)]
MergeFunctions: Impose a total order on the replacement of functions
We don't want to replace function A by Function B in one module and Function B
by Function A in another module.
If these functions are marked with linkonce_odr we would end up with a function
stub calling B in one module and a function stub calling A in another module. If
the linker decides to pick these two we will have two stubs calling each other.
rdar://
21265586
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239367
91177308-0d34-0410-b5e6-
96231b3b80d8
Reid Kleckner [Mon, 8 Jun 2015 22:43:32 +0000 (22:43 +0000)]
[WinEH] Cache declarations of frame intrinsics
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239361
91177308-0d34-0410-b5e6-
96231b3b80d8
Reid Kleckner [Mon, 8 Jun 2015 22:12:44 +0000 (22:12 +0000)]
[MC] Use unsigned for the Kind bitfield in MCSymbol
Fixes most of the test suite on Windows with clang-cl.
I'm not sure why the test suite was passing with MSVC 2013. Maybe they
changed their behavior and we are emulating their old sign extension
behavior. I think this deserves more investigation, but I want to green
the bot first.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239357
91177308-0d34-0410-b5e6-
96231b3b80d8
Reid Kleckner [Mon, 8 Jun 2015 21:57:57 +0000 (21:57 +0000)]
Fix clang-cl self-host -Wc++11-narrowing bug
Use unsigned as the underlying storage type of the AMDGPU address space
enum.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239355
91177308-0d34-0410-b5e6-
96231b3b80d8
Ranjeet Singh [Mon, 8 Jun 2015 21:32:16 +0000 (21:32 +0000)]
[AArch64] AsmParser should be case insensitive about accepting vector register names.
Differential Revision: http://reviews.llvm.org/D10320
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239353
91177308-0d34-0410-b5e6-
96231b3b80d8
Keno Fischer [Mon, 8 Jun 2015 20:09:58 +0000 (20:09 +0000)]
[InstrInfo] Refactor foldOperandImpl to thread through InsertPt. NFC
Summary:
This was a longstanding FIXME and is a necessary precursor to cases
where foldOperandImpl may have to create more than one instruction
(e.g. to constrain a register class). This is the split out NFC changes from
D6262.
Reviewers: pete, ributzka, uweigand, mcrosier
Reviewed By: mcrosier
Subscribers: mcrosier, ted, llvm-commits
Differential Revision: http://reviews.llvm.org/D10174
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239336
91177308-0d34-0410-b5e6-
96231b3b80d8
Rafael Espindola [Mon, 8 Jun 2015 20:08:55 +0000 (20:08 +0000)]
Fix a regression in .pop_section.
It was calling ChangeSection with the wrong current section, eventually leading
to a crash.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239335
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Mon, 8 Jun 2015 19:58:43 +0000 (19:58 +0000)]
[X86][SSE] Added lzcnt vector tests.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239333
91177308-0d34-0410-b5e6-
96231b3b80d8
Akira Hatanaka [Mon, 8 Jun 2015 19:03:32 +0000 (19:03 +0000)]
Include header file <functional>.
This is a follow-up to r239325.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239329
91177308-0d34-0410-b5e6-
96231b3b80d8
Benjamin Kramer [Mon, 8 Jun 2015 18:58:57 +0000 (18:58 +0000)]
Prefer copy init over direct init. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239327
91177308-0d34-0410-b5e6-
96231b3b80d8
Akira Hatanaka [Mon, 8 Jun 2015 18:50:43 +0000 (18:50 +0000)]
[ARM] Pass a callback to FunctionPass constructors to enable skipping execution
on a per-function basis.
Previously some of the passes were conditionally added to ARM's pass pipeline
based on the target machine's subtarget. This patch makes changes to add those
passes unconditionally and execute them conditonally based on the predicate
functor passed to the pass constructors. This enables running different sets of
passes for different functions in the module.
rdar://problem/
20542263
Differential Revision: http://reviews.llvm.org/D8717
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239325
91177308-0d34-0410-b5e6-
96231b3b80d8
Pete Cooper [Mon, 8 Jun 2015 18:41:57 +0000 (18:41 +0000)]
Use a PointerUnion in MCSymbol for Section and Fragment. NFC.
The Fragment and Section, and a bool for HasFragment were all used to create
a PointerUnion. Just use a pointer union instead.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239324
91177308-0d34-0410-b5e6-
96231b3b80d8
Pete Cooper [Mon, 8 Jun 2015 17:25:57 +0000 (17:25 +0000)]
Remove includes of MCMachOSymbolFlags.h after it was deleted
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239318
91177308-0d34-0410-b5e6-
96231b3b80d8
Pete Cooper [Mon, 8 Jun 2015 17:17:30 +0000 (17:17 +0000)]
Make flags get/set method protected so that all flags have to be managed by subclasses.
All of ELF, COFF and MachO now manipulate the flags in helpers so we don't need
anyone to read the flags directly, but instead via those helpers.
Reviewed by Rafael Espíndola.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239317
91177308-0d34-0410-b5e6-
96231b3b80d8
Pete Cooper [Mon, 8 Jun 2015 17:17:28 +0000 (17:17 +0000)]
Move all flags logic to MCSymbolMachO.
Also delete the now unused MCMachOSymbolFlags.h header as the only enum in there was moved to MCSymbolMachO.
Similarly to ELF and COFF, manipulating the flags is now done via helpers instead of spread
throughout the codebase.
Reviewed by Rafael Espíndola.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239316
91177308-0d34-0410-b5e6-
96231b3b80d8
Pete Cooper [Mon, 8 Jun 2015 17:17:23 +0000 (17:17 +0000)]
Add MCSymbolMachO which will be used to hide the MCSymbolMachO flags.
Reviewed by Rafael Espíndola.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239315
91177308-0d34-0410-b5e6-
96231b3b80d8
Pete Cooper [Mon, 8 Jun 2015 17:17:19 +0000 (17:17 +0000)]
Move all of the MCSymbol COFF flags logic in to MCSymbolCOFF.
All flags setting/getting is now done in the class with helper methods instead
of users having to get the bits in the correct order.
Reviewed by Rafael Espíndola.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239314
91177308-0d34-0410-b5e6-
96231b3b80d8
Pete Cooper [Mon, 8 Jun 2015 17:17:16 +0000 (17:17 +0000)]
Move COFF Type in to the MCSymbolCOFF class.
The flags field in MCSymbol only needs to be 16-bits on ELF and MachO.
This moves the 16-bit Type out of there so that it can be reduced in size in a future commit.
Reviewed by Rafael Espíndola.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239313
91177308-0d34-0410-b5e6-
96231b3b80d8
Pete Cooper [Mon, 8 Jun 2015 17:17:12 +0000 (17:17 +0000)]
Add MCSymbolCOFF class and use it to get and set the COFF type field.
Reviewed by Rafael Espíndola.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239312
91177308-0d34-0410-b5e6-
96231b3b80d8
Pete Cooper [Mon, 8 Jun 2015 17:17:09 +0000 (17:17 +0000)]
Change MCSymbol IsELF to an enum to support future MCSymbolCOFF and MCSymbolMachO.
Reviewed by Rafael Espíndola.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239311
91177308-0d34-0410-b5e6-
96231b3b80d8
Matthias Braun [Mon, 8 Jun 2015 16:56:23 +0000 (16:56 +0000)]
X86: Reject register operands with obvious type mismatches.
While we have some code to transform specification like {ax} into
{eax}/{rax} if the operand type isn't 16bit, we should reject cases
where there is no sane way to do this, like the i128 type in the
example.
Related to rdar://
21042280
Differential Revision: http://reviews.llvm.org/D10260
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239309
91177308-0d34-0410-b5e6-
96231b3b80d8
Oliver Stannard [Mon, 8 Jun 2015 16:55:31 +0000 (16:55 +0000)]
Fix assertion failure in global-merge with unused ConstantExpr
The global-merge pass was crashing because it assumes that all ConstantExprs
(reached via the global variables that they use) have at least one user.
I haven't worked out a way to test this, as an unused ConstantExpr cannot be
represented by serialised IR, and global-merge can only be run in llc, which
does not run any passes which can make a ConstantExpr dead.
This (reduced to the point of silliness) C code triggers this bug when compiled
for arm-none-eabi at -O1:
static a = 7;
static volatile b[10] = {&a};
c;
main() {
c = 0;
for (; c < 10;)
printf(b[c]);
}
Differential Revision: http://reviews.llvm.org/D10314
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239308
91177308-0d34-0410-b5e6-
96231b3b80d8
Colin LeMahieu [Mon, 8 Jun 2015 16:34:47 +0000 (16:34 +0000)]
[Hexagon] Adding functionality for searching for compound instruction pairs. Compound instructions reduce slot resource requirements freeing those packet slots up for more instructions.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239307
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Mon, 8 Jun 2015 16:19:00 +0000 (16:19 +0000)]
[DAGCombiner] Added CTLZ vector constant folding support.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@239305
91177308-0d34-0410-b5e6-
96231b3b80d8