OSDN Git Service
Vitaly Buka [Tue, 22 Jan 2019 07:22:45 +0000 (07:22 +0000)]
Revert "Remove static_assert(value == std::is_trivially_copyable<T>::value)"
Upgraded the bot as workaround.
This reverts commit r351784.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351786
91177308-0d34-0410-b5e6-
96231b3b80d8
Alex Bradbury [Tue, 22 Jan 2019 07:22:00 +0000 (07:22 +0000)]
[RISCV][NFC] Add break to case statement in RISCVDAGToDAGISel::Select
The break isn't strictly needed yet as there is no subsequent entry in the
case. But adding to prevent mistakes further down the road.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351785
91177308-0d34-0410-b5e6-
96231b3b80d8
Vitaly Buka [Tue, 22 Jan 2019 06:26:50 +0000 (06:26 +0000)]
Remove static_assert(value == std::is_trivially_copyable<T>::value)
This fails to compile with clang ang libstdc++ 4.6
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351784
91177308-0d34-0410-b5e6-
96231b3b80d8
Alex Bradbury [Tue, 22 Jan 2019 05:06:57 +0000 (05:06 +0000)]
[RISCV] Fix build after r351778
Also add a comment to explain the expansion strategy for atomicrmw
{fadd,fsub}.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351782
91177308-0d34-0410-b5e6-
96231b3b80d8
Matt Arsenault [Tue, 22 Jan 2019 03:32:36 +0000 (03:32 +0000)]
IR: Add fp operations to atomicrmw
Add just fadd/fsub for now.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351778
91177308-0d34-0410-b5e6-
96231b3b80d8
Eli Friedman [Tue, 22 Jan 2019 01:51:37 +0000 (01:51 +0000)]
[ARM] Combine ands+lsls to lsls+lsrs for Thumb1.
This patch may seem familiar... but my previous patch handled the
equivalent lsls+and, not this case. Usually instcombine puts the
"and" after the shift, so this case doesn't come up. However, if the
shift comes out of a GEP, it won't get canonicalized by instcombine,
and DAGCombine doesn't have an equivalent transform.
This also modifies isDesirableToCommuteWithShift to suppress DAGCombine
transforms which would make the overall code worse.
I'm not really happy adding a bunch of code to handle this, but it would
probably be tricky to substantially improve the behavior of DAGCombine
here.
Differential Revision: https://reviews.llvm.org/D56032
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351776
91177308-0d34-0410-b5e6-
96231b3b80d8
Philip Reames [Tue, 22 Jan 2019 01:34:33 +0000 (01:34 +0000)]
[CVP] Use LVI to constant fold deopt operands
Deopt operands are generally intended to record information about a site in code with minimal perturbation of the surrounding code. Idiomatically, they also tend to appear down rare paths. Putting these together, we have an obvious case for extending CVP w/deopt operand constant folding. Arguably, we should be doing this for all operands on all instructions, but that's definitely a much larger and risky change.
Differential Revision: https://reviews.llvm.org/D55678
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351774
91177308-0d34-0410-b5e6-
96231b3b80d8
Eli Friedman [Tue, 22 Jan 2019 00:42:20 +0000 (00:42 +0000)]
[LangRef] Clarify semantics of volatile operations.
Specifically, clarify the following:
1. Volatile load and store may access addresses that are not memory.
2. Volatile load and store do not modify arbitrary memory.
3. Volatile load and store do not trap.
Prompted by recent volatile discussion on llvmdev.
Currently, there's sort of a split in the source code about whether
volatile operations are allowed to trap; this resolves that dispute in
favor of not allowing them to trap.
Differential Revision: https://reviews.llvm.org/D53184
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351772
91177308-0d34-0410-b5e6-
96231b3b80d8
Matt Arsenault [Tue, 22 Jan 2019 00:29:37 +0000 (00:29 +0000)]
GlobalISel: Fix out of bounds crashes in verifier
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351769
91177308-0d34-0410-b5e6-
96231b3b80d8
Eli Friedman [Tue, 22 Jan 2019 00:21:35 +0000 (00:21 +0000)]
[AArch64] Add patterns for zext/sext of shift amount.
Not sure this is the best fix, but it saves an instruction for certain
constructs involving variable shifts.
Differential Revision: https://reviews.llvm.org/D55572
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351768
91177308-0d34-0410-b5e6-
96231b3b80d8
Matt Arsenault [Tue, 22 Jan 2019 00:20:17 +0000 (00:20 +0000)]
AMDGPU/GlobalISel: Legalize more fp<->int conversions
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351767
91177308-0d34-0410-b5e6-
96231b3b80d8
JF Bastien [Mon, 21 Jan 2019 23:53:52 +0000 (23:53 +0000)]
Document toolchain update policy
Summary:
Capture the current agreed-upon toolchain update policy based on the following
discussions:
- LLVM dev meeting 2018 BoF "Migrating to C++14, and beyond!"
llvm.org/devmtg/2018-10/talk-abstracts.html#bof3
- A Short Policy Proposal Regarding Host Compilers
lists.llvm.org/pipermail/llvm-dev/2018-May/123238.html
- Using C++14 code in LLVM (2018)
lists.llvm.org/pipermail/llvm-dev/2018-May/123182.html
- Using C++14 code in LLVM (2017)
lists.llvm.org/pipermail/llvm-dev/2017-October/118673.html
- Using C++14 code in LLVM (2016)
lists.llvm.org/pipermail/llvm-dev/2016-October/105483.html
- Document and Enforce new Host Compiler Policy
llvm.org/D47073
- Require GCC 5.1 and LLVM 3.5 at a minimum
llvm.org/D46723
Subscribers: jkorous, dexonsmith, llvm-commits
Differential Revision: https://reviews.llvm.org/D56819
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351765
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Mon, 21 Jan 2019 22:12:35 +0000 (22:12 +0000)]
[x86] add another test for xor with undefs; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351764
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Mon, 21 Jan 2019 21:52:27 +0000 (21:52 +0000)]
[x86] add tests for vector ops with undef lanes; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351763
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Mon, 21 Jan 2019 20:14:09 +0000 (20:14 +0000)]
[X86] Use X86ISD::VFPROUND instead of ISD::FP_ROUND for 256 and 512 bit cvtpd2ps intrinsics.
Summary:
Use X86ISD::VFPROUND in the instruction isel patterns. Add new patterns for ISD::FP_ROUND to maintain support for fptrunc in IR.
In the process I found a couple duplicate isel patterns which I also deleted in this patch.
Reviewers: RKSimon, spatel
Reviewed By: RKSimon
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D56991
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351762
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Mon, 21 Jan 2019 20:02:28 +0000 (20:02 +0000)]
[X86] Change avx512 COMPRESS and EXPAND lowering to use a single masked node instead of expand/compress+select.
Summary:
For compress, a select node doesn't semantically reflect the behavior of the instruction. The mask would have holes in it, but the resulting write is to contiguous elements at the bottom of the vector.
Furthermore, as far as the compressing and expanding is concerned the behavior is depended on the mask. You can't just have an expand/compress node that only reads the input vector. That node would have no meaning by itself.
This all only works because we pattern match the compress/expand+select back to the instruction. But conceivably an optimization of the select could break the pattern and leave something meaningless.
This patch modifies the expand and compress node to take the mask and passthru as additional inputs and gets rid of the select all together.
Reviewers: RKSimon, spatel
Reviewed By: RKSimon
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D57002
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351761
91177308-0d34-0410-b5e6-
96231b3b80d8
Stanislav Mekhanoshin [Mon, 21 Jan 2019 19:11:26 +0000 (19:11 +0000)]
[AMDGPU] Fixed hazard recognizer to walk predecessors
Fixes two problems with GCNHazardRecognizer:
1. It only scans up to 5 instructions emitted earlier.
2. It does not take control flow into account. An earlier instruction
from the previous basic block is not necessarily a predecessor.
At the same time a real predecessor block is not scanned.
The patch provides a way to distinguish between scheduler and
hazard recognizer mode. It is OK to work with emitted instructions
in the scheduler because we do not really know what will be emitted
later and its order. However, when pass works as a hazard recognizer
the schedule is already finalized, and we have full access to the
instructions for the whole function, so we can properly traverse
predecessors and their instructions.
Differential Revision: https://reviews.llvm.org/D56923
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351759
91177308-0d34-0410-b5e6-
96231b3b80d8
Nico Weber [Mon, 21 Jan 2019 18:59:11 +0000 (18:59 +0000)]
gn build: Stop passing -DLLVM_LIBXML2_ENABLED to some targets
This is a remnant from before the gn build had a working config.h.
Defining LLVM_LIBXML2_ENABLED only for targets that depend on build/libs/xml is
nice in that only some of the codebase needs to be rebuilt when
llvm_enable_libxml2 changes -- but config.h already defines it and defining it
there and then redundantly a second time for some targets is worse than having
it just in config.h.
No behavior change.
Differential Revision: https://reviews.llvm.org/D56908
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351758
91177308-0d34-0410-b5e6-
96231b3b80d8
Nico Weber [Mon, 21 Jan 2019 18:56:39 +0000 (18:56 +0000)]
gn build: Merge r351627, r351548, r351701
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351757
91177308-0d34-0410-b5e6-
96231b3b80d8
Pavel Labath [Mon, 21 Jan 2019 18:21:03 +0000 (18:21 +0000)]
Fix compilation error with gcc 4.8
This version of gcc seems to be having issues with raw literals inside macro
arguments. I change the string to use regular string literals instead.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351756
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Mon, 21 Jan 2019 18:04:25 +0000 (18:04 +0000)]
[X86][BtVer2] Update latency of mmx horizontal operations
D56777 added +1cy local forwarding penalty for horizontal operations, but this penalty only affects sse2/xmm variants, the mmx variants don't suffer the penalty.
Confirmed with @andreadb
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351755
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Mon, 21 Jan 2019 17:46:35 +0000 (17:46 +0000)]
[AArch64] add more tests for buildvec to shuffle transform; NFC
These are copied from the sibling x86 file. I'm not sure which
of the current outputs (if any) is considered optimal, but
someone more familiar with AArch may want to take a look.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351754
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Mon, 21 Jan 2019 17:30:14 +0000 (17:30 +0000)]
[DAGCombiner] fix crash when converting build vector to shuffle
The regression test is reduced from the example shown in D56281.
This does raise a question as noted in the test file: do we want
to handle this pattern? I don't have a motivating example for
that on x86 yet, but it seems like we could have that pattern
there too, so we could avoid the back-and-forth using a shuffle.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351753
91177308-0d34-0410-b5e6-
96231b3b80d8
Andrea Di Biagio [Mon, 21 Jan 2019 12:04:10 +0000 (12:04 +0000)]
[X86][BtVer2] Update the WriteLoad latency.
r327630 introduced new write definitions for float/vector loads.
Before that revision, WriteLoad was used by both integer/float (scalar/vector)
load. So, WriteLoad had to conservatively declare a latency to 5cy. That is
because the load-to-use latency for float/vector load is 5cy.
Now that we have dedicated writes for float/vector loads, there is no reason why
we should keep the latency of WriteLoad to 5cy. At the moment, WriteLoad is only
used by scalar integer loads only; we can assume an optimstic 3cy latency for
them.
This patch changes that latency from 5cy to 3cy, and regenerates the affected
scheduling/mca tests.
Differential Revision: https://reviews.llvm.org/D56922
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351742
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Mon, 21 Jan 2019 11:33:52 +0000 (11:33 +0000)]
[CostModel][X86] Add XOP icmp cost tests (PR40376)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351741
91177308-0d34-0410-b5e6-
96231b3b80d8
Dmitry Venikov [Mon, 21 Jan 2019 10:00:57 +0000 (10:00 +0000)]
[llvm-symbolizer] Add -no-demangle as alias for -demangle=false
Summary: Provides -no-demangle as alias for -demangle=false. Motivation: https://bugs.llvm.org/show_bug.cgi?id=40075
Reviewers: jhenderson, ruiu
Reviewed By: jhenderson
Subscribers: erik.pilkington, rupprecht, llvm-commits
Differential Revision: https://reviews.llvm.org/D56773
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351735
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Mon, 21 Jan 2019 09:52:34 +0000 (09:52 +0000)]
Fix typos throughout the license files that somehow I and my reviewers
all missed!
Thanks to Alex Bradbury for pointing this out, and the fact that I never
added the intended `legacy` anchor to the developer policy. Add that
anchor too. With hope, this will cause the links to all resolve
successfully.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351731
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Mon, 21 Jan 2019 08:16:59 +0000 (08:16 +0000)]
[X86] Remove and autoupgrade vpmovqd/vpmovwb intrinsics using trunc+select.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351729
91177308-0d34-0410-b5e6-
96231b3b80d8
Max Kazantsev [Mon, 21 Jan 2019 07:36:55 +0000 (07:36 +0000)]
[NFC] Make getExpressionSize unsigned short
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351727
91177308-0d34-0410-b5e6-
96231b3b80d8
Max Kazantsev [Mon, 21 Jan 2019 07:27:47 +0000 (07:27 +0000)]
[NFC] Fix warnings in unit test of r351725
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351726
91177308-0d34-0410-b5e6-
96231b3b80d8
Max Kazantsev [Mon, 21 Jan 2019 06:19:50 +0000 (06:19 +0000)]
[SCEV][NFC] Introduces expression sizes estimation
This patch introduces the field `ExpressionSize` in SCEV. This field is
calculated only once on SCEV creation, and it represents the complexity of
this SCEV from arithmetical point of view (not from the point of the number
of actual different SCEV nodes that are used in the expression). Roughly
saying, it is the number of operands and operations symbols when we print this
SCEV.
A formal definition is following: if SCEV `X` has operands
`Op1`, `Op2`, ..., `OpN`,
then
Size(X) = 1 + Size(Op1) + Size(Op2) + ... + Size(OpN).
Size of SCEVConstant and SCEVUnknown is one.
Expression size may be used as a universal way to limit SCEV transformations
for huge SCEVs. Currently, we have a bunch of options that represents various
limits (such as recursion depth limit) that may not make any sense from the
point of view of a LLVM users who is not familiar with SCEV internals, and all
these different options pursue one goal. A more general rule that may
potentially allow us to get rid of this redundancy in options is "do not make
transformations with SCEVs of huge size". It can apply to all SCEV traversals
and transformations that may need to visit a SCEV node more than once, hence
they are prone to combinatorial explosions.
This patch only introduces SCEV sizes calculation as NFC, its utilization will
be introduced in follow-up patches.
Differential Revision: https://reviews.llvm.org/D35989
Reviewed By: reames
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351725
91177308-0d34-0410-b5e6-
96231b3b80d8
Kito Cheng [Mon, 21 Jan 2019 05:27:09 +0000 (05:27 +0000)]
[RISCV] Add R_RISCV_RELAX relocation to all possible relax candidates.
Summary:
Add R_RISCV_RELAX relocation to all possible relax candidates and
update corresponding testcase.
Reviewers: asb, apazos
Differential Revision: https://reviews.llvm.org/D46677
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351723
91177308-0d34-0410-b5e6-
96231b3b80d8
Dylan McKay [Mon, 21 Jan 2019 04:32:02 +0000 (04:32 +0000)]
[AVR] Insert unconditional branch when inserting MBBs between blocks with fallthrough
This updates the AVR Select8/Select16 expansion code so that, when
inserting the two basic blocks for true and false conditions, any
existing fallthrough on the previous block is preserved.
Prior to this patch, if the block before the Select pseudo fell through
to the subsequent block, two new basic blocks would be inserted at the
prior fallthrough point, changing the fallthrough destination.
The predecessor or successor lists were not updated, causing the
BranchFolding pass at -O1 and above the rearrange basic blocks, causing
an infinite loop. Not to mention the unconditional fallthrough to the
true block is incorrect in of itself.
This patch modifies the Select8/16 expansion so that, if inserting true
and false basic blocks at a fallthrough point, the implicit branch is
preserved by means of an explicit, unconditional branch to the previous
fallthrough destination.
Thanks to Carl Peto for reporting this bug.
This fixes avr-rust bug https://github.com/avr-rust/rust/issues/123.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351721
91177308-0d34-0410-b5e6-
96231b3b80d8
Dylan McKay [Mon, 21 Jan 2019 04:27:08 +0000 (04:27 +0000)]
[AVR] Enable emission of debug information
Prior to this, the code was missing AVR-specific relocation logic in
RelocVisitor.h.
This patch teaches RelocVisitor about R_AVR_16 and R_AVR_32.
Debug information is emitted in the final object file, and understood by
'avr-readelf --debug-dump' from AVR-GCC.
llvm-dwarfdump is yet to understand how to dump AVR DWARF symbols.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351720
91177308-0d34-0410-b5e6-
96231b3b80d8
Dylan McKay [Mon, 21 Jan 2019 02:46:13 +0000 (02:46 +0000)]
Revert "[AVR] Insert unconditional branch when inserting MBBs between blocks with fallthrough"
This reverts commit r351718.
Carl pointed out that the unit test could be improved.
This patch will be recommitted once the test is made more resilient.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351719
91177308-0d34-0410-b5e6-
96231b3b80d8
Dylan McKay [Mon, 21 Jan 2019 02:44:09 +0000 (02:44 +0000)]
[AVR] Insert unconditional branch when inserting MBBs between blocks with fallthrough
This updates the AVR Select8/Select16 expansion code so that, when
inserting the two basic blocks for true and false conditions, any
existing fallthrough on the previous block is preserved.
Prior to this patch, if the block before the Select pseudo fell through
to the subsequent block, two new basic blocks would be inserted at the
prior fallthrough point, changing the fallthrough destination.
The predecessor or successor lists were not updated, causing the
BranchFolding pass at -O1 and above the rearrange basic blocks, causing
an infinite loop. Not to mention the unconditional fallthrough to the
true block is incorrect in of itself.
This patch modifies the Select8/16 expansion so that, if inserting true
and false basic blocks at a fallthrough point, the implicit branch is
preserved by means of an explicit, unconditional branch to the previous
fallthrough destination.
Thanks to Carl Peto for reporting this bug.
This fixes avr-rust bug https://github.com/avr-rust/rust/issues/123.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351718
91177308-0d34-0410-b5e6-
96231b3b80d8
Serge Guelton [Sun, 20 Jan 2019 23:06:45 +0000 (23:06 +0000)]
Tentative fix for r351701 and gcc 6.2 build on ubuntu
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351705
91177308-0d34-0410-b5e6-
96231b3b80d8
Serge Guelton [Sun, 20 Jan 2019 21:24:05 +0000 (21:24 +0000)]
Add missing test file
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351702
91177308-0d34-0410-b5e6-
96231b3b80d8
Serge Guelton [Sun, 20 Jan 2019 21:19:56 +0000 (21:19 +0000)]
Replace llvm::isPodLike<...> by llvm::is_trivially_copyable<...>
As noted in https://bugs.llvm.org/show_bug.cgi?id=36651, the specialization for
isPodLike<std::pair<...>> did not match the expectation of
std::is_trivially_copyable which makes the memcpy optimization invalid.
This patch renames the llvm::isPodLike trait into llvm::is_trivially_copyable.
Unfortunately std::is_trivially_copyable is not portable across compiler / STL
versions. So a portable version is provided too.
Note that the following specialization were invalid:
std::pair<T0, T1>
llvm::Optional<T>
Tests have been added to assert that former specialization are respected by the
standard usage of llvm::is_trivially_copyable, and that when a decent version
of std::is_trivially_copyable is available, llvm::is_trivially_copyable is
compared to std::is_trivially_copyable.
As of this patch, llvm::Optional is no longer considered trivially copyable,
even if T is. This is to be fixed in a later patch, as it has impact on a
long-running bug (see r347004)
Note that GCC warns about this UB, but this got silented by https://reviews.llvm.org/D50296.
Differential Revision: https://reviews.llvm.org/D54472
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351701
91177308-0d34-0410-b5e6-
96231b3b80d8
Matt Arsenault [Sun, 20 Jan 2019 19:45:18 +0000 (19:45 +0000)]
AMDGPU: Legalize more bitcasts
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351700
91177308-0d34-0410-b5e6-
96231b3b80d8
Matt Arsenault [Sun, 20 Jan 2019 19:45:14 +0000 (19:45 +0000)]
GlobalISel: Add isPointer legality predicates
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351699
91177308-0d34-0410-b5e6-
96231b3b80d8
Matt Arsenault [Sun, 20 Jan 2019 19:28:20 +0000 (19:28 +0000)]
AMDGPU/GlobalISel: Really legalize exts from i1
There is a combine that was hiding these tests
not actually testing what they should be, although
they were producing the expected end result.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351698
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Sun, 20 Jan 2019 19:27:40 +0000 (19:27 +0000)]
[X86] Auto upgrade VPCOM/VPCOMU intrinsics to generic integer comparisons
This causes a couple of changes in the upgrade tests as signed/unsigned eq/ne are equivalent and we constant fold true/false codes, these changes are the same as what we already do for avx512 cmp/ucmp.
Noticed while cleaning up vector integer comparison costs for PR40376.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351697
91177308-0d34-0410-b5e6-
96231b3b80d8
Matt Arsenault [Sun, 20 Jan 2019 19:10:31 +0000 (19:10 +0000)]
GlobalISel: Implement widenScalar for basic FP ops
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351696
91177308-0d34-0410-b5e6-
96231b3b80d8
Matt Arsenault [Sun, 20 Jan 2019 19:10:26 +0000 (19:10 +0000)]
AMDGPU/GlobalISel: Legalize f32->f16 fptrunc
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351695
91177308-0d34-0410-b5e6-
96231b3b80d8
Matt Arsenault [Sun, 20 Jan 2019 18:40:36 +0000 (18:40 +0000)]
AMDGPU/GlobalISel: Fix some crashs in g_unmerge_values/g_merge_values
This was crashing in the predicate function assuming the value
is a vector.
Copy more of what AArch64 uses. This probably needs more refinement
later, but I don't exactly understand what it means in some cases,
particularly since any legalization for these seems to be missing.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351693
91177308-0d34-0410-b5e6-
96231b3b80d8
Matt Arsenault [Sun, 20 Jan 2019 18:35:41 +0000 (18:35 +0000)]
AMDGPU/GlobalISel: Regbank select for fpext
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351692
91177308-0d34-0410-b5e6-
96231b3b80d8
Matt Arsenault [Sun, 20 Jan 2019 18:34:24 +0000 (18:34 +0000)]
AMDGPU/GlobalISel: Cleanup legality for extensions
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351691
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Sun, 20 Jan 2019 17:36:22 +0000 (17:36 +0000)]
[X86] Auto upgrade old style VPCOM/VPCOMU intrinsics to generic integer comparisons
We were upgrading these to the new style VPCOM/VPCOMU intrinsics (which includes the condition code immediate), but we'll be getting rid of those shortly, so convert these to generics first.
This causes a couple of changes in the upgrade tests as signed/unsigned eq/ne are equivalent and we constant fold true/false codes, these changes are the same as what we already do for avx512 cmp/ucmp.
Noticed while cleaning up vector integer comparison costs for PR40376.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351690
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Sun, 20 Jan 2019 16:40:44 +0000 (16:40 +0000)]
[X86] Replace VPCOM/VPCOMU with generic integer comparisons (llvm)
These intrinsics can always be replaced with generic integer comparisons without any regression in codegen, even for -O0/-fast-isel cases.
Noticed while cleaning up vector integer comparison costs for PR40376.
A future commit will remove/autoupgrade the existing VPCOM/VPCOMU llvm intrinsics.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351688
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Sun, 20 Jan 2019 13:55:01 +0000 (13:55 +0000)]
[CostModel][X86] Add explicit vector select costs
Prior to SSE41 (and sometimes on AVX1), vector select has to be performed as a ((X & C)|(Y & ~C)) bit select.
Exposes a couple of issues with the min/max reduction costs (which only go down to SSE42 for some reason).
The increase pre-SSE41 selection costs also prevent a couple of tests from firing any longer, so I've either tweaked the target or added AVX tests as well to the existing SSE2 tests.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351685
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Sun, 20 Jan 2019 13:21:43 +0000 (13:21 +0000)]
[CostModel][X86] Add explicit fcmp costs for pre-SSE42 targets
Typical throughputs: cmpss/cmpps = 1cy and cmpsd/cmppd = 2cy before the Core2 era
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351684
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Sun, 20 Jan 2019 12:28:13 +0000 (12:28 +0000)]
[TTI][X86] Reordered getCmpSelInstrCost cost tables in descending ISA order. NFCI.
Minor tidyup to make it clearer whats going on before adding additional costs.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351683
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Sun, 20 Jan 2019 12:10:42 +0000 (12:10 +0000)]
[CostModel][X86] Split icmp/fcmp costs tests and test all comparison codes
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351682
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Sun, 20 Jan 2019 11:23:01 +0000 (11:23 +0000)]
[CostModel][X86] Add masked load/store/gather/scatter tests for SSE2/SSE42/AVX1 targets
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351681
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Sun, 20 Jan 2019 11:19:35 +0000 (11:19 +0000)]
[CostModel][X86] Add non-constant vselect cost tests
Also add AVX512 costs at the same time
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351680
91177308-0d34-0410-b5e6-
96231b3b80d8
Dylan McKay [Sun, 20 Jan 2019 11:16:58 +0000 (11:16 +0000)]
[AVR] Remove unneeded XFAILs from the Generic CodeGen tests
These have been in place for quite a while now.
Several bugs have since been fixed, and these tests now pass.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351679
91177308-0d34-0410-b5e6-
96231b3b80d8
Dylan McKay [Sun, 20 Jan 2019 11:12:39 +0000 (11:12 +0000)]
[AVR] Allow AVR to be explicitly set as the default target triple
This extends the CMake cross compilation logic so that AVR can be set as
the default target triple, and thus the generic codegen tests can be
run.
This used to be possible on AVR; the CMake configuration files have
since been changed.
With this patch, 'cmake -DLLVM_DEFAULT_TARGET_TRIPLE=avr-unknown-unknown' can
be passed on the command line, making the `-mcpu` argument redundant to
'llc' and friends.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351678
91177308-0d34-0410-b5e6-
96231b3b80d8
Dylan McKay [Sun, 20 Jan 2019 03:45:29 +0000 (03:45 +0000)]
[AVR] Replace two references to ARM's 't2_so_imm' type comments
These were originally introduced in a copy-paste committed in r351526.
The reference to 't2_so_imm' have been updated to 'imm_com8' so the
comment is now accurate.
Thanks to Eli Friedman for noticing this.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351674
91177308-0d34-0410-b5e6-
96231b3b80d8
Dylan McKay [Sun, 20 Jan 2019 03:41:08 +0000 (03:41 +0000)]
[AVR] Fix codegen bug in 16-bit loads
Prior to this patch, the AVR::LDWRdPtr instruction was always lowered to
instructions of this pattern:
ld $GPR8, [PTR:XYZ]+
ld $GPR8, [PTR]+1
This has a problem; the [PTR] is incremented in-place once, but never
decremented.
Future uses of the same pointer will use the now clobbered value,
leading to the pointer being incorrect by an offset of one.
This patch modifies the expansion code of the LDWRdPtr pseudo
instruction so that the pointer variable is not silently clobbered in
future uses in the same live range.
Bug first reported by Keshav Kini.
Patch by Kaushik Phatak.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351673
91177308-0d34-0410-b5e6-
96231b3b80d8
Dylan McKay [Sun, 20 Jan 2019 03:41:00 +0000 (03:41 +0000)]
Revert "[AVR] Fix codegen bug in 16-bit loads"
This reverts commit r351544.
In that commit, I had mistakenly misattributed the issue submitter as
the patch author, Kaushik Phatak.
The patch will be recommitted immediately with the correct attribution.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351672
91177308-0d34-0410-b5e6-
96231b3b80d8
Vedant Kumar [Sun, 20 Jan 2019 02:44:43 +0000 (02:44 +0000)]
[ConstantMerge] Factor out check for un-mergeable globals, NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351671
91177308-0d34-0410-b5e6-
96231b3b80d8
Eric Fiselier [Sun, 20 Jan 2019 00:51:02 +0000 (00:51 +0000)]
make XFAIL, REQUIRES, and UNSUPPORTED support multi-line expressions
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351668
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Sat, 19 Jan 2019 21:26:20 +0000 (21:26 +0000)]
[X86] Add masked MCVTSI2P/MCVTUI2P ISD opcodes to model the cvtqq2ps cvtuqq2ps nodes that produce less than 128-bits of results.
These nodes zero the upper half of the result and can't be represented with vselect.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351666
91177308-0d34-0410-b5e6-
96231b3b80d8
Martin Storsjo [Sat, 19 Jan 2019 19:42:54 +0000 (19:42 +0000)]
[llvm-objcopy] [COFF] Implement --only-section
Differential Revision: https://reviews.llvm.org/D56873
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351663
91177308-0d34-0410-b5e6-
96231b3b80d8
Martin Storsjo [Sat, 19 Jan 2019 19:42:48 +0000 (19:42 +0000)]
[llvm-objcopy] [COFF] Implement --only-keep-debug
Differential Revision: https://reviews.llvm.org/D56840
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351662
91177308-0d34-0410-b5e6-
96231b3b80d8
Martin Storsjo [Sat, 19 Jan 2019 19:42:41 +0000 (19:42 +0000)]
[llvm-objcopy] [COFF] Implement --strip-debug
Also remove sections similarly for --strip-all, --discard-all,
--strip-unneeded.
Differential Revision: https://reviews.llvm.org/D56839
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351661
91177308-0d34-0410-b5e6-
96231b3b80d8
Martin Storsjo [Sat, 19 Jan 2019 19:42:35 +0000 (19:42 +0000)]
[llvm-objcopy] [COFF] Add support for removing sections
Differential Revision: https://reviews.llvm.org/D56683
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351660
91177308-0d34-0410-b5e6-
96231b3b80d8
Martin Storsjo [Sat, 19 Jan 2019 19:42:27 +0000 (19:42 +0000)]
[llvm-objcopy] [COFF] Add a testcase for patching the debug directory. NFC.
The debug directory contains the rwa file address of itself,
which is updated on write. Add a testcase for this existing
functionality.
Differential Revision: https://reviews.llvm.org/D56876
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351659
91177308-0d34-0410-b5e6-
96231b3b80d8
Martin Storsjo [Sat, 19 Jan 2019 19:42:23 +0000 (19:42 +0000)]
[llvm-objcopy] [COFF] Remove a superfluous namespace qualification. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351658
91177308-0d34-0410-b5e6-
96231b3b80d8
Martin Storsjo [Sat, 19 Jan 2019 19:42:19 +0000 (19:42 +0000)]
[llvm-objcopy] [COFF] Rename a test from .yaml to .test. NFC.
Tests named .yaml aren't executed by default in this directory
(while they are within e.g. LLD).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351657
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Sat, 19 Jan 2019 11:53:58 +0000 (11:53 +0000)]
Update the coding standards with the new file header.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351652
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Sat, 19 Jan 2019 11:30:51 +0000 (11:30 +0000)]
Update structured references to the license to the new license.
Since these are intended to be short and succinct, I've used the SPDX
full name. It's human readable, but formally agreed upon and will be
part of the SPDX spec for licenses.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351649
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Sat, 19 Jan 2019 10:56:40 +0000 (10:56 +0000)]
Update more file headers across all of the LLVM projects in the monorepo
to reflect the new license. These used slightly different spellings that
defeated my regular expressions.
We understand that people may be surprised that we're moving the header
entirely to discuss the new license. We checked this carefully with the
Foundation's lawyer and we believe this is the correct approach.
Essentially, all code in the project is now made available by the LLVM
project under our new license, so you will see that the license headers
include that license only. Some of our contributors have contributed
code under our old license, and accordingly, we have retained a copy of
our old license notice in the top-level files in each project and
repository.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351648
91177308-0d34-0410-b5e6-
96231b3b80d8
Nikita Popov [Sat, 19 Jan 2019 09:56:01 +0000 (09:56 +0000)]
[InstCombine] Simplify cttz/ctlz + icmp ugt/ult
Followup to D55745, this time handling comparisons with ugt and ult
predicates (which are the canonical forms for non-equality predicates).
For ctlz we can convert into a simple icmp, for cttz we can convert
into a mask check.
Differential Revision: https://reviews.llvm.org/D56355
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351645
91177308-0d34-0410-b5e6-
96231b3b80d8
Johannes Doerfert [Sat, 19 Jan 2019 09:40:14 +0000 (09:40 +0000)]
[NFX] Fix language reference title declaration
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351644
91177308-0d34-0410-b5e6-
96231b3b80d8
Johannes Doerfert [Sat, 19 Jan 2019 09:39:57 +0000 (09:39 +0000)]
[NFC] Fix unused variable warnings in Release builds
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351641
91177308-0d34-0410-b5e6-
96231b3b80d8
Kristina Brooks [Sat, 19 Jan 2019 09:07:38 +0000 (09:07 +0000)]
Remove a period from CREDITS.TXT (testing email change). NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351639
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Sat, 19 Jan 2019 08:50:56 +0000 (08:50 +0000)]
Update the file headers across all of the LLVM projects in the monorepo
to reflect the new license.
We understand that people may be surprised that we're moving the header
entirely to discuss the new license. We checked this carefully with the
Foundation's lawyer and we believe this is the correct approach.
Essentially, all code in the project is now made available by the LLVM
project under our new license, so you will see that the license headers
include that license only. Some of our contributors have contributed
code under our old license, and accordingly, we have retained a copy of
our old license notice in the top-level files in each project and
repository.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351636
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Sat, 19 Jan 2019 06:36:08 +0000 (06:36 +0000)]
Convert two more files that were using Windows line endings and remove
a stray single '\r' from one file. These are the last line ending issues
I can find in the files containing parts of LLVM's file headers.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351634
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Sat, 19 Jan 2019 06:14:24 +0000 (06:14 +0000)]
Install new LLVM license structure and new developer policy.
This installs the new developer policy and moves all of the license
files across all LLVM projects in the monorepo to the new license
structure. The remaining projects will be moved independently.
Note that I've left odd formatting and other idiosyncracies of the
legacy license structure text alone to make the diff easier to read.
Critically, note that we do not in any case *remove* the old license
notice or terms, as that remains necessary until we finish the
relicensing process.
I've updated a few license files that refer to the LLVM license to
instead simply refer generically to whatever license the LLVM project is
under, basically trying to minimize confusion.
This is really the culmination of so many people. Chris led the
community discussions, drafted the policy update and organized the
multi-year string of meeting between lawyers across the community to
figure out the strategy. Numerous lawyers at companies in the community
spent their time figuring out initial answers, and then the Foundation's
lawyer Heather Meeker has done *so* much to help refine and get us ready
here. I could keep going on, but I just want to make sure everyone
realizes what a huge community effort this has been from the begining.
Differential Revision: https://reviews.llvm.org/D56897
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351631
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Sat, 19 Jan 2019 06:02:27 +0000 (06:02 +0000)]
Cleanup non-UTF8 characters and some types I found in these files.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351630
91177308-0d34-0410-b5e6-
96231b3b80d8
Johannes Doerfert [Sat, 19 Jan 2019 05:19:12 +0000 (05:19 +0000)]
Enable IPConstantPropagation to work with abstract call sites
This modification of the currently unused inter-procedural constant
propagation pass (IPConstantPropagation) shows how abstract call sites
enable optimization of callback calls alongside direct and indirect
calls. Through minimal changes, mostly dealing with the partial mapping
of callbacks, inter-procedural constant propagation was enabled for
callbacks, e.g., OpenMP runtime calls or pthreads_create.
Differential Revision: https://reviews.llvm.org/D56447
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351628
91177308-0d34-0410-b5e6-
96231b3b80d8
Johannes Doerfert [Sat, 19 Jan 2019 05:19:06 +0000 (05:19 +0000)]
AbstractCallSite -- A unified interface for (in)direct and callback calls
An abstract call site is a wrapper that allows to treat direct,
indirect, and callback calls the same. If an abstract call site
represents a direct or indirect call site it behaves like a stripped
down version of a normal call site object. The abstract call site can
also represent a callback call, thus the fact that the initially
called function (=broker) may invoke a third one (=callback callee).
In this case, the abstract call side hides the middle man, hence the
broker function. The result is a representation of the callback call,
inside the broker, but in the context of the original instruction that
invoked the broker.
Again, there are up to three functions involved when we talk about
callback call sites. The caller (1), which invokes the broker
function. The broker function (2), that may or may not invoke the
callback callee. And finally the callback callee (3), which is the
target of the callback call.
The abstract call site will handle the mapping from parameters to
arguments depending on the semantic of the broker function. However,
it is important to note that the mapping is often partial. Thus, some
arguments of the call/invoke instruction are mapped to parameters of
the callee while others are not. At the same time, arguments of the
callback callee might be unknown, thus "null" if queried.
This patch introduces also !callback metadata which describe how a
callback broker maps from parameters to arguments. This metadata is
directly created by clang for known broker functions, provided through
source code attributes by the user, or later deduced by analyses.
For motivation and additional information please see the corresponding
talk (slides/video)
https://llvm.org/devmtg/2018-10/talk-abstracts.html#talk20
as well as the LCPC paper
http://compilers.cs.uni-saarland.de/people/doerfert/par_opt_lcpc18.pdf
Differential Revision: https://reviews.llvm.org/D54498
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351627
91177308-0d34-0410-b5e6-
96231b3b80d8
Roman Tereshin [Sat, 19 Jan 2019 03:37:25 +0000 (03:37 +0000)]
Reapply "[CGP] Check for existing inttotpr before creating new one"
Original commit: r351582
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351626
91177308-0d34-0410-b5e6-
96231b3b80d8
Vedant Kumar [Sat, 19 Jan 2019 02:46:22 +0000 (02:46 +0000)]
[MergeFunc] Allow merging identical vararg functions using aliases
Thanks to Nikita Popov for pointing out this missed case.
This is a follow-up to r351411, which disabled function merging for
vararg functions outright due to a miscompile (see llvm.org/PR40345).
Differential Revision: https://reviews.llvm.org/D56865
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351624
91177308-0d34-0410-b5e6-
96231b3b80d8
Vedant Kumar [Sat, 19 Jan 2019 02:38:47 +0000 (02:38 +0000)]
[HotColdSplit] Mark inherently cold functions as such
If an inherently cold function is found, mark it as cold. For now this
means applying the `cold` and `minsize` attributes.
As a drive-by, revisit and clean up the criteria for considering a
function for splitting. Add tests.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351623
91177308-0d34-0410-b5e6-
96231b3b80d8
Vedant Kumar [Sat, 19 Jan 2019 02:38:17 +0000 (02:38 +0000)]
[HotColdSplit] Remove a set which tracked split functions (NFC)
Use the begin/end iterator idiom to avoid visiting split functions,
instead of doing a set lookup.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351622
91177308-0d34-0410-b5e6-
96231b3b80d8
Vedant Kumar [Sat, 19 Jan 2019 02:37:59 +0000 (02:37 +0000)]
[CodeExtractor] Emit lifetime markers around reloads of outputs
CodeExtractor permits extracting a region of blocks from a function even
when values defined within the region are used outside of it.
This is typically done by creating an alloca in the original function
and reloading the alloca after a call to the extracted function.
Wrap the reload in lifetime start/end markers to promote stack coloring.
Suggested by Sergei Kachkov!
Differential Revision: https://reviews.llvm.org/D56045
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351621
91177308-0d34-0410-b5e6-
96231b3b80d8
Roman Tereshin [Sat, 19 Jan 2019 01:53:26 +0000 (01:53 +0000)]
Revert "Reapply "[CGP] Check for existing inttotpr before creating new one""
This reverts commit r351618.
Compiler RT + ASAN tests are failing for PowerPC. Not sure
how would I reproduce these on macOS, so reverting (again)
until I do.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351619
91177308-0d34-0410-b5e6-
96231b3b80d8
Roman Tereshin [Sat, 19 Jan 2019 01:41:03 +0000 (01:41 +0000)]
Reapply "[CGP] Check for existing inttotpr before creating new one"
Original commit: r351582
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351618
91177308-0d34-0410-b5e6-
96231b3b80d8
Amara Emerson [Sat, 19 Jan 2019 00:36:11 +0000 (00:36 +0000)]
Revert r351584: "GlobalISel: Verify g_zextload and g_sextload"
This new assertion triggered on the AArch64 GlobalISel bots. Reverting while it's being investigated.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351617
91177308-0d34-0410-b5e6-
96231b3b80d8
Reid Kleckner [Sat, 19 Jan 2019 00:33:02 +0000 (00:33 +0000)]
[X86] Deduplicate static calling convention helpers for code size, NFC
Summary:
Right now we include ${TGT}GenCallingConv.inc once per each instruction
selection method implemented by ${TGT}:
- ${TGT}ISelLowering.cpp
- ${TGT}CallLowering.cpp
- ${TGT}FastISel.cpp
Instead, add a mechanism to tablegen for marking a particular convention
as "External", which causes tablegen to emit into the ::llvm namespace,
instead of as a static helper. This allows us to provide a header to
forward declare it, so we can simply call the function from all the
places it is referenced. Typically the calling convention analyzer is
called indirectly, so it doesn't benefit from inlining.
This saves a bit of final binary size, but mostly just saves object file
size:
before after diff artifact
12852K 12492K -360K X86ISelLowering.cpp.obj
4640K 4280K -360K X86FastISel.cpp.obj
1704K 2092K +388K X86CallingConv.cpp.obj
52448K 52336K -112K llc.exe
I didn't collect before numbers for X86CallLowering.cpp.obj, which is
for GlobalISel, but we should save 360K there as well.
This patch applies the strategy to the X86 backend, but there is no
reason it couldn't be applied to the other backends that implement
multiple ISel strategies, like AArch64.
Reviewers: craig.topper, hfinkel, efriedma
Subscribers: javed.absar, kristof.beyls, hiraditya, llvm-commits
Differential Revision: https://reviews.llvm.org/D56883
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351616
91177308-0d34-0410-b5e6-
96231b3b80d8
Nico Weber [Sat, 19 Jan 2019 00:10:54 +0000 (00:10 +0000)]
Use llvm_canonicalize_cmake_booleans for LLVM_LIBXML2_ENABLED [llvm]
r291284 added a nice mechanism to consistently pass CMake on/off toggles to
lit. This change uses it for LLVM_LIBXML2_ENABLED too (which was added around
the same time and doesn't use the new system yet).
Also alphabetically sort the list passed to llvm_canonicalize_cmake_booleans()
in llvm/test/CMakeLists.txt.
No intended behavior change.
Differential Revision: https://reviews.llvm.org/D56912
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351615
91177308-0d34-0410-b5e6-
96231b3b80d8
Rui Ueyama [Sat, 19 Jan 2019 00:07:57 +0000 (00:07 +0000)]
Remove F_modify flag from FileOutputBuffer.
This code is dead. There is no use of the feature in the entire LLVM codebase.
Differential Revision: https://reviews.llvm.org/D56939
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351613
91177308-0d34-0410-b5e6-
96231b3b80d8
Matt Arsenault [Fri, 18 Jan 2019 21:42:55 +0000 (21:42 +0000)]
AMDGPU/GlobalISel: Legalize more types for select
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351599
91177308-0d34-0410-b5e6-
96231b3b80d8
Roman Tereshin [Fri, 18 Jan 2019 21:38:44 +0000 (21:38 +0000)]
Revert "[CGP] Check for existing inttotpr before creating new one"
This reverts commit r351582.
Bots are failing. Reverting this to fix and re-commit later.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351598
91177308-0d34-0410-b5e6-
96231b3b80d8
Matt Arsenault [Fri, 18 Jan 2019 21:33:50 +0000 (21:33 +0000)]
AMDGPU/GlobalISel: Legalize illegal g_constant
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351596
91177308-0d34-0410-b5e6-
96231b3b80d8
Matt Arsenault [Fri, 18 Jan 2019 21:04:59 +0000 (21:04 +0000)]
GlobalISel: Verify G_BITCAST
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351594
91177308-0d34-0410-b5e6-
96231b3b80d8
Armando Montanez [Fri, 18 Jan 2019 20:56:03 +0000 (20:56 +0000)]
[elfabi] Add support for reading DT_NEEDED from binaries
This patch gives elfabi the ability to read DT_NEEDED entries from ELF binaries
to populate NeededLibs in TextAPI's ELFStub.
Differential Revision: https://reviews.llvm.org/D55852
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@351592
91177308-0d34-0410-b5e6-
96231b3b80d8