OSDN Git Service

android-x86/external-llvm.git
6 years ago[ARM GlobalISel] Fix assertion in RegBankSelect
Diana Picus [Wed, 20 Dec 2017 11:27:10 +0000 (11:27 +0000)]
[ARM GlobalISel] Fix assertion in RegBankSelect

We get an assertion in RegBankSelect for code along the lines of
my_32_bit_int = my_64_bit_int, which tends to translate into a 64-bit
load, followed by a G_TRUNC, followed by a 32-bit store. This appears in
a couple of places in the test-suite.

At the moment, the legalizer doesn't distinguish between integer and
floating point scalars, so a 64-bit load will be marked as legal for
targets with VFP, and so will the rest of the sequence, leading to a
slightly bizarre G_TRUNC reaching RegBankSelect.

Since the current support for 64-bit integers is rather immature, this
patch works around the issue by explicitly handling this case in
RegBankSelect and InstructionSelect. In the future, we may want to
revisit this decision and make sure 64-bit integer loads are narrowed
before reaching RegBankSelect.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321165 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[ARM] Lower unsigned saturation to USAT
Florian Hahn [Wed, 20 Dec 2017 11:13:57 +0000 (11:13 +0000)]
[ARM] Lower unsigned saturation to USAT

Summary:
Implement lower of unsigned saturation on an interval [0, k] where k + 1 is a power of two using USAT instruction in a similar way to how [~k, k] is lowered using SSAT on ARM models that supports it.

Patch by Marten Svanfeldt

Reviewers: t.p.northover, pbarrio, eastig, SjoerdMeijer, javed.absar, fhahn

Reviewed By: fhahn

Subscribers: fhahn, aemerson, javed.absar, llvm-commits, kristof.beyls

Differential Revision: https://reviews.llvm.org/D41348

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321164 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[AArch64][SVE] Re-submit patch series for ZIP1/ZIP2
Sander de Smalen [Wed, 20 Dec 2017 11:02:42 +0000 (11:02 +0000)]
[AArch64][SVE] Re-submit patch series for ZIP1/ZIP2

This patch resubmits the SVE ZIP1/ZIP2 patch series consisting of
of r320992, r320986, r320973, and r320970 by reverting
https://reviews.llvm.org/rL321024.

The issue that caused r321024 has been addressed in https://reviews.llvm.org/rL321158,
so this patch-series should be safe to resubmit.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321163 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoAArch64: fix one more place movi.2d could be created.
Tim Northover [Wed, 20 Dec 2017 10:45:39 +0000 (10:45 +0000)]
AArch64: fix one more place movi.2d could be created.

Somehow got missed out of r320965.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321162 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoGive up on array allocas in getPointerDereferenceableBytes
Bjorn Steinbrink [Wed, 20 Dec 2017 10:01:30 +0000 (10:01 +0000)]
Give up on array allocas in getPointerDereferenceableBytes

Summary:
As suggested by Eli Friedman, don't try to handle array allocas here,
because of possible overflows, instead rely on instcombine converting
them to allocations of array types.

Reviewers: efriedma

Subscribers: llvm-commits

Differential Revision: https://reviews.llvm.org/D41398

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321159 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[AArch64] Asm: Fix parsing of register aliases that have a name starting with 'z'
Sander de Smalen [Wed, 20 Dec 2017 09:45:45 +0000 (09:45 +0000)]
[AArch64] Asm: Fix parsing of register aliases that have a name starting with 'z'

Summary: This fixes an issue as identified by @rnk in https://reviews.llvm.org/rL321029.

Reviewers: rnk, fhahn, rengolin, efriedma, echristo, olista01

Reviewed By: rnk, fhahn

Subscribers: aemerson, javed.absar, kristof.beyls, llvm-commits, rnk

Differential Revision: https://reviews.llvm.org/D41382

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321158 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[AArch64] CCSIDR2 system register
Sam Parker [Wed, 20 Dec 2017 08:56:41 +0000 (08:56 +0000)]
[AArch64] CCSIDR2 system register

Implement the 'Current Cache Size' register that has been introduced
as part of the Armv8.3 architecture. I originally missed this, and
(hopefully) should be the final patch for assembler support.

Differential Revision: https://reviews.llvm.org/D41396

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321155 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[X86][CLFLUSH]: Adding full coverage of MC encoding for the CLFLUSH isa sets.<NFC>
Gadi Haber [Wed, 20 Dec 2017 08:28:24 +0000 (08:28 +0000)]
[X86][CLFLUSH]: Adding full coverage of MC encoding for the CLFLUSH isa sets.<NFC>

NFC.
Adding MC regressions tests to cover the CLFLSH and CLFLUSHOPT isa sets.
This patch is part of a larger task to cover MC encoding of all X86 isa sets started in revision: https://reviews.llvm.org/D39952

Reviewers: zvi, RKSimon, craig.topper, m_zuckerman
Differential Revision: https://reviews.llvm.org/D41331

Change-Id: Ifa643dd52f1b7184c52bc1806038dc74b234fc65

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321153 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[X86] Optimize sign extends on index operand to gather/scatter to not sign extend...
Craig Topper [Wed, 20 Dec 2017 07:36:59 +0000 (07:36 +0000)]
[X86] Optimize sign extends on index operand to gather/scatter to not sign extend past i32.

The gather instruction will implicitly sign extend to the pointer width, we don't need to further extend it. This can prevent unnecessary splitting in some cases.

There's still an issue that lowering on non-VLX can introduce another sign extend that doesn't get combined with shifts from a lowered sign_extend_inreg.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321152 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[AArch64] Implement stack probing for windows
Martin Storsjo [Wed, 20 Dec 2017 06:51:45 +0000 (06:51 +0000)]
[AArch64] Implement stack probing for windows

Differential Revision: https://reviews.llvm.org/D41131

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321150 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[X86] Add a missing return to combineGatherScatter after sucessful combine.
Craig Topper [Wed, 20 Dec 2017 06:44:50 +0000 (06:44 +0000)]
[X86] Add a missing return to combineGatherScatter after sucessful combine.

Not sure how to test this cause I think the worst that happens is that we don't revisit the node a second time to look for additional combines. We used UpdateNodeOperands so the updating the DAG work was already done.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321148 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[PowerPC] fix a bug in redundant compare elimination
Hiroshi Inoue [Wed, 20 Dec 2017 05:18:19 +0000 (05:18 +0000)]
[PowerPC] fix a bug in redundant compare elimination

This patch fixes a bug in the redundant compare elimination reported in https://reviews.llvm.org/rL320786 and re-enables the optimization.

The redundant compare elimination assumes that we can replace signed comparison with unsigned comparison for the equality check. But due to the difference in the sign extension behavior we cannot change the opcode if the comparison is against an immediate and the most significant bit of the immediate is one.

Differential Revision: https://reviews.llvm.org/D41385

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321147 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[memcpyopt] Teach memcpyopt to optimize across basic blocks
Dan Gohman [Wed, 20 Dec 2017 01:36:25 +0000 (01:36 +0000)]
[memcpyopt] Teach memcpyopt to optimize across basic blocks

This teaches memcpyopt to make a non-local memdep query when a local query
indicates that the dependency is non-local. This notably allows it to
eliminate many more llvm.memcpy calls in common Rust code, often by 20-30%.

This is r319482 and r319483, along with fixes for PR35519: fix the
optimization that merges stores into memsets to preserve cached memdep
info, and fix memdep's non-local caching strategy to not assume that larger
queries are always more conservative than smaller ones.

Fixes PR28958 and PR35519.

Differential Revision: https://reviews.llvm.org/D40802

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321138 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[X86] Improve coverage of fma negations.
Craig Topper [Wed, 20 Dec 2017 01:26:36 +0000 (01:26 +0000)]
[X86] Improve coverage of fma negations.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321137 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[X86] Fix probable typo in fma fneg test.
Craig Topper [Wed, 20 Dec 2017 01:26:35 +0000 (01:26 +0000)]
[X86] Fix probable typo in fma fneg test.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321136 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[X86] Remove code from combineSext that looks for MVT::i1 after operation legalizatio...
Craig Topper [Wed, 20 Dec 2017 01:00:01 +0000 (01:00 +0000)]
[X86] Remove code from combineSext that looks for MVT::i1 after operation legalization which can never happen.

Type legalization guarantees this to be impossible since MVT::i1 isn't a legal type.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321132 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[WebAssembly] Disable tee_local optimizations when targeting the ELF ABI.
Dan Gohman [Wed, 20 Dec 2017 00:59:28 +0000 (00:59 +0000)]
[WebAssembly] Disable tee_local optimizations when targeting the ELF ABI.

These optimizations depend on the ExplicitLocals pass to lower TEE
instructions, which is disabled in the ELF ABI, so disable them too.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321131 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[WebAssembly] Remove an obsolete comment.
Dan Gohman [Wed, 20 Dec 2017 00:10:28 +0000 (00:10 +0000)]
[WebAssembly] Remove an obsolete comment.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321127 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoRevert "Fix faulty assertion in debug info"
Adrian McCarthy [Tue, 19 Dec 2017 23:34:37 +0000 (23:34 +0000)]
Revert "Fix faulty assertion in debug info"

This reverts commit e32def3f7ebe1136b7038336eff56a415a962bf2.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321125 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoFix faulty assertion in debug info
Adrian McCarthy [Tue, 19 Dec 2017 23:01:17 +0000 (23:01 +0000)]
Fix faulty assertion in debug info

It appears the code uses nullptr to represent a void type in debug metadata,
which led to an assertion failure when building DeltaAlgorithm.cpp with a
self-hosted clang on Windows.

I'm not sure why/if the problem was Windows-specific.

Fixes bug https://bugs.llvm.org/show_bug.cgi?id=35543

Differential Revision: https://reviews.llvm.org/D41264

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321122 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[X86] Add an assert to indicate that there is only once specific VT allowed at a...
Craig Topper [Tue, 19 Dec 2017 22:38:09 +0000 (22:38 +0000)]
[X86] Add an assert to indicate that there is only once specific VT allowed at a certain point in LowerMULH.

Helps with code readability a little.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321118 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoSilence a bunch of implicit fallthrough warnings
Adrian Prantl [Tue, 19 Dec 2017 22:05:25 +0000 (22:05 +0000)]
Silence a bunch of implicit fallthrough warnings

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321114 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[CodeGen] Move printing MO_BlockAddress operands to MachineOperand::print
Francis Visoiu Mistrih [Tue, 19 Dec 2017 21:47:14 +0000 (21:47 +0000)]
[CodeGen] Move printing MO_BlockAddress operands to MachineOperand::print

Work towards the unification of MIR and debug output by refactoring the
interfaces.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321113 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[CodeGen] Move printing MO_IntrinsicID operands to MachineOperand::print
Francis Visoiu Mistrih [Tue, 19 Dec 2017 21:47:10 +0000 (21:47 +0000)]
[CodeGen] Move printing MO_IntrinsicID operands to MachineOperand::print

Work towards the unification of MIR and debug output by refactoring the
interfaces.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321112 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[CodeGen] Move printing MO_IntrinsicID operands to MachineOperand::print
Francis Visoiu Mistrih [Tue, 19 Dec 2017 21:47:05 +0000 (21:47 +0000)]
[CodeGen] Move printing MO_IntrinsicID operands to MachineOperand::print

Work towards the unification of MIR and debug output by refactoring the
interfaces.

Also add support for printing with a null TargetIntrinsicInfo and no
MachineFunction.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321111 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[CodeGen] Move printing MO_FPImmediate operands to MachineOperand::print
Francis Visoiu Mistrih [Tue, 19 Dec 2017 21:47:00 +0000 (21:47 +0000)]
[CodeGen] Move printing MO_FPImmediate operands to MachineOperand::print

Work towards the unification of MIR and debug output by refactoring the
interfaces.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321110 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[CodeGen] Refactor printOffset from MO and MIRPrinter
Francis Visoiu Mistrih [Tue, 19 Dec 2017 21:46:55 +0000 (21:46 +0000)]
[CodeGen] Refactor printOffset from MO and MIRPrinter

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321109 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[CGP] Format. NFC
Haicheng Wu [Tue, 19 Dec 2017 20:53:32 +0000 (20:53 +0000)]
[CGP] Format. NFC

Clang-format.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321107 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoTargetLoweringBase: Fix darwinHasSinCos()
Matthias Braun [Tue, 19 Dec 2017 20:24:12 +0000 (20:24 +0000)]
TargetLoweringBase: Fix darwinHasSinCos()

Another followup to my refactoring in r321036: Turns out we can end up
with an x86 darwin target that is not macos (simulator triples can look
like i386-apple-ios) so we need the x86/32bit check in all cases.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321104 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[dwarfdump][test] Add test case for r321064
Jonas Devlieghere [Tue, 19 Dec 2017 19:42:32 +0000 (19:42 +0000)]
[dwarfdump][test] Add test case for r321064

Verify that -lookup takes a 64-bit address.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321101 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[AMDGPU] Turn off MergeConsecutiveStores() before Instruction Selection for AMDGPU...
Mark Searles [Tue, 19 Dec 2017 19:26:23 +0000 (19:26 +0000)]
[AMDGPU] Turn off MergeConsecutiveStores() before Instruction Selection for AMDGPU. Commit dbbb6c5fc3642987430866dffdf710df4f616ac7 turned on MergeConsecutiveStores() before Instruction Selection for all targets. Enough AMDGPU compiles go into an infinite loop ( MergeConsecutiveStores() merges two stores; LegalizeStoreOps() un-merges; MergeConsecutiveStores() re-merges, etc. ) to warrant turning it off until the issues can be addressed.

Differential Revision: https://reviews.llvm.org/D41377

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321100 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[SeparateConstOffsetFromGEP] Fix a typo. NFC.
Haicheng Wu [Tue, 19 Dec 2017 18:49:21 +0000 (18:49 +0000)]
[SeparateConstOffsetFromGEP] Fix a typo. NFC.

do CSE for to => do CSE to

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321098 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[X86] Regenerate popcnt tests
Simon Pilgrim [Tue, 19 Dec 2017 18:05:13 +0000 (18:05 +0000)]
[X86] Regenerate popcnt tests

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321093 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[GlobalISel][Legalizer] Fix crash when trying to lower G_FNEG of fp128 types.
Amara Emerson [Tue, 19 Dec 2017 17:21:35 +0000 (17:21 +0000)]
[GlobalISel][Legalizer] Fix crash when trying to lower G_FNEG of fp128 types.

This doesn't add legalizer support, just prevents crashing so that we
can gracefully fall back to SDAG.

Fixes PR35690.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321091 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[DAG] Elide overlapping store
Nirav Dave [Tue, 19 Dec 2017 17:10:56 +0000 (17:10 +0000)]
[DAG] Elide overlapping store

Summary:
Extend overlapping store elision to handle overwrites of stores by
larger stores.

Nontemporal tests have been modified to add memory dependencies to
prevent store elision.

Reviewers: craig.topper, rnk, t.p.northover

Subscribers: javed.absar, hiraditya, llvm-commits

Differential Revision: https://reviews.llvm.org/D40969

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321089 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[X86][AVX512] Attempt target shuffle combining to different types instead of early-out
Simon Pilgrim [Tue, 19 Dec 2017 16:54:07 +0000 (16:54 +0000)]
[X86][AVX512] Attempt target shuffle combining to different types instead of early-out

We try to prevent shuffle combining to value types that would stop the folding of masked operations, but by just returning early, we were failing to try different shuffle types.

The TODOs are all still relevant here to improve codegen but we're lacking test examples.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321085 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[CodeGen] Move printing MO_CFIIndex operands to MachineOperand::print
Francis Visoiu Mistrih [Tue, 19 Dec 2017 16:51:52 +0000 (16:51 +0000)]
[CodeGen] Move printing MO_CFIIndex operands to MachineOperand::print

Work towards the unification of MIR and debug output by refactoring the
interfaces.

Before this patch we printed "<call frame instruction>" in the debug
output.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321084 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[CFGVPrinter] Fix -dot-cfg-only
Francis Visoiu Mistrih [Tue, 19 Dec 2017 15:20:18 +0000 (15:20 +0000)]
[CFGVPrinter] Fix -dot-cfg-only

The refactoring in r281640 made -dot-cfg-only ignore the "-only" part.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321079 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[ThinLTO][C-API] Correct api comments
Ben Dunbobbin [Tue, 19 Dec 2017 14:49:33 +0000 (14:49 +0000)]
[ThinLTO][C-API] Correct api comments

Negative values never disabled the pruning - they simply set high values for the pruning interval.

The behaviour now is that negative values set the maximum pruning interval (which appears to have been the intention from the start) see https://reviews.llvm.org/D41231.

I have adjusted the comments to reflect this, removed any inaccurate statements, and corrected any typos I spotted in the English.

Differential Revision: https://reviews.llvm.org/D41279

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321078 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[Support][CachePruning] Disable cache pruning regression fix
Ben Dunbobbin [Tue, 19 Dec 2017 14:42:38 +0000 (14:42 +0000)]
[Support][CachePruning] Disable cache pruning regression fix

borked by: rL284966 (see: https://reviews.llvm.org/D25730).

Previously, Interval was unsigned (see: CachePruning.h), replacing the type with std::chrono::seconds (which is signed) causes a regression in behaviour because the c-api intends negative values to translate to large positive intervals to *effectively* disable the pruning (see comments on: setCachePruningInterval()).

Differential Revision: https://reviews.llvm.org/D41231

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321077 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[X86] Fix uninitialized variable sanitizer warning from rL321074
Simon Pilgrim [Tue, 19 Dec 2017 14:34:35 +0000 (14:34 +0000)]
[X86] Fix uninitialized variable sanitizer warning from rL321074

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321076 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[InlineCost] Skip volatile loads when looking for repeated loads
Haicheng Wu [Tue, 19 Dec 2017 13:42:58 +0000 (13:42 +0000)]
[InlineCost] Skip volatile loads when looking for repeated loads

This is a follow-up fix of r320814.  A test case is also added.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321075 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[X86][SSE] Add cpu feature for aggressive combining to variable shuffles
Simon Pilgrim [Tue, 19 Dec 2017 13:16:43 +0000 (13:16 +0000)]
[X86][SSE] Add cpu feature for aggressive combining to variable shuffles

As mentioned in D38318 and D40865, modern Intel processors prefer to combine multiple shuffles to a variable shuffle mask (PSHUFB/VPERMPS etc.) instead of having multiple stage 'fixed' shuffles which put more pressure on Port 5 (at the expense of extra shuffle mask loads).

This patch provides a FeatureFastVariableShuffle target flag for Haswell+ CPUs that prefers combining 2 or more fixed shuffles to a single variable shuffle (default is 3 shuffles).

The long term aim is to drive more of this from schedule data (probably via the MC) but we're not close to being ready for that yet.

Differential Revision: https://reviews.llvm.org/D41323

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321074 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[ARM] Register the Thumb2SizeReducePass. NFC
David Green [Tue, 19 Dec 2017 12:19:08 +0000 (12:19 +0000)]
[ARM] Register the Thumb2SizeReducePass. NFC

Also adds a simple test case.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321072 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[Support] Add WritableMemoryBuffer class
Pavel Labath [Tue, 19 Dec 2017 12:15:50 +0000 (12:15 +0000)]
[Support] Add WritableMemoryBuffer class

Summary:
The motivation here is LLDB, where we need to fixup relocations in
mmapped files before their contents can be read correctly.  The
MemoryBuffer class does exactly what we need, *except* that it maps the
file in read-only mode.

WritableMemoryBuffer reuses the existing machinery for opening and
mmapping a file. The only difference is in the argument to the
mapped_file_region constructor -- we create a private copy-on-write
mapping, so that we can make changes to the mapped data, but the changes
aren't carried over to the underlying file.

This patch is based on an initial version by Zachary Turner.

Reviewers: mehdi_amini, rnk, rafael, dblaikie, zturner

Subscribers: llvm-commits

Differential Revision: https://reviews.llvm.org/D40291

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321071 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[X86][SSE] Use (V)PHMINPOSUW for vXi8 SMAX/SMIN/UMAX/UMIN horizontal reductions ...
Simon Pilgrim [Tue, 19 Dec 2017 12:02:40 +0000 (12:02 +0000)]
[X86][SSE] Use (V)PHMINPOSUW for vXi8 SMAX/SMIN/UMAX/UMIN horizontal reductions (PR32841)

Extension to D39729 which performed this for vXi16, with the same bit flipping to handle SMAX/SMIN/UMAX cases, vXi8 UMIN horizontal reductions can be performed.

This makes use of the fact that by performing a pair-wise i8 SHUFFLE/UMIN before PHMINPOSUW, we both get the UMIN of each pair but also zero-extend the upper bits ready for v8i16.

Differential Revision: https://reviews.llvm.org/D41294

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321070 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoFix: [YAML] Always double quote UTF-8 characters
Francis Visoiu Mistrih [Tue, 19 Dec 2017 11:59:28 +0000 (11:59 +0000)]
Fix: [YAML] Always double quote UTF-8 characters

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321069 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[YAML] Always double quote UTF-8 characters
Francis Visoiu Mistrih [Tue, 19 Dec 2017 11:51:05 +0000 (11:51 +0000)]
[YAML] Always double quote UTF-8 characters

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321068 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[mips] Handle the emission of microMIPSr6 sll instruction when used as a nop.
Simon Dardis [Tue, 19 Dec 2017 11:16:22 +0000 (11:16 +0000)]
[mips] Handle the emission of microMIPSr6 sll instruction when used as a nop.

This instruction is encoded as zero, so we have handle that case when checking
for unimplemented opcodes when producing the encoding for an instruction.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321066 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[dwarfdump] Lookup needs to be an unsigned long long parameter.
Jonas Devlieghere [Tue, 19 Dec 2017 09:45:26 +0000 (09:45 +0000)]
[dwarfdump] Lookup needs to be an unsigned long long parameter.

Before this patch, dwarfdump's lookup parameter only accepts unsigned.
Given that for many current platforms the load address already exceeds
unsigned (e.g. arm64 w/ 0x100000000), dwarfdump needs an unsigned long
long parameter.

Patch by: Dr. Michael 'Mickey' Lauer <mickey@vanille-media.de>

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321064 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[JumpThreading] Restrict PRE across instructions that don't pass control to successors
Max Kazantsev [Tue, 19 Dec 2017 09:10:21 +0000 (09:10 +0000)]
[JumpThreading] Restrict PRE across instructions that don't pass control to successors

PRE in JumpThreading should not be able to hoist copy of non-speculable loads across
instructions that don't always transfer execution to their successors, otherwise they may
introduce an unsafe load which otherwise would not be executed.

The same problem for GVN was fixed as rL316975.

Differential Revision: https://reviews.llvm.org/D40347

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321063 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[FuzzMutate] Don't crash when mutator is unable to find operation
Igor Laevsky [Tue, 19 Dec 2017 08:52:51 +0000 (08:52 +0000)]
[FuzzMutate] Don't crash when mutator is unable to find operation

Differential Revision: https://reviews.llvm.org/D41009

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321062 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoTreat sret arguments as being dereferenceable in getPointerDereferenceableBytes()
Bjorn Steinbrink [Tue, 19 Dec 2017 08:46:46 +0000 (08:46 +0000)]
Treat sret arguments as being dereferenceable in getPointerDereferenceableBytes()

Reviewers: rnk, hfinkel, efriedma

Subscribers: llvm-commits

Differential Revision: https://reviews.llvm.org/D41355

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321061 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[X86] Don't extend v16i8 non-uniform shifts to v16i32 if we have BWI. Use v16i16...
Craig Topper [Tue, 19 Dec 2017 06:59:10 +0000 (06:59 +0000)]
[X86] Don't extend v16i8 non-uniform shifts to v16i32 if we have BWI. Use v16i16 instead.

BWI supports shifting by word amounts. Even if VLX isn't support we can still widen to v32i16 and extract the lower half. For SKX its preferrable to not use 512-bit vector if we can.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321059 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[X86] Use a specific list of MVTs in combineShiftRightArithmetic instead of iterating...
Craig Topper [Tue, 19 Dec 2017 06:29:00 +0000 (06:29 +0000)]
[X86] Use a specific list of MVTs in combineShiftRightArithmetic instead of iterating over every integer VT and checking their size.

Previously, we were checking for MVTs with sizes betwen 8 and 64 which only includes i8, i16, i32, and i64 today. But I don't think we should assume that and should list the types that are legal for x86. I also don't think we need i64 since type legalization is guaranteed to split those up.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321058 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[X86] Remove unnecessary check for integer VT from combineShiftRightArithmetic.
Craig Topper [Tue, 19 Dec 2017 06:28:58 +0000 (06:28 +0000)]
[X86] Remove unnecessary check for integer VT from combineShiftRightArithmetic.

I doubt there's any way to create a ashr for an FP type.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321057 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[X86] Remove dead code for turning vector shifts by large amounts into a zero vector.
Craig Topper [Tue, 19 Dec 2017 05:21:50 +0000 (05:21 +0000)]
[X86] Remove dead code for turning vector shifts by large amounts into a zero vector.

Pretty sure these are handled by a target independent DAG combine that turns them into undef these days.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321056 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[X86] Use ZERO_EXTEND instead of ANY_EXTEND when extending the shift amount for a...
Craig Topper [Tue, 19 Dec 2017 04:52:04 +0000 (04:52 +0000)]
[X86] Use ZERO_EXTEND instead of ANY_EXTEND when extending the shift amount for a non-uniform shift.

My reading of the SDM says that all bits of the shift amount are used. If the value of the element is larger than the number of bits the result the shift result is zero. So I think we need to zero_extend here to avoid garbage in the upper bits.

In reality we lower any_extend as zero_extend so in most cases it would be hard to hit this.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321055 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoFix APFloat from string conversion for Inf
Serguei Katkov [Tue, 19 Dec 2017 04:27:39 +0000 (04:27 +0000)]
Fix APFloat from string conversion for Inf

The method IEEEFloat::convertFromStringSpecials() does not recognize
the "+Inf" and "-Inf" strings but these strings are printed for
the double Infinities by the IEEEFloat::toString().

This patch adds the "+Inf" and "-Inf" strings to the list of recognized
patterns in IEEEFloat::convertFromStringSpecials().

Re-landing after fix.

Reviewers: sberg, bogner, majnemer, timshen, rnk, skatkov, gottesmm, bkramer, scanon, anna
Reviewed By: anna
Subscribers: mkazantsev, FlameTop, llvm-commits, reames, apilipenko
Differential Revision: https://reviews.llvm.org/D38030

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321054 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[TableGen][GlobalISel] Reset the internal map of RuleMatchers just before the emission
Quentin Colombet [Tue, 19 Dec 2017 02:57:23 +0000 (02:57 +0000)]
[TableGen][GlobalISel] Reset the internal map of RuleMatchers just before the emission

Between the creation of the last InstructionMatcher and the first
emission of the related Rule, we need to clear the internal map of IDs.
We used to do that right after the creation of the main
InstructionMatcher when building the rule and although that worked, this
is fragile because if for some reason some later code decides to create
more InstructionMatcher before the final call to emit, then the IDs
would be completely messed up.

Move that to the beginning of "emit" so that the IDs are guarantee to be
consistent.

NFC.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321053 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoFix Wasm as a follow up to r321035 and the other one
Reid Kleckner [Tue, 19 Dec 2017 01:08:53 +0000 (01:08 +0000)]
Fix Wasm as a follow up to r321035 and the other one

This array is tightly coupled with the .def file. Someone should look
into fixing that.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321050 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoupdate_mir_test_checks: Accept IR as input as well as MIR
Justin Bogner [Tue, 19 Dec 2017 00:49:04 +0000 (00:49 +0000)]
update_mir_test_checks: Accept IR as input as well as MIR

We need to handle IR for tests that want to do lowering (or just
-stop-after with IR as input). I've run this on one AArch64 test to
demonstrate what it looks like.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321048 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[llvm-objcopy] Add option to add a progbits section from a file
Jake Ehrlich [Tue, 19 Dec 2017 00:47:30 +0000 (00:47 +0000)]
[llvm-objcopy] Add option to add a progbits section from a file

This change adds support for adding progbits sections with contents from a file

Differential Revision: https://reviews.llvm.org/D41212

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321047 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoTargetLoweringBase: Followup to r321035
Matthias Braun [Tue, 19 Dec 2017 00:43:00 +0000 (00:43 +0000)]
TargetLoweringBase: Followup to r321035

I missed some prefixes and the fact that on AArch64 we use "bzero"
instead of "__bzero" as on X86 when doing my refactoring in r321035.

Improve tests for bzero.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321046 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoTargetLowering: Fix InitLibcallCallingConvs() overriding things set in InitLibcalls()
Matthias Braun [Tue, 19 Dec 2017 00:20:33 +0000 (00:20 +0000)]
TargetLowering: Fix InitLibcallCallingConvs() overriding things set in InitLibcalls()

I missed the fact that the later called InitLibcallCallingConvs()
overrides some things set in InitLibcalls() when I did the refactoring
in r321036.

Fix by merging InitLibcallCallingConvs() into InitLibcalls() and doing
the initialization earlier.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321045 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoTargetLowering: Fix off-by-one error
Matthias Braun [Tue, 19 Dec 2017 00:05:10 +0000 (00:05 +0000)]
TargetLowering: Fix off-by-one error

This problem was present for a while, but somehow asan didn't catch
it before the refactoring in r321036.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321043 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[llvm-readobj] Dump wasm init functions
Sam Clegg [Tue, 19 Dec 2017 00:04:41 +0000 (00:04 +0000)]
[llvm-readobj] Dump wasm init functions

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321042 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoTargetLoweringBase: Remove unnecessary watchos exception; NFC
Matthias Braun [Mon, 18 Dec 2017 23:33:28 +0000 (23:33 +0000)]
TargetLoweringBase: Remove unnecessary watchos exception; NFC

WatchOS isn't report as iOS (as opposed to tvos) so the exception I
added in my last commit wasn't necessary after all.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321041 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoupdate_mir_test_checks: Add "mir" to some states and regex names
Justin Bogner [Mon, 18 Dec 2017 23:31:55 +0000 (23:31 +0000)]
update_mir_test_checks: Add "mir" to some states and regex names

For tests that do lowering we need to support IR as input, so here we
clarify some names to avoid ambiguity in upcoming commits.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321039 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[X86] Don't use NOPL when the assembler is passed an empty CPU string.
Craig Topper [Mon, 18 Dec 2017 23:31:43 +0000 (23:31 +0000)]
[X86] Don't use NOPL when the assembler is passed an empty CPU string.

This recommits the change from r321026. I have a fix for the lld test now.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321038 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoLiveStacks: Rename LiveStack.{h|cpp} to LiveStacks.{h|cpp}; NFC
Matthias Braun [Mon, 18 Dec 2017 23:19:44 +0000 (23:19 +0000)]
LiveStacks: Rename LiveStack.{h|cpp} to LiveStacks.{h|cpp}; NFC

Filenames should match the name of the class they contain.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321037 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoX86/AArch64/ARM: Factor out common sincos_stret logic; NFCI
Matthias Braun [Mon, 18 Dec 2017 23:19:42 +0000 (23:19 +0000)]
X86/AArch64/ARM: Factor out common sincos_stret logic; NFCI

Note:
- X86ISelLowering: setLibcallName(SINCOS) was superfluous as
  InitLibcalls() already does it.
- ARMISelLowering: Setting libcallnames for sincos/sincosf seemed
  superfluous as in the darwin case it wouldn't be used while for all
  other cases InitLibcalls already does it.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321036 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoAArch64/X86: Factor out common bzero logic; NFC
Matthias Braun [Mon, 18 Dec 2017 23:14:28 +0000 (23:14 +0000)]
AArch64/X86: Factor out common bzero logic; NFC

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321035 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[Hexagon] Cache loads to select to avoid traversing mutating DAG
Krzysztof Parzyszek [Mon, 18 Dec 2017 23:13:27 +0000 (23:13 +0000)]
[Hexagon] Cache loads to select to avoid traversing mutating DAG

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321034 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoRevert part of r321026 "[X86] Don't use NOPL when the assembler is passed an empty...
Craig Topper [Mon, 18 Dec 2017 22:20:10 +0000 (22:20 +0000)]
Revert part of r321026 "[X86] Don't use NOPL when the assembler is passed an empty CPU string." while I investigate how to fix an lld test failure.

Looks like lld also needs to pass a -mcpu in some of its tests

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321033 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[AArch64] Expand test coverage of vector element shuffling to Exynos
Evandro Menezes [Mon, 18 Dec 2017 22:17:39 +0000 (22:17 +0000)]
[AArch64] Expand test coverage of vector element shuffling to Exynos

Make sure that all test cases are run for Exynos as well.  Otherwise, NFC.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321032 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[TableGen][GlobalISel] Make the arguments of the Instruction and Operand Matchers...
Quentin Colombet [Mon, 18 Dec 2017 22:12:13 +0000 (22:12 +0000)]
[TableGen][GlobalISel] Make the arguments of the Instruction and Operand Matchers consistent

Move InsnVarID and OpIdx at the beginning of the list of arguments
for all the constructors of the OperandMatcher subclasses.
This matches what we do for the InstructionMatcher.

NFC.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321031 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoFix buffer overrun in WindowsResourceCOFFWriter::writeSymbolTable()
Bob Haarman [Mon, 18 Dec 2017 22:10:14 +0000 (22:10 +0000)]
Fix buffer overrun in WindowsResourceCOFFWriter::writeSymbolTable()

Summary:
We were using sprintf(..., "$R06X", <some uint32_t>) to create strings
that are expected to be exactly length 8, but this results in longer
strings if the uint32_t is greater than 0xffffff. This change modifies
the behavior as follows:

 - Uses the loop counter instead of the data offset. This gives us
   sequential symbol names, avoiding collisions as much as possible.

 - Masks the value to 0xffffff to avoid generating names longer than 8
   bytes.

 - Uses formatv instead of sprintf.

Fixes PR35581.

Reviewers: ruiu, zturner

Reviewed By: ruiu

Subscribers: hiraditya, llvm-commits

Differential Revision: https://reviews.llvm.org/D41270

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321030 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoAdd test for .req directive starting with 'p'
Reid Kleckner [Mon, 18 Dec 2017 22:01:18 +0000 (22:01 +0000)]
Add test for .req directive starting with 'p'

Reduced test case from libjpeg_turbo.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321029 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[MachineOutliner][NFC] Gardening: use std::any_of instead of bool + loop
Jessica Paquette [Mon, 18 Dec 2017 21:44:52 +0000 (21:44 +0000)]
[MachineOutliner][NFC] Gardening: use std::any_of instead of bool + loop

River Riddle suggested to use std::any_of instead of the bool + loop thing on
r320229. This commit does that.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321028 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[X86] Don't use NOPL when the assembler is passed an empty CPU string. Update tests...
Craig Topper [Mon, 18 Dec 2017 21:37:27 +0000 (21:37 +0000)]
[X86] Don't use NOPL when the assembler is passed an empty CPU string. Update tests to force a CPU with NOPL

Empty string should be equivalent to "generic" which doesn't allow NOPL. Force tests to use specificy 'pentiumpro' to guarantee NOPL.

Fixes PR35686

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321026 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[TableGen][GlobalISel] Refactor optimizeRules related bit to allow code reuse
Quentin Colombet [Mon, 18 Dec 2017 21:25:53 +0000 (21:25 +0000)]
[TableGen][GlobalISel] Refactor optimizeRules related bit to allow code reuse

In theory, reapplying optimizeRules on each group matchers should give
us a second nesting level on the matching table. In practice, we need
more work to make that happen because all the predicates are actually
not directly available through the predicate matchers list.

NFC.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321025 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoRevert "[AArch64][SVE] Asm" changes, they broke libjpeg_turbo
Reid Kleckner [Mon, 18 Dec 2017 20:58:25 +0000 (20:58 +0000)]
Revert "[AArch64][SVE] Asm" changes, they broke libjpeg_turbo

This reverts changes r320992, r320986, r320973, and r320970.

r320970 by itself breaks the test case, and the rest depend on it.

Test case will land soon.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321024 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[Analysis] Generate more precise TBAA tags when one access encloses the other
Ivan A. Kosarev [Mon, 18 Dec 2017 20:05:20 +0000 (20:05 +0000)]
[Analysis] Generate more precise TBAA tags when one access encloses the other

There are cases when two tags with different base types denote
accesses to the same direct or indirect member of a structure
type. Currently, merging of such tags results in a tag that
represents an access to an object that has the type of that
member. This patch changes this so that if one of the accesses
encloses the other, then the generic tag is the one of the
enclosed access.

Differential Revision: https://reviews.llvm.org/D39557

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321019 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[PGO] Fix handling of cold entry count for instrumented PGO
Teresa Johnson [Mon, 18 Dec 2017 20:02:43 +0000 (20:02 +0000)]
[PGO] Fix handling of cold entry count for instrumented PGO

Summary:
In r277849, getEntryCount was changed to return None when the entry
count was 0, specifically for SamplePGO where it means no samples were
recorded. However, for instrumentation PGO a 0 entry count should be
returned directly, since it does mean that the function was completely
cold. Otherwise we end up treating these functions conservatively
in isFunctionEntryCold() and isColdBB().

Instead, for SamplePGO use -1 when there are no samples, and change
getEntryCount to return None when the value is -1.

Reviewers: danielcdh, davidxl

Subscribers: llvm-commits

Differential Revision: https://reviews.llvm.org/D41307

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321018 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[TableGen][GlobalISel] Optimize MatchTable for faster instruction selection
Quentin Colombet [Mon, 18 Dec 2017 19:47:41 +0000 (19:47 +0000)]
[TableGen][GlobalISel] Optimize MatchTable for faster instruction selection

*** Context ***

Prior to this patchw, the table generated for matching instruction was
straight forward but highly inefficient.

Basically, each pattern generates its own set of self contained checks
and actions.
E.g., TableGen generated:
// First pattern
CheckNumOperand 3
CheckOpcode G_ADD
...
Build ADDrr
// Second pattern
CheckNumOperand 3
CheckOpcode G_ADD
...
Build ADDri
// Third pattern
CheckNumOperand 3
CheckOpcode G_SUB
...
Build SUBrr

*** Problem ***

Because of that generation, a *lot* of check were redundant between each
pattern and were checked every single time until we reach the pattern
that matches.
E.g., Taking the previous table, let say we are matching a G_SUB, that
means we were going to check all the rules for G_ADD before looking at
the G_SUB rule. In particular we are going to do:
check 3 operands; PASS
check G_ADD; FAIL
; Next rule
check 3 operands; PASS (but we already knew that!)
check G_ADD; FAIL (well it is still not true)
; Next rule
check 3 operands; PASS (really!!)
check G_SUB; PASS (at last :P)

*** Proposed Solution ***

This patch introduces a concept of group of rules (GroupMatcher) that
share some predicates and only get checked once for the whole group.

This patch only creates groups with one nesting level. Conceptually
there is nothing preventing us for having deeper nest level. However,
the current implementation is not smart enough to share the recording
(aka capturing) of values. That limits its ability to do more sharing.

For the given example the current patch will generate:
// First group
CheckOpcode G_ADD

 // First pattern
 CheckNumOperand 3
 ...
 Build ADDrr
 // Second pattern
 CheckNumOperand 3
 ...
 Build ADDri

// Second group
CheckOpcode G_SUB

 // Third pattern
 CheckNumOperand 3
 ...
 Build SUBrr

But if we allowed several nesting level, it could create a sub group
for the checknumoperand 3.
(We would need to call optimizeRules on the rules within a group.)

*** Result ***

With only one level of nesting, the instruction selection pass is up
to 4x faster. For instance, one instruction now takes 500 checks,
instead of 24k! With more nesting we could get in the tens I believe.

Differential Revision: https://reviews.llvm.org/D39034

rdar://problem/34670699

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321017 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoFix more inconsistent line endings. NFC.
Dimitry Andric [Mon, 18 Dec 2017 19:46:56 +0000 (19:46 +0000)]
Fix more inconsistent line endings. NFC.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321016 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[X86] Minor formatting fix to getHostCPUFeatures. NFC
Craig Topper [Mon, 18 Dec 2017 19:40:11 +0000 (19:40 +0000)]
[X86] Minor formatting fix to getHostCPUFeatures. NFC

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321015 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[MachineOutliner] Recommit r320229
Jessica Paquette [Mon, 18 Dec 2017 19:33:21 +0000 (19:33 +0000)]
[MachineOutliner] Recommit r320229

LR was undefined entering outlined functions that contain calls. This made the
machine verifier unhappy when expensive checks were enabled. This fixes that.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321014 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[PPC] Also disable the pre-emit version of reg+reg to reg+imm transformation.
Benjamin Kramer [Mon, 18 Dec 2017 19:21:56 +0000 (19:21 +0000)]
[PPC] Also disable the pre-emit version of reg+reg to reg+imm transformation.

This has the same issue as the early pass disabled in r321010.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321013 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[cmake] Update experimental target error message
Don Hinton [Mon, 18 Dec 2017 19:15:15 +0000 (19:15 +0000)]
[cmake] Update experimental target error message

Summary:
Update this error message indicate this test only ensures experimental
targets were passed via LLVM_EXPERIMENTAL_TARGETS_TO_BUILD.

Originally, this test validated all targets, but in r184923, it was moved
after the LLVMBUILDTOOL test, which also validates all targets, making
that part of the test redundant.

Differential Revision: https://reviews.llvm.org/D41273

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321012 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoRecommit "[DWARFv5] Dump an MD5 checksum in the line-table header."
Paul Robinson [Mon, 18 Dec 2017 19:08:35 +0000 (19:08 +0000)]
Recommit "[DWARFv5] Dump an MD5 checksum in the line-table header."
Adds missing support for DW_FORM_data16.

Update of r320852/r320886, fixing the unittest again, this time use a
raw char string for the test data.

Differential Revision: https://reviews.llvm.org/D41090

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321011 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[PPC] Disable reg+reg to reg+imm transformation.
Benjamin Kramer [Mon, 18 Dec 2017 18:56:57 +0000 (18:56 +0000)]
[PPC] Disable reg+reg to reg+imm transformation.

It creates invalid instructions. PR35688.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321010 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoFix inconsistent line endings in HexagonVectorLoopCarriedReuse.cpp. NFC.
Dimitry Andric [Mon, 18 Dec 2017 18:56:00 +0000 (18:56 +0000)]
Fix inconsistent line endings in HexagonVectorLoopCarriedReuse.cpp. NFC.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321009 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[Hexagon] Higher versions of HVX imply presence of lower versions
Krzysztof Parzyszek [Mon, 18 Dec 2017 18:51:57 +0000 (18:51 +0000)]
[Hexagon] Higher versions of HVX imply presence of lower versions

The code in Hexagon_MC::completeHVXFeatures wasn't setting all HVX-
related features correctly.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321008 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[IR] Support the new TBAA metadata format in IR verifier
Ivan A. Kosarev [Mon, 18 Dec 2017 18:46:44 +0000 (18:46 +0000)]
[IR] Support the new TBAA metadata format in IR verifier

Differential Revision: https://reviews.llvm.org/D40438

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321007 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoFix inconsistent line endings in ARCDisassembler.cpp. NFC.
Dimitry Andric [Mon, 18 Dec 2017 18:45:37 +0000 (18:45 +0000)]
Fix inconsistent line endings in ARCDisassembler.cpp. NFC.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321006 91177308-0d34-0410-b5e6-96231b3b80d8

6 years agoi[Hexagon] ANY_EXTEND_VECTOR_INREG should be Custom, not Legal in r321004
Krzysztof Parzyszek [Mon, 18 Dec 2017 18:41:52 +0000 (18:41 +0000)]
i[Hexagon] ANY_EXTEND_VECTOR_INREG should be Custom, not Legal in r321004

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321005 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[Hexagon] Generate HVX code for vector sign-, zero- and any-extends
Krzysztof Parzyszek [Mon, 18 Dec 2017 18:32:27 +0000 (18:32 +0000)]
[Hexagon] Generate HVX code for vector sign-, zero- and any-extends

Implement any-extend as zero-extend.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321004 91177308-0d34-0410-b5e6-96231b3b80d8

6 years ago[X86] Regenerate test to improve codegen testing for D41350
Simon Pilgrim [Mon, 18 Dec 2017 18:31:02 +0000 (18:31 +0000)]
[X86] Regenerate test to improve codegen testing for D41350

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@321003 91177308-0d34-0410-b5e6-96231b3b80d8