platform/upstream/llvm.git
21 months ago[libc][NFC] Move bzero_inline to separate file
Guillaume Chatelet [Mon, 26 Sep 2022 12:57:21 +0000 (12:57 +0000)]
[libc][NFC] Move bzero_inline to separate file
This allows for easier discovery.

21 months ago[libc][NFC] Remove new framework, a simpler one is coming
Guillaume Chatelet [Mon, 26 Sep 2022 12:42:38 +0000 (12:42 +0000)]
[libc][NFC] Remove new framework, a simpler one is coming

21 months ago[libc][NFC] introduce inline_bzero
Guillaume Chatelet [Mon, 26 Sep 2022 12:33:01 +0000 (12:33 +0000)]
[libc][NFC] introduce inline_bzero

21 months agoUpdate the status of a few more C99 DRs
Aaron Ballman [Mon, 26 Sep 2022 12:20:27 +0000 (08:20 -0400)]
Update the status of a few more C99 DRs

21 months ago[LoopDistribute] Add LAA invalidation test for #50940.
Florian Hahn [Mon, 26 Sep 2022 11:21:13 +0000 (12:21 +0100)]
[LoopDistribute] Add LAA invalidation test for #50940.

Test case for #50940, to be fixed by D134606.

21 months ago[mlir] Add IteratorType enum to StructuredOpsUtils.
Oleg Shyshkov [Mon, 26 Sep 2022 10:33:08 +0000 (10:33 +0000)]
[mlir] Add IteratorType enum to StructuredOpsUtils.

Summary:
Use the new enum in TilingIterface and verify that `iterator_type` attribute in
LinalgOp interface is compatible with the enum values. Later IteratorType enum
will be used in LinalgInterface to replace the current `iterator_type` attribute
array of string.

Existing enums in Linalg are moved into a separate td file and tablegen build
target. This is necessary, have one I32EnumAttr in a shared space that generated
enum class definition and EnumAttrs is dialect-specific location. Otherwise
there might be a conflict that I32EnumAttr generates enum definitions in
multiple places.

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

21 months ago[LLDB] Add an llvm::Optional version of GetRegisterInfo
David Spickett [Fri, 23 Sep 2022 14:28:36 +0000 (14:28 +0000)]
[LLDB] Add an llvm::Optional version of GetRegisterInfo

We have some 500 ish uses of the bool plus ref version
so changing them all at once isn't a great idea.

This adds an overload that doesn't take a RegisterInfo&
and returns an optional.

Once I'm done switching all the existing callers I'll
remove the original function.

Benefits of optional over bool plus ref:
* The intent of the function is clear from the prototype.
* It's harder to forget to check if the return is valid,
  and if you do you'll get an assert.
* You don't hide ununsed variables, which happens because
  passing by ref marks a variable used.
* You can't forget to reset the RegisterInfo in between
  calls.

Reviewed By: clayborg

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

21 months ago[ARM] Enable and/cmp0 folding
Momchil Velikov [Mon, 26 Sep 2022 10:30:31 +0000 (11:30 +0100)]
[ARM] Enable and/cmp0 folding

The `CodeGenPrepare` pass can sink bitwise `and` used by compare to
zero into the basic blocks where the users are. This operation is
guarded by lowering hook, which is disabled for ARM.  In the ARM
architecture versions from v7-M up these two operations can be folded
into `tst rN, #imm` instruction. Sinking of `and` can also enable
the cmov-to-bfi DAG combiner.

This patch fixes some benchmark regressions caused
by https://reviews.llvm.org/D129370 as well scoring slightly better overall.

Reviewed By: dmgreen

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

21 months ago[ARM] Enable and/cmp0 folding - precommit test
Momchil Velikov [Mon, 26 Sep 2022 09:56:39 +0000 (10:56 +0100)]
[ARM] Enable and/cmp0 folding - precommit test

Precommit test for D134360

Reviewed By: dmgreen

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

21 months ago[analyzer] Pass correct bldrCtx to computeObjectUnderConstruction
Tomasz Kamiński [Mon, 26 Sep 2022 09:17:41 +0000 (11:17 +0200)]
[analyzer] Pass correct bldrCtx to computeObjectUnderConstruction

In case when the prvalue is returned from the function (kind is one
of `SimpleReturnedValueKind`, `CXX17ElidedCopyReturnedValueKind`),
then it construction happens in context of the caller.
We pass `BldrCtx` explicitly, as `currBldrCtx` will always refer to callee
context.

In the following example:
```
struct Result {int value; };
Result create() { return Result{10}; }
int accessValue(Result r) { return r.value; }

void test() {
   for (int i = 0; i < 2; ++i)
      accessValue(create());
}
```

In case when the returned object was constructed directly into the
argument to a function call `accessValue(create())`, this led to
inappropriate value of `blockCount` being used to locate parameter region,
and as a consequence resulting object (from `create()`) was constructed
into a different region, that was later read by inlined invocation of
outer function (`accessValue`).
This manifests itself only in case when calling block is visited more
than once (loop in above example), as otherwise there is no difference
in `blockCount` value between callee and caller context.
This happens only in case when copy elision is disabled (before C++17).

Reviewed By: NoQ

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

21 months agoFix MSVC "not all control paths return a value" warning. NFCI.
Simon Pilgrim [Mon, 26 Sep 2022 09:27:38 +0000 (10:27 +0100)]
Fix MSVC "not all control paths return a value" warning. NFCI.

21 months ago[AArch64] Enable FeatureFuseAdrpAdd for all Arm cpus
David Green [Mon, 26 Sep 2022 08:55:10 +0000 (09:55 +0100)]
[AArch64] Enable FeatureFuseAdrpAdd for all Arm cpus

The commit D120104 enabled FeatureFuseAdrpAdd for -mcpu=generic,
allowing the linker to relax adrp;add pairs where possible. D132075
extended that to neoverse-n1, this patch extends it to all other cortex
and neoverse cpus for the same reasons.

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

21 months ago[clang-tidy] adjust treating of array-of-pointers when 'AnalyzePointers' is deactivated
Jonas Toth [Sun, 25 Sep 2022 17:26:32 +0000 (19:26 +0200)]
[clang-tidy] adjust treating of array-of-pointers when 'AnalyzePointers' is deactivated

'misc-const-correctness' previously considered arrays as 'Values' independent of the type of the elements.
This is inconsistent with the configuration of the check to disable treating pointers as values.
This patch rectifies this inconsistency.

Fixes #56749

Reviewed By: njames93

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

21 months ago[mlir] Apply ClangTidyLegacy finding.
Adrian Kuegel [Mon, 26 Sep 2022 08:31:10 +0000 (10:31 +0200)]
[mlir] Apply ClangTidyLegacy finding.

Prefer using 'override' instead of 'virtual'.

21 months ago[mlir] Fix typo in parameter name annotation.
Adrian Kuegel [Mon, 26 Sep 2022 08:26:51 +0000 (10:26 +0200)]
[mlir] Fix typo in parameter name annotation.

Found by ClangTidy.

21 months agoRevert "[mlir][Bazel] Port 730ae80d3e1c47f93f725acb2d37f06fcba06953"
Adrian Kuegel [Mon, 26 Sep 2022 08:09:02 +0000 (10:09 +0200)]
Revert "[mlir][Bazel] Port 730ae80d3e1c47f93f725acb2d37f06fcba06953"

This reverts commit ec8f08ce08c26f6db61b142ba40590c3c1d158a0.

The change that needed this BUILD fix was reverted.

21 months ago[lldb] Fix CommandInterpreter::DidProcessStopAbnormally() with multiple threads
Martin Storsjö [Fri, 16 Sep 2022 13:13:12 +0000 (16:13 +0300)]
[lldb] Fix CommandInterpreter::DidProcessStopAbnormally() with multiple threads

If a process has multiple threads, the thread with the stop
info might not be the first one in the thread list.

On Windows, under certain circumstances, processes seem to have
one or more extra threads that haven't been launched by the
executable itself, waiting in NtWaitForWorkViaWorkerFactory. If the
main (stopped) thread isn't the first one in the list (the order
seems nondeterministic), DidProcessStopAbnormally() would return
false prematurely, instead of inspecting later threads.

The main observable effect of DidProcessStopAbnormally() erroneously
returning false, is when running lldb with multiple "-o" parameters
to specify multiple commands to execute on the command line.

After an abnormal stop, lldb would stop executing "-o" parameters
and execute "-k" parameters instead - but due to this issue, it
would instead keep executing "-o" parameters as if there was no
abnormal stop. (If multiple parameters are specified via a script
file via the "-s" option, all of the commands in that file are
executed regardless of whether there's an abnormal stop inbetween.)

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

21 months ago[llvm-readobj][COFF] Print forwarder export symbols correctly
Alvin Wong [Mon, 26 Sep 2022 07:41:17 +0000 (10:41 +0300)]
[llvm-readobj][COFF] Print forwarder export symbols correctly

Reviewed By: mstorsjo

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

21 months ago[LLD][COFF] Fix absolute & synthetic symbols in COFF symbol table
Alvin Wong [Mon, 26 Sep 2022 07:40:51 +0000 (10:40 +0300)]
[LLD][COFF] Fix absolute & synthetic symbols in COFF symbol table

Absolute symbol should contain its absolute value, but LLD had been
writing its RVA instead. Write its VA instead.

DefinedSynthetic were being skipped before with the reasoning "Relative
symbols are unrepresentable in a COFF symbol table", which is only true
if the RVA points to outside of a section. LLD does create synthetic
symbols which points to actual data chunks (typical for symbols embedded
into the load config directory). Write these symbols to the COFF symbol
table too.

Reviewed By: mstorsjo

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

21 months agoRevert "[mlir][Bazel] Port 730ae80d3e1c47f93f725acb2d37f06fcba06953 part 2."
Adrian Kuegel [Mon, 26 Sep 2022 08:04:56 +0000 (10:04 +0200)]
Revert "[mlir][Bazel] Port 730ae80d3e1c47f93f725acb2d37f06fcba06953 part 2."

This reverts commit b4cc363e86e7506e41560af333b12beefd9f4bbd.

The change which needed this BUILD fix was reverted.

21 months agoRevert "[MLIR] Expose `getAsValues` in `StaticValueUtils.h` (NFC)"
Lorenzo Chelini [Mon, 26 Sep 2022 08:01:23 +0000 (10:01 +0200)]
Revert "[MLIR] Expose `getAsValues` in `StaticValueUtils.h` (NFC)"

This reverts commit 730ae80d3e1c47f93f725acb2d37f06fcba06953.

It fails with a linking errors: `undefined reference to
`mlir::getValueOrCreateConstantIndexOp` in `libMLIRDialectUtils`.

21 months ago[MLIR] Migrate MemRef -> LLVM conversion pass to the auto-generated constructor
Michele Scuttari [Sun, 25 Sep 2022 19:52:18 +0000 (21:52 +0200)]
[MLIR] Migrate MemRef -> LLVM conversion pass to the auto-generated constructor

See #57475

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

21 months ago[mlir][Bazel] Port 730ae80d3e1c47f93f725acb2d37f06fcba06953 part 2.
Adrian Kuegel [Mon, 26 Sep 2022 07:51:22 +0000 (09:51 +0200)]
[mlir][Bazel] Port 730ae80d3e1c47f93f725acb2d37f06fcba06953 part 2.

21 months ago[mlir][Bazel] Port 730ae80d3e1c47f93f725acb2d37f06fcba06953
Adrian Kuegel [Mon, 26 Sep 2022 07:45:24 +0000 (09:45 +0200)]
[mlir][Bazel] Port 730ae80d3e1c47f93f725acb2d37f06fcba06953

21 months ago[mlir][Bazel] Port afb0b21f24adecfa0b302c79366980453b15ba7b
Adrian Kuegel [Mon, 26 Sep 2022 07:37:32 +0000 (09:37 +0200)]
[mlir][Bazel] Port afb0b21f24adecfa0b302c79366980453b15ba7b

21 months ago[MLIR] Expose `getAsValues` in `StaticValueUtils.h` (NFC)
Lorenzo Chelini [Sun, 25 Sep 2022 14:32:13 +0000 (16:32 +0200)]
[MLIR] Expose `getAsValues` in `StaticValueUtils.h` (NFC)

The utility function should live in `StaticValueUtils.h` as it provides
a convenient way to convert a vector of OpFoldResults into a vector of
Values.

Reviewed By: nicolasvasilache

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

21 months ago[mlir][Arithmetic] Support commutative canonicalization for continuous XOrIOp.
jacquesguan [Tue, 20 Sep 2022 07:22:15 +0000 (15:22 +0800)]
[mlir][Arithmetic] Support commutative canonicalization for continuous XOrIOp.

This patch adds commutative canonicalization support for D116383.

Reviewed By: Mogball

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

21 months ago[Analysis] Introduce getStaticBonusApplied (NFC)
Kazu Hirata [Mon, 26 Sep 2022 06:21:40 +0000 (23:21 -0700)]
[Analysis] Introduce getStaticBonusApplied (NFC)

InlineCostCallAnalyzer encourages inlining of the last call to the
static function by subtracting LastCallToStaticBonus from Cost.

This patch introduces getStaticBonusApplied to make available the
amount of LastCallToStaticBonus applied.

The intent is to allow the module inliner to determine whether
inlining a given call site is expected to reduce the caller size with
an expression like:

  IC.getCost() + IC.getStaticBonusApplied() < 0

This patch does not add a use of getStaticBonus yet.

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

21 months ago[llvm] Use std::underlying_type_t (NFC)
Kazu Hirata [Mon, 26 Sep 2022 06:14:15 +0000 (23:14 -0700)]
[llvm] Use std::underlying_type_t (NFC)

21 months ago[ADT] Use std::conditional_t (NFC)
Kazu Hirata [Mon, 26 Sep 2022 06:14:13 +0000 (23:14 -0700)]
[ADT] Use std::conditional_t (NFC)

21 months ago[LoongArch] Add codegen support for strict_fsetccs and any_fsetcc
gonglingqin [Mon, 26 Sep 2022 04:09:13 +0000 (12:09 +0800)]
[LoongArch] Add codegen support for strict_fsetccs and any_fsetcc

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

21 months ago[ORC] Update LinkGraph unit tests for API change in 75404e9ef88.
Lang Hames [Mon, 26 Sep 2022 05:02:15 +0000 (22:02 -0700)]
[ORC] Update LinkGraph unit tests for API change in 75404e9ef88.

21 months ago[clang-format] Handle constructor invocations after new operator in C# correct
Danil Sidoruk [Mon, 26 Sep 2022 04:07:18 +0000 (21:07 -0700)]
[clang-format] Handle constructor invocations after new operator in C# correct

Fixes #56549.

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

21 months ago[JITLink] Introduce new weakly-referenced concept separate from linkage.
Lang Hames [Mon, 26 Sep 2022 02:25:13 +0000 (19:25 -0700)]
[JITLink] Introduce new weakly-referenced concept separate from linkage.

Introduces two new methods on Symbol: isWeaklyReferenced and
setWeaklyReferenced. These are now used to track/set whether an external symbol
is weakly referenced, rather than having the Symbol's linkage set to weak.

This change is a first step towards proper handling of weak defs used across
JITDylib boundaries: It frees up the Linkage field on external symbols so that
it can be used to represent the linkage of the definition that the symbol resolves
to. It is expected that Platform plugins will use this information to track
locations that need to be updated if the selected weak definition changes (e.g.
because JITDylibs were dlclosed and then dlopened again in a different order).

21 months ago[LoongArch] Lower BlockAddress/JumpTable
wanglei [Mon, 26 Sep 2022 02:22:58 +0000 (10:22 +0800)]
[LoongArch] Lower BlockAddress/JumpTable

This patch uses a unified interface for lower GlobalAddress ConstantPool
BlockAddress and JumpTable.

This patch allows lowering addresses by using PC-relative addressing
for DSO-local symbols, and accessing the address through the global
offset table for DSO-preemptable symbols.

Remove hardcoded `MininumJumpTableEntries` for test lower JumpTable.

Also updated some test cases using ConstantPool, due to the addition of
relocation information.

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

21 months agoDon't crash when code completing `using enum ^Foo`.
Sam McCall [Mon, 19 Sep 2022 23:39:49 +0000 (01:39 +0200)]
Don't crash when code completing `using enum ^Foo`.

Fixes https://github.com/clangd/clangd/issues/1281

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

21 months ago[VP][RISCV] Add vp.sqrt intrinsic and RISC-V support.
Yeting Kuo [Mon, 12 Sep 2022 12:57:39 +0000 (20:57 +0800)]
[VP][RISCV] Add vp.sqrt intrinsic and RISC-V support.

The patch modeled vp.fabs patch D132793.

Reviewed By: craig.topper

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

21 months ago[LoongArch] Support 'generic' as a valid CPU name
WANG Xuerui [Mon, 26 Sep 2022 02:18:46 +0000 (10:18 +0800)]
[LoongArch] Support 'generic' as a valid CPU name

As the LoongArch port is largely modeled after RISCV it has the same
behavior of not accepting `generic` as a CPU name. For better
compatibility with consumers of LLVM (e.g. mesa) follow D121149's suit
and treat `generic` the same as an empty CPU name.

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

21 months agoAdd override for runOnFunction()
Ruiling Song [Mon, 26 Sep 2022 02:14:09 +0000 (10:14 +0800)]
Add override for runOnFunction()

Fix build-bot failure.

21 months ago[clangd] Make go-to-type work on member function calls
Sam McCall [Mon, 26 Sep 2022 02:17:27 +0000 (04:17 +0200)]
[clangd] Make go-to-type work on member function calls

21 months ago[LoongArch] Support fastcc and treat it as ccc
WANG Xuerui [Mon, 26 Sep 2022 01:59:52 +0000 (09:59 +0800)]
[LoongArch] Support fastcc and treat it as ccc

As explained in D68559 the `fastcc` calling convention may be requested
under certain conditions, hence the need for supporting it. But unlike
RISCV we actually treat it exactly like ccc, without actually inventing
any performance hack right here. And CSKY does the same thing.

This is going to fix a few more test cases with native LoongArch builds.

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

21 months ago[gn build] Port cf14c7caacfc
LLVM GN Syncbot [Mon, 26 Sep 2022 02:02:19 +0000 (02:02 +0000)]
[gn build] Port cf14c7caacfc

21 months ago[LoongArch] Support llvm.thread.pointer
WANG Xuerui [Mon, 26 Sep 2022 01:55:21 +0000 (09:55 +0800)]
[LoongArch] Support llvm.thread.pointer

For `__builtin_thread_pointer` to work, among other things.

Similar to D76828 for RISCV.

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

21 months agoStructurizeCFG: Set Undef for non-predecessors in setPhiValues()
Ruiling Song [Tue, 23 Aug 2022 03:39:17 +0000 (11:39 +0800)]
StructurizeCFG: Set Undef for non-predecessors in setPhiValues()

During structurization process, we may place non-predecessor blocks
between the predecessors of a block in the structurized CFG. Take
the typical while-break case as an example:
```
 /---A(v=...)
 |  / \
 ^ B   C
 |  \ /|
 \---L |
     \ /
      E (r = phi (v:C)...)
```
After structurization, the CFG would be look like:
```
 /---A
 |   |\
 |   | C
 |   |/
 |   F1
 ^   |\
 |   | B
 |   |/
 |   F2
 |   |\
 |   | L
 \   |/
  \--F3
     |
     E
```
We can see that block B is placed between the predecessors(C/L) of E.
During phi reconstruction, to achieve the same sematics as before, we
are reconstructing the PHIs as:
  F1: v1 = phi (v:C), (undef:A)
  F3: r = phi (v1:F2), ...
But this is also saying that `v1` would be live through B, which is not
quite necessary. The idea in the change is to say the incoming value
from B is Undef for the PHI in E. With this change, the reconstructed
PHI would be:
  F1: v1 = phi (v:C), (undef:A)
  F2: v2 = phi (v1:F1), (undef:B)
  F3: r  = phi (v2:F2), ...

Reviewed by: sameerds

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

21 months agoStructurizeCFG: prefer reduced number of live values
Ruiling Song [Mon, 22 Aug 2022 09:45:42 +0000 (17:45 +0800)]
StructurizeCFG: prefer reduced number of live values

The instruction simplification will try to simplify the affected phis.
In some cases, this might extend the liveness of values. For example:

  BB0:
   | \
   | BB1
   | /
  BB2:phi (BB0, v), (BB1, undef)

The phi in BB2 will be simplified to v as v dominates BB2, but this is
increasing the number of active values in BB1. By setting CanUseUndef
to false, we will not simplify the phi in this way, this would help
register pressure. This is mandatory for the later change to help
reducing VGPR pressure for AMDGPU.

Reviewed by: foad, sameerds

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

21 months agoAMDGPU: Add a test to show how later optimization works
Ruiling Song [Tue, 23 Aug 2022 02:15:20 +0000 (10:15 +0800)]
AMDGPU: Add a test to show how later optimization works

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

21 months agoAMDGPU: Add a pass to rewrite certain undef in PHI
Ruiling Song [Tue, 13 Sep 2022 06:56:09 +0000 (14:56 +0800)]
AMDGPU: Add a pass to rewrite certain undef in PHI

For the pattern of IR (%if terminates with a divergent branch.),
divergence analysis will report %phi as uniform to help optimal code
generation.
```
  %if
  | \
  | %then
  | /
  %endif: %phi = phi [ %uniform, %if ], [ %undef, %then ]
```
In the backend, %phi and %uniform will be assigned a scalar register.
But the %undef from %then will make the scalar register dead in %then.
This will likely cause the register being over-written in %then. To fix
the issue, we will rewrite %undef as %uniform. For details, please refer
the comment in AMDGPURewriteUndefForPHI.cpp. Currently there is no test
changes shown, but this is mandatory for later changes.

Reviewed by: sameerds

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

21 months ago[bazel] Always specify --strip=never
Arthur Eubanks [Mon, 26 Sep 2022 01:49:49 +0000 (18:49 -0700)]
[bazel] Always specify --strip=never

21 months ago[bazel] Add some general build flags
Arthur Eubanks [Mon, 26 Sep 2022 01:21:35 +0000 (18:21 -0700)]
[bazel] Add some general build flags

21 months ago[Clang][LoongArch] Add inline asm support for constraints f/l/I/K
Weining Lu [Thu, 22 Sep 2022 12:03:01 +0000 (20:03 +0800)]
[Clang][LoongArch] Add inline asm support for constraints f/l/I/K

This patch adds support for constraints `f`, `l`, `I`, `K` according
to [1]. The remain constraints (`k`, `m`, `ZB`, `ZC`) will be added
later as they are a little more complex than the others.
f: A floating-point register (if available).
l: A signed 16-bit constant.
I: A signed 12-bit constant (for arithmetic instructions).
K: An unsigned 12-bit constant (for logic instructions).

For now, no need to support register alias (e.g. `$a0`) in llvm as
clang will correctly decode the usage of register name aliases into
their official names. And AFAIK, the not yet upstreamed `rustc` for
LoongArch will always use official register names (e.g. `$r4`).

[1] https://gcc.gnu.org/onlinedocs/gccint/Machine-Constraints.html

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

21 months ago[AVR] Fix useDeprecatedPositionallyEncodedOperands errors.
James Y Knight [Mon, 19 Sep 2022 14:10:01 +0000 (10:10 -0400)]
[AVR] Fix useDeprecatedPositionallyEncodedOperands errors.

This is a follow-on to https://reviews.llvm.org/D134073.

It renames a few fields to have consistent names, as well as renaming
operands to match the field names.

The encoder behavior is unchanged by this cleanup, but a few
instructions were previously being disassembled incorrectly, and have
been corrected by this change. All of the affected instructions were
missing disassembly tests, which are now added.

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

21 months ago[AMDGPU] Fix useDeprecatedPositionallyEncodedOperands errors in R600.
James Y Knight [Fri, 16 Sep 2022 21:21:06 +0000 (17:21 -0400)]
[AMDGPU] Fix useDeprecatedPositionallyEncodedOperands errors in R600.

This is a follow-on to https://reviews.llvm.org/D134073.

It renames a couple of fields to match their operands, as well as
introducing sub-operand names where required.

This change _only_ fixes the 'R600' half of the target, not the
'AMDGPU' half. Fixing the AMDGPU half will be a significantly more
difficult change (which I've not yet attempted.)

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

21 months ago[Lanai] Fix useDeprecatedPositionallyEncodedOperands errors.
James Y Knight [Sun, 12 Jun 2022 22:06:29 +0000 (22:06 +0000)]
[Lanai] Fix useDeprecatedPositionallyEncodedOperands errors.

This is a follow-on to https://reviews.llvm.org/D134073.

Lanai was almost clean: the only issue is that 'bit' behaves
differently than 'bits<1>', because only the 'bits' type preserves
unresolved references via 'keepUnsetBits()' in
TableGen/Record.h. Thus, use bits instead.

This issue _would_ have caused invalid instruction emission/decoding,
except that the PQ bits were being overriden after the fact by code in
'adjustPqBits' in MCTargetDesc/LanaiMCCodeEmitter.cpp, and
'PostOperandDecodeAdjust' in Disassembler/LanaiDisassembler.cpp.

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

21 months ago[clang-format][NFC] Rewrite prints in python3 compatible way
Danil Sidoruk [Sun, 25 Sep 2022 20:27:42 +0000 (13:27 -0700)]
[clang-format][NFC] Rewrite prints in python3 compatible way

Closes #55996.

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

21 months ago[Coroutines] Regenerate coro-retcon-resume-values.ll
Simon Pilgrim [Sun, 25 Sep 2022 18:58:18 +0000 (19:58 +0100)]
[Coroutines] Regenerate coro-retcon-resume-values.ll

21 months ago[clang-cl] Implement /ZH: flag
Nico Weber [Fri, 23 Sep 2022 15:12:59 +0000 (11:12 -0400)]
[clang-cl] Implement /ZH: flag

Based on a patch by Arlo Siemsen (D98438)!

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

21 months ago[clang-format] Look ahead before consuming `bool` in requires clause.
Emilia Dreamer [Sun, 25 Sep 2022 17:30:10 +0000 (20:30 +0300)]
[clang-format] Look ahead before consuming `bool` in requires clause.

The comment handling the bool case says:
"bool is only allowed if it is directly followed by a paren for a cast"

This change more closely follows this directive by looking ahead for
the paren before consuming the bool keyword itself. Without a following
paren, the bool would be part of something else, such as a return type
for a function declaration

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

Reviewed By: HazardyKnusperkeks, owenpan, MyDeveloperDay

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

21 months ago[clang-format] Correctly annotate static and consteval lambdas
Emilia Dreamer [Sun, 25 Sep 2022 17:29:34 +0000 (20:29 +0300)]
[clang-format] Correctly annotate static and consteval lambdas

`P1169` "static operator()" (https://wg21.link/P1169) is accepted to
C++23 and while clang itself doesn't exactly support it yet,
clang-format could quite easily.

This simply allows the keyword `static` to be a part of lambdas as
specified by the addition to [expr.prim.lambda.general]

While adding this, I noticed `consteval` lambdas also aren't handled,
so that keyword is now allowed to be a part of lambdas as well

Reviewed By: HazardyKnusperkeks, owenpan, MyDeveloperDay

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

21 months ago[PhaseOrdering][X86] Add missing triple from fast-basictest.ll test
Simon Pilgrim [Sun, 25 Sep 2022 15:23:35 +0000 (16:23 +0100)]
[PhaseOrdering][X86] Add missing triple from fast-basictest.ll test

21 months ago[SLP][X86] Add missing triple from pr49081.ll test
Simon Pilgrim [Sun, 25 Sep 2022 15:22:42 +0000 (16:22 +0100)]
[SLP][X86] Add missing triple from pr49081.ll test

21 months agofix errors on passing input iterator to `std::views::take`
Hui Xie [Fri, 2 Sep 2022 18:24:22 +0000 (19:24 +0100)]
fix errors on passing input iterator to `std::views::take`

In the implementation of `std::views::take`, it uses `subrange<Iter>` as part of the return type. But in case of input iterator, `subrange<Iter>` can be ill-formed

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

21 months agoAutogenerate a couple of test in the AMDGPU backend. NFC
Amaury Séchet [Sun, 25 Sep 2022 14:00:22 +0000 (14:00 +0000)]
Autogenerate a couple of test in the AMDGPU backend. NFC

21 months ago[CostModel][X86] Add missing cost kinds for v2i64 icmp on SLM
Simon Pilgrim [Sun, 25 Sep 2022 14:12:21 +0000 (15:12 +0100)]
[CostModel][X86] Add missing cost kinds for v2i64 icmp on SLM

21 months ago[X86] Fix Icelake VPMULLQ zmm pipes and adjust AVX512DQ v8i64 mul costs to match...
Simon Pilgrim [Sun, 25 Sep 2022 13:18:03 +0000 (14:18 +0100)]
[X86] Fix Icelake VPMULLQ zmm pipes and adjust AVX512DQ v8i64 mul costs to match worse case

Icelake PMULLQ throughput regressed cf SkylakeServer as its Pipe0 only

Confirmed with Intel SOM, Agner and instlatx64

21 months ago[libc++] Rewrites graph_header_deps.py.
Mark de Wever [Mon, 19 Sep 2022 15:37:35 +0000 (17:37 +0200)]
[libc++] Rewrites graph_header_deps.py.

The new version is a lot simpler and has less option which were not
used. This uses the CSV files as generated by D133127 as input data.

The current Python script has more features but uses a simple "grep"
making the output less accurate:
- Conditionally included header are always included. This is an issue
  since part of our includes are unneeded transitive includes. Based on
  the language version they may be omitted. The script however always
  includes them.
- Includes in comments are processed as-if they are includes. This is an
  issue when comments explain how certain data is generated; of course
  there are digraphs which the script omits.

This implementation uses Clang's --trace-includes to generate the includes
per header. This means the input of the generation script always has the
real list of includes.

Libc++ is moving from large monolithic Standard headers to more fine
grained headers. For example, algorithm includes every header in
`__algorithm`. Adding all these detail headers in the graph makes the
output unusable. Instead it only shows the Standard headers. The
transitive includes of the detail headers are parsed and "attributed" to
the Standard header including them. This gives an accurate include graph
without the unneeded clutter. Note that this graph is still big.

This changes fixes the cyclic dependency issue with the previous version
of the tool so the markers and its documentation is removed.

Since the input has no cycles the CI test is removed.

Reviewed By: #libc, ldionne

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

21 months ago[AMDGPU] Pattern for flat atomic fadd f64 intrinsic with local addr
Petar Avramovic [Sun, 25 Sep 2022 10:52:32 +0000 (12:52 +0200)]
[AMDGPU] Pattern for flat atomic fadd f64 intrinsic with local addr

Fix regression from clang opencl test in builtins-fp-atomics-gfx90a.cl
test_flat_add_local_f64 caused by D130579
Revert a3becb333d7faae695e18728e9b8fa3a3579a240.

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

21 months ago[libc++][test] Improves transitive includes.
Mark de Wever [Thu, 1 Sep 2022 17:21:27 +0000 (19:21 +0200)]
[libc++][test] Improves transitive includes.

This test generates the include graph of the Standard headers of libc++ in
a CSV file. This was originally used to generate graphviz dot files. During
review it was noticed these files have all information needed to replace
the current transitive includes. Therefore the output, with the same information as the .dot file is stored in a .csv file. This removes
all the existing transitive include files.

The .cvs can be converted by a .dot file by the script in D134188.

Reviewed By: #libc, ldionne

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

21 months ago[InstSimplify] fold redundant select of min/max, part 2
Sanjay Patel [Sun, 25 Sep 2022 11:02:26 +0000 (07:02 -0400)]
[InstSimplify] fold redundant select of min/max, part 2

This extends e5d15e116292 to handle the inverse predicates
(there's probably a more elegant way to specify the preds).

These patterns correspond to the existing simplify:
max (min X, Y), X --> X
...and extra preds for (non)equality.

The tests cycle through all 10 icmp preds for each min/max
variant with 4 swapped operand patterns each (and the min/max
operands are commuted in every other test within those).

Some Alive2 examples to verify:
https://alive2.llvm.org/ce/z/XMvEKQ
https://alive2.llvm.org/ce/z/QpMChr

21 months ago[lld-macho] Force higher alignment for __thread_vars
Daniel Bertalan [Sat, 24 Sep 2022 19:10:31 +0000 (21:10 +0200)]
[lld-macho] Force higher alignment for __thread_vars

`__thread_vars` contains pointers to `__tlv_bootstrap`, which are fixed
up by dyld; however the section's alignment is not specified. This means
that the relocations might end up on odd addresses, which is not
representable by the soon to be added chained fixups.

This is arguably a bug in MC, but this behavior has been there since TLV
support was originally added.

This patch forces the `__thread_vars` sections to be aligned to the
target's pointer size. This is done by ld64 as well.

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

21 months ago[X86] Pre-commit unit test for D134477
Han Zhu [Sun, 25 Sep 2022 04:51:35 +0000 (21:51 -0700)]
[X86] Pre-commit unit test for D134477

21 months ago[Clang] Improve diagnostics about the invalid target feature.
wangliushuai [Sun, 25 Sep 2022 02:16:30 +0000 (10:16 +0800)]
[Clang] Improve diagnostics about the invalid target feature.

Clang with debug builds will crash when run with empty target feature input.
And the warning message is a little bit confusing. This patch adds an empty
check and a new diagnostic to illustrate where goes wrong.

Reviewed By: MaskRay, aaron.ballman

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

21 months ago[RISCV] Pattern match scalable strided load/store
Philip Reames [Sun, 25 Sep 2022 00:06:48 +0000 (17:06 -0700)]
[RISCV] Pattern match scalable strided load/store

Very straight forward extension of the existing pattern matching pass to handle scalable types as well as fixed length types. The only extra bit beyond removing a bailout is recognizing stepvector.

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

21 months ago[RISCV] Add lowering for scalable @llvm.riscv.masked.strided.load/store
Philip Reames [Sun, 25 Sep 2022 00:05:10 +0000 (17:05 -0700)]
[RISCV] Add lowering for scalable @llvm.riscv.masked.strided.load/store

The code previously assumed fixed length vectors; make the relevant code conditional.

Having the lowering in place is neccessary for an upcoming change to generalize scatter/gather matching to scalable vectors.

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

21 months ago[ARM] Fix check lines in memcpy-inline.ll test. NFC
David Green [Sat, 24 Sep 2022 20:29:41 +0000 (21:29 +0100)]
[ARM] Fix check lines in memcpy-inline.ll test. NFC

Commit c442698 updated the check lines in this file, but did so in a
way that removed a number of the existing checks, as the
update_llc_test_checks script does not understand all triples. This
fixes it up as needed to keep testing Thumb1 code.

21 months ago[LoopVersioning] Add tests where versioning requires LAA invalidation.
Florian Hahn [Sat, 24 Sep 2022 19:33:49 +0000 (20:33 +0100)]
[LoopVersioning] Add tests where versioning requires LAA invalidation.

Additional test cases for #57825.

21 months ago[BPF] memcmp.ll - add checks for all loads
Simon Pilgrim [Sat, 24 Sep 2022 17:55:25 +0000 (18:55 +0100)]
[BPF] memcmp.ll - add checks for all loads

Noticed while triaging alignment issues for #57872

21 months ago[BPF] ex1.ll - add checks for stores
Simon Pilgrim [Sat, 24 Sep 2022 17:53:59 +0000 (18:53 +0100)]
[BPF] ex1.ll - add checks for stores

Noticed while triaging alignment issues for #57872

21 months ago[clang-tidy] Fix a false positive in readability-simplify-boolean-expr
Nathan James [Sat, 24 Sep 2022 17:29:17 +0000 (18:29 +0100)]
[clang-tidy] Fix a false positive in readability-simplify-boolean-expr

Reviewed By: LegalizeAdulthood

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

21 months ago[InstSimplify] fold redundant select of min/max
Sanjay Patel [Sat, 24 Sep 2022 15:08:19 +0000 (11:08 -0400)]
[InstSimplify] fold redundant select of min/max

This is similar to the existing simplify:
max (max X, Y), X --> max X, Y
...but the select condition can be one of
several predicates as shown in the tests.

The tests cycle through all 10 icmp preds for
each min/max variant with 4 swapped operand
patterns each (and the min/max operands are
commuted in every other test within those).

Some Alive2 examples to verify:
https://alive2.llvm.org/ce/z/lCAQm4
https://alive2.llvm.org/ce/z/kzxVXC

21 months ago[InstSimplify] add tests for select with min/max op; NFC
Sanjay Patel [Fri, 23 Sep 2022 18:31:51 +0000 (14:31 -0400)]
[InstSimplify] add tests for select with min/max op; NFC

These are organized as 10 (predicates) * 4 (swapped operands) * 4 (min/max variants) = 160 tests.

21 months ago[Clang] Warn when trying to dereference void pointers in C
Jun Zhang [Sat, 24 Sep 2022 14:18:04 +0000 (22:18 +0800)]
[Clang] Warn when trying to dereference void pointers in C

Previously we only have an extension that warn void pointer deferencing
in C++, but for C we did nothing.

C2x 6.5.3.2p4 says The unary * operator denotes indirection. If it points
to an object, the result is an lvalue designating the object. However, there
is no way to form an lvalue designating an object of an incomplete type as
6.3.2.1p1 says "an lvalue is an expression (with an object type other than
void)", so the behavior is undefined.

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

Signed-off-by: Jun Zhang <jun@junz.org>
Differential Revision: https://reviews.llvm.org/D134461

21 months ago[TableGen] Add useDeprecatedPositionallyEncodedOperands option.
James Y Knight [Tue, 20 Sep 2022 12:30:20 +0000 (08:30 -0400)]
[TableGen] Add useDeprecatedPositionallyEncodedOperands option.

Summary:
The existing undefined-bitfield-to-operand matching behavior is very
hard to understand, due to the combination of positional and named
matching. This can make it difficult to track down a bug in a target's
instruction definitions.

Over the last decade, folks have tried to work-around this in various
ways, but it's time to finally ditch the positional matching. With
https://reviews.llvm.org/D131003, there are no longer cases that
_require_ positional matching, and it's time to start removing usage
and support for it.

Therefore: add a (default-false) option, and set it to true only in
those targets that require positional matching today. Subsequent
changes will start cleaning up additional in-tree targets.

NOTE TO OUT OF TREE TARGET MAINTAINERS:

If this change breaks your build, you may restore the previous
behavior simply by adding:
  let useDeprecatedPositionallyEncodedOperands = 1;
to your target's InstrInfo tablegen definition. However, this is
temporary -- the option will be removed in the future.

If your target does not set 'decodePositionallyEncodedOperands', you
may thus start migrating to named operands. However, if you _do_
currently set that option, I recommend waiting until a subsequent
change lands, which adds decoder support for named sub-operands.

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

21 months ago[TableGen][CodeEmitterGen] Allow local names for sub-operands in a operand list.
James Y Knight [Mon, 5 Sep 2022 16:10:21 +0000 (12:10 -0400)]
[TableGen][CodeEmitterGen] Allow local names for sub-operands in a operand list.

These names can then be matched by name against 'bits' fields in a
record, to populate an instruction's encoding.

This does _not_ yet change DecoderEmitter to allow by-name matching of
sub-operands. Unlike the encoder, the decoder already defaulted to not
supporting positional matching, and backends had workarounds in place
for the missing decoding support.

Additionally, use this new capability to allow the ARM and AArch64
backends not to require any positional operand matching.

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

21 months ago[flang] Handle NULL(mold) used in initializer region
Valentin Clement [Sat, 24 Sep 2022 13:22:47 +0000 (15:22 +0200)]
[flang] Handle NULL(mold) used in initializer region

NULL intrinsic with a MOLD argument can be used in a type constructor.
This patch handles this use case with a specific lowering that create
an unallocated box with the MOLD type.

Reviewed By: PeteSteinfeld

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

21 months ago[Clang] Make Clang driver suggest '-Xclang' for CC1 options passed to the driver
Joseph Huber [Fri, 23 Sep 2022 16:39:25 +0000 (11:39 -0500)]
[Clang] Make Clang driver suggest '-Xclang' for CC1 options passed to the driver

This patch adds an additional check for if an options passed to the
Clang driver could've been intended for the clang compiler. This is
primarily done for the times when a user attempts to pass an option like
`-ast-dump` to the driver instead.

Reviewed By: MaskRay, aaron.ballman

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

21 months ago[RISCV][Clang] Replace all undef value with poison
eopXD [Fri, 23 Sep 2022 02:15:36 +0000 (19:15 -0700)]
[RISCV][Clang] Replace all undef value with poison

Address remaining work that dates back to discussion in D126745

Reviewed By: craig.topper

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

21 months ago[flang] Lower character result of bind(c) function by value
Valentin Clement [Sat, 24 Sep 2022 06:58:50 +0000 (08:58 +0200)]
[flang] Lower character result of bind(c) function by value

BIND(C) Function returning character must return it by value and
not as hidden argument like done currently. This patch update the
code to return it by value for both use cases.

Reviewed By: PeteSteinfeld

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

21 months ago[RISCV] Rename RISCVScheduleB.td to RISCVScheduleZb.td. NFC
Craig Topper [Sat, 24 Sep 2022 04:38:03 +0000 (21:38 -0700)]
[RISCV] Rename RISCVScheduleB.td to RISCVScheduleZb.td. NFC

21 months ago[RISCV] Add missing scheduler classes to Zbkb and Zbkx instructions.
Craig Topper [Sat, 24 Sep 2022 04:37:09 +0000 (21:37 -0700)]
[RISCV] Add missing scheduler classes to Zbkb and Zbkx instructions.

21 months ago[mlir][spirv] Switch to kEmitAccessorPrefix_Predixed
Jakub Kuderski [Sat, 24 Sep 2022 04:36:53 +0000 (00:36 -0400)]
[mlir][spirv] Switch to kEmitAccessorPrefix_Predixed

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

Reviewed By: antiagainst

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

21 months ago[RISCV] Remove a few remnants of Zbr I misssed.
Craig Topper [Sat, 24 Sep 2022 04:21:51 +0000 (21:21 -0700)]
[RISCV] Remove a few remnants of Zbr I misssed.

21 months ago[mlir][nvgpu] Use TableGen TypeDef for NVGPU dialect types
Christopher Bate [Fri, 23 Sep 2022 20:37:38 +0000 (14:37 -0600)]
[mlir][nvgpu] Use TableGen TypeDef for NVGPU dialect types

Moves definition of DeviceAsyncToken to use the declarative Tablegen
TypeDef since the type is trivial. This also allows for removing the
current code for parsing/printing types by using the auto-generated
functions.

Reviewed By: ThomasRaoux

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

21 months agoRevert "[RISCV] Lower BUILD_VECTOR to RISCVISD::VID_VL if it is floating-point type."
Craig Topper [Sat, 24 Sep 2022 00:16:09 +0000 (17:16 -0700)]
Revert "[RISCV] Lower BUILD_VECTOR to RISCVISD::VID_VL if it is floating-point type."

This reverts commit dd53a0bb30413d26c3ab63a5c57c3cdf301be7a1.

We have seen crashes from this internally. Probably due to the use
of RoundingMode::Dynamic.

21 months ago[mlir][spirv] Switch to kEmitAccessorPrefix_Both
Jakub Kuderski [Sat, 24 Sep 2022 01:28:58 +0000 (21:28 -0400)]
[mlir][spirv] Switch to kEmitAccessorPrefix_Both

Prepare for switching to prefixed accessors.

Issue: https://github.com/llvm/llvm-project/issues/57887

Reviewed By: antiagainst, rriddle

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

21 months ago[flang] Fix crash in semantics in error recovery
Peter Klausler [Wed, 7 Sep 2022 00:45:38 +0000 (17:45 -0700)]
[flang] Fix crash in semantics in error recovery

When a FUNCTION statement has both an explicit type in its prefix
and a RESULT clause in its suffix, semantics crashes due to the
redundant type; emit a nice error message instead.

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

21 months agoImplement nanosleep per https://pubs.opengroup.org/onlinepubs/009695399/basedefs...
Raman Tenneti [Sat, 24 Sep 2022 00:13:23 +0000 (00:13 +0000)]
Implement nanosleep per https://pubs.opengroup.org/onlinepubs/009695399/basedefs/time.h.html

Tested:
Limited unit test: This makes a call and checks that no error was
returned, but we currently don't have the ability to ensure that
time has elapsed as expected.

Co-authored-by: Jeff Bailey <jeffbailey@google.com>
Reviewed By: sivachandra, jeffbailey

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

21 months ago[flang] Preserve component array lower bounds in folding
Peter Klausler [Wed, 21 Sep 2022 19:22:18 +0000 (12:22 -0700)]
[flang] Preserve component array lower bounds in folding

When a component array of a named constant is extracted as
a constant value, ensure that the lower bounds of the array
are properly acquired from the declaration of the component.

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

21 months ago[RISCV] Merge half-intrinsics-strict.ll into zvh-half-intrinsics-strict.ll. NFC
Craig Topper [Fri, 23 Sep 2022 21:25:27 +0000 (14:25 -0700)]
[RISCV] Merge half-intrinsics-strict.ll into zvh-half-intrinsics-strict.ll. NFC

I had forgotten how we had the files partitioned.

21 months ago[objdump] Fix typo in error message.
Daniel Rodríguez Troitiño [Fri, 23 Sep 2022 23:10:27 +0000 (16:10 -0700)]
[objdump] Fix typo in error message.

Change "inconsistant" for "inconsistent" in the message, the file name
and the test output.

Reviewed By: pete, MaskRay

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

21 months ago[flang][runtime] Enabled HAS_FLOAT128 for builds with clang.
Slava Zakharin [Thu, 22 Sep 2022 23:58:53 +0000 (16:58 -0700)]
[flang][runtime] Enabled HAS_FLOAT128 for builds with clang.

I am building with clang, and I noticed for quite a while that
REAL(16) runtimes functions are not available. I did not know why
until I saw this typo.

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