platform/upstream/llvm.git
2 years ago[test][DSE] Precommit test for D123162
Arthur Eubanks [Tue, 5 Apr 2022 21:50:44 +0000 (14:50 -0700)]
[test][DSE] Precommit test for D123162

2 years ago[X86] Add Issue #42433 test case
Simon Pilgrim [Wed, 6 Apr 2022 16:51:47 +0000 (17:51 +0100)]
[X86] Add Issue #42433 test case

2 years ago[dsymutil] Fix a few TODOs about reporting errors to the user
Nico Weber [Wed, 6 Apr 2022 13:23:25 +0000 (09:23 -0400)]
[dsymutil] Fix a few TODOs about reporting errors to the user

I saw the TODOs while reading this file and figured I'd do them.
I haven't seen these happen in practice.

No expected behavior change.

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

2 years ago[dsymutil] Fix O(n^2) behavior when running on ld64.lld's current ICF output
Nico Weber [Wed, 6 Apr 2022 13:30:39 +0000 (09:30 -0400)]
[dsymutil] Fix O(n^2) behavior when running on ld64.lld's current ICF output

STABS information consists of a list of records in the linked binary
that look like this:

  OSO: path/to/some.o
  SO: path/to/some.c
  FUN: sym1
  FUN: sym2
  ...

The linked binary has one such set of records for every .o file linked
into it.

When dsymutil processes the binary's STABS information, it:

1. Reads the .o file mentioned in the OSO line
2. For each FUN entry after it in the main executable's STABS info:
  a) it looks up that symbol in the symbol of that .o file
  b) if it doesn't find it there, it goes through all symbols in the
     main binary at the same address and sees if any of those match

With ICF, ld64.lld's STABS output claims that all identical functions
that were folded are in the .o file of the one that's deemed the
canonical one. Many small functions might be folded into a single
function, so there are .o OSO entries that end up with many FUN lines,
but almost none of them exist in the .o file's symbol table.

Previously, dsymutil would do a full scan of all symbols in the main
executable _for every of these entries_.

This patch instead scans all aliases once and remembers them per name.
This reduces the alias resolution complexity from
O(number_of_aliases_in_o_file * number_of_symbols_in_main_executable) to
O(number_of_aliases_in_o_file * log(number_of_aliases_in_o_file)).

In practice, it reduces the time spent to run dsymutil on
Chromium Framework from 26 min (after https://reviews.llvm.org/D89444)
or 12 min (before https://reviews.llvm.org/D89444) to ~8m30s.

We probably want to change how ld64.lld writes STABS entries when ICF
is enabled, but making dsymutil not have pathological performance for
this input seems like a good change as well.

No expected behavior change (other than it's faster). I verified that
for Chromium Framework, the generated .dSYM is identical with and
without this patch.

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

2 years ago[DAGCombine] insert_subvector undef, (splat X), N2 -> splat X
Paul Walker [Tue, 22 Feb 2022 15:20:28 +0000 (15:20 +0000)]
[DAGCombine] insert_subvector undef, (splat X), N2 -> splat X

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

2 years ago[RISCV][VP] Add basic RVV codegen for vp.icmp
Fraser Cormack [Wed, 30 Mar 2022 16:01:30 +0000 (17:01 +0100)]
[RISCV][VP] Add basic RVV codegen for vp.icmp

This patch adds the minimum required to successfully lower vp.icmp via
the new ISD::VP_SETCC node to RVV instructions.

Regular ISD::SETCC goes through a lot of canonicalization which targets
may rely on which has not hereto been ported to VP_SETCC. It also
supports expansion of individual condition codes and a non-boolean
return type. Support for all of that will follow in later patches.

In the case of RVV this largely isn't a problem as the vector integer
comparison instructions are plentiful enough that it can lower all
VP_SETCC nodes on legal integer vectors except for boolean vectors,
which regular SETCC folds away immediately into logical operations.

Floating-point VP_SETCC operations aren't as well supported in RVV and
the backend relies on condition code expansion, so support for those
operations will come in later patches.

Portions of this code were taken from the VP reference patches.

Reviewed By: craig.topper

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

2 years ago[gn build] Port d78624975b43
LLVM GN Syncbot [Wed, 6 Apr 2022 15:52:20 +0000 (15:52 +0000)]
[gn build] Port d78624975b43

2 years ago[mlir][bufferize][NFC] Remove caller map and ordered func list from FuncAnalysisState
Matthias Springer [Wed, 6 Apr 2022 14:42:53 +0000 (23:42 +0900)]
[mlir][bufferize][NFC] Remove caller map and ordered func list from FuncAnalysisState

These can be local variables. No need to store them in the struct.

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

2 years ago[mlir][bufferize][NFC] Rename ModuleAnalysisState to FuncAnalysisState
Matthias Springer [Wed, 6 Apr 2022 14:42:31 +0000 (23:42 +0900)]
[mlir][bufferize][NFC] Rename ModuleAnalysisState to FuncAnalysisState

This is for consistency reasons. `*AnalysisState` always starts with the name of the dialect.

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

2 years ago[libc++] Use cpp20_output_iterator in tests.
Mark de Wever [Tue, 5 Apr 2022 16:34:37 +0000 (18:34 +0200)]
[libc++] Use cpp20_output_iterator in tests.

Adds the new cpp20_output_iterator in the ranges::transform test.

Reviewed By: philnik, #libc

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

2 years ago[NFC][libc++] Modularize chrono's calendar.
Mark de Wever [Sun, 3 Apr 2022 13:58:57 +0000 (15:58 +0200)]
[NFC][libc++] Modularize chrono's calendar.

The is a followup of D116965 to split the calendar header. This is a
preparation to add the formatters for the chrono header.

The code is only moved no other changes have been made.

Reviewed By: ldionne, #libc, philnik

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

2 years ago[MLIR][Presburger] Refactor subtraction in preparation for making it iterative
Arjun P [Wed, 6 Apr 2022 13:52:30 +0000 (14:52 +0100)]
[MLIR][Presburger] Refactor subtraction in preparation for making it iterative

Refactor the operation of subtraction by
- removing the usage of SimplexRollbackScopeExit since this
  can't be used in the iterative version
- reducing the number of stack variables to make the
  iterative version easier to follow

Reviewed By: Groverkss

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

2 years ago[X86] `lowerBuildVectorAsBroadcast()`: with AVX512VL, allow i64->XMM broadcasts from...
Roman Lebedev [Wed, 6 Apr 2022 14:32:31 +0000 (17:32 +0300)]
[X86] `lowerBuildVectorAsBroadcast()`: with AVX512VL, allow i64->XMM broadcasts from constant pool

Reviewed By: RKSimon

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

2 years ago[pseudo] Add crude heuristics to choose taken preprocessor branches.
Sam McCall [Mon, 7 Mar 2022 22:33:40 +0000 (23:33 +0100)]
[pseudo] Add crude heuristics to choose taken preprocessor branches.

In files where different preprocessing paths are possible, our goal is to
choose a preprocessed token sequence which we can parse that pins down as much
of the grammatical structure as possible.
This forms the "primary parse", and the not-taken branches get parsed later,
and are constrained to be compatible with the primary parse.

Concretely:
  int x =
    #ifdef // TAKEN
      2 + 2 + 2 // determined during primary parse to be an expression
    #else
      2 // constrained to be an expression during a secondary parse
    #endif
    ;

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

2 years ago[mlir][bufferize] Better analysis for return values of CallOps
Matthias Springer [Wed, 6 Apr 2022 14:41:56 +0000 (23:41 +0900)]
[mlir][bufferize] Better analysis for return values of CallOps

Support returning arbitrary tensors from functions. Even those that are
not equivalent. To that end, additional information is gathered during
the analysis phase. In particular, which function args are aliasing with
which return values.

Also fix bugs in the current implementation when returning equivalent
tensors. Various unit tests are added to ensure that we have better test
coverage.

Note: Returning non-equivalent tensors is only allowed when
allowReturnAllocs is enabled. This functionality is useful for unit
testing and compatibility with other bufferizations such as the sparse
compiler. This is also towards using ModuleBufferization as a
replacement for --func-bufferize.

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

2 years ago[mlir][bufferize] Simplify ModuleBufferization driver
Matthias Springer [Wed, 6 Apr 2022 14:41:33 +0000 (23:41 +0900)]
[mlir][bufferize] Simplify ModuleBufferization driver

* Bufferize FuncOp bodies and boundaries in the same loop. This is in preparation of moving FuncOp bufferization into an external model implementation.
* As a side effect, stop bufferization earlier if there was an error. (Do not continue bufferization, fewer error messages.)
* Run equivalence analysis of CallOps before the main analysis. This is needed so that equialvence info is propagated properly.

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

2 years ago[mlir][bufferize] Fix dropped return type in ModuleBufferization
Matthias Springer [Wed, 6 Apr 2022 14:40:59 +0000 (23:40 +0900)]
[mlir][bufferize] Fix dropped return type in ModuleBufferization

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

2 years ago[NFC] Remove redundant IndexType canonicalisation from DAGTypeLegalizer::PromoteIntOp...
Paul Walker [Wed, 6 Apr 2022 13:58:38 +0000 (14:58 +0100)]
[NFC] Remove redundant IndexType canonicalisation from DAGTypeLegalizer::PromoteIntOp_MSCATTER

Promotion does not affect the base element type and so the original
index type will remain unchanged.  This reflects the behaviour of
DAGTypeLegalizer::PromoteIntOp_MGATHER with no tests affected.

2 years ago[SVE] Add gather/scatter tests to highlight bugs in their generated code.
Paul Walker [Wed, 6 Apr 2022 12:45:26 +0000 (13:45 +0100)]
[SVE] Add gather/scatter tests to highlight bugs in their generated code.

2 years ago[gn build] Port afa94306a8c1
LLVM GN Syncbot [Wed, 6 Apr 2022 14:24:39 +0000 (14:24 +0000)]
[gn build] Port afa94306a8c1

2 years ago[clangd] Add code action to generate a constructor for a C++ class
Sam McCall [Mon, 3 Jan 2022 02:57:14 +0000 (03:57 +0100)]
[clangd] Add code action to generate a constructor for a C++ class

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

2 years ago[gn build] Port 68eac9a6e7a1
LLVM GN Syncbot [Wed, 6 Apr 2022 14:15:16 +0000 (14:15 +0000)]
[gn build] Port 68eac9a6e7a1

2 years ago[clangd] Code action to declare missing move/copy constructor/assignment
Sam McCall [Sun, 2 Jan 2022 04:01:43 +0000 (05:01 +0100)]
[clangd] Code action to declare missing move/copy constructor/assignment

Fixes https://github.com/clangd/clangd/issues/973

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

2 years ago[X86][tablgen] Add one entry manually into the memory folding table
Shengchen Kan [Wed, 6 Apr 2022 14:01:56 +0000 (22:01 +0800)]
[X86][tablgen] Add one entry manually into the memory folding table

```
{"MMX_MOVD64grr", "MMX_MOVD64mr"}
```
This pair has different opcodes.

2 years ago[AArch64] Fold lsr+bfi in tryBitfieldInsertOpFromOr
chenglin.bi [Wed, 6 Apr 2022 13:17:42 +0000 (21:17 +0800)]
[AArch64] Fold lsr+bfi in tryBitfieldInsertOpFromOr

In tryBitfieldInsertOpFromOr, if the new created LSR Node's source
is LSR with Imm shift, try to fold them.

Fixes https://github.com/llvm/llvm-project/issues/54696

Reviewed By: efriedma, benshi001

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

2 years ago[SimplifyLibCalls] Use KnownBits helper APIs (NFC)
Nikita Popov [Wed, 6 Apr 2022 13:59:42 +0000 (15:59 +0200)]
[SimplifyLibCalls] Use KnownBits helper APIs (NFC)

Use helper APIs for isNonNegative() and getMaxValue() instead of
flipping the zero value and having a long comment explaining why
that is necessary.

2 years ago[PS4] clang-format PS4CPU.cpp/.h
Paul Robinson [Wed, 6 Apr 2022 13:52:13 +0000 (06:52 -0700)]
[PS4] clang-format PS4CPU.cpp/.h

2 years agoMemoryBuiltins: getAllocAlignment is now useful for non-allocator funcs
Augie Fackler [Mon, 14 Mar 2022 19:21:04 +0000 (15:21 -0400)]
MemoryBuiltins: getAllocAlignment is now useful for non-allocator funcs

This has been true since dba73135c8b7a02afb535328a7475e0a6890c271, but
didn't matter until now because clang wasn't emitting allocalign
attributes.

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

2 years ago[AMDGPU] Fix unused variable warning after D117484
Jay Foad [Wed, 6 Apr 2022 13:45:38 +0000 (14:45 +0100)]
[AMDGPU] Fix unused variable warning after D117484

2 years ago[flang] Add runtime API to catch unit number out of range
Jean Perier [Wed, 6 Apr 2022 13:37:48 +0000 (15:37 +0200)]
[flang] Add runtime API to catch unit number out of range

Unit numbers must fit on a default integer. It is however possible that
the user provides the unit number in UNIT with a wider integer type.
In such case, lowering was previously silently narrowing
the value and passing the result to the BeginXXX runtime entry points.
Cases where the conversion caused overflow were not reported/caught.
Most existing compilers catch these errors and raise an IO error.
Add a CheckUnitNumberInRange runtime API to do the same in f18.

This runtime API has its own error management interface (i.e., does not
use GetIoMsg, EndIo, and EnableHandlers) because the usual error
management requires BeginXXX to be called to set up the error
management. But in this case, the BeginXXX cannot be called since
the bad unit number that would be provided to it overflew (and in the worst
case scenario, the narrowed value could point to a different valid unit
already in use). Hence I decided to make an API that must be called
before the BeginXXX and should trigger the whole BeginXXX/.../EndIoStatement
to be skipped in case the unit number is too big and the user enabled
error recovery.

Note that CheckUnitNumberInRange accepts negative numbers (as long as
they can fit on a default integer), because unit numbers may be negative
if they were created by NEWUNIT.

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

2 years ago[X86] Fold MMX_MOVD64from64rr + store to MMX_MOVQ64mr instead of MMX_MOVD64from64mr...
Shengchen Kan [Wed, 6 Apr 2022 13:32:30 +0000 (21:32 +0800)]
[X86] Fold MMX_MOVD64from64rr + store to MMX_MOVQ64mr instead of MMX_MOVD64from64mr in auto-generated table

This is a follow-up patch for D122241.

2 years ago[SVE][AArch64] Enable first active true vector combine for INTRINSIC_WO_CHAIN
zhongyunde [Wed, 6 Apr 2022 12:57:40 +0000 (20:57 +0800)]
[SVE][AArch64] Enable first active true vector combine for INTRINSIC_WO_CHAIN

WHILELO/LS insn is used very important for SVE loop, and itself
is a flag-setting operation, so add it.

Reviewed By: paulwalker-arm, david-arm

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

2 years ago[OpenMP] Add support for ompt_callback_dispatch
Hansang Bae [Sun, 20 Mar 2022 21:03:04 +0000 (16:03 -0500)]
[OpenMP] Add support for ompt_callback_dispatch

This change adds support for ompt_callback_dispatch with the new
dispatch chunk type introduced in 5.2. Definitions of the new
ompt_work_loop types were also added in the header file.

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

2 years ago[AArch64][InstCombine] Fold MLOAD and zero extensions into MLOAD
zhongyunde [Wed, 6 Apr 2022 12:47:32 +0000 (20:47 +0800)]
[AArch64][InstCombine] Fold MLOAD and zero extensions into MLOAD

Accord the discussion in D122281, we missing an ISD::AND combine for MLOAD
because it relies on BuildVectorSDNode is fails for scalable vectors.
This patch is intend to handle that, so we can circle back the type MVT::nxv2i32

Reviewed By: paulwalker-arm

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

2 years ago[libc++] Support arrays in make_shared and allocate_shared (P0674R1)
Louis Dionne [Tue, 26 Oct 2021 17:12:12 +0000 (13:12 -0400)]
[libc++] Support arrays in make_shared and allocate_shared (P0674R1)

This patch implements P0674R1, i.e. support for arrays in std::make_shared
and std::allocate_shared.

Co-authored-by: Zoe Carver <z.zoelec2@gmail.com>
Differential Revision: https://reviews.llvm.org/D62641

2 years ago[X86][tablgen] Add three entries manually into the memory folding table
Shengchen Kan [Wed, 6 Apr 2022 12:34:02 +0000 (20:34 +0800)]
[X86][tablgen] Add three entries manually into the memory folding table

```
{X86::MOVLHPSrr,X86::MOVHPSrm}
{X86::VMOVLHPSZrr,X86::VMOVHPSZ128rm}
{X86::VMOVLHPSrr,X86::VMOVHPSrm}
```

Each of the three pairs has different mnemonic, so we have to add it
manually. This is a follow-up patch for D122477.

2 years ago[gn build] (manually) port 83a798d4b0e1 (abi_breaking_checks in tests)
Nico Weber [Wed, 6 Apr 2022 12:31:20 +0000 (08:31 -0400)]
[gn build] (manually) port 83a798d4b0e1 (abi_breaking_checks in tests)

2 years ago[AMDGPU] Regenerate shared-op-cycle.ll test
Simon Pilgrim [Wed, 6 Apr 2022 11:04:19 +0000 (12:04 +0100)]
[AMDGPU] Regenerate shared-op-cycle.ll test

2 years ago[AMDGPU] Regenerate pv-packing.ll test
Simon Pilgrim [Wed, 6 Apr 2022 11:03:49 +0000 (12:03 +0100)]
[AMDGPU] Regenerate pv-packing.ll test

2 years ago[TLI] `TargetLowering::SimplifyDemandedVectorElts()`: narrowing bitcast: fill known...
Roman Lebedev [Wed, 6 Apr 2022 10:50:31 +0000 (13:50 +0300)]
[TLI] `TargetLowering::SimplifyDemandedVectorElts()`: narrowing bitcast: fill known zero elts from known src bits

E.g. in
```
%i0 = zext <2 x i8> to <2 x i16>
%i1 = bitcast <2 x i16> to <4 x i8>
```
the `%i0`'s zero bits are known to be `0xFF00` (upper half of every element is known zero),
but no elements are known to be zero, and for `%i1`, we don't know anything about zero bits,
but the elements under `0b1010` mask are known to be zero (i.e. the odd elements).

But, we didn't perform such a propagation.

Noticed while investigating more aggressive `vpmaddwd` formation.

Reviewed By: RKSimon

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

2 years ago[CodeGen] Place SDNode debug ID declaration under appropriate #if
Daniil Kovalev [Wed, 6 Apr 2022 11:08:17 +0000 (14:08 +0300)]
[CodeGen] Place SDNode debug ID declaration under appropriate #if

Place PersistentId declaration under #if LLVM_ENABLE_ABI_BREAKING_CHECKS to
reduce memory usage when it is not needed.

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

2 years ago[mlir] Fix DialectRegistry::addExtension compile error
Alex Zinenko [Wed, 6 Apr 2022 10:33:24 +0000 (12:33 +0200)]
[mlir] Fix DialectRegistry::addExtension compile error

It appears that the DialectRegistry::addExtension template was never
instantiated because it contains an obvious compilation error. Fix it.

Reviewed By: nicolasvasilache

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

2 years ago[clang][NFC] Add specificity to compatibility hack
Nathan Sidwell [Tue, 5 Apr 2022 11:55:04 +0000 (04:55 -0700)]
[clang][NFC] Add specificity to compatibility hack

Add specific dates and versions to note about source_location handling.

Reviewed By: aaron.ballman

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

2 years ago[DebugInfo][InstrRef] Avoid a crash from mixed variable location modes
Jeremy Morse [Wed, 6 Apr 2022 10:50:51 +0000 (11:50 +0100)]
[DebugInfo][InstrRef] Avoid a crash from mixed variable location modes

Variable locations now come in two modes, instruction referencing and
DBG_VALUE. At -O0 we pick DBG_VALUE to allow fast construction of variable
information. Unfortunately, SelectionDAG edits the optimisation level in
the presence of opt-bisect-limit, meaning different passes have different
views of what variable location mode we should use. That causes assertions
when they're mixed.

This patch plumbs through a boolean in SelectionDAG from start to
instruction emission, so that we don't rely on the current optimisation
level for correctness.

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

2 years ago[OpenCL] Remove argument names from math builtins
Sven van Haastregt [Wed, 6 Apr 2022 10:43:59 +0000 (11:43 +0100)]
[OpenCL] Remove argument names from math builtins

This simplifies completeness comparisons against OpenCLBuiltins.td and
also makes the header no longer "claim" the argument name identifiers.

Continues the direction set out in D119560.

2 years agoRevert "Revert "[mlir] Rewrite canonicalization of collapse(expand) and expand(collap...
Alexander Belyaev [Wed, 6 Apr 2022 09:58:21 +0000 (11:58 +0200)]
Revert "Revert "[mlir] Rewrite canonicalization of collapse(expand) and expand(collapse).""

This reverts commit 96e9b6c9dc60946f08399def879a19395bc98107.

2 years ago[AMDGPU] Add a test for setting WAVESIZE in pixel shaders
Jay Foad [Wed, 6 Apr 2022 09:59:25 +0000 (10:59 +0100)]
[AMDGPU] Add a test for setting WAVESIZE in pixel shaders

2 years ago[X86] Add test for smin(x, 0) & smax(x, 0)
Wei Xiao [Wed, 6 Apr 2022 09:28:26 +0000 (17:28 +0800)]
[X86] Add test for smin(x, 0) & smax(x, 0)

2 years ago[AMDGPU] Regenerate omod.ll tests
Simon Pilgrim [Wed, 6 Apr 2022 09:27:43 +0000 (10:27 +0100)]
[AMDGPU] Regenerate omod.ll tests

2 years ago[AMDGPU] Add a test for setting EXTRA_LDS_SIZE in pixel shaders
Jay Foad [Wed, 6 Apr 2022 09:49:43 +0000 (10:49 +0100)]
[AMDGPU] Add a test for setting EXTRA_LDS_SIZE in pixel shaders

2 years agoAdd support for more archs in `Triple::getArchTypeForLLVMName`
Antonio Frighetto [Wed, 6 Apr 2022 09:01:05 +0000 (10:01 +0100)]
Add support for more archs in `Triple::getArchTypeForLLVMName`

Add support for i386, s390x in Triple::getArchTypeForLLVMName.

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

2 years ago[docs] Fix Kaleidoscope code example
Roman Sokolkov [Wed, 6 Apr 2022 09:38:07 +0000 (10:38 +0100)]
[docs] Fix Kaleidoscope code example

* replace virtual with override
* use default like in full code example

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

2 years ago[DAG] Allow XOR(X,MIN_SIGNED_VALUE) to perform AddLike folds
Simon Pilgrim [Wed, 6 Apr 2022 09:37:07 +0000 (10:37 +0100)]
[DAG] Allow XOR(X,MIN_SIGNED_VALUE) to perform AddLike folds

As raised on PR52267, XOR(X,MIN_SIGNED_VALUE) can be treated as ADD(X,MIN_SIGNED_VALUE), so let these cases use the 'AddLike' folds, similar to how we perform no-common-bits OR(X,Y) cases.

define i8 @src(i8 %x) {
  %r = xor i8 %x, 128
  ret i8 %r
}
=>
define i8 @tgt(i8 %x) {
  %r = add i8 %x, 128
  ret i8 %r
}
Transformation seems to be correct!

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

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

2 years ago[mlir][bufferize][NFC] Clean up ModuleBufferizationState
Matthias Springer [Wed, 6 Apr 2022 09:01:41 +0000 (18:01 +0900)]
[mlir][bufferize][NFC] Clean up ModuleBufferizationState

* Store bbArg indices instead of BlockArguments, so that args can be changed during bufferizationn.
* Use type aliases for better readability.

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

2 years ago[X86] Remove TB_NO_REVERSE for 2 memory folding entries
Shengchen Kan [Wed, 6 Apr 2022 09:19:48 +0000 (17:19 +0800)]
[X86] Remove TB_NO_REVERSE for 2 memory folding entries

```
X86::MMX_MOVD64from64rr -> X86::MMX_MOVQ64mr
X86::MMX_MOVD64grr -> X86::MMX_MOVD64mr
```

These two entries were added in llvm-svn: 372770.
I think these two should be reversable.

Reviewed By: RKSimon, pengfei

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

2 years ago[mlir][MemRef] Allow transposed layouts in ExpandShapeOp.
Nicolas Vasilache [Wed, 6 Apr 2022 07:57:03 +0000 (03:57 -0400)]
[mlir][MemRef] Allow transposed layouts in ExpandShapeOp.

https://reviews.llvm.org/D122641 introduced fixes to the ExpandShapeOp verifier
but also introduced an artificial layout limitation that prevents the consideration of transposed layouts.

This revision fixes the omissions and reimplements the logic using saturated arithmetic which is more
idiomatic and avoids leaking internal implementation details.

Tests cases are added for transposed layouts.

Reviewed By: springerm

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

2 years ago[DAG] SimplifySetCC - relax fold (X^C1) == C2 --> X == C1^C2
Simon Pilgrim [Wed, 6 Apr 2022 08:18:08 +0000 (09:18 +0100)]
[DAG] SimplifySetCC - relax fold (X^C1) == C2 --> X == C1^C2

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

Remove limitation that wouldn't perform the fold if all the inverted bits are known zero

The thumb2 changes look to be benign, although it does show that the TEQ/TST isel patterns could probably be improved.

Fixes movmsk regression in D122754

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

2 years ago[cmake] Remove LLVM_ENABLE_NEW_PASS_MANAGER cmake option
Nikita Popov [Tue, 5 Apr 2022 13:05:46 +0000 (15:05 +0200)]
[cmake] Remove LLVM_ENABLE_NEW_PASS_MANAGER cmake option

Or rather, error out if it is set to something other than ON. This
removes the ability to enable the legacy pass manager by default,
but does not remove the ability to explicitly enable it through
various flags like -flegacy-pass-manager or -enable-new-pm=0.

I checked, and our test suite definitely doesn't pass with
LLVM_ENABLE_NEW_PASS_MANAGER=OFF anymore.

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

2 years ago[CMake][compiler-rt] Make CRT separately buildable
Petr Hosek [Mon, 28 Feb 2022 20:21:11 +0000 (12:21 -0800)]
[CMake][compiler-rt] Make CRT separately buildable

This is useful when building a complete toolchain to ensure that CRT
is built after builtins but before the rest of the compiler-rt.

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

2 years ago[CSKY] Add atomic expand pass to support atomic operation with libcall
Zi Xuan Wu [Wed, 6 Apr 2022 04:03:21 +0000 (12:03 +0800)]
[CSKY] Add atomic expand pass to support atomic operation with libcall

For now, just support atomic operations by libcall. Further, should investigate atomic
implementation in CSKY target and codegen with atomic and fence related instructions.

2 years ago[libcxx] [test] Remove UNSUPPORTED markings for mingw issues that no longer are prese...
Martin Storsjö [Thu, 10 Mar 2022 09:06:27 +0000 (11:06 +0200)]
[libcxx] [test] Remove UNSUPPORTED markings for mingw issues that no longer are present in CI

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

2 years agoFix warnings about variables that are set but only used in debug mode
Martin Storsjö [Tue, 5 Apr 2022 08:34:05 +0000 (11:34 +0300)]
Fix warnings about variables that are set but only used in debug mode

Add void casts to mark the variables used, next to the places where
they are used in assert or `LLVM_DEBUG()` expressions.

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

2 years agoRevert "[CMake][compiler-rt] Make CRT separately buildable"
Petr Hosek [Wed, 6 Apr 2022 07:01:06 +0000 (00:01 -0700)]
Revert "[CMake][compiler-rt] Make CRT separately buildable"

This reverts commit b89b18e350e11efc599f6ce2bb55cbec89a0efe1 since
it broke the sanitizer bots.

2 years ago[CMake][compiler-rt] Make CRT separately buildable
Petr Hosek [Mon, 28 Feb 2022 20:21:11 +0000 (12:21 -0800)]
[CMake][compiler-rt] Make CRT separately buildable

This is useful when building a complete toolchain to ensure that CRT
is built after builtins but before the rest of the compiler-rt.

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

2 years ago[X86][tablgen] Consider the mnemonic when auto-generating memory folding table
Shengchen Kan [Wed, 6 Apr 2022 04:52:18 +0000 (12:52 +0800)]
[X86][tablgen] Consider the mnemonic when auto-generating memory folding table

Intuitively, the memory folding pair should have the same mnemonic.

This patch removes
```
{X86::SENDUIPI,X86::VMXON}
```
in the auto-generated table.
And `NotMemoryFoldable` for `TPAUSE` and `CLWB` can be saved.
```
{X86::MOVLHPSrr,X86::MOVHPSrm}
{X86::VMOVLHPSZrr,X86::VMOVHPSZ128rm}
{X86::VMOVLHPSrr,X86::VMOVHPSrm}
```
It seems the three pairs above are mistakenly killed.
But we can add them back manually later.

Reviewed By: Amir

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

2 years ago[lldb/source/Utility/DataExtractor.cpp] Update for `llvm::MD5::MD5Result` API change
Argyrios Kyrtzidis [Wed, 6 Apr 2022 04:47:45 +0000 (21:47 -0700)]
[lldb/source/Utility/DataExtractor.cpp] Update for `llvm::MD5::MD5Result` API change

2 years ago[Support/Hash functions] Change the `final()` and `result()` of the hashing functions...
Argyrios Kyrtzidis [Mon, 4 Apr 2022 23:48:30 +0000 (16:48 -0700)]
[Support/Hash functions] Change the `final()` and `result()` of the hashing functions to return an array of bytes

Returning `std::array<uint8_t, N>` is better ergonomics for the hashing functions usage, instead of a `StringRef`:

* When returning `StringRef`, client code is "jumping through hoops" to do string manipulations instead of dealing with fixed array of bytes directly, which is more natural
* Returning `std::array<uint8_t, N>` avoids the need for the hasher classes to keep a field just for the purpose of wrapping it and returning it as a `StringRef`

As part of this patch also:

* Introduce `TruncatedBLAKE3` which is useful for using BLAKE3 as the hasher type for `HashBuilder` with non-default hash sizes.
* Make `MD5Result` inherit from `std::array<uint8_t, 16>` which improves & simplifies its API.

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

2 years agoPreserve aliasing info during memory intrinsics lowering
Evgeniy Brevnov [Tue, 25 Jan 2022 06:17:57 +0000 (13:17 +0700)]
Preserve aliasing info during  memory intrinsics lowering

By specification, source and destination of llvm.memcpy.* must either be equal or non-overlapping. This semantics is hard or impossible to figure out once lowered. This patch explicitly marks loads from source and stores to destination as not aliasing if source and destination is known to be not equal.

Reviewed By: arsenm

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

2 years ago[NFC][CSKY] Fix the test error in toolchain case in windows by add UNSUPPORTED: syste...
Zi Xuan Wu [Wed, 6 Apr 2022 04:16:38 +0000 (12:16 +0800)]
[NFC][CSKY] Fix the test error in toolchain case in windows by add UNSUPPORTED: system-windows

2 years ago[Attributor] Introduce AAInstanceInfo
Johannes Doerfert [Wed, 16 Mar 2022 20:53:32 +0000 (15:53 -0500)]
[Attributor] Introduce AAInstanceInfo

The Attributor, as many other parts in LLVM, uses pointer equivalence
for `llvm::Value`s. This only works as long as `llvm::Value`s are
dynamically unique, or, to be exact, we will never end up with the same
`llvm::Value` representing two dynamic instances. We already provided a
helper to check the former, namely `AA::isDynamicallyUnique`, however we
could not check the latter. In this patch we move the logic into a
separate AA which helps with the growing complexity and use cases. We
also extend the interface to answer the second question rather than the
first. So we do not determine dynamically uniqueness but if we might end
up with the `llvm::Value` describing a different dynamic instance. Note
that the latter is very much tied to the Attributor capabilities to look
through memory, recursion, etc. so we need to update the logic as we go.

2 years ago[Attributor] Keep loads feeding in `llvm.assume` if stores stays
Johannes Doerfert [Tue, 15 Mar 2022 17:32:28 +0000 (12:32 -0500)]
[Attributor] Keep loads feeding in `llvm.assume` if stores stays

If a load is only used by an `llvm.assume` and the stores feeding into
the load are not removable, keep the load.

2 years ago[gn build] Port 97e496054a37
LLVM GN Syncbot [Wed, 6 Apr 2022 03:38:24 +0000 (03:38 +0000)]
[gn build] Port 97e496054a37

2 years ago[Clang][CSKY] Add the CSKY target and compiler driver
Zi Xuan Wu [Tue, 29 Mar 2022 08:18:10 +0000 (16:18 +0800)]
[Clang][CSKY] Add the CSKY target and compiler driver

Add CSKY target toolchains to support csky in linux and elf environment.

It can leverage the basic universal Linux toolchain for linux environment, and only add some compile or link parameters.
For elf environment, add a CSKYToolChain to support compile and link.

Also add some parameters into basic codebase of clang driver.

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

2 years ago[RISCV][NFC] Remove '--check-prefixes=CHECK' in some cases as they are default
Ping Deng [Wed, 6 Apr 2022 03:17:54 +0000 (03:17 +0000)]
[RISCV][NFC] Remove '--check-prefixes=CHECK' in some cases as they are default

Reviewed By: frasercrmck

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

2 years ago[RISCV] [NFC] Add Immediate tests for the cmov instruction
Liqin Weng [Wed, 6 Apr 2022 03:08:27 +0000 (03:08 +0000)]
[RISCV] [NFC] Add Immediate tests for the cmov instruction

Reviewed By: craig.topper

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

2 years ago[mlir][LLVMIR] Add vector predication binary intrinsic ops.
jacquesguan [Sat, 2 Apr 2022 09:35:51 +0000 (17:35 +0800)]
[mlir][LLVMIR] Add vector predication binary intrinsic ops.

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

2 years ago[Clang][PowerPC] Add max/min intrinsics to Clang and PPC backend
Ting Wang [Wed, 6 Apr 2022 02:43:48 +0000 (22:43 -0400)]
[Clang][PowerPC] Add max/min intrinsics to Clang and PPC backend

Add support for builtin_[max|min] which has below prototype:
A builtin_max (A1, A2, A3, ...)
All arguments must have the same type; they must all be float, double, or long double.
Internally use SelectCC to get the result.

Reviewed By: qiucf

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

2 years agoMachineVerifier: Diagnose undef set on full register defs
Matt Arsenault [Wed, 30 Mar 2022 14:24:40 +0000 (10:24 -0400)]
MachineVerifier: Diagnose undef set on full register defs

An undef def of a full register would assert in LiveIntervalCalc.

2 years agoAMDGPU/GlobalISel: Handle legacy grid ID intrinsics
Matt Arsenault [Sat, 15 Jan 2022 15:53:05 +0000 (10:53 -0500)]
AMDGPU/GlobalISel: Handle legacy grid ID intrinsics

Handle the llvm.r600.* intrinsics which are still in use in libclc. I
thought it would be possible to switch it to using
llvm.amdgcn.implicitarg.ptr already, but it turns out the implicit
arguments are currently split into a piece before and after the
explicit kernel arguments.

2 years agoAMDGPU: Fix LiveVariables error after lowering SI_END_CF
Matt Arsenault [Thu, 20 Jan 2022 00:48:20 +0000 (19:48 -0500)]
AMDGPU: Fix LiveVariables error after lowering SI_END_CF

This wasn't accounting for the block change in updating LiveVariables.

2 years ago[AArch64] Enhance last active true vector combine
zhongyunde [Wed, 6 Apr 2022 01:48:12 +0000 (09:48 +0800)]
[AArch64] Enhance last active true vector combine

Last active extracting will output LASTB + WHILELS, and the WHILELS itself
is a flag-setting operation, so perform it preferly.

Reviewed By: paulwalker-arm, sdesmalen

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

2 years ago[Attributor] Remove broken and duplicated load simplification
Johannes Doerfert [Tue, 15 Mar 2022 17:34:28 +0000 (12:34 -0500)]
[Attributor] Remove broken and duplicated load simplification

We look through loads in the "generic value traversal" and we
consequently don't need to look through them again in AAValueSimplify*.
The test changes stem from the fact that we allowed any simplified
value, incl. non-dynamically unique ones, as long as the underlying
memory was an alloca. This doesn't seem to make sense as allocas do not
protect against dynamically non-unique values. We need to make the
unique check better rather than excluding allocas. That in mind, we can
remove a lot of code by simply relying on the generic value traversal
load look through.

To soften the blow some minor adjustments have been made that allow more
simplification through the now used scheme and some tests have been
given a `norecurse` for now.

2 years ago[Attributor] Move recursion reasoning into `AA::isPotentiallyReachable`
Johannes Doerfert [Tue, 15 Mar 2022 17:34:04 +0000 (12:34 -0500)]
[Attributor] Move recursion reasoning into `AA::isPotentiallyReachable`

With D106397 we ensured that `AAReachability` will not answer queries for
potentially recursive functions. This was necessary as we did not treat
recursion explicitly otherwise. Now that we have
`AA::isPotentiallyReachable` we can make `AAReachability` a purely
intra-procedural AA which does not care about recursion.
`AA::isPotentiallyReachable`, however, does already deal with "going
back" the call graph and can now do so for potentially recursive
functions.

2 years ago[WPD] Add statistics
Teresa Johnson [Tue, 5 Apr 2022 18:35:16 +0000 (11:35 -0700)]
[WPD] Add statistics

Add statistics to count overall devirtualized targets as well as the
various types of devirtualizations applied at callsites.

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

2 years agoMIRParser: Fix asserting with invalid flags on machine operands
Matt Arsenault [Mon, 28 Mar 2022 13:36:47 +0000 (09:36 -0400)]
MIRParser: Fix asserting with invalid flags on machine operands

Constructing an operand with kills on defs and deads on uses asserts
in the constructor, so diagnose these.

2 years agoRevert "[InstrProfiling] No runtime hook for unused funcs"
Gulfem Savrun Yeniceri [Wed, 6 Apr 2022 01:39:32 +0000 (01:39 +0000)]
Revert "[InstrProfiling] No runtime hook for unused funcs"

This reverts commit c7f91e227a799dfee05962bb108274dbfe809fee.
This patch caused an issue in Fuchsia source code coverage builders.

2 years ago[Clang][Sema] Prohibit statement expression in the default argument
Jun Zhang [Wed, 6 Apr 2022 00:45:46 +0000 (08:45 +0800)]
[Clang][Sema] Prohibit statement expression in the default argument

As statement expression makes no sense in the default argument,
this patch tries to disable it in the all cases.

Please note that the statement expression is a GNU extension, which
means that Clang should be consistent with GCC. However, there's no
response from GCC devs since we have raised the issue for several weeks.
In this case, I think we can disallow statement expressions as a default
parameter in general for now, and relax the restriction if GCC folks
decide to retain the feature for functions but not lambdas in the
future.

Related discussion: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=104765

Fixes https://github.com/llvm/llvm-project/issues/53488

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

2 years ago[unittests] fix intermittent SupportTests failures
Yuanfang Chen [Tue, 5 Apr 2022 19:47:09 +0000 (12:47 -0700)]
[unittests] fix intermittent SupportTests failures

by invoking `SupportTests --gtest_shuffle=1`.

`HideUnrelatedOptions`/`HideUnrelatedOptionsMulti` failed due to other
tests calling `cl::ResetCommandLineParser()` which causes default
options to be removed.

`ExitOnError` would hang due to the threading environment. Renaming it
as `*Deathtest` is the recommended practice by GTest docs.

2 years ago[mlir][sparse] avoid reserving dense storage for ptr/idx
Aart Bik [Tue, 5 Apr 2022 23:56:07 +0000 (16:56 -0700)]
[mlir][sparse] avoid reserving dense storage for ptr/idx

This avoids a rather big bug where we were reserving
dense space for the ptx/idx in the first sparse dimension.
For example, using CSR for a 140874 x 140874 matrix with
3977139 nonzero would reserve the full 19845483876 space.
This revision fixes this for now, but we need to revisit
the reservation heuristic to make this better.

Reviewed By: bixia

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

2 years ago[JITLink][MachO] Fix alignment bug in the c-string literal section graphifier.
Lang Hames [Wed, 6 Apr 2022 00:04:55 +0000 (17:04 -0700)]
[JITLink][MachO] Fix alignment bug in the c-string literal section graphifier.

This function had been assuming a 1-byte alignment, which isn't always correct.
This commit updates it to take the alignment from the __cstring section.

The key change is to the createContentBlock call, but the surrounding code is
updated with clearer debugging output to support the testcase (and any future
debugging work).

2 years ago[MLIR] [Python] Pybind adaptors: coerce None to default MlirLocation
John Demme [Wed, 6 Apr 2022 00:10:20 +0000 (17:10 -0700)]
[MLIR] [Python] Pybind adaptors: coerce None to default MlirLocation

Add default source location coercion to enable location elision in
Python code.

2 years ago[clang] Corrections for target_clones multiversion functions.
Tom Honermann [Thu, 24 Mar 2022 19:39:49 +0000 (12:39 -0700)]
[clang] Corrections for target_clones multiversion functions.

This change merges code for emit of target and target_clones multiversion
resolver functions and, in doing so, corrects handling of target_clones
functions that are declared but not defined. Previously, a use of such
a target_clones function would result in an attempted emit of an ifunc
that referenced an undefined resolver function. Ifunc references to
undefined resolver functions are not allowed and, when the LLVM verifier
is not disabled (via '-disable-llvm-verifier'), resulted in the verifier
issuing a "IFunc resolver must be a definition" error and aborting the
compilation. With this change, ifuncs and resolver function definitions
are always emitted for used target_clones functions regardless of whether
the target_clones function is defined (if the function is defined, then
the ifunc and resolver are emitted regardless of whether the function is
used).

This change has the side effect of causing target_clones variants and
resolver functions to be emitted in a different order than they were
previously. This is harmless and is reflected in the updated tests.

Reviewed By: erichkeane

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

2 years ago[clang] NFC: Preparation for merging code to emit target and target_clones resolvers.
Tom Honermann [Fri, 1 Apr 2022 20:14:41 +0000 (13:14 -0700)]
[clang] NFC: Preparation for merging code to emit target and target_clones resolvers.

This change modifies CodeGenModule::emitMultiVersionFunctions() in preparation
for a change that will merge support for emitting target_clones resolvers into
this function. This change mostly serves to isolate indentation changes from
later behavior modifying changes.

Reviewed By: erichkeane

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

2 years ago[clang] NFC: Simplify the interface to CodeGenModule::GetOrCreateMultiVersionResolver().
Tom Honermann [Fri, 1 Apr 2022 04:48:28 +0000 (21:48 -0700)]
[clang] NFC: Simplify the interface to CodeGenModule::GetOrCreateMultiVersionResolver().

Previously, GetOrCreateMultiVersionResolver() required the caller to provide
a GlobalDecl along with an llvm::type and FunctionDecl. The latter two can be
cheaply obtained from the first, and the llvm::type parameter is not always
used, so requiring the caller to provide them was unnecessary and created the
possibility that callers would pass an inconsistent set. This change simplifies
the interface to only require the GlobalDecl value.

Reviewed By: erichkeane

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

2 years ago[clang] NFC: Enhance comments in CodeGen for multiversion function support.
Tom Honermann [Thu, 31 Mar 2022 21:48:36 +0000 (14:48 -0700)]
[clang] NFC: Enhance comments in CodeGen for multiversion function support.

Reviewed By: erichkeane

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

2 years ago[libc++] Remove error about _LIBCPP_ALTERNATE_STRING_LAYOUT not being supported anymore
Louis Dionne [Tue, 5 Apr 2022 23:44:44 +0000 (19:44 -0400)]
[libc++] Remove error about _LIBCPP_ALTERNATE_STRING_LAYOUT not being supported anymore

It's been over two years since I added the temporary error, so I think
it's reasonable to remove it now.

2 years ago[libc++][NFC] Remove stray whitespace in comment
Louis Dionne [Tue, 5 Apr 2022 23:43:46 +0000 (19:43 -0400)]
[libc++][NFC] Remove stray whitespace in comment

2 years ago[Attributor] Visit droppable uses in AAIsDead
Johannes Doerfert [Tue, 15 Mar 2022 17:33:45 +0000 (12:33 -0500)]
[Attributor] Visit droppable uses in AAIsDead

If we ignore droppable users everything only used in llvm.assume (among
other things) is going to be deleted as dead. This is not helpful.
Instead we want to only delete things we actually don't need anymore. A
follow up will deal with loads in a smarter way.

2 years ago[Attributor][NFC] Pre-commit new test case
Johannes Doerfert [Tue, 15 Mar 2022 14:11:34 +0000 (09:11 -0500)]
[Attributor][NFC] Pre-commit new test case

2 years agoFix bazel build.
Jorge Gorbe Moya [Tue, 5 Apr 2022 22:45:53 +0000 (15:45 -0700)]
Fix bazel build.

- https://reviews.llvm.org/D122619 bumped zlib version but didn't change
  the hash

- Added new header from https://reviews.llvm.org/D108438