platform/upstream/llvm.git
2 years ago[JITLink] Add missing moves from 43acef48d38e.
Lang Hames [Fri, 15 Apr 2022 19:57:19 +0000 (12:57 -0700)]
[JITLink] Add missing moves from 43acef48d38e.

2 years ago[mlir][NFC] Cleanup the TestClone pass
River Riddle [Fri, 15 Apr 2022 19:55:15 +0000 (12:55 -0700)]
[mlir][NFC] Cleanup the TestClone pass

Fix variable naming convention and cleanup a clang-tidy warning.

2 years ago[mlir] Remove the use of FilterTypes for template metaprogramming
River Riddle [Fri, 8 Apr 2022 04:36:40 +0000 (21:36 -0700)]
[mlir] Remove the use of FilterTypes for template metaprogramming

This technique results in an explosion in compile time, resulting from a
huge number of std::tuple/concat instatiations. This technique is replaced
by simpler metaprogramming and results in a signficant reduction in
compile time. A local debug/asan build saw a 4x speed up in the processing
of ArithmeticOps.h.inc, and given the nature of this change every dialect
should see similar reductions in compile time.

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

2 years ago[Attributor][NFC] Introduce a flag to distinguish the scope of a query
Johannes Doerfert [Tue, 12 Apr 2022 21:38:11 +0000 (16:38 -0500)]
[Attributor][NFC] Introduce a flag to distinguish the scope of a query

2 years ago[Attributor] CGSCC pass should not recompute results outside the SCC
Johannes Doerfert [Tue, 12 Apr 2022 21:24:37 +0000 (16:24 -0500)]
[Attributor] CGSCC pass should not recompute results outside the SCC

When we run the CGSCC pass we should only invest time on the SCC. We can
initialize AAs with information from the module slice but we should not
update those AAs.

2 years ago[Attributor][NFC] Code cleanup to minimize follow up changes
Johannes Doerfert [Tue, 12 Apr 2022 21:05:32 +0000 (16:05 -0500)]
[Attributor][NFC] Code cleanup to minimize follow up changes

2 years ago[Attributor][NFC] Rename AAPotentialValues to AAPotentialConstantValues
Johannes Doerfert [Sat, 9 Apr 2022 16:45:32 +0000 (11:45 -0500)]
[Attributor][NFC] Rename AAPotentialValues to AAPotentialConstantValues

2 years ago[JITLink] Refactor and expand DWARF pointer encoding support.
Lang Hames [Fri, 15 Apr 2022 18:22:26 +0000 (11:22 -0700)]
[JITLink] Refactor and expand DWARF pointer encoding support.

Adds support for pointer encodings commonly used in large/static models,
including non-pcrel, sdata/udata8, indirect, and omit.

Also refactors pointer-encoding handling to consolidate error generation inside
common functions, rather than callees of those functions.

2 years ago[test][LoopDeletion] Precommit test
Arthur Eubanks [Fri, 15 Apr 2022 19:38:11 +0000 (12:38 -0700)]
[test][LoopDeletion] Precommit test

2 years ago[MLIR][Presburger] addSymbolicCut: fix the integral symbols heuristic to match the...
Arjun P [Tue, 12 Apr 2022 12:07:25 +0000 (13:07 +0100)]
[MLIR][Presburger] addSymbolicCut: fix the integral symbols heuristic to match the docs

Previously this checked if the entire symbolic numerator was divisible by the
denominator, which is never the case when this function is called. Fixed this to
check only the non-const coefficients in the numerator, which was what was
intended and documented.

Reviewed By: Groverkss

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

2 years ago[randstruct] Enforce using a designated init for a randomized struct
Bill Wendling [Fri, 15 Apr 2022 18:37:52 +0000 (11:37 -0700)]
[randstruct] Enforce using a designated init for a randomized struct

A randomized structure needs to use a designated or default initializer.
Using a non-designated initializer will result in values being assigned
to the wrong fields.

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

2 years ago[gn build] Port 721651be246e
LLVM GN Syncbot [Fri, 15 Apr 2022 19:23:18 +0000 (19:23 +0000)]
[gn build] Port 721651be246e

2 years ago[mlir][vector] Fix bug in extractFromBroadcast folding
Thomas Raoux [Fri, 15 Apr 2022 18:44:43 +0000 (18:44 +0000)]
[mlir][vector] Fix bug in extractFromBroadcast folding

extract was incorrectly folded when the source was coming from a
broadcast that was both adding new rank and broadcasting the inner
dimension.

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

2 years ago[Support][cmake] Fix snmalloc integration. NFC.
Alexandre Ganea [Mon, 11 Apr 2022 21:22:53 +0000 (17:22 -0400)]
[Support][cmake] Fix snmalloc integration. NFC.

When using LLVM_INTEGRATED_CRT_ALLOC, fix compiling with the latest snmalloc at ToT (https://github.com/microsoft/snmalloc).

2 years ago[HLSL][clang][Driver] Support target profile command line option.
Xiang Li [Fri, 15 Apr 2022 19:09:10 +0000 (14:09 -0500)]
[HLSL][clang][Driver] Support target profile command line option.

The target profile option(/T) decide the shader model when compile hlsl.
The format is shaderKind_major_minor like ps_6_1.
The shader model is saved as llvm::Triple is clang/llvm like
dxil-unknown-shadermodel6.1-hull.
The main job to support the option is translating ps_6_1 into
shadermodel6.1-pixel.
That is done inside tryParseProfile  at HLSL.cpp.

To integrate the option into clang Driver, a new DriverMode DxcMode is
created. When DxcMode is enabled, OSType for TargetTriple will be
forced into Triple::ShaderModel. And new ToolChain HLSLToolChain will
be created when OSType is Triple::ShaderModel.

In HLSLToolChain, ComputeEffectiveClangTriple is overridden to call
tryParseProfile when targetProfile option is set.

To make test work, Fo option is added and .hlsl is added for active
-xhlsl.

Reviewed By: beanz

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

Patch by: Xiang Li <python3kgae@outlook.com>

2 years ago[MLIR][Presburger][Simplex] moveRowUnknownToColumn: support the row sample value...
Arjun P [Tue, 12 Apr 2022 13:20:32 +0000 (14:20 +0100)]
[MLIR][Presburger][Simplex] moveRowUnknownToColumn: support the row sample value being zero

When the sample value is zero, everything is the same except that failure to
pivot does not imply emptiness. So, leave it to the user to mark as empty if
necessary, if they know the sample value is strictly negative. This is needed
for an upcoming symbolic lexmin heuristic.

Reviewed By: Groverkss

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

2 years ago[MLIR][ClonePass] Attempt fix for anonymous pass name
William S. Moses [Fri, 15 Apr 2022 19:14:06 +0000 (15:14 -0400)]
[MLIR][ClonePass] Attempt fix for anonymous pass name

2 years agoFix size of flexible array initializers, and re-enable assertions.
Eli Friedman [Thu, 14 Apr 2022 22:20:37 +0000 (15:20 -0700)]
Fix size of flexible array initializers, and re-enable assertions.

In D123649, I got the formula for getFlexibleArrayInitChars slightly
wrong: the flexible array elements can be contained in the tail padding
of the struct.  Fix the formula to account for that.

With the fixed formula, we run into another issue: in some cases, we
were emitting extra padding for flexible arrray initializers. Fix
CGExprConstant so it uses a packed struct when necessary, to avoid this
extra padding.

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

2 years ago[LLDB][NativePDB] Followup c50817d1bea4ac51ed776154014630a439176de6
Zequan Wu [Fri, 15 Apr 2022 19:08:38 +0000 (12:08 -0700)]
[LLDB][NativePDB] Followup c50817d1bea4ac51ed776154014630a439176de6

2 years ago[mlir] Fix BUILD issues and dependencies.
rdzhabarov [Fri, 15 Apr 2022 18:59:03 +0000 (18:59 +0000)]
[mlir] Fix BUILD issues and dependencies.

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

2 years ago[LLDB][NativePDB] Don't create inlined function parameters when it's malformed.
Zequan Wu [Fri, 15 Apr 2022 18:59:00 +0000 (11:59 -0700)]
[LLDB][NativePDB] Don't create inlined function parameters when it's malformed.

2 years ago[DWARF][FIX] Handle the use of multiple registers gracefully
Johannes Doerfert [Wed, 13 Apr 2022 19:39:15 +0000 (14:39 -0500)]
[DWARF][FIX] Handle the use of multiple registers gracefully

Certain applications crashed for us with the AMDGPU backend. While this
is not a proper fix it allows us to compile the code for now. I left a
TODO for someone that understands DWARF.

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

2 years ago[AMDGPU][FIX] Proper load-store-vectorizer result with opaque pointers
Johannes Doerfert [Wed, 13 Apr 2022 17:35:34 +0000 (12:35 -0500)]
[AMDGPU][FIX] Proper load-store-vectorizer result with opaque pointers

The original code relied on the fact that we needed a bitcast
instruction (for non constant base objects). With opaque pointers there
might not be a bitcast. Always check if reordering is required instead.

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

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

2 years ago[NFC] Update comments
William S. Moses [Fri, 15 Apr 2022 18:32:44 +0000 (14:32 -0400)]
[NFC] Update comments

2 years agoFix an edge case in determining is a function has a prototype
Aaron Ballman [Fri, 15 Apr 2022 18:03:46 +0000 (14:03 -0400)]
Fix an edge case in determining is a function has a prototype

Given the declaration:

  typedef void func_t(unsigned);
  __attribute__((noreturn)) func_t func;

we would incorrectly determine that `func` had no prototype because the
`noreturn` attribute would convert the underlying type directly into a
FunctionProtoType, but the declarator for `func` itself was not one for
a function with a prototype. This adds an additional check for when the
declarator is a type representation for a function with a prototype.

2 years ago[LLDB][NativePDB] Fix subfield_register_simple_type.s test
Zequan Wu [Fri, 15 Apr 2022 17:36:06 +0000 (10:36 -0700)]
[LLDB][NativePDB] Fix subfield_register_simple_type.s test

2 years ago[mlir] Update LICM to support Graph Regions
Mogball [Tue, 12 Apr 2022 00:50:20 +0000 (00:50 +0000)]
[mlir] Update LICM to support Graph Regions

Changes the algorithm of LICM to support graph regions (no guarantee of topologically sorted order). Also fixes an issue where ops with recursive side effects and regions would not be hoisted if any nested ops used operands that were defined within the nested region.

Reviewed By: rriddle

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

2 years ago[PGO] Remove legacy PM passes
Fangrui Song [Fri, 15 Apr 2022 17:26:43 +0000 (10:26 -0700)]
[PGO] Remove legacy PM passes

Legacy PM for optimization pipeline was deprecated in 13.0.0 and Clang dropped
legacy PM support in D123609. This change removes legacy PM passes for PGO so
that downstream projects won't be able to use it. It seems appropriate to start
removing such "add-on" features like instrumentations, before we remove more
stuff after 15.x is branched.

I have checked many LLVM users and only ldc[1] uses the legacy PGO pass.

[1]: https://github.com/ldc-developers/ldc/issues/3961

Reviewed By: davidxl

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

2 years ago[MLIR] Fix operation clone
William S. Moses [Sat, 26 Mar 2022 18:42:15 +0000 (14:42 -0400)]
[MLIR] Fix operation clone

Operation clone is currently faulty.

Suppose you have a block like as follows:

```
(%x0 : i32) {
   %x1 = f(%x0)
   return %x1
}
```

The test case we have is that we want to "unroll" this, in which we want to change this to compute `f(f(x0))` instead of just `f(x0)`. We do so by making a copy of the body at the end of the block and set the uses of the argument in the copy operations with the value returned from the original block.
This is implemented as follows:
1) map to the block arguments to the returned value (`map[x0] = x1`).
2) clone the body

Now for this small example, this works as intended and we get the following.

```
(%x0 : i32) {
   %x1 = f(%x0)
   %x2 = f(%x1)
   return %x2
}
```

This is because the current logic to clone `x1 = f(x0)` first looks up the arguments in the map (which finds `x0` maps to `x1` from the initialization), and then sets the map of the result to the cloned result (`map[x1] = x2`).

However, this fails if `x0` is not an argument to the op, but instead used inside the region, like below.

```
(%x0 : i32) {
   %x1 = f() {
      yield %x0
   }
   return %x1
}
```

This is because cloning an op currently first looks up the args (none), sets the map of the result (`map[%x1] = %x2`), and then clones the regions. This results in the following, which is clearly illegal:

```
(%x0 : i32) {
   %x1 = f() {
      yield %x0
   }
   %x2 = f() {
      yield %x2
   }
   return %x2
}
```

Diving deeper, this is partially due to the ordering (how this PR fixes it), as well as how region cloning works. Namely it will first clone with the mapping, and then it will remap all operands. Since the ordering above now has a map of `x0 -> x1` and `x1 -> x2`, we end up with the incorrect behavior here.

Reviewed By: ftynse

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

2 years ago[flang] Fix Symbol::Rank for ProcEntityDetails
Peter Klausler [Wed, 6 Apr 2022 22:55:53 +0000 (15:55 -0700)]
[flang] Fix Symbol::Rank for ProcEntityDetails

When a procedure pointer or procedure dummy argument has a
defined interface, the rank of the pointer (or dummy) is the
rank of the interface.

Also tweak code discovered in shape analysis when investigating
this problam so that it returns a vector of emptied extents rather
than std::nullopt when the extents are not scope-invariant, so that
the rank can at least be known.

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

2 years ago[mlir][ods][NFC] Move enum attribute definitions from OpBase.td to EnumAttr.td
jfurtek [Fri, 15 Apr 2022 16:41:56 +0000 (16:41 +0000)]
[mlir][ods][NFC] Move enum attribute definitions from OpBase.td to EnumAttr.td

This diff moves `EnumAttr` tablegen definitions (specifically, `IntEnumAttr` and
`BitEnumAttr`-related classes) from `OpBase.td` to `EnumAttr.td`. No
functionality is changed.

Reviewed By: rriddle

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

2 years ago[mlir] Support opaque types in LLVM IR -> MLIR translation
Alex Zinenko [Fri, 15 Apr 2022 10:00:55 +0000 (12:00 +0200)]
[mlir] Support opaque types in LLVM IR -> MLIR translation

LLVM IR is moving towards adoption of opaque pointer types. These require extra
information to be passed when constructing some operations, in particular GEP
and Alloca. Adapt the builders of said operations and modify the translation
code to handle both opaque and non-opaque pointers.

This incidentally adds the translation for Alloca alignment and fixes the translation
of struct-related GEP indices that must be constant.

Reviewed By: wsmoses

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

2 years agoProperly identify builtins in a diagnostic note
Aaron Ballman [Fri, 15 Apr 2022 15:45:52 +0000 (11:45 -0400)]
Properly identify builtins in a diagnostic note

When emitting a "conflicting types" warning for a function declaration,
it's more clear to diagnose the previous declaration specifically as
being a builtin if it one.

2 years agoClean up `OMPAtomicDirective::Create`
Shilei Tian [Fri, 15 Apr 2022 15:39:04 +0000 (11:39 -0400)]
Clean up `OMPAtomicDirective::Create`

2 years ago[VP] Rename ISD::VP_FPROUND and ISD::VP_FPEXT
Fraser Cormack [Fri, 15 Apr 2022 08:34:04 +0000 (09:34 +0100)]
[VP] Rename ISD::VP_FPROUND and ISD::VP_FPEXT

Rename them to be more closely related to their non-VP counterparts.

Reviewed By: jacquesguan, ym1813382441

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

2 years ago[NFC][UpdateTestChecks] Fix whitespace in common.py and asm.py
Daniil Kovalev [Fri, 15 Apr 2022 15:11:24 +0000 (18:11 +0300)]
[NFC][UpdateTestChecks] Fix whitespace in common.py and asm.py

While working on D122986, noticed that indentation size varies even within
one file. Fixed that - now indentation is 2 spaces everywhere. This indentation

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

2 years ago[clang] Implement Change scope of lambda trailing-return-type
Corentin Jabot [Sun, 6 Feb 2022 21:58:43 +0000 (22:58 +0100)]
[clang] Implement Change scope of lambda trailing-return-type

Implement P2036R3.

Captured variables by copy (explicitely or not), are deduced
correctly at the point we know whether the lambda is mutable,
and ill-formed before that.

Up until now, the entire lambda declaration up to the start of the body would be parsed in the parent scope, such that capture would not be available to look up.

The scoping is changed to have an outer lambda scope, followed by the lambda prototype and body.

The lambda scope is necessary because there may be a template scope between the start of the lambda (to which we want to attach the captured variable) and the prototype scope.

We also need to introduce a declaration context to attach the captured variable to (and several parts of clang assume captures are handled from the call operator context), before we know the type of the call operator.

The order of operations is as follow:

* Parse the init capture in the lambda's parent scope

* Introduce a lambda scope

* Create the lambda class and call operator

* Add the init captures to the call operator context and the lambda scope. But the variables are not capured yet (because we don't know their type).
Instead, explicit  captures are stored in a temporary map that conserves the order of capture (for the purpose of having a stable order in the ast dumps).

* A flag is set on LambdaScopeInfo to indicate that we have not yet injected the captures.

* The parameters are parsed (in the parent context, as lambda mangling recurses in the parent context, we couldn't mangle a lambda that is attached to the context of a lambda whose type is not yet known).

* The lambda qualifiers are parsed, at this point We can switch (for the second time) inside the lambda context, unset the flag indicating that we have not parsed the lambda qualifiers,
record the lambda is mutable and capture the explicit variables.

* We can parse the rest of the lambda type, transform the lambda and call operator's types and also transform the call operator to a template function decl where necessary.

At this point, both captures and parameters can be injected in the body's scope. When trying to capture an implicit variable, if we are before the qualifiers of a lambda, we need to remember that the variables are still in the parent's context (rather than in the call operator's).

Reviewed By: aaron.ballman, #clang-language-wg, ChuanqiXu

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

2 years ago[NFC][Costmodel][LV][X86] Refresh one or two interleaved load/store tests
Roman Lebedev [Fri, 15 Apr 2022 13:24:46 +0000 (16:24 +0300)]
[NFC][Costmodel][LV][X86] Refresh one or two interleaved load/store tests

2 years ago[clang][deps] NFC: Update documentation
Jan Svoboda [Mon, 11 Apr 2022 08:20:38 +0000 (10:20 +0200)]
[clang][deps] NFC: Update documentation

2 years ago[clang][deps] NFC: Inline function with single caller
Jan Svoboda [Mon, 11 Apr 2022 08:20:20 +0000 (10:20 +0200)]
[clang][deps] NFC: Inline function with single caller

2 years ago[Clang][Sema] Fix invalid redefinition error in if/switch/for statement
Jun Zhang [Fri, 15 Apr 2022 07:14:38 +0000 (15:14 +0800)]
[Clang][Sema] Fix invalid redefinition error in if/switch/for statement

Clang should no longer incorrectly diagnose a variable declaration inside of a
lambda expression that shares the name of a variable in a containing
if/while/for/switch init statement as a redeclaration.

After this patch, clang is supposed to accept code below:

void foo() {
  for (int x = [] { int x = 0; return x; }(); ;) ;
}

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

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

2 years agoAdjust Bazel BUILD files for 6d45558c1
Dmitri Gribenko [Fri, 15 Apr 2022 13:45:18 +0000 (15:45 +0200)]
Adjust Bazel BUILD files for 6d45558c1

2 years ago[BOLT] Check if LLVM_REVISION is defined
Amir Ayupov [Fri, 15 Apr 2022 13:13:19 +0000 (06:13 -0700)]
[BOLT] Check if LLVM_REVISION is defined

Handle the case where LLVM_REVISION is undefined (due to LLVM_APPEND_VC_REV=OFF
or otherwise) by setting "<unknown>" value as before D123549.

Reviewed By: yota9

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

2 years agoFix failing test case found by bots:
Aaron Ballman [Fri, 15 Apr 2022 13:19:25 +0000 (09:19 -0400)]
Fix failing test case found by bots:

https://lab.llvm.org/buildbot#builders/109/builds/36683
https://lab.llvm.org/buildbot#builders/164/builds/15456
(and others)

2 years ago[clang][lex] NFC: Use FileEntryRef in PreprocessorLexer::getFileEntry()
Jan Svoboda [Fri, 15 Apr 2022 12:48:34 +0000 (14:48 +0200)]
[clang][lex] NFC: Use FileEntryRef in PreprocessorLexer::getFileEntry()

This patch changes the return type of `PreprocessorLexer::getFileEntry()` so that its clients may stop using the deprecated APIs of `FileEntry`.

Reviewed By: bnbarham

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

2 years ago[clang] NFCI: Use FileEntryRef in FileManagerTest
Jan Svoboda [Fri, 15 Apr 2022 12:48:27 +0000 (14:48 +0200)]
[clang] NFCI: Use FileEntryRef in FileManagerTest

This patch removes use of the deprecated `{File,Directory}Entry::getName()` from `FileManager` unit tests by using `{File,Directory}EntryRef` instead.

Reviewed By: bnbarham

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

2 years ago[clang] NFCI: Use DirectoryEntryRef in collectIncludePCH
Jan Svoboda [Fri, 15 Apr 2022 12:48:19 +0000 (14:48 +0200)]
[clang] NFCI: Use DirectoryEntryRef in collectIncludePCH

This patch removes use of the deprecated `DirectoryEntry::getName()` from `collectIncludePCH` by using `{File,Directory}EntryRef` instead.

Reviewed By: bnbarham

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

2 years ago[clang][CodeGen] NFCI: Use FileEntryRef
Jan Svoboda [Fri, 15 Apr 2022 12:48:01 +0000 (14:48 +0200)]
[clang][CodeGen] NFCI: Use FileEntryRef

This patch removes use of the deprecated `DirectoryEntry::getName()` from clangCodeGen by using `{File,Directory}EntryRef` instead.

Reviewed By: bnbarham

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

2 years ago[clang][parse] NFCI: Use FileEntryRef in Parser::ParseModuleImport()
Jan Svoboda [Fri, 15 Apr 2022 12:47:34 +0000 (14:47 +0200)]
[clang][parse] NFCI: Use FileEntryRef in Parser::ParseModuleImport()

This patch removes use of the deprecated `DirectoryEntry::getName()` from `Parser` by using `{File,Directory}EntryRef` instead.

Reviewed By: bnbarham

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

2 years ago[C89/C2x] Diagnose calls to a function without a prototype but passes arguments
Aaron Ballman [Fri, 15 Apr 2022 13:07:28 +0000 (09:07 -0400)]
[C89/C2x] Diagnose calls to a function without a prototype but passes arguments

This catches places where a function without a prototype is
accidentally used, potentially passing an incorrect number of
arguments, and is a follow-up to the work done in
https://reviews.llvm.org/D122895 and described in the RFC
(https://discourse.llvm.org/t/rfc-enabling-wstrict-prototypes-by-default-in-c).
The diagnostic is grouped under the new -Wdeprecated-non-prototypes
warning group and is enabled by default.

The diagnostic is disabled if the function being called was implicitly
declared (the user already gets an on-by-default warning about the
creation of the implicit function declaration, so no need to warn them
twice on the same line). Additionally, the diagnostic is disabled if
the declaration of the function without a prototype was in a location
where the user explicitly disabled deprecation warnings for functions
without prototypes (this allows the provider of the API a way to
disable the diagnostic at call sites because the lack of prototype is
intentional).

2 years ago[mlir][vector] Reorder elementwise(transpose)
Lei Zhang [Fri, 15 Apr 2022 12:57:24 +0000 (08:57 -0400)]
[mlir][vector] Reorder elementwise(transpose)

Similar to the existing pattern for reodering cast(transpose),
this makes transpose following transpose and increases the chance
of embedding the transposition inside contraction op. Actually
cast ops are just special instances of elementwise ops.

Reviewed By: ThomasRaoux

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

2 years ago[AArch64] Async unwind - Fix MTE codegen emitting frame adjustments in a loop
Momchil Velikov [Fri, 15 Apr 2022 11:19:02 +0000 (12:19 +0100)]
[AArch64] Async unwind - Fix MTE codegen emitting frame adjustments in a loop

When untagging the stack, the compiler may emit a sequence like:
```
        .LBB0_1:
          st2g sp, [sp], #32
          sub x8, x8, #32
          cbnz x8, .LBB0_1
          stg sp, [sp], #16
```
These stack adjustments cannot be described by CFI instructions.

This patch disables merging of SP update with untagging, i.e. makes the
compiler use an additional scratch register (there should be plenty
available at this point as we are in the epilogue) and generate:
```
            mov     x9, sp
            mov     x8, #256
            stg     x9, [x9], #16
    .LBB0_1:
            sub     x8, x8, #32
            st2g    x9, [x9], #32
            cbnz    x8, .LBB0_1
            add     sp, sp, #272
```
Merging is disabled only when we need to generate asynchronous unwind
tables.

Reviewed By: eugenis

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

2 years agoRequire asserts in newly added test
Roman Lebedev [Fri, 15 Apr 2022 12:56:37 +0000 (15:56 +0300)]
Require asserts in newly added test

2 years ago[UpdateTestChecks] Prevent rapid onset insanity when forced to write LoopVectorize...
Roman Lebedev [Fri, 15 Apr 2022 12:37:29 +0000 (15:37 +0300)]
[UpdateTestChecks] Prevent rapid onset insanity when forced to write LoopVectorize-driven costmodel tests

Subj, or on other words, we have a lot of tests that are driven by
the LoopVectorizer's debug output, but we don't have
any meaningful way to autogenerate checklines in them,
which means that an insurmountable amount of manual work
is required when modifying the appropriate cost models.

That is not sustainable, so this presents a solution.

Reviewed By: RKSimon

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

2 years ago[gn build] Port 1d83750f631d
LLVM GN Syncbot [Fri, 15 Apr 2022 11:44:38 +0000 (11:44 +0000)]
[gn build] Port 1d83750f631d

2 years ago[libc++] Implement ranges::copy{, _n, _if, _backward}
Nikolas Klauser [Fri, 15 Apr 2022 11:43:40 +0000 (13:43 +0200)]
[libc++] Implement ranges::copy{, _n, _if, _backward}

Reviewed By: Mordante, var-const, #libc

Spies: sstefan1, libcxx-commits, mgorny

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

2 years ago[AArch64][SelectionDAG] Refactor to support more scalable vector extending stores
zhongyunde [Fri, 15 Apr 2022 01:44:11 +0000 (09:44 +0800)]
[AArch64][SelectionDAG] Refactor to support more scalable vector extending stores

Similar to D122281, we should firstly exclude all scalable vector extending
stores and then selectively enable those which we directly support.

Also merge integer and float scalable vector into scalable_vector_valuetypes.

Reviewed By: paulwalker-arm

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

2 years ago[gn build] (manually) port 6d45558c1a05d (MipsGenPostLegalizeGICombiner)
Nico Weber [Fri, 15 Apr 2022 11:05:15 +0000 (07:05 -0400)]
[gn build] (manually) port 6d45558c1a05d (MipsGenPostLegalizeGICombiner)

2 years ago[ExpandMemCmp] Properly expand `bcmp` to an equality pattern.
Clement Courbet [Fri, 15 Apr 2022 09:11:26 +0000 (11:11 +0200)]
[ExpandMemCmp] Properly expand `bcmp` to an equality pattern.

Before that change, constant-size `bcmp` would miss an opportunity to generate
a more efficient equality pattern and would generate a -1/0-1 pattern
instead.

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

2 years ago[NFC] Add test in preparation for D123849.
Clement Courbet [Fri, 15 Apr 2022 09:08:52 +0000 (11:08 +0200)]
[NFC] Add test in preparation for D123849.

2 years ago[WebAssembly] Remove TODO comment for IAS, NFC
Brad Smith [Fri, 15 Apr 2022 08:24:49 +0000 (04:24 -0400)]
[WebAssembly] Remove TODO comment for IAS, NFC

IAS has been enabled on WebAssembly since commit 0a55d3f557a74cfb459b24e442072302d5444baf.

2 years ago[UpdateTestChecks] Add NVPTX support in update_llc_test_checks.py
Daniil Kovalev [Fri, 15 Apr 2022 07:57:38 +0000 (10:57 +0300)]
[UpdateTestChecks] Add NVPTX support in update_llc_test_checks.py

This patch makes possible generating NVPTX assembly check lines with
update_llc_test_checks.py utility.

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

2 years agoApply clang-tidy fixes for readability-identifier-naming in TestTypes.cpp (NFC)
Mehdi Amini [Mon, 4 Apr 2022 00:18:47 +0000 (00:18 +0000)]
Apply clang-tidy fixes for readability-identifier-naming in TestTypes.cpp (NFC)

2 years agoApply clang-tidy fixes for modernize-use-default-member-init in ControlFlowSinkUtils...
Mehdi Amini [Mon, 4 Apr 2022 00:03:35 +0000 (00:03 +0000)]
Apply clang-tidy fixes for modernize-use-default-member-init in ControlFlowSinkUtils.cpp (NFC)

2 years ago[Driver] Move Lanai IAS enabling to Generic_GCC::IsIntegratedAssemblerDefault, NFC
Brad Smith [Fri, 15 Apr 2022 07:52:58 +0000 (03:52 -0400)]
[Driver] Move Lanai IAS enabling to Generic_GCC::IsIntegratedAssemblerDefault, NFC

Reviewed By: MaskRay, jpienaar

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

2 years ago[lit] Forward more sanitizer env in TestingConfig
Vitaly Buka [Fri, 15 Apr 2022 07:31:22 +0000 (00:31 -0700)]
[lit] Forward more sanitizer env in TestingConfig

2 years ago[NFC] Reformat a part of TestingConfig.py
Vitaly Buka [Fri, 15 Apr 2022 07:22:23 +0000 (00:22 -0700)]
[NFC] Reformat a part of TestingConfig.py

2 years ago[RISCV][NFC] Refactor VL patterns for vnsrl and vnsra
Lian Wang [Fri, 8 Apr 2022 02:51:12 +0000 (02:51 +0000)]
[RISCV][NFC] Refactor VL patterns for vnsrl and vnsra

Reviewed By: frasercrmck

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

2 years ago[ELF][ARM] Fix unneeded thunk for branches to hidden undefined weak
Fangrui Song [Fri, 15 Apr 2022 06:58:13 +0000 (23:58 -0700)]
[ELF][ARM] Fix unneeded thunk for branches to hidden undefined weak

Similar to D123750 for AArch64.

2 years agoAMDGPU: Add more mad_64_32 test cases
Nicolai Hähnle [Fri, 15 Apr 2022 04:50:57 +0000 (23:50 -0500)]
AMDGPU: Add more mad_64_32 test cases

Test the behavior when a MUL is used multiple times, as well as when it
is uniform.

Run the tests for gfx9 as well, which added S_MUL_HI_[IU]32.

2 years ago[mlir] Fix verification order of nested ops.
Chia-hung Duan [Fri, 15 Apr 2022 04:33:40 +0000 (04:33 +0000)]
[mlir] Fix verification order of nested ops.

In order to increase parallism, certain ops with regions and have the
IsIsolatedFromAbove trait will have their verification delayed. That
means the region verifier may access the invalid ops and may lead to a
crash.

Reviewed By: rriddle

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

2 years agoAMDGPU: Add mixed sign/zero-extend multiply-add test
Nicolai Hähnle [Fri, 15 Apr 2022 04:02:02 +0000 (23:02 -0500)]
AMDGPU: Add mixed sign/zero-extend multiply-add test

There's a missed opportunity here that a later patch will exploit.

2 years ago[flang][runtime] Don't skip input spaces when they are significant
Peter Klausler [Wed, 6 Apr 2022 21:42:29 +0000 (14:42 -0700)]
[flang][runtime] Don't skip input spaces when they are significant

When formatted input (not list-directed or NAMELIST) is in "BZ" mode,
either because a BZ control edit descriptor appeared in a FORMAT or
BLANK="ZERO" appeared in OPEN or READ, input editing must not skip
over blanks before or within the input field.

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

2 years ago[mlir] Update bazel file after adding nvgpu to nvvm conversion
Thomas Raoux [Fri, 15 Apr 2022 04:07:46 +0000 (04:07 +0000)]
[mlir] Update bazel file after adding nvgpu to nvvm conversion

2 years ago[LoongArch] Fix shared build. NFC.
Michael Liao [Fri, 15 Apr 2022 04:16:26 +0000 (00:16 -0400)]
[LoongArch] Fix shared build. NFC.

2 years ago[PGO][test] Fix memop_size_opt.ll
Fangrui Song [Fri, 15 Apr 2022 04:16:04 +0000 (21:16 -0700)]
[PGO][test] Fix memop_size_opt.ll

2 years ago[PGO][test] Remove duplicate --pgo-instr-memop tests
Fangrui Song [Fri, 15 Apr 2022 04:13:43 +0000 (21:13 -0700)]
[PGO][test] Remove duplicate --pgo-instr-memop tests

2 years ago[LoongArch] Add support for selecting constant materializations.
wanglei [Fri, 15 Apr 2022 03:43:36 +0000 (11:43 +0800)]
[LoongArch] Add support for selecting constant materializations.

Integer materializing can generate LU12I_W, ORI, LU32I_D, LU52I_D and
ADDI_W instructions.

According to the sign-extended behavior of these instructions
(except ORI), the generated instruction sequence can be improved.

For example, load -1 into general register:
The ADDI_W instruction performs the operation that the [31:0] bit data
in the general register `rj` plus the 12-bit immediate `simm12` sign
extension 32-bit data; the resultant [31:0] bit is sign extension, then
written into the general register `rd`.

Normal sequence:

```
lu12i.w $a0, -1
ori $a0, $a0, 2048
```

Improved with sign-extended instruction:

```
addi.w $a0, $zero,  -1
```

Reviewed By: SixWeining, MaskRay

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

2 years ago[mlir][vector] Add operations used for Vector distribution
Thomas Raoux [Wed, 13 Apr 2022 18:38:11 +0000 (18:38 +0000)]
[mlir][vector] Add operations used for Vector distribution

Add vector op warp_execute_on_lane_0 that will be used to do incremental
vector distribution in order to target warp level vector programming for
architectures with GPU-like SIMT programming model.
The idea behing the op is discussed further on discourse:
https://discourse.llvm.org/t/vector-vector-distribution-large-vector-to-small-vector/1983/23

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

2 years ago[PGO][test] Change opt -foo tests to -passes= and remove duplicates
Fangrui Song [Fri, 15 Apr 2022 03:35:35 +0000 (20:35 -0700)]
[PGO][test] Change opt -foo tests to -passes= and remove duplicates

2 years ago[mlir] Add assert to fail with more info (NFC)
Jacques Pienaar [Fri, 15 Apr 2022 02:54:12 +0000 (19:54 -0700)]
[mlir] Add assert to fail with more info (NFC)

This would have assert before during tensor type construction with
opaque error, assert and fail earlier now.

2 years ago[RISCV][VP] Add RVV codegen for vp.trunc.
jacquesguan [Tue, 12 Apr 2022 09:34:40 +0000 (09:34 +0000)]
[RISCV][VP] Add RVV codegen for vp.trunc.

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

2 years agoAdd missing word in llc docs
Michael Williamson [Fri, 15 Apr 2022 02:28:23 +0000 (22:28 -0400)]
Add missing word in llc docs

2 years ago[BOLT][NFC] Use LLVM_REVISION instead of BOLT_VERSION_STRING
Amir Ayupov [Fri, 15 Apr 2022 02:09:44 +0000 (19:09 -0700)]
[BOLT][NFC] Use LLVM_REVISION instead of BOLT_VERSION_STRING

Remove duplicate version string identification

Reviewed By: rafauler

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

2 years ago[mlir][LLVMIR] Add more vector predication intrinsic ops.
jacquesguan [Fri, 8 Apr 2022 03:38:40 +0000 (03:38 +0000)]
[mlir][LLVMIR] Add more vector predication intrinsic ops.

This revision adds vector predication select, merge and load/store intrinsic ops.

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

2 years ago[gcov][test] Change some legacy PM tests to new PM and remove others
Fangrui Song [Fri, 15 Apr 2022 02:12:14 +0000 (19:12 -0700)]
[gcov][test] Change some legacy PM tests to new PM and remove others

2 years agoclang/AMDGPU: Define macro for -munsafe-fp-atomics
Matt Arsenault [Thu, 14 Apr 2022 22:49:50 +0000 (18:49 -0400)]
clang/AMDGPU: Define macro for -munsafe-fp-atomics

The HIP headers want to use this to swap the implementation of the
function, rather than relying on backend expansion of the generic
atomic instruction.

Fixes: SWDEV-332998

2 years agoMips/GlobalISel: Add stub post-legalizer combiner
Matt Arsenault [Sun, 10 Apr 2022 16:08:10 +0000 (12:08 -0400)]
Mips/GlobalISel: Add stub post-legalizer combiner

This enables no combines, just adds the boilerplate for the new pass.

2 years ago[utils] Use git to checkout code instead of svn in building docker image
Xiaodong Liu [Fri, 15 Apr 2022 01:34:16 +0000 (01:34 +0000)]
[utils] Use git to checkout code instead of svn in building docker image

Reviewed By: sammccall

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

2 years agoFix MLIR website generation
Mehdi Amini [Fri, 15 Apr 2022 01:28:10 +0000 (01:28 +0000)]
Fix MLIR website generation

2 years agollvm-reduce: Handle cloning MachineFrameInfo and stack objects
Matt Arsenault [Wed, 13 Apr 2022 23:01:20 +0000 (19:01 -0400)]
llvm-reduce: Handle cloning MachineFrameInfo and stack objects

This didn't work at all before, and would assert on any frame
index. Also copy the other fields, which I believe should cover
everything. There are a few that are untested since MIR serialization
is apparently still missing them (isStatepointSpillSlot,
ObjectSSPLayout, and ObjectSExt/ObjectZExt).

2 years ago[flang] Accept TYPE(intrinsic type) in declarations only for non-extension type
Peter Klausler [Wed, 6 Apr 2022 21:00:40 +0000 (14:00 -0700)]
[flang] Accept TYPE(intrinsic type) in declarations only for non-extension type

To avoid clashing with names of user derived types, the redundant
syntax TYPE(intrinsic type spec) must be interpreted as a monomorphic
derived type when "intrinsic type spec" is a single word.  This
affects TYPE(BYTE) and TYPE(DOUBLECOMPLEX), but not TYPE(DOUBLE COMPLEX)
in free form source.

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

2 years ago[libomptarget] [amdgpu] Hostcall offset check should consider implicit args
Dhruva Chakrabarti [Thu, 14 Apr 2022 23:38:49 +0000 (23:38 +0000)]
[libomptarget] [amdgpu] Hostcall offset check should consider implicit args

Fixed hostcall offset check to compare against kernarg segment size
and implicit arguments. Improved the corresponding debug print.

Reviewed By: JonChesterfield

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

2 years agollvm-reduce: Inform MRI of used phys reg masks
Matt Arsenault [Wed, 13 Apr 2022 22:40:52 +0000 (18:40 -0400)]
llvm-reduce: Inform MRI of used phys reg masks

I'm not sure how to directly observe this invisible cache for a test.

2 years agollvm-reduce: Copy register allocation hints to clone
Matt Arsenault [Wed, 13 Apr 2022 21:39:04 +0000 (17:39 -0400)]
llvm-reduce: Copy register allocation hints to clone

2 years agoAMDGPU: Select i8/i16 global and flat atomic load/store
Matt Arsenault [Tue, 12 Apr 2022 22:10:02 +0000 (18:10 -0400)]
AMDGPU: Select i8/i16 global and flat atomic load/store

As far as I know these should be atomic anyway, as long as the address
is aligned. Unaligned atomics hit an ugly error in AtomicExpand.

2 years ago[flang] Defer NAMELIST group item name resolution
Peter Klausler [Wed, 6 Apr 2022 19:51:57 +0000 (12:51 -0700)]
[flang] Defer NAMELIST group item name resolution

Items in NAMELIST groups might be host-associated implicitly-typed
variables, but name resolution can't know that when the NAMELIST
appears in a specification part and the host's execution part has
not yet been analyzed.  So defer NAMELIST group item name resolution
to the end of the execution part.  This is safe because nothing
else in name resolution depends on whether a variable is in a
NAMELIST group or not.

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

2 years agoAMDGPU: Fix assert if v_mov_b32_dpp is last instruction in the block
Matt Arsenault [Fri, 8 Apr 2022 14:16:56 +0000 (10:16 -0400)]
AMDGPU: Fix assert if v_mov_b32_dpp is last instruction in the block

This can happen if the use instruction is a phi.

Fixes issue 49961

2 years agollvm-reduce: Fix asserting on undef virtual registers
Matt Arsenault [Wed, 13 Apr 2022 21:07:44 +0000 (17:07 -0400)]
llvm-reduce: Fix asserting on undef virtual registers

This was only populating the virtual register map for def operands
that appeared in the function, but that may not exist if there are
only undef uses.

2 years agollvm-reduce: Fix handling of generic virtual registers
Matt Arsenault [Wed, 13 Apr 2022 17:18:41 +0000 (13:18 -0400)]
llvm-reduce: Fix handling of generic virtual registers

Try to preserve register banks, types and names. Fixes the lowest
hanging fruit in issue 54894.