platform/upstream/llvm.git
12 months ago[flang] Add COMDAT to global variables where needed
David Truby [Mon, 26 Jun 2023 14:03:17 +0000 (15:03 +0100)]
[flang] Add COMDAT to global variables where needed

On platforms which support COMDAT sections we should use them when
linkonce or linkonce_odr linkage is requested. This is required on
Windows (PE/COFF) and provides better behaviour than weak symbols on
ELF-based platforms.

This patch also reverts string literals to use linkonce instead of
internal linkage now that comdats are supported.

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

12 months ago[AArch64] Remove vector shift instrinsic with shift amount zero
Jingu Kang [Tue, 27 Jun 2023 08:33:13 +0000 (09:33 +0100)]
[AArch64] Remove vector shift instrinsic with shift amount zero

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

12 months ago[SimplifyCFG] Make some tests more robust (NFC)
Nikita Popov [Wed, 28 Jun 2023 12:31:14 +0000 (14:31 +0200)]
[SimplifyCFG] Make some tests more robust (NFC)

12 months ago[lldb] Use LLVM's implementation of AppleTables for apple_{names,namespaces}
Felipe de Azevedo Piovezan [Fri, 16 Jun 2023 19:07:59 +0000 (15:07 -0400)]
[lldb] Use LLVM's implementation of AppleTables for apple_{names,namespaces}

All the new code should match the behavior of the old exactly.

Of note, the custom queries used to be implemented inside `HashedNameToDIE.cpp`
(which is the LLDB implementation of the tables). However, when porting to LLVM,
we believe they don't belong inside the LLVM table implementation:

1. They don't require any knowledge about the table itself
2. They are not relevant for other users of these classes.
3. They use LLDB data structures.

As such, we implement these custom queries inside AppleDWARFIndex.cpp.

Types and Objective-C tables are done separately, as they have slightly
different functionality that require rewriting more code.

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

12 months ago[ARM] Generate out-of-line jump tables for XO without 32-bit branch
John Brawn [Thu, 1 Jun 2023 16:04:39 +0000 (17:04 +0100)]
[ARM] Generate out-of-line jump tables for XO without 32-bit branch

When we only have a 16-bit pc-relative branch instruction we generate
a table of address for a jump table. Currently this is placed inline,
but this won't work with execute-only memory. In this case generate
the jump table out-of-line.

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

12 months ago[TableGen] Stabilize sort in GET_SUBTARGETINFO_MACRO block
Kevin P. Neal [Wed, 28 Jun 2023 12:26:12 +0000 (08:26 -0400)]
[TableGen] Stabilize sort in GET_SUBTARGETINFO_MACRO block

The sort of the elements in the GET_SUBTARGETINFO_MACRO block is done on
the "Name" field of each record. This field is not guaranteed to be unique,
is not guaranteed to even have a value at all, and is not used in the
output anyway. Change to sort on the "FieldName" field which should be
unique.

Problem spotted when lib/Target/PowerPC/PPCGenSubtargetInfo.inc changed
unexpectedly.

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

12 months ago[SimplifyCFG] Add additional tests with assume (NFC)
Nikita Popov [Wed, 28 Jun 2023 12:21:06 +0000 (14:21 +0200)]
[SimplifyCFG] Add additional tests with assume (NFC)

12 months ago[ConstraintElim] Try to use first cmp to prove second cmp for ANDs.
Florian Hahn [Wed, 28 Jun 2023 12:19:39 +0000 (13:19 +0100)]
[ConstraintElim] Try to use first cmp to prove second cmp for ANDs.

This patch extends the existing logic to handle cases where we have
branch conditions of the form (AND icmp, icmp) where the first icmp
implies the second. This can improve results in some cases, e.g. if
SimplifyCFG folded conditions from multiple branches to an AND.

The implementation handles this by adding a new type of check
(AndImpliedCheck), which are queued before conditional facts for the same
block.

When encountering AndImpliedChecks during solving, the first condition
is optimistically added to the constraint system, then we check if the
second icmp can be simplified, and finally the newly added entries are
removed.

The reason for doing things this way is to avoid clashes with signed
<-> unsigned condition transfer, which require us to re-order facts to
increase effectiveness.

Reviewed By: nikic, antoniofrighetto

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

12 months ago[libc] Fix missing dependency and linking option for sqrtf exhaustive test.
Tue Ly [Wed, 28 Jun 2023 12:13:05 +0000 (08:13 -0400)]
[libc] Fix missing dependency and linking option for sqrtf exhaustive test.

12 months ago[clangd] Fix some typos, NFC
Haojian Wu [Wed, 28 Jun 2023 12:04:22 +0000 (14:04 +0200)]
[clangd] Fix some typos, NFC

12 months ago[ConstraintElim] Move condition check logic to helper function (NFC).
Florian Hahn [Wed, 28 Jun 2023 12:02:11 +0000 (13:02 +0100)]
[ConstraintElim] Move condition check logic to helper function (NFC).

This allows easier re-use of the checking logic. Split off from D151799.

12 months ago[libc][math] Clean up exhaustive tests implementations.
Tue Ly [Sat, 24 Jun 2023 04:03:06 +0000 (00:03 -0400)]
[libc][math] Clean up exhaustive tests implementations.

Clean up exhaustive tests.  Let check functions return number of failures instead of passed/failed.

Reviewed By: sivachandra

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

12 months agoRevert "[SLP]Fix PR63141: compareCmp is not strict weak ordering."
Alexey Bataev [Wed, 28 Jun 2023 11:31:40 +0000 (04:31 -0700)]
Revert "[SLP]Fix PR63141: compareCmp is not strict weak ordering."

This reverts commit f3ebd88064d7f1c36a8272b3e5f7d53501c3f53b to pacify
windows-based buildbots.

12 months agoOpenMP: Revert accidental cmake change to make amdgpu-arch errors fatal
Matt Arsenault [Wed, 28 Jun 2023 11:32:20 +0000 (07:32 -0400)]
OpenMP: Revert accidental cmake change to make amdgpu-arch errors fatal

I still think this should be done but should be done separately.

12 months agoValueTracking: Handle !absolute_symbol in computeKnownBits
Matt Arsenault [Mon, 26 Jun 2023 16:43:35 +0000 (12:43 -0400)]
ValueTracking: Handle !absolute_symbol in computeKnownBits

Use a unit test since I don't see any existing uses try to make use of
the high bits of a pointer.

This will also assert if the metadata type doesn't match the pointer
width, but I consider that a defect in the verifier and shouldn't be
handled.

AMDGPU allocates LDS globals by assigning !absolute_symbol with the
final fixed address. Tracking the high bits are 0 may help with
addressing mode matching.

12 months ago[MISched] Fix bug(s) in bottom-up scheduling.
Francesco Petrogalli [Wed, 28 Jun 2023 10:54:33 +0000 (12:54 +0200)]
[MISched] Fix bug(s) in bottom-up scheduling.

BUG 1 - choosing the right cycle when booking a resource.
---------------------------------------------------------

Bottom up scheduling should take in account the current cycle at
the scheduling boundary when determing at what cycle a resource can be
issued. Supposed the schedule boundary is at cycle `C`, and that we
want to check at what cycle a 3 cycles resource can be instantiated.

We have two cases: A, in which the last seen resource cycle LSRC in
which the resource is known to be used is more than oe euqual to 3
cycles away from current cycle `C`, (`C - LSRC >=3`) and B in which
the LSRC is less than 3 cycles away from C (`C - LSRC < 3`). Note
that, in bottom-up scheduling LRS is always smaller or eaual to the
current cycle `C`.

The two cases can be schematized as follow:

```
... | C + 1 | C    | C - 1 | C - 2 | C - 3 | C - 4 | ...
    |       |      |       |       |       | LSRC  |   -> Case A
    |       |      |       | LSRC  |       |       |   -> Case B

// Before allocating the resource
LSRC(A) = C - 4
LSRC(B) = C - 2
```

In case A, the scheduler sees cycles `C`, `C-1` and `C-2` being
available for booking the 3-cycles resource. Therefore the LSRC can be
updated to be `C`, and the resource can be scheduled from cycle `C`
(the `X` in the table):

```
... | C + 1 | C    | C - 1 | C - 2 | C - 3 | C - 4 | ...
    |       | X    | X     | X     |       |       |  -> Case A
// After allocating the resource
LSRC(A) = C
```

In case B, the 3-cycle resource usage would clash with the LSRC if
allocated starting from cycle C:

```
... | C + 1 | C    | C - 1 | C - 2 | C - 3 | C - 4 | ...
    |       | X    | X     | X     |       |       |   -> clash at cycle C - 2
    |       |      |       | LSRC  |       |       |   -> Case B
```

Therefore, the cycle in which the resource can be scheduled needs to
be greater than `C`. For the example, the resource is booked
in cycle `C + 1`.

```
... | C + 1 | C    | C - 1 | C - 2 | C - 3 | C - 4 | ...
    | X     | X    | X     |       |       |       |
// After allocating the resource
LSRC(B) = C + 1
```

The behavior we need to correctly support cases A and B is obtained by
computing the next value of the LSRC as the maximum between:

1. the current cycle `C`;

2. and the previous LSRC plus the number of cycle CYCLES the resource will need.

In formula:

```
LSRC(next) = max(C, LSRC(previous) + CYCLES)
```

BUG 2 - booking the resource for the correct number of cycles.
--------------------------------------------------------------

When storing the next LSRC, the funcion `getNextResourceCycle` was
being invoked setting to 0  the number of cycles a resource was using.
The invocation of `getNextResourceCycle` is now using the values of
`Cycles` instead of 0.

Effects on code generation
--------------------------

This fix have effects only on AArch64, for the Cortex-A55
scheduling model (`-mcpu=cortex-a55`).

The changes in the MIR tests caused by this patch show that the value
now reported by `getNextResourceCycle` is correct.

Other cortex-a55 tests have been touched by this change, where some
instructions have been swapped. The final generated code is equivalent
in term of the total number of cycles. The test
`llvm/test/CodeGen/AArch64/misched-detail-resource-booking-02.mir`
shows in details the correctness of the bottom up scheduling, and the
effect on the codegen change that are visible in the test
`llvm/test/CodeGen/AArch64/aarch64-smull.ll`.

Reviewed By: andreadb, dmgreen

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

12 months agoAMDGPU: Special case uniformity info for single lane workgroups
Matt Arsenault [Wed, 24 May 2023 15:22:20 +0000 (16:22 +0100)]
AMDGPU: Special case uniformity info for single lane workgroups

Constructors/destructors and OpenMP make use of single lane groups
in some cases.

12 months agoValueTracking: Handle ptrmask in computeKnownBits
Matt Arsenault [Sat, 24 Jun 2023 20:04:42 +0000 (16:04 -0400)]
ValueTracking: Handle ptrmask in computeKnownBits

12 months agoInstCombine: Add baseline tests for some ptrmask handling
Matt Arsenault [Mon, 26 Jun 2023 13:38:58 +0000 (09:38 -0400)]
InstCombine: Add baseline tests for some ptrmask handling

12 months ago[clang][dataflow] Don't crash if copy constructor arg doesn't have a storage location.
Martin Braenne [Wed, 28 Jun 2023 09:16:09 +0000 (09:16 +0000)]
[clang][dataflow] Don't crash if copy constructor arg doesn't have a storage location.

I accidentally used `cast` instead of `cast_or_null`.

Reviewed By: sammccall, xazax.hun

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

12 months agoOpenMP: Fix nothrow new/delete for amdgpu
Matt Arsenault [Tue, 13 Jun 2023 19:51:44 +0000 (15:51 -0400)]
OpenMP: Fix nothrow new/delete for amdgpu

I tried #pragma omp begin declare variant device_type(nohost) but it
didn't work and I'm not really sure how it's supposed to work.

12 months agoOpenMP: Add missing test coverage for nothrow new/delete
Matt Arsenault [Tue, 13 Jun 2023 19:14:09 +0000 (15:14 -0400)]
OpenMP: Add missing test coverage for nothrow new/delete

Missing test from fd3437a4f791cb0520e19b87953141fc68543377

12 months agoOpenMP/cmake: Use TARGET instead of looking for amdgpu-arch
Matt Arsenault [Fri, 23 Jun 2023 13:51:08 +0000 (09:51 -0400)]
OpenMP/cmake: Use TARGET instead of looking for amdgpu-arch

Not sure if the standalone build case is supposed to be a supported
path. Should probably rely on find_package and imported targets
anyway.

12 months ago[symbolizer] Exit early if input file is absent
Serge Pavlov [Wed, 28 Jun 2023 10:51:39 +0000 (17:51 +0700)]
[symbolizer] Exit early if input file is absent

If binary file specified as input with option --obj or -e is absent,
now llvm-addr2line exits immediately. This patch extends this behavior to
llvm-symbolizer. Previously llvm-symbolizer waited addresses from input
stream or command line in this case.

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

12 months ago[CodeGenPrepare] Implement releaseMemory
Sven van Haastregt [Wed, 28 Jun 2023 10:33:27 +0000 (11:33 +0100)]
[CodeGenPrepare] Implement releaseMemory

Release BlockFrequencyInfo and BranchProbabilityInfo results and other
per function information immediately afterwards, instead of holding
onto the memory until the next `CodeGenPrepare::runOnFunction` call.

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

Co-authored-by: Erik Hogeman <erik.hogeman@arm.com>
12 months ago[mlir][Linalg] Refactor isaContractionOpInterface and surrounding utils
Nicolas Vasilache [Tue, 27 Jun 2023 19:27:47 +0000 (19:27 +0000)]
[mlir][Linalg] Refactor isaContractionOpInterface and surrounding utils

This is almost NFC except for the fact that:
- when multiple candidates are available we now return them in sorted order vs undetermined order previously
- the type of the transform return is relaxed an a test is added for the case where the transform does not apply

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

12 months ago[SimplifyCFG] Regenerate test checks (NFC)
Nikita Popov [Wed, 28 Jun 2023 10:09:02 +0000 (12:09 +0200)]
[SimplifyCFG] Regenerate test checks (NFC)

12 months ago[DWARFv5][DWARFLinker] avoid stripping template names for .debug_names.
Alexey Lapshin [Mon, 26 Jun 2023 21:31:12 +0000 (23:31 +0200)]
[DWARFv5][DWARFLinker] avoid stripping template names for .debug_names.

DWARFLinker puts three names for subprograms into the .apple_names and
.debug_names: short name, linkage name, name without template parameters.

DW_TAG_subprogram
   DW_AT_linkage_name "_Z3fooIcEvv"
   DW_AT_name "foo<char>"

short name: "foo<char>"
linkage name: "_Z3fooIcEvv"
name without template parameters: "foo"

DWARFv5 does not require stripping template parameters for subprogram name.
Current llvm-dwarfdump --verify reports the error if names stored in
accelerator table do not match with DIE name(name with stripped template
parameters stored in accelerator table does not match with original DIE name).
This patch does not store name without template parameters into the .debug_names table.

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

12 months ago[ARM] allow long-call codegen for armv6-M eXecute Only (XO)
Ties Stuij [Wed, 28 Jun 2023 09:06:41 +0000 (10:06 +0100)]
[ARM] allow long-call codegen for armv6-M eXecute Only (XO)

Recently eXecute Only (XO) codegen was also allowed for armv6-M. Previously this
was only implemented for ~armv7+, effectively if MOVW/MOVT is
available. Regarding long calls, we remove the check for MOVW/MOVT when
generating code for XO, which already was redundant as in the subtarget
initialization we already check if XO is valid for the target. And targets that
generate valid XO code should be able to handle the (wrapper globaladdress)
node.

Reviewed By: efriedma

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

12 months agoReapply "[DebugInfo][InstrRef] Instrument x86 CMOV conversion to preserve variable...
Jeremy Morse [Wed, 28 Jun 2023 09:35:57 +0000 (10:35 +0100)]
Reapply "[DebugInfo][InstrRef] Instrument x86 CMOV conversion to preserve variable values"

X86's CMOV conversion transforms CMOV instructions into control flow between
blocks, meaning the value is computed by a PHI rather than a "real" machine
instruction. In instruction-referencing mode, we need to transfer the
instruction label between the old CMOV and the new PHI instruction to mark
where the variable value is computed.

There's an extra complication in that memory operands can be unfolded from the
CMOV and sunk into the new blocks -- the test checks both scenarios where the
instruction number has to hop between instructions.

This omission exposed by Dexter testing.

Reviewed By: Orlando

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

12 months agoReset NoPHI MachineFunction property in X86CmovConversion
OCHyams [Wed, 28 Jun 2023 09:33:02 +0000 (10:33 +0100)]
Reset NoPHI MachineFunction property in X86CmovConversion

In order to placate the machine-verifier, X86CmovConversion needs to reset the
NoPHI property when it inserts a PHI.

Fixes buildbot failure: https://lab.llvm.org/buildbot/#/builders/16/builds/50453

Reviewed By: StephenTozer

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

12 months ago[dataflow] Use consistent, symmetrical, non-mutating erased signature for join()
Sam McCall [Tue, 27 Jun 2023 18:59:18 +0000 (20:59 +0200)]
[dataflow] Use consistent, symmetrical, non-mutating erased signature for join()

Mutating join() isn't used and so appears to be an anti-optimization.
Having Lattice vs Environment inconsistent is awkward, particularly when trying
to minimize copies while joining.

This patch eliminates the difference, but doesn't actually change the signature
of join on concrete lattice types (as that's a breaking change).

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

12 months ago[unittest] teach gTest to print entries of DenseMap as pairs
Sam McCall [Tue, 27 Jun 2023 23:13:52 +0000 (01:13 +0200)]
[unittest] teach gTest to print entries of DenseMap as pairs

When an assertion like the following fails:
   EXPECT_THAT(map, ElementsAre(Pair("p", "nullable"))));
Error message before:
   Actual: { 40-byte object <E8-A5 9C-7F 25-37 00-00 58-7E 51-51 D0-7F 00-00 00-00 00-00 00-00 00-00 01-00 00-00 00-00 00-00 00-DA C7-7F 25-37 00-00> }
After:
   Actual: { ("p", "nonnull") }

It is not ideal that we need to refer directly to DenseMapPair inside the
internal namespace, but I believe the practical maintenance risk is low.
This change is covered by DenseMap's unittests, as we've covered SmallString etc
in the past.

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

12 months ago[LV] Precommit masked interleaved access tests
Igor Kirillov [Wed, 21 Jun 2023 17:03:50 +0000 (17:03 +0000)]
[LV] Precommit masked interleaved access tests

Precommit for D152258.

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

12 months agoRevert "[AMDGPU] Use SSAUpdater in PromoteAlloca"
pvanhout [Wed, 28 Jun 2023 09:13:51 +0000 (11:13 +0200)]
Revert "[AMDGPU] Use SSAUpdater in PromoteAlloca"

This reverts commit 091bfa76db64fbe96d0e53d99b2068cc05f6aa16.

12 months ago[clang][dataflow] Output debug info if `getChild()` doesn't find field.
Martin Braenne [Wed, 28 Jun 2023 08:05:02 +0000 (08:05 +0000)]
[clang][dataflow] Output debug info if `getChild()` doesn't find field.

Depends On D153409

Reviewed By: xazax.hun

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

12 months ago[clang][dataflow] Add a test that we can access fields of anonymous records.
Martin Braenne [Wed, 28 Jun 2023 08:04:33 +0000 (08:04 +0000)]
[clang][dataflow] Add a test that we can access fields of anonymous records.

Reviewed By: sammccall, ymandel, gribozavr2, xazax.hun

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

12 months ago[clangd] Always allow diagnostics from stale preambles
Kadir Cetinkaya [Thu, 22 Jun 2023 14:15:26 +0000 (16:15 +0200)]
[clangd] Always allow diagnostics from stale preambles

We've been running this internally for months now, without any
stability or correctness concerns. It has ~40% speed up on incremental
diagnostics latencies (as preamble can get invalidated through code completion
etc.).

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

12 months ago[ConstraintElim] Move FactOrCheck and State definitions to top. (NFC)
Florian Hahn [Wed, 28 Jun 2023 08:40:53 +0000 (09:40 +0100)]
[ConstraintElim] Move FactOrCheck and State definitions to top. (NFC)

This will enable follow-up refactoring to use the State directly in the
constraint system, reducing the need to pass lots of arguments around.

12 months ago[lsan] Be more conservative in SuspendedThreadsListMac::GetRegistersAndSP
Leonard Grey [Wed, 28 Jun 2023 08:28:57 +0000 (10:28 +0200)]
[lsan] Be more conservative in SuspendedThreadsListMac::GetRegistersAndSP

Currently, we only return REGISTERS_UNAVAILABLE_FATAL if we receive
KERN_INVALID_ARGUMENT from thread_status. In reality, there are other
possible return values (MACH_SEND_INVALID_DEST for example) that make it
dangerous to read memory. This can be demonstrated by running
create_thread_leak.cpp in standalone mode where it will appear to hang
due to a EXC_BAD_ACCESS while scanning the stack.

This change reverses the current logic to treat MIG_ARRAY_TOO_LARGE as
non-fatal, and all other errors as fatal.

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

12 months ago[mlir][doc] Fix broken docs
Kohei Yamaguchi [Wed, 28 Jun 2023 08:34:14 +0000 (08:34 +0000)]
[mlir][doc] Fix broken docs

- Fix include paths for Transform Dialect Tutorial
- Add math dialect's pass into Pass.md
- Remove a include path of Quant dialect from Pass.md

Reviewed By: ftynse

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

12 months agoUpdate module flags documentation for Min.
Jacob Bramley [Tue, 13 Jun 2023 15:21:15 +0000 (16:21 +0100)]
Update module flags documentation for Min.

This updates the documentation to match the implementation. Warning and
Min interact in the same way as Warning and Max.

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

12 months ago[Attributor] Update UTC version in test (NFC)
Nikita Popov [Wed, 28 Jun 2023 08:08:39 +0000 (10:08 +0200)]
[Attributor] Update UTC version in test (NFC)

In order to also check return attributes.

12 months ago[InstCombine] Fold binop of shifts with related amounts
Nikita Popov [Wed, 14 Jun 2023 10:23:19 +0000 (12:23 +0200)]
[InstCombine] Fold binop of shifts with related amounts

Fold

  binop(shift(ShiftedC1, ShAmt), shift(ShiftedC2, add(ShAmt, AddC)))
    ->
  shift(binop(ShiftedC1, shift(ShiftedC2, AddC)), ShAmt)

where both shifts are the same and AddC is a valid shift amount.

Proofs: https://alive2.llvm.org/ce/z/PhVVeg

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

12 months ago[Attributor] Convert test to opaque pointers (NFC)
Nikita Popov [Tue, 27 Jun 2023 13:58:56 +0000 (15:58 +0200)]
[Attributor] Convert test to opaque pointers (NFC)

This converts the arg-count-mismatch.ll test to opaque pointers.
The bitcasts of the called functions are now implicit and this
affects behavior: We now infer memory attributes. This should be
fine, as function-level attributes are not affected by signature
mismatches.

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

12 months agoRevert D153927 "Resubmit with fix: [NFC] Refactor MBB hotness/coldness into templated...
Fangrui Song [Wed, 28 Jun 2023 07:30:52 +0000 (00:30 -0700)]
Revert D153927 "Resubmit with fix: [NFC] Refactor MBB hotness/coldness into templated PSI functions."

This reverts commit 4d8cf2ae6804e0d3f2b668dbec0f5c1983358328.

There is a library layering violation. LLVMAnalysis cannot depend on LLVMCodeGen.

```
llvm/include/llvm/Analysis/ProfileSummaryInfo.h:19:10: fatal error: 'llvm/CodeGen/MachineFunction.h' file not found
   19 | #include "llvm/CodeGen/MachineFunction.h"
      |          ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
```

12 months ago[mlir][complex] Canonicalize complex.mul with 1 and 0
Kai Sasaki [Wed, 28 Jun 2023 05:55:42 +0000 (14:55 +0900)]
[mlir][complex] Canonicalize complex.mul with 1 and 0

We can fold the complex.mul if the right value is obvious 1 or 0.

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

12 months ago[llvm-exegesis] Adjust GLIBC_INITS_RSEQ condition
Fangrui Song [Wed, 28 Jun 2023 07:23:38 +0000 (00:23 -0700)]
[llvm-exegesis] Adjust GLIBC_INITS_RSEQ condition

Commit 9f80831f3627e800709e2434bbbd5bb179b1576e introduced `#include <sys/rseq.h>`,
but RSEQ_SIG is only defined by some glibc ports (aarch64,arm,mips,powerpc,s390,x86),
causing other hosts (e.g., riscv64, loongarch64) to fail to build.

Reviewed By: aidengrossman, xen0n

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

12 months agoSummary: [lldb] Fix libncurses, libpanel library link order
Hau Hsu [Wed, 28 Jun 2023 06:59:09 +0000 (14:59 +0800)]
Summary: [lldb] Fix libncurses, libpanel library link order

libpanel depends on libcurses, so when linking static libraries, libpanel
should be places prior to libcurses.

This patch resolves error like:
```
.../x86_64-centos6-linux-gnu/bin/ld:
.../lib/libpanelw.a(p_show.o):
in function `show_panel':
p_show.c:(.text+0x39): undefined reference to `_nc_panelhook_sp'
.../x86_64-centos6-linux-gnu/bin/ld:
.../lib/libpanelw.a(p_show.o):
in function `update_panels_sp':
p_update.c:(.text+0x1f): undefined reference to `_nc_panelhook_sp'
collect2: error: ld returned 1 exit status
```

Reviewed By: JDevlieghere

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

12 months agoRevert "Revert "[mlir][Transform] Add support for mma.sync m16n8k16 f16 rewrite....
Nicolas Vasilache [Tue, 27 Jun 2023 09:02:31 +0000 (09:02 +0000)]
Revert "Revert "[mlir][Transform] Add support for mma.sync m16n8k16 f16 rewrite." and "[mlir][Transform] Introduce nvgpu transform extensions""

This reverts commit 6506692fe619ef8a1f7c6ea829d9a9eceb31622d.

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

12 months ago[flang][hlfir] Do not reuse hlfir.expr mask when saving RHS.
Jean Perier [Wed, 28 Jun 2023 06:32:21 +0000 (08:32 +0200)]
[flang][hlfir] Do not reuse hlfir.expr mask when saving RHS.

In WHERE and masked FORALL assignment, both the mask and the
RHS may need to be saved in some temporary storage before evaluating
the assignment.

The code was trying to "optimize" that case when evaluating the RHS
by not fetching the mask temporary that was just created, but in simple
cases of WHERE construct where the evaluated mask is an hlfir.expr,
this caused the hlfir.expr to be both used in an hlfir.associate and
later in an hlfir.apply to create the fir.if to mask the RHS evaluation.
This double usage prevents codegen from inlining the hlfir.expr at the
hlfir.apply, and from "moving" the hlfir.expr storage into the temp
during hlfir.associate bufferization. So this is pessimizing the code:
this would lead to created two mask array temporary storages

This was caught by the unexpectedly high number of "not yet implemented:
hlfir.associate of hlfir.expr with more than one use" that were firing.

Use the mask temporary instead (the hlfir.associate result) when possible.
Some temporary (the "inlined stack") do not support fetching and pushing
in the same run (a single counter is used to keep track of the fetching
and pushing position). Add a canBeFetchedAfterPush() for safety,
but this limitation is anyway not relevant for hlfir.expr since the
inlined stack is only used to save "trivial" scalars.

Also update the temporary storage name to only indicate "forall" if
the top level construct is a FORALL. This is not a very precise name,
but it should at least give a correct context to indicate in the IR
why some temporary array storage was created.

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

12 months ago[flang] do not merge block after lowering
Jean Perier [Wed, 28 Jun 2023 06:27:16 +0000 (08:27 +0200)]
[flang] do not merge block after lowering

Lowering relies on dead code generation / unreachable block deletion
to delete some code that is potentially invalid.

However, calling mlir::simplifyRegion also merges block, which may
promote SSA values to block arguments. Not all FIR types are intended
to be block arguments.
The added test shows an example where block merging led to
fir.shape<> being block arguments (and a failure later in codegen).

Reviewed By: tblah, clementval, vdonaldson

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

12 months ago[AMDGPU] Use SSAUpdater in PromoteAlloca
pvanhout [Tue, 13 Jun 2023 07:49:38 +0000 (09:49 +0200)]
[AMDGPU] Use SSAUpdater in PromoteAlloca

This allows PromoteAlloca to not be reliant on a second SROA run to remove the alloca completely. It just does the full transformation directly.

Note PromoteAlloca is still reliant on SROA running first to
canonicalize the IR. For instance, PromoteAlloca will no longer handle aggregate types because those should be simplified by SROA before reaching the pass.

Reviewed By: #amdgpu, arsenm

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

12 months agoPre-commit test for D151696.
Freddy Ye [Wed, 28 Jun 2023 05:06:05 +0000 (13:06 +0800)]
Pre-commit test for D151696.

Meanwhile this patch added missing tests for supported CPU names
of cpu_dispatch/specific attribute and added more CHECKs for
resolver function.

Reviewed By: pengfei, skan

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

12 months ago[Fuchsia] Enable libcxx filesystem on Windows for stage 1 build
Petr Hosek [Wed, 28 Jun 2023 05:42:06 +0000 (05:42 +0000)]
[Fuchsia] Enable libcxx filesystem on Windows for stage 1 build

This is a follow up to D153931 but for the first stage.

12 months ago[NFC] [C++20] [Modules] Add a test for merging lambda types
Chuanqi Xu [Wed, 28 Jun 2023 05:41:36 +0000 (13:41 +0800)]
[NFC] [C++20] [Modules] Add a test for merging lambda types

Close https://github.com/llvm/llvm-project/issues/57222.

This should be fixed with the series of bc73ef0. Add the test case for
C++20 Named modules.

12 months agoResubmit with fix: [NFC] Refactor MBB hotness/coldness into templated PSI functions.
Han Shen [Tue, 27 Jun 2023 23:37:25 +0000 (16:37 -0700)]
Resubmit with fix: [NFC] Refactor MBB hotness/coldness into templated PSI functions.

In D152399, we calculate BPI->BFI in MachineFunctionSplit pass just to
use PSI->isFunctionHotInCallGraph, which is expensive. Instead, we can
implement this directly with MBFI.

Reviewer mentioned in the comment, that machine_size_opts already has
isFunctionColdInCallGraph, isFunctionHotInCallGraphNthPercentile, etc
implemented. These can be refactored and reused across MFS and machine
size opts.

This CL does this - it refactors out those internal static functions
into PSI as templated functions, so they can be accessed easily.

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

12 months agosanitizer_allocator_test: guard SpecialSizeClassMap test with !ALLOCATOR64_SMALL_SIZE
Fangrui Song [Wed, 28 Jun 2023 04:17:34 +0000 (21:17 -0700)]
sanitizer_allocator_test: guard SpecialSizeClassMap test with !ALLOCATOR64_SMALL_SIZE

This artificial size class map uses a very large kMaxSize (1<<34) which is not
suitable for small kAddressSpaceSize systems (aarch64-*-linux-android, riscv64).
Exposed by D153664.

12 months ago[test] Replace aarch64-*-eabi with aarch64
Fangrui Song [Wed, 28 Jun 2023 03:02:52 +0000 (20:02 -0700)]
[test] Replace aarch64-*-eabi with aarch64

Using "eabi" for aarch64 targets is a common mistake and warned by Clang Driver.
We want to avoid it elsewhere as well. Just use the common "aarch64" without
other triple components.

12 months ago[sanitizer] Relax the restriction on SizeClassAllocator64::kAllocatorSize
Fangrui Song [Wed, 28 Jun 2023 02:47:03 +0000 (19:47 -0700)]
[sanitizer] Relax the restriction on SizeClassAllocator64::kAllocatorSize

Commit 278ccdacdcbde3399f1fa4b3ab929212e4e0322c says that kAllocatorSize
must be >= (1<<32), but this is not accurate. This static_assert causes 128GiB
kAllocatorSize to be unable to select DefaultSizeClassMap (kRegionSize is
1<<31).

Relax the restriction to be able to satisfy the largest size class. This allows
DefaultSizeClassMap to be usable with 128GiB kAllocatorSize, with
check-{asan,lsan,sanitizer} passing.

Reviewed By: #sanitizers, vitalybuka, kstoimenov

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

12 months ago[test] Replace aarch64-arm-none-eabi with aarch64
Fangrui Song [Wed, 28 Jun 2023 02:36:26 +0000 (19:36 -0700)]
[test] Replace aarch64-arm-none-eabi with aarch64

Similar to 02e9441d6ca73314afa1973a234dce1e390da1da, but for llvm/test and one
lld/test/ELF test.

12 months ago[test] Replace -triple aarch64-arm-none-eabi with -triple aarch64
Fangrui Song [Wed, 28 Jun 2023 02:21:41 +0000 (19:21 -0700)]
[test] Replace -triple aarch64-arm-none-eabi with -triple aarch64

Using "eabi" for aarch64 targets is a common mistake and warned by driver
(D153430). We want to avoid them for -cc1 tests as well.

12 months ago[lldb] Fix search & replace mistake in IRForTarget comment (NFC)
Dave Lee [Wed, 28 Jun 2023 01:36:23 +0000 (18:36 -0700)]
[lldb] Fix search & replace mistake in IRForTarget comment (NFC)

See 1b95a6ff95a279de27d5f63de8d67a731f280b44

12 months ago[lldb] Improve log message (NFC)
Dave Lee [Wed, 28 Jun 2023 01:31:23 +0000 (18:31 -0700)]
[lldb] Improve log message (NFC)

Remove the unmatched closing paren )

12 months ago[lldb] Assert index is valid in DWARFDeclContext
Jonas Devlieghere [Wed, 28 Jun 2023 00:01:53 +0000 (17:01 -0700)]
[lldb] Assert index is valid in DWARFDeclContext

Replace the comment with an assert to enforce the correct index is used.

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

12 months ago[AIX][tests] Disable test for missing DWARF section
Jake Egan [Wed, 28 Jun 2023 00:53:38 +0000 (20:53 -0400)]
[AIX][tests] Disable test for missing DWARF section

This new test is failing on AIX due to an unsupported DWARF section, so disable it (same rationale as patch D111336).

12 months ago[RFC][flang] Experimental device build of Flang runtime.
Slava Zakharin [Mon, 22 May 2023 21:05:18 +0000 (14:05 -0700)]
[RFC][flang] Experimental device build of Flang runtime.

These are initial changes to experiment with building the Fortran runtime
as a CUDA or OpenMP target offload library.

The initial patch defines a set of macros that have to be used consistently
in Flang runtime source code so that it can be built for different
offload devices using different programming models (CUDA, HIP, OpenMP target
offload). Currently supported modes are:
* CUDA: Flang runtime may be built as a fatlib for the host and a set
  of CUDA architectures specified during the build. The packaging
  of the device code is done by the CUDA toolchain and may differ
  from toolchan to toolchain.
* OpenMP offload:
  - host_device mode: Flang runtime may be built as a fatlib for the host
    and a set of OpenMP offload architectures. The packaging
    of the device code is done by the OpenMP offload compiler and may differ
    from compiler to compiler.

OpenMP offload 'nohost' mode is a TODO to match the build setup
of libomptarget/DeviceRTL. Flang runtime will be built as LLVM Bitcode
library using Clang/LLVM toolchain. The host part of the library
will be "empty", so there will be two distributable object: the host
Flang runtime and dummy host library with device Flang runtime pieces
packaged using clang-offload-packager and clang.

In all supported modes, enabling parts of Flang runtime for the device
compilation can be done iteratively to make the patches observable.
Note that at any point in time the resulting library may have unresolved
references to not yet enabled parts of Flang runtime.

Example cmake/make commands for building with Clang for NVPTX target:
cmake \
-DFLANG_EXPERIMENTAL_CUDA_RUNTIME=ON \
-DCMAKE_CUDA_ARCHITECTURES=80 \
-DCMAKE_C_COMPILER=/clang_nvptx/bin/clang \
-DCMAKE_CXX_COMPILER=/clang_nvptx/bin/clang++ \
-DCMAKE_CUDA_COMPILER=/clang_nvptx/bin/clang \
/llvm-project/flang/runtime/
make -j FortranRuntime

Example cmake/make commands for building with Clang OpenMP offload:
cmake \
-DFLANG_EXPERIMENTAL_OMP_OFFLOAD_BUILD="host_device" \
-DCMAKE_C_COMPILER=clang \
-DCMAKE_CXX_COMPILER=clang++ \
-DFLANG_OMP_DEVICE_ARCHITECTURES="sm_80" \
../flang/runtime/
make -j FortranRuntime

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

12 months ago[LoongArch] Add back SDNPSideEffect properties to CSR and IOCSR read ops
WANG Xuerui [Wed, 28 Jun 2023 00:25:28 +0000 (08:25 +0800)]
[LoongArch] Add back SDNPSideEffect properties to CSR and IOCSR read ops

In general, CSR and IOCSR reads should be treated as volatile because:

* there may well be intervening writes between seemingly common
  expressions;
* the stateful entity behind a given (IO)CSR may well be volatile.

Confirmed to fix broken Clang Linux/LoongArch builds (dying when a
userspace process tries to use FPU, panicking when that process happens
to be PID 1) with this patch.

Fixes: https://github.com/llvm/llvm-project/issues/63549
Fixes: 2efdacf74c54 ("[LoongArch] Add missing chains and remove unnecessary `SDNPSideEffect` property for some intrinsic nodes")

Reviewed By: SixWeining, hev

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

12 months ago[llvm] Add include guards to LLVMOption TableGen
Brian Gesiak [Tue, 27 Jun 2023 20:25:39 +0000 (16:25 -0400)]
[llvm] Add include guards to LLVMOption TableGen

Add include guards that allow multiple includes of `OptParser.td`. This
is helpful when defining multiple sets of options in multiple files.
For example, a user could define a `HelpOptions.td` file that defines
only `-h` and `--help`:

```
// HelpOptions.td
include "llvm/Option/OptParser.td"

def HelpOptionGroup : OptionGroup<"Help Options">;
def help : Flag<["--", "-"], "help">, Group<HelpOptionGroup>,
           Flags<[]>;
def : Flag<["-"], "h">, Group<HelpOptionGroup>, Flags<[]>, Alias<help>;
```

This file could then be included into any TableGen file that wishes to
define these options:

```
// MyOptions.td
include "llvm/Option/OptParser.td"

def MyOptionGroup : OptionGroup<"My Options">;
// ...define my options.

// And also define `-h` and `--help`:
include "HelpOptions.td"
```

This currently isn't possible, because this would result in
`OptParser.td` being included twice. Alternatively, the include of
`OptParser.td` in the `HelpOptions.td` example above could be removed,
but then `llvm-tblgen --gen-opt-parser-defs HelpOptions.td` would fail
(because the `OptionGroup` and `Option` records are defined in
`OptParser.td`).

Reviewed By: rriddle

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

12 months ago[CSSPGO][Preinliner] Always inline zero-sized functions.
Hongtao Yu [Tue, 27 Jun 2023 23:31:50 +0000 (16:31 -0700)]
[CSSPGO][Preinliner] Always inline zero-sized functions.

Zero-sized functions should be cost-free in term of size budget, so they should be considered during inlining even if we run out of size budget.

This appears to give 0.5% win for one of our internal services.

Reviewed By: wenlei

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

12 months ago[SCEV] Optimize FoldID
Vitaly Buka [Fri, 17 Feb 2023 07:07:52 +0000 (23:07 -0800)]
[SCEV] Optimize FoldID

Improve compile time

https://llvm-compile-time-tracker.com/compare.php?from=773e5dfbc6bf4d4c5be568a039661e9baad80d15&to=7ba15f3a4b59181110e73dc397a9fe56165a2b73&stat=instructions:u

Reviewed By: MaskRay

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

12 months ago[Fuchsia] Enable libcxx filesystem on Windows build.
Haowei Wu [Tue, 27 Jun 2023 23:52:57 +0000 (16:52 -0700)]
[Fuchsia] Enable libcxx filesystem on Windows build.

This patch enables the libcxx filesystem when building runtimes for
Windows.

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

12 months ago[builtins] Avoid using floating point q suffix. NFCI
Alex Richardson [Tue, 27 Jun 2023 23:16:16 +0000 (16:16 -0700)]
[builtins] Avoid using floating point q suffix. NFCI

The q floating point suffix is not supported by all compilers
configurations (e.g. GCC only supports it for some targets), so use a
macro (much like UINT64_C) instead. As this touches almost all lines in
the two tests also run them through clang-format.

12 months agoAllow setting LLVM_EXPERIMENTAL_TARGETS_TO_BUILD to "all"
Alex Richardson [Tue, 27 Jun 2023 23:28:08 +0000 (16:28 -0700)]
Allow setting LLVM_EXPERIMENTAL_TARGETS_TO_BUILD to "all"

When set to "all" we will now build all experimental targets. This matches
the behaviour for LLVM_TARGETS_TO_BUILD.

Reviewed By: beanz

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

12 months ago[test] Regenerate some tests
Arthur Eubanks [Tue, 27 Jun 2023 23:53:11 +0000 (16:53 -0700)]
[test] Regenerate some tests

12 months ago[libc++][hardening] Add an ABI macro `_LIBCPP_ABI_BOUNDED_ITERATORS`.
varconst [Tue, 27 Jun 2023 23:41:02 +0000 (16:41 -0700)]
[libc++][hardening] Add an ABI macro `_LIBCPP_ABI_BOUNDED_ITERATORS`.

Use the new macro instead of `_LIBCPP_DEBUG_ITERATOR_BOUNDS_CHECKING`.

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

12 months agoHave GetKernelsAndKextsInDirectoryHelper request follow symlinks
Jason Molenda [Tue, 27 Jun 2023 23:15:34 +0000 (16:15 -0700)]
Have GetKernelsAndKextsInDirectoryHelper request follow symlinks

While working on the broken-symlinks issue, I noticed this one place
where I was setting `find_other` to false unintentionally in the
darwin kernel platform kext/kernel scan.  Small fix while I'm here.

12 months ago[clang-format] Fix bugs in annotating r_paren as C-style cast
Owen Pan [Mon, 26 Jun 2023 05:18:12 +0000 (22:18 -0700)]
[clang-format] Fix bugs in annotating r_paren as C-style cast

Don't annotate r_paren as TT_CastRParen if it's followed by an amp/star and
either the line is in a macro definition or a numeric_constant follows the
amp/star.

Fixes #59634.

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

12 months ago[libc++] Add _LIBCPP_NO_CFI to __make_uninitialized_buffer
Nikolas Klauser [Tue, 27 Jun 2023 22:47:09 +0000 (15:47 -0700)]
[libc++] Add _LIBCPP_NO_CFI to __make_uninitialized_buffer

CFI doen't allow casting uninitialized memory to a type, resulting in a
crash in `__make_uninitialized_buffer`.

12 months ago[lldb] Duplicate Target::Launch resuming logic into CommandObjectPlatformProcessLaunch
Dave Lee [Tue, 27 Jun 2023 21:12:45 +0000 (14:12 -0700)]
[lldb] Duplicate Target::Launch resuming logic into CommandObjectPlatformProcessLaunch

Fix `platform process launch` on macOS where it fails for lack of auto-resuming support.

This change reproduces the resuming logic found in `Target::Launch`.

This issue was identified by @DavidSpickett in D153636. This change relies on the tests
added in that PR. Thanks David.

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

12 months ago[lldb][NFC] Prevent slicing when converting DataExtractors
Felipe de Azevedo Piovezan [Tue, 27 Jun 2023 20:10:05 +0000 (16:10 -0400)]
[lldb][NFC] Prevent slicing when converting DataExtractors

LLDB's implementation of DWARFDataExtractor has a method that returns a
llvm::DWARFDataExtractor. In some cases, like DebugNamesDWARFIndex::Create, we
were passing an LLVM::DWARFDataExtractor to a function that expects a
LLVM:DataExtractor by value. This is causing slicing of the derived class.

While slicing is not inherently bad, it can be dangerous if the constructor of
the derived class mutates the base class in a way that leaves it in an invalid
state after slicing.

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

12 months ago[SLP]Fix PR63141: compareCmp is not strict weak ordering.
Alexey Bataev [Tue, 27 Jun 2023 19:48:08 +0000 (12:48 -0700)]
[SLP]Fix PR63141: compareCmp is not strict weak ordering.

Added some extra checks for comapreCMP function if IsCompatibility is
false to make it meat the strict weak ordering requirements to be
correctly used in sort functions.

12 months ago[Propeller] Match debug info filenames from profiles to distinguish internal linkage...
Rahman Lavaee [Tue, 27 Jun 2023 20:11:45 +0000 (20:11 +0000)]
[Propeller] Match debug info filenames from profiles to distinguish internal linkage functions with the same names.

Basic block sections profiles are ingested based on the function name. However, conflicts may occur when internal linkage functions with the same symbol name are linked into the binary (for instance static functions defined in different modules). Currently, these functions cannot be optimized unless we use `-funique-internal-linkage-names` (D89617) to enforce unique symbol names.

However, we have found that `-funique-internal-linkage-names` does not play well with inline assembly code which refers to the symbol via its symbol name. For example, the Linux kernel does not build with this option.

This patch implements a new feature which allows differentiating profiles based on the debug info filenames associated with each function. When specified, the given path is compared against the debug info filename of the matching function and profile is ingested only when the debug info filenames match. Backward-compatibility is guaranteed as omitting the specifiers from the profile would allow them to be matched by function name only. Also specifiers can be included for a subset of functions only.

Reviewed By: shenhan

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

12 months ago[lldb] Avoid FileSystem::Resolve for cached files in the SourceManager
Jonas Devlieghere [Mon, 26 Jun 2023 17:45:23 +0000 (10:45 -0700)]
[lldb] Avoid FileSystem::Resolve for cached files in the SourceManager

Currently, source files are cached by their resolved path. This means
that before we can query the cache, we potentially have to resolve the
path, which can be slow. This patch avoids the call to FileSystem::Resolve
by caching both the resolved and unresolved path. We now only resolve
the path once when we create and cache a new file.

rdar://110787562

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

12 months ago[flang][hlfir] Do not dereference unallocated entities in structure constructor.
Slava Zakharin [Mon, 26 Jun 2023 21:32:41 +0000 (14:32 -0700)]
[flang][hlfir] Do not dereference unallocated entities in structure constructor.

Component-by-component assignment must be able to handle unallocated
allocatable values in structure constructor. F2018 7.5.10 p. 7 states
that the component must have unallocated status as a result of such
construction. The structure constructor temporary is initialized
such that all the allocatable components are unallocated, so we just
need to make sure not to do the component assignment if RHS is deallocated.

Depends on D152482  (the same LIT test is affected)

Reviewed By: jeanPerier, tblah

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

12 months ago[SLP][NFC]Add a test for vectorization of cmps with alternate
Alexey Bataev [Tue, 27 Jun 2023 20:47:28 +0000 (13:47 -0700)]
[SLP][NFC]Add a test for vectorization of cmps with alternate
predicates, NFC.

12 months ago[AArch64][SelectionDAG] fix infinite loop caused by legalizing & combining CONCAT_VECTORS
FLZ101 [Tue, 27 Jun 2023 20:57:41 +0000 (13:57 -0700)]
[AArch64][SelectionDAG] fix infinite loop caused by legalizing & combining CONCAT_VECTORS

Legalizing in `AArch64TargetLowering::LowerCONCAT_VECTORS()` and combining in `DAGCombiner::visitCONCAT_VECTORS()` could cause an infinite loop.
This commit fixes that issue by conditionally skipping the combining.

Fix https://github.com/llvm/llvm-project/issues/63322

Reviewed By: RKSimon, MaskRay

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

12 months ago[Flang][OpenMP] Correct location information 1/n
Kiran Chandramohan [Tue, 27 Jun 2023 20:33:50 +0000 (20:33 +0000)]
[Flang][OpenMP] Correct location information 1/n

This patch fixes location information of a few OpenMP constructs
and clauses. More fixes will come in follow-up patches.

This patch follows the same fixes for OpenACC (D131659).

Addresses some of the issues in https://github.com/llvm/llvm-project/issues/57215

Reviewed By: clementval

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

12 months ago[libcxx] Add new line after assert message
Vitaly Buka [Fri, 20 Jan 2023 07:32:12 +0000 (23:32 -0800)]
[libcxx] Add new line after assert message

Abort signal handler may print aswell. Without new line it goes into the
same.

Reviewed By: #libc, philnik, Mordante

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

12 months ago[flang] Handle empty array references in DATA statements
Peter Klausler [Mon, 26 Jun 2023 18:51:38 +0000 (11:51 -0700)]
[flang] Handle empty array references in DATA statements

When an array reference in a DATA statement is empty due to an
empty vector subscript or a section lower bound being higher than
its upper bound with a positive stride (or lower with negative),
ensure that isEmpty() is correct afterwards so that such an empty
array reference doesn't terminate processing of that DATA statement
block.

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

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

12 months ago[lit] Add a method to lit.TestFormat to get the list of tests associated to a path
Louis Dionne [Mon, 29 May 2023 20:49:33 +0000 (13:49 -0700)]
[lit] Add a method to lit.TestFormat to get the list of tests associated to a path

Lit TestFormat classes already needed to implement the getTestsInDirectory
method. However, some test formats may want to expand a single test path
to multiple Lit tests, for example in the case of a test that actually
generates other Lit tests.

To accommodate that, this commit adds the getTestsForPath method to
TestFormat. This method can be used to turn a single path in a Lit
test suite into a list of tests associated to that path.

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

12 months ago[clang][Sema] Add CodeCompletionContext::CCC_ObjCClassForwardDecl
David Goldman [Tue, 27 Jun 2023 18:16:13 +0000 (14:16 -0400)]
[clang][Sema] Add CodeCompletionContext::CCC_ObjCClassForwardDecl

- Use this new context in Sema to limit completions to seen ObjC class
  names

- Use this new context in clangd to disable include insertions when
  completing ObjC forward decls

Reviewed By: kadircet

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

12 months ago[flang] Avoid crash in error recovery
Peter Klausler [Mon, 26 Jun 2023 17:50:31 +0000 (10:50 -0700)]
[flang] Avoid crash in error recovery

When a PASS() clause names a nonexistent dummy argument, don't crash
later in expression semantics.
Fixes https://github.com/llvm/llvm-project/issues/63487.

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

12 months ago[flang] Catch error: COMMON block and implicit interface external subprogram with...
Peter Klausler [Mon, 26 Jun 2023 17:00:10 +0000 (10:00 -0700)]
[flang] Catch error: COMMON block and implicit interface external subprogram with same name

Declaration checking catches the error of a COMMON block and a subprogram
definition having the same name, but misses the case of a COMMON block
and an a reference to an external subprogram with an implicit interface.
Fix.  Fixes bug https://github.com/llvm/llvm-project/issues/63247.

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

12 months ago[RISCV] Fix a typo in a comment
Philip Reames [Tue, 27 Jun 2023 20:02:54 +0000 (13:02 -0700)]
[RISCV] Fix a typo in a comment

12 months ago[llvm-exegesis] Use correct pid_t definition in SubprocessMemory.h
Aiden Grossman [Tue, 27 Jun 2023 20:01:20 +0000 (20:01 +0000)]
[llvm-exegesis] Use correct pid_t definition in SubprocessMemory.h

Due to failures in MinGW builds I adjusted the preprocessor directives
to be more specific about when to include but kept the old definition in
files that were committed more recently on accident. This patch changes
those definitions to match the fixed ones.

Also fix a typo leftover from the original change in PerfHelper.h.

12 months ago[RISCV] Simplify pseudo classes used by v(f)merge [nfc]
Philip Reames [Tue, 27 Jun 2023 19:27:46 +0000 (12:27 -0700)]
[RISCV] Simplify pseudo classes used by v(f)merge [nfc]

This is mostly hand inlining multiclass definitions, and simplifying for the fact that non-default template values were never actually used.

12 months agoRevert "[clang-tidy] Fix modernize-use-std-print check when return value used"
Piotr Zegar [Tue, 27 Jun 2023 19:25:52 +0000 (19:25 +0000)]
Revert "[clang-tidy] Fix modernize-use-std-print check when return value used"

This reverts commit 3e12b2e207cfa802937488a2c0b90d482eaf00a9.

12 months agoReland "[dataflow] avoid more accidental copies of Environment"
Sam McCall [Mon, 26 Jun 2023 18:01:04 +0000 (20:01 +0200)]
Reland "[dataflow] avoid more accidental copies of Environment"

This reverts commit fb13d027eae405a7be96fd7da0d72422e48a0719.

12 months ago[mlir][VectorType] Allow arbitrary dimensions to be scalable
Andrzej Warzynski [Mon, 19 Jun 2023 12:01:11 +0000 (13:01 +0100)]
[mlir][VectorType] Allow arbitrary dimensions to be scalable

At the moment, only the trailing dimensions in the vector type can be
scalable, i.e. this is supported:

    vector<2x[4]xf32>

and this is not allowed:

    vector<[2]x4xf32>

This patch extends the vector type so that arbitrary dimensions can be
scalable. To this end, an array of bool values is added to every vector
type to denote whether the corresponding dimensions are scalable or not.
For example, for this vector:

  vector<[2]x[3]x4xf32>

the following array would be created:

  {true, true, false}.

Additionally, the current syntax:

  vector<[2x3]x4xf32>

is replaced with:

  vector<[2]x[3]x4xf32>

This is primarily to simplify parsing (this way, the parser can easily
process one dimension at a time rather than e.g. tracking whether
"scalable block" has been entered/left).

NOTE: The `isScalableDim` parameter of `VectorType` (introduced in this
patch) makes `numScalableDims` redundant. For the time being,
`numScalableDims` is preserved to facilitate the transition between the
two parameters. `numScalableDims` will be removed in one of the
subsequent patches.

This change is a part of a larger effort to enable scalable
vectorisation in Linalg. See this RFC for more context:
  * https://discourse.llvm.org/t/rfc-scalable-vectorisation-in-linalg/

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