platform/upstream/llvm.git
16 months ago[GlobalIsel][X86] Legalize G_SELECT
Thorsten Schütt [Thu, 8 Jun 2023 14:36:45 +0000 (16:36 +0200)]
[GlobalIsel][X86] Legalize G_SELECT

with bug fixes

Reviewed By: arsenm

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

16 months agoReland "[FuncSpec] Improve the accuracy of the cost model"
Alexandros Lamprineas [Thu, 11 May 2023 23:07:49 +0000 (00:07 +0100)]
Reland "[FuncSpec] Improve the accuracy of the cost model"

Instead of blindly traversing the use-def chain of constant arguments,
compute known constants along the way. Stop as soon as a user cannot
be replaced by a constant. Keep it light-weight by handling some basic
instruction types.

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

16 months agoReland "[FuncSpec] Replace LoopInfo with BlockFrequencyInfo"
Alexandros Lamprineas [Fri, 2 Jun 2023 10:17:20 +0000 (11:17 +0100)]
Reland "[FuncSpec] Replace LoopInfo with BlockFrequencyInfo"

Using AvgLoopIters on any loop is too imprecise making the cost model
favor users inside loop nests regardless of the actual tripcount.

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

16 months ago[1/11][Clang][Type] Expand BuiltinTypeBits from 8 to 9 bits
eopXD [Sat, 3 Jun 2023 16:35:28 +0000 (09:35 -0700)]
[1/11][Clang][Type] Expand BuiltinTypeBits from 8 to 9 bits

This patch-set aims to expand all variants of the RVV segment
load/store intrinsics. The first commit expands the limitation of
builtin types from 256 to 512. The following patches expands the
full variants one-by-one.

The next patch introduces a number of new RVV tuple types and lets the
total of builtin types exceed the current limit (256). This patch
attempts to increase the bits used so we can continue to expand new
builtin types.

Reviewed By: erichkeane

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

16 months ago[Clang][Type] Add static assertion to guard future expansion for BuiltinType numbering
eopXD [Thu, 8 Jun 2023 08:37:09 +0000 (01:37 -0700)]
[Clang][Type] Add static assertion to guard future expansion for BuiltinType numbering

Recent expansion D152070 exceeds the limit and I had a hard time
triaging the bug because the overflow just creates unexpected
behaviors within the compiler.

This patch adds a static assertion to keep an eye for overflows when we
expand more types in the future.

Reviewed By: aaron.ballman

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

16 months ago[RISCV] Update documentation for -mvscale-min/max options to mention RISC-V. NFC
Craig Topper [Thu, 8 Jun 2023 16:15:48 +0000 (09:15 -0700)]
[RISCV] Update documentation for -mvscale-min/max options to mention RISC-V. NFC

16 months ago[RISCV] Support LMUL!=1 for __attribute__((riscv_rvv_vector_bits(N)))
Craig Topper [Thu, 8 Jun 2023 16:13:43 +0000 (09:13 -0700)]
[RISCV] Support LMUL!=1 for __attribute__((riscv_rvv_vector_bits(N)))

The first patch supported only LMUL=1 types. This patch supports
LMUL!=1.

LMUL is length multiplier that allows multiple vector registers to
be treated as one large register or a fraction of a single vector
register. Supported values for LMUL are 1/8, 1/4, 1/2, 1, 2, 4, and 8.

An LMUL=2 type will be twice as large as an LMUL=1 type. An LMUL=1/2
type will be half the size as an LMUL=1 type.

Type name with "m2" is LMUL=2, "m4" is LMUL=4.
Type name with "mf2" is LMUL=1/2, "mf4" is LMUL=1/4.

For the LMUL!=1 types the user will need to scale __riscv_v_fixed_vlen
by the LMUL before passing to the attribute.

Reviewed By: aaron.ballman

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

16 months ago[lldb][test] LogTest: Fix stack overflow
Michael Buch [Thu, 8 Jun 2023 15:58:58 +0000 (16:58 +0100)]
[lldb][test] LogTest: Fix stack overflow

The expected function name requires 18 bytes of storage.

Caught by the public ASAN buildbot

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

16 months ago[Driver] Make -G TargetSpecific
Fangrui Song [Thu, 8 Jun 2023 16:02:12 +0000 (09:02 -0700)]
[Driver] Make -G TargetSpecific

so that we report `unsupported option '-G' for target ...` on
unsupported targets (most targets).
This error is tested by one target in aix-err-options.c.

Follow-up to D89897 and D90063.

16 months ago[flang][hlfir] Propagate non-default lbounds from the mutable box.
Slava Zakharin [Thu, 8 Jun 2023 15:12:33 +0000 (08:12 -0700)]
[flang][hlfir] Propagate non-default lbounds from the mutable box.

The issue affected type select tests, such that inside the type guard
block the associated variable was using default lbounds instead of
inheriting it from the original variable.

The bridge's `genExprBox` ended up creating BoxValue from a MutableBoxValue
without setting non-default lbounds. So the hlfir.declare generated
for the associated name inside the type guard block was also using
the default lbounds. The fix is to read the value of the mutable box
and propagate the lbounds to the new BoxValue.

The fix might affect more than just select type cases.

Reviewed By: tblah

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

16 months ago[Clang] Remove -no-opaque-pointers cc1 flag
Nikita Popov [Thu, 8 Jun 2023 14:43:26 +0000 (16:43 +0200)]
[Clang] Remove -no-opaque-pointers cc1 flag

Migration of clang tests to opaque pointers is finished, so remove
the -no-opaque-pointers flag.

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

16 months ago[RISCV] Add test cases to show that rvv_vector_bits attribute is not accepted for...
Craig Topper [Thu, 8 Jun 2023 15:47:58 +0000 (08:47 -0700)]
[RISCV] Add test cases to show that rvv_vector_bits attribute is not accepted for vbool or LMUL!=1 RVV types. NFC

The error message isn't great, but it's temporary until we support these.

Reviewed By: aaron.ballman

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

16 months ago[RISCV] Fix crash in lowerVECTOR_INTERLEAVE when VecVT is an LMUL=8 type.
Craig Topper [Thu, 8 Jun 2023 15:41:22 +0000 (08:41 -0700)]
[RISCV] Fix crash in lowerVECTOR_INTERLEAVE when VecVT is an LMUL=8 type.

If VecVT is an LMUL=8 VT, we can't concatenate the vectors as that
would create an illegal type. Instead we need to split the vectors
and emit two VECTOR_INTERLEAVE operations that can each be lowered.

Reviewed By: fakepaper56

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

16 months ago[RISCV] Fix crash in lowerVECTOR_DEINTERLEAVE when VecVT is an LMUL=8 type.
Craig Topper [Thu, 8 Jun 2023 15:41:07 +0000 (08:41 -0700)]
[RISCV] Fix crash in lowerVECTOR_DEINTERLEAVE when VecVT is an LMUL=8 type.

If VecVT is an LMUL=8 VT, we can't concatenate the vectors as that
would create an illegal type. Instead we need to split the vectors
and emit two VECTOR_DEINTERLEAVE operations that can each be lowered.

Reviewed By: luke, rogfer01

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

16 months ago[Clang] Remove some explicit -opaque-pointers options in tests (NFC)
Nikita Popov [Thu, 8 Jun 2023 15:32:36 +0000 (17:32 +0200)]
[Clang] Remove some explicit -opaque-pointers options in tests (NFC)

This is the default, so don't specify it explicitly, in preparation
for removing the option.

16 months ago[GlobalISel] Check if ShiftAmt is greater then size of operand
Mirko Brkusanin [Thu, 8 Jun 2023 15:29:17 +0000 (17:29 +0200)]
[GlobalISel] Check if ShiftAmt is greater then size of operand

matchCombineShlOfExtend did not check if the size of new shift would be
wider then a size of operand. Current condition did not work if the value
being shifted was zero. Updated to support vector splat.

Patch by: Acim Maravic

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

16 months agoRevert "[DebugMetadata] Simplify handling subprogram's retainedNodes field. NFCI...
Vladislav Dzhidzhoev [Thu, 8 Jun 2023 15:36:30 +0000 (17:36 +0200)]
Revert "[DebugMetadata] Simplify handling subprogram's retainedNodes field. NFCI (1/7)"

This reverts commit 4418434c6de7a861e241ba2448ea4a12080cf08f.

Reverted because it breaks tests of OCaml bindings.

16 months ago[Hexagon] Make RDF copy propagation a bit more aggressive
Krzysztof Parzyszek [Thu, 8 Jun 2023 15:18:07 +0000 (08:18 -0700)]
[Hexagon] Make RDF copy propagation a bit more aggressive

Update the testcase to actually test for RDF's output.

16 months ago[RISCV] Add VPatBinaryVL_V to VPatBinaryFPWVL_VV_VF_WV_WF like VPatBinaryWVL_VV_VX_WV_WX.
Craig Topper [Thu, 8 Jun 2023 15:23:16 +0000 (08:23 -0700)]
[RISCV] Add VPatBinaryVL_V to VPatBinaryFPWVL_VV_VF_WV_WF like VPatBinaryWVL_VV_VX_WV_WX.

This should hopefully fix a regression from D151969.

16 months ago[Flang] Replace intrinsic function type generators with single generic function type...
Paul Scoropan [Wed, 31 May 2023 15:06:35 +0000 (15:06 +0000)]
[Flang] Replace intrinsic function type generators with single generic function type generator

In a future patch we plan on introducing a large set of Power-PC specific intrinsics. During our prototyping we found that the number of function type generators we were defining, plus those already defined, were reaching an unreasonable number. This patch introduces a generic function type generator function that can be used for almost all cases. The generator supports creating function types with up to 4 arguments and with arguments/return type of types: void, integer, real, and comlex. The intention is for a future patch, which introduces a set of PowerPC-specific vector intrinsics, to also introduce support in the generator for: integer vector, unsigned vector, and real vector types.

Reviewed By: luporl

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

16 months ago[AppleAccelTable][NFC] Make FormParams member of AppleAccelTable
Felipe de Azevedo Piovezan [Sat, 3 Jun 2023 10:53:11 +0000 (06:53 -0400)]
[AppleAccelTable][NFC] Make FormParams member of AppleAccelTable

These are used throughout the class and are recreated every time they are used.
To prevent the risk of it being created incorrectly in different places, we
create it once and in the earliest moment possible: when the table is extracted.

Depends on D151989

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

16 months agochange checking for auto-init metadata to use `equalsStr` instead of casing MDOperand...
Zain Jaffal [Thu, 8 Jun 2023 14:57:50 +0000 (15:57 +0100)]
change checking for auto-init metadata to use `equalsStr` instead of casing MDOperand nodes.

Since `MD_annotation` metadata now supports having mutliple strings in the annotation node. casing Operand to string directly will cause a crash. When checking if `MDOperand` equals str you can use `equalsStr` method.

Reviewed By: serge-sans-paille

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

16 months ago[StaticAnalyzer] Fix false negative on NilArgChecker when creating literal object
tripleCC [Thu, 8 Jun 2023 14:48:24 +0000 (16:48 +0200)]
[StaticAnalyzer] Fix false negative on NilArgChecker when creating literal object

Fix false negative on NilArgChecker when creating literal object, such
as @[nullableObject].

Patch By tripleCC!

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

16 months ago[x86][MC] Fix movdir64b addressing
Akshay Khadse [Thu, 8 Jun 2023 14:39:56 +0000 (22:39 +0800)]
[x86][MC] Fix movdir64b addressing

This patch is to fix the [[ https://github.com/llvm/llvm-project/issues/63045 | issue 63045]].

Look at the following code:
```
int main(int argc, char *argv[]) {
    int arr[1000];
    __asm movdir64b rax, ZMMWORD PTR [arr]
    return 0;
}
```
Compiling this code using `clang -O0 -fasm-blocks bug.c` gives the a linker error.

The problem seems to be in the generated assembly. Following is the out put of `clang -S -O0 -fasm-blocks bug.c`:
```
movq %rsi, -16(%rbp)
#APP

movdir64b arr, %rax

#NO_APP
xorl %eax, %eax
```
The symbol `arr` should be replaced with some address like `-4(%rbp)`.

This makes me believe that issue is not in the linker, but with the ASM parser.

This issue originates with patch [D145893](https://reviews.llvm.org/D145893). And that's why reverting it fixes the issue. More specifically, the function [isMem512_GR64()](https://github.com/llvm/llvm-project/blob/ff471dcf7669b1ad7903a44d0773bef4eb175eb9/llvm/lib/Target/X86/AsmParser/X86Operand.h#L404) within the [llvm/lib/Target/X86/AsmParser/X86Operand.h](https://github.com/llvm/llvm-project/blob/main/llvm/lib/Target/X86/AsmParser/X86Operand.h) file.

Reviewed By: skan

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

16 months ago[Clang] Convert some tests to opaque pointers (NFC)
Nikita Popov [Thu, 8 Jun 2023 14:21:10 +0000 (16:21 +0200)]
[Clang] Convert some tests to opaque pointers (NFC)

These tests all require some adjustments to make sure that struct
types still get generated, mostly done by stripping pointer
indirections.

Some of this may no longer test the situation it was originally
intended for, e.g. the issue from pr18962 just doesn't really
exist anymore with opaque pointers, as we no longer generate
recursive types.

16 months ago[mlir][spirv] Add a canonicalization pattern for UModOp
Nishant Patel [Thu, 8 Jun 2023 14:30:54 +0000 (10:30 -0400)]
[mlir][spirv] Add a canonicalization pattern for UModOp

Add a transformation for a pattern like

%6 = "spirv.Constant"() <{value = 32 : i32}> : () -> i32
%7 = "spirv.UMod"(%5, %6) : (i32, i32) -> i32
%8 = "spirv.Constant"() <{value = 4 : i32}> : () -> i32
%9 = "spirv.UMod"(%7, %8) : (i32, i32) -> i32

to transform to

%6 = "spirv.Constant"() <{value = 32 : i32}> : () -> i32
%7 = "spirv.UMod"(%5, %6) : (i32, i32) -> i32
%8 = "spirv.Constant"() <{value = 4 : i32}> : () -> i32
%9= "spirv.UMod"(%5, %8) : (i32, i32) -> i32

Patch By: nbpatel
Reviewed By: antiagainst, kuhar

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

16 months ago[AppleAccelTable][NFC] Refactor equal_range code
Felipe de Azevedo Piovezan [Thu, 1 Jun 2023 14:55:06 +0000 (10:55 -0400)]
[AppleAccelTable][NFC] Refactor equal_range code

The current implementation of AppleAcceleratorTable::equal_range has a couple of
drawbacks:

1. Assumptions about how the hash table is structured are hard-coded throughout
the code. Unless you are familiar with the data layout of the table, it becomes
tricky to follow the code.
2. We currently load strings from the string table even for hashes that don't
match our current search hash. This is wasteful.
3. There is no error checking in most DataExtractor calls that can fail.

This patch cleans up (1) by making helper methods that hide the details of the
data layout from the algorithms relying on them. This should also help us in
future patches, where we want to expand the interface to allow iterating over
_all_ entries in the table, and potentially clean up the existing Iterator
class.

The changes above also fix (2), as the problem "just vanishes" when you have a
function called "idxOfHashInBucket(SearchHash)".

The changes above also fix (3), as having individual functions allow us to
expose the points in which reading data can fail. This is particularly important
as we would like to share this implementation with LLDB, which requires robust
error handling.

The changes above are also a step towards addressing a comment left by the
original author:
```
  /// TODO: Generalize the rest of the AppleAcceleratorTable interface and move it
  /// to this class.
```
I suspect a lot of these helper functions created also apply to DWARF 5's
accelerator table, so they could be moved to the base class.

The changes above also expose a bug in this implementation: the previous
algorithm looks at _one_ string inside the bucket, but never bothers checking
for collisions. When the main search loop is written as it is with this patch,
the problem becomes evident. We do not fix the issue in this patch, as it is
intended to be NFC.

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

16 months ago[mlir][Linalg][Transform] Fail gracefully instead of asserting
Nicolas Vasilache [Thu, 8 Jun 2023 14:15:54 +0000 (14:15 +0000)]
[mlir][Linalg][Transform] Fail gracefully instead of asserting

16 months ago[ThinLTO] Ignore callee edge to global variable
Teresa Johnson [Wed, 7 Jun 2023 22:42:56 +0000 (15:42 -0700)]
[ThinLTO] Ignore callee edge to global variable

Since the symbols in the ThinLTO summary are indexed by GUID we can end
up in corner cases where a callee edge in the combined index goes to a
summary for a global variable. This could happen in the case of hash
collisions, and in the case of SamplePGO profiles could potentially happen
due to code changes (since we synthesize call edges to GUIDs that were
inlined callees in the profiled code).

Handle this by simply ignoring any non-FunctionSummary callees.

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

16 months ago[Clang] Convert some tests to opaque pointers (NFC)
Nikita Popov [Thu, 8 Jun 2023 08:39:56 +0000 (10:39 +0200)]
[Clang] Convert some tests to opaque pointers (NFC)

16 months ago[mlir][irdl] NFC: Ensure ops ends with `Op` suffix
Mathieu Fehr [Wed, 7 Jun 2023 09:52:59 +0000 (10:52 +0100)]
[mlir][irdl] NFC: Ensure ops ends with `Op` suffix

IRDL operations were inconsistent in their naming. They now
all end with the `Op` suffix.

Reviewed By: rriddle, jpienaar

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

16 months ago[MLIR][GPU] Add 16-bit version of cudaMemset in cudaRuntimeWrappers
Navdeep Katel [Mon, 5 Jun 2023 06:39:35 +0000 (12:09 +0530)]
[MLIR][GPU] Add 16-bit version of cudaMemset in cudaRuntimeWrappers

Add 16-bit version of cudaMemset in cudaRuntimeWrappers and update the GPU to LLVM lowering.

Reviewed By: bondhugula

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

16 months agoX86: Add more is.fpclass lowering tests
Matt Arsenault [Fri, 17 Feb 2023 15:03:40 +0000 (11:03 -0400)]
X86: Add more is.fpclass lowering tests

16 months agoAMDGPU: Don't run AMDGPUAttributor with -O0
Matt Arsenault [Tue, 6 Jun 2023 19:25:25 +0000 (15:25 -0400)]
AMDGPU: Don't run AMDGPUAttributor with -O0

16 months ago[SimpleLoopUnswitch] Verify LoopInfo after turning guards to branches
Dmitry Makogon [Thu, 8 Jun 2023 11:27:15 +0000 (18:27 +0700)]
[SimpleLoopUnswitch] Verify LoopInfo after turning guards to branches

SplitBlockAndInsertIfThen doesn't correctly update LoopInfo when called
with Unreachable=true, which is the case when we turn guards to branches
in SimpleLoopUnswitch.

This adds LoopInfo verification before returning from turnGuardIntoBranch.

16 months agoAMDGPU: Merge dag and gisel tests for non-entry LDS handling
Matt Arsenault [Wed, 7 Jun 2023 22:12:55 +0000 (18:12 -0400)]
AMDGPU: Merge dag and gisel tests for non-entry LDS handling

16 months agoAMDGPU: Fix errors in test from using non-gfx calling convention
Matt Arsenault [Wed, 7 Jun 2023 21:47:02 +0000 (17:47 -0400)]
AMDGPU: Fix errors in test from using non-gfx calling convention

16 months ago[BOLT] Handle recursive calls as inter-branches in DataAggregator
Amir Ayupov [Wed, 7 Jun 2023 00:53:15 +0000 (17:53 -0700)]
[BOLT] Handle recursive calls as inter-branches in DataAggregator

Align yaml and fdata profiles by applying the same treatment to recursive
calls (direct, indirect, tail). fdata profile increments entry count when
handling recursive calls. Make perf/pre-aggregated perf reader (DataAggregator)
do the same.

Test Plan:
In pre-aggregated-perf.test, add a dummy pre-aggregated branch entry between
an indirect call in `frame_dummy` function and its entry point.
Check that YAML profile gets incremented entry count for this function.

End-to-end test: https://github.com/rafaelauler/bolt-tests/pull/24

Reviewed By: #bolt, maksfb

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

16 months ago[LV] Extend test coverage for loops with accesses with clamped indexes.
Florian Hahn [Thu, 8 Jun 2023 11:10:03 +0000 (12:10 +0100)]
[LV] Extend test coverage for loops with accesses with clamped indexes.

Extend test coverage ahead of upcoming patches.

16 months ago[memprof] Fix rawprofile test on 32-bit architectures
Marco Elver [Wed, 7 Jun 2023 14:17:08 +0000 (16:17 +0200)]
[memprof] Fix rawprofile test on 32-bit architectures

The first argument of StackTrace constructor is a pointer to uptr. Match
the type accordingly.

This fixes builds on 32-bit architectures.

16 months ago[sanitizer_common] Move UNDEFINED attribute outside _MSC_VER guard
Marco Elver [Wed, 7 Jun 2023 20:44:49 +0000 (22:44 +0200)]
[sanitizer_common] Move UNDEFINED attribute outside _MSC_VER guard

The __has_attribute check is sufficient, and if clang-cl is used, the
attribute will be available as well.

16 months ago[LV] Remove UB caused by undef from pr37248.ll (NFC).
Florian Hahn [Thu, 8 Jun 2023 10:58:58 +0000 (11:58 +0100)]
[LV] Remove UB caused by undef from pr37248.ll (NFC).

Also generate full check lines.

16 months ago[mlir][irdl] Add `irdl.c_pred`
Mathieu Fehr [Tue, 6 Jun 2023 19:07:01 +0000 (20:07 +0100)]
[mlir][irdl] Add `irdl.c_pred`

`irdl.c_pred` is an attribute constraint defined by a C++ predicate.
Contrary to the other constraints, this operation cannot be used in
dialects that are registered at runtime. Its principal use is to
share dialect definitions that are defined in C++ or ODS.

Reviewed By: Mogball

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

16 months ago[RegScavenger] Remove scavengeRegister
Jay Foad [Thu, 8 Jun 2023 07:11:01 +0000 (08:11 +0100)]
[RegScavenger] Remove scavengeRegister

All users have been converted to scavengeRegisterBackwards.

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

16 months ago[X86] Prefer vmovmsk instead of vtest for alderlake.
Luo, Yuanke [Tue, 6 Jun 2023 05:27:15 +0000 (13:27 +0800)]
[X86] Prefer vmovmsk instead of vtest for alderlake.

On alderlake E-core, the latency of VMOVMSKPS is 5 for YMM/XMM. The
latency of VPTESTPS is 7 for YMM and is 5 for XMM. Since alderlake use
the P-core schedule model, we can't determine which one better based on
the latency information of schedule model. Alternatively we add an
tuning feature for alderlake and select VMOVMSKPS with the indication
for the tuning feature. In the case of "vmovmskps + test + jcc", the
test and jcc can be fused, while vtest and jcc can't.

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

16 months ago[NFC] Add regression tests for an infinite loop caused by D127115
Amaury Séchet [Thu, 8 Jun 2023 09:07:36 +0000 (09:07 +0000)]
[NFC] Add regression tests for an infinite loop caused by D127115

16 months ago[NFC][Driver] Change MultilibBuilder flags argument order
Michael Platings [Thu, 8 Jun 2023 08:17:49 +0000 (09:17 +0100)]
[NFC][Driver] Change MultilibBuilder flags argument order

Follow up to D151437

Reviewed By: phosek

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

16 months ago[Clang] Convert some tests to opaque pointers (NFC)
Nikita Popov [Thu, 8 Jun 2023 08:07:24 +0000 (10:07 +0200)]
[Clang] Convert some tests to opaque pointers (NFC)

16 months ago[clang] Fix consteval operators in template contexts
Mariya Podchishchaeva [Wed, 7 Jun 2023 14:28:04 +0000 (10:28 -0400)]
[clang] Fix consteval operators in template contexts

Clang used to reject consteval operators if they're used inside a
template due to TreeTransform putting two different `DeclRefExpr`
expressions for the same reference of the same operator declaration into
`ReferenceToConsteval` set.
It seems there was an attempt to not rebuild the whole operator that
never succeeded, so this patch just removes this attempt and
problemating referencing of a `DeclRefExpr` that always ended up
discarded.

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

Reviewed By: cor3ntin

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

16 months ago[mlir][vector] NFC - Add debug information to vector unrolling patterns
Nicolas Vasilache [Wed, 7 Jun 2023 18:28:45 +0000 (18:28 +0000)]
[mlir][vector] NFC - Add debug information to vector unrolling patterns

16 months ago[Clang] Convert some tests to opaque pointers (NFC)
Nikita Popov [Thu, 8 Jun 2023 07:12:34 +0000 (09:12 +0200)]
[Clang] Convert some tests to opaque pointers (NFC)

16 months ago[CodeGen] Disable default copy ctor and copy assignment operator for AggressiveAntiDe...
Bing1 Yu [Thu, 8 Jun 2023 07:51:43 +0000 (15:51 +0800)]
[CodeGen] Disable default copy ctor and copy assignment operator for AggressiveAntiDepBreaker

Reviewed By: pengfei

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

16 months ago[CodeGen] Disable default copy ctor and copy assignment operator for PressureDiffs
Bing1 Yu [Thu, 8 Jun 2023 07:50:54 +0000 (15:50 +0800)]
[CodeGen] Disable default copy ctor and copy assignment operator for PressureDiffs

Reviewed By: pengfei

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

16 months ago[CodeGen] Disable default copy ctor and copy assignment operator for MachineSchedContext
Bing1 Yu [Thu, 8 Jun 2023 07:49:49 +0000 (15:49 +0800)]
[CodeGen] Disable default copy ctor and copy assignment operator for MachineSchedContext

Reviewed By: pengfei

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

16 months ago[mlir][vector][transform] Drop redundant "apply_" from op names
Matthias Springer [Thu, 8 Jun 2023 06:58:40 +0000 (08:58 +0200)]
[mlir][vector][transform] Drop redundant "apply_" from op names

This is for consistency with the other ops.

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

16 months ago[InstCombine] (icmp eq A, -1) & (icmp eq B, -1) --> (icmp eq (A&B), -1)
Shivam Gupta [Thu, 8 Jun 2023 03:30:05 +0000 (09:00 +0530)]
[InstCombine] (icmp eq A, -1) & (icmp eq B, -1) --> (icmp eq (A&B), -1)

This patch add another icmp fold for -1 case.

This fixes https://github.com/llvm/llvm-project/issues/62311,
where we want instcombine to merge all compare intructions together so
later passes like simplifycfg and slpvectorize can better optimize this
chained comparison.

Reviewed By: goldstein.w.n

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

16 months ago[InstCombine] Add test case for (icmp eq A, -1) & (icmp eq B, -1) --> (icmp eq (A...
Shivam Gupta [Thu, 8 Jun 2023 03:30:02 +0000 (09:00 +0530)]
[InstCombine] Add test case for (icmp eq A, -1) & (icmp eq B, -1) --> (icmp eq (A&B), -1); NFC

Reviewed By: goldstein.w.n

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

16 months ago[DAGCombiner] Use generalized pattern matcher in visitFMA to support vp.fma.
Yeting Kuo [Tue, 6 Jun 2023 08:55:27 +0000 (16:55 +0800)]
[DAGCombiner] Use generalized pattern matcher in visitFMA to support vp.fma.

Note: Some patterns in visitFMA are needed refined to support splat of constant.

Reviewed By: luke

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

16 months ago[ExecutionEngine] Support TargetExtType in Interpreter
Wenju He [Thu, 8 Jun 2023 01:23:52 +0000 (09:23 +0800)]
[ExecutionEngine] Support TargetExtType in Interpreter

When llvm Interpreter is used to execute bitcode, it shall be able to handle TargetExtType.

Reviewed By: jcranmer-intel

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

16 months ago[Clang][OpenMP][OMPIRBuilder] Fix getTargetEntryUniqueInfo to fatal error instead...
Andrew Gozillon [Thu, 8 Jun 2023 00:27:34 +0000 (19:27 -0500)]
[Clang][OpenMP][OMPIRBuilder] Fix getTargetEntryUniqueInfo to fatal error instead of assert when it cannot generate a unique ID

This prevents access of uninitialized ID components later, or continuing progress
further making errors harder to track down.

Hoepfully this will be the last in my long series of mistakes in recent
commits relating to this area of code!

16 months ago[OpenMP] Fix using the target ID when using the new driver
Joseph Huber [Fri, 2 Jun 2023 00:16:29 +0000 (19:16 -0500)]
[OpenMP] Fix using the target ID when using the new driver

AMDGPU sometimes uses a novel formatting for their offloading
architecture called the target id. This merges the attributes and the
architecture name into a single string. Previously, we were passing this
as the canonical architecture name. This caused the linker wrapper to
fail to find relevant libraries and then pass an incalid CPU name. This
patch changes the handling in the offload packager to handle the
canonical architecture and then extract the features.

Reviewed By: yaxunl

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

16 months agoRevert "Revert "[clang-format] Fix overlapping replacements before PPDirectives""
Leonard Chan [Thu, 8 Jun 2023 00:14:53 +0000 (00:14 +0000)]
Revert "Revert "[clang-format] Fix overlapping replacements before PPDirectives""

This reverts commit 94e75469597f197f9c4b45baa6c8a576c78dbd02.

Apparently I broke some builders with the original revert: http://45.33.8.238/linux/109159/step_7.txt

16 months ago[RISCV] Use Selection::getElementCount to simplify code. NFC
Craig Topper [Thu, 8 Jun 2023 00:01:24 +0000 (17:01 -0700)]
[RISCV] Use Selection::getElementCount to simplify code. NFC

16 months ago[libc] Update FMA detection macro for x86-64 targets.
Tue Ly [Wed, 7 Jun 2023 23:23:12 +0000 (19:23 -0400)]
[libc] Update FMA detection macro for x86-64 targets.

To generate fma instructions for x86-64 targets, we need both -mavx2
and -mfma.

Reviewed By: brooksmoses

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

16 months ago[RISCV] Pass SDLoc by const reference. NFC
Craig Topper [Wed, 7 Jun 2023 23:52:33 +0000 (16:52 -0700)]
[RISCV] Pass SDLoc by const reference. NFC

16 months ago[lldb] Disable variable watchpoints when going out of scope
Med Ismail Bennani [Wed, 7 Jun 2023 23:51:45 +0000 (16:51 -0700)]
[lldb] Disable variable watchpoints when going out of scope

If we use a variable watchpoint with a condition using a scope variable,
if we go out-of-scope, the watpoint remains active which can the
expression evaluator to fail to parse the watchpoint condition (because
of the missing varible bindings).

This was discovered after `watchpoint_callback.test` started failing on
the green dragon bot.

This patch should address that issue by setting an internal breakpoint
on the return addresss of the current frame when creating a variable
watchpoint. The breakpoint has a callback that will disable the watchpoint
if the the breakpoint execution context matches the watchpoint execution
context.

This is only enabled for local variables.

This patch also re-enables the failing test following e1086384e584.

rdar://109574319

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

Signed-off-by: Med Ismail Bennani <ismail@bennani.ma>
16 months agoRevert "[clang-format] Fix overlapping replacements before PPDirectives"
Leonard Chan [Wed, 7 Jun 2023 23:44:32 +0000 (23:44 +0000)]
Revert "[clang-format] Fix overlapping replacements before PPDirectives"

This reverts commit 4b9764959dc4b8783e18747c1742ab164e4bc4ee.

Reverting since this causes clang-formtat to incorrectly fall into an
error path yet return a zero exit code despite not formatting the file
at all.

See https://github.com/llvm/llvm-project/issues/63170

16 months agoFix namespace of operator<< defn
Sam McCall [Wed, 7 Jun 2023 23:36:59 +0000 (01:36 +0200)]
Fix namespace of operator<< defn

16 months ago[ORC] Simplify construction of EPCIndirectionUtils.
Lang Hames [Wed, 7 Jun 2023 17:16:14 +0000 (10:16 -0700)]
[ORC] Simplify construction of EPCIndirectionUtils.

ExecutionSessions always have an ExecutorProcessControl object now, so we can
construct EPCIndirectionUtil objects directly from an ExecutionSession.

16 months ago[RISCV] Add i8 vector interleave test. NFC
Craig Topper [Wed, 7 Jun 2023 23:25:18 +0000 (16:25 -0700)]
[RISCV] Add i8 vector interleave test. NFC

16 months ago[lldb] Reinvoke crashlog under lldb when run with -i from the command line
Jonas Devlieghere [Wed, 7 Jun 2023 23:17:00 +0000 (16:17 -0700)]
[lldb] Reinvoke crashlog under lldb when run with -i from the command line

Run crashlog inside lldb when invoked in interactive mode from the
command line. Currently, when passing -i to crashlog from the command
line, we symbolicate in LLDB and immediately exit right after. This
pretty much defeats the purpose of interactive mode. That said, we
wouldn't want to re-implement the driver from the crashlog script.
Re-invoking the crashlog command from inside LLDB solves the issue.

rdar://97801509

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

16 months ago[Clang][OpenMP][OMPIRBuilder] Change llvm_unreachable inside of getTargetEntryUniqueI...
Andrew Gozillon [Wed, 7 Jun 2023 22:52:28 +0000 (17:52 -0500)]
[Clang][OpenMP][OMPIRBuilder] Change llvm_unreachable inside of getTargetEntryUniqueInfo to a more apt assert

However, with the correct condition this time and appropriate Clang
callback function to give the correct fallback Filename and Line Info.

16 months ago[RISCV] Remove tab characters from a test. NFC
Craig Topper [Wed, 7 Jun 2023 22:43:36 +0000 (15:43 -0700)]
[RISCV] Remove tab characters from a test. NFC

16 months ago[llvm][openacc] Fix OpenACC frontend test
Razvan Lupusoru [Wed, 7 Jun 2023 21:40:20 +0000 (14:40 -0700)]
[llvm][openacc] Fix OpenACC frontend test

After D152389, single reduction clause constraint was removed.
This broke the OpenACC frontend test which seems to rely on specific
allowed clause ordering.

Reviewed By: vzakhari

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

16 months ago[Sanitizers] UUID/Build ID is 16 bytes on Darwin.
usama hameed [Wed, 7 Jun 2023 21:29:53 +0000 (14:29 -0700)]
[Sanitizers] UUID/Build ID is 16 bytes on Darwin.

https://reviews.llvm.org/D114294 changed the kModuleUUIDSize from 16 to 32 for
all platforms. This is not true for Darwin where the UUID is 16 bytes.

Differential Revision: https://reviews.llvm.org/D152309
rdar://110346025

16 months ago[clang-format] Add the KeepEmptyLinesAtEOF option
Owen Pan [Tue, 6 Jun 2023 19:58:21 +0000 (12:58 -0700)]
[clang-format] Add the KeepEmptyLinesAtEOF option

Adds an option KeepEmptyLinesAtEOF to keep empty lines (up to
MaxEmptyLinesToKeep) before EOF. This remedies the probably unintentional
change in behavior introduced in 3d3ea84a4f8f, which started to always
remove empty lines before EOF.

Fixes #56054.
Fixes #63150.

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

16 months ago[AArch64][SVE] Predicated mul pattern
David Green [Wed, 7 Jun 2023 20:53:30 +0000 (21:53 +0100)]
[AArch64][SVE] Predicated mul pattern

This is a simple predicated mul pattern, selecting from
select(p, mul(x, y), x).

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

16 months ago[flang][openacc] Lower reduction for compute constructs
Razvan Lupusoru [Wed, 7 Jun 2023 18:13:44 +0000 (11:13 -0700)]
[flang][openacc] Lower reduction for compute constructs

Parallel and serial constructs support reduction clause. Extend
recent D151564 loop reduction clause support to also include these
compute constructs.

Reviewed By: clementval, vzakhari

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

16 months ago[flang][openacc] Remove single reduction clause limitation
Razvan Lupusoru [Wed, 7 Jun 2023 18:05:40 +0000 (11:05 -0700)]
[flang][openacc] Remove single reduction clause limitation

The constraint that a single reduction clause is allowed is actually
not valid as per OpenACC specification. Multiple reduction clauses
are allowed, especially since reduction clauses can have different
reduction operators.

Reviewed By: vzakhari

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

16 months ago[gn build] Port 7949ee0d4f10
LLVM GN Syncbot [Wed, 7 Jun 2023 20:34:06 +0000 (20:34 +0000)]
[gn build] Port 7949ee0d4f10

16 months ago[libc++] Introduce __is_pointer_in_range
Nikolas Klauser [Wed, 7 Jun 2023 20:33:02 +0000 (13:33 -0700)]
[libc++] Introduce __is_pointer_in_range

This checks whether a pointer is within a range, even during constant evaluation. This allows running optimized code paths during constant evaluation, instead of falling back to the general-purpose implementation all the time. This is also a central place for comparing unrelated pointers, which is technically UB.

Reviewed By: ldionne, #libc

Spies: libcxx-commits

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

16 months ago[AMDGPU] Switch to backwards scavenging in eliminateFrameIndex
Jay Foad [Tue, 16 May 2023 16:07:44 +0000 (17:07 +0100)]
[AMDGPU] Switch to backwards scavenging in eliminateFrameIndex

Frame index elimination runs backwards so we must use backwards
scavenging. Otherwise, when a scavenged register is spilled, the
scavenger will remember that the register is in use until the restore
point, but it will never reach that restore point. The result is that in
some cases it will keep scavenging different registers instead of
reusing the same one.

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

16 months ago[RISCV] Change riscv_vid_vl isel pattern to use _MASK instruction.
Craig Topper [Wed, 7 Jun 2023 19:48:43 +0000 (12:48 -0700)]
[RISCV] Change riscv_vid_vl isel pattern to use _MASK instruction.

The post isel peephole can convert it to the unmasked form.

We don't have any way to test the masked version right now because
we always use a true mask.

This makes the isel pattern consistent with many other instructions
that select the mask form.

16 months ago[Matrix] Convert binop operand of dot product to a row vector.
Florian Hahn [Wed, 7 Jun 2023 19:45:07 +0000 (20:45 +0100)]
[Matrix] Convert binop operand of dot product to a row vector.

The dot product lowering will use the left operand as row vector.
If the operand is a binary op, convert it to operate on a row vector
instead of a column vector.

Depends on D148428.

Reviewed By: thegameg

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

16 months ago[Clang] Check for abstract parameters only when functions are defined.
Corentin Jabot [Sun, 4 Jun 2023 15:12:30 +0000 (17:12 +0200)]
[Clang] Check for abstract parameters only when functions are defined.

The C++ standard allows abstract parameters in deleted functions
and in function declarations

> The type of a parameter or the return type for a function definition
> shall not be a (possibly cv-qualified) class type that is
> incomplete or abstract within the function body
> unless the function is deleted.

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

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

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

16 months ago[Clang][OpenMP] Rework recently moved getTargetEntryUniqueInfo to fix incorrect error...
Andrew Gozillon [Wed, 7 Jun 2023 19:27:42 +0000 (14:27 -0500)]
[Clang][OpenMP] Rework recently moved getTargetEntryUniqueInfo to fix incorrect error breaking sanitizer

This move was done by https://reviews.llvm.org/rGcda46cc4f921f6b288c57a68b901ec2f57134606 and may be the issue causing the sanitizer to fail. But in either case, it is an invalid assert that required some changes to function correctly.

16 months ago[compiler-rt] Fixes Chromium Apple CI.
Mark de Wever [Wed, 7 Jun 2023 19:24:05 +0000 (21:24 +0200)]
[compiler-rt] Fixes Chromium Apple CI.

s/add_asm_sources/set/ at one place it was forgotten in D152102 as
reported by @paulkirth.

16 months ago[InstrProf] Fix BalancedPartitioning when threads are disabled
Ellis Hoag [Wed, 7 Jun 2023 18:00:57 +0000 (11:00 -0700)]
[InstrProf] Fix BalancedPartitioning when threads are disabled

In https://reviews.llvm.org/D147812 we introduced the class
`BalancedPartitioning` which includes some threading code. The tests in
that diff run forever when built with `-DLLVM_ENABLE_THREADS=OFF` so
some bots were broken.

These tests were skipped in
https://reviews.llvm.org/rGa4845eaf2e9aa18dd900d7cbeff4e5ff52e4b50e
because of this.

This diff disables the threading code if `LLVM_ENABLE_THREADS` is
disabled so we can re-enable the tests.

Reviewed By: luporl

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

16 months agoAMDGPU: Remove r600 local id annotations in AMDGPULowerIntrinsics
Matt Arsenault [Wed, 7 Jun 2023 18:27:53 +0000 (14:27 -0400)]
AMDGPU: Remove r600 local id annotations in AMDGPULowerIntrinsics

With these dropped and memory intrinsic moved into a generic pass, we
can drop the whole pass.

No tests fail with this removed. The new amdgcn intrinsics are
annotated in clang up front.  Theoretically may regress r600, but that
would need new testing and support work (r600 ideally would also
follow the clang handling). The regression would be any IR passes
making use of known bits between this point and codegen. The DAG
computeKnownBits understand the intrinsics directly now.

If we wanted to refine these values, a better place would be in
AMDGPUAttributor.

16 months ago[libc] Temporarily suppress -fsanitize=function for qsort comparator
Leonard Chan [Wed, 7 Jun 2023 18:44:52 +0000 (18:44 +0000)]
[libc] Temporarily suppress -fsanitize=function for qsort comparator

Recent upstream changes to -fsanitize=function find more instances of
function type mismatches. One case is with the comparator passed to this
class. Libraries like boringssl will tend to pass comparators that take
pointers to varying types while this comparator expects to accept const
void pointers. Ideally those tools would pass a function that strictly
accepts const void*s to avoid UB, or we'd have something like qsort_r/s.

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

16 months ago[clang] Implement P2564 "consteval must propagate up"
Corentin Jabot [Mon, 8 May 2023 10:18:43 +0000 (12:18 +0200)]
[clang] Implement P2564 "consteval must propagate up"

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

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

16 months ago[libc++] Rename availability macros for <filesystem>
Louis Dionne [Mon, 5 Jun 2023 15:20:39 +0000 (08:20 -0700)]
[libc++] Rename availability macros for <filesystem>

This makes it clearer that the availability macro only pertains to
<filesystem>, and not to whether the platform has support for a file
system.

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

16 months ago[Sanitizers] Remove BuildId from sanitizers stacktrace on Darwin
usama hameed [Tue, 6 Jun 2023 22:53:18 +0000 (15:53 -0700)]
[Sanitizers] Remove BuildId from sanitizers stacktrace on Darwin

On Darwin, we do not want to show the BuildId appended at the end of stack
frames in Sanitizers. The BuildId/UUID can be seen by using the
print_module_map=1 sanitizer option.

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

rdar://108324403

16 months ago[mlir][bytecodegen] Don't emit empty case (NFC)
Jacques Pienaar [Wed, 7 Jun 2023 18:15:06 +0000 (11:15 -0700)]
[mlir][bytecodegen] Don't emit empty case (NFC)

16 months ago[mlir][sparse][gpu] refined build setup for cusparse
Aart Bik [Wed, 7 Jun 2023 17:43:48 +0000 (10:43 -0700)]
[mlir][sparse][gpu] refined build setup for cusparse

Reviewed By: K-Wu

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

16 months ago[COFF] Add MC support for emitting IMAGE_WEAK_EXTERN_ANTI_DEPENDENCY symbols
Eli Friedman [Mon, 17 Apr 2023 20:15:46 +0000 (13:15 -0700)]
[COFF] Add MC support for emitting IMAGE_WEAK_EXTERN_ANTI_DEPENDENCY symbols

This is mostly useful for ARM64EC, which uses such symbols extensively.

One interesting quirk of ARM64EC is that we need to be able to emit weak
symbols that point at each other (so if either symbol is defined
elsewhere, both symbols point at the definition). This handling is
currently restricted to weak_anti_dep symbols, because we depend on the
current behavior of resolving weak symbols in some cases.

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

16 months agoRemove unnecessary copy
David Blaikie [Wed, 7 Jun 2023 18:02:58 +0000 (18:02 +0000)]
Remove unnecessary copy

16 months ago[WebAssembly] Add ldexp{,f,l} libcall signatures
Derek Schuff [Wed, 7 Jun 2023 17:24:07 +0000 (10:24 -0700)]
[WebAssembly] Add ldexp{,f,l} libcall signatures

llvm.ldexp.* intrinsics were recently added to LLVM, which means
wasm now needs to know the signatures of the corresponding libcalls.

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

Fixes: #63164

16 months ago[InstrProf] Skip Balanced Partitioning tests on ARM
Leandro Lupori [Wed, 7 Jun 2023 17:27:59 +0000 (17:27 +0000)]
[InstrProf] Skip Balanced Partitioning tests on ARM

Balanced Partitioning tests, added by 1794532bb942, currently
hang on ARM, what causes check-all to never finish.

Issue #63168

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

16 months agoImprove WebAssembly vector bitmask, mask reduction, and extending
Caleb Zulawski [Wed, 7 Jun 2023 17:20:22 +0000 (10:20 -0700)]
Improve WebAssembly vector bitmask, mask reduction, and extending

This is inspired by a recently filed Rust issue noting poor codegen for vector masks (https://github.com/rust-lang/portable-simd/issues/351).

Reviewed By: tlively

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