OSDN Git Service
Quentin Colombet [Fri, 2 Jun 2017 22:46:31 +0000 (22:46 +0000)]
[RABasic] Properly update the LiveRegMatrix when LR splitting occur
Prior to this patch we used to not touch the LiveRegMatrix while doing
live-range splitting. In other words, when live-range splitting was
occurring, the LiveRegMatrix was not reflecting the changes.
This is generally fine because it means the query to the LiveRegMatrix
will be conservately correct. However, when decisions are taken based on
what is going to happen on the interferences (e.g., when we spill a
register and know that it is going to be available for another one), we
might hit an assertion that the color used for the assignment is still
in use.
This patch makes sure the changes on the live-ranges are properly
reflected in the LiveRegMatrix, so the assertions don't break.
An alternative could have been to remove the assertion, but it would
make the invariants of the code and the general reasoning more
complicated in my opnion.
http://llvm.org/PR33057
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304603
91177308-0d34-0410-b5e6-
96231b3b80d8
Quentin Colombet [Fri, 2 Jun 2017 22:46:26 +0000 (22:46 +0000)]
[RABasic] Properly initialize the pass
Use the initializeXXX method to initialize the RABasic pass in the
pipeline. This enables us to take advantage of the .mir infrastructure.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304602
91177308-0d34-0410-b5e6-
96231b3b80d8
Xinliang David Li [Fri, 2 Jun 2017 22:38:48 +0000 (22:38 +0000)]
Fix debug build test failure
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304600
91177308-0d34-0410-b5e6-
96231b3b80d8
Xinliang David Li [Fri, 2 Jun 2017 22:08:04 +0000 (22:08 +0000)]
[PartialInlining] Minor cost anaysis tuning
Also added a test option and 2 cost analysis related tests.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304599
91177308-0d34-0410-b5e6-
96231b3b80d8
David Blaikie [Fri, 2 Jun 2017 21:24:17 +0000 (21:24 +0000)]
FunctionAttrs: Skip it if the effective SCC (ignoring optnone functions) is empty
Minor optimization but mostly simplifies my debugging so I'm not dealing
with empty SCCNodeSets while investigating issues in this optimization.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304597
91177308-0d34-0410-b5e6-
96231b3b80d8
Matthias Braun [Fri, 2 Jun 2017 21:02:03 +0000 (21:02 +0000)]
RegisterScavenging: Move scavenging logic from PEI to RegisterScavenging; NFC
These parts do not depend on any PrologEpilogInserter logic and
therefore better fits RegisterScaveging.cpp.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304596
91177308-0d34-0410-b5e6-
96231b3b80d8
Zachary Turner [Fri, 2 Jun 2017 21:00:22 +0000 (21:00 +0000)]
Fix build error on gcc.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304595
91177308-0d34-0410-b5e6-
96231b3b80d8
Jun Bum Lim [Fri, 2 Jun 2017 20:42:54 +0000 (20:42 +0000)]
[InlineCost] Enable the new switch cost heuristic
Summary:
This is to enable the new switch inline cost heuristic (r301649) by removing the
old heuristic as well as the flag itself.
In my experiment for LLVM test suite and spec2000/2006, +17.82% performance and
8% code size reduce was observed in spec2000/vertex with O3 LTO in AArch64.
No significant code size / performance regression was found in O3/O2/Os. No
significant complain was reported from the llvm-dev thread.
Reviewers: hans, chandlerc, eraman, haicheng, mcrosier, bmakam, eastig, ddibyend, echristo
Reviewed By: echristo
Subscribers: javed.absar, kristof.beyls, echristo, aemerson, rengolin, mehdi_amini
Differential Revision: https://reviews.llvm.org/D32653
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304594
91177308-0d34-0410-b5e6-
96231b3b80d8
Alexey Bataev [Fri, 2 Jun 2017 20:39:27 +0000 (20:39 +0000)]
[SLP] Improve comments and naming of functions/variables/members, NFC.
Summary:
Fixed some comments, added an additional description of the algorithms,
improved readability of the code.
Reviewers: anemet
Subscribers: llvm-commits, mzolotukhin
Differential Revision: https://reviews.llvm.org/D33320
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304593
91177308-0d34-0410-b5e6-
96231b3b80d8
Ahmed Bougacha [Fri, 2 Jun 2017 20:02:59 +0000 (20:02 +0000)]
[X86] Correctly broadcast NaN-like integers as float on AVX.
Since r288804, we try to lower build_vectors on AVX using broadcasts of
float/double. However, when we broadcast integer values that happen to
have a NaN float bitpattern, we lose the NaN payload, thereby changing
the integer value being broadcast.
This is caused by ConstantFP::get, to which we pass the splat i32 as
a float (by bitcasting it using bitsToFloat). ConstantFP::get takes
a double parameter, so we end up lossily converting a single-precision
NaN to double-precision.
Instead, avoid any kinds of conversions by directly building an APFloat
from the splatted APInt.
Note that this also fixes another piece of code (broadcast of
subvectors), that currently isn't susceptible to the same problem.
Also note that we could really just use APInt and ConstantInt
throughout: the constant pool type doesn't matter much. Still, for
consistency, use the appropriate type.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304590
91177308-0d34-0410-b5e6-
96231b3b80d8
Zachary Turner [Fri, 2 Jun 2017 20:00:10 +0000 (20:00 +0000)]
Fix build error with clang and gcc.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304589
91177308-0d34-0410-b5e6-
96231b3b80d8
Zachary Turner [Fri, 2 Jun 2017 19:49:14 +0000 (19:49 +0000)]
[CodeView] Support CodeView subsections in any order.
Previously we would expect certain subsections to appear
in a certain order because some subsections would reference
other subsections, but in practice we need to support
arbitrary orderings since some object file and PDB file
producers generate them this way. This also paves the
way for supporting Yaml <-> Object File conversion of
CodeView, since Object Files typically have quite a
large number of subsections in their debug info.
Differential Revision: https://reviews.llvm.org/D33807
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304588
91177308-0d34-0410-b5e6-
96231b3b80d8
Petr Hosek [Fri, 2 Jun 2017 19:38:11 +0000 (19:38 +0000)]
[CMake][runtimes] Add install target for runtimes builtins
This adds an install-builtins target to avoid having to list all
builtins targets explicitly.
Differential Revision: https://reviews.llvm.org/D32710
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304587
91177308-0d34-0410-b5e6-
96231b3b80d8
Amaury Sechet [Fri, 2 Jun 2017 19:15:04 +0000 (19:15 +0000)]
Regenerate expectation for wide-fma-contraction.ll . NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304586
91177308-0d34-0410-b5e6-
96231b3b80d8
Keno Fischer [Fri, 2 Jun 2017 19:04:17 +0000 (19:04 +0000)]
[SROA] Fix crash due to bad bitcast
Summary:
As shown in the test case, SROA was crashing when trying to split
stores (to the alloca) of loads (from anywhere), because it assumed
the pointer operand to the loads and stores had to have the same
address space. This isn't the case. Make sure to use the correct
pointer type for both the load and the store.
Reviewed By: yaxunl
Differential Revision: https://reviews.llvm.org/D32593
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304585
91177308-0d34-0410-b5e6-
96231b3b80d8
Evgeniy Stepanov [Fri, 2 Jun 2017 18:45:14 +0000 (18:45 +0000)]
[CFI] Remove LinkerSubsectionsViaSymbols.
Since D17854 LinkerSubsectionsViaSymbols is unnecessary.
It is interfering with ThinLTO implementation of CFI-ICall, where
the aliases used on the !LinkerSubsectionsViaSymbols branch are
needed to export jump tables to ThinLTO backends.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304582
91177308-0d34-0410-b5e6-
96231b3b80d8
David Blaikie [Fri, 2 Jun 2017 18:25:29 +0000 (18:25 +0000)]
BitcodeWriter: Removing unnecessary std::function in favor of template
More cleanup from post-commit discussion on r304516
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304579
91177308-0d34-0410-b5e6-
96231b3b80d8
Evgeniy Stepanov [Fri, 2 Jun 2017 18:24:23 +0000 (18:24 +0000)]
Skip CFI for dead functions.
Differential Revision: https://reviews.llvm.org/D33805
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304578
91177308-0d34-0410-b5e6-
96231b3b80d8
Evgeniy Stepanov [Fri, 2 Jun 2017 18:24:17 +0000 (18:24 +0000)]
Move summary dead stripping before regular LTO.
This way dead stripping results are recorded in combined summary and
can be used in regular LTO passes.
Differential Revision: https://reviews.llvm.org/D33615
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304577
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Fri, 2 Jun 2017 18:14:31 +0000 (18:14 +0000)]
[x86] fix formatting; NFCI
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304576
91177308-0d34-0410-b5e6-
96231b3b80d8
Matt Arsenault [Fri, 2 Jun 2017 18:02:42 +0000 (18:02 +0000)]
AMDGPU: Register AMDGPUAlwaysInline
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304574
91177308-0d34-0410-b5e6-
96231b3b80d8
Reid Kleckner [Fri, 2 Jun 2017 17:53:06 +0000 (17:53 +0000)]
Re-land "COFF: migrate def parser from LLD to LLVM"
This reverts commit r304561 and re-lands r303490 & co.
The fix was to use "SymbolName" when translating LLD's internal export
list to lib/Object's short export struct. The SymbolName reflects the
actual symbol name, which may include fastcall and stdcall mangling bits
not included in the /EXPORT or .def file EXPORTS name:
@@ -434,8 +434,7 @@ std::vector<COFFShortExport> createCOFFShortExportFromConfig() {
std::vector<COFFShortExport> Exports;
for (Export &E1 : Config->Exports) {
COFFShortExport E2;
- E2.Name = E1.Name;
+ // Use SymbolName, which will have any stdcall or fastcall qualifiers.
+ E2.Name = E1.SymbolName;
E2.ExtName = E1.ExtName;
E2.Ordinal = E1.Ordinal;
E2.Noname = E1.Noname;
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304573
91177308-0d34-0410-b5e6-
96231b3b80d8
Konstantin Zhuravlyov [Fri, 2 Jun 2017 17:40:26 +0000 (17:40 +0000)]
AMDGPU: Make auto waitcnt before barrier a feature
Differential Revision: https://reviews.llvm.org/D33793
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304571
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Fri, 2 Jun 2017 17:35:02 +0000 (17:35 +0000)]
[TargetLowering] fix formatting; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304569
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Fri, 2 Jun 2017 17:28:12 +0000 (17:28 +0000)]
[LazyValueInfo] Fix formatting NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304567
91177308-0d34-0410-b5e6-
96231b3b80d8
David Blaikie [Fri, 2 Jun 2017 17:24:26 +0000 (17:24 +0000)]
Tidy up a bit of r304516, use SmallVector::assign rather than for loop
This might give a few better opportunities to optimize these to memcpy
rather than loops - also a few minor cleanups (StringRef-izing,
templating (to avoid std::function indirection), etc).
The SmallVector::assign(iter, iter) could be improved with the use of
SFINAE, but the (iter, iter) ctor and append(iter, iter) need it to and
don't have it - so, workaround it for now rather than bothering with the
added complexity.
(also, as noted in the added FIXME, these assign ops could potentially
be optimized better at least for non-trivially-copyable types)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304566
91177308-0d34-0410-b5e6-
96231b3b80d8
Philip Reames [Fri, 2 Jun 2017 17:02:33 +0000 (17:02 +0000)]
Verify a couple more fields in STATEPOINT instructions
While doing so, clarify the comments and update them to reflect current reality.
Note: I'm going to let this sit for a week or so before adding further verification. I want to give this time to cycle through bots and merge it into our downstream tree before pushing this further.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304565
91177308-0d34-0410-b5e6-
96231b3b80d8
Philip Reames [Fri, 2 Jun 2017 16:36:37 +0000 (16:36 +0000)]
Add placeholder for more extensive verification of psuedo ops
This initial patch doesn't actually do much useful. It's just to show where the new code goes. Once this is in, I'll extend the verification logic to check more useful properties.
For those curious, the more complicated version of this patch already found one very suspicious thing.
Differential Revision: https://reviews.llvm.org/D33819
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304564
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Fri, 2 Jun 2017 16:33:13 +0000 (16:33 +0000)]
[LazyValueInfo] Make solveBlockValueBinaryOp take a BinaryOperator* instead of Instruction*. This removes a cast of getOpcode to BinaryOps.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304563
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Fri, 2 Jun 2017 16:29:41 +0000 (16:29 +0000)]
[InstCombine] fix icmp with not op and constant to work with splat vector constant
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304562
91177308-0d34-0410-b5e6-
96231b3b80d8
Reid Kleckner [Fri, 2 Jun 2017 16:26:24 +0000 (16:26 +0000)]
Revert "COFF: migrate def parser from LLD to LLVM"
This reverts commits r303490, r303491, r303493, and r303494.
This caused http://crbug.com/728726. Essentially, exporting stdcall
functions doesn't appear to work after this change. Reduced test case
soon.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304561
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Fri, 2 Jun 2017 16:21:13 +0000 (16:21 +0000)]
[LazyValueInfo] Fix typo in comment. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304560
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Fri, 2 Jun 2017 16:17:32 +0000 (16:17 +0000)]
[InstSimplify][ConstantFolding] Teach constant folding how to handle icmp null, (inttoptr x) as well as it handles icmp (inttoptr x), null
Summary:
The constant folding code currently assumes that the constant expression will always be on the left and the simple null will be on the right. But that's not true at least on the path from InstSimplify.
This patch adds support to ConstantFolding to detect the reversed case.
Reviewers: spatel, dberlin, majnemer, davide, joey
Reviewed By: joey
Subscribers: joey, llvm-commits
Differential Revision: https://reviews.llvm.org/D33801
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304559
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Fri, 2 Jun 2017 16:11:14 +0000 (16:11 +0000)]
[InstCombine] improve perf by not creating a known non-canonical instruction
Op1 (RHS) is a constant, so putting it on the LHS makes us churn through visitICmp
an extra time to canonicalize it:
INSTCOMBINE ITERATION #1 on cmpnot
IC: ADDING: 3 instrs to worklist
IC: Visiting: %notx = xor i8 %x, -1
IC: Visiting: %cmp = icmp sgt i8 %notx, 42
IC: Old = %cmp = icmp sgt i8 %notx, 42
New = <badref> = icmp sgt i8 -43, %x
IC: ADD: %cmp = icmp sgt i8 -43, %x
IC: ERASE %1 = icmp sgt i8 %notx, 42
IC: ADD: %notx = xor i8 %x, -1
IC: DCE: %notx = xor i8 %x, -1
IC: ERASE %notx = xor i8 %x, -1
IC: Visiting: %cmp = icmp sgt i8 -43, %x
IC: Mod = %cmp = icmp sgt i8 -43, %x
New = %cmp = icmp slt i8 %x, -43
IC: ADD: %cmp = icmp slt i8 %x, -43
IC: Visiting: %cmp = icmp slt i8 %x, -43
IC: Visiting: ret i1 %cmp
If we create the swapped ICmp directly, we go faster:
INSTCOMBINE ITERATION #1 on cmpnot
IC: ADDING: 3 instrs to worklist
IC: Visiting: %notx = xor i8 %x, -1
IC: Visiting: %cmp = icmp sgt i8 %notx, 42
IC: Old = %cmp = icmp sgt i8 %notx, 42
New = <badref> = icmp slt i8 %x, -43
IC: ADD: %cmp = icmp slt i8 %x, -43
IC: ERASE %1 = icmp sgt i8 %notx, 42
IC: ADD: %notx = xor i8 %x, -1
IC: DCE: %notx = xor i8 %x, -1
IC: ERASE %notx = xor i8 %x, -1
IC: Visiting: %cmp = icmp slt i8 %x, -43
IC: Visiting: ret i1 %cmp
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304558
91177308-0d34-0410-b5e6-
96231b3b80d8
Amaury Sechet [Fri, 2 Jun 2017 16:07:43 +0000 (16:07 +0000)]
Update select.ll expected results. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304557
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Fri, 2 Jun 2017 15:35:45 +0000 (15:35 +0000)]
[InstCombine] fix/add tests for icmp with not ops; NFC
The existing test was not minimal, and there was no coverage
for the variants with a constant or vector types.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304555
91177308-0d34-0410-b5e6-
96231b3b80d8
Alexander Timofeev [Fri, 2 Jun 2017 15:25:52 +0000 (15:25 +0000)]
AMDGPUAnnotateUniformValue should always treat volatile loads as divergent
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304554
91177308-0d34-0410-b5e6-
96231b3b80d8
Geoff Berry [Fri, 2 Jun 2017 14:27:41 +0000 (14:27 +0000)]
[AArch64][Falkor] Model immediate forwarding.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304552
91177308-0d34-0410-b5e6-
96231b3b80d8
Mark Searles [Fri, 2 Jun 2017 14:19:25 +0000 (14:19 +0000)]
[AMDGPU] Turn on the new waitcnt insertion pass. Adjust tests.
-enable-si-insert-waitcnts=1 becomes the default
-enable-si-insert-waitcnts=0 to use old pass
Differential Revision: https://reviews.llvm.org/D33730
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304551
91177308-0d34-0410-b5e6-
96231b3b80d8
Zoran Jovanovic [Fri, 2 Jun 2017 14:14:21 +0000 (14:14 +0000)]
[mips][microMIPS] Extending size reduction pass with LBU16, LHU16, SB16 and SH16
Author: milena.vujosevic.janicic
Reviewers: sdardis
The patch extends size reduction pass for MicroMIPS.
The following instructions are examined and transformed, if possible:
LBU instruction is transformed into 16-bit instruction LBU16
LHU instruction is transformed into 16-bit instruction LHU16
SB instruction is transformed into 16-bit instruction SB16
SH instruction is transformed into 16-bit instruction SH16
Differential Revision: https://reviews.llvm.org/D33091
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304550
91177308-0d34-0410-b5e6-
96231b3b80d8
Krzysztof Parzyszek [Fri, 2 Jun 2017 14:07:06 +0000 (14:07 +0000)]
[Hexagon] Return 0 from getDotNewPredOp when .new opcode does not exist
This allows using this function to test if an instruction can be converted
to a .new form.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304549
91177308-0d34-0410-b5e6-
96231b3b80d8
Amaury Sechet [Fri, 2 Jun 2017 14:02:49 +0000 (14:02 +0000)]
Regenerate sse3.ll test results. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304548
91177308-0d34-0410-b5e6-
96231b3b80d8
Amaury Sechet [Fri, 2 Jun 2017 14:02:46 +0000 (14:02 +0000)]
Regenerate and-sink.ll test results. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304547
91177308-0d34-0410-b5e6-
96231b3b80d8
Amaury Sechet [Fri, 2 Jun 2017 14:02:43 +0000 (14:02 +0000)]
Regenerate shrink-compare.ll test results. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304546
91177308-0d34-0410-b5e6-
96231b3b80d8
Benjamin Kramer [Fri, 2 Jun 2017 13:10:31 +0000 (13:10 +0000)]
[OrderedBasicBlock] Return false for comesBefore(A, A)
So far it would return true for the first uncached query, then cached
queries return false.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304545
91177308-0d34-0410-b5e6-
96231b3b80d8
Alex Lorenz [Fri, 2 Jun 2017 11:21:37 +0000 (11:21 +0000)]
[lit][macOS] Add a utility function to find the platform SDK version
on macOS
This function will be used to tie Clang's Integeration tests to a particular
SDK version. See https://reviews.llvm.org/D32178 for more context.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304541
91177308-0d34-0410-b5e6-
96231b3b80d8
Benjamin Kramer [Fri, 2 Jun 2017 10:50:22 +0000 (10:50 +0000)]
[X86] Don't fold into memory operands into insertps in the generated folding tables.
insertps behaves differently, the register form selects from an input
register based on the immediate operand while the memory form just loads
the given address. We have custom code to change the immediate in cases
where that's legal, so completely remove insertps from the generated
tables.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304540
91177308-0d34-0410-b5e6-
96231b3b80d8
John Brawn [Fri, 2 Jun 2017 10:24:14 +0000 (10:24 +0000)]
[GlobalMerge] Don't merge globals that may be preempted
When a global may be preempted it needs to be accessed directly, instead of
indirectly through a MergedGlobals symbol, for the preemption to work.
This fixes PR33136.
Differential Revision: https://reviews.llvm.org/D33727
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304537
91177308-0d34-0410-b5e6-
96231b3b80d8
Diana Picus [Fri, 2 Jun 2017 10:16:48 +0000 (10:16 +0000)]
[ARM] GlobalISel: Support struct params/returns
Very very similar to the support for arrays. As with arrays, we don't
support returning large structs that wouldn't fit in R0-R3. Most
front-ends would likely use sret arguments for that anyway.
The only significant difference is that when splitting a struct, we need
to make sure we set the correct original alignment on each member,
otherwise it may get split incorrectly between stack and registers.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304536
91177308-0d34-0410-b5e6-
96231b3b80d8
Amaury Sechet [Fri, 2 Jun 2017 09:18:18 +0000 (09:18 +0000)]
nits in TargetLowering.cpp . NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304532
91177308-0d34-0410-b5e6-
96231b3b80d8
Javed Absar [Fri, 2 Jun 2017 08:53:19 +0000 (08:53 +0000)]
[ARM] Cortex-A57 scheduling model for ARM backend (AArch32)
This patch implements the Cortex-A57 scheduling model.
The main code is in ARMScheduleA57.td, ARMScheduleA57WriteRes.td.
Small changes in cpp,.h files to support required scheduling predicates.
Scheduling model implemented according to:
http://infocenter.arm.com/help/topic/com.arm.doc.uan0015b/Cortex_A57_Software_Optimization_Guide_external.pdf.
Patch by : Andrew Zhogin (submitted on his behalf, as requested).
Rewiewed by: Renato Golin, Diana Picus, Javed Absar, Kristof Beyls.
Differential Revision: https://reviews.llvm.org/D28152
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304530
91177308-0d34-0410-b5e6-
96231b3b80d8
Amaury Sechet [Fri, 2 Jun 2017 07:45:22 +0000 (07:45 +0000)]
Specify triple for xor-icmp.ll .
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304526
91177308-0d34-0410-b5e6-
96231b3b80d8
Amaury Sechet [Fri, 2 Jun 2017 07:25:02 +0000 (07:25 +0000)]
Regenerate expectations for xor-icmp.ll . NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304525
91177308-0d34-0410-b5e6-
96231b3b80d8
Max Kazantsev [Fri, 2 Jun 2017 07:11:00 +0000 (07:11 +0000)]
[SelectionDAG] Get rid of recursion in findNonImmUse
The recursive implementation of findNonImmUse may overflow stack
on extremely long use chains. This patch replaces it with an equivalent
iterative implementation.
Reviewed By: bogner
Differential Revision: https://reviews.llvm.org/D33775
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304522
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Fri, 2 Jun 2017 05:56:47 +0000 (05:56 +0000)]
[TableGen] Remove a couple unused methods from Record that take a StringRef argument. NFC
We also have a version that takes an Init* that are used.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304521
91177308-0d34-0410-b5e6-
96231b3b80d8
Gor Nishanov [Fri, 2 Jun 2017 02:18:36 +0000 (02:18 +0000)]
[coroutines] PR33271: Remove stray coro.save intrinsics during CoroSplit
Summary:
Optimization passes may remove llvm.coro.suspend intrinsic while leaving matching llvm.coro.save intrinsic orphaned.
Make sure we clean up orphaned coro.saves. The bug manifested with a crash similar to this:
```
llvm_unreachable("Unknown type!");
llvm::MVT::getVT (Ty=0x489518, HandleUnknown=false)
llvm::EVT::getEVT
llvm::TargetLoweringBase::getValueType
llvm::ComputeValueVTs
llvm::SelectionDAGBuilder::visitTargetIntrinsic
```
Reviewers: GorNishanov
Subscribers: EricWF, llvm-commits
Differential Revision: https://reviews.llvm.org/D33817
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304518
91177308-0d34-0410-b5e6-
96231b3b80d8
Xinliang David Li [Fri, 2 Jun 2017 02:09:31 +0000 (02:09 +0000)]
[Profile] Enhance expect lowering to handle correlated branches
builtin_expect applied on && or || expressions were not
handled properly before. With this patch, the problem is fixed.
Differential Revision: http://reviews.llvm.org/D33164
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304517
91177308-0d34-0410-b5e6-
96231b3b80d8
Teresa Johnson [Fri, 2 Jun 2017 01:56:02 +0000 (01:56 +0000)]
[ThinLTO] Efficiency improvement when writing module path string table
Summary:
When writing the combined index, we are walking the entire module
path StringMap in the full index, and checking whether each one should be
included in the index being written. For distributed backends, where we
write an individual combined index for each file, each with only a few
module paths, this is incredibly inefficient. Add a method that takes
a callback and hides the details of whether we are writing the full
combined index, or just a slice, and in the latter case it walks the set
of modules to include instead of the entire index.
For a huge application with around 23K files (i.e. where we were iterating
through the 23K-entry modulePath StringMap 23K times), this change improved
the thin link time by a whopping 48%.
Reviewers: pcc
Subscribers: Prazek, inglorion, llvm-commits
Differential Revision: https://reviews.llvm.org/D33813
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304516
91177308-0d34-0410-b5e6-
96231b3b80d8
Philip Reames [Fri, 2 Jun 2017 01:52:06 +0000 (01:52 +0000)]
[RS4GC] Comment clarification
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304514
91177308-0d34-0410-b5e6-
96231b3b80d8
Jacob Gravelle [Fri, 2 Jun 2017 01:26:17 +0000 (01:26 +0000)]
Revert r304117 - WebAssembly object format isn't ready to be the default
Summary: Wasm object format has some functionality regressions from the ELF format, and doesn't play nicely with the rest of the toolchain. It should eventually be the default, but not yet.
Reviewers: sunfish, sbc100
Subscribers: jfb, dschuff, llvm-commits
Differential Revision: https://reviews.llvm.org/D33811
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304512
91177308-0d34-0410-b5e6-
96231b3b80d8
Sam Clegg [Fri, 2 Jun 2017 01:05:24 +0000 (01:05 +0000)]
[WebAssembly] MC: Fix references to undefined externals in data section
Undefined externals don't need to have a size or an offset.
This was broken by r303915. Added a test for this case.
This fixes the "Compile LLVM Torture (o)" step on the wasm
waterfall.
Differential Revision: https://reviews.llvm.org/D33803
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304505
91177308-0d34-0410-b5e6-
96231b3b80d8
Mandeep Singh Grang [Thu, 1 Jun 2017 23:52:59 +0000 (23:52 +0000)]
[PredicateInfo] Enable -reverse-iterate tests only for +Asserts builds
Summary: The flag -reverse-iterate is present only on +Asserts builds.
Reviewers: dberlin, davide, RKSimon, efriedma, chapuni
Reviewed By: efriedma, chapuni
Subscribers: chapuni, llvm-commits
Differential Revision: https://reviews.llvm.org/D33795
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304498
91177308-0d34-0410-b5e6-
96231b3b80d8
Davide Italiano [Thu, 1 Jun 2017 23:47:53 +0000 (23:47 +0000)]
[PM] GVNSink is off by default, fix an obvious typo.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304497
91177308-0d34-0410-b5e6-
96231b3b80d8
Eugene Zelenko [Thu, 1 Jun 2017 23:25:02 +0000 (23:25 +0000)]
[CodeGen] Fix some Clang-tidy modernize-use-using and Include What You Use warnings; other minor fixes (NFC).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304495
91177308-0d34-0410-b5e6-
96231b3b80d8
Zachary Turner [Thu, 1 Jun 2017 23:24:50 +0000 (23:24 +0000)]
Fix 2 more -Wreorder warnings.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304494
91177308-0d34-0410-b5e6-
96231b3b80d8
Tim Shen [Thu, 1 Jun 2017 23:13:44 +0000 (23:13 +0000)]
[ThinLTO] Move -lto-use-new-pm to llvm-lto2, and change it to -use-new-pm.
Summary:
As we teach Clang to use ThinkLTO + new PM, it's good for the users to
inject through Config, instead of setting a flag in the LTOBackend
library. Move the flag to llvm-lto2.
As it moves to llvm-lto2, a new name -use-new-pm seems simpler and as
clear.
Reviewers: davide, tejohnson
Subscribers: mehdi_amini, Prazek, inglorion, eraman, chandlerc, llvm-commits
Differential Revision: https://reviews.llvm.org/D33799
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304492
91177308-0d34-0410-b5e6-
96231b3b80d8
Davide Italiano [Thu, 1 Jun 2017 23:08:14 +0000 (23:08 +0000)]
Move GVNHoist to the right position in the new pass manager pipeline.
GVNHoist was moved as part of simplification passes for the current
pass manager (but not for the new), so they're out-of-sync.
Differential Revision: https://reviews.llvm.org/D33806
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304490
91177308-0d34-0410-b5e6-
96231b3b80d8
Xinliang David Li [Thu, 1 Jun 2017 23:05:11 +0000 (23:05 +0000)]
Fix compiler_rt buildbot failure
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304489
91177308-0d34-0410-b5e6-
96231b3b80d8
Keno Fischer [Thu, 1 Jun 2017 23:02:12 +0000 (23:02 +0000)]
Reapply "[Cloning] Take another pass at properly cloning debug info"
This was rL304226, reverted in 304228 due to a clang assertion failure
on the build bots. That problem should have been addressed by clang
commit rL304470.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304488
91177308-0d34-0410-b5e6-
96231b3b80d8
Zachary Turner [Thu, 1 Jun 2017 22:03:17 +0000 (22:03 +0000)]
Fix -Wreorder warnings.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304485
91177308-0d34-0410-b5e6-
96231b3b80d8
Zachary Turner [Thu, 1 Jun 2017 21:52:41 +0000 (21:52 +0000)]
[CodeView] Properly align symbol records on read/write.
Object files have symbol records not aligned to any particular
boundary (e.g. 1-byte aligned), while PDB files have symbol
records padded to 4-byte aligned boundaries. Since they share
the same reading / writing code, we have to provide an option to
specify the alignment and propagate it up to the producer or
consumer who knows what the alignment is supposed to be for the
given container type.
Added a test for this by modifying the existing PDB -> YAML -> PDB
round-tripping code to round trip symbol records as well as types.
Differential Revision: https://reviews.llvm.org/D33785
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304484
91177308-0d34-0410-b5e6-
96231b3b80d8
Yaxun Liu [Thu, 1 Jun 2017 21:31:53 +0000 (21:31 +0000)]
[AMDGPU] Fix kernel arg segment size for amdgizcl
Differential Revision: https://reviews.llvm.org/D33307
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304482
91177308-0d34-0410-b5e6-
96231b3b80d8
Eli Friedman [Thu, 1 Jun 2017 21:22:26 +0000 (21:22 +0000)]
Add opt-bisect support for region passes.
This is necessary to get opt-bisect working with polly.
Differential Revision: https://reviews.llvm.org/D33751
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304476
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Thu, 1 Jun 2017 21:20:07 +0000 (21:20 +0000)]
[InstSimplify][ConstantFolding] Add test demonstrating failure to simplify (icmp eq null, inttoptr x) when the null is on the left hand side. NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304474
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Thu, 1 Jun 2017 21:14:58 +0000 (21:14 +0000)]
DbgValueHistoryCalculator: Ignore call instructions that claim to clobber SP.
The AArch64 backend marks calls that involve aggregate function
arguments as having an implicit def of SP. We already have the same
workaround in LiveDebugValues and in DbgValueHistoryCalculator for SP
clobbers in register masks. This adds register defs to the list.
Fixes rdar://problem/
30361929 and Swift SR-3851.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304471
91177308-0d34-0410-b5e6-
96231b3b80d8
Teresa Johnson [Thu, 1 Jun 2017 21:10:10 +0000 (21:10 +0000)]
[PGO] Adjust indirect call promotion threshold
Summary:
Reduce min percent required for indirect call promotion from 33% to 30%,
which matches gcc's threshold and catches the same hot opportunities.
Reviewers: davidxl
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D33798
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304469
91177308-0d34-0410-b5e6-
96231b3b80d8
Keno Fischer [Thu, 1 Jun 2017 20:51:55 +0000 (20:51 +0000)]
[llvm-config] Don't use PATH_MAX
It doesn't exist on Windows. The number we use here doesn't really matter,
the storage will expand automatically but 256 seems like a reasonable default.
Should fix windows buildbots that complained about rL304458.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304468
91177308-0d34-0410-b5e6-
96231b3b80d8
Keno Fischer [Thu, 1 Jun 2017 20:42:44 +0000 (20:42 +0000)]
[DIBuilder] Add a more fine-grained finalization method
Summary:
Clang wants to clone a function before it is done building the entire
compilation unit. As of now, there is no good way to do that, because
CloneFunction doesn't like dealing with temporary metadata. However,
as long as clang doesn't want to add any variables to this SP, it
should be fine to just prematurely finalize it. Add an API to allow this.
This is done in preparation of a clang commit to fix the assertion that
necessitated the revert of D33655.
Reviewers: aprantl, dblaikie
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D33704
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304467
91177308-0d34-0410-b5e6-
96231b3b80d8
Evgeniy Stepanov [Thu, 1 Jun 2017 20:30:06 +0000 (20:30 +0000)]
(NFC) Track global summary liveness in GVFlags.
Replace GVFlags::LiveRoot with GVFlags::Live and use that instead of
all the DeadSymbols sets. This is refactoring in order to make
liveness information available in the RegularLTO pipeline.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304466
91177308-0d34-0410-b5e6-
96231b3b80d8
Nirav Dave [Thu, 1 Jun 2017 19:33:50 +0000 (19:33 +0000)]
[SDAG] Fix CombineTo ordering in visitZERO_EXTEND and visitSIGN_EXTEND
Reorder CombineTo Calls to prevent references to stale/deleted SDNodes which caused undue assertions.
Reviewers: dbabokin
Subscribers: aemerson, rengolin, llvm-commits
Differential Revision: https://reviews.llvm.org/D31625
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304460
91177308-0d34-0410-b5e6-
96231b3b80d8
Keno Fischer [Thu, 1 Jun 2017 19:20:33 +0000 (19:20 +0000)]
[llvm-config] Report --bindir based on LLVM_TOOLS_INSTALL_DIR
Summary:
`LLVM_TOOLS_INSTALL_DIR` was introduced in r272200 in order to override the directory
name into which to install LLVM's executable. However, `llvm-config --bindir` still reported
`$PREFIX/bin` independent of what LLVM_TOOLS_INSTALL_DIR was set to.
This fixes the out-of-tree clang standalone build for me.
Reviewers: beanz, tstellar
Reviewed By: tstellar
Subscribers: chapuni, tstellar, llvm-commits
Differential Revision: https://reviews.llvm.org/D22499
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304458
91177308-0d34-0410-b5e6-
96231b3b80d8
David Blaikie [Thu, 1 Jun 2017 19:20:26 +0000 (19:20 +0000)]
Prefer static namespace-scoped variables over anon namespacing per style guide
Also for consistency with the immediately preceeding variable
definition.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304457
91177308-0d34-0410-b5e6-
96231b3b80d8
Haicheng Wu [Thu, 1 Jun 2017 19:06:07 +0000 (19:06 +0000)]
[InlineCost] Add a test case for GEP cost
The added test case is to check whether the simplified value is passed to
getGEPCost().
Differential Revision: https://reviews.llvm.org/D33779
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304454
91177308-0d34-0410-b5e6-
96231b3b80d8
Xinliang David Li [Thu, 1 Jun 2017 19:05:55 +0000 (19:05 +0000)]
[Profile] Fix builtin_expect lowering bug
The lowerer wrongly assumes the ICMP instruction
1) always has a constant operand;
2) the operand has value 0.
It also assumes the expected value can only be one, thus
other values other than one will be considered 'zero'.
This leads to wrong profile annotation when other integer values
are used other than 0, 1 in the comparison or in the expect intrinsic.
Also missing is handling of equal predicate.
This patch fixes all the above problems.
Differential Revision: http://reviews.llvm.org/D33757
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304453
91177308-0d34-0410-b5e6-
96231b3b80d8
Xinliang David Li [Thu, 1 Jun 2017 18:58:50 +0000 (18:58 +0000)]
[PartialInlining] Emit branch info and profile data as remarks
This allows us to collect profile statistics to tune static
branch prediction.
Differential Revision: http://reviews.llvm.org/D33746
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304452
91177308-0d34-0410-b5e6-
96231b3b80d8
Mandeep Singh Grang [Thu, 1 Jun 2017 18:36:24 +0000 (18:36 +0000)]
[PredicateInfo] Fix non-determinism in codegen uncovered by reverse iterating SmallPtrSet
Summary:
Sort OpsToRename before iterating to make iteration order deterministic.
Thanks to Daniel Berlin for the sorting logic.
Reviewers: dberlin, RKSimon, efriedma, davide
Reviewed By: dberlin, davide
Subscribers: sanjoy, davide, llvm-commits
Differential Revision: https://reviews.llvm.org/D33265
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304447
91177308-0d34-0410-b5e6-
96231b3b80d8
Adrian Prantl [Thu, 1 Jun 2017 18:18:23 +0000 (18:18 +0000)]
[DWARF] Introduce Dump Options
This commit introduces a structure that holds all the flags that
control the pretty printing of dwarf output.
Patch by Spyridoula Gravani!
Differential Revision: https://reviews.llvm.org/D33749
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304446
91177308-0d34-0410-b5e6-
96231b3b80d8
Krzysztof Parzyszek [Thu, 1 Jun 2017 18:02:40 +0000 (18:02 +0000)]
[Hexagon] Fix dependence check in the packetizer
An incorrect check in the packetizer lead to an attempt to convert
an unconditional branch to a .new (conditional) form.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304442
91177308-0d34-0410-b5e6-
96231b3b80d8
Krzysztof Parzyszek [Thu, 1 Jun 2017 18:00:47 +0000 (18:00 +0000)]
[Hexagon] Handle long-running simplification loop in idiom recognition
The initial assumption was that the simplification would converge to a
fixed point relatvely quickly. Turns out that there are legitimate situa-
tions where the complexity of the code causes it to take a large number
of iterations.
Two main changes:
- Instead of aborting upon hitting the limit, simply return nullptr.
- Reduce the limit to 10,000 from 100,000.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304441
91177308-0d34-0410-b5e6-
96231b3b80d8
Amaury Sechet [Thu, 1 Jun 2017 16:33:08 +0000 (16:33 +0000)]
Remove ADDC, ADDE, SUBC, SUBE and SETCCE support from the X86 backend, use the CARRY ops instead.
Summary:
As per title. This cleanup some technical debt.
Depends on D33374
Reviewers: jyknight, nemanjai, mkuper, spatel, RKSimon, zvi, bkramer
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D33390
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304435
91177308-0d34-0410-b5e6-
96231b3b80d8
Matt Arsenault [Thu, 1 Jun 2017 15:05:15 +0000 (15:05 +0000)]
AMDGPU: Remove error on call in AsmPrinter
Partial revert of r301938 which is making it harder
to split patches up.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304418
91177308-0d34-0410-b5e6-
96231b3b80d8
Matt Arsenault [Thu, 1 Jun 2017 14:49:46 +0000 (14:49 +0000)]
DAG: Remove pointless type check
These are only integer operations.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304417
91177308-0d34-0410-b5e6-
96231b3b80d8
Matt Arsenault [Thu, 1 Jun 2017 14:38:02 +0000 (14:38 +0000)]
AMDGPU: Set high getCSRFirstUseCost
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304416
91177308-0d34-0410-b5e6-
96231b3b80d8
Amaury Sechet [Thu, 1 Jun 2017 14:24:31 +0000 (14:24 +0000)]
Fix addcarry-crash.ll
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304415
91177308-0d34-0410-b5e6-
96231b3b80d8
Amaury Sechet [Thu, 1 Jun 2017 14:09:56 +0000 (14:09 +0000)]
Add regression test for the addcarry crash. See D33770 for context.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304414
91177308-0d34-0410-b5e6-
96231b3b80d8
Florian Hahn [Thu, 1 Jun 2017 13:50:57 +0000 (13:50 +0000)]
[ARM] Create relocations for Thumb functions calling ARM fns in ELF.
Summary:
Without using a fixup in this case, BL will be used instead of BLX to
call internal ARM functions from Thumb functions.
Reviewers: rafael, t.p.northover, peter.smith, kristof.beyls
Reviewed By: peter.smith
Subscribers: srhines, echristo, aemerson, rengolin, javed.absar, llvm-commits
Differential Revision: https://reviews.llvm.org/D33436
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304413
91177308-0d34-0410-b5e6-
96231b3b80d8
Kamil Rytarowski [Thu, 1 Jun 2017 12:57:00 +0000 (12:57 +0000)]
[Solaris] Fix PR33228 - llvm::sys::fs::is_local_impl done right
Summary:
Solaris-specific implementation for llvm::sys::fs::is_local_impl.
FStype pattern matching might be a bit unreliable, but at least it fixes the build failure.
Reviewers: mgorny, nlopes, llvm-commits, krytarowski
Reviewed By: krytarowski
Subscribers: voskresensky.vladimir, krytarowski
Differential Revision: https://reviews.llvm.org/D33695
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304412
91177308-0d34-0410-b5e6-
96231b3b80d8
Amaury Sechet [Thu, 1 Jun 2017 12:03:16 +0000 (12:03 +0000)]
Only generate addcarry node when it is legal.
Summary:
This is a problem uncovered by stage2 testing. ADDCARRY end up being generated on target that do not support it.
The patch that introduced the problem has other patches layed on top of it, so we want to fix the issue rather than revert it to avoid creating a lor of churn.
A regression test will be added shortly, but this is committed as this in order to get the build back to green promptly.
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D33770
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304409
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Thu, 1 Jun 2017 11:39:39 +0000 (11:39 +0000)]
[PM/ThinLTO] Port the ThinLTO pipeline (both components) to the new PM.
Based on the original patch by Davide, but I've adjusted the API exposed
to just be different entry points rather than exposing more state
parameters. I've factored all the common logic out so that we don't have
any duplicate pipelines, we just stitch them together in different ways.
I think this makes the build easier to reason about and understand.
This adds a direct method for getting the module simplification pipeline
as well as a method to get the optimization pipeline. While not my
express goal, this seems nice and gives a good place comment about the
restrictions that are imposed on them.
I did make some minor changes to the way the pipelines are structured
here, but hopefully not ones that are significant or controversial:
1) I sunk the PGO indirect call promotion to only be run when we have
PGO enabled (or as part of the special ThinLTO pipeline).
2) I made the extra GlobalOpt run in ThinLTO just happen all the time
and at a slightly more powerful place (before we remove available
externaly functions). This seems like general goodness and not a big
compile time sink, so it didn't make sense to *only* use it in
ThinLTO. Fewer differences in the pipeline makes everything simpler
IMO.
3) I hoisted the ThinLTO stop point pre-link above the the RPO function
attr inference. The RPO inference won't infer anything terribly
meaningful pre-link (recursiveness?) so it didn't make a lot of
sense. But if the placement of RPO inference starts to matter, we
should move it to the canonicalization phase anyways which seems like
a better place for it (and there is a FIXME to this effect!). But
that seemed a bridge too far for this patch.
If we ever need to parameterize these pipelines more heavily, we can
always sink the logic to helper functions with parameters to keep those
parameters out of the public API. But the changes above seemed minor
that we could possible get away without the parameters entirely.
I added support for parsing 'thinlto' and 'thinlto-pre-link' names in
pass pipelines to make it easy to test these routines and play with them
in larger pipelines. I also added a really basic manifest of passes test
that will show exactly how the pipelines behave and work as well as
making updates to them clear.
Lastly, this factoring does introduce a nesting layer of module pass
managers in the default pipeline. I don't think this is a big deal and
the flexibility of decoupling the pipelines seems easily worth it.
Differential Revision: https://reviews.llvm.org/D33540
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304407
91177308-0d34-0410-b5e6-
96231b3b80d8
Zvi Rackover [Thu, 1 Jun 2017 11:27:57 +0000 (11:27 +0000)]
[X86] Match bitcast of vxi1 to pmovmsk
Summary:
Add an early combine to match patterns such as:
(i16 bitcast (v16i1 x))
->
(i16 movmsk (v16i8 sext (v16i1 x)))
This combine needs to happen early enough before
type-legalization scalarizes the result of the setcc.
Reviewers: igorb, craig.topper, RKSimon
Subscribers: delena, llvm-commits
Differential Revision: https://reviews.llvm.org/D33311
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@304406
91177308-0d34-0410-b5e6-
96231b3b80d8