platform/upstream/llvm.git
21 months ago[Clang][RISCV] Update operand order for vmerge and vcompress
eopXD [Tue, 27 Dec 2022 09:12:51 +0000 (01:12 -0800)]
[Clang][RISCV] Update operand order for vmerge and vcompress

From:
  vint32m1_t vmerge_vvm_i32m1 (vbool32_t mask, vint32m1_t op1, vint32m1_t op2, size_t vl);
  vint32m1_t vcompress_vm_i32m1 (vbool32_t mask, vint32m1_t src, size_t vl);

To:
  vint32m1_t vmerge_vvm_i32m1 (vint32m1_t op1, vint32m1_t op2, vbool32_t selector, size_t vl);
  vint32m1_t vcompress_vm_i32m1 (vint32m1_t src, vbool32_t selector, size_t vl);

Address issues:
riscv-non-isa/rvv-intrinsic-doc#140
riscv-non-isa/rvv-intrinsic-doc#167

Pull request:
riscv-non-isa/rvv-intrinsic-doc#185

Reviewed By: craig.topper

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

21 months ago[gn] port 3432f4bf86e7 (//llvm/lib/Testing/Annotations)
Nico Weber [Fri, 13 Jan 2023 01:07:55 +0000 (20:07 -0500)]
[gn] port 3432f4bf86e7 (//llvm/lib/Testing/Annotations)

21 months ago[clang-tidy] don't warn when returning the result for bugprone-standalone-empty
v1nh1shungry [Thu, 12 Jan 2023 23:40:05 +0000 (23:40 +0000)]
[clang-tidy] don't warn when returning the result for bugprone-standalone-empty

Relevant issue: https://github.com/llvm/llvm-project/issues/59517

Currently this check will warn when the result is used in a `return`
statement, e.g.

```
bool foobar() {
  std::vector<int> v;
  return v.empty();
  // will get a warning here, which makes no sense IMO
}
```

Reviewed By: cjdb, denik

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

21 months ago[lld-macho] Downgrade missing fat arch to warning
Keith Smiley [Thu, 12 Jan 2023 22:43:12 +0000 (14:43 -0800)]
[lld-macho] Downgrade missing fat arch to warning

This mirrors ld64's behavior. In many cases this likely still leads to a
link failure but if you didn't actually use anything from the library
it can be ignored. If you care about these invalid cases -fatal_warnings
still upgrades it back to an error.

Example: https://github.com/keith/ld64.lld/issues/3

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

21 months ago[lsan] Fix build for Fuchsia after D140039
Alex Brachet [Fri, 13 Jan 2023 00:47:46 +0000 (00:47 +0000)]
[lsan] Fix build for Fuchsia after D140039

21 months agoAdd -disable-check-noreturn-call for stack protect
Xiang1 Zhang [Wed, 11 Jan 2023 08:54:07 +0000 (16:54 +0800)]
Add -disable-check-noreturn-call for stack protect

Differential Revision: https://reviews.llvm.org/D141556
Reviewed By: lanza

21 months agoOpenMP: Use inbounds in EmitOMPAggregateAssign
Matt Arsenault [Thu, 12 Jan 2023 01:34:00 +0000 (20:34 -0500)]
OpenMP: Use inbounds in EmitOMPAggregateAssign

This looked like a plausibly correct out of tree patch.
The changed testcases with the pragmas stripped out only use
inbounds GEPs so I assume this is correct.

21 months agoRevert "[GWP-ASan] Add recoverable mode."
Mitch Phillips [Thu, 12 Jan 2023 23:58:36 +0000 (15:58 -0800)]
Revert "[GWP-ASan] Add recoverable mode."

This reverts commit 90a9beb7cc9755791caa23dfc4e36bc544e98ed3.

Reason: Broke an internal build.

21 months agoRevert "[GWP-ASan] Fix test to work with Fuchsia's zxtest"
Mitch Phillips [Thu, 12 Jan 2023 23:58:10 +0000 (15:58 -0800)]
Revert "[GWP-ASan] Fix test to work with Fuchsia's zxtest"

This reverts commit 64138725e4cf0ab5e3f9c0dba38e11ce3d3b4017.

Parent change https://reviews.llvm.org/D140173 broke an internal build.
I'll land this bit as part of the re-land for
https://reviews.llvm.org/D140173.

21 months agoRevert "[GWP-ASan] Fix 6413872"
Mitch Phillips [Thu, 12 Jan 2023 23:57:27 +0000 (15:57 -0800)]
Revert "[GWP-ASan] Fix 6413872"

This reverts commit df87e62cbd4b5090b5349247d29457706d2ac4e8.

Parent change https://reviews.llvm.org/D140173 broke an internal build.
I'll integrate this patch into the re-land for
https://reviews.llvm.org/D140173.

21 months ago[LSAN] More LSAN interface tweaking.
Kirill Stoimenov [Thu, 12 Jan 2023 00:03:41 +0000 (00:03 +0000)]
[LSAN] More LSAN interface tweaking.

Main goal is to remove thread registry dependency from the interface because HWASAN is using its own code to manage threads.

Reviewed By: vitalybuka, kstoimenov

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

21 months ago[OpenMP][FIX] The thread limit is the block, not grid size
Johannes Doerfert [Thu, 12 Jan 2023 23:29:55 +0000 (15:29 -0800)]
[OpenMP][FIX] The thread limit is the block, not grid size

21 months ago[CUDA] added cmath wrappers to unbreak CUDA compilation after D79555
Artem Belevich [Thu, 12 Jan 2023 01:09:21 +0000 (17:09 -0800)]
[CUDA] added cmath wrappers to unbreak CUDA compilation after D79555

libc++ introduced a handful of internal functions that may or may not be
constexpr, depending on C++ version. For pre-constexpr variants we must declare
__device__ counterparts. Otherwise the code fails to compile on the GPU side.
See https://reviews.llvm.org/D79555

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

21 months ago[mlir][linalg] Fix incorrect reduction detection in Vectorizer
Diego Caballero [Thu, 12 Jan 2023 23:11:45 +0000 (23:11 +0000)]
[mlir][linalg] Fix incorrect reduction detection in Vectorizer

When detecting reductions, make sure the block argument is from the linalg generic op.
This fixes https://github.com/iree-org/iree/issues/11779.

Co-authored-by: Andrzej Warzynski <andrzej.warzynski@arm.com>
Reviewed By: nicolasvasilache

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

21 months ago[mlir][sparse] Minor code clean up (NFC).
bixia1 [Thu, 12 Jan 2023 00:25:50 +0000 (16:25 -0800)]
[mlir][sparse] Minor code clean up (NFC).

Reviewed By: Peiming

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

21 months ago[Attributor][FIX] Consistently use the access/remote instruction
Johannes Doerfert [Thu, 12 Jan 2023 23:19:35 +0000 (15:19 -0800)]
[Attributor][FIX] Consistently use the access/remote instruction

We use the actual access (=remote) instruction when reasoning about
accesses, except for one leftover use case of the local instruction.
This caused us to potentially ignore the dominating write if the read
and write were in a different function than the (stack) allocation.

Reported by @ye-luo

21 months ago[libc++] Add clang-tidy to the list of possible substitutions for %{clang-tidy}
Nikolas Klauser [Mon, 9 Jan 2023 00:39:58 +0000 (01:39 +0100)]
[libc++] Add clang-tidy to the list of possible substitutions for %{clang-tidy}

Most people don't have a versioned clang-tidy locally. This allows them to still run the clang-tidy test if they have a suitable version.

Reviewed By: ldionne, #libc

Spies: libcxx-commits, arichardson

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

21 months ago[mlir][NFC] Use explicit ArrayRef construction in OptionalArrayRefParameter
River Riddle [Thu, 12 Jan 2023 22:43:32 +0000 (14:43 -0800)]
[mlir][NFC] Use explicit ArrayRef construction in OptionalArrayRefParameter

GCC was barfing on template deduction for ArrayRef parameters in
some situations.

21 months ago[mlir][AttrType] Emit unbalanced character errors using the last punctuation used
River Riddle [Thu, 12 Jan 2023 22:20:00 +0000 (14:20 -0800)]
[mlir][AttrType] Emit unbalanced character errors using the last punctuation used

This gives a better diagnostic in general, because it indicates that the user didn't
close out the last open puncutation range. For example:

```
foo.op {
  some.op -> !blah.pointer<
}
```
We want the error to hint about the unclosed `<`, not the `}` (which isn't really in the context of the type).

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

21 months ago[NFC] [scudo] avoid casting in a circle
Florian Mayer [Thu, 12 Jan 2023 22:47:03 +0000 (14:47 -0800)]
[NFC] [scudo] avoid casting in a circle

21 months ago[libTooling] Add `getFileRange` as an alternative to `getRangeForEdit`
Eric Li [Thu, 12 Jan 2023 22:10:39 +0000 (17:10 -0500)]
[libTooling] Add `getFileRange` as an alternative to `getRangeForEdit`

Add a `getFileRange` function alongside the existing `getRangeForEdit`
as a way to get a contiguous range within a single file (similar to
`getRangeForEdit`) but without the restriction that it cannot be in a
system header.

This can be used where a tool may want to use the range to extract the
source text. In such cases, we don't want to restrict this from
pulling from system headers.

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

21 months ago[LinkerWrapper] Improve -save-temps behaviour
Joseph Huber [Thu, 12 Jan 2023 22:42:30 +0000 (16:42 -0600)]
[LinkerWrapper] Improve -save-temps behaviour

Summary:
This patch changes around some of the names for the temp files we
generate. This also emits the `postlink` and `postopt` temp files. We
don't use the built-in save temps from LTO right now because it doesn't
give the ASM properly. We may be able to fix that in the future.

21 months ago[AArch64] Add IfConv test with loads with invariant ops as conditions.
Florian Hahn [Thu, 12 Jan 2023 22:38:39 +0000 (22:38 +0000)]
[AArch64] Add IfConv test with loads with invariant ops as conditions.

Add EarlyIfConversion tests for AArch64 where the condition is a load
with invariant operands. A follow-up patch will propose a heuristic to
consider such conditions predictable.

21 months ago[mlir][sparse] support parsing slices in sparse tensor encoding attribute
Peiming Liu [Tue, 27 Dec 2022 22:10:37 +0000 (22:10 +0000)]
[mlir][sparse] support parsing slices in sparse tensor encoding attribute

Reviewed By: bixia

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

21 months ago[libc][obvious] Add a missing dep.
Siva Chandra Reddy [Thu, 12 Jan 2023 22:33:38 +0000 (22:33 +0000)]
[libc][obvious] Add a missing dep.

21 months agoRevert "[SimplifyCFG] When eliminating `unreachable` landing pads, mark `call`s as...
Roman Lebedev [Thu, 12 Jan 2023 22:12:07 +0000 (01:12 +0300)]
Revert "[SimplifyCFG] When eliminating `unreachable` landing pads, mark `call`s as `nounwind`"

The bool is in the wrong place and might get implicitly converted from
the previous second argument - a pointer. Thinking about it more,
it's not really the best place for that functionality anyways,
only a single caller needs that.

This reverts commit 3c5b1f2d94d021005ce3769a4402d4a4ae843989.

21 months ago[mlir][python] fix python build
Jeff Niu [Thu, 12 Jan 2023 22:17:32 +0000 (14:17 -0800)]
[mlir][python] fix python build

21 months ago[lldb/test] Disable TestScriptedProcess.py on linux while investigating the issue
Med Ismail Bennani [Thu, 12 Jan 2023 22:10:48 +0000 (14:10 -0800)]
[lldb/test] Disable TestScriptedProcess.py on linux while investigating the issue

Signed-off-by: Med Ismail Bennani <medismail.bennani@gmail.com>
21 months ago[SimplifyCFG] When eliminating `unreachable` landing pads, mark `call`s as `nounwind`
Roman Lebedev [Thu, 12 Jan 2023 21:05:19 +0000 (00:05 +0300)]
[SimplifyCFG] When eliminating `unreachable` landing pads, mark `call`s as `nounwind`

We really can't recover that knowledge, and `nounwind` knowledge,
(and not just a lack of the unwind edge, aka `call` instead of `invoke`),
is e.g. part of the reasoning in e.g. `mayHaveSideEffects()`.

Note that this is call-site-specific knowledge,
just because some callsite had an `unreachable`
unwind edge, does not mean that all will.

21 months ago[NFC][SimplifyCFG] Autogenerate checklines in some tests that eliminate unwind edges
Roman Lebedev [Thu, 12 Jan 2023 20:43:38 +0000 (23:43 +0300)]
[NFC][SimplifyCFG] Autogenerate checklines in some tests that eliminate unwind edges

21 months ago[test] Split out Annotations from `TestingSupport`
Jordan Rupprecht [Thu, 12 Jan 2023 21:40:47 +0000 (13:40 -0800)]
[test] Split out Annotations from `TestingSupport`

The Annotations helper class does not have a gtest or gmock dependency, but because it's bundled with the rest of TestingSupport, it gets one. By splitting it out, a target can use it without being forced to use LLVM's copy of gtest.

Reviewed By: GMNGeoffrey, sammccall, gribozavr2

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

21 months ago[ORC] Tidy up MachOPlatform's references to ORC runtime registration functions.
Lang Hames [Thu, 12 Jan 2023 16:32:58 +0000 (08:32 -0800)]
[ORC] Tidy up MachOPlatform's references to ORC runtime registration functions.

Use an private struct, RuntimeFunction, to to keep the name and address of each
registration function together, and rename the member variables with their purpose
rather than the full name of the function in the runtime.

21 months ago[mlir][ods] Generate inferReturnTypes for ops with TypesMatchWith
Jeff Niu [Sun, 8 Jan 2023 20:46:52 +0000 (12:46 -0800)]
[mlir][ods] Generate inferReturnTypes for ops with TypesMatchWith

Ops that use TypesMatchWith to constrain result types for verification
and to infer result types during parser generation should also be able
to have the `inferReturnTypes` method auto generated. This patch
upgrades the logic for generating `inferReturnTypes` to handle the
TypesMatchWith trait by building a type inference graph where each edge
corresponds to "type of A can be inferred from type of B", supporting
transformers other than `"$_self"`.

Reviewed By: lattner, rriddle

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

21 months ago[BOLT] Minor refactoring for -print-sorted-by option
Maksim Panchenko [Tue, 10 Jan 2023 03:14:38 +0000 (19:14 -0800)]
[BOLT] Minor refactoring for -print-sorted-by option

Only display used values for -print-sorted-by option when printing help.

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

21 months ago[mlir] Add operations to BlockAndValueMapping and rename it to IRMapping
Jeff Niu [Sun, 8 Jan 2023 22:15:07 +0000 (14:15 -0800)]
[mlir] Add operations to BlockAndValueMapping and rename it to IRMapping

The patch adds operations to `BlockAndValueMapping` and renames it to `IRMapping`. When operations are cloned, old operations are mapped to the cloned operations. This allows mapping from an operation to a cloned operation. Example:

```
Operation *opWithRegion = ...
Operation *opInsideRegion = &opWithRegion->front().front();

IRMapping map
Operation *newOpWithRegion = opWithRegion->clone(map);
Operation *newOpInsideRegion = map.lookupOrNull(opInsideRegion);
```

Migration instructions:
All includes to `mlir/IR/BlockAndValueMapping.h` should be replaced with `mlir/IR/IRMapping.h`. All uses of `BlockAndValueMapping` need to be renamed to `IRMapping`.

Reviewed By: rriddle, mehdi_amini

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

21 months ago[scudo] Fix RingBuffer initialization.
Luke Nicholson [Thu, 12 Jan 2023 21:05:30 +0000 (13:05 -0800)]
[scudo] Fix RingBuffer initialization.

Several map implementations require that map calls provide a page
aligned size.

Reviewed By: fmayer

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

21 months ago[bazel] Fix --features=layering_check issues and enable layering_check for lld
Fangrui Song [Thu, 12 Jan 2023 21:08:06 +0000 (13:08 -0800)]
[bazel] Fix --features=layering_check issues and enable layering_check for lld

21 months ago[lldb/Interpreter] Introduce ScriptedPlatform{,Python}Interface
Med Ismail Bennani [Thu, 12 Jan 2023 07:27:39 +0000 (23:27 -0800)]
[lldb/Interpreter] Introduce ScriptedPlatform{,Python}Interface

This patch introduces both the ScriptedPlatformInterface and the
ScriptedPlatformPythonInterface. As the name suggests, these calls will
be used to call into the Scripted Platform python implementation from
the C++ Scripted Platform plugin instance.

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

Signed-off-by: Med Ismail Bennani <medismail.bennani@gmail.com>
21 months ago[lldb] Add ScriptedPlatform python implementation
Med Ismail Bennani [Thu, 12 Jan 2023 07:04:24 +0000 (23:04 -0800)]
[lldb] Add ScriptedPlatform python implementation

This patch introduces both the Scripted Platform python base
implementation and an example for it.

The base implementation is embedded in lldb python module under
`lldb.plugins.scripted_platform`.

This patch also refactor the various SWIG methods to create scripted
objects into a single method, that is now shared between the Scripted
Platform, Process and Thread. It also replaces the target argument by a
execution context object.

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

Signed-off-by: Med Ismail Bennani <medismail.bennani@gmail.com>
21 months ago[lldb] Add Debugger & ScriptedMetadata reference to Platform::CreateInstance
Med Ismail Bennani [Tue, 10 Jan 2023 04:26:19 +0000 (20:26 -0800)]
[lldb] Add Debugger & ScriptedMetadata reference to Platform::CreateInstance

This patch is preparatory work for Scripted Platform support and does
multiple things:

First, it introduces new options for the `platform select` command and
`SBPlatform::Create` API, to hold a reference to the debugger object,
the name of the python script managing the Scripted Platform and a
structured data dictionary that the user can use to pass arbitrary data.

Then, it updates the various `Create` and `GetOrCreate` methods for
the `Platform` and `PlatformList` classes to pass down the new parameter
to the `Platform::CreateInstance` callbacks.

Finally, it updates every callback to reflect these changes.

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

Signed-off-by: Med Ismail Bennani <medismail.bennani@gmail.com>
21 months ago[lldb/Interpreter] Improve ScriptedPythonInterface::GetStatusFromMethod
Med Ismail Bennani [Fri, 16 Dec 2022 14:26:55 +0000 (06:26 -0800)]
[lldb/Interpreter] Improve ScriptedPythonInterface::GetStatusFromMethod

This patch makes `ScriptedPythonInterface::GetStatusFromMethod` take a
parameter pack as an argument. That will allow it to pass arbitrary
arguments to the python method.

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

Signed-off-by: Med Ismail Bennani <medismail.bennani@gmail.com>
21 months ago[lldb/Interpreter] Make ScriptedProcessInfo more generic
Med Ismail Bennani [Mon, 5 Dec 2022 21:54:21 +0000 (13:54 -0800)]
[lldb/Interpreter] Make ScriptedProcessInfo more generic

This patch moves the ScriptedProcessInfo class out of the
ScriptedProcess and hoist it as a standalone interpreter class, so it can be
reused with the Scripted Platform.

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

Signed-off-by: Med Ismail Bennani <medismail.bennani@gmail.com>
21 months ago[OpenMP] Fix dynamic schedule assertion failure on AArch64
Nawrin Sultana [Mon, 5 Dec 2022 23:17:20 +0000 (17:17 -0600)]
[OpenMP] Fix dynamic schedule assertion failure on AArch64

This patch fixes assertion failure in dynamic schedule with 8 byte induction
variable. It uses acquire load instead of relaxed to ensure that steal_lock
pointer is not NULL.

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

21 months ago[Clang] Explicitly move returned values converted to expected
Joseph Huber [Thu, 12 Jan 2023 20:37:11 +0000 (14:37 -0600)]
[Clang] Explicitly move returned values converted to expected

Summary:
These can cause failures on GCC-7 it seems. We should explicitly move
them to prevent this from causing build failures.

21 months ago[clang][dataflow] In optional model, implement `widen` and make `compare` sound.
Yitzhak Mandelbaum [Thu, 15 Dec 2022 15:11:21 +0000 (15:11 +0000)]
[clang][dataflow] In optional model, implement `widen` and make `compare` sound.

This patch includes two related changes:

1. Rewrite `compare` operation to be sound. Current version checks for equality
of `isNonEmptyOptional` on both values, judging the values `Same` when the
results are equal. While that works when both are true, it is problematic when
they are both false, because there are four cases in which that's can occur:
both empty, one empty and one unknown (which is two cases), and both unknown. In
the latter three cases, it is unsound to judge them `Same`. This patch changes
`compare` to explicitly check for case of `both empty` and then judge any other
case `Different`.

2. With the change to `compare`, a number of common cases will no longer
terminate. So, we also implement widening to properly handle those cases and
recover termination.

Drive-by: improve performance of `merge` operation.
Of the new tests, the code before the patch fails
* ReassignValueInLoopToSetUnsafe, and
* ReassignValueInLoopToUnknownUnsafe.

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

21 months agoclang/AMDGPU: Update clang test for llvm change
Matt Arsenault [Thu, 12 Jan 2023 20:22:18 +0000 (15:22 -0500)]
clang/AMDGPU: Update clang test for llvm change

21 months agoPartially reapply "AMDGPU: Invert handling of enqueued block detection"
Matt Arsenault [Sun, 8 Jan 2023 13:15:30 +0000 (08:15 -0500)]
Partially reapply "AMDGPU: Invert handling of enqueued block detection"

This mostly reverts commit 270e96f435596449002fc89962595497481c8770.

Keep the attributor related changes around, but functionally restore
the old behavior as a workaround. Device enqueue goes back to not
working at -O0 with this version.

21 months ago[clang-tidy][NFC] Make CheckFactories::CreateChecks* const
Nathan James [Thu, 12 Jan 2023 19:20:53 +0000 (19:20 +0000)]
[clang-tidy][NFC] Make CheckFactories::CreateChecks* const

There's no reason for these methods to be non-const.

Reviewed By: gribozavr2

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

21 months ago[Attributor] Enable tests and ensure all call sites are updated
Johannes Doerfert [Thu, 12 Jan 2023 19:07:33 +0000 (11:07 -0800)]
[Attributor] Enable tests and ensure all call sites are updated

This reverts commit 9e08b083a09ef4e02fb0a4de2c0d3ddc0eccadde and ensures
signature rewriting also updates dead call sites to avoid the call graph
assertion.

21 months ago[fix] Change formatting to use llvm::formatv Summary:
Alexander Yermolovich [Thu, 12 Jan 2023 19:17:55 +0000 (11:17 -0800)]
[fix] Change formatting to use llvm::formatv Summary:

Missed one formating that was reversed.

Reviewed By: hoy, zhuhan0

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

21 months ago[gn build] Port 944f4b280585
LLVM GN Syncbot [Thu, 12 Jan 2023 19:05:33 +0000 (19:05 +0000)]
[gn build] Port 944f4b280585

21 months ago[clang-format][docs] Add ability to link to specific config options
Emilia Dreamer [Thu, 12 Jan 2023 19:00:10 +0000 (21:00 +0200)]
[clang-format][docs] Add ability to link to specific config options

This allows for the creation of permalinks to specific clang-format
options, for better sharing of a specific option and its options.

(I'm adding the usual clang-format reviewers on this patch because
I don't know any other reviewers that well, perhaps someone with
docs experience should be added instead...)

Note that I wanted to make minimal changes to make this happen and thus
landed on an unideal setup, but to me, it seems like the best out of
worse ones.

I could have made every style option a subheading, which would add
automatically the logic for permalinks and the little paragraph icon for
sharing.

However, this meant that the links themselves would be suboptimal, as
they'd include the whole text of the heading, including the type and
versionbadge, which is needless noise and could change, breaking the
concept of a "permalink". The format of the page could be changed to
put the option names on their own in a heading, and the other info below
it in a paragraph.

As Sphinx seems unwilling to fix https://github.com/sphinx-doc/sphinx/issues/1961,
there isn't a succinct way to change the "id" html field used for
sections

I could have used an add-on (https://github.com/GeeTransit/sphinx-better-subsection),
or made one myself, but I wanted to avoid extra dependencies for no
reason. (plus, I don't know how to make one myself.)

I could have used raw HTML for each heading, but that would immensely
pollute the rst file, which, while it is generated, is currently still
human-readable and it'd be nice for it to stay that way.

Also note that sphinx treats references as case-insensitive, which means
that they will all be lowercased in the resulting HTML. I envisioned
the ability to simply add #OptionName after the URL to get placed right
at the desired config option, which isn't possible without things such
as inline `raw` HTML.

To reconcile that, I added the Â¶ paragraph buttons that can be used to
generate the link to the desired section, but since headings are not
actually used, they are faked and literally just a link following each
option, which means they stylistically don't match all other headings.

Also note that this sort-of assumes HTML output. I know Sphinx can
output other formats but I do not know if they are used. A non-html
output could embed unusable Â¶ signs everywhere.

I'm okay with this patch being rejected in its current solution, or if
any of the above listed alternatives are better, they could be pursued
instead. In case the downsides of this solution are too much, I will
just create a feature request issue for this and maybe let someone more
experienced with Sphinx handle it, since this is still a feature I would
like to have. (and I do not want to deal with Sphinx at all after
battling with it for a whole day to produce a mediocre result.)

Reviewed By: HazardyKnusperkeks, owenpan, MyDeveloperDay, aaron.ballman

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

21 months ago[DWARFLibrary] Add support to re-construct cu-index
Alexander Yermolovich [Thu, 12 Jan 2023 18:43:08 +0000 (10:43 -0800)]
[DWARFLibrary] Add support to re-construct cu-index

According to DWARF5 specification and gnu specification for DWARF4 the offset
entry in the CU/TU Index is 32 bits. This presents a problem when
.debug_info.dwo in DWP file grows beyond 4GB. The CU Index becomes partially
corrupted.

This diff adds manual parsing of .debug_info.dwo/.debug_abbrev.dwo to
reconstruct CU index in general, and TU index for DWARF5. This is a work around
until DWARF6 spec is finalized.

Next patch will change internal CU/TU struct to 64 bit, and change uses as
necessary. The plan is to land all the patches in one go after all are approved.

This patch originates from the discussion in: https://discourse.llvm.org/t/dwarf-dwp-4gb-limit/63902

Reviewed By: dblaikie

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

21 months ago[LinkerWrapper] Emit assembly files from LTO with `save-temps`
Joseph Huber [Wed, 11 Jan 2023 20:57:39 +0000 (14:57 -0600)]
[LinkerWrapper] Emit assembly files from LTO with `save-temps`

Currently in LTO mode we don't emit any `.s` files for non-NVPTX targets
during LTO. This makes it diffcult to investigate any failures in the
assembly. This patch makes the save-temps mode output an assembly file
and then assembles it separately. I decided to simply invoke `clang` for
this as it would be a lot of effort to invoke the `MCStramer` interface
directly.

Reviewed By: arsenm

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

21 months agoLoopIdiom: avoid patterned memset if constant is not relocatable.
Tim Northover [Wed, 11 Jan 2023 13:52:45 +0000 (13:52 +0000)]
LoopIdiom: avoid patterned memset if constant is not relocatable.

The pattern we're using for the memset_pattern* call gets put into a static
global variable initialized, which means it has to be representable with
relocations on the target. Most `ConstantExpr` instances do not satisfy this
constraint, so avoid all of them for now.

21 months ago[lldb] Fix compile error in Lua typemap
Jonas Devlieghere [Thu, 12 Jan 2023 18:47:14 +0000 (10:47 -0800)]
[lldb] Fix compile error in Lua typemap

Fix error "non-const lvalue reference to type 'lldb::FileSP'  cannot
bind to a value of unrelated type" in Lua typemap.

21 months ago[DirectX backend] add support ConstantBuffer to DXILResource.h
Xiang Li [Thu, 12 Jan 2023 16:56:18 +0000 (11:56 -0500)]
[DirectX backend] add support ConstantBuffer to DXILResource.h

class ConstantBuffer is added to save information for cbuffer.
Also add CBufferDataLayout to calculate the size for cbuffer.

Now always use legacy cbuffer layout.
https://reviews.llvm.org/D134998 will add control to disable legacy cbuffer layout.

Reviewed By: beanz

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

21 months agoclang/OpenCL: Check calling convention in test
Matt Arsenault [Thu, 12 Jan 2023 14:28:51 +0000 (09:28 -0500)]
clang/OpenCL: Check calling convention in test

update_cc_test_checks misses this, so make sure at least one block
enqueue test manually checks the calling convention for the kernel.

21 months ago[libc++] Add missing includes in move_iterator.h
Louis Dionne [Thu, 12 Jan 2023 18:37:49 +0000 (13:37 -0500)]
[libc++] Add missing includes in move_iterator.h

21 months ago[Attributor] Disable breaking tests to unblock bots
Johannes Doerfert [Thu, 12 Jan 2023 18:28:51 +0000 (10:28 -0800)]
[Attributor] Disable breaking tests to unblock bots

The tests will be re-enabled asap as a fix is available.

21 months agoAdd -Wreturn-local-addr, GCC alias for -Wreturn-stack-address
Adrian Dole [Thu, 12 Jan 2023 17:45:03 +0000 (17:45 +0000)]
Add -Wreturn-local-addr, GCC alias for -Wreturn-stack-address

For warning compatibility with GCC.

Reviewed By: cjdb

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

21 months ago[AIX][NFC] Unsupport test when running on AIX
Jake Egan [Thu, 12 Jan 2023 18:18:16 +0000 (13:18 -0500)]
[AIX][NFC] Unsupport test when running on AIX

Previously the test's targets were restricted to avoid the AIX target, but
it should be marked unsupported for system-aix instead because the test
fails to run on AIX as well.

21 months ago[AArch64] Add an error if SVE scalable vector types are used in a context without sve
David Green [Thu, 12 Jan 2023 18:21:28 +0000 (18:21 +0000)]
[AArch64] Add an error if SVE scalable vector types are used in a context without sve

This adds an error message if the isSVESizelessBuiltinType like
__SVFloat32_t / __SVInt64_t / etc, which provide the backing for the
svfloat32_t / svint64_t / etc ACLE types, are used in a function without
SVE. The alternative is a crash in the backend, which is not capable of
handling scalable vector types.

When SVE is available, either through a -march=..+sve option or via a
target(sve) attribute, nothing should change. Without the sve feature,
this patch gives an error for any function arguments, return values and
variable declarations involving the scalable types. Struct/class members
and global variables already give an error. As this can be based on the
current function target attributes, the error sometimes needs to be
handled later than would otherwise if it was just based on the global
target.

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

21 months ago[lldb] Limit `nothreadallow` to Python in SWIG bindings
Jonas Devlieghere [Thu, 12 Jan 2023 18:15:51 +0000 (10:15 -0800)]
[lldb] Limit `nothreadallow` to Python in SWIG bindings

SWIG allows you to partially disable thread support for a given function
in Python with `nothreadallow`. This functionality is limited to Python,
but until SWIG 4.1, it would silently ignore this for other languages,
such as Lua. New versions of SWIG are more strict and therefore we need
to guard this with `SWIGPYTHON`.

For more details on the functionality, I recommend reading the commit
message from 070a1d562b30.

21 months ago[mlir][llvmir] Cleaned up MetadataOp.
Slava Zakharin [Fri, 6 Jan 2023 21:43:22 +0000 (13:43 -0800)]
[mlir][llvmir] Cleaned up MetadataOp.

Added NoTerminator trait, and created a single builder
that adds a block into the region at operation construction.
Added custom assembly parser that automatically adds the body
block, when the region appears to be empty to parseRegion().

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

21 months agoclang: Fix excessively strict test requirements
Matt Arsenault [Thu, 12 Jan 2023 14:09:46 +0000 (09:09 -0500)]
clang: Fix excessively strict test requirements

At most this requires x86 as it's used in the run lines, it
doesn't require a linux host.

21 months ago[clang] Reland parenthesized aggregate init patches
Alan Zhao [Wed, 4 Jan 2023 23:12:00 +0000 (15:12 -0800)]
[clang] Reland parenthesized aggregate init patches

This commit relands the patches for implementing P0960R3 and P1975R0,
which describe initializing aggregates via a parenthesized list.

The relanded commits are:

40c52159d3ee - P0960R3 and P1975R0: Allow initializing aggregates from
  a parenthesized list of values
c77a91bb7ba7 - Remove overly restrictive aggregate paren init logic
32d7aae04fdb - Fix a clang crash on invalid code in C++20 mode

This patch also fixes a crash in the original implementation.
Previously, if the input tried to call an implicitly deleted copy or
move constructor of a union, we would then try to initialize the union
by initializing it's first element with a reference to a union. This
behavior is incorrect (we should fail to initialize) and if the type of
the first element has a constructor with a single template typename
parameter, then Clang will explode. This patch fixes that issue by
checking that constructor overload resolution did not result in a
deleted function before attempting parenthesized aggregate
initialization.

Additionally, this patch also includes D140159, which contains some
minor fixes made in response to code review comments in the original
implementation that were made after that patch was submitted.

Co-authored-by: Sheng <ox59616e@gmail.com>
Fixes #54040, Fixes #59675

Reviewed By: ilya-biryukov

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

21 months agoRevert "[mlir][llvm] Add an explicit void type debug info attribute."
Tobias Gysi [Thu, 12 Jan 2023 17:50:56 +0000 (18:50 +0100)]
Revert "[mlir][llvm] Add an explicit void type debug info attribute."

This commit broke the flang build bots
https://lab.llvm.org/buildbot#builders/175/builds/23560.

This reverts commit a960547ea12128a67c99760f57bf01609a265546.

21 months ago[libc++] Make pmr::monotonic_buffer_resource bump down
Nikolas Klauser [Thu, 12 Jan 2023 17:35:19 +0000 (18:35 +0100)]
[libc++] Make pmr::monotonic_buffer_resource bump down

Bumping down is significantly faster than bumping up. This is ABI breaking, but the ABI of `pmr::monotonic_buffer_resource` was only stabilized in this release cycle, so we can still change it.
For a more detailed explanation why bumping down is better, see https://fitzgeraldnick.com/2019/11/01/always-bump-downwards.html.

Reviewed By: ldionne, #libc

Spies: libcxx-commits

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

21 months ago[libc++] Add [[nodiscard]] extensions in <math.h>
Nikolas Klauser [Sun, 25 Dec 2022 19:13:39 +0000 (20:13 +0100)]
[libc++] Add [[nodiscard]] extensions in <math.h>

There are quite a few functions marked `[[gnu::const]]` inside the compiler. This patch adds `[[nodiscard]]` to libc++-provided overloads of these functions to match the diagnostics produced.

Reviewed By: ldionne, #libc

Spies: libcxx-commits

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

21 months ago[EarlyCSE] Fix crash when optimizing masked loads/stores
Fraser Cormack [Thu, 12 Jan 2023 15:35:24 +0000 (15:35 +0000)]
[EarlyCSE] Fix crash when optimizing masked loads/stores

With opaque pointers, it is possible for EarlyCSE to encounter masked
load/store intrinsics which access the same pointer value but with
different incompatible types. These cannot form valid replacements
(without explicit casting, which we don't yet do even for regular
load/store instructions) so should be prevented.

Reviewed By: nikic

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

21 months ago[libc++][NFC] Rename basic_istream_view::__iterator to __basic_istream_view_iterator
Nikolas Klauser [Wed, 28 Dec 2022 01:44:04 +0000 (02:44 +0100)]
[libc++][NFC] Rename basic_istream_view::__iterator to __basic_istream_view_iterator

This makes it a lot easier to specialize traits types for it, like __segmented_iterator_traits.

Reviewed By: Mordante, #libc

Spies: libcxx-commits

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

21 months ago[libc++][NFC] Qualify declval
Nikolas Klauser [Sun, 31 Jul 2022 19:54:25 +0000 (21:54 +0200)]
[libc++][NFC] Qualify declval

While it's not necessary to qualify calls to `declval` it makes error messages very crypric if the declaration isn't reachable anymore

For example:
```
    /home/nikolask/llvm-projects/libcxx/build/include/c++/v1/__chrono/duration.h:53:66: error: no type named 'type' in 'std::common_type<long, long>'
        typedef chrono::duration<typename common_type<_Rep1, _Rep2>::type,
                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~
    /home/nikolask/llvm-projects/libcxx/build/include/c++/v1/__type_traits/common_type.h:107:14: note: in instantiation of template class 'std::common_type<std::chrono::duration<long, std::ratio<3600, 1>>, std::chrono::duration<long, std::ratio<3600, 1>>>' requested here
        : public common_type<_Tp, _Tp> {};
                 ^
    /home/nikolask/llvm-projects/libcxx/build/include/c++/v1/__chrono/duration.h:279:58: note: in instantiation of template class 'std::common_type<std::chrono::duration<long, std::ratio<3600, 1>>>' requested here
        _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR typename common_type<duration>::type operator+() const {return typename common_type<duration>::type(*this);}
                                                             ^
    /home/nikolask/llvm-projects/libcxx/build/include/c++/v1/__chrono/duration.h:308:54: note: in instantiation of template class 'std::chrono::duration<long, std::ratio<3600, 1>>' requested here
    typedef duration<     int, ratio_multiply<ratio<24>, hours::period>>         days;
                                                         ^
    /home/nikolask/llvm-projects/libcxx/build/include/c++/v1/__chrono/duration.h:280:81: error: no type named 'type' in 'std::common_type<std::chrono::duration<long, std::ratio<3600, 1>>>'
        _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR typename common_type<duration>::type operator-() const {return typename common_type<duration>::type(-__rep_);}
                                                    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~
    /home/nikolask/llvm-projects/libcxx/build/include/c++/v1/__chrono/duration.h:308:54: note: in instantiation of template class 'std::chrono::duration<long, std::ratio<3600, 1>>' requested here
    typedef duration<     int, ratio_multiply<ratio<24>, hours::period>>         days;
                                                         ^
    /home/nikolask/llvm-projects/libcxx/build/include/c++/v1/__chrono/duration.h:53:66: error: no type named 'type' in 'std::common_type<int, int>'
        typedef chrono::duration<typename common_type<_Rep1, _Rep2>::type,
                                 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^~~~
    /home/nikolask/llvm-projects/libcxx/build/include/c++/v1/__type_traits/common_type.h:107:14: note: in instantiation of template class 'std::common_type<std::chrono::duration<int, std::ratio<86400, 1>>, std::chrono::duration<int, std::ratio<86400, 1>>>' requested here
        : public common_type<_Tp, _Tp> {};
                 ^
    /home/nikolask/llvm-projects/libcxx/build/include/c++/v1/__chrono/duration.h:279:58: note: in instantiation of template class 'std::common_type<std::chrono::duration<int, std::ratio<86400, 1>>>' requested here
        _LIBCPP_INLINE_VISIBILITY _LIBCPP_CONSTEXPR typename common_type<duration>::type operator+() const {return typename common_type<duration>::type(*this);}
                                                             ^
    /home/nikolask/llvm-projects/libcxx/build/include/c++/v1/__chrono/duration.h:309:55: note: in instantiation of template class 'std::chrono::duration<int, std::ratio<86400, 1>>' requested here
    typedef duration<     int, ratio_multiply<ratio<7>,   days::period>>         weeks;
                                                          ^
    19 similar errors omitted
```
changes with qualification added to:
```
    While building module 'std' imported from /home/nikolask/llvm-projects/libcxx/libcxx/test/std/utilities/meta/meta.trans/meta.trans.other/common_type.pass.cpp:13:
    In file included from <module-includes>:17:
    In file included from /home/nikolask/llvm-projects/libcxx/build/include/c++/v1/math.h:309:
    In file included from /home/nikolask/llvm-projects/libcxx/build/include/c++/v1/limits:107:
    In file included from /home/nikolask/llvm-projects/libcxx/build/include/c++/v1/type_traits:432:
    In file included from /home/nikolask/llvm-projects/libcxx/build/include/c++/v1/__type_traits/common_reference.h:13:
    /home/nikolask/llvm-projects/libcxx/build/include/c++/v1/__type_traits/common_type.h:28:43: error: declaration of 'declval' must be imported from module 'std.utility.__utility.declval' before it is required
    using __cond_type = decltype(false ? std::declval<_Tp>() : std::declval<_Up>());
                                              ^
    /home/nikolask/llvm-projects/libcxx/build/include/c++/v1/__utility/declval.h:30:34: note: declaration here is not visible
    decltype(std::__declval<_Tp>(0)) declval() _NOEXCEPT;
                                     ^
    /home/nikolask/llvm-projects/libcxx/libcxx/test/std/utilities/meta/meta.trans/meta.trans.other/common_type.pass.cpp:13:10: fatal error: could not build module 'std'
    #include <functional>
     ~~~~~~~~^
    2 errors generated.
```

Reviewed By: ldionne, Mordante, #libc

Spies: libcxx-commits

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

21 months ago[clangd] Fix tests for CLANGD_TIDY_CHECKS=OFF builds
Kadir Cetinkaya [Thu, 12 Jan 2023 17:25:52 +0000 (18:25 +0100)]
[clangd] Fix tests for CLANGD_TIDY_CHECKS=OFF builds

21 months agoRevert "build: with -DCLANGD_ENABLE_REMOTE=ON, search for grpc++ dependencies too"
Kadir Cetinkaya [Thu, 12 Jan 2023 17:14:05 +0000 (18:14 +0100)]
Revert "build: with -DCLANGD_ENABLE_REMOTE=ON, search for grpc++ dependencies too"

This reverts commit 9f3081dc6fe8447e85741865846840bc491866e5.
Broke clangd buildbots in
https://lab.llvm.org/buildbot/#/builders/131/builds/38935.

21 months ago[flang] Carry the whole polymorphic box in PolymorphicValue
Valentin Clement [Thu, 12 Jan 2023 16:59:18 +0000 (17:59 +0100)]
[flang] Carry the whole polymorphic box in PolymorphicValue

Until now, only the address of the type descriptor was hold in
a PolymorphicValue. In some cases, the element size and the
type code are also needed when creating new polymorphic
descriptors from an element of a polymorphic entity.

This patch updates PolymorphicValue to carry the source
descriptor from which the element is extracted. The source
descriptor is then used when emboxing the element to a new
polymorphic descriptor.

This simplify the code done in D141274 and will be used
when creating polymorphic temporary as well.

Reviewed By: jeanPerier, PeteSteinfeld

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

21 months ago[LinkerWrapper] Fix errors from missing files during a dry run
Joseph Huber [Thu, 12 Jan 2023 16:41:18 +0000 (10:41 -0600)]
[LinkerWrapper] Fix errors from missing files during a dry run

Summary:
We use a dry run for testing. If we do a dry run there is no file to
open and try to embed. Intead of erroring just create an empty one.

21 months ago[mlir][llvm] Add an explicit void type debug info attribute.
Tobias Gysi [Thu, 12 Jan 2023 16:32:22 +0000 (17:32 +0100)]
[mlir][llvm] Add an explicit void type debug info attribute.

Previously, the DISubroutineType attribute used an optional result
parameter and an optional argument types array to model the subroutine
signature. LLVM IR debug metadata, on the other hand, has one types
list whose first entry maps to the result type. That entry may be
null to model a void result type. The type list may also be entirely
empty not specifying any type information. The latter is problematic
since the current DISubroutineType attribute cannot express it.

The revision changes DISubroutineTypeAttr to closely follow the
LLVM metadata design. In particular, it uses a single types parameter
array to model the subroutine signature and introduces an explicit
DIVoidResultTypeAttr to model the null entries.

Reviewed By: Dinistro

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

21 months ago[mlir][spirv] Add support for fptoui conversion in ArithToSPIRV
Steve Suzuki [Thu, 12 Jan 2023 16:35:02 +0000 (16:35 +0000)]
[mlir][spirv] Add support for fptoui conversion in ArithToSPIRV

To enable the conversion of arith.fptoui to SPIRV OpConvertFToU

Reviewed By: kuhar

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

21 months ago[mlir] Broadcast scalars when vectorising tensor.extract
Andrzej Warzynski [Fri, 30 Dec 2022 15:22:22 +0000 (15:22 +0000)]
[mlir] Broadcast scalars when vectorising tensor.extract

When vectorizing tensor.extract embedded within linalg.generic, the
default option is to rewrite it as vector.gather. When doing so, we need
to make sure that the corresponding indices are vectorized accordingly.
However, the Linalg vectorizer will not vectorize constants like in the
following example. This is fixed by simply broadcasting %c0 and %c1.

```
  func.func @example(%arg0: tensor<3x3xf32>, %arg2: tensor<1x1x3xf32>) -> tensor<1x1x3xf32> {
    %c0 = arith.constant 1 : index
    %c1 = arith.constant 2 : index
    %1 = linalg.generic {
      (...)
    } outs(...) {
    ^bb0(...):
      %2 = tensor.extract %arg0[%c0, %c1] : tensor<3x3xf32>
      linalg.yield %2 : f32
    } -> tensor<1x1x3xf32>
    return %1 : tensor<1x1x3xf32>
  }
```

This patch makes sure that in the case above (and other similar cases),
the vectorizer broadcasts %c0 and %c1.

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

21 months ago[NFC][LoopFlatten][LoopInterchange] Do not explicitly forget subloops
Joshua Cao [Thu, 5 Jan 2023 04:42:19 +0000 (20:42 -0800)]
[NFC][LoopFlatten][LoopInterchange] Do not explicitly forget subloops

We don't need to explicitly forget subloops because forgetting parent
loops will automatically forget their subloops

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

21 months ago[Clang] Diagnose undefined behavior in a constant expression while evaluating a compo...
Shafik Yaghmour [Thu, 12 Jan 2023 16:02:00 +0000 (08:02 -0800)]
[Clang] Diagnose undefined behavior in a constant expression while evaluating a compound assignment with remainder as operand

Currently we don't diagnose overflow in a constant expression for the case of
compound assignment with remainder as a operand.

In handleIntIntBinOp the arguments LHS and Result can be the same source but in
the check for remainder in this function we assigned to Result before checking
for overflow. In all the other operations the check is done before Result is
assigned to.

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

21 months ago[include-mapping] Print an error message in case the symbol index points to a non...
Viktoriia Bakalova [Thu, 12 Jan 2023 15:39:38 +0000 (15:39 +0000)]
[include-mapping] Print an error message in case the symbol index points to a non-existent page.

Fix: https://github.com/llvm/llvm-project/issues/59610
Differential Revision: https://reviews.llvm.org/D141611

21 months ago[RISCV] Add zvl65536b to the target feature list
Kito Cheng [Thu, 12 Jan 2023 15:51:23 +0000 (23:51 +0800)]
[RISCV] Add zvl65536b to the target feature list

We have zvl65536b listed in RISCVISAInfo.cpp, but we don't have
corresponding target feature in td file.

Reviewed By: reames

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

21 months ago[LVI][CVP] Make use of condition known at use
Nikita Popov [Wed, 11 Jan 2023 10:58:00 +0000 (11:58 +0100)]
[LVI][CVP] Make use of condition known at use

When an instruction is only used in a select or phi operand, we might
be able to make use of additional information from the select/branch
condition. For example in

  %sub = call i16 @llvm.usub.sat.i16(i16 %x, i16 10)
  %cmp = icmp uge i16 %x, 10
  %sel = select i1 %cmp, i16 %sub, i16 42

the usub.sat is only used in a select where %x uge 10 is known to
hold, so we can fold it based on that knowledge.

This addresses the regression reported at
https://reviews.llvm.org/D140798#4039748, but also provides a
solution to a recurring problem we've had, where we fail to make
use of range information after a branch+phi has been converted
into a select. Our current solution to this is to hope that IPSCCP
can perform the fold before that happens, but handling this in LVI
is a somewhat more general solution.

Currently we only make use of this for the willNotOverflow() fold,
but I plan to adjust other folds to use the new API as well.

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

21 months ago[Mem2Reg] Extract code for converting !nonull to assume (NFC)
Nikita Popov [Thu, 12 Jan 2023 13:50:39 +0000 (14:50 +0100)]
[Mem2Reg] Extract code for converting !nonull to assume (NFC)

21 months ago[mlir][llvm] Handle debug metadata arg lists during LLVM IR import.
Tobias Gysi [Thu, 12 Jan 2023 15:10:58 +0000 (16:10 +0100)]
[mlir][llvm] Handle debug metadata arg lists during LLVM IR import.

Debug intrinsics may get an argument list as first parameter. Argument
lists are metadata nodes that refer to a list of SSA values and
constant that are needed to evaluate the debug expression attached to
the intrinsic.

We do currently not model these debug expressions in MLIR. This
revision thus makes sure debug intrinsics that get an argument list
as a first parameter are dropped. It also adds a test to verify
a warning is emitted.

Reviewed By: Dinistro

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

21 months agoReword diagnostic slightly; NFC
Aaron Ballman [Thu, 12 Jan 2023 15:12:13 +0000 (10:12 -0500)]
Reword diagnostic slightly; NFC

This adds single quotes around a syntax element and it rewords the diag
slightly to talk about Clang 17 instead of LLVM 17.

21 months agoReland "[InstCombine] Fold nested selects"
Roman Lebedev [Thu, 12 Jan 2023 14:55:24 +0000 (17:55 +0300)]
Reland "[InstCombine] Fold nested selects"

The change was reverted because one of the changes were suspected of
causing a miscompile, but said miscompile was (confirmed to be) fixed
before the revert happened, by 07ecdd9b1a8af51f07d5f4dfe46845c801482a39.

https://alive2.llvm.org/ce/z/GjCXkB
https://alive2.llvm.org/ce/z/Guz2tt

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

This reverts commit d73383c145ea83d25063246e0c34f5a41fd35293,
and relands commmit 9ddff66d0c9c3e18d56e6b20aa26a2a8cdfb6d2b.

21 months agoLower math.tan to __nv_tan[f] / __ocml_tan_f{32|64}
Goran Flegar [Wed, 11 Jan 2023 18:39:10 +0000 (19:39 +0100)]
Lower math.tan to __nv_tan[f] / __ocml_tan_f{32|64}

At present math.tan fails to lower for NVVM and ROCDL.

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

21 months ago[X86] vector-mul.ll - remove old FIXME comment
Simon Pilgrim [Thu, 12 Jan 2023 14:18:04 +0000 (14:18 +0000)]
[X86] vector-mul.ll - remove old FIXME comment

Vector AssertZExt support was added by D54725 / 4954c664307d56c5aa7ed400b3bac730bd71ddb9

21 months ago[UpdateTestChecks] Handle nounwind functions for s390x
Nikita Popov [Thu, 12 Jan 2023 14:09:06 +0000 (15:09 +0100)]
[UpdateTestChecks] Handle nounwind functions for s390x

Unlike all the other architectures, s390x requires cfi_startproc
to be present, so update_llc_test_checks did no work with nounwind
functions.

21 months ago[mips][clang] Do not define __GCC_HAVE_SYNC_COMPARE_AND_SWAP macros for MIPS-I
Brad Smith [Thu, 12 Jan 2023 14:02:50 +0000 (09:02 -0500)]
[mips][clang] Do not define __GCC_HAVE_SYNC_COMPARE_AND_SWAP macros for MIPS-I

Do not define __GCC_HAVE_SYNC_COMPARE_AND_SWAP macros for MIPS-I

Reviewed By: MaskRay

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

21 months ago[ARM] Use MCInstrInfo::get in ARMDisassembler instead of reinventing it
Jay Foad [Wed, 11 Jan 2023 16:00:07 +0000 (16:00 +0000)]
[ARM] Use MCInstrInfo::get in ARMDisassembler instead of reinventing it

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

21 months ago[Clang] Clean up some offloading driver tests
Joseph Huber [Thu, 12 Jan 2023 13:29:46 +0000 (07:29 -0600)]
[Clang] Clean up some offloading driver tests

Summary:
These tests used an external `dummy.o` and `dummy.bc` files instead of
just generating them. This should be cleaner and less error prone.

21 months ago[MemorySSA] Don't check def set when cloning memoryaccesses
luxufan [Thu, 12 Jan 2023 13:46:22 +0000 (21:46 +0800)]
[MemorySSA] Don't check def set when cloning memoryaccesses

For internal functions, globals-aa returns different ModRefInfo
results if they are inlined and are no longer called by external
functions. This causes an assertion failure when cloning memoryssa
accesses.

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

Reviewed By: nikic

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

21 months agoRevert "[amdgpu] Change the RA to basic"
Matt Arsenault [Thu, 15 Sep 2022 19:41:57 +0000 (15:41 -0400)]
Revert "[amdgpu] Change the RA to basic"

This reverts commit 28733d86cf7bf3e4e9667654ad6785aa8e21e04f.

This was a workaround for a bug which was fixed in
74ef03d38a59bb4da710a43dac189be3d01d0cd7

21 months ago[InstCombine] Add extra tests for copy from constant with phi (NFC)
Nikita Popov [Thu, 12 Jan 2023 13:24:46 +0000 (14:24 +0100)]
[InstCombine] Add extra tests for copy from constant with phi (NFC)

Additional tests for D136201.

Also fix intrinsic name mangling while here.

21 months ago[mlir][llvm] A DICompositeTypeAttr is also a DIScopeAttr.
Tobias Gysi [Thu, 12 Jan 2023 13:09:47 +0000 (14:09 +0100)]
[mlir][llvm] A DICompositeTypeAttr is also a DIScopeAttr.

A DICompositeTypeAttr is the MLIR counterpart of LLVMIR's
DICompositeType debug metadata node. It can be used to store debug
information associated to a class or struct type definition. Any class
member method then sets its scope to the parent DICompositeType. This
revision adds DICompositeTypeAttr to the list of DIScopeAttrs to
prevent verification failures for legal debug information. Additionally,
it adds a number of test cases.

Reviewed By: Dinistro

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

21 months ago[utils][filecheck-lint] Add filecheck-lint, a linter for FileCheck directives.
Benjamin Chetioui [Thu, 12 Jan 2023 13:19:42 +0000 (13:19 +0000)]
[utils][filecheck-lint] Add filecheck-lint, a linter for FileCheck directives.

FileCheck is a versatile tool for testing compiler output regardless of syntax.
FileCheck achieves this versatility by processing only input lines in which it
detects a valid CHECK directive, and ignoring everything else.

This comes at a price: if a directive is not typed properly, it is not
processed by FileCheck, and the test code it precedes is effectively disabled.
This results in the illusion that the code is tested, while the test may have
actually never run.

This scenario is not hypothetical, see the fixes introduced in, e.g.
https://github.com/tensorflow/tensorflow/commit/48cacf049f3d6ed3f289ccc48ec50491b6d8d9a8,
https://reviews.llvm.org/D139698, https://reviews.llvm.org/D139636,
https://github.com/iree-org/iree/pull/11693.

The findings corrected in the above changes originate in filecheck-lint.
In a given test file, filecheck-lint uses the edit distance between anything
that looks like a FileCheck directive and the set of locally valid directives
to detect likely misspelled directives.

The tool is not yet feature complete---e.g. it does not parse custom comment
prefixes to exclude them from reporting---but it already yields useful results,
as demonstrated above.

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