platform/upstream/llvm.git
2 years ago[gn build] port fe7a3cedf771 (llvm-debuginfo-analyzer)
Nico Weber [Mon, 17 Oct 2022 13:26:23 +0000 (09:26 -0400)]
[gn build] port fe7a3cedf771 (llvm-debuginfo-analyzer)

2 years ago[flang] Reconstruct binding tables for fir.dispatch codegen
Valentin Clement [Tue, 18 Oct 2022 10:12:11 +0000 (12:12 +0200)]
[flang] Reconstruct binding tables for fir.dispatch codegen

Binding tables are needed to perform the fir.dispatch code generation.
The binding tables are defined as fir.global from the initial lowering.
This patch adds the ability to reconstruct the binding tables information
and store the procedure name and binding index for later use by the
fir.dispatch code generation.
Tests will come with follow up patch that makes full use of this information.

Reviewed By: jeanPerier

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

2 years ago[MachineCombiner][RISCV] Precommit test for D135264
Anton Sidorenko [Thu, 15 Sep 2022 12:00:05 +0000 (15:00 +0300)]
[MachineCombiner][RISCV] Precommit test for D135264

2 years ago[flang][NFC] Simplify mapSymbolAttributes in symbol lowering
Jean Perier [Tue, 18 Oct 2022 09:07:47 +0000 (11:07 +0200)]
[flang][NFC] Simplify mapSymbolAttributes in symbol lowering

mapSymbolAttributes currently has a lot of very similar code for
each kind of explicit shape and scalar symbols.

Refactor it so that the change to lower symbols with fir.declare
can be added in centralized places instead of being scattered.
This is a preparation patch and fir.declare is not yet added.

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

2 years ago[AArch64] Make ACLE intrinsics always available part MTE
Daniel Kiss [Tue, 18 Oct 2022 08:35:10 +0000 (10:35 +0200)]
[AArch64] Make ACLE intrinsics always available part MTE

Make MTE intrinsics available in function scope too.
Followup from D133359.

Reviewed By: dmgreen

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

2 years ago[LLDB] Fix the build for ppc64le linux
Martin Storsjö [Tue, 18 Oct 2022 08:41:49 +0000 (08:41 +0000)]
[LLDB] Fix the build for ppc64le linux

812ad2167bd2e27f5d0dee07bb03a5910616e0b6 changed the signature of
RegisterValue::SetFromMemoryData.

2 years agoRevert "[AArch64] Make ACLE intrinsics always available part MTE"
Daniel Kiss [Tue, 18 Oct 2022 08:45:32 +0000 (10:45 +0200)]
Revert "[AArch64] Make ACLE intrinsics always available part MTE"

This reverts commit 09aaf190d93393d9e29d29a033cc3979589c5e84.

2 years ago[AArch64] Make ACLE intrinsics always available part MTE
Daniel Kiss [Tue, 18 Oct 2022 08:35:10 +0000 (10:35 +0200)]
[AArch64] Make ACLE intrinsics always available part MTE

Make MTE intrinsics available in function scope too.
Followup from D133359.

Reviewed By: dmgreen

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

2 years ago[mlir][llvm] Import matrix, vector, and assume intrinsics from LLVM IR.
Tobias Gysi [Tue, 18 Oct 2022 08:01:07 +0000 (11:01 +0300)]
[mlir][llvm] Import matrix, vector, and assume intrinsics from LLVM IR.

The revision adds support to import:
- matrix intrinsics
- vector reduce fadd/fmul intrinsics
- assume intrinsics
from LLVM IR.

Reviewed By: ftynse

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

2 years ago[CFG] Add const qualifier to isPotentiallyReachableFromMany() (NFC)
Nikita Popov [Tue, 18 Oct 2022 08:05:12 +0000 (10:05 +0200)]
[CFG] Add const qualifier to isPotentiallyReachableFromMany() (NFC)

Accept a const pointer for StopBB. Unfortunately the worklist has
to use non-const pointers due to LoopInfo interaction.

2 years agoRecommit [llvm-debuginfo-analyzer] (02/09) - Driver and documentation
Carlos Alberto Enciso [Tue, 18 Oct 2022 07:39:26 +0000 (08:39 +0100)]
Recommit [llvm-debuginfo-analyzer] (02/09) - Driver and documentation

Originally committed in fe7a3cedf77125a6309150d85cecbc20b1a31775

Reverted in 26dd64ba9cfabe5474bb207f3b7099965f81fed7

Buildbot failures:
https://lab.llvm.org/buildbot#builders/139/builds/29663
- unittest trigger an invalid assertion.

https://lab.llvm.org/buildbot#builders/196/builds/19665
- 'has virtual functions but non-virtual destructor' warning as error.

Recommitted with fix:
- Removed the assertion.
- Added virtual destructor.

2 years ago[OpenMP][OMPIRBuilder] Add generation of SIMD align assumptions to OMPIRBuilder
Dominik Adamski [Thu, 8 Sep 2022 11:39:18 +0000 (06:39 -0500)]
[OpenMP][OMPIRBuilder] Add generation of SIMD align assumptions to OMPIRBuilder

Currently generation of align assumptions for OpenMP simd construct is done
outside OMPIRBuilder for C code and it is not supported for Fortran.

According to OpenMP 5.0 standard (2.9.3) only pointers and arrays can be
aligned for C code.

If given aligned variable is pointer, then Clang generates the following set
of the LLVM IR isntructions to support simd align clause:

; memory allocation for pointer address:
%A.addr = alloca ptr, align 8
; some LLVM IR code
; Alignment instructions (alignment is equal to 32):
%0 = load ptr, ptr %A.addr, align 8
call void @llvm.assume(i1 true) [ "align"(ptr %0, i64 32) ]

If given aligned variable is array, then Clang generates the following set
of the LLVM IR isntructions to support simd align clause:

; memory allocation for array:
%B = alloca [10 x i32], align 16
; some LLVM IR code
; Alignment instructions (alignment is equal to 32):
%arraydecay = getelementptr inbounds [10 x i32], ptr %B, i64 0, i64 0
call void @llvm.assume(i1 true) [ "align"(ptr %arraydecay, i64 32) ]

OMPIRBuilder was modified to generate aligned assumptions. It generates only
llvm.assume calls. Frontend is responsible for generation of aligned pointer
and getting the default alignment value if user does not specify it in aligned
clause.

Unit and regression tests were added to check if aligned clause was handled correctly.

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

Reviewed By: jdoerfert

2 years ago[NFC] Reuse NonTrivialUnswitchCandidate instead of std::pair
Max Kazantsev [Tue, 18 Oct 2022 06:26:00 +0000 (13:26 +0700)]
[NFC] Reuse NonTrivialUnswitchCandidate instead of std::pair

2 years ago[doc] Fix invalid reference to `hasReturnArgument` matcher.
Clement Courbet [Tue, 18 Oct 2022 06:47:21 +0000 (08:47 +0200)]
[doc] Fix invalid reference to `hasReturnArgument` matcher.

The matcher is called `hasReturnValue`.

2 years ago[Clang] add DR tests for D128745
Yuanfang Chen [Tue, 18 Oct 2022 06:05:35 +0000 (23:05 -0700)]
[Clang] add DR tests for D128745

2 years ago[NFC][mlir] Remove redundant wording
Sheng [Tue, 18 Oct 2022 05:18:09 +0000 (05:18 +0000)]
[NFC][mlir] Remove redundant wording

"that provides" repeats two times.

2 years ago[clang-format] Correctly annotate star/amp in function pointer params
Emilia Dreamer [Tue, 11 Oct 2022 19:16:48 +0000 (22:16 +0300)]
[clang-format] Correctly annotate star/amp in function pointer params

Inside the arguments part of a function pointer declaration,
`determineStarAmpUsage` results in a binary operator rather than
pointers, because said parens are assumed to be an expression.

This patch correctly marks the argument parens of a function
pointer type as not an expression. Note that this fix already
existed for Objective-C blocks as part of f1f267b447f60528440d2c066b29ab014ae7f90f.
As Objective-C blocks and C/C++ function pointers share a lot
of the same logic, that fix also makes sense here.

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

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

2 years ago[NFC] Add missing ABI requirement from the previous patch
Chuanqi Xu [Tue, 18 Oct 2022 05:15:52 +0000 (13:15 +0800)]
[NFC] Add missing ABI requirement from the previous patch

2 years agoAdd ::mlir:: prefix to Attribute type in the generated code.
bixia1 [Tue, 18 Oct 2022 04:41:50 +0000 (21:41 -0700)]
Add ::mlir:: prefix to Attribute type in the generated code.

Reviewed By: mehdi_amini

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

2 years ago[CMake] Fix MIPSr6 build for compiler-rt
YunQiang Su [Tue, 18 Oct 2022 04:49:25 +0000 (04:49 +0000)]
[CMake] Fix MIPSr6 build for compiler-rt

The current version pass -mips64r2 or -mips32r2 options,
which make it failed to build on r6 platform.

In this patch: we detect whether we are MIPSr6 by
    _MIPS_ARCH_MIPS32R6/_MIPS_ARCH_MIPS64R6
The out and install path is set to the default triple instead of
hardcoded one, since the clang ask for it.

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

2 years ago[lld-macho][test] Rework map-file.s
Jez Ng [Tue, 18 Oct 2022 04:17:34 +0000 (00:17 -0400)]
[lld-macho][test] Rework map-file.s

Merge the checks done on the `c-string-literals` binary with those on
the main `test` binary. Also switch some checks to `-DAG` instead of
`-NEXT`. I'm about to extend this test, and this is easier to work with.

Reviewed By: #lld-macho, oontvoo

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

2 years ago[NFC] [C++20] [Modules] Test if the functions in importee are generated
Chuanqi Xu [Tue, 18 Oct 2022 03:32:34 +0000 (11:32 +0800)]
[NFC] [C++20] [Modules] Test if the functions in importee are generated

In O0, all the functions (except the always-inline-functions) in the importee
shouldn't be imported for compilation speeds.

But with optimizations, all the potentially called function in the
importee should be imported to not prevent any inter-procedural
optimizations (primarily inline), which is pretty important for runtime
performances.

This patch adds the tests for the feature.

2 years ago[libc]Identify which processors are completed for Math
Jeff Bailey [Tue, 18 Oct 2022 03:12:33 +0000 (03:12 +0000)]
[libc]Identify which processors are completed for Math

Switch from green checkmarks to the following legend:

X = x86_64
A = aarch64
a = arm32

Reviewed By: lntue

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

2 years ago[ODRHash] Hash `ObjCMethodDecl` and diagnose discovered mismatches.
Volodymyr Sapsai [Tue, 18 Oct 2022 01:48:24 +0000 (18:48 -0700)]
[ODRHash] Hash `ObjCMethodDecl` and diagnose discovered mismatches.

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

2 years ago[ODRHash] Rename `isDeclToBeProcessed` to `isSubDeclToBeProcessed`. NFC intended.
Volodymyr Sapsai [Tue, 18 Oct 2022 01:23:28 +0000 (18:23 -0700)]
[ODRHash] Rename `isDeclToBeProcessed` to `isSubDeclToBeProcessed`. NFC intended.

The method is used only for sub-Decls, so reflect that in the name.

2 years ago[RISCV] Optimize SELECT_CC when the true value of select is Constant
LiaoChunyu [Tue, 18 Oct 2022 01:21:47 +0000 (09:21 +0800)]
[RISCV] Optimize SELECT_CC when  the true value of select is Constant

(select (setcc lhs, rhs, CC), constant, falsev) -> (select (setcc lhs, rhs, InverseCC), falsev, constant)

This patch removes unnecessary copies

Reviewed By: craig.topper

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

2 years ago[mlir][sparse] implement simple codegen for insertion (and related ops)
Aart Bik [Tue, 18 Oct 2022 00:02:25 +0000 (17:02 -0700)]
[mlir][sparse] implement simple codegen for insertion (and related ops)

This is a proof of concept insertion implementation that sets up
the basic framework and implements it with push backs for just
sparse vectors. It adds insertion/compression through SSA values,
so that we properly update the memref after after pushback operation.

Note that properly using SSA values in sparsification is still TBD
but I will wait until Peiming's loop emitter is in to avoid conflicts.

Reviewed By: wrengr

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

2 years ago[NFC] use llvm_unreachable instead of return on switch which all cases are covered.
Xiang Li [Tue, 18 Oct 2022 00:47:48 +0000 (17:47 -0700)]
[NFC] use llvm_unreachable instead of return on switch which all cases are covered.

2 years agoMake sure Target::EvaluateExpression() passes up an error instead of silently droppin...
Adrian Prantl [Fri, 14 Oct 2022 23:45:01 +0000 (16:45 -0700)]
Make sure Target::EvaluateExpression() passes up an error instead of silently dropping it.

When UserExpression::Evaluate() fails and doesn't return a ValueObject there is no vehicle for returning the error in the return value.

This behavior can be observed by applying the following patch:

diff --git a/lldb/source/Target/Target.cpp b/lldb/source/Target/Target.cpp
index f1a311b7252c..58c03ccdb068 100644
--- a/lldb/source/Target/Target.cpp
+++ b/lldb/source/Target/Target.cpp
@@ -2370,6 +2370,7 @@ UserExpression *Target::GetUserExpressionForLanguage(
     Expression::ResultType desired_type,
     const EvaluateExpressionOptions &options, ValueObject *ctx_obj,
     Status &error) {
+  error.SetErrorStringWithFormat("Ha ha!");  return nullptr;
   auto type_system_or_err = GetScratchTypeSystemForLanguage(language);
   if (auto err = type_system_or_err.takeError()) {
     error.SetErrorStringWithFormat(

and then running

$ lldb -o "p 1"
(lldb) p 1
(lldb)

This patch fixes this by creating an empty result ValueObject that wraps the error.

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

2 years agoRevert "Make sure Target::EvaluateExpression() passes up an error instead of silently...
Adrian Prantl [Tue, 18 Oct 2022 00:27:10 +0000 (17:27 -0700)]
Revert "Make sure Target::EvaluateExpression() passes up an error instead of silently dropping it."

This reverts commit a31a5da3c7d7393749a43dbc678fd28fb94d07f6.

2 years ago[clangd] Update 'using enum' semantic highlighting testcase to use the 'definition...
Nathan Ridge [Tue, 18 Oct 2022 00:15:40 +0000 (20:15 -0400)]
[clangd] Update 'using enum' semantic highlighting testcase to use the 'definition' modifier

2 years ago[MLIR] Vectorize tensor.extract on 1-d tensor
Che-Yu Wu [Tue, 18 Oct 2022 00:03:47 +0000 (00:03 +0000)]
[MLIR] Vectorize tensor.extract on 1-d tensor

This patch implements the vectorization of tensor.extract for the
basic 1-d lookup case. It only vectorizes the tensor.extract to a
vector.gather when the op extracts value from an 1-d tensor.

Related discussion: https://github.com/iree-org/iree/issues/9198

Reviewed By: dcaballe

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

2 years ago[SPARC] Make calls to function with big return values work
Koakuma [Tue, 18 Oct 2022 00:01:55 +0000 (00:01 +0000)]
[SPARC] Make calls to function with big return values work

Implement CanLowerReturn and associated CallingConv changes for SPARC/SPARC64.

In particular, for SPARC64 there's new `RetCC_Sparc64_*` functions that handles the return case of the calling convention.
It uses the same analysis as `CC_Sparc64_*` family of funtions, but fails if the return value doesn't fit into the return registers.

This makes calls to functions with big return values converted to an sret function as expected, instead of crashing LLVM.

Reviewed By: MaskRay

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

2 years ago[clangd] Update testcase for issue 1222 to use the 'definition' modifier
Nathan Ridge [Mon, 17 Oct 2022 22:53:43 +0000 (18:53 -0400)]
[clangd] Update testcase for issue 1222 to use the 'definition' modifier

2 years ago[bazel] Port dd38f899803465dd2765d1601b3989df3bd53863 and fix 7732c97f52e72a0737aaafd...
Jordan Rupprecht [Mon, 17 Oct 2022 23:54:37 +0000 (16:54 -0700)]
[bazel] Port dd38f899803465dd2765d1601b3989df3bd53863 and fix 7732c97f52e72a0737aaafd19d1f3be9f26d1a20.

2 years ago[wasm-ld] Define a `__heap_end` symbol marking the end of allocated memory.
Dan Gohman [Mon, 17 Oct 2022 20:36:19 +0000 (13:36 -0700)]
[wasm-ld] Define a `__heap_end` symbol marking the end of allocated memory.

Define a `__heap_end` symbol that marks the end of the memory region
that starts at `__heap_base`. This will allow malloc implementations to
know how much memory they can use at `__heap_base` even if someone has
done a `memory.grow` before they can initialize their state.

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

2 years ago[NFC][SROA] Update comment to use opaque pointers for clarity
Arthur Eubanks [Mon, 17 Oct 2022 23:37:05 +0000 (16:37 -0700)]
[NFC][SROA] Update comment to use opaque pointers for clarity

2 years ago[ODRHash] Hash `ObjCProtocolDecl` and diagnose discovered mismatches.
Volodymyr Sapsai [Mon, 17 Oct 2022 23:21:59 +0000 (16:21 -0700)]
[ODRHash] Hash `ObjCProtocolDecl` and diagnose discovered mismatches.

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

2 years ago[libc] add putc, fputc, and putchar
Michael Jones [Fri, 14 Oct 2022 21:03:46 +0000 (14:03 -0700)]
[libc] add putc, fputc, and putchar

These three functions are simple, but needed for libc build testing.

Reviewed By: lntue

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

2 years ago[mlir][quant] Initial bytecode encoding for quantized types
Jacques Pienaar [Mon, 17 Oct 2022 23:28:46 +0000 (16:28 -0700)]
[mlir][quant] Initial bytecode encoding for quantized types

Add bytecode encoding for quantized types. These mostly follow the
storage representation of these.

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

2 years ago[BOLT][NFCI] Avoid calling registerName() twice
Maksim Panchenko [Mon, 17 Oct 2022 21:15:52 +0000 (14:15 -0700)]
[BOLT][NFCI] Avoid calling registerName() twice

Calling registerName() for the same symbol twice, even with a different
size, has no effect other than the lookup overhead. Avoid the
redundancy.

Fixes facebookincubator/BOLT#299

Reviewed By: Amir

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

2 years ago[NFC] Fix warning on no return after switch.
Xiang Li [Mon, 17 Oct 2022 22:50:49 +0000 (15:50 -0700)]
[NFC] Fix warning on no return after switch.

2 years agoDo not append terminating NUL to the binary string with embedded fatbin.
Artem Belevich [Wed, 12 Oct 2022 23:41:28 +0000 (16:41 -0700)]
Do not append terminating NUL to the binary string with embedded fatbin.

Extra NUL does not impact functionality of the generated code, but it confuses
various NVIDIA tools used to examine embedded GPU binaries.

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

2 years ago[libc++] Fix std::function's handling of blocks under Objc ARC
Louis Dionne [Tue, 11 Oct 2022 18:53:14 +0000 (14:53 -0400)]
[libc++] Fix std::function's handling of blocks under Objc ARC

Previously, some uses of std::function with blocks would crash when ARC was enabled.

rdar://100907096

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

2 years ago[libc++] Fix missing requires clause on variant operator<=>
Joe Loser [Mon, 17 Oct 2022 00:47:26 +0000 (18:47 -0600)]
[libc++] Fix missing requires clause on variant operator<=>

`std::variant::operator<=>` is missing a requires clause ensuring that
`operator<=>` only exists when all of the types in the variant are
`three_way_comparable`.

Add the missing requires clause and adjust the existing test which was
incorrect.

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

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

2 years ago[instsimplify] Move (extelt (inselt Vec, Value, Index), Index) -> Value from InstCombine
Daniel Sanders [Mon, 17 Oct 2022 18:25:56 +0000 (11:25 -0700)]
[instsimplify] Move (extelt (inselt Vec, Value, Index), Index) -> Value from InstCombine

As requested in https://reviews.llvm.org/D135625#3858141

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

2 years agoMake sure Target::EvaluateExpression() passes up an error instead of silently droppin...
Adrian Prantl [Fri, 14 Oct 2022 23:45:01 +0000 (16:45 -0700)]
Make sure Target::EvaluateExpression() passes up an error instead of silently dropping it.

When UserExpression::Evaluate() fails and doesn't return a ValueObject there is no vehicle for returning the error in the return value.

This behavior can be observed by applying the following patch:

diff --git a/lldb/source/Target/Target.cpp b/lldb/source/Target/Target.cpp
index f1a311b7252c..58c03ccdb068 100644
--- a/lldb/source/Target/Target.cpp
+++ b/lldb/source/Target/Target.cpp
@@ -2370,6 +2370,7 @@ UserExpression *Target::GetUserExpressionForLanguage(
     Expression::ResultType desired_type,
     const EvaluateExpressionOptions &options, ValueObject *ctx_obj,
     Status &error) {
+  error.SetErrorStringWithFormat("Ha ha!");  return nullptr;
   auto type_system_or_err = GetScratchTypeSystemForLanguage(language);
   if (auto err = type_system_or_err.takeError()) {
     error.SetErrorStringWithFormat(

and then running

$ lldb -o "p 1"
(lldb) p 1
(lldb)

This patch fixes this by creating an empty result ValueObject that wraps the error.

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

2 years ago[mlir][LLVMIR] Update LLVMIR fastmath to use EnumAttr tblgen classes
Jeremy Furtek [Mon, 17 Oct 2022 21:02:09 +0000 (14:02 -0700)]
[mlir][LLVMIR] Update LLVMIR fastmath to use EnumAttr tblgen classes

This diff updates the `fastmath` attribute in the LLVMIR dialect to use `tblgen`
classes that were developed after the initial LLVMIR `fastmath` implementation.
Using the `EnumAttr` `tblgen` classes brings the LLVMIR `fastmath` attribute in
line with other dialects, and eliminates some of the custom printing and parsing
code in the LLVMIR dialect.

Subsequent commits will further reduce the custom processing code for the LLVMIR
`fastmath` attribute by unifying printing/parsing functionality between the
LLVMIR and `arith` `fastmath` attributes. (The actual attributes will remain
separate, but the printing and parsing will be made generic, and will be usable
by other dialects/attributes.)

Reviewed By: ftynse

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

2 years agoRevert "llvm-reduce: Color output of child processes"
Arthur Eubanks [Mon, 17 Oct 2022 21:29:30 +0000 (14:29 -0700)]
Revert "llvm-reduce: Color output of child processes"

This reverts commit 86e9181ded7c5b6aa67a3a84089fce850c84f27a.

Seems to be causing bot failures: https://lab.llvm.org/buildbot#builders/5/builds/28313

Plus as noted on D135632 it seems to interact badly with parallel reduction.

2 years ago[HLSL] CodeGen hlsl resource binding.
Xiang Li [Sun, 16 Oct 2022 00:36:29 +0000 (17:36 -0700)]
[HLSL] CodeGen hlsl resource binding.

''register(ID, space)'' like register(t3, space1) will be translated into
i32 3, i32 1 as the last 2 operands for resource annotation metadata.

NamedMetadata for CBuffers and SRVs are added as "hlsl.srvs" and "hlsl.cbufs".

Reviewed By: beanz

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

2 years ago[lldb] Print newline between found types
Arthur Eubanks [Wed, 12 Oct 2022 23:18:44 +0000 (16:18 -0700)]
[lldb] Print newline between found types

Or else multiple entries end up overlapping on the same line.

Reviewed By: DavidSpickett

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

2 years ago[clangd] Implement semantic token modifier "definition"
Christian Kandeler [Mon, 17 Oct 2022 21:12:39 +0000 (17:12 -0400)]
[clangd] Implement semantic token modifier "definition"

Reviewed By: sammccall

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

2 years ago[mlir][ods] Do not print default-valued attributes when the value is equal to the...
Jeremy Furtek [Mon, 17 Oct 2022 18:16:38 +0000 (11:16 -0700)]
[mlir][ods] Do not print default-valued attributes when the value is equal to the default

This diff causes the `tblgen`-erated print() function to skip printing a
`DefaultValuedAttr` attribute when the value is equal to the default.

This feature will reduce the amount of custom printing code that needs to be
written by users a relatively common scenario. As a motivating example, for the
fastmath flags in the LLVMIR dialect, we would prefer to print this:

```
%0 = llvm.fadd %arg0, %arg1 : f32
```

instead of this:

```
%0 = llvm.fadd %arg0, %arg1 {fastmathFlags = #llvm.fastmath<none>} : f32
```

This diff makes the handling of print functionality for default-valued attributes
standard.

This is an updated version of https://reviews.llvm.org/D135398, without the per-attribute bit to control printing.

Reviewed By: Mogball

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

2 years ago[RISCV] Add basic support for the sifive-7-series short forward branch optimization.
Craig Topper [Mon, 17 Oct 2022 19:40:32 +0000 (12:40 -0700)]
[RISCV] Add basic support for the sifive-7-series short forward branch optimization.

sifive-7-series has macrofusion support to convert a branch over
a single instruction into a conditional instruction. This can be
an improvement if the branch is hard to predict.

This patch adds support for the most basic case, a branch over a
move instruction. This is implemented as a pseudo instruction so
we can hide the control flow until all code motion passes complete.

I've disabled a recent select optimization if this feature is enabled
in the subtarget.

Related gcc patch for the same optimization https://www.mail-archive.com/gcc-patches@gcc.gnu.org/msg211045.html

Reviewed By: reames

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

2 years ago[scudo] Change region size from 1 MB to 2 MB in tests
Chia-hung Duan [Sat, 15 Oct 2022 20:34:51 +0000 (20:34 +0000)]
[scudo] Change region size from 1 MB to 2 MB in tests

In SizeClassAllocator64, the RegionBeg is determined by RegionBase +
random offset. The offset is n pages, where n is a random number less or
equal to 16. However, on certain platforms which have large page size,
it may end up immediately OOM without mapping any block pages. For
example,

PageSize = 64 KB, RegionSize = 1 MB

Suppose the random number n is 16, then the random offset will be
64 * 16 = 1024 KB which is equal to the RegionSize.

On most platforms we don't have such large page size and we have
different PRNG(pseudo random number generator) behaviors, thus we didn't
hit any failures before. Given that this now only affects the tests,
only increase the region size is enough.

Will revisit the logic of calculating the random offset.

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

2 years agoControlHeightReduction: Remove assert check in shouldApply
Matthias Braun [Mon, 12 Sep 2022 16:17:38 +0000 (09:17 -0700)]
ControlHeightReduction: Remove assert check in shouldApply

Remove assertion checking for non-empty `ProfileSummaryInfo`.

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

2 years ago[ELF] Inline computeAddend. NFC
Fangrui Song [Mon, 17 Oct 2022 20:09:39 +0000 (13:09 -0700)]
[ELF] Inline computeAddend. NFC

2 years ago[ConstraintElim] Use helper to allow overflow for coefficients of GEPs
Florian Hahn [Mon, 17 Oct 2022 19:30:42 +0000 (20:30 +0100)]
[ConstraintElim] Use helper to allow overflow for coefficients of GEPs

If the arithmetic for indices of inbounds GEPs overflows, the result is
poison. This means it is also OK for the coefficients to overflow. GEP
decomposition is limited to cases where the index size is <= 64 bit,
which can be represented by int64_t used for the coefficients in the
constraint system.

2 years ago[ELF] Move ELFT-agnostic relocation code to processAux
Fangrui Song [Mon, 17 Oct 2022 18:57:17 +0000 (11:57 -0700)]
[ELF] Move ELFT-agnostic relocation code to processAux

2 years agoDocument for Aliasing analysis in FIR
Renaud Kauffmann [Mon, 17 Oct 2022 18:41:35 +0000 (11:41 -0700)]
Document for Aliasing analysis in FIR

2 years ago[ELF] Move ELFT-agnostic relocation code to processAux. NFC
Fangrui Song [Mon, 17 Oct 2022 18:44:28 +0000 (11:44 -0700)]
[ELF] Move ELFT-agnostic relocation code to processAux. NFC

2 years ago[X86] Lower vector interleave into unpck and perm
Han Zhu [Thu, 22 Sep 2022 01:01:49 +0000 (18:01 -0700)]
[X86] Lower vector interleave into unpck and perm

[This Godbolt link](https://godbolt.org/z/s17Kv1s9T) shows different codegen between clang and gcc for a transpose operation.

clang result:
```
        vmovdqu xmm0, xmmword ptr [rcx + rax]
        vmovdqu xmm1, xmmword ptr [rcx + rax + 16]
        vmovdqu xmm2, xmmword ptr [r8 + rax]
        vmovdqu xmm3, xmmword ptr [r8 + rax + 16]
        vpunpckhbw      xmm4, xmm2, xmm0
        vpunpcklbw      xmm0, xmm2, xmm0
        vpunpcklbw      xmm2, xmm3, xmm1
        vpunpckhbw      xmm1, xmm3, xmm1
        vmovdqu xmmword ptr [rdi + 2*rax + 48], xmm1
        vmovdqu xmmword ptr [rdi + 2*rax + 32], xmm2
        vmovdqu xmmword ptr [rdi + 2*rax], xmm0
        vmovdqu xmmword ptr [rdi + 2*rax + 16], xmm4
```
gcc result:
```
        vmovdqu ymm3, YMMWORD PTR [rdi+rax]
        vpunpcklbw      ymm1, ymm3, YMMWORD PTR [rsi+rax]
        vpunpckhbw      ymm0, ymm3, YMMWORD PTR [rsi+rax]
        vperm2i128      ymm2, ymm1, ymm0, 32
        vperm2i128      ymm1, ymm1, ymm0, 49
        vmovdqu YMMWORD PTR [rcx+rax*2], ymm2
        vmovdqu YMMWORD PTR [rcx+32+rax*2], ymm1
```
clang's code is roughly 15% slower than gcc's when evaluated on an internal compression benchmark.

The loop vectorizer generates the following shufflevector intrinsic:
```
%interleaved.vec = shufflevector <32 x i8> %a, <32 x i8> %b, <64 x i32> <i32 0, i32 32, i32 1, i32 33, i32 2, i32 34, i32 3, i32 35, i32 4, i32 36, i32 5, i32 37, i32 6, i32 38, i32 7, i32 39, i32 8, i32 40, i32 9, i32 41, i32 10, i32 42, i32 11, i32 43, i32 12, i32 44, i32 13, i32 45, i32 14, i32 46, i32 15, i32 47, i32 16, i32 48, i32 17, i32 49, i32 18, i32 50, i32 19, i32 51, i32 20, i32 52, i32 21, i32 53, i32 22, i32 54, i32 23, i32 55, i32 24, i32 56, i32 25, i32 57, i32 26, i32 58, i32 27, i32 59, i32 28, i32 60, i32 29, i32 61, i32 30, i32 62, i32 31, i32 63>
```
which is lowered to SelectionDAG:
```
t2: v32i8,ch = CopyFromReg t0, Register:v32i8 %0
t6: v64i8 = concat_vectors t2, undef:v32i8
t4: v32i8,ch = CopyFromReg t0, Register:v32i8 %1
t7: v64i8 = concat_vectors t4, undef:v32i8
t8: v64i8 = vector_shuffle<0,64,1,65,2,66,3,67,4,68,5,69,6,70,7,71,8,72,9,73,10,74,11,75,12,76,13,77,14,78,15,79,16,80,17,81,18,82,19,83,20,84,21,85,22,86,23,87,24,88,25,89,26,90,27,91,28,92,29,93,30,94,31,95> t6, t7
```

So far this `vector_shuffle` is good enough for us to pattern-match and transform, but as we go down the SelectionDAG pipeline, it got split into smaller shuffles. During dagcombine1, the shuffle is split by `foldShuffleOfConcatUndefs`.
```
  // shuffle (concat X, undef), (concat Y, undef), Mask -->
  // concat (shuffle X, Y, Mask0), (shuffle X, Y, Mask1)
t2: v32i8,ch = CopyFromReg t0, Register:v32i8 %0
t4: v32i8,ch = CopyFromReg t0, Register:v32i8 %1
t19: v32i8 = vector_shuffle<0,32,1,33,2,34,3,35,4,36,5,37,6,38,7,39,8,40,9,41,10,42,11,43,12,44,13,45,14,46,15,47> t2, t4
t15: ch,glue = CopyToReg t0, Register:v32i8 $ymm0, t19
t20: v32i8 = vector_shuffle<16,48,17,49,18,50,19,51,20,52,21,53,22,54,23,55,24,56,25,57,26,58,27,59,28,60,29,61,30,62,31,63> t2, t4
t17: ch,glue = CopyToReg t15, Register:v32i8 $ymm1, t20, t15:1
```

With `foldShuffleOfConcatUndefs` commented out, the vector is still split later by the type legalizer, which comes after dagcombine1, because v64i8 is not a legal type in AVX2 (64 * 8 = 512 bits while ymm = 256 bits). There doesn't seem to be a good way to avoid this split. Lowering the `vector_shuffle` into unpck and perm during dagcombine1 is too early. Therefore, although somewhat inconvenient, we decided to go with pattern-matching a pair vector shuffles later in the SelectionDAG pipeline, as part of `lowerV32I8Shuffle`.

The code looks at the two operands of the first shuffle it encounters, iterates through the users of the operands, and tries to find two shuffles that are consecutive interleaves. Once the pattern is found, it lowers them into unpcks and perms. It returns the perm for the shuffle that's currently being lowered (have ISel modify the DAG), and replaces the other shuffle in place.

Reviewed By: RKSimon

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

2 years ago[clang][RISCV] Set vscale_range attribute based on presence of "v" extension
Philip Reames [Mon, 17 Oct 2022 17:09:58 +0000 (10:09 -0700)]
[clang][RISCV] Set vscale_range attribute based on presence of "v" extension

This follows the path that AArch64 SVE has taken. Doing this via a function attribute set in the frontend is basically a workaround for the fact that several analyzes which need the information (i.e. known bits, lvi, scev) can't easily use TTI without significant amounts of plumbing changes.

This patch hard codes "v" numbers, and directly follows the SVE precedent as a result. In a follow up, I hope to drive this from RISCVISAInfo.h/cpp instead, but the MinVLen number being returned from that interface seemed to always be 0 (which is wrong), and I haven't figured out what's going wrong there.

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

2 years agoFix LIT test func-attr.c added by https://reviews.llvm.org/D135097.
Zahira Ammarguellat [Mon, 17 Oct 2022 13:36:18 +0000 (09:36 -0400)]
Fix LIT test func-attr.c added by https://reviews.llvm.org/D135097.

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

2 years ago[ELF] Make relocateAlloc target specific. NFC
Fangrui Song [Mon, 17 Oct 2022 18:01:10 +0000 (11:01 -0700)]
[ELF] Make relocateAlloc target specific. NFC

The target-specific code (AArch64, PPC64) does not fit into the generic code and
adds virtual function overhead. Move relocateAlloc into ELF/Arch/ instead. This
removes many virtual functions (relaxTls*). In addition, this helps get rid of
getRelocTargetVA dispatch and many RelExpr members in the future.

2 years agoRecommit "[LoopFlatten] Enable it by default"
Sjoerd Meijer [Mon, 17 Oct 2022 17:53:38 +0000 (23:23 +0530)]
Recommit "[LoopFlatten] Enable it by default"

The sanitizer bots turned green again after another change went in, i.e.
revert 26dd64ba9cfabe5474bb207f3b7099965f81fed7, so I don't think this
patch was causing the problems.

2 years ago[llvm-reduce] Reduce comdats
Arthur Eubanks [Mon, 17 Oct 2022 05:10:58 +0000 (22:10 -0700)]
[llvm-reduce] Reduce comdats

Reviewed By: arsenm

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

2 years ago[TargetLowering][RISCV][Sparc] Don't emit zero check in CTTZTableLookup for CTTZ_ZERO...
Craig Topper [Mon, 17 Oct 2022 17:00:24 +0000 (10:00 -0700)]
[TargetLowering][RISCV][Sparc] Don't emit zero check in CTTZTableLookup for CTTZ_ZERO_UNDEF.

The code incorrectly checked for CTLZ_ZERO_UNDEF instead of
CTTZ_ZERO_UNDEF.

While I was there I flipped the condition into an early out.

Reviewed By: RKSimon

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

2 years ago[IR] Rename FuncletPadInst::getNumArgOperands to arg_size (NFC)
Kazu Hirata [Mon, 17 Oct 2022 17:15:10 +0000 (10:15 -0700)]
[IR] Rename FuncletPadInst::getNumArgOperands to arg_size (NFC)

This patch renames FuncletPadInst::getNumArgOperands to arg_size for
consistency with CallBase, where getNumArgOperands was removed in
favor of arg_size in commit 3e1c787b3160bed4146d3b2b5f922aeed3caafd7

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

2 years ago[ELF] Move PPC64 above. NFC
Fangrui Song [Mon, 17 Oct 2022 17:08:47 +0000 (10:08 -0700)]
[ELF] Move PPC64 above. NFC

Prepare for a refactoring.

2 years ago[AArch64] Fix warnings
Fangrui Song [Mon, 17 Oct 2022 16:58:51 +0000 (16:58 +0000)]
[AArch64] Fix warnings

2 years agoRevert "[LoopFlatten] Enable it by default"
Sjoerd Meijer [Mon, 17 Oct 2022 16:41:41 +0000 (22:11 +0530)]
Revert "[LoopFlatten] Enable it by default"

This reverts commit 233659c7ae9b83b64a9f739d340736bca39c3d2e.

I see some sanitizer build bot failures. Not sure if it is change
causing it, but let's see if a revert returns the bots to green...

2 years ago[llvm-readobj] Improve JSON output
Paul Kirth [Thu, 6 Oct 2022 23:13:26 +0000 (23:13 +0000)]
[llvm-readobj] Improve JSON output

The current implementation outputs JSON in the following way:

[{'<filename>':{'FileSummary':{},...}}]

Using the filename as a key makes processing the JSON data awkward, and
should be avoided. This patch removes that outer key, since the
'FileSummary' data also includes a 'File' field, and so we lose no data.

Reviewed By: jhenderson, leonardchan

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

2 years ago[modules] Fix callback argument thinko
Nathan Sidwell [Thu, 1 Sep 2022 17:21:24 +0000 (10:21 -0700)]
[modules] Fix callback argument thinko

VisbleModuleSet::setVisible takes a callback, to inform of modules
being made (transitively) visible.  However, we were calling it as
'Vis(M)' from a recursive lambda, where 'M' is a capture of
setVisible's M, module parameter.  Thus we can invoke the callback
multiple times, passing the same value to it each time.

Everywhere else in the lambda, we refer to V.M of the lambda's
Visiting parameter.  We should be doing so for the callback.  Thus
we'll pass the outermost module on the outermost recursive call, and
as we descend the imports, we'll pass each import to the callback.

Reviewed By: iains

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

2 years ago[mlir] Remove assert from RegionBranchOpInterface verifier
Jeff Niu [Mon, 17 Oct 2022 04:27:20 +0000 (21:27 -0700)]
[mlir] Remove assert from RegionBranchOpInterface verifier

This assert is erroneous because an op implementing
`RegionBranchOpInterface` can have variadic regions and in some cases
have zero regions, in which case the only possible control flow is
branching from the parent op to itself.

Reviewed By: rriddle, jpienaar

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

2 years ago[AArch64]Enhance 'isBitfieldPositioningOp' to find pattern (shl(and(val,mask), N).
Mingming Liu [Fri, 14 Oct 2022 22:26:04 +0000 (15:26 -0700)]
[AArch64]Enhance 'isBitfieldPositioningOp' to find pattern (shl(and(val,mask), N).

Before this patch (and D135844)

- Given DAG node shl(op, N), isBitfieldPositioningOp uses (optionally shifted [1] ) op as the Src (least significant bits of Src are inserted into DstLSB of Dst node).

After this patch

- If op is and(val, mask), isBitfieldPositioningOp tries to see through and and find if val is a simpler source than op.

It helps in a similar (probably symmetric) way how isSeveralBitsExtractOpFromShr [2] optimizes isBitfieldExtractOpFromShr

Existing test cases are improved without regressions.

[1] https://github.com/llvm/llvm-project/blob/cbd8464595220b5ea76c70ac9965d84970c4b712/llvm/lib/Target/AArch64/AArch64ISelDAGToDAG.cpp#L2546
[2] https://github.com/llvm/llvm-project/blob/cbd8464595220b5ea76c70ac9965d84970c4b712/llvm/lib/Target/AArch64/AArch64ISelDAGToDAG.cpp#L2057

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

2 years ago[clang] Fix crash with -funique-internal-linkage-names
Ellis Hoag [Thu, 13 Oct 2022 23:38:02 +0000 (16:38 -0700)]
[clang] Fix crash with -funique-internal-linkage-names

Calling `getFunctionLinkage(CalleeInfo.getCalleeDecl())` will crash when the declaration does not have a body, e.g., `extern void foo();`. Instead, we can use `isExternallyVisible()` to see if the delcaration has internal linkage.

I believe using `!isExternallyVisible()` is correct because the clang linkage must be `InternalLinkage` or `UniqueExternalLinkage`, both of which are "internal linkage" in llvm.
https://github.com/llvm/llvm-project/blob/9c26f51f5e178ac0fda98419e3a61d205d3b58b1/clang/include/clang/Basic/Linkage.h#L28-L40

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

Reviewed By: tmsriram

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

2 years ago[ARM] Add additional targets to divide tests.
Keith Walker [Thu, 13 Oct 2022 12:56:02 +0000 (13:56 +0100)]
[ARM] Add additional targets to divide tests.

The main motivation for these additional targets is to cover the
differences in the instructions available between Thumb2 and Thumb1.

Ths shows up in these test due to the lack of the following in
Thumb1:
- Mulitply and Subtract instruction (mls) - used when calculating
  a remainder.
- Unsigned Muliple Long instruction (umull) - used in certain
  cases when optimising division with a constant.

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

2 years ago[lldb] [MainLoopPosix] Fix crash upon adding lots of pending callbacks
Michał Górny [Sat, 8 Oct 2022 16:25:49 +0000 (18:25 +0200)]
[lldb] [MainLoopPosix] Fix crash upon adding lots of pending callbacks

If lots of pending callbacks are added while the main loop has exited
already, the trigger pipe buffer fills in, causing the write to fail
and the related assertion to fail.  To avoid this, add a boolean member
indicating whether the callbacks have been triggered already.
If the trigger was done, avoid writing to the pipe until loops proceeds
to run them and resets the variable.

Besides fixing the issue, this also avoids writing to the pipe multiple
times if callbacks are added faster than the loop is able to process
them.  Previously, this would lead to the loop performing multiple read
iterations from pipe unnecessarily.

Sponsored by: The FreeBSD Foundation

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

2 years ago[libc++] Adds missing includes.
Mark de Wever [Mon, 17 Oct 2022 15:42:00 +0000 (17:42 +0200)]
[libc++] Adds missing includes.

Fixes breakage of modular builds when including sort.h directly.

2 years ago[mlir] add utilites for DiagnosedSilenceableFailure
Alex Zinenko [Mon, 17 Oct 2022 12:47:03 +0000 (12:47 +0000)]
[mlir] add utilites for DiagnosedSilenceableFailure

This class adds helper functions similar to `emitError` for the
DiagnosedSilenceableFailure class in both the silenceable and definite
failure cases. These helpers simplify the use of said class and make
tranfsorm op application code idiomatic.

Reviewed By: springerm

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

2 years ago[flang] Fix the trivial type passed as value with bind(C)
Peixin Qiao [Mon, 17 Oct 2022 15:27:17 +0000 (23:27 +0800)]
[flang] Fix the trivial type passed as value with bind(C)

In the callee side, the value cannot be used directly. For example, the
dummy argument is lhs variable or the dummy argument is passed to
another procedure as actual argument.

Fix this by allocating one temporary storage and store the value. Then
map the symbol of dummy argument to the `mlir::Value` of the temporary.

Reviewed By: jeanPerier

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

2 years ago[OpenMP] Add upper limit to TPAUSE exponential backoff time
Nawrin Sultana [Fri, 30 Sep 2022 21:10:43 +0000 (16:10 -0500)]
[OpenMP] Add upper limit to TPAUSE exponential backoff time

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

2 years ago[DAG] visitShiftByConstant - replace constant detection with FoldConstantArithmetic
Simon Pilgrim [Mon, 17 Oct 2022 15:19:02 +0000 (16:19 +0100)]
[DAG] visitShiftByConstant - replace constant detection with FoldConstantArithmetic

Instead of checking that an operand is constant/opaque before calling getNode() and then checking that the result is a constant, just use FoldConstantArithmetic which will just early-out if the operands are not constant foldable.

2 years ago[AArch64][NFC]Refactor 'isBitfieldPositioningOp' so that DAG nodes with different...
Mingming Liu [Thu, 13 Oct 2022 00:49:04 +0000 (17:49 -0700)]
[AArch64][NFC]Refactor 'isBitfieldPositioningOp' so that DAG nodes with different Opcode are handled with separate helper functions.

Using different helper functions for DAG nodes with different Opcode allows specialization.

- 'isBitfieldExtractOp' [1] shows how specialization based on Opcode could catch more patterns.
- The refactor paves the way (e.g., makes diff clearer) for enhancement in {D135844,D135850,D135852}

[1] https://github.com/llvm/llvm-project/blob/cbd8464595220b5ea76c70ac9965d84970c4b712/llvm/lib/Target/AArch64/AArch64ISelDAGToDAG.cpp#L2163-L2202

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

2 years ago[mlir] stopgap for incorrect vector.contract lowering
Alex Zinenko [Mon, 17 Oct 2022 13:37:09 +0000 (13:37 +0000)]
[mlir] stopgap for incorrect vector.contract lowering

`vector.contract` is being lowered to the default mul/add contraction
regardless if of the kind indicated. Stop the lowering completely in
this case until the correct one can be implemented.

Reviewed By: springerm, ThomasRaoux

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

2 years ago[VectorCombine] fix crashing on match of non-canonical fneg
Sanjay Patel [Mon, 17 Oct 2022 14:12:24 +0000 (10:12 -0400)]
[VectorCombine] fix crashing on match of non-canonical fneg

We can't assume that operand 0 is the negated operand because
the matcher handles "fsub -0.0, X" (and also +0.0 with FMF).

By capturing the extract within the match, we avoid the bug
and make the transform more robust (can't assume that this
pass will only see canonical IR).

2 years ago[BasicAA] Add test for phi of geps of alloca (NFC)
Nikita Popov [Mon, 17 Oct 2022 14:46:03 +0000 (16:46 +0200)]
[BasicAA] Add test for phi of geps of alloca (NFC)

Make sure we continue determining NoAlias in this case, where we
have a phi of constant index GEPs based on an alloca.

2 years ago[AArch64] Canonicalize ZERO_EXTEND to VSELECT
Nicola Lancellotti [Fri, 7 Oct 2022 11:14:50 +0000 (12:14 +0100)]
[AArch64] Canonicalize ZERO_EXTEND to VSELECT

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

2 years agoRemove trailing whitespace. NFC.
Simon Pilgrim [Mon, 17 Oct 2022 14:20:26 +0000 (15:20 +0100)]
Remove trailing whitespace. NFC.

2 years agoReapply [InstCombine] Switch foldOpIntoPhi() to use InstSimplify
Nikita Popov [Fri, 30 Sep 2022 10:13:40 +0000 (12:13 +0200)]
Reapply [InstCombine] Switch foldOpIntoPhi() to use InstSimplify

Relative to the previous attempt, this is rebased over the
InstSimplify fix in ac74e7a7806480a000c9a3502405c3dedd8810de,
which addresses the miscompile reported in PR58401.

-----

foldOpIntoPhi() currently only folds operations into the phi if all
but one operands constant-fold. The two exceptions to this are freeze
and select, where we allow more general simplification.

This patch makes foldOpIntoPhi() generally simplification based and
removes all the instruction-specific logic. We just try to simplify
the instruction for each operand, and for the (potentially) one
non-simplified operand, we move it into the new block with adjusted
operands.

This fixes https://github.com/llvm/llvm-project/issues/57448, which
was my original motivation for the change.

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

2 years ago[AMDGPU] Add regression test cases reported on D136042
Simon Pilgrim [Mon, 17 Oct 2022 13:52:33 +0000 (14:52 +0100)]
[AMDGPU] Add regression test cases reported on D136042

2 years ago[InstSimplify] Only check self-simplify in simplifyInstruction()
Nikita Popov [Mon, 17 Oct 2022 13:43:11 +0000 (15:43 +0200)]
[InstSimplify] Only check self-simplify in simplifyInstruction()

InstSimplify currently checks whether the instruction simplifies
back to itself, and returns undef in that case. Generally, this
should only occur in unreachable code.

However, this was also done for the simplifyInstructionWithOperands()
API. In that case, the instruction only serves as a template that
provides the opcode and other non-operand data. In this case,
simplifying back to the same "instruction" may be expected. This
caused PR58401 in conjunction with D134954.

As such, move this check into simplifyInstruction() only. The only
other caller of simplifyInstructionWithOperands() also handles the
self-simplification case explicitly.

2 years ago[flang] Add an enum attribute to carry Fortran attributes
Jean Perier [Mon, 17 Oct 2022 13:40:39 +0000 (15:40 +0200)]
[flang] Add an enum attribute to carry Fortran attributes

Currently, Fortran attributes are mostly represented via the presence of
named attribute with special names (fir.target, fir.contiguous,
fir.optional...).

Create an enum so that these attributes can be more easily and safely
manipulated in FIR.

This patch does not add usages for it yet. It is planned to use in it in
the future HLFIR and fir.declare operations. This is added to FIR and
not HLFIR because it is intended to be used on fir.declare that will
be part of FIR, and seems also usefull for FIR operations.

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

2 years ago[AMDGPU] Regenerate bfe-combine.ll and bfe-patterns.ll
Simon Pilgrim [Mon, 17 Oct 2022 13:35:10 +0000 (14:35 +0100)]
[AMDGPU] Regenerate bfe-combine.ll and bfe-patterns.ll

2 years ago[InstCombine] Add test for PR58401 (NFC)
Nikita Popov [Mon, 17 Oct 2022 13:36:28 +0000 (15:36 +0200)]
[InstCombine] Add test for PR58401 (NFC)

2 years ago[mlir] fix markdown in VectorOps.td
Oleksandr "Alex" Zinenko [Mon, 17 Oct 2022 13:28:36 +0000 (15:28 +0200)]
[mlir] fix markdown in VectorOps.td

2 years agoRevert "[llvm-debuginfo-analyzer] (02/09) - Driver and documentation"
Carlos Alberto Enciso [Mon, 17 Oct 2022 13:26:48 +0000 (14:26 +0100)]
Revert "[llvm-debuginfo-analyzer] (02/09) - Driver and documentation"

This reverts commit fe7a3cedf77125a6309150d85cecbc20b1a31775.

2 years ago[mlir][linalg] Fix canonicalizer crash for `linalg.generic` with mixed semantics
Ivan Butygin [Tue, 11 Oct 2022 23:14:35 +0000 (01:14 +0200)]
[mlir][linalg] Fix canonicalizer crash for `linalg.generic` with mixed semantics

`EraseIdentityGenericOp` for `!hasBufferSemantics()` assumed fully tensor semantics and tried to access non-existent return values.

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

2 years ago[mlir][llvm] Add support for importing masked intrinsics from LLVM IR.
Tobias Gysi [Mon, 17 Oct 2022 12:43:35 +0000 (15:43 +0300)]
[mlir][llvm] Add support for importing masked intrinsics from LLVM IR.

The revision adds support for importing the masked load/store and
gather/scatter intrinsics from LLVM IR. To enable the import, the
revision also includes an extension of the mlirBuilder code generation
to support variadic arguments.

Depends on D136057

Reviewed By: ftynse

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