platform/upstream/llvm.git
3 years ago[ConstraintElimination] Add tests for select form and/or (NFC)
Juneyoung Lee [Wed, 30 Dec 2020 07:05:19 +0000 (16:05 +0900)]
[ConstraintElimination] Add tests for select form and/or (NFC)

3 years ago[libc] Add implementations of rounding functions which depend rounding mode.
Siva Chandra Reddy [Mon, 21 Dec 2020 17:16:41 +0000 (09:16 -0800)]
[libc] Add implementations of rounding functions which depend rounding mode.

Namely, implementations for rint, rintf, rintl, lrint, lrintf, lrintl,
llrint, llrintf and llrintl have been added.

Reviewed By: lntue

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

3 years ago[X86] Add x86_amx type for intel AMX.
Luo, Yuanke [Fri, 20 Nov 2020 07:19:34 +0000 (15:19 +0800)]
[X86] Add x86_amx type for intel AMX.

The x86_amx is used for AMX intrisics. <256 x i32> is bitcast to x86_amx when
it is used by AMX intrinsics, and x86_amx is bitcast to <256 x i32> when it
is used by load/store instruction. So amx intrinsics only operate on type x86_amx.
It can help to separate amx intrinsics from llvm IR instructions (+-*/).
Thank Craig for the idea. This patch depend on https://reviews.llvm.org/D87981.

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

3 years ago[X86][test] Improve global address offset folding tests
Fangrui Song [Wed, 30 Dec 2020 05:26:30 +0000 (21:26 -0800)]
[X86][test] Improve global address offset folding tests

3 years ago[Verifier] Remove declaration of method that was removed 8.5 years ago. NFC
Craig Topper [Wed, 30 Dec 2020 05:04:19 +0000 (21:04 -0800)]
[Verifier] Remove declaration of method that was removed 8.5 years ago. NFC

3 years ago[llvm-elfabi] Add flag to preserve timestamp when output is the same
Haowei Wu [Wed, 9 Dec 2020 01:23:53 +0000 (17:23 -0800)]
[llvm-elfabi] Add flag to preserve timestamp when output is the same

This change adds '--write-if-changed' flag to llvm-elfabi tool. When
enabled, llvm-elfabi will not overwrite the existing file if the
content of the file will not be changed, which preserves the
timestamp.

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

3 years ago[mlir][python] Install generated dialect sources.
Stella Laurenzo [Wed, 30 Dec 2020 02:06:24 +0000 (18:06 -0800)]
[mlir][python] Install generated dialect sources.

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

3 years ago[Analysis, IR] Use *Map::lookup (NFC)
Kazu Hirata [Wed, 30 Dec 2020 03:23:24 +0000 (19:23 -0800)]
[Analysis, IR] Use *Map::lookup (NFC)

3 years ago[Transforms/Utils] Construct SmallVector with iterator ranges (NFC)
Kazu Hirata [Wed, 30 Dec 2020 03:23:22 +0000 (19:23 -0800)]
[Transforms/Utils] Construct SmallVector with iterator ranges (NFC)

3 years ago[Analysis] Use llvm::append_range (NFC)
Kazu Hirata [Wed, 30 Dec 2020 03:23:21 +0000 (19:23 -0800)]
[Analysis] Use llvm::append_range (NFC)

3 years ago[RISCV] Add intrinsics for vcompress instruction
ShihPo Hung [Fri, 25 Dec 2020 02:56:24 +0000 (18:56 -0800)]
[RISCV] Add intrinsics for vcompress instruction

This patch defines vcompress intrinsics and lower to V instructions.

We work with @rogfer01 from BSC to come out this patch.

Authored-by: Roger Ferrer Ibanez <rofirrim@gmail.com>
Co-Authored-by: ShihPo Hung <shihpo.hung@sifive.com>
Differential revision: https://reviews.llvm.org/D93809

3 years ago[PowerPC] Add mir test to show effect of `optimizeCompareInstr` when `equalityOnly...
Kai Luo [Wed, 30 Dec 2020 02:23:05 +0000 (02:23 +0000)]
[PowerPC] Add mir test to show effect of `optimizeCompareInstr` when `equalityOnly` is true. NFC.

3 years ago[PowerPC] Remaining KnownBits should be constant when performing non-sign comparison
Kai Luo [Tue, 29 Dec 2020 12:11:55 +0000 (12:11 +0000)]
[PowerPC] Remaining KnownBits should be constant when performing non-sign comparison

In `PPCTargetLowering::DAGCombineTruncBoolExt`, when checking if it's correct to perform the transformation for non-sign comparison, as the comment says
```
      // This is neither a signed nor an unsigned comparison, just make sure
      // that the high bits are equal.
```
Origin check
```
      if (Op1Known.Zero != Op2Known.Zero || Op1Known.One != Op2Known.One)
        return SDValue();
```
is not strong enough. For example,
```
Op1Known = 111x000x;
Op2Known = 111x000x;
```
Bit 4, besides bit 0, is still unknown and affects the final result.

This patch fixes https://bugs.llvm.org/show_bug.cgi?id=48388.

Reviewed By: nemanjai, #powerpc

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

3 years ago[ORC] Move Orc RPC code into Shared, rename some RPC types.
Lang Hames [Tue, 29 Dec 2020 09:27:41 +0000 (20:27 +1100)]
[ORC] Move Orc RPC code into Shared, rename some RPC types.

Moves all headers from Orc/RPC to Orc/Shared, and from the llvm::orc::rpc
namespace into llvm::orc::shared. Also renames RPCTypeName to
SerializationTypeName and Function to RPCFunction.

In addition to being a more reasonable home for this code, this will make it
easier for the upcoming Orc runtime to re-use the Serialization system for
creating and parsing wrapper-function binary blobs.

3 years ago[mlir][python] Aggressively avoid name collisions in generated python ODS code.
Stella Laurenzo [Wed, 30 Dec 2020 01:43:04 +0000 (17:43 -0800)]
[mlir][python] Aggressively avoid name collisions in generated python ODS code.

* When porting npcomp to use these bindings, I ran into enough patterns of collisions that I decided to be somewhat draconian about not polluting the namespace.
* With these changes all of the npcomp dialects generate and pass what tests we have.

Reviewed By: mehdi_amini

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

3 years ago[NFC][lsan] Extract PrintResults function
Vitaly Buka [Wed, 30 Dec 2020 01:27:53 +0000 (17:27 -0800)]
[NFC][lsan] Extract PrintResults function

3 years ago[lsan] Parse suppressions just before leak reporting
Vitaly Buka [Wed, 30 Dec 2020 01:18:39 +0000 (17:18 -0800)]
[lsan] Parse suppressions just before leak reporting

Without leaks suppressions are not needed.

3 years agoRevert "[llvm-elfabi] Add flag to preserve timestamp when output is the same"
Haowei Wu [Wed, 30 Dec 2020 01:26:22 +0000 (17:26 -0800)]
Revert "[llvm-elfabi] Add flag to preserve timestamp when output is the same"

This reverts commit fddb41744958d21635a60622cfb4067122810bcc. which
causes test failures on Mac builders.

3 years ago[RISCV] Define vsext/vzext intrinsics.
Zakk Chen [Mon, 28 Dec 2020 16:44:38 +0000 (08:44 -0800)]
[RISCV] Define vsext/vzext intrinsics.

Define vsext/vzext intrinsics.and lower to V instructions.
Define new fraction register class fields in LMULInfo and a
NoReg to present invalid LMUL register classes.

Authored-by: ShihPo Hung <shihpo.hung@sifive.com>
Co-Authored-by: Zakk Chen <zakk.chen@sifive.com>
Reviewed By: craig.topper

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

3 years ago[gn build] Port 480936e741d
LLVM GN Syncbot [Wed, 30 Dec 2020 00:40:53 +0000 (00:40 +0000)]
[gn build] Port 480936e741d

3 years agoReland "[NewPM][CodeGen] Introduce CodeGenPassBuilder to help build codegen pipeline...
Yuanfang Chen [Wed, 30 Dec 2020 00:30:16 +0000 (16:30 -0800)]
Reland "[NewPM][CodeGen] Introduce CodeGenPassBuilder to help build codegen pipeline" (again)

This reverts commit 16c8f6e91344ec9840d6aa9ec6b8d0c87a104ca3 with fix.

-Wswitch catched an unhandled enum value due to recent commits in
TargetPassConfig.cpp.

3 years ago[gn build] Port 16c8f6e9134
LLVM GN Syncbot [Wed, 30 Dec 2020 00:29:58 +0000 (00:29 +0000)]
[gn build] Port 16c8f6e9134

3 years agoRevert "Reland "[NewPM][CodeGen] Introduce CodeGenPassBuilder to help build codegen...
Yuanfang Chen [Wed, 30 Dec 2020 00:29:07 +0000 (16:29 -0800)]
Revert "Reland "[NewPM][CodeGen] Introduce CodeGenPassBuilder to help build codegen pipeline""

This reverts commit 21314940c4856e0cb81b664fd2d2117d1b7dc3e3.

Build failure in some bots.

3 years agoFix DRR pattern when attributes and operands are interleaved and a dag subtree appear...
Mehdi Amini [Wed, 30 Dec 2020 00:19:31 +0000 (00:19 +0000)]
Fix DRR pattern when attributes and operands are interleaved and a dag subtree appears in the rewrite

This fixes an incorrect fatal error in TableGen. This code probably comes
from before attributes were allowed to interleave with operands in ODS.

Reviewed By: jpienaar

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

3 years ago[MLIR] Make ComplexType buildable if its element type is buildable
Chris Morin [Tue, 29 Dec 2020 22:04:55 +0000 (22:04 +0000)]
[MLIR] Make ComplexType buildable if its element type is buildable

If a ComplexType's element type is buildable, then that ComplexType should be
buildable. This is accomplished by the introduction of a new ODS class called
`SameBuildabilityAs`. This can be used by other types that are conditionally
buildable.

Reviewed By: mehdi_amini

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

3 years ago[gn build] Port 21314940c48
LLVM GN Syncbot [Tue, 29 Dec 2020 23:18:48 +0000 (23:18 +0000)]
[gn build] Port 21314940c48

3 years agoReland "[NewPM][CodeGen] Introduce CodeGenPassBuilder to help build codegen pipeline"
Yuanfang Chen [Tue, 29 Dec 2020 01:48:17 +0000 (17:48 -0800)]
Reland "[NewPM][CodeGen] Introduce CodeGenPassBuilder to help build codegen pipeline"

This reverts commit 94427af60c66ffea655a3084825c6c3a9deec1ad (relands
4646de5d75cfce3da4ddeffb6eb8e66e38238800 with fix).

Use "return std::move(AsmStreamer);" instead of "return AsmStreamer;" in
LVMTargetMachine::createMCStreamer. Unlike Clang, GCC seems having trouble
inserting a implicit lvalue->rvalue conversion.

3 years ago[llvm-elfabi] Add flag to preserve timestamp when output is the same
Haowei Wu [Wed, 9 Dec 2020 01:23:53 +0000 (17:23 -0800)]
[llvm-elfabi] Add flag to preserve timestamp when output is the same

This change adds '--write-if-changed' flag to llvm-elfabi tool. When
enabled, llvm-elfabi will not overwrite the existing file if the
content of the file will not be changed, which preserves the
timestamp.

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

3 years agoCrashReason: Add MTE tag check faults to the list of crash reasons.
Peter Collingbourne [Thu, 17 Dec 2020 23:34:49 +0000 (15:34 -0800)]
CrashReason: Add MTE tag check faults to the list of crash reasons.

As of Linux 5.10, the kernel may report either of the two following
crash reasons:
- SEGV_MTEAERR: async MTE tag check fault
- SEGV_MTESERR: sync MTE tag check fault

Teach LLDB about them.

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

3 years ago[mlir] Add error message when failing to add pass
Jacques Pienaar [Tue, 29 Dec 2020 22:20:19 +0000 (14:20 -0800)]
[mlir] Add error message when failing to add pass

Ran into failure without any error message previously here.

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

3 years ago[mlir][Python] Add an Operation.name property
Siddharth Krishna [Tue, 29 Dec 2020 22:14:08 +0000 (14:14 -0800)]
[mlir][Python] Add an Operation.name property

Reviewed By: stellaraccident, mehdi_amini

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

3 years ago[mlir][python] Add Operation.verify().
Stella Laurenzo [Tue, 29 Dec 2020 22:10:31 +0000 (14:10 -0800)]
[mlir][python] Add Operation.verify().

Reviewed By: mehdi_amini

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

3 years ago[NFC][lsan] Add nested leak in test
Vitaly Buka [Tue, 29 Dec 2020 02:58:11 +0000 (18:58 -0800)]
[NFC][lsan] Add nested leak in test

3 years ago[NFC][sanitizer] Add SortAndDedup function
Vitaly Buka [Tue, 29 Dec 2020 01:45:54 +0000 (17:45 -0800)]
[NFC][sanitizer] Add SortAndDedup function

3 years ago[NFC][sanitizer] Simplify InternalLowerBound
Vitaly Buka [Tue, 29 Dec 2020 01:16:49 +0000 (17:16 -0800)]
[NFC][sanitizer] Simplify InternalLowerBound

3 years ago[tsan] Remove stdlib.h from dd_interceptors.cpp
Vitaly Buka [Tue, 29 Dec 2020 00:25:45 +0000 (16:25 -0800)]
[tsan] Remove stdlib.h from dd_interceptors.cpp

This fixes "realpath already defined" error.

Reviewed By: eugenis

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

3 years ago[mlir] Skip empty op-pipelines in inliner textual opt parsing
Jacques Pienaar [Tue, 29 Dec 2020 21:59:53 +0000 (13:59 -0800)]
[mlir] Skip empty op-pipelines in inliner textual opt parsing

Avoids failing on cases like

inline{default-pipeline=canonicalize max-iterations=4 op-pipelines=},

as produced by crash reproducer.

3 years ago[IROutliner] Adding OptRemarks to the IROutliner Pass
Andrew Litteken [Mon, 24 Aug 2020 09:21:38 +0000 (04:21 -0500)]
[IROutliner] Adding OptRemarks to the IROutliner Pass

This prints OptRemarks at each location where a decision is made to not
outline, or to outline a specific section for the IROutliner pass.

Test:
llvm/test/Transforms/IROutliner/opt-remarks.ll

Reviewers: jroelofs, paquette

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

3 years ago[SimplifyCFG] Teach SimplifyTerminatorOnSelect() to preserve DomTree
Roman Lebedev [Tue, 29 Dec 2020 21:41:57 +0000 (00:41 +0300)]
[SimplifyCFG] Teach SimplifyTerminatorOnSelect() to preserve DomTree

3 years ago[SimplifyCFG] Teach SimplifyCondBranchToCondBranch() to preserve DomTree
Roman Lebedev [Tue, 29 Dec 2020 21:21:32 +0000 (00:21 +0300)]
[SimplifyCFG] Teach SimplifyCondBranchToCondBranch() to preserve DomTree

3 years ago[SimplifyCFG] Teach mergeConditionalStoreToAddress() to preserve DomTree
Roman Lebedev [Tue, 29 Dec 2020 20:45:54 +0000 (23:45 +0300)]
[SimplifyCFG] Teach mergeConditionalStoreToAddress() to preserve DomTree

3 years ago[SimplifyCFG] Teach FoldCondBranchOnPHI() to preserve DomTree
Roman Lebedev [Tue, 29 Dec 2020 19:58:28 +0000 (22:58 +0300)]
[SimplifyCFG] Teach FoldCondBranchOnPHI() to preserve DomTree

3 years ago[SimplifyCFG] Teach SinkCommonCodeFromPredecessors() to preserve DomTree
Roman Lebedev [Tue, 29 Dec 2020 19:32:45 +0000 (22:32 +0300)]
[SimplifyCFG] Teach SinkCommonCodeFromPredecessors() to preserve DomTree

3 years ago[SimplifyCFG] Teach HoistThenElseCodeToIf() to preserve DomTree
Roman Lebedev [Tue, 29 Dec 2020 18:31:58 +0000 (21:31 +0300)]
[SimplifyCFG] Teach HoistThenElseCodeToIf() to preserve DomTree

3 years ago[SimplifyCFG] Teach SimplifyEqualityComparisonWithOnlyPredecessor() to preserve DomTr...
Roman Lebedev [Tue, 29 Dec 2020 17:31:37 +0000 (20:31 +0300)]
[SimplifyCFG] Teach SimplifyEqualityComparisonWithOnlyPredecessor() to preserve DomTree, part 2

3 years ago[SimplifyCFG] Teach SimplifyEqualityComparisonWithOnlyPredecessor() to preserve DomTr...
Roman Lebedev [Tue, 29 Dec 2020 16:20:27 +0000 (19:20 +0300)]
[SimplifyCFG] Teach SimplifyEqualityComparisonWithOnlyPredecessor() to preserve DomTree, part 1

3 years agoCopy demangle changes from libcxxabi to llvm with cp_to_llvm.sh.
James Y Knight [Tue, 29 Dec 2020 21:17:14 +0000 (16:17 -0500)]
Copy demangle changes from libcxxabi to llvm with cp_to_llvm.sh.

This includes changes from these commits:
5641b1dfddff847f7f3edc484537f9314c283225
8d313927539de66808e5bf3566fbd844aa78a916

3 years ago[Utils] reduce code in createTargetReduction(); NFC
Sanjay Patel [Tue, 29 Dec 2020 20:53:17 +0000 (15:53 -0500)]
[Utils] reduce code in createTargetReduction(); NFC

The switch duplicated the translation in getRecurrenceBinOp().
This code is still weird because it translates to the TTI
ReductionFlags for min/max, but then createSimpleTargetReduction()
converts that back to RecurrenceDescriptor::MinMaxRecurrenceKind.

3 years ago[mlir][python] Add FlatSymbolRef attribute.
Stella Laurenzo [Tue, 29 Dec 2020 20:07:57 +0000 (12:07 -0800)]
[mlir][python] Add FlatSymbolRef attribute.

Reviewed By: mehdi_amini

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

3 years ago[SLP] replace local reduction enum with RecurrenceKind; NFCI
Sanjay Patel [Tue, 29 Dec 2020 19:21:16 +0000 (14:21 -0500)]
[SLP] replace local reduction enum with RecurrenceKind; NFCI

I'm not sure if the SLP enum was created before the IVDescriptor
RecurrenceDescriptor / RecurrenceKind existed, but the code in
SLP is now redundant with that class, so it just makes things
more complicated to have both. We eventually call LoopUtils
createSimpleTargetReduction() to create reduction ops, so we
might as well standardize on those enum names.

There's still a question of whether we need to use TTI::ReductionFlags
vs. MinMaxRecurrenceKind, but that can be another clean-up step.

Another option would just be to flatten the enums in RecurrenceDescriptor
into a single enum. There isn't much benefit (smaller switches?) to
having a min/max subset.

3 years ago[RISCV] Fill out basic integer RVV ISel patterns
Fraser Cormack [Mon, 28 Dec 2020 08:41:49 +0000 (08:41 +0000)]
[RISCV] Fill out basic integer RVV ISel patterns

This complements the existing RVV ISel patterns for arithmetic, bitwise
and shifts with the remaining operations in those categories: sub, and,
xor, sra.

Reviewed By: craig.topper

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

3 years ago[IR] Let IRBuilder's CreateVectorSplat/CreateShuffleVector use poison as placeholder
Juneyoung Lee [Thu, 24 Dec 2020 00:33:58 +0000 (09:33 +0900)]
[IR] Let IRBuilder's CreateVectorSplat/CreateShuffleVector use poison as placeholder

This patch updates IRBuilder to create insertelement/shufflevector using poison as a placeholder.

Reviewed By: nikic

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

3 years ago[IROutliner] Adding a cost model, and debug option to turn the model off.
Andrew Litteken [Mon, 14 Sep 2020 21:58:15 +0000 (16:58 -0500)]
[IROutliner] Adding a cost model, and debug option to turn the model off.

This adds a cost model that takes into account the total number of
machine instructions to be removed from each region, the number of
instructions added by adding a new function with a set of instructions,
and the instructions added by handling arguments.

Tests not adding flags:

llvm/test/Transforms/IROutliner/outlining-cost-model.ll

Reviewers: jroelofs, paquette

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

3 years ago[RISCV] Don't use tail agnostic policy on instructions where destination is tied...
Craig Topper [Tue, 29 Dec 2020 18:18:27 +0000 (10:18 -0800)]
[RISCV] Don't use tail agnostic policy on instructions where destination is tied to source

If the destination is tied, then user has some control of the
register used for input. They would have the ability to control
the value of any tail elements. By using tail agnostic we take
this option away from them.

Its not clear that the intrinsics are defined such that this isn't
supposed to work. And undisturbed is a valid implementation for agnostic
so code wouldn't even fail to work on all systems if we always used
agnostic.

The vcompress intrinsic is defined to require tail undisturbed so
at minimum we need this for that instruction or need to redefine
the intrinsic.

I've made an exception here for vmv.s.x/fmv.s.f and reduction
instructions which only write to element 0 regardless of the tail
policy. This allows us to keep the agnostic policy on those which
should allow better redundant vsetvli removal.

An enhancement would be to check for undef input and keep the
agnostic policy, but we don't have good test coverage for that yet.

Reviewed By: khchen

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

3 years ago[NewPM][AMDGPU] Port amdgpu-lower-kernel-attributes
Arthur Eubanks [Mon, 28 Dec 2020 21:48:34 +0000 (13:48 -0800)]
[NewPM][AMDGPU] Port amdgpu-lower-kernel-attributes

And add it to the AMDGPU opt pipeline.

This is a function pass instead of a module pass (like the legacy pass)
because it's getting added to a CGSCCPassManager, and you can't put a
module pass in a CGSCCPassManager.

Reviewed By: arsenm

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

3 years ago[MSSAUpdater] Skip renaming when inserting def in unreachable block.
Florian Hahn [Tue, 29 Dec 2020 15:27:18 +0000 (15:27 +0000)]
[MSSAUpdater] Skip renaming when inserting def in unreachable block.

This fixes a updater crash when moving memory defs between unreachable
blocks.

Fixes PR48616.

3 years ago[RISCV] Add earlyclobber of destination register to vmsbf.m/vmsif.m/vmsof.m instructions
Craig Topper [Tue, 29 Dec 2020 17:59:57 +0000 (09:59 -0800)]
[RISCV] Add earlyclobber of destination register to vmsbf.m/vmsif.m/vmsof.m instructions

The spec for these instructions include this note. "The destination register
cannot overlap either the source register or the mask register ('v0') if the
instruction is masked." So we need earlyclobber to enforce this constraint.

I've regenerated the tests with update_llc_test_checks.py to show the
effects of the earlyclobber.

Reviewed By: khchen, frasercrmck

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

3 years agosanitizer: fix typo/spelling: Dissassemble → Disassemble
Michael Stapelberg [Tue, 29 Dec 2020 17:26:57 +0000 (12:26 -0500)]
sanitizer: fix typo/spelling: Dissassemble → Disassemble

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

3 years ago[mlir][linalg] Add vectorization for linalg on tensor ops
Thomas Raoux [Tue, 29 Dec 2020 07:55:15 +0000 (23:55 -0800)]
[mlir][linalg] Add vectorization for linalg on tensor ops

Support vectorization of linalg ops using tensor inputs/outputs.

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

3 years agoRegionInfo: use a range-based for loop [NFCI]
Nicolai Hähnle [Wed, 9 Dec 2020 08:54:54 +0000 (09:54 +0100)]
RegionInfo: use a range-based for loop [NFCI]

Change-Id: I9985d72191a2b0680195032acf8a14ad2ba954ed

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

3 years ago[InstCombine] 'hoist xor-by-constant from xor-by-value': completely give up on consta...
Roman Lebedev [Tue, 29 Dec 2020 13:27:55 +0000 (16:27 +0300)]
[InstCombine] 'hoist xor-by-constant from xor-by-value': completely give up on constant exprs

As Mikael Holmén is noting in the post-commit review for the first fix
https://reviews.llvm.org/rGd4ccef38d0bb#967466
not hoisting constantexprs is not enough,
because if the xor originally was a constantexpr (i.e. X is a constantexpr).
`SimplifyAssociativeOrCommutative()` in `visitXor()` will immediately
undo this transform, thus again causing an infinite combine loop.

This transform has resulted in a surprising number of constantexpr failures.

3 years ago[PowerPC] Provide patterns for permuted scalar to vector for pre-P8
Nemanja Ivanovic [Tue, 29 Dec 2020 12:32:45 +0000 (06:32 -0600)]
[PowerPC] Provide patterns for permuted scalar to vector for pre-P8

We will emit these permuted nodes on all VSX little endian subtargets
but don't have the patterns available to match them on subtargets
that don't have direct moves.

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

3 years ago[RISCV] Rewrite and simplify helper function. NFC.
Fraser Cormack [Tue, 29 Dec 2020 11:29:18 +0000 (11:29 +0000)]
[RISCV] Rewrite and simplify helper function. NFC.

Reviewed By: luismarques

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

3 years ago[PowerPC] Disable CTR loops containing operations on half-precision
Nemanja Ivanovic [Tue, 29 Dec 2020 04:51:51 +0000 (22:51 -0600)]
[PowerPC] Disable CTR loops containing operations on half-precision

On subtargets prior to Power9, conversions to/from half precision
are lowered to libcalls. This makes loops containing such operations
invalid candidates for HW loops.

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

3 years ago[ARM][AArch64] Add Cortex-A78C Support for Clang and LLVM
Mark Murray [Thu, 24 Dec 2020 10:15:12 +0000 (10:15 +0000)]
[ARM][AArch64] Add Cortex-A78C Support for Clang and LLVM

This patch upstreams support for the Armv8-a Cortex-A78C
processor for AArch64 and ARM.

In detail:

Adding cortex-a78c as cpu option for aarch64 and arm targets in clang
Adding Cortex-A78C CPU name and ProcessorModel in llvm
Details of the CPU can be found here:
https://www.arm.com/products/silicon-ip-cpu/cortex-a/cortex-a78c

3 years ago[lldb] Deduplicate some tests in TestLldbGdbServer
Pavel Labath [Mon, 21 Dec 2020 21:20:58 +0000 (22:20 +0100)]
[lldb] Deduplicate some tests in TestLldbGdbServer

Use the new gdb-remote test case factory to generate debugserver and
llgs variants, handling the simple cases first.

3 years agoPrecommit tests that have poison as shufflevector's placeholder
Juneyoung Lee [Tue, 29 Dec 2020 08:02:25 +0000 (17:02 +0900)]
Precommit tests that have poison as shufflevector's placeholder

This commit copies existing tests at llvm/Transforms containing
'shufflevector X, undef' and replaces them with 'shufflevector X, poison'.
The new copied tests have *-inseltpoison.ll suffix at its file name
(as db7a2f347f132b3920415013d62d1adfb18d8d58 did)
See https://reviews.llvm.org/D93793

Test files listed using

grep -R -E "^[^;]*shufflevector <.*> .*, <.*> undef" | cut -d":" -f1 | uniq

Test files copied & updated using

file_org=llvm/test/Transforms/$1
if [[ "$file_org" = *-inseltpoison.ll ]]; then
  file=$file_org
else
  file=${file_org%.ll}-inseltpoison.ll
  if [ ! -f $file ]; then
    cp $file_org $file
  fi
fi
sed -i -E 's/^([^;]*)shufflevector <(.*)> (.*), <(.*)> undef/\1shufflevector <\2> \3, <\4> poison/g' $file
head -1 $file | grep "Assertions have been autogenerated by utils/update_test_checks.py" -q
if [ "$?" == 1 ]; then
  echo "$file : should be manually updated"
  # The test is manually updated
  exit 1
fi
python3 ./llvm/utils/update_test_checks.py --opt-binary=./build-releaseassert/bin/opt $file

3 years ago[LLD][ELF] - Use LLVM_ELF_IMPORT_TYPES_ELFT instead of multiple types definitions...
Georgii Rymar [Mon, 28 Dec 2020 10:20:00 +0000 (13:20 +0300)]
[LLD][ELF] - Use LLVM_ELF_IMPORT_TYPES_ELFT instead of multiple types definitions. NFCI.

We can reduce the number of "using" declarations.
`LLVM_ELF_IMPORT_TYPES_ELFT` was extended in D93801.

Differential revision: https://reviews.llvm.org/D93856

3 years ago[lldb] Fix logging in lldb-server tests
Pavel Labath [Mon, 28 Dec 2020 19:57:45 +0000 (20:57 +0100)]
[lldb] Fix logging in lldb-server tests

3 years ago[ubsan][test] FLush stdout before checking interleaved stdout/stderr
Fangrui Song [Tue, 29 Dec 2020 04:30:31 +0000 (20:30 -0800)]
[ubsan][test] FLush stdout before checking interleaved stdout/stderr

Detected by musl.

3 years ago[test] Fix conditional-temporaries.cpp
Arthur Eubanks [Tue, 29 Dec 2020 04:17:31 +0000 (20:17 -0800)]
[test] Fix conditional-temporaries.cpp

Broken by https://reviews.llvm.org/D93880.
(but now the test is much better :) )

3 years ago[NewPM] Port infer-address-spaces
Arthur Eubanks [Mon, 28 Dec 2020 21:07:46 +0000 (13:07 -0800)]
[NewPM] Port infer-address-spaces

And add it to the AMDGPU opt pipeline.

Reviewed By: arsenm

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

3 years ago[asan][test] Annotate glibc specific tests with REQUIRES: glibc-2.27
Fangrui Song [Tue, 29 Dec 2020 03:56:08 +0000 (19:56 -0800)]
[asan][test] Annotate glibc specific tests with REQUIRES: glibc-2.27

3 years ago[CFGPrinter] Use succ_empty (NFC)
Kazu Hirata [Tue, 29 Dec 2020 03:55:20 +0000 (19:55 -0800)]
[CFGPrinter] Use succ_empty (NFC)

3 years ago[Scalar] Construct SmallVector with iterator ranges (NFC)
Kazu Hirata [Tue, 29 Dec 2020 03:55:18 +0000 (19:55 -0800)]
[Scalar] Construct SmallVector with iterator ranges (NFC)

3 years ago[CodeGen] Use llvm::append_range (NFC)
Kazu Hirata [Tue, 29 Dec 2020 03:55:16 +0000 (19:55 -0800)]
[CodeGen] Use llvm::append_range (NFC)

3 years ago[IROutliner] Merging identical output blocks for extracted functions.
Andrew Litteken [Wed, 16 Sep 2020 02:34:01 +0000 (21:34 -0500)]
[IROutliner] Merging identical output blocks for extracted functions.

Many of the sets of output stores will be the same. When a block is
created, we check if there is an output block with the same set of store
instructions. If there is, we map the output block of the region back
to the block, so that the extra argument controlling the switch
statement can be set to the appropriate block value.

Tests:
- llvm/test/Transforms/IROutliner/outlining-same-output-blocks.ll

Reviewers: jroelofs, paquette

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

3 years ago[RISCV] Define vmclr.m/vmset.m intrinsics.
Zakk Chen [Mon, 28 Dec 2020 04:00:33 +0000 (20:00 -0800)]
[RISCV] Define vmclr.m/vmset.m intrinsics.

Define vmclr.m/vmset.m intrinsics and lower to vmxor.mm/vmxnor.mm.

Ideally all rvv pseudo instructions could be implemented in C header,
but those two instructions don't take an input, codegen can not guarantee
that the source register becomes the same as the destination.

We expand pseduo-v-inst into corresponding v-inst in
RISCVExpandPseudoInsts pass.

Reviewed By: craig.topper, frasercrmck

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

3 years ago[UpdateTestChecks] Fix update_analyze_test_checks.py failure
Juneyoung Lee [Tue, 29 Dec 2020 02:56:59 +0000 (11:56 +0900)]
[UpdateTestChecks] Fix update_analyze_test_checks.py failure

3 years ago[PowerPC] Do not emit HW loop when TLS var accessed in PHI of loop exit
Nemanja Ivanovic [Tue, 29 Dec 2020 02:31:46 +0000 (20:31 -0600)]
[PowerPC] Do not emit HW loop when TLS var accessed in PHI of loop exit

If any PHI nodes in loop exit blocks have incoming values from the
loop that are accesses of TLS variables with local dynamic or general
dynamic TLS model, the address will be computed inside the loop. Since
this includes a call to __tls_get_addr, this will in turn cause the
CTR loops verifier to complain.
Disable CTR loops in such cases.

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

3 years ago[AMDGPU][NewPM] Port amdgpu-promote-alloca(-to-vector)
Arthur Eubanks [Mon, 28 Dec 2020 20:14:51 +0000 (12:14 -0800)]
[AMDGPU][NewPM] Port amdgpu-promote-alloca(-to-vector)

And add to AMDGPU opt pipeline.

Don't pin an opt run to the legacy PM when -enable-new-pm=1 if these
passes (or passes introduced in https://reviews.llvm.org/D93863) are in
the list of passes.

Reviewed By: arsenm

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

3 years agoRevert "[NewPM][CodeGen] Introduce CodeGenPassBuilder to help build codegen pipeline"
Yuanfang Chen [Tue, 29 Dec 2020 01:44:22 +0000 (17:44 -0800)]
Revert "[NewPM][CodeGen] Introduce CodeGenPassBuilder to help build codegen pipeline"

This reverts commit 4646de5d75cfce3da4ddeffb6eb8e66e38238800.

Some bots have build failure.

3 years ago[NewPM][CodeGen] Introduce CodeGenPassBuilder to help build codegen pipeline
Yuanfang Chen [Tue, 29 Dec 2020 00:56:11 +0000 (16:56 -0800)]
[NewPM][CodeGen] Introduce CodeGenPassBuilder to help build codegen pipeline

Following up on D67687.
Please refer to the RFC here http://lists.llvm.org/pipermail/llvm-dev/2020-July/143309.html

`CodeGenPassBuilder` is the NPM counterpart of `TargetPassConfig` with below differences.
- Debugging features (MIR print/verify, disable pass, start/stop-before/after, etc.) living in `TargetPassConfig` are moved to use PassInstrument as much as possible. (Implementation also lives in `TargetPassConfig.cpp`)
- `TargetPassConfig` is a polymorphic base (virtual inheritance) to build the target-dependent pipeline whereas `CodeGenPassBuilder` is the CRTP base/helper to implement the target-dependent pipeline. The motivation is flexibility for targets to customize the pipeline, inlining opportunity, and fits the overall NPM value semantics design.
- `TargetPassConfig` is a legacy immutable pass to declare hooks for targets to customize some target-independent codegen layer behavior. This is partially ported to TargetMachine::options. The rest, such as `createMachineScheduler/createPostMachineScheduler`, are left out for now. They should be implemented in LLVMTargetMachine in the future.

Reviewed By: arsenm, aeubanks

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

3 years ago[flang] Detect call to abstract interface
Tim Keith [Tue, 29 Dec 2020 00:36:32 +0000 (16:36 -0800)]
[flang] Detect call to abstract interface

A subroutine call or function reference to an abstract interface is
not legal.

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

3 years ago[libc++] Fix a test failure in 7b00e9fae3 (D93815).
Arthur O'Dwyer [Mon, 28 Dec 2020 23:46:07 +0000 (18:46 -0500)]
[libc++] Fix a test failure in 7b00e9fae3 (D93815).

"LLVM Buildbot on libcxx-libcxxabi-libunwind-armv7-linux" is not happy
with comparing `unsigned` and `int` [-Werror,-Wsign-compare].

3 years agoFix PR35902: incorrect alignment used for ubsan check.
James Y Knight [Thu, 10 Dec 2020 23:03:16 +0000 (18:03 -0500)]
Fix PR35902: incorrect alignment used for ubsan check.

UBSan was using the complete-object align rather than nv alignment
when checking the "this" pointer of a method.

Furthermore, CGF.CXXABIThisAlignment was also being set incorrectly,
due to an incorrectly negated test. The latter doesn't appear to have
had any impact, due to it not really being used anywhere.

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

3 years ago[test] Fix pr45360.ll under NPM
Arthur Eubanks [Mon, 28 Dec 2020 22:41:58 +0000 (14:41 -0800)]
[test] Fix pr45360.ll under NPM

The IR is the same under the NPM, but some basic block labels and value
names are different.

3 years ago[IROutliner] Adding support for consolidating functions with different output arguments.
Andrew Litteken [Wed, 16 Sep 2020 03:51:43 +0000 (22:51 -0500)]
[IROutliner] Adding support for consolidating functions with different output arguments.

Certain regions can have values introduced inside the region that are
used outside of the region. These may not be the same for each similar
region, so we must create one over arching set of arguments for the
consolidated function.

We do this by iterating over the outputs for each extracted function,
and creating as many different arguments to encapsulate the different
outputs sets. For each output set, we create a different block with the
necessary stores from the value to the output register. There is then
one switch statement, controlled by an argument to the function, to
differentiate which block to use.

Changed Tests for consistency:
llvm/test/Transforms/IROutliner/extraction.ll
llvm/test/Transforms/IROutliner/illegal-assumes.ll
llvm/test/Transforms/IROutliner/illegal-memcpy.ll
llvm/test/Transforms/IROutliner/illegal-memmove.ll
llvm/test/Transforms/IROutliner/illegal-vaarg.ll

Tests to test new functionality:
llvm/test/Transforms/IROutliner/outlining-different-output-blocks.ll
llvm/test/Transforms/IROutliner/outlining-remapped-outputs.ll
llvm/test/Transforms/IROutliner/outlining-same-output-blocks.ll

Reviewers: jroelofs, paquette

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

3 years ago[MLIR][NFC] Change FunctionLike::setAllArgAttrs/setAllResultAttrs to do a one-shot...
Rahul Joshi [Mon, 28 Dec 2020 21:34:11 +0000 (13:34 -0800)]
[MLIR][NFC] Change FunctionLike::setAllArgAttrs/setAllResultAttrs to do a one-shot attribute update.

- Change FunctionLike::setAllArgAttrs() and setAllResultAttrs() to rebuild the new list of
  function attributes locally and call setAttr() just once instead of calling
  setArgAttr()/setResultAttrs() for each argument which incrementally build the
  attribute dictionary and can end up creating a lot of unused DictionaryAttr's (which are
  uniqued and nor garbage collected).

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

3 years ago[WebAssembly] Prototype extending pairwise add instructions
Thomas Lively [Mon, 28 Dec 2020 22:11:14 +0000 (14:11 -0800)]
[WebAssembly] Prototype extending pairwise add instructions

As proposed in https://github.com/WebAssembly/simd/pull/380. This commit makes
the new instructions available only via clang builtins and LLVM intrinsics to
make their use opt-in while they are still being evaluated for inclusion in the
SIMD proposal.

Depends on D93771.

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

3 years ago[NewPM] Fix CGSCCOptimizerLateEPCallbacks place in pipeline
Arthur Eubanks [Mon, 28 Dec 2020 21:17:32 +0000 (13:17 -0800)]
[NewPM] Fix CGSCCOptimizerLateEPCallbacks place in pipeline

CGSCCOptimizerLateEPCallbacks are supposed to be run before the function
simplification pipeline, like in the legacy PM and as specified in the
comments for registerCGSCCOptimizerLateEPCallback().

Reviewed By: ychen

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

3 years ago[WebAssembly][NFC] Finish cleaning up SIMD tablegen
Thomas Lively [Mon, 28 Dec 2020 21:59:23 +0000 (13:59 -0800)]
[WebAssembly][NFC] Finish cleaning up SIMD tablegen

This commit is a follow-on to c2c2e9119e73, using the `Vec` records introduced
in that commit in the rest of the SIMD instruction definitions. Also removes
unnecessary types in output patterns.

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

3 years ago[ValueTracking] Implement impliesPoison
Juneyoung Lee [Mon, 28 Dec 2020 21:50:26 +0000 (06:50 +0900)]
[ValueTracking] Implement impliesPoison

This PR adds impliesPoison(ValAssumedPoison, V) that returns true if V is
poison under the assumption that ValAssumedPoison is poison.

For example, impliesPoison('icmp X, 10', 'icmp X, Y') return true because
'icmp X, Y' is poison if 'icmp X, 10' is poison.

impliesPoison can be used for sound optimization of select, as discussed in
D77868.

Reviewed By: nikic

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

3 years ago[InstCombine] Disable unsafe select transform behind a flag
Nikita Popov [Sun, 27 Dec 2020 17:33:15 +0000 (18:33 +0100)]
[InstCombine] Disable unsafe select transform behind a flag

This disables the poison-unsafe select -> and/or transform behind
a flag (we continue to perform the fold by default). This is intended
to simplify evaluation and testing while we teach various passes
to directly recognize the select pattern.

This only disables the main select -> and/or transform. A number of
related ones are instead changed to canonicalize to the a ? b : false
and a ? true : b forms which represent and/or respectively. This
requires a bit of care to avoid infinite loops, as we do not want
!a ? b : false to be converted into a ? false : b.

The basic idea here is the same as D93065, but keeps the change
behind a flag for now.

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

3 years ago[NFC][sanitizer] Remove unused typedef
Vitaly Buka [Thu, 24 Dec 2020 05:09:51 +0000 (21:09 -0800)]
[NFC][sanitizer] Remove unused typedef

3 years ago[InstSimplify] remove ctpop of 1 (low) bit
Sanjay Patel [Mon, 28 Dec 2020 20:00:03 +0000 (15:00 -0500)]
[InstSimplify] remove ctpop of 1 (low) bit

https://llvm.org/PR48608

As noted in the test comment, we could handle a more general
case in instcombine and remove this, but I don't have evidence
that we need to do that.

https://alive2.llvm.org/ce/z/MRW9gD

3 years ago[InstSimplify] add tests for ctpop; NFC (PR48608)
Sanjay Patel [Mon, 28 Dec 2020 19:56:54 +0000 (14:56 -0500)]
[InstSimplify] add tests for ctpop; NFC (PR48608)

3 years ago[IR] Make Value::getType() work better with invalid IR.
Chris Lattner [Mon, 28 Dec 2020 20:01:08 +0000 (12:01 -0800)]
[IR] Make Value::getType() work better with invalid IR.

The asmprinter would crash when dumping IR objects that had their
operands dropped.  With this change, we now get this output, which
makes op->dump() style debugging more useful.

%5 = "firrtl.eq"(<<NULL>>, <<NULL>>) : (<<NULL TYPE>>, <<NULL TYPE>>) -> !firrtl.uint<1>

Previously the asmprinter would crash getting the types of the null operands.

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

3 years ago[SimplifyCFG] FoldBranchToCommonDest: gracefully handle unreachable code ()
Roman Lebedev [Mon, 28 Dec 2020 20:30:38 +0000 (23:30 +0300)]
[SimplifyCFG] FoldBranchToCommonDest: gracefully handle unreachable code ()

We might be dealing with an unreachable code,
so the bonus instruction we clone might be self-referencing.

There is a sanity check that all uses of bonus instructions
that are not in the original block with said bonus instructions
are PHI nodes, and that is obviously not the case
for self-referencing instructions..

So if we find such an use, just rewrite it.

Thanks to Mikael Holmén for the reproducer!

Fixes https://bugs.llvm.org/show_bug.cgi?id=48450#c8

3 years ago[PowerPC] Parse and ignore .machine
Fangrui Song [Mon, 28 Dec 2020 20:20:39 +0000 (12:20 -0800)]
[PowerPC] Parse and ignore .machine

glibc/sysdeps/powerpc/powerpc64 has .machine
{altivec,power4,power5,power6,power7,power8} (.machine power9 is planned in
sysdeps/powerpc/powerpc64/power9/strcmp.S).
The diagnostic is not useful anyway so just delete it.