OSDN Git Service
Simon Pilgrim [Thu, 5 Jan 2017 19:19:39 +0000 (19:19 +0000)]
[CostModel][X86] Reordered SSE42 arithmetic cost LUT into descending order. NFCI.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291162
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Thu, 5 Jan 2017 19:01:50 +0000 (19:01 +0000)]
[CostModel][X86] Move vXi64 MUL costs into existing tables. NFCI.
Removes need for yet another LUT.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291158
91177308-0d34-0410-b5e6-
96231b3b80d8
Andrew Kaylor [Thu, 5 Jan 2017 18:53:24 +0000 (18:53 +0000)]
[LICM] Small update to note changes made in hoistRegion
Differential Revision: https://reviews.llvm.org/D28363
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291157
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Thu, 5 Jan 2017 18:36:48 +0000 (18:36 +0000)]
[CostModel][X86] Strip unused 256-bit vector shift costs. NFCI.
Remove SSE2 256-bit entries - AVX targets will have used the SSE42 costs instead.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291152
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Thu, 5 Jan 2017 18:35:44 +0000 (18:35 +0000)]
[x86] add test to show bug in select lowering; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291151
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Thu, 5 Jan 2017 18:20:25 +0000 (18:20 +0000)]
[CostModel][X86] Include the cost of 256-bit upper subvector extract/insertion in AVX1 v4i64 MUL
Matches other MUL/ADD/SUB 256-bit case on AVX1
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291149
91177308-0d34-0410-b5e6-
96231b3b80d8
Joerg Sonnenberger [Thu, 5 Jan 2017 17:59:22 +0000 (17:59 +0000)]
Typo
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291147
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Thu, 5 Jan 2017 17:56:19 +0000 (17:56 +0000)]
[CostModel][X86] Merged SK_PermuteSingleSrc/SK_PermuteTwoSrc into common shuffle cost LUTs. NFCI.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291146
91177308-0d34-0410-b5e6-
96231b3b80d8
Matt Arsenault [Thu, 5 Jan 2017 17:36:11 +0000 (17:36 +0000)]
Reapply r291025 ("AMDGPU: Remove unneccessary intermediate vector")
Arrays are supposed to be static const
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291144
91177308-0d34-0410-b5e6-
96231b3b80d8
Chad Rosier [Thu, 5 Jan 2017 16:55:32 +0000 (16:55 +0000)]
[AArch64][CostModel] Add coverage for bswap intrinsics.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291140
91177308-0d34-0410-b5e6-
96231b3b80d8
Justin Lebar [Thu, 5 Jan 2017 16:54:28 +0000 (16:54 +0000)]
[Docs] Update docs to indicate that CUDA compilation is supported on Windows.
Subscribers: cfe-commits, llvm-commits
Differential Revision: https://reviews.llvm.org/D28326
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291139
91177308-0d34-0410-b5e6-
96231b3b80d8
Xin Tong [Thu, 5 Jan 2017 16:52:37 +0000 (16:52 +0000)]
Remove a unnecessary hasLoopInvariantOperands check in loop sink.
Summary:
Preheader instruction's operands will always be invariant w.r.t. the loop which its the preheader
for.
Memory aliases are handled in canSinkOrHoistInst.
Reviewers: danielcdh, davidxl
Subscribers: mzolotukhin, llvm-commits
Differential Revision: https://reviews.llvm.org/D28270
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291132
91177308-0d34-0410-b5e6-
96231b3b80d8
Zvi Rackover [Thu, 5 Jan 2017 16:48:28 +0000 (16:48 +0000)]
[X86] Add test cases that cover pr31551. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291127
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Thu, 5 Jan 2017 16:47:32 +0000 (16:47 +0000)]
less braces; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291126
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Thu, 5 Jan 2017 15:56:08 +0000 (15:56 +0000)]
[CostModel][X86] Add support for broadcast shuffle costs
Currently only for broadcasts with input and output of the same width.
Differential Revision: https://reviews.llvm.org/D27811
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291122
91177308-0d34-0410-b5e6-
96231b3b80d8
Zvi Rackover [Thu, 5 Jan 2017 15:11:43 +0000 (15:11 +0000)]
[X86] Optimize vector shifts with variable but uniform shift amounts
Summary:
For instructions such as PSLLW/PSLLD/PSLLQ a variable shift amount may be passed in an XMM register.
The lower 64-bits of the register are evaluated to determine the shift amount.
This patch improves the construction of the vector containing the shift amount.
Reviewers: craig.topper, delena, RKSimon
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D28353
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291120
91177308-0d34-0410-b5e6-
96231b3b80d8
Teresa Johnson [Thu, 5 Jan 2017 15:10:10 +0000 (15:10 +0000)]
[ThinLTO] Add parenthesis as per build warning
Fixes a warning about "||" and "&&" due to r291108.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291119
91177308-0d34-0410-b5e6-
96231b3b80d8
Chad Rosier [Thu, 5 Jan 2017 15:05:03 +0000 (15:05 +0000)]
[AArch64] Remove mcpu option as this test is not target specific. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291117
91177308-0d34-0410-b5e6-
96231b3b80d8
Tony Jiang [Thu, 5 Jan 2017 15:00:45 +0000 (15:00 +0000)]
[PowerPC] Implement missing ISA 2.06 instructions.
Instructions: fctidu[.], fctiwu[.], ftdiv, ftsqrt are not implemented. Implement
them and add corresponding test cases in this patch.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291116
91177308-0d34-0410-b5e6-
96231b3b80d8
Teresa Johnson [Thu, 5 Jan 2017 14:59:56 +0000 (14:59 +0000)]
[ThinLTO] Use DenseSet instead of SmallPtrSet for holding GUIDs
Should fix some more bot failures from r291108.
This should have been a DenseSet, since GUID is not a pointer type.
It caused some bots to fail, but for some reason I wasnt't getting a
build failure.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291115
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Thu, 5 Jan 2017 14:58:54 +0000 (14:58 +0000)]
Wdocumentation fix
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291114
91177308-0d34-0410-b5e6-
96231b3b80d8
Chad Rosier [Thu, 5 Jan 2017 14:48:53 +0000 (14:48 +0000)]
[AArch64] Remove unused arguments from tests. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291112
91177308-0d34-0410-b5e6-
96231b3b80d8
Teresa Johnson [Thu, 5 Jan 2017 14:40:15 +0000 (14:40 +0000)]
[ThinLTO] Update new ModuleSummaryIndexYAML.h for r291108
Should fix bot failures due to r291108 which happened due to a
change required in ModuleSummaryIndexYAML.h which was just added in
r291069.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291111
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Thu, 5 Jan 2017 14:33:32 +0000 (14:33 +0000)]
[CostModel][X86] Pulled out common type legalization code
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291109
91177308-0d34-0410-b5e6-
96231b3b80d8
Teresa Johnson [Thu, 5 Jan 2017 14:32:16 +0000 (14:32 +0000)]
[ThinLTO] Subsume all importing checks into a single flag
Summary:
This adds a new summary flag NotEligibleToImport that subsumes
several existing flags (NoRename, HasInlineAsmMaybeReferencingInternal
and IsNotViableToInline). It also subsumes the checking of references
on the summary that was being done during the thin link by
eligibleForImport() for each candidate. It is much more efficient to
do that checking once during the per-module summary build and record
it in the summary.
Reviewers: mehdi_amini
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D28169
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291108
91177308-0d34-0410-b5e6-
96231b3b80d8
Mohammed Agabaria [Thu, 5 Jan 2017 14:03:41 +0000 (14:03 +0000)]
Currently isLikelyComplexAddressComputation tries to figure out if the given stride seems to be 'complex' and need some extra cost for address computation handling.
This code seems to be target dependent which may not be the same for all targets.
Passed the decision whether the given stride is complex or not to the target by sending stride information via SCEV to getAddressComputationCost instead of 'IsComplex'.
Specifically at X86 targets we dont see any significant address computation cost in case of the strided access in general.
Differential Revision: https://reviews.llvm.org/D27518
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291106
91177308-0d34-0410-b5e6-
96231b3b80d8
Kristof Beyls [Thu, 5 Jan 2017 13:27:52 +0000 (13:27 +0000)]
[GlobalISel] Add support for address-taken basic blocks
To make this work, pointers from the MachineBasicBlock to the LLVM-IR-level
basic blocks need to be initialized, as the AsmPrinter uses this link to be
able to print out labels for the basic blocks that are address-taken.
Most of the changes in this commit are about adapting existing tests to include
the basic block name that is now printed out in the MIR format, now that the
name becomes available as the link to the LLVM-IR basic block is initialized.
The relevant test change for the functionality added in this patch are the
added "(address-taken)" strings in
test/CodeGen/AArch64/GlobalISel/arm64-irtranslator.ll.
Differential Revision: https://reviews.llvm.org/D28123
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291105
91177308-0d34-0410-b5e6-
96231b3b80d8
Anmol P. Paralkar [Thu, 5 Jan 2017 13:08:14 +0000 (13:08 +0000)]
[doc] Fix minor grammatical error in Phabricator.rst
Summary: Test commit, fix minor grammatical error in Phabricator.rst
Reviewers: delcypher
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D28214
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291101
91177308-0d34-0410-b5e6-
96231b3b80d8
Kristof Beyls [Thu, 5 Jan 2017 11:28:51 +0000 (11:28 +0000)]
[GlobalISel] Add support for switch statements
This commit does this using a trivial chain of conditional branches. In the
future, we probably want to reuse the optimized switch lowering used in
SelectionDAG.
Differential Revision: https://reviews.llvm.org/D28176
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291099
91177308-0d34-0410-b5e6-
96231b3b80d8
Kristof Beyls [Thu, 5 Jan 2017 10:16:08 +0000 (10:16 +0000)]
[GlobalISel] Fix AArch64 ICMP instruction selection
Differential Revision: https://reviews.llvm.org/D28175
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291097
91177308-0d34-0410-b5e6-
96231b3b80d8
Mohammed Agabaria [Thu, 5 Jan 2017 09:51:02 +0000 (09:51 +0000)]
[Test Commit] fixing some format issue in X86TTI to match clang-format output.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291095
91177308-0d34-0410-b5e6-
96231b3b80d8
Elena Demikhovsky [Thu, 5 Jan 2017 08:21:09 +0000 (08:21 +0000)]
AVX-512: Optimized pattern for truncate with unsigned saturation.
DAG patterns optimization: truncate + unsigned saturation supported by VPMOVUS* instructions in AVX-512.
Differential revision: https://reviews.llvm.org/D28216
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291092
91177308-0d34-0410-b5e6-
96231b3b80d8
Saleem Abdulrasool [Thu, 5 Jan 2017 06:30:12 +0000 (06:30 +0000)]
test: remove unnecessary triple argument
This test is entirely target agnostic. Avoid the triple to repair the
build bots.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291088
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Thu, 5 Jan 2017 05:57:27 +0000 (05:57 +0000)]
[X86] Add Intel Kaby Lake model numbers to getHostCPUName aliased to "skylake" since there are no feature differences.
Model numbers found here http://www.sandpile.org/x86/cpuid.htm
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291086
91177308-0d34-0410-b5e6-
96231b3b80d8
Saleem Abdulrasool [Thu, 5 Jan 2017 05:56:39 +0000 (05:56 +0000)]
MC: support passing search paths to the IAS
This is needed to support inclusion in inline assembly via the
`.include` directive.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291085
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Thu, 5 Jan 2017 05:47:29 +0000 (05:47 +0000)]
[X86] Change getHostCPUName to report Intel model 0x4e as "skylake" instead of "skylake-avx512". Add the proper 0x55 model for "skylake-avx512".
Summary:
Intel's i5-6300U CPU is reporting to have a model id of 78 (4e).
The Host detection assumes that to be Skylake Xeon (with AVX512 support),
instead of a normal Skylake machine.
Patch by: Valentin Churavy
Reviewers: nalimilan, craig.topper
Subscribers: hfinkel, tkelman, craig.topper, nalimilan, llvm-commits
Differential Revision: https://reviews.llvm.org/D28221
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291084
91177308-0d34-0410-b5e6-
96231b3b80d8
Peter Collingbourne [Thu, 5 Jan 2017 04:40:09 +0000 (04:40 +0000)]
Tentative fix for modules build.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291079
91177308-0d34-0410-b5e6-
96231b3b80d8
Kostya Serebryany [Thu, 5 Jan 2017 04:32:19 +0000 (04:32 +0000)]
[libFuzzer] use /tmp (or $TMPDIR, if present) to store temp files during merge
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291078
91177308-0d34-0410-b5e6-
96231b3b80d8
Peter Collingbourne [Thu, 5 Jan 2017 04:00:09 +0000 (04:00 +0000)]
Fix build bots.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291073
91177308-0d34-0410-b5e6-
96231b3b80d8
Peter Collingbourne [Thu, 5 Jan 2017 03:39:00 +0000 (03:39 +0000)]
IR: Module summary representation for type identifiers; summary test scaffolding for lowertypetests.
Set up basic YAML I/O support for module summaries, plumb the summary into
the pass and add a few command line flags to test YAML I/O support. Bitcode
support to come separately, as will the code in LowerTypeTests that actually
uses the summary. Also add a couple of tests that pass by virtue of the pass
doing nothing with the summary (which happens to be the correct thing to do
for those tests).
Differential Revision: https://reviews.llvm.org/D28041
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291069
91177308-0d34-0410-b5e6-
96231b3b80d8
Richard Smith [Thu, 5 Jan 2017 03:13:10 +0000 (03:13 +0000)]
Revert r291025 ("AMDGPU: Remove unneccessary intermediate vector")
This caused buildbot failures due to returning ArrayRefs referencing local
(temporary) objects.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291067
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Thu, 5 Jan 2017 03:10:26 +0000 (03:10 +0000)]
[PM] Fix a typo in a comment that Davide spotted in another code review.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291066
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Thu, 5 Jan 2017 01:41:49 +0000 (01:41 +0000)]
[gtest] Work around broken installs of libc++ where we don't have
a cxxabi.h in the include search paths.
This comes up when libc++ is installed with some other abi library. At
some points in time in history we have had CMake hackery to try and get
a cxxabi.h installed that would work, but there are lots of examples
lacking this. Also, the just-built tree with libc++ seems to not quite
get this right.
To let folks make progress, we can easily work around this by detecting
that the header is missing and disabling the relevant parts of gtest.
This should fix the last remainging build bot failures. While these
failures are typically indicative of a questionable install, I don't
think gtest should be the thing that surfaces those issues and I don't
want folks blocked on this.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291063
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Thu, 5 Jan 2017 01:34:55 +0000 (01:34 +0000)]
[AVX-512] Update vextract64x4 intrinsic upgrade test cases to use a legal immediate so they test the instruction selection correctly.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291061
91177308-0d34-0410-b5e6-
96231b3b80d8
Mehdi Amini [Thu, 5 Jan 2017 01:08:01 +0000 (01:08 +0000)]
Mark test that is testing statistics output as requiring Assertions
We only enable statistic in an assert build by default.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291044
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Thu, 5 Jan 2017 00:40:52 +0000 (00:40 +0000)]
[InstSimplify] add tests to show missing select simplifications; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291043
91177308-0d34-0410-b5e6-
96231b3b80d8
Justin Lebar [Thu, 5 Jan 2017 00:12:51 +0000 (00:12 +0000)]
[PM] Edit comments in PassManager.h.
Summary:
This covers most of PassManager.h, up to the introduction of inner/outer
analysis proxies.
If there's a theme to these changes, it's simplifying the language. For
example:
* PreservedAnalyses is a "set of analyses", not an "abstract set".
"Abstract" doesn't have any particular meaning here.
* "Build types for the concept types" becomes "define the concept types".
* Instead of "data structures optimized for pointer-like types using
the alignment-provided low bits", say "data structures that use the
low bits of pointers."
* "Clear the map pointing into the results list" becomes
"Delete the map entries that point into the results list."
This patch also fixes a few places where we referred to "function" and
"module" pass/analysis managers, instead of the more abstract "IRUnitT"
PM/AMs we have now.
Subscribers: mehdi_amini
Differential Revision: https://reviews.llvm.org/D27367
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291040
91177308-0d34-0410-b5e6-
96231b3b80d8
Reid Kleckner [Thu, 5 Jan 2017 00:00:05 +0000 (00:00 +0000)]
Patch gtest to move GTEST_IS_THREADSAFE out of unrelated GTEST_HAS_SEH ifdef
Fixes the sanitizer Windows build, which happens to set
-DGTEST_HAS_SEH=0.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291038
91177308-0d34-0410-b5e6-
96231b3b80d8
Wolfgang Pieb [Wed, 4 Jan 2017 23:58:26 +0000 (23:58 +0000)]
[DWARF] Null out the debug locs of load instructions that have been moved by GVN
performing partial redundancy elimination (PRE). Not doing so can cause jumpy line
tables and confusing (though correct) source attributions.
Differential Revision: https://reviews.llvm.org/D27857
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291037
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Wed, 4 Jan 2017 23:40:06 +0000 (23:40 +0000)]
[gtest] Fix the way we disable a warning for unittests.
I somehow wrote this fix and then lost it prior to commit. Really sorry
about the noise. This should fix some issues with hacking add_definition
to do things with warning flags.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291033
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Wed, 4 Jan 2017 23:06:03 +0000 (23:06 +0000)]
[gtest] Upgrade googletest to version 1.8.0, minimizing local changes.
This required re-working the streaming support and lit's support for
'--gtest_list_tests' but otherwise seems to be a clean upgrade.
Differential Revision: https://reviews.llvm.org/D28154
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291029
91177308-0d34-0410-b5e6-
96231b3b80d8
Mehdi Amini [Wed, 4 Jan 2017 22:54:33 +0000 (22:54 +0000)]
Use lazy-loading of Metadata in MetadataLoader when importing is enabled (NFC)
Summary:
This is a relatively simple scheme: we use the index emitted in the
bitcode to avoid loading all the global metadata. Instead we load
the index with their position in the bitcode so that we can load each
of them individually. Materializing the global metadata block in this
condition only triggers loading the named metadata, and the ones
referenced from there (transitively). When materializing a function,
metadata from the global block are loaded lazily as they are
referenced.
Two main current limitations are:
1) Global values other than functions are not materialized on demand,
so we need to eagerly load METADATA_GLOBAL_DECL_ATTACHMENT records
(and their transitive dependencies).
2) When we load a single metadata, we don't recurse on the operands,
instead we use a placeholder or a temporary metadata. Unfortunately
tepmorary nodes are very expensive. This is why we don't have it
always enabled and only for importing.
These two limitations can be lifted in a subsequent improvement if
needed.
With this change, the total link time of opt with ThinLTO and Debug
Info enabled is going down from 282s to 224s (~20%).
Reviewers: pcc, tejohnson, dexonsmith
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D28113
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291027
91177308-0d34-0410-b5e6-
96231b3b80d8
Mehdi Amini [Wed, 4 Jan 2017 22:54:14 +0000 (22:54 +0000)]
Change BitstreamCursor::skipRecord to return the record code (NFC)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291026
91177308-0d34-0410-b5e6-
96231b3b80d8
Matt Arsenault [Wed, 4 Jan 2017 22:54:10 +0000 (22:54 +0000)]
AMDGPU: Remove unneccessary intermediate vector
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291025
91177308-0d34-0410-b5e6-
96231b3b80d8
David Blaikie [Wed, 4 Jan 2017 22:52:00 +0000 (22:52 +0000)]
Fixup some header includes from recent IntrusiveRefCntPtr cleanup.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291024
91177308-0d34-0410-b5e6-
96231b3b80d8
Justin Lebar [Wed, 4 Jan 2017 22:49:55 +0000 (22:49 +0000)]
[ADT] Attempt to fix GCC warning in IntrusiveRefCntPtrTest.
Our copy constructor doesn't explicitly invoke the base class's
constructor, and GCC is (rightly) concerned.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291023
91177308-0d34-0410-b5e6-
96231b3b80d8
Matt Arsenault [Wed, 4 Jan 2017 22:49:03 +0000 (22:49 +0000)]
InstCombine: Fold cos(-x) -> cos(x)
Also cos(fabs(x)) -> cos(x)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291022
91177308-0d34-0410-b5e6-
96231b3b80d8
David Blaikie [Wed, 4 Jan 2017 22:36:33 +0000 (22:36 +0000)]
Reapply "Make BitCodeAbbrev ownership explicit using shared_ptr rather than IntrusiveRefCntPtr""
If this is a problem for anyone (shared_ptr is two pointers in size,
whereas IntrusiveRefCntPtr is 1 - and the ref count control block that
make_shared adds is probably larger than the one int in RefCountedBase)
I'd prefer to address this by adding a lower-overhead version of
shared_ptr (possibly refactoring IntrusiveRefCntPtr into such a thing)
to avoid the intrusiveness - this allows memory ownership to remain
orthogonal to types and at least to me, seems to make code easier to
understand (since no implicit ownership acquisition can happen).
This recommits 291006, reverted in r291007.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291016
91177308-0d34-0410-b5e6-
96231b3b80d8
Tim Shen [Wed, 4 Jan 2017 22:11:42 +0000 (22:11 +0000)]
[Legalizer] Fix fp-to-uint to fp-tosint promotion assertion.
Summary:
When promoting fp-to-uint16 to fp-to-sint32, the result is actually zero
extended. For example, given double 65534.0, without legalization:
fp-to-uint16: 65534.0 -> 0xfffe
With the legalization:
fp-to-sint32: 65534.0 -> 0x0000fffe
Without this patch, legalization wrongly emits a signed extend assertion,
which is consumed by later icmp instruction, and cause miscompile.
Note that the floating point value must be in [0, 65535), otherwise the
behavior is undefined.
This patch reverts r279223 behavior and adds more tests and
documentations.
In PR29041's context, James Molloy mentioned that:
We don't need to mask because conversion from float->uint8_t is
undefined if the integer part of the float value is not representable in
uint8_t. Therefore we can assume this doesn't happen!
which is totally true and good, because fptoui is documented clearly to
have undefined behavior when overflow/underflow happens. We should take
the advantage of this behavior so that we can save unnecessary mask
instructions.
Reviewers: jmolloy, nadav, echristo, kbarton
Subscribers: mehdi_amini, nemanjai, llvm-commits
Differential Revision: https://reviews.llvm.org/D28284
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291015
91177308-0d34-0410-b5e6-
96231b3b80d8
David Blaikie [Wed, 4 Jan 2017 21:59:22 +0000 (21:59 +0000)]
Fix some buildbot issues with const objects with default ctors
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291013
91177308-0d34-0410-b5e6-
96231b3b80d8
Evgeny Stupachenko [Wed, 4 Jan 2017 21:43:39 +0000 (21:43 +0000)]
The patch fixes (base, index, offset) match.
Summary:
Instead of matching:
(a + i) + 1 -> (a + i, undef, 1)
Now it matches:
(a + i) + 1 -> (a, i, 1)
Reviewers: rengolin
Differential Revision: http://reviews.llvm.org/D26367
From: Evgeny Stupachenko <evstupac@gmail.com>
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291012
91177308-0d34-0410-b5e6-
96231b3b80d8
Chad Rosier [Wed, 4 Jan 2017 21:26:23 +0000 (21:26 +0000)]
[AArch64] Update the feature set for Qualcomm's Falkor CPU.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291010
91177308-0d34-0410-b5e6-
96231b3b80d8
Michael Kuperstein [Wed, 4 Jan 2017 21:24:56 +0000 (21:24 +0000)]
Add positive test for sqrt "partial inlining". NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291009
91177308-0d34-0410-b5e6-
96231b3b80d8
Nirav Dave [Wed, 4 Jan 2017 21:21:46 +0000 (21:21 +0000)]
[AArch64] Fix over-eager early-exit in load-store combiner
Fix early-exit analysis for memory operation pairing when operations are
not emitted in ascending order.
Reviewers: mcrosier, t.p.northover
Subscribers: aemerson, rengolin, llvm-commits
Differential Revision: https://reviews.llvm.org/D28251
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291008
91177308-0d34-0410-b5e6-
96231b3b80d8
David Blaikie [Wed, 4 Jan 2017 21:19:28 +0000 (21:19 +0000)]
Revert "Make BitCodeAbbrev ownership explicit using shared_ptr rather than IntrusiveRefCntPtr"
Breaks Clang's use of bitcode. Reverting until I have a fix to go with
it there.
This reverts commit r291006.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291007
91177308-0d34-0410-b5e6-
96231b3b80d8
David Blaikie [Wed, 4 Jan 2017 21:13:35 +0000 (21:13 +0000)]
Make BitCodeAbbrev ownership explicit using shared_ptr rather than IntrusiveRefCntPtr
If this is a problem for anyone (shared_ptr is two pointers in size,
whereas IntrusiveRefCntPtr is 1 - and the ref count control block that
make_shared adds is probably larger than the one int in RefCountedBase)
I'd prefer to address this by adding a lower-overhead version of
shared_ptr (possibly refactoring IntrusiveRefCntPtr into such a thing)
to avoid the intrusiveness - this allows memory ownership to remain
orthogonal to types and at least to me, seems to make code easier to
understand (since no implicit ownership acquisition can happen).
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291006
91177308-0d34-0410-b5e6-
96231b3b80d8
David Blaikie [Wed, 4 Jan 2017 21:13:28 +0000 (21:13 +0000)]
Remove unnecessary intrusive ref counting in favor of std::shared_ptr/make_shared
The intrusive nature of the reference counting is not required/used
here, so simplify the ownership model to make the code easier to
understand.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291005
91177308-0d34-0410-b5e6-
96231b3b80d8
Michael Kuperstein [Wed, 4 Jan 2017 21:08:53 +0000 (21:08 +0000)]
Remove accidentally target-dependent test and pacify bots.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291004
91177308-0d34-0410-b5e6-
96231b3b80d8
Hal Finkel [Wed, 4 Jan 2017 21:05:13 +0000 (21:05 +0000)]
[PowerPC] Fix logic dealing with nop after calls (and tail-call eligibility)
This change aims to unify and correct our logic for when we need to allow for
the possibility of the linker adding a TOC restoration instruction after a
call. This comes up in two contexts:
1. When determining tail-call eligibility. If we make a tail call (i.e.
directly branch to a function) then there is no place for the linker to add
a TOC restoration.
2. When determining when we need to add a nop instruction after a call.
Likewise, if there is a possibility that the linker might need to add a
TOC restoration after a call, then we need to put a nop after the call
(the bl instruction).
First problem: We were using similar, but different, logic to decide (1) and
(2). This is just wrong. Both the resideInSameModule function (used when
determining tail-call eligibility) and the isLocalCall function (used when
deciding if the post-call nop is needed) were supposed to be determining the
same underlying fact (i.e. might a TOC restoration be needed after the call).
The same logic should be used in both places.
Second problem: The logic in both places was wrong. We only know that two
functions will share the same TOC when both functions come from the same
section of the same object. Otherwise the linker might cause the functions to
use different TOC base addresses (unless the multi-TOC linker option is
disabled, in which case only shared-library boundaries are relevant). There are
a number of factors that can cause functions to be placed in different sections
or come from different objects (-ffunction-sections, explicitly-specified
section names, COMDAT, weak linkage, etc.). All of these need to be checked.
The existing logic only checked properties of the callee, but the properties of
the caller must also be checked (for example, calling from a function in a
COMDAT section means calling between sections).
There was a conceptual error in the resideInSameModule function in that it
allowed tail calls to functions with weak linkage and protected/hidden
visibility. While protected/hidden visibility does prevent the function
implementation from being replaced at runtime (via interposition), it does not
prevent the linker from using an alternate implementation at link time (i.e.
using some strong definition to replace the provided weak one during linking).
If this happens, then we're still potentially looking at a required TOC
restoration upon return.
Otherwise, in general, the post-call nop is needed wherever ELF interposition
needs to be supported. We don't currently support ELF interposition at the IR
level (see http://lists.llvm.org/pipermail/llvm-dev/2016-November/107625.html
for more information), and I don't think we should try to make it appear to
work in the backend in spite of that fact. Unfortunately, because of the way
that the ABI works, we need to generate code as if we supported interposition
whenever the linker might insert stubs for the purpose of supporting it.
Differential Revision: https://reviews.llvm.org/D27231
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291003
91177308-0d34-0410-b5e6-
96231b3b80d8
Daniel Berlin [Wed, 4 Jan 2017 21:01:02 +0000 (21:01 +0000)]
NewGVN: Track the maximum number of iterations GVN takes on any function, so we can pinpoint performance issues.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291002
91177308-0d34-0410-b5e6-
96231b3b80d8
Michael Kuperstein [Wed, 4 Jan 2017 20:48:30 +0000 (20:48 +0000)]
Add positive test for sqrt "partial inlining". NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291001
91177308-0d34-0410-b5e6-
96231b3b80d8
Davide Italiano [Wed, 4 Jan 2017 20:37:57 +0000 (20:37 +0000)]
[lib/LTO] Simplify logic removing set but unused variable. NFCI.
Reported by David Binderman and ack'ed by Teresa on IRC.
PR: 31527
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@291000
91177308-0d34-0410-b5e6-
96231b3b80d8
Peter Collingbourne [Wed, 4 Jan 2017 20:10:43 +0000 (20:10 +0000)]
YAML: Remove Input::MapHNode::isValidKey(), use llvm::is_contained() instead. NFC.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290999
91177308-0d34-0410-b5e6-
96231b3b80d8
Eric Christopher [Wed, 4 Jan 2017 20:05:18 +0000 (20:05 +0000)]
Remove dead and unused variable NumSentinelElements.
Fixes PR31529.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290998
91177308-0d34-0410-b5e6-
96231b3b80d8
Eric Christopher [Wed, 4 Jan 2017 19:47:10 +0000 (19:47 +0000)]
Remove dead variable Len.
Fixes PR31528
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290995
91177308-0d34-0410-b5e6-
96231b3b80d8
Tobias Grosser [Wed, 4 Jan 2017 19:35:38 +0000 (19:35 +0000)]
Add missing CHECK: line to test case added in 29097
Without this CHECK line, we may not detect incorrectly detected additional
regions at the end of the region tree.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290994
91177308-0d34-0410-b5e6-
96231b3b80d8
David Blaikie [Wed, 4 Jan 2017 18:57:31 +0000 (18:57 +0000)]
ADT: IntrusiveRefCntPtr: Broaden the definition of correct usage of RefCountedBase
This roughly matches the semantics of std::enable_shared_from_this - that it
does not dictate the ownership model of all users, but constrains those users
taking advantage of the intrusive nature to do so only when there's a guarantee
that that's the ownership model being used for the object being passed.
Reviewers: jlebar
Differential Revision: https://reviews.llvm.org/D28245
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290987
91177308-0d34-0410-b5e6-
96231b3b80d8
Sanjay Patel [Wed, 4 Jan 2017 18:16:43 +0000 (18:16 +0000)]
fix comment formatting; NFC
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290980
91177308-0d34-0410-b5e6-
96231b3b80d8
Jan Vesely [Wed, 4 Jan 2017 18:06:55 +0000 (18:06 +0000)]
AMDGPU/SI: Implement sendmsghalt intrinsic
v2: expose using amdgcn prefix
Differential Revision: https://reviews.llvm.org/D23511
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290977
91177308-0d34-0410-b5e6-
96231b3b80d8
Tobias Grosser [Wed, 4 Jan 2017 17:50:15 +0000 (17:50 +0000)]
RegionInfo: add new test case
This test case has been reduced from test/Analysis/RegionInfo/mix_1.ll and
provides us with a minimal example of a test case which caused problems while
working on an improved version of the RegionInfo analysis. We upstream this
test case, as it certainly can be helpful in future debugging and optimization
tests.
Test case reduced by Pratik Bhatu <cs12b1010@iith.ac.in>
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290974
91177308-0d34-0410-b5e6-
96231b3b80d8
Robert Lougher [Wed, 4 Jan 2017 17:40:32 +0000 (17:40 +0000)]
Reapply "[SimplifyCFG] In sinkLastInstruction correctly set debugloc of common inst"
This reapplies r289828 (reverted in r289833 as it broke the address sanitizer). The
debugloc is now only set when the instruction is not a call, as this causes the
verifier to assert (the inliner requires an inlinable callsite to have a debug loc
if the caller and callee have debug info).
Original commit message:
Simplify CFG will try to sink the last instruction in a series of basic blocks,
creating a "common" instruction in the successor block (sinkLastInstruction).
When it does this, the debug location of the single instruction should be the
merged debug locations of the commoned instructions.
Original review: https://reviews.llvm.org/D27590
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290973
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Wed, 4 Jan 2017 16:12:07 +0000 (16:12 +0000)]
Revert r290970 [SLPVectorizer] Regenerate test.
The check script will use var names before they are declared, which filecheck doesn't like.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290971
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Wed, 4 Jan 2017 16:01:55 +0000 (16:01 +0000)]
[SLPVectorizer] Regenerate test.
Missed var name
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290970
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Wed, 4 Jan 2017 15:52:41 +0000 (15:52 +0000)]
Regenerate test.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290969
91177308-0d34-0410-b5e6-
96231b3b80d8
Asiri Rathnayake [Wed, 4 Jan 2017 14:43:51 +0000 (14:43 +0000)]
Fix x86 gold tests on non-x86 targets.
These tests are missing a target triple and the -m elf_x86_64 gold option,
which makes them fail on non-x86 targets.
Differential revision: https://reviews.llvm.org/D28285
Reviewers: tejohnson
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290965
91177308-0d34-0410-b5e6-
96231b3b80d8
Teresa Johnson [Wed, 4 Jan 2017 14:27:31 +0000 (14:27 +0000)]
[ThinLTO] Rework llvm-link to use the FunctionImporter
Summary:
Change llvm-link to use the FunctionImporter handling, instead of
manually invoking the Linker. We still need to load the module
in llvm-link to do the desired testing for invalid import requests
(weak functions), and to get the GUID (in case the function is local).
Also change the drop-debug-info test to use llvm-link so that importing
is forced (in order to test debug info handling) and independent of
import logic changes.
Reviewers: mehdi_amini
Subscribers: mgorny, llvm-commits, aprantl
Differential Revision: https://reviews.llvm.org/D28277
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290964
91177308-0d34-0410-b5e6-
96231b3b80d8
Davide Italiano [Wed, 4 Jan 2017 14:01:58 +0000 (14:01 +0000)]
[SPARC] Fix test so that it checks the correct label.
Before it wasn't checking anything.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290963
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Wed, 4 Jan 2017 14:01:33 +0000 (14:01 +0000)]
[CostModel][X86] Updated vXi8 and vXi16 Reverse/Alternate shuffle costs
Actual codegen is much better than the extract+insert patterns that was assumed.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290962
91177308-0d34-0410-b5e6-
96231b3b80d8
Nemanja Ivanovic [Wed, 4 Jan 2017 13:58:09 +0000 (13:58 +0000)]
[PowerPC] Add identification for POWER8NVL
This CPU type was not previously recognized by LLVM which led to emitting
poor (and sometimes incorrect) code in some JIT workloads on such a machine.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290961
91177308-0d34-0410-b5e6-
96231b3b80d8
Davide Italiano [Wed, 4 Jan 2017 13:12:00 +0000 (13:12 +0000)]
[MC/COFF] Fix a test to actually check the relocation.
Inspired by r290953 + grep -R 'CHCEK'.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290958
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Wed, 4 Jan 2017 12:08:41 +0000 (12:08 +0000)]
[X86] Merged Reverse/Alternate shuffle cost tables. NFCI.
As discussed on D27811, merged the shuffle cost LUTs and use the shuffle kind to perform the lookup instead of the ISD opcode.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290956
91177308-0d34-0410-b5e6-
96231b3b80d8
Florian Hahn [Wed, 4 Jan 2017 12:08:35 +0000 (12:08 +0000)]
[framelowering] Skip dbg values when getting next/previous instruction.
Summary:
In mergeSPUpdates, debug values need to be ignored when getting the
previous element, otherwise debug data could have an impact on codegen.
In eliminateCallFramePseudoInstr, debug values after the erased element
could have an impact on codegen and should be skipped.
Closes PR31319 (https://llvm.org/bugs/show_bug.cgi?id=31319)
Reviewers: aprantl, MatzeB, mkuper
Subscribers: gbedwell, llvm-commits
Differential Revision: https://reviews.llvm.org/D27688
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290955
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Wed, 4 Jan 2017 11:40:18 +0000 (11:40 +0000)]
[ADT] Speculative attempt to fix build bot issues with r290952.
This just removes the usage of llvm::reverse and llvm::seq. That makes
it harder to handle the empty case correctly and so I've also added
a test there.
This is just a shot in the dark at what might be behind the buildbot
failures. I can't reproduce any issues locally including with ASan...
I feel like I'm missing something...
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290954
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Wed, 4 Jan 2017 11:15:01 +0000 (11:15 +0000)]
[Inliner] Fix a test where I typo'ed 'CHECK' as 'CHCEK' when converting
to FileCheck.
Fortunately, it passes. =]
Spotted in review by Bob Wilson!
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290953
91177308-0d34-0410-b5e6-
96231b3b80d8
Chandler Carruth [Wed, 4 Jan 2017 11:13:11 +0000 (11:13 +0000)]
[ADT] Enhance the PriorityWorklist to support bulk insertion.
This is both convenient and more efficient as we can skip any
intermediate reallocation of the vector.
This usage pattern came up in a subsequent patch on the pass manager,
but it seems generically useful so I factored it out and added unittests
here.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290952
91177308-0d34-0410-b5e6-
96231b3b80d8
Bjorn Pettersson [Wed, 4 Jan 2017 09:41:56 +0000 (09:41 +0000)]
Fix for InlineSpiller accessing not updated dom tree base information.
Summary:
The InlineSpiller was accessing the DominatorTreeBase directly
through the public data member DT in the MachineDominatorTree.
This is not a good idea as the "cached" information in
SplitCriticalEdges is not applied before the access.
The DominatorTreeBase must be accessed through the member
function getBase() in MachineDominatorTree.
The fault was introduced in r266162.
I think the public data member DT in the MachineDominatorTree
should have been made private in the original code (r215576)
that introduced the concept of lazily updating the
MachineDominatorTree information from
MachineBasicBlock::SplitCriticalEdge().
Patch by Karl-Johan Karlsson <karl-johan.karlsson@ericsson.com>
Reviewers: wmi, qcolombet
Subscribers: llvm-commits, bjope, uabelho
Differential Revision: https://reviews.llvm.org/D27983
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290950
91177308-0d34-0410-b5e6-
96231b3b80d8
Nitesh Jain [Wed, 4 Jan 2017 09:34:37 +0000 (09:34 +0000)]
[LLC][MIPS] Fix crash after enabling LLVM_ENABLE_EXPENSIVE_CHECKS
Reviewers: sdardis, vkalintiris
Subscribers: jaydeep, slthakur, RKSimon, llvm-commits
Differential Revision: https://reviews.llvm.org/D27841
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290949
91177308-0d34-0410-b5e6-
96231b3b80d8
Ayman Musa [Wed, 4 Jan 2017 08:21:54 +0000 (08:21 +0000)]
[X86][AVX512] Passing the appropriate memory operand class to INT_{U}COMIS{S|D} instructions
Replacing the memory operand in the intrinsic versions of the comis/ucomis instrucions from f128mem to ssmem/sdmem accordingly.
Differential Revision: https://reviews.llvm.org/D28138
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290948
91177308-0d34-0410-b5e6-
96231b3b80d8
Simon Pilgrim [Wed, 4 Jan 2017 08:05:42 +0000 (08:05 +0000)]
[X86] Attempt to pre-truncate arithmetic operations if useful
In some cases its more efficient to combine TRUNC( BINOP( X, Y ) ) --> BINOP( TRUNC( X ), TRUNC( Y ) ) if the binop is legal for the truncated types.
This is true for vector integer multiplication (especially vXi64), as well as ADD/AND/XOR/OR in cases where we only need to truncate one of the inputs at runtime (e.g. a duplicated input or an one use constant we can fold).
Further work could be done here - scalar cases (especially i64) could often benefit (if we avoid partial registers etc.), other opcodes, and better analysis of when truncating the inputs reduces costs.
I have considered implementing this for all targets within the DAGCombiner but wasn't sure we could devise a suitable cost model system that would give us the range we need.
Differential Revision: https://reviews.llvm.org/D28219
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290947
91177308-0d34-0410-b5e6-
96231b3b80d8
Craig Topper [Wed, 4 Jan 2017 07:32:03 +0000 (07:32 +0000)]
[AVX-512] Add support for detecting 512-bit shuffles that contain a 128-bit subvector insertion from the lowest subvector of one of the sources.
These are best handled with a vinsert32x4 or vinsert64x2 instruction.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@290946
91177308-0d34-0410-b5e6-
96231b3b80d8