Commit Graph

37539 Commits

Author SHA1 Message Date
Cullen Rhodes d53651fa9f [AArch64][AsmParser] Remove SVE and SVE2 from ARMTargetParser
Summary:
Patch removes SVE and SVE2 features from ARMTargetParser as these
features are not supported on ARM.

Reviewed By: rengolin

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


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@367292 91177308-0d34-0410-b5e6-96231b3b80d8
2019-07-30 07:47:48 +00:00
Roman Lebedev f0644872bf Revert "[DivRemPairs] Handling for expanded-form rem - recomposition (PR42673)"
test-suite/MultiSource/Benchmarks/DOE-ProxyApps-C/miniGMG broke:

Only PHI nodes may reference their own value!
  %sub33 = srem i32 %sub33, %ranks_in_i

This reverts commit r367288.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@367289 91177308-0d34-0410-b5e6-96231b3b80d8
2019-07-30 07:44:58 +00:00
Roman Lebedev 8a2defdd81 [DivRemPairs] Handling for expanded-form rem - recomposition (PR42673)
Summary:
While `-div-rem-pairs` pass can decompose rem in div+rem pair when div-rem pair
is unsupported by target, nothing performs the opposite fold.
We can't do that in InstCombine or DAGCombine since neither of those has access to TTI.
So it makes most sense to teach `-div-rem-pairs` about it.

If we matched rem in expanded form, we know we will be able to place div-rem pair
next to each other so we won't regress the situation.
Also, we shouldn't decompose rem if we matched already-decomposed form.
This is surprisingly straight-forward otherwise.

https://bugs.llvm.org/show_bug.cgi?id=42673

Reviewers: spatel, RKSimon, efriedma, ZaMaZaN4iK, bogner

Reviewed By: bogner

Subscribers: bogner, hiraditya, llvm-commits

Tags: #llvm

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@367288 91177308-0d34-0410-b5e6-96231b3b80d8
2019-07-30 07:10:00 +00:00
Roman Lebedev 00170d38ee [APInt] Introduce clearLowBits()
Summary: Equivalent to `x & -2^K`.

Reviewers: RKSimon, craig.topper

Reviewed By: RKSimon, craig.topper

Subscribers: dexonsmith, llvm-commits

Tags: #llvm

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@367287 91177308-0d34-0410-b5e6-96231b3b80d8
2019-07-30 07:09:41 +00:00
Michael Pozulp 3917015010 Revert "[llvm-objdump] Add warning messages if disassembly + source for problematic inputs"
This reverts r367284 (git commit b1cbe51bdf44098c74f5c74b7bcd8c041a7c6772).
My changes to LLVMSymbolizer caused a test to fail:
http://lab.llvm.org:8011/builders/clang-ppc64be-linux-lnt/builds/29488

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@367286 91177308-0d34-0410-b5e6-96231b3b80d8
2019-07-30 07:05:27 +00:00
Michael Pozulp 3401779594 [llvm-objdump] Add warning messages if disassembly + source for problematic inputs
Summary: Addresses https://bugs.llvm.org/show_bug.cgi?id=41905

Reviewers: jhenderson, rupprecht, grimar

Reviewed By: jhenderson, grimar

Subscribers: hiraditya, llvm-commits

Tags: #llvm

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@367284 91177308-0d34-0410-b5e6-96231b3b80d8
2019-07-30 05:28:26 +00:00
JF Bastien aa02c88d21 [NFC] use C++11 in AlignOf.h, remove AlignedCharArray
I removed all uses of AlignedCharArray since the minimum MSVC version can handle
alignas on char arrays correctly. We can therefore remove AlignedCharArray.

This patch also updates AlignedCharArrayUnion to use C++11.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@367282 91177308-0d34-0410-b5e6-96231b3b80d8
2019-07-30 04:03:33 +00:00
Alex Lorenz 412fa1a534 [FileCollector] Add a VFS that records FS accesses using the FileCollector
This patch adds a VFS that can be overlaid on top of another VFS
to record file system accesses using the FileCollector.
This can help to gather files that are needed for reproducers.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@367278 91177308-0d34-0410-b5e6-96231b3b80d8
2019-07-29 23:38:30 +00:00
JF Bastien 6672e7aadb [NFC] avoid AlignedCharArray in LLVM
As discussed in D65249, don't use AlignedCharArray or std::aligned_storage. Just use alignas(X) char Buf[Size];. This will allow me to remove AlignedCharArray entirely, and works on the current minimum version of Visual Studio.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@367277 91177308-0d34-0410-b5e6-96231b3b80d8
2019-07-29 23:37:48 +00:00
Vedant Kumar 5ac26356b3 [IR] Consolidate fixed metadata kind definitions (NFC)
Put the list of fixed metadata kinds in one place.

Testing: check-llvm with+without LLVM_ENABLE_MODULES=On

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@367257 91177308-0d34-0410-b5e6-96231b3b80d8
2019-07-29 20:24:20 +00:00
Jay Foad 25eb624f36 [DivergenceAnalysis] Add methods for querying divergence at use
Summary:
The existing isDivergent(Value) methods query whether a value is
divergent at its definition. However even if a value is uniform at its
definition, a use of it in another basic block can be divergent because
of divergent control flow between the def and the use.

This patch adds new isDivergent(Use) methods to DivergenceAnalysis,
LegacyDivergenceAnalysis and GPUDivergenceAnalysis.

This might allow D63953 or other similar workarounds to be removed.

Reviewers: alex-t, nhaehnle, arsenm, rtaylor, rampitec, simoll, jingyue

Reviewed By: nhaehnle

Subscribers: jfb, jvesely, wdng, hiraditya, llvm-commits

Tags: #llvm

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@367218 91177308-0d34-0410-b5e6-96231b3b80d8
2019-07-29 10:22:09 +00:00
Hideto Ueno 920f10da54 [Attributor] Deduce "align" attribute
Summary:
Deduce "align" attribute in attributor.

Reviewers: jdoerfert, sstefan1

Reviewed By: jdoerfert

Subscribers: hiraditya, llvm-commits

Tags: #llvm

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@367187 91177308-0d34-0410-b5e6-96231b3b80d8
2019-07-28 07:04:01 +00:00
Hideto Ueno 204c769d62 [FunctionAttrs] Annotate "willreturn" for intrinsics
Summary:
In D62801, new function attribute `willreturn` was introduced. In short, a function with `willreturn` is guaranteed to come back to the call site(more precise definition is in LangRef).

In this patch, willreturn is annotated for LLVM intrinsics.

Reviewers: jdoerfert

Reviewed By: jdoerfert

Subscribers: jvesely, nhaehnle, sstefan1, llvm-commits

Tags: #llvm

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@367184 91177308-0d34-0410-b5e6-96231b3b80d8
2019-07-28 06:09:56 +00:00
Francis Visoiu Mistrih 02582ef3db Reland: [Remarks] Support parsing remark metadata in the YAML remark parser
This adds support to the yaml remark parser to be able to parse remarks
directly from the metadata.

This supports parsing separate metadata and following the external file
with the associated metadata, and also a standalone file containing
metadata + remarks all together.

Original llvm-svn: 367148
Revert llvm-svn: 367151

This has a fix for gcc builds.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@367155 91177308-0d34-0410-b5e6-96231b3b80d8
2019-07-26 21:02:02 +00:00
Francis Visoiu Mistrih a0eba5f776 Revert "[Remarks] Support parsing remark metadata in the YAML remark parser"
This reverts r367148.

Seems to fail on
http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-fuzzer/builds/27768.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@367151 91177308-0d34-0410-b5e6-96231b3b80d8
2019-07-26 20:54:44 +00:00
Francis Visoiu Mistrih aae2cef176 [Remarks] Support parsing remark metadata in the YAML remark parser
This adds support to the yaml remark parser to be able to parse remarks
directly from the metadata.

This supports parsing separate metadata and following the external file
with the associated metadata, and also a standalone file containing
metadata + remarks all together.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@367148 91177308-0d34-0410-b5e6-96231b3b80d8
2019-07-26 20:11:53 +00:00
Alina Sbirlea 0038d0f13e [MemorySSA & LoopPassManager] Analysis can be preserved only when all loop passes preserve it.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@367143 91177308-0d34-0410-b5e6-96231b3b80d8
2019-07-26 18:57:26 +00:00
Cullen Rhodes 0131e450a6 [AArch64][SVE2] Rename bitperm feature to sve2-bitperm
Summary:
The bitperm feature flag is now prefixed with SVE2, as it is for all other SVE2
extensions

Patch by Maciej Gabka.

Reviewers: sdesmalen, rovka, chill, SjoerdMeijer, rengolin

Reviewed By: SjoerdMeijer, rengolin

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


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@367124 91177308-0d34-0410-b5e6-96231b3b80d8
2019-07-26 15:57:50 +00:00
Carl Ritson 64e952bdc5 [AMDGPU] Add llvm.amdgcn.softwqm intrinsic
Add llvm.amdgcn.softwqm intrinsic which behaves like llvm.amdgcn.wqm
only if there is other WQM computation in the shader.

Reviewers: nhaehnle, tpr

Reviewed By: nhaehnle

Subscribers: arsenm, kzhuravl, jvesely, wdng, yaxunl, dstuttard, t-tye, llvm-commits

Tags: #llvm

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@367097 91177308-0d34-0410-b5e6-96231b3b80d8
2019-07-26 09:54:12 +00:00
Serguei Katkov fe595b3752 [Loop Utils] Extend the scope of addStringMetadataToLoop.
To avoid duplicates in loop metadata, if the string to add is
already there, just update the value.

Reviewers: reames, Ashutosh
Reviewed By: reames
Subscribers: hiraditya, llvm-commits
Differential Revision: https://reviews.llvm.org/D65265


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@367087 91177308-0d34-0410-b5e6-96231b3b80d8
2019-07-26 07:04:34 +00:00
Matt Arsenault ec343b53aa GlobalISel: Fold out unmerge to scalars from concat_vector
Removes illegal intermediate vectors if an operation was lowering to
concat_vectors, and the next operation is scalarized.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@367081 91177308-0d34-0410-b5e6-96231b3b80d8
2019-07-26 02:22:23 +00:00
Francis Visoiu Mistrih 9466b7a1ed Reland: [Remarks] Add support for serializing metadata for every remark streamer
This allows every serializer format to implement metaSerializer() and
return the corresponding meta serializer.

Original llvm-svn: 366946
Reverted llvm-svn: 367004

This fixes the unit tests on Windows bots.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@367078 91177308-0d34-0410-b5e6-96231b3b80d8
2019-07-26 01:33:30 +00:00
Leonard Chan 850a3e8202 Reland the "[NewPM] Port Sancov" patch from rL365838. No functional
changes were made to the patch since then.

--------

[NewPM] Port Sancov

This patch contains a port of SanitizerCoverage to the new pass manager. This one's a bit hefty.

Changes:

- Split SanitizerCoverageModule into 2 SanitizerCoverage for passing over
  functions and ModuleSanitizerCoverage for passing over modules.
- ModuleSanitizerCoverage exists for adding 2 module level calls to initialization
  functions but only if there's a function that was instrumented by sancov.
- Added legacy and new PM wrapper classes that own instances of the 2 new classes.
- Update llvm tests and add clang tests.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@367053 91177308-0d34-0410-b5e6-96231b3b80d8
2019-07-25 20:53:15 +00:00
Whitney Tsang c191a7aed3 [DDG] DirectedGraph as a base class for various dependence graphs such
as DDG and PDG.
Summary:
This is an implementation of a directed graph base class with explicit
representation of both nodes and edges. This implementation makes the
edges explicit because we expect to assign various attributes (such as
dependence type, distribution interference weight, etc) to the edges in
the derived classes such as DDG and DIG. The DirectedGraph consists of a
list of DGNode's. Each node consists of a (possibly empty) list of
outgoing edges to other nodes in the graph. A DGEdge contains a
reference to a single target node. Note that nodes do not know about
their incoming edges so the DirectedGraph class provides a function to
find all incoming edges to a given node.

This is the first patch in a series of patches that we are planning to
contribute upstream in order to implement Data Dependence Graph and
Program Dependence Graph.

More information about the proposed design can be found here:
https://ibm.ent.box.com/v/directed-graph-and-ddg
Authored By: bmahjour
Reviewer: Meinersbur, myhsum hfinkel, fhahn, jdoerfert, kbarton
Reviewed By: Meinersbur
Subscribers: mgorny, wuzish, jsji, lebedev.ri, dexonsmith, kristina,
llvm-commits, Whitney, etiotto
Tag: LLVM
Differential Revision: https://reviews.llvm.org/D64088

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@367043 91177308-0d34-0410-b5e6-96231b3b80d8
2019-07-25 18:23:22 +00:00
Whitney Tsang a5ece4ca13 [LOOPINFO] Introduce the loop guard API.
Summary:
This is the first patch for the loop guard. We introduced
getLoopGuardBranch() and isGuarded().
This currently only works on simplified loop, as it requires a preheader
and a latch to identify the guard.
It will work on loops of the form:
/// GuardBB:
///   br cond1, Preheader, ExitSucc <== GuardBranch
/// Preheader:
///   br Header
/// Header:
///  ...
///   br Latch
/// Latch:
///   br cond2, Header, ExitBlock
/// ExitBlock:
///   br ExitSucc
/// ExitSucc:
Prior discussions leading upto the decision to introduce the loop guard
API: http://lists.llvm.org/pipermail/llvm-dev/2019-May/132607.html
Reviewer: reames, kbarton, hfinkel, jdoerfert, Meinersbur, dmgreen
Reviewed By: reames
Subscribers: wuzish, hiraditya, jsji, llvm-commits, bmahjour, etiotto
Tag: LLVM
Differential Revision: https://reviews.llvm.org/D63885

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@367033 91177308-0d34-0410-b5e6-96231b3b80d8
2019-07-25 16:13:18 +00:00
JF Bastien c0702618c0 Allow prefetching from non-zero address spaces
Summary:
This is useful for targets which have prefetch instructions for non-default address spaces.

<rdar://problem/42662136>

Subscribers: nemanjai, javed.absar, hiraditya, kbarton, jkorous, dexonsmith, cfe-commits, llvm-commits, RKSimon, hfinkel, t.p.northover, craig.topper, anemet

Tags: #clang, #llvm

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@367032 91177308-0d34-0410-b5e6-96231b3b80d8
2019-07-25 16:11:57 +00:00
Florian Hahn 242c98614b [PredicateInfo] Use SmallVector instead of SmallPtrSet.
We do not need the SmallPtrSet to avoid adding duplicates to
OpsToRename, because we already keep a ValueInfo mapping. If we see an
op for the first time, Infos will be empty and we can also add it to
OpsToRename.

We process operands by visiting BBs depth-first and then iterate over
all instructions & users, so the order should be deterministic.
Therefore we can skip one round of sorting, which we purely needed for
guaranteeing a deterministic order when iterating over the SmallPtrSet.

Reviewers: efriedma, davide

Reviewed By: efriedma

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@367028 91177308-0d34-0410-b5e6-96231b3b80d8
2019-07-25 15:35:10 +00:00
Roman Lebedev 251c275495 [IR][PatternMatch] Introduce m_NegatedPower2() matcher
Summary:
It is a good idea to do as much matching inside of `match()` as possible.
If some checking is done afterwards, and we don't fold because of it,
chances are we may have missed some commutative pattern.

Reviewers: spatel, craig.topper, RKSimon

Reviewed By: spatel, RKSimon

Subscribers: llvm-commits

Tags: #llvm

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@367017 91177308-0d34-0410-b5e6-96231b3b80d8
2019-07-25 13:34:24 +00:00
Roman Lebedev 9e43193a30 [IR][PatternMatch] introduce m_Unless() matcher
Summary:
I don't think it already exists? I don't see it at least.
It is important to have it because else we'll do some checks after `match()`,
and that may result in missed folds in commutative nodes.

Reviewers: spatel, craig.topper, RKSimon, majnemer

Reviewed By: spatel

Subscribers: llvm-commits

Tags: #llvm

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@367016 91177308-0d34-0410-b5e6-96231b3b80d8
2019-07-25 13:34:14 +00:00
Pablo Barrio 8049566cde [ARM][AArch64] Support for Cortex-A65 & A65AE, Neoverse E1 & N1
Summary:
Add support for Cortex-A65, Cortex-A65AE, Neoverse E1 and Neoverse N1.
Neoverse E1 and Cortex-A65(&AE) only implement the AArch64 state of the
Arm architecture. Neoverse N1 implements both AArch32 and AArch64.

Cortex-A65:
https://developer.arm.com/ip-products/processors/cortex-a/cortex-a65

Cortex-A65AE:
https://developer.arm.com/ip-products/processors/cortex-a/cortex-a65ae

Neoverse E1:
https://developer.arm.com/ip-products/processors/neoverse/neoverse-e1

Neoverse N1:
https://developer.arm.com/ip-products/processors/neoverse/neoverse-n1

Patch by Diogo Sampaio and Pablo Barrio

Reviewers: samparker, LukeCheeseman, sbaranga, ostannard

Reviewed By: ostannard

Subscribers: ostannard, javed.absar, kristof.beyls, hiraditya, llvm-commits

Tags: #llvm

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@367007 91177308-0d34-0410-b5e6-96231b3b80d8
2019-07-25 10:59:45 +00:00
Simon Pilgrim 60dd9229ec Revert rL366946 : [Remarks] Add support for serializing metadata for every remark streamer
This allows every serializer format to implement metaSerializer() and
return the corresponding meta serializer.
........
Fix windows build bots
http://lab.llvm.org:8011/builders/llvm-clang-x86_64-win-fast
http://lab.llvm.org:8011/builders/llvm-clang-lld-x86_64-scei-ps4-windows10pro-fast
http://lab.llvm.org:8011/builders/llvm-clang-x86_64-expensive-checks-win

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@367004 91177308-0d34-0410-b5e6-96231b3b80d8
2019-07-25 10:20:39 +00:00
Fangrui Song 0e4182e4f1 [MC] Delete unused MCInstPrinter::markup overload and getPrintHexStyle
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@367000 91177308-0d34-0410-b5e6-96231b3b80d8
2019-07-25 09:54:12 +00:00
Seiya Nuta 8a53c05b3f [MC] Add MCInstrAnalysis::evaluateMemoryOperandAddress
Summary:
Add a new method which tries to compute the target address referenced by an operand.

This patch supports x86_64 RIP-relative addressing for now.

It is necessary to print referenced symbol names in llvm-objdump.

Reviewers: andreadb, MaskRay, grosbach, jgalenson, craig.topper

Reviewed By: MaskRay, craig.topper

Subscribers: bcain, rupprecht, jhenderson, hiraditya, llvm-commits

Tags: #llvm

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@366987 91177308-0d34-0410-b5e6-96231b3b80d8
2019-07-25 06:57:09 +00:00
Shoaib Meenai 15471a7d11 [Object] Add public MaxSectionAlignment to MachOUniversal
Change MAXSECTALIGN to a public MaxSectionAlignment in MachOUniversal.
Will be used in a follow-up.

Patch by Anusha Basana <anusha.basana@gmail.com>

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@366969 91177308-0d34-0410-b5e6-96231b3b80d8
2019-07-25 00:29:13 +00:00
Jonas Devlieghere 34a4dfe92a [FileCollector] Change coding style from LLDB to LLVM (NFC)
This patch changes the coding style of the FileCollector from the LLDB
to the LLVM coding style. Alex recently lifted it into LLVM and I
volunteered to do the conversion.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@366966 91177308-0d34-0410-b5e6-96231b3b80d8
2019-07-25 00:17:39 +00:00
Francis Visoiu Mistrih a232c74dcf [Remarks][NFC] Rename remarks::Parser to remarks::RemarkParser
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@366965 91177308-0d34-0410-b5e6-96231b3b80d8
2019-07-25 00:16:56 +00:00
Philip Reames 30a4a88cc4 Define some basic terminology around loops in our documentation
I've noticed a lot of confusion around this area recently with key terms being misused in a number of threads. To help reign that in, let's go ahead and document the current terminology and meaning thereof.

My hope is to grow this over time into a broader discussion of canonical loop forms - yes, there are more than one ... many more than one - but for the moment, simply having the key terminology is a good stopping place.

Note: I am landing this *without* an LGTM.  All feedback so far has been positive, and trying to apply all of the suggested changes/extensions would cause the review to never end.  Instead, I decided to land it with the obvious fixes made based on reviewer comments, then iterate from there.

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



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@366960 91177308-0d34-0410-b5e6-96231b3b80d8
2019-07-24 23:24:13 +00:00
Alex Lorenz 27bb8977c3 Fix unittest build issue in r366956
I marked the fields as private, but they're needed by the unittest.
I'll have to fix that up separarely in a follow-up.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@366958 91177308-0d34-0410-b5e6-96231b3b80d8
2019-07-24 23:10:35 +00:00
Alex Lorenz 38ebc7caa2 [Support] move FileCollector from LLDB to llvm/Support
The file collector class is useful for creating reproducers,
not just for LLDB, but for other tools as well in LLVM/Clang.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@366956 91177308-0d34-0410-b5e6-96231b3b80d8
2019-07-24 22:59:20 +00:00
Roman Lebedev 1dea4cd1d3 [Codegen] (X & (C l>>/<< Y)) ==/!= 0 --> ((X <</l>> Y) & C) ==/!= 0 fold
Summary:
This was originally reported in D62818.
https://rise4fun.com/Alive/oPH

InstCombine does the opposite fold, in hope that `C l>>/<< Y` expression
will be hoisted out of a loop if `Y` is invariant and `X` is not.
But as it is seen from the diffs here, if it didn't get hoisted,
the produced assembly is almost universally worse.

Much like with my recent "hoist add/sub by/from const" patches,
we should get almost universal win if we hoist constant,
there is almost always an "and/test by imm" instruction,
but "shift of imm" not so much, so we may avoid having to
materialize the immediate, and thus need one less register.
And since we now shift not by constant, but by something else,
the live-range of that something else may reduce.

Special care needs to be applied not to disturb x86 `BT` / hexagon `tstbit`
instruction pattern. And to not get into endless combine loop.

Reviewers: RKSimon, efriedma, t.p.northover, craig.topper, spatel, arsenm

Reviewed By: spatel

Subscribers: hiraditya, MaskRay, wuzish, xbolva00, nikic, nemanjai, jvesely, wdng, nhaehnle, javed.absar, tpr, kristof.beyls, jsji, llvm-commits

Tags: #llvm

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@366955 91177308-0d34-0410-b5e6-96231b3b80d8
2019-07-24 22:57:22 +00:00
Peter Collingbourne 6b82f4e526 IR: Teach GlobalIndirectSymbol::getBaseObject() to handle more kinds of expressions.
For aliases, any expression that lowers at the MC level to global_object or
global_object+constant is valid at the object file level. getBaseObject()
should return a result if the aliasee ends up being of that form even if
the IR used to produce it is somewhat unconventional.

Note that this is different from what stripInBoundsOffsets() and that family
of functions is doing. Those functions are concerned about semantic properties
of IR, whereas here we only care about the lowering result.

Therefore reimplement getBaseObject() in a way that matches the lowering
result. This fixes a crash when producing a summary for aliases such as
that in the included test case.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@366952 91177308-0d34-0410-b5e6-96231b3b80d8
2019-07-24 22:23:05 +00:00
Amara Emerson 20c74d808a [GlobalISel] Support for inlining memcpy, memset and memmove calls.
This introduces a new family of combiner helper routines that re-use the
target specific cost model from SelectionDAG, and generate inline implementations
of the memcpy family of intrinsics.

The combines are only enabled at optimization levels higher than -O0, and give
very substantial performance improvements.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@366951 91177308-0d34-0410-b5e6-96231b3b80d8
2019-07-24 22:17:31 +00:00
Sanjay Patel 32857995e2 [Transforms] move copying of load metadata to helper function; NFC
There's another proposed load combine that can make use of this code
in D64432.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@366949 91177308-0d34-0410-b5e6-96231b3b80d8
2019-07-24 22:11:11 +00:00
Evandro Menezes e9eb75383c [CodeGen] Add missing comment (NFC)
Add similar comments on the load limits pertaining to `memcmp()` similar to
those for other string functions.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@366947 91177308-0d34-0410-b5e6-96231b3b80d8
2019-07-24 21:45:14 +00:00
Francis Visoiu Mistrih 10e9418a82 [Remarks] Add support for serializing metadata for every remark streamer
This allows every serializer format to implement metaSerializer() and
return the corresponding meta serializer.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@366946 91177308-0d34-0410-b5e6-96231b3b80d8
2019-07-24 21:29:44 +00:00
Francis Visoiu Mistrih 6722c51b5b [Remarks][NFC] Rename remarks::Serializer to remarks::RemarkSerializer
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@366939 91177308-0d34-0410-b5e6-96231b3b80d8
2019-07-24 19:47:57 +00:00
Simon Pilgrim 8acd141e45 [DAGCombine] matchBinOpReduction - add partial reduction matching
This patch adds support for recognizing cases where a larger vector type is being used to reduce just the elements in the lower subvector:

e.g. <8 x i32> reduction pattern in a <16 x i32> vector:

<4,5,6,7,u,u,u,u,u,u,u,u,u,u,u,u>
<2,3,u,u,u,u,u,u,u,u,u,u,u,u,u,u>
<1,u,u,u,u,u,u,u,u,u,u,u,u,u,u,u>

matchBinOpReduction returns the lower extracted subvector in such cases, assuming isExtractSubvectorCheap accepts the extraction.

I've only enabled it for X86 reduction sums so far. I intend to enable it for the bitop/minmax cases in future patches, and eventually I think its worth turning it on all the time. This is mainly just a case of ensuring calls to matchBinOpReduction don't make assumptions on the vector width based on the original vector extraction.

Fixes the x86 partial reduction sum cases in PR33758 and PR42023.

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@366933 91177308-0d34-0410-b5e6-96231b3b80d8
2019-07-24 17:29:56 +00:00
Francis Visoiu Mistrih 0294e50fe5 [Remarks] Simplify the creation of remark serializers
Introduce two new functions to create a serializer, and add support for
more combinations to the YAMLStrTabSerializer.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@366919 91177308-0d34-0410-b5e6-96231b3b80d8
2019-07-24 16:36:35 +00:00
Matt Arsenault 2c9f188168 AMDGPU: Only allow FP types for format buffer intrinics
The code already somewhat assumes this is the case anyway.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@366913 91177308-0d34-0410-b5e6-96231b3b80d8
2019-07-24 15:37:51 +00:00
Anton Afanasyev 1d7873cdea [Support] Fix -ftime-trace-granularity option
Summary:
Move `-ftime-trace-granularity` option to frontend options. Without patch
this option is showed up in the help for any tool that links libSupport.

Reviewers: sammccall

Subscribers: hiraditya, cfe-commits, llvm-commits

Tags: #clang, #llvm

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

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@366911 91177308-0d34-0410-b5e6-96231b3b80d8
2019-07-24 14:55:40 +00:00