platform/upstream/llvm.git
2 years agoMake hit point counts reliable for architectures that stop before evaluation.
Jim Ingham [Wed, 13 Jul 2022 01:34:24 +0000 (18:34 -0700)]
Make hit point counts reliable for architectures that stop before evaluation.

Since we want to present the "new & old" values for watchpoint hits, on architectures,
including the ARM family, that stop before the triggering instruction is run, we need
to single step over the instruction before stopping for realz.  This was incorrectly
done directly in the StopInfoWatchpoint::ShouldStop.  That causes problems if more than
one thread stops "for a reason" at the same time as the watchpoint, since the other actions
didn't expect the process to make progress in this part of the execution control machinery.

The correct way to do this is to schedule the step over using ThreadPlans, and then to restore
the stop info after that plan stops, so that the rest of the stop info actions can happen when
all the other threads have handled their immediate actions as well.

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

2 years agoCodeGen: Remove AliasAnalysis from regalloc
Matt Arsenault [Fri, 24 Jun 2022 16:09:34 +0000 (12:09 -0400)]
CodeGen: Remove AliasAnalysis from regalloc

This was stored in LiveIntervals, but not actually used for anything
related to LiveIntervals. It was only used in one check for if a load
instruction is rematerializable. I also don't think this was entirely
correct, since it was implicitly assuming constant loads are also
dereferenceable.

Remove this and rely only on the invariant+dereferenceable flags in
the memory operand. Set the flag based on the AA query upfront. This
should have the same net benefit, but has the possible disadvantage of
making this AA query nonlazy.

Preserve the behavior of assuming pointsToConstantMemory implying
dereferenceable for now, but maybe this should be changed.

2 years ago[libc] fix strtofloatingpoint on rare edge case
Michael Jones [Mon, 18 Jul 2022 18:32:04 +0000 (11:32 -0700)]
[libc] fix strtofloatingpoint on rare edge case

Currently, there are two string parsers that can be used in a call to
strtofloatingpoint. There is the main parser used by Clinger's fast path
and Eisel-Lemire, and the backup parser used by Simple Decimal
Conversion. There was a bug in the backup parser where if the number had
more than 800 digits (the size of the SDC buffer) before the decimal
point, it would just ignore the digits after the 800th and not count
them into the exponent. This patch fixes that issue and adds regression
tests.

Reviewed By: lntue

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

2 years ago[BOLT][DWARF] Fix incorrect DW_AT_type offset for unittest
zr33 [Mon, 18 Jul 2022 21:20:22 +0000 (14:20 -0700)]
[BOLT][DWARF] Fix incorrect DW_AT_type offset for unittest

Some unit tests has incorrect DW_AT_type offset since they are manual crafted, fix them to the correct offset.

Reviewed By: Amir, ayermolo

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

2 years ago[BOLT][DWARF] Add Unit test for DW_AT_high_pc [DW_FORM_addr]
zr33 [Mon, 18 Jul 2022 21:03:40 +0000 (14:03 -0700)]
[BOLT][DWARF] Add Unit test for DW_AT_high_pc [DW_FORM_addr]

Reviewed By: ayermolo

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

2 years ago[pseudo] Add guards for module contextual keywords
Sam McCall [Mon, 18 Jul 2022 20:38:24 +0000 (22:38 +0200)]
[pseudo] Add guards for module contextual keywords

2 years ago[clang-tidy] Reduce the dependencies for the "make-confusable-table" tool
Martin Storsjö [Thu, 14 Jul 2022 19:35:50 +0000 (22:35 +0300)]
[clang-tidy] Reduce the dependencies for the "make-confusable-table" tool

When cross compiling llvm, a separate recursive native cmake build
is generated, for building the tools that generate code (unless they're
provided externally by the caller).

This reduces the number of build steps for that native build from
1000+ steps to 162.

This matches how the clang-pseudo-gen tool is set up in
clang-tools-extra/pseudo/gen/CMakeLists.txt.

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

2 years ago[clang-format] Mark constexpr lambdas as lambda
Björn Schäpers [Sat, 16 Jul 2022 21:46:18 +0000 (23:46 +0200)]
[clang-format] Mark constexpr lambdas as lambda

Otherwise the brace was detected as a function brace, not wrong per se,
but when directly calling the lambda the calling parens were put on the
next line.

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

2 years ago[clang-format] Indent TT_CtorInitializerColon after requires clauses
Björn Schäpers [Wed, 13 Jul 2022 10:38:38 +0000 (12:38 +0200)]
[clang-format] Indent TT_CtorInitializerColon after requires clauses

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

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

2 years ago[clang-format] Fix misannotation of colon in presence of requires clause
Björn Schäpers [Mon, 4 Jul 2022 08:53:34 +0000 (10:53 +0200)]
[clang-format] Fix misannotation of colon in presence of requires clause

For clauses without parentheses it was annotated as TT_InheritanceColon.
Relates to https://github.com/llvm/llvm-project/issues/56215

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

2 years ago[AMDGPU] Support for gfx940 fp8 smfmac
Stanislav Mekhanoshin [Fri, 15 Jul 2022 22:16:04 +0000 (15:16 -0700)]
[AMDGPU] Support for gfx940 fp8 smfmac

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

2 years ago[AMDGPU] Support for gfx940 fp8 mfma
Stanislav Mekhanoshin [Fri, 15 Jul 2022 21:45:19 +0000 (14:45 -0700)]
[AMDGPU] Support for gfx940 fp8 mfma

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

2 years ago[AMDGPU] Support for gfx940 fp8 conversions
Stanislav Mekhanoshin [Fri, 15 Jul 2022 20:20:08 +0000 (13:20 -0700)]
[AMDGPU] Support for gfx940 fp8 conversions

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

2 years ago[LV] Sink module variable and use State to set it in widenCall. (NFC)
Florian Hahn [Mon, 18 Jul 2022 18:41:48 +0000 (19:41 +0100)]
[LV] Sink module variable and use State to set it in widenCall. (NFC)

Limits the lifetime of the variable and makes it independent of
CallInst.

2 years ago[LiveIntervals] Find better anchoring end points when repairing ranges
Jay Foad [Mon, 18 Jul 2022 14:20:06 +0000 (15:20 +0100)]
[LiveIntervals] Find better anchoring end points when repairing ranges

r175673 changed repairIntervalsInRange to find anchoring end points for
ranges automatically, but the calculation of Begin included the first
instruction found that already had an index. This patch changes it to
exclude that instruction:

1. For symmetry, so that the half open range [Begin,End) only includes
   instructions that do not already have indexes.
2. As a possible performance improvement, since repairOldRegInRange
   will scan fewer instructions.
3. Because repairOldRegInRange hits assertion failures in some cases
   when it sees a def that already has a live interval.

(3) fixes about ten tests in the CodeGen lit test suite when
-early-live-intervals is forced on.

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

2 years agoReland "[SystemZ][z/OS] Fix f32 variadic argument assertion"
Mubariz Afzal [Mon, 18 Jul 2022 18:24:20 +0000 (14:24 -0400)]
Reland "[SystemZ][z/OS] Fix f32 variadic argument assertion"

This patch relands the f32 vararg assertion on z/OS fix that was reverted previously due to the testcase failing on non-z/OS platforms. It is now passing.

The tablegen lines that specify the XPLINK64 calling convention for promoting an f32 vararg to an f64 are effectively overwritten by the following tablegen line which bitcast an f64 vararg to an i64 (so that it can be used in the GPRs). Thus it becomes a bitcast from f32 to i64. We don't handle bitcasts for f32s and so this causes an assertion to be thrown.

We fix this by simplifying the tablegen lines to explicity show this behaviour, and allow the f32 in the bitcast case by first promoting it to an f64.

2 years agoRevert "[MLIR] Generic 'malloc', 'aligned_alloc' and 'free' functions"
Mehdi Amini [Mon, 18 Jul 2022 18:07:36 +0000 (18:07 +0000)]
Revert "[MLIR] Generic 'malloc', 'aligned_alloc' and 'free' functions"

This reverts commit 3e21fb616d9a1b29bf9d1a1ba484add633d6d5b3.

A lot of integration tests are failing on the bot.

2 years ago[RISCV] Optimize (seteq (i64 (and X, 0xffffffff)), C1)
Craig Topper [Mon, 18 Jul 2022 16:58:54 +0000 (09:58 -0700)]
[RISCV] Optimize (seteq (i64 (and X, 0xffffffff)), C1)

(and X, 0xffffffff) requires 2 shifts in the base ISA. Since we
know the result is being used by a compare, we can use a sext_inreg
instead of an AND if we also modify C1 to have 33 sign bits instead
of 32 leading zeros. This can also improve the generated code for
materializing C1.

Reviewed By: reames

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

2 years ago[RISCV] Pre-commit tests for D129980. NFC
Craig Topper [Mon, 18 Jul 2022 16:58:44 +0000 (09:58 -0700)]
[RISCV] Pre-commit tests for D129980. NFC

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

2 years ago[gn build] Port e24b390dbc4e
LLVM GN Syncbot [Mon, 18 Jul 2022 17:45:05 +0000 (17:45 +0000)]
[gn build] Port e24b390dbc4e

2 years ago[gn build] Port 0f9d9edd2477
LLVM GN Syncbot [Mon, 18 Jul 2022 17:45:04 +0000 (17:45 +0000)]
[gn build] Port 0f9d9edd2477

2 years ago[coro async] Fix code to run coro.async.end cleanup like the legacy pass did
Arnold Schwaighofer [Fri, 15 Jul 2022 14:32:22 +0000 (07:32 -0700)]
[coro async] Fix code to run coro.async.end cleanup like the legacy pass did

The code executed for the Switch ABI does not change.

rdar://97074714

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

2 years agollvm-reduce: Add reduction for instruction defs
Matt Arsenault [Mon, 27 Jun 2022 18:28:33 +0000 (14:28 -0400)]
llvm-reduce: Add reduction for instruction defs

Try to insert an implicit_def to replace the instruction's value,
replacing the original instruction's def with a dead register. If all
defs are delete the instruction entirely.

This is pretty similar to the instruction reduction, but leaves the
new defs in the same place as the original instruction. This could
possibly replace it. I'm not sure if we should directly delete the
instructions here, or leave dead ones behind.

This could also further work to replace physical register defs.

2 years agollvm-reduce: Add reduction for custom register masks
Matt Arsenault [Wed, 22 Jun 2022 17:13:17 +0000 (13:13 -0400)]
llvm-reduce: Add reduction for custom register masks

I have a register allocator failure that only reproduces with IPRA
enabled, and requires the specific regmask if I want to only run the
one relevant pass. The printed custom regmask is enormous and I would
like to reduce it.

This reduces each individual bit in the mask, but it would probably be
better to start at register units and clear all aliasing fields at a
time. This would require stricter verification that all aliasing bits
are set in regmasks (although I would prefer to switch regmasks to use
register units in the first place).

2 years ago[docs] Remove unmaintained target feature matrix
Alex Bradbury [Mon, 18 Jul 2022 17:37:09 +0000 (18:37 +0100)]
[docs] Remove unmaintained target feature matrix

Back in 2017, a table was added to the codegen documentation listing
which features various backends support. It received a few updates since
then, but not since the end of 2019. Having such a table is a nice idea,
but it hasn't been kept up to date, it isn't easy to ensure that it is
up to date, and the table probably isn't very discoverable for most
users who would be interested in this information anyway (it would be
better suited to some kind of "what can LLVM do for me?" page).

For all of the above reasons, I believe it makes sense to remove it.

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

2 years ago[lld-macho] Devirtualize TargetInfo::getRelocAttrs
Daniel Bertalan [Mon, 18 Jul 2022 11:37:40 +0000 (13:37 +0200)]
[lld-macho] Devirtualize TargetInfo::getRelocAttrs

This method is called on each relocation when parsing input files, so
the overhead of using virtual functions ends up being quite large.  We
now have a single non-virtual method, which reads from the appropriate
array of relocation attributes set in the TargetInfo constructor.

This change results in a modest 2.3% reduction in link time for
chromium_framework measured on an x86-64 VPS, and 0.7% on an arm64 Mac.

    N           Min           Max        Median           Avg        Stddev
x  10     11.869417     12.032609     11.935041     11.938268   0.045802324
+  10     11.581526     11.785265     11.649885     11.659507   0.054634834
Difference at 95.0% confidence
-0.278761 +/- 0.0473673
-2.33502% +/- 0.396768%
(Student's t, pooled s = 0.0504124)

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

2 years ago[MLIR][Presburger] fix warning under g++ (NFC)
Arjun P [Mon, 18 Jul 2022 17:01:32 +0000 (18:01 +0100)]
[MLIR][Presburger] fix warning under g++ (NFC)

2 years agoReapply "[NVPTX] Use the mask() operator to initialize packed structs with pointers"
Igor Kudrin [Mon, 18 Jul 2022 16:56:07 +0000 (20:56 +0400)]
Reapply "[NVPTX] Use the mask() operator to initialize packed structs with pointers"

The original patch revealed an issue of reading incorrect values on BE hosts.
That is now changed to use `endian::read32le()` and `endian::read64le()`.

Original commit message:

The current implementation assumes that all pointers used in the
initialization of an aggregate are aligned according to the pointer size
of the target; that might not be so if the object is packed. In that
case, an array of .u8 should be used and pointers should be decorated
with the mask() operator.

The operator was introduced in PTX ISA 7.1, so an error is issued if the
case is detected for an earlier version.

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

2 years ago[RISCV] Add isel patterns for ineg+setge/le/uge/ule.
Craig Topper [Mon, 18 Jul 2022 16:10:53 +0000 (09:10 -0700)]
[RISCV] Add isel patterns for ineg+setge/le/uge/ule.

setge/le/uge/ule selected by themselves require an xori with 1.
If we're negating the setcc, we can fold the xori with the neg
to create an addi with -1.

This works because xori X, 1 is equivalent to 1 - X if X is either
0 or 1. So we're doing -(1 - X) which is X-1 or X+-1.

This improves the code for selecting between 0 and -1 based on a
condition for some conditions.

Reviewed By: asb

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

2 years agoRerun ./utils/update_cc_test.py on a bunch of tests
Nicolai Hähnle [Mon, 18 Jul 2022 16:46:58 +0000 (18:46 +0200)]
Rerun ./utils/update_cc_test.py on a bunch of tests

Due to update script changes; this reduces the size of a later "real"
diff.

2 years ago[LinkerWrapper] Rework passing args to the LLVM backend
Joseph Huber [Mon, 18 Jul 2022 16:43:50 +0000 (12:43 -0400)]
[LinkerWrapper] Rework passing args to the LLVM backend

2 years ago[Tooling/DependencyScanning] Enable passing a `vfs::FileSystem` object to `Dependency...
Argyrios Kyrtzidis [Sat, 16 Jul 2022 00:31:49 +0000 (17:31 -0700)]
[Tooling/DependencyScanning] Enable passing a `vfs::FileSystem` object to `DependencyScanningTool`

Also include a unit test to validate that the `vfs::FileSystem` object is properly used.

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

2 years ago[IR] Allow absence for Min module flags and make AArch64 BTI/PAC-RET flags backward...
Fangrui Song [Mon, 18 Jul 2022 16:35:11 +0000 (09:35 -0700)]
[IR] Allow absence for Min module flags and make AArch64 BTI/PAC-RET flags backward compatible

D123493 introduced llvm::Module::Min to encode module flags metadata for AArch64
BTI/PAC-RET. llvm::Module::Min does not take effect when the flag is absent in
one module. This behavior is misleading and does not address backward
compatibility problems (when a bitcode with "branch-target-enforcement"==1 and
another without the flag are merged, the merge result is 1 instead of 0).

To address the problems, require Min flags to be non-negative and treat absence
as having a value of zero. For an old bitcode without
"branch-target-enforcement"/"sign-return-address", its value is as if 0.

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

2 years ago[MLIR][Presburger] Provide functions to convert between arrays of MPInt and int64_t
Arjun P [Mon, 18 Jul 2022 16:34:40 +0000 (17:34 +0100)]
[MLIR][Presburger] Provide functions to convert between arrays of MPInt and int64_t

Reviewed By: Groverkss

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

2 years ago[MLIR][Presburger] SlowMPInt: fix bug in ceilDiv, floorDiv where widths weren't harmo...
Arjun P [Mon, 18 Jul 2022 16:33:24 +0000 (17:33 +0100)]
[MLIR][Presburger] SlowMPInt: fix bug in ceilDiv, floorDiv where widths weren't harmonized

This also adds tests for abs, ceilDiv, floorDiv, mod, gcd and lcm.

Reviewed By: Groverkss

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

2 years ago[mlir][sparse] migrate sparse rewriting to sparse transformations pass
Aart Bik [Fri, 15 Jul 2022 23:41:02 +0000 (16:41 -0700)]
[mlir][sparse] migrate sparse rewriting to sparse transformations pass

The rules in the linalg file were very specific to sparse tensors so will
find a better home under sparse tensor dialect than linalg dialect. Also
moved some rewriting from sparsification into this new "pre-rewriting" file.

Reviewed By: springerm

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

2 years ago[SDAG] Remove single-result restriction on commutative CSE
Itay Bookstein [Wed, 13 Jul 2022 17:29:48 +0000 (20:29 +0300)]
[SDAG] Remove single-result restriction on commutative CSE

The DAG Combiner unnecessarily restricts commutative CSE
to nodes with a single result value. This commit removes
that restriction.

Signed-off-by: Itay Bookstein <ibookstein@gmail.com>
Reviewed By: RKSimon

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

2 years ago[RISCV] Fold stack reload into sext.w by using lw instead of ld.
Craig Topper [Mon, 18 Jul 2022 16:05:41 +0000 (09:05 -0700)]
[RISCV] Fold stack reload into sext.w by using lw instead of ld.

We can use lw to load 4 bytes from the stack and sign extend them
instead of loading all 8 bytes.

Reviewed By: asb

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

2 years agoRevert "[NVPTX] Use the mask() operator to initialize packed structs with pointers"
Igor Kudrin [Mon, 18 Jul 2022 16:08:15 +0000 (20:08 +0400)]
Revert "[NVPTX] Use the mask() operator to initialize packed structs with pointers"

The new test fails on BE hosts.

This reverts commit 04e978ccba1e6c8b600b2fbad1a82b4b64ffc34b.

2 years ago[mlir][spirv] Allow unnamed entry point functions
Alexander Batashev [Mon, 18 Jul 2022 15:56:34 +0000 (11:56 -0400)]
[mlir][spirv] Allow unnamed entry point functions

SPIR-V specification does not require a function to have a name
if it is an entry point. Adjust deserializer to allow those kinds
of SPIR-V binaries.

Reviewed By: antiagainst

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

2 years ago[MLIR] Generic 'malloc', 'aligned_alloc' and 'free' functions
Michele Scuttari [Mon, 18 Jul 2022 15:47:18 +0000 (17:47 +0200)]
[MLIR] Generic 'malloc', 'aligned_alloc' and 'free' functions

When converted to the LLVM dialect, the memref.alloc and memref.free operations were generating calls to hardcoded 'malloc' and 'free' functions. This didn't leave any freedom to users to provide their custom implementation. Those operations now convert into calls to '_mlir_alloc' and '_mlir_free' functions, which have also been implemented into the runtime support library as wrappers to 'malloc' and 'free'. The same has been done for the 'aligned_alloc' function.

Reviewed By: ftynse

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

2 years agoRevert "Inliner: don't mark call sites as 'nounwind' if that would be redundant"
Nicolai Hähnle [Mon, 18 Jul 2022 15:43:35 +0000 (17:43 +0200)]
Revert "Inliner: don't mark call sites as 'nounwind' if that would be redundant"

This reverts commit 9905c379819fafdc2246bcd24dd7165bd72d7659.

Looks like there are Clang changes that are affected in trivial ways. Will look into it.

2 years agoInliner: don't mark call sites as 'nounwind' if that would be redundant
Nicolai Hähnle [Fri, 15 Jul 2022 13:27:26 +0000 (15:27 +0200)]
Inliner: don't mark call sites as 'nounwind' if that would be redundant

When F calls G calls H, G is nounwind, and G is inlined into F, then the
inlined call-site to H should be effectively nounwind so as not to lose
information during inlining.

If H itself is nounwind (which often happens when H is an intrinsic), we
no longer mark the callsite explicitly as nounwind. Previously, there
were cases where the inlined call-site of H differs from a pre-existing
call-site of H in F *only* in the explicitly added nounwind attribute,
thus preventing common subexpression elimination.

v2:
- just check CI->doesNotThrow

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

2 years ago[InstCombine] reduce code for signbit folds; NFC
Sanjay Patel [Mon, 18 Jul 2022 14:37:18 +0000 (10:37 -0400)]
[InstCombine] reduce code for signbit folds; NFC

2 years ago[VP] IR expansion pass for VP gather and scatter
Lorenzo Albano [Mon, 18 Jul 2022 06:49:19 +0000 (08:49 +0200)]
[VP] IR expansion pass for VP gather and scatter

Add vp_gather and vp_scatter expansion to unpredicated intrinsics.

Reviewed By: simoll

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

2 years agoRevert "[libc++] Always build c++experimental.a"
Hans Wennborg [Mon, 18 Jul 2022 14:34:34 +0000 (16:34 +0200)]
Revert "[libc++] Always build c++experimental.a"

This caused build failures when building Clang and libc++ together on Mac:

  fatal error: 'experimental/memory_resource' file not found

See the code review for details. Reverting until the problem and how to
solve it is better understood.

(Updates to some test files were not reverted, since they seemed
unrelated and were later updated by 340b48b267b96.)

> This is the first part of a plan to ship experimental features
> by default while guarding them behind a compiler flag to avoid
> users accidentally depending on them. Subsequent patches will
> also encompass incomplete features (such as <format> and <ranges>)
> in that categorization. Basically, the idea is that we always
> build and ship the c++experimental library, however users can't
> use what's in it unless they pass the `-funstable` flag to Clang.
>
> Note that this patch intentionally does not start guarding
> existing <experimental/FOO> content behind the flag, because
> that would merely break users that might be relying on such
> content being in the headers unconditionally. Instead, we
> should start guarding new TSes behind the flag, and get rid
> of the existing TSes we have by shipping their Standard
> counterpart.
>
> Also, this patch must jump through a few hoops like defining
> _LIBCPP_ENABLE_EXPERIMENTAL because we still support compilers
> that do not implement -funstable yet.
>
> Differential Revision: https://reviews.llvm.org/D128927

This reverts commit bb939931a1adb9a47a2de13c359d6a72aeb277c8.

2 years ago[libunwind][SystemZ] Use process_vm_readv to avoid potential segfaults
Ulrich Weigand [Mon, 18 Jul 2022 14:54:48 +0000 (16:54 +0200)]
[libunwind][SystemZ] Use process_vm_readv to avoid potential segfaults

Fix potential crashes during unwind when checking for signal frames
and the current PC is invalid.

The same bug was fixed for aarch64 in https://reviews.llvm.org/D126343.

Reviewed by: MaskRay

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

2 years ago[AIX] support read global symbol of big archive
zhijian [Mon, 18 Jul 2022 14:43:30 +0000 (10:43 -0400)]
[AIX] support read global symbol of big archive

Reviewers: James Henderson, Fangrui Song

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

2 years ago[libc] Fix API for remove_{prefix, suffix}
Jeff Bailey [Sun, 17 Jul 2022 02:41:55 +0000 (02:41 +0000)]
[libc] Fix API for remove_{prefix, suffix}

The API in StringView.h for remove_prefix was incorrect and was returning a
new StringView rather than just altering the view.

As part of this, also removed some of the safety features.  The comment
correctly noted that the behaviour is undefined in some cases,
but the code and test cases checked for that.

One caller was relying on the old behaviour, so fixed it and added some
comments.

Tested:
check-libc
llvmlibc
libc-loader-tests

Reviewed By: gchatelet

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

2 years agoDon't include private gtest/gmock headers
Benjamin Kramer [Mon, 18 Jul 2022 14:34:36 +0000 (16:34 +0200)]
Don't include private gtest/gmock headers

Only gmock.h and gtest.h are supposed to be user-visible.

2 years ago[llvm-size] Fix hang waiting for input on invalid short commandline option
gbreynoo [Mon, 18 Jul 2022 13:53:20 +0000 (14:53 +0100)]
[llvm-size] Fix hang waiting for input on invalid short commandline option

When an invalid shot command line option was used (e.g. -v) llvm-size
would hang waiting on input from stdin. This change fixes this issue by
bringing llvm-size in line with other llvm tools and exiting early when
this error is output.

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

2 years ago[llvm-ar][test] Add testing for bitcode file handling
gbreynoo [Thu, 14 Jul 2022 09:48:52 +0000 (10:48 +0100)]
[llvm-ar][test] Add testing for bitcode file handling

Recommit after revert.

This change adds testing for handling of bitcode files in archives,
particularly the creation of symbol tables and through MRI scripts.
Although there is some testing of bitcode handling in the archive
library testing, this was not covered.

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

2 years ago[mlir] Fix Bazel for 5e83a5b4752da6631d79c446f21e5d128b5c5495
Alex Zinenko [Mon, 18 Jul 2022 13:35:23 +0000 (15:35 +0200)]
[mlir] Fix Bazel for 5e83a5b4752da6631d79c446f21e5d128b5c5495

Export the __init__.py from _mlir_libs.

2 years ago[LoopSimplifyCFG] Revert accidental change
Nikita Popov [Mon, 18 Jul 2022 13:30:13 +0000 (15:30 +0200)]
[LoopSimplifyCFG] Revert accidental change

This change was included in an unrelated change
b57d61384c9938e3dfa54b55bf8b2a0a05e67e28
and was of course not intended for commit...

2 years ago[ConstantRangeTest] Migrate known bits test to generic infrastructure (NFC)
Nikita Popov [Mon, 18 Jul 2022 13:18:47 +0000 (15:18 +0200)]
[ConstantRangeTest] Migrate known bits test to generic infrastructure (NFC)

This can't make use of TestBinaryOpExhaustive, but it can make use
of the general TestRange approach that collects the precise elements
in a bit vector.

This allows us to remove the obsolete "op range gatherer" infrastructure.

2 years ago[libcxx] Fix copy and pasto that broke the build on Android/Fuchsia
Brad Smith [Mon, 18 Jul 2022 13:14:08 +0000 (09:14 -0400)]
[libcxx] Fix copy and pasto that broke the build on Android/Fuchsia

Reviewed by: Mordante, phosek

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

2 years ago[ConstantRangeTest] Move nowrap binop tests to generic infrastructure (NFC)
Nikita Popov [Mon, 18 Jul 2022 13:13:12 +0000 (15:13 +0200)]
[ConstantRangeTest] Move nowrap binop tests to generic infrastructure (NFC)

Move testing for add/sub with nowrap flags to TestBinaryOpExhaustive,
rather than separate homegrown exhaustive testing functions.

2 years ago[AMDGPU][MC][GFX11] AsmParser for op_sel for VOP3 dpp opcodes
Petar Avramovic [Mon, 18 Jul 2022 12:48:14 +0000 (14:48 +0200)]
[AMDGPU][MC][GFX11] AsmParser for op_sel for VOP3 dpp opcodes

Parse op_sel for *_e64_dpp VOP3 opcodes.
Depends on D129637 and setting of VOP3_OPSEL in dpp pseudos.

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

2 years ago[clangd] Use empty string to represent None semantics in FoldingRange::kind
Kadir Cetinkaya [Mon, 18 Jul 2022 12:43:42 +0000 (14:43 +0200)]
[clangd] Use empty string to represent None semantics in FoldingRange::kind

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

2 years ago[LoopVectorize][NFC] Split reductions out from sve-tail-folding into new file
David Sherwood [Thu, 14 Jul 2022 11:11:22 +0000 (12:11 +0100)]
[LoopVectorize][NFC] Split reductions out from sve-tail-folding into new file

In sve-tail-folding-reductions.ll I've also added an extra RUN line
to test normal reductions, i.e. not in-loop. This patch is a pre-commit
in preparation for a follow-on patch that changes how reduction selects
are generated in the vector loop.

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

2 years ago[gn build] Port 4b03ad650645
LLVM GN Syncbot [Mon, 18 Jul 2022 12:40:10 +0000 (12:40 +0000)]
[gn build] Port 4b03ad650645

2 years ago[clang] Emit SARIF Diagnostics: Create `clang::SarifDocumentWriter` interface
Vaibhav Yenamandra [Mon, 18 Jul 2022 12:36:54 +0000 (08:36 -0400)]
[clang] Emit SARIF Diagnostics: Create `clang::SarifDocumentWriter` interface

[clang] Emit SARIF Diagnostics: Create clang::SarifDocumentWriter interface

Create an interface for writing SARIF documents from within clang:

The primary intent of this change is to introduce the interface
clang::SarifDocumentWriter, which allows incrementally adding
diagnostic data to a JSON backed document. The proposed interface is
not yet connected to the compiler internals, which will be covered in
future work. As such this change will not change the input/output
interface of clang.

This change also introduces the clang::FullSourceRange type that is
modeled after clang::SourceRange + clang::FullSourceLoc, this is useful
for packaging a pair of clang::SourceLocation objects with their
corresponding SourceManagers.

Previous discussions:

RFC for this change: https://lists.llvm.org/pipermail/cfe-dev/2021-March/067907.html
https://lists.llvm.org/pipermail/cfe-dev/2021-July/068480.html
SARIF Standard (2.1.0):

https://docs.oasis-open.org/sarif/sarif/v2.1.0/os/sarif-v2.1.0-os.html

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

2 years ago[AArch64][NFC] Simplify loop vectoriser tail-folding tests
David Sherwood [Fri, 15 Jul 2022 09:54:57 +0000 (10:54 +0100)]
[AArch64][NFC] Simplify loop vectoriser tail-folding tests

I've simplified all of the SVE vectoriser tail-folding tests to
only care about testing the flag:

  -prefer-predicate-over-epiloge=predicate-else-scalar-epilogue

In practice we always want to fall back on unpredicated vector
loops if tail-folding is not possible.

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

2 years ago[AArch64] isDesirableToCommuteWithShift - add explicit ShiftLHS variable instead...
Simon Pilgrim [Mon, 18 Jul 2022 12:28:07 +0000 (13:28 +0100)]
[AArch64] isDesirableToCommuteWithShift - add explicit ShiftLHS variable instead of altering a incoming argument variable

As discussed on D129995, altering the 'N' variable to point to shift's source value was confusing.

2 years ago[DAG] Add asserts to isDesirableToCommuteWithShift overrides to ensure its being...
Simon Pilgrim [Mon, 18 Jul 2022 12:11:14 +0000 (13:11 +0100)]
[DAG] Add asserts to isDesirableToCommuteWithShift overrides to ensure its being called from a shift. NFC.

2 years ago[DAG] Fix typo in isDesirableToCommuteWithShift description. NFC.
Simon Pilgrim [Mon, 18 Jul 2022 12:10:22 +0000 (13:10 +0100)]
[DAG] Fix typo in isDesirableToCommuteWithShift description. NFC.

2 years ago[DAG] Add missing asserts to shouldFoldConstantShiftPairToMask overrides to ensure...
Simon Pilgrim [Mon, 18 Jul 2022 11:25:43 +0000 (12:25 +0100)]
[DAG] Add missing asserts to shouldFoldConstantShiftPairToMask overrides to ensure a shl/srl pair is used. NFC.

2 years ago[SDAG] Fix release build
Nikita Popov [Mon, 18 Jul 2022 12:10:02 +0000 (14:10 +0200)]
[SDAG] Fix release build

This variable was only declared in debug builds, but is needed
in release builds as well.

2 years ago[gn build] (manually) port 70914aa63156
Nico Weber [Mon, 18 Jul 2022 12:06:52 +0000 (08:06 -0400)]
[gn build] (manually) port 70914aa63156

2 years ago[LAA] Fix the build with older versions of Clang
Benjamin Kramer [Mon, 18 Jul 2022 12:01:47 +0000 (14:01 +0200)]
[LAA] Fix the build with older versions of Clang

llvm/lib/Analysis/LoopAccessAnalysis.cpp:916:12: error: no viable conversion from returned value of type 'SmallVector<[...], 2>' to function return type 'SmallVector<[...], (default)
      CalculateSmallVectorDefaultInlinedElements<T>::value aka 3>'
    return Scevs;
           ^~~~~

2 years ago[X86][FP16] Don't crash when lowering SELECT on fp16 vectors
Benjamin Kramer [Mon, 18 Jul 2022 11:39:14 +0000 (13:39 +0200)]
[X86][FP16] Don't crash when lowering SELECT on fp16 vectors

This is a regression from f18794816270244f9942e9217b96e23a94a7f32c

2 years ago[flang] Add dump-symbols option to bbc
Valentin Clement [Mon, 18 Jul 2022 11:39:41 +0000 (13:39 +0200)]
[flang] Add dump-symbols option to bbc

Restore the `--dump-symbols` option in the `bbc`
tool.

Reviewed By: jeanPerier

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

2 years ago[pseduo] More precise on printing the error message, NFC
Haojian Wu [Mon, 18 Jul 2022 11:23:18 +0000 (13:23 +0200)]
[pseduo] More precise on printing the error message, NFC

2 years ago[CloneFunction][DebugInfo] Avoid cloning DILexicalBlocks of inlined subprograms
Kristina Bessonova [Mon, 18 Jul 2022 11:09:29 +0000 (13:09 +0200)]
[CloneFunction][DebugInfo] Avoid cloning DILexicalBlocks of inlined subprograms

If DISubpogram was not cloned (e.g. we are cloning a function that has other
functions inlined into it, and subprograms of the inlined functions are
not supposed to be cloned), it doesn't make sense to clone its DILexicalBlocks
as well. Otherwise we'll get duplicated DILexicalBlocks that may confuse
debug info emission in AsmPrinter.

I believe it also makes no sense cloning any DILocalVariables or maybe
other local entities, if their parent subprogram was not cloned, cause
they will be dangling and will not participate in futher emission.

Reviewed By: aprantl

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

2 years ago[NVPTX] Use the mask() operator to initialize packed structs with pointers
Igor Kudrin [Mon, 18 Jul 2022 11:03:55 +0000 (04:03 -0700)]
[NVPTX] Use the mask() operator to initialize packed structs with pointers

The current implementation assumes that all pointers used in the
initialization of an aggregate are aligned according to the pointer size
of the target; that might not be so if the object is packed. In that
case, an array of .u8 should be used and pointers should be decorated
with the mask() operator.

The operator was introduced in PTX ISA 7.1, so an error is issued if the
case is detected for an earlier version.

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

2 years ago[NVPTX][NFC] Simplify printing initialization of aggregates
Igor Kudrin [Mon, 18 Jul 2022 11:03:36 +0000 (04:03 -0700)]
[NVPTX][NFC] Simplify printing initialization of aggregates

This simplifies NVPTXAsmPrinter::AggBuffer and its usage.
It is also a preparation for D127504.

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

2 years ago[LAA] Add recursive IR walker for forked pointers
Graham Hunter [Thu, 16 Jun 2022 08:59:29 +0000 (09:59 +0100)]
[LAA] Add recursive IR walker for forked pointers

This builds on the previous forked pointers patch, which only accepted
a single select as the pointer to check. A recursive function to walk
through IR has been added, which searches for either a loop-invariant
or addrec SCEV.

This will only handle a single fork at present, so selects of selects
or a GEP with a select for both the base and offset will be rejected.

There is also a recursion limit with a cli option to change it.

Reviewed By: fhahn, david-arm

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

2 years ago[AMDGPU][GFX90A][DOC][NFC] Update assembler syntax description
Dmitry Preobrazhensky [Mon, 18 Jul 2022 10:56:50 +0000 (13:56 +0300)]
[AMDGPU][GFX90A][DOC][NFC] Update assembler syntax description

Update FLAT LDS syntax (see https://reviews.llvm.org/D125126).

2 years ago[AMDGPU][GFX9][DOC][NFC] Update assembler syntax description
Dmitry Preobrazhensky [Mon, 18 Jul 2022 10:38:24 +0000 (13:38 +0300)]
[AMDGPU][GFX9][DOC][NFC] Update assembler syntax description

Update FLAT LDS syntax (see https://reviews.llvm.org/D125126).

2 years ago[clang] Introduce -fstrict-flex-arrays=<n> for stricter handling of flexible arrays
serge-sans-paille [Tue, 28 Jun 2022 09:01:55 +0000 (11:01 +0200)]
[clang] Introduce -fstrict-flex-arrays=<n> for stricter handling of flexible arrays

Some code [0] consider that trailing arrays are flexible, whatever their size.
Support for these legacy code has been introduced in
f8f632498307d22e10fab0704548b270b15f1e1e but it prevents evaluation of
__builtin_object_size and __builtin_dynamic_object_size in some legit cases.

Introduce -fstrict-flex-arrays=<n> to have stricter conformance when it is
desirable.

n = 0: current behavior, any trailing array member is a flexible array. The default.
n = 1: any trailing array member of undefined, 0 or 1 size is a flexible array member
n = 2: any trailing array member of undefined or 0 size is a flexible array member

This takes into account two specificities of clang: array bounds as macro id
disqualify FAM, as well as non standard layout.

Similar patch for gcc discuss here: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101836

[0] https://docs.freebsd.org/en/books/developers-handbook/sockets/#sockets-essential-functions

2 years ago[AMDGPU][CodeGen] Support (register + immediate) SMRD offsets.
Ivan Kosarev [Mon, 18 Jul 2022 10:23:18 +0000 (11:23 +0100)]
[AMDGPU][CodeGen] Support (register + immediate) SMRD offsets.

Reviewed By: arsenm

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

2 years ago[BasicBlockUtils] Don't drop callbr with unique successor
Nikita Popov [Mon, 18 Jul 2022 10:25:26 +0000 (12:25 +0200)]
[BasicBlockUtils] Don't drop callbr with unique successor

As callbr is now allowed to have duplicate destinations, we can
have a callbr with a unique successor. Make sure it doesn't get
dropped, as we still need to preserve the side-effect.

2 years ago[AMDGPU][CodeGen] Match SMRDs with constant bases and register offsets.
Ivan Kosarev [Mon, 18 Jul 2022 10:02:48 +0000 (11:02 +0100)]
[AMDGPU][CodeGen] Match SMRDs with constant bases and register offsets.

Saves some add instructions on a couple Rage 2 shaders and is also a
prerequisite for a coming-soon change matching (register + immediate)
offsets.

Reviewed By: foad, arsenm

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

2 years agoRevert "[libcxx] Temporarily skip Arm configs"
David Spickett [Mon, 18 Jul 2022 08:23:03 +0000 (08:23 +0000)]
Revert "[libcxx] Temporarily skip Arm configs"

This reverts commit 81bffdf6a5d03c58440227eeecdd6fd1642c8eb8,
the machine is back online.

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

2 years ago[InstCombine] Clarify invoke/callbr handling in constexpr call fold (NFCI)
Nikita Popov [Mon, 18 Jul 2022 10:01:12 +0000 (12:01 +0200)]
[InstCombine] Clarify invoke/callbr handling in constexpr call fold (NFCI)

We only need to check the block for the normal/default destination,
not for other destinations. Using the value in those would be
illegal anyway.

The callbr case cannot actually happen here, because callbr is
currently limited to inline asm. Retaining it to match the spirit
of the original code.

2 years ago[SimpleLoopUnswitch] Regenerate test checks (NFC)
Nikita Popov [Mon, 18 Jul 2022 09:40:44 +0000 (11:40 +0200)]
[SimpleLoopUnswitch] Regenerate test checks (NFC)

2 years agoUse pseudo parser for folding ranges
Utkarsh Saxena [Wed, 13 Jul 2022 15:06:15 +0000 (17:06 +0200)]
Use pseudo parser for folding ranges

This first version only uses bracket matching. We plan to extend this to
use DirectiveTree as well.

Also includes changes to Token to allow retrieving corresponding token
in token stream of original source file.

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

2 years ago[Verifier] Make Verifier recognize undef tokens as correct IR
Max Kazantsev [Mon, 18 Jul 2022 09:13:58 +0000 (16:13 +0700)]
[Verifier] Make Verifier recognize undef tokens as correct IR

Undef tokens may appear in unreached code as result of RAUW of some optimization,
and it should not be considered as bad IR.

Patch by Dmitry Bakunevich!

Differential Revision: https://reviews.llvm.org/D128904
Reviewed By: mkazantsev

2 years ago[PowerPC] Add an ISEL pattern for i32 MULLI.
esmeyi [Mon, 18 Jul 2022 08:40:51 +0000 (04:40 -0400)]
[PowerPC] Add an ISEL pattern for i32 MULLI.

We add the following ISEL pattern for i64 imm in D87384, this patch is for i32.
`mul with (2^N * int16_imm) -> MULLI + RLWINM`

Reviewed By: shchenz

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

2 years ago[LoopUnroll] Regenerate test checks (NFC)
Nikita Popov [Mon, 18 Jul 2022 08:37:07 +0000 (10:37 +0200)]
[LoopUnroll] Regenerate test checks (NFC)

2 years ago[LV] Use PHI recipe instead of PredRecipe for subsequent uses.
Florian Hahn [Mon, 18 Jul 2022 08:35:34 +0000 (09:35 +0100)]
[LV] Use PHI recipe instead of PredRecipe for subsequent uses.

At the moment, the VPPRedInstPHIRecipe is not used in subsequent uses of
the predicate recipe. This incorrectly models the def-use chains, as all
later uses should use the phi recipe. Fix that by delaying recording of
the recipe.

Reviewed By: Ayal

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

2 years ago[pseudo] Add bracket recovery for function parameters.
Haojian Wu [Mon, 18 Jul 2022 07:56:54 +0000 (09:56 +0200)]
[pseudo] Add bracket recovery for function parameters.

2 years ago[C++20] [Modules] Handle reachability for deduction guide
Chuanqi Xu [Mon, 18 Jul 2022 07:41:43 +0000 (15:41 +0800)]
[C++20] [Modules] Handle reachability for deduction guide

Previously, we forget to handle reachability for deduction guide.
The deduction guide is a hint to the compiler. And the deduction guide
should be able to use if the corresponding template decl is reachable.

2 years ago[IR] Don't treat callbr as indirect terminator
Nikita Popov [Fri, 15 Jul 2022 11:23:54 +0000 (13:23 +0200)]
[IR] Don't treat callbr as indirect terminator

Callbr is no longer an indirect terminator in the sense that is
relevant here (that it's successors cannot be updated). The primary
effect of this change is that callbr no longer prevents formation
of loop simplify form.

I decided to drop the isIndirectTerminator() method entirely and
replace it with isa<IndirectBrInst>() checks. I assume this method
was added to abstract over indirectbr and callbr, but it never
really caught on, and there is nothing left to abstract anymore
at this point.

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

2 years ago[flang][openacc] Use TableGen to generate the clause parser
Valentin Clement [Mon, 18 Jul 2022 07:23:05 +0000 (09:23 +0200)]
[flang][openacc] Use TableGen to generate the clause parser

This patch introduce an automatic generation of the clause parser from the TableGen
information.

New information can be stored directly in the TableGen file:
- The different aliases that a clause support.
- prefix before a value.
- whether a prefix is optional or not.

Makes it easier to add new clauses and also avoid some error (`write` clause incorrect until now).

This patch is updating only the OpenACC part. A patch with a modification of the OpenMP clause parser will follow.

Reviewed By: kiranchandramohan

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

2 years ago[obj2yaml] Refactor command line parsing
Fangrui Song [Mon, 18 Jul 2022 07:13:55 +0000 (00:13 -0700)]
[obj2yaml] Refactor command line parsing

Similar to D73982 for yaml2obj.

* Hide unrelated options.
* Add an OVERVIEW: message.
* Disallow single-dash long options.

Reviewed By: jhenderson

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

2 years ago[VP] Implementing expansion pass for VP load and store.
Lorenzo Albano [Thu, 14 Jul 2022 14:15:48 +0000 (16:15 +0200)]
[VP] Implementing expansion pass for VP load and store.

Added function to the ExpandVectorPredication pass to handle VP loads
and stores.

Reviewed By: simoll

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

2 years ago[CodeGen] Remove unnecessary APInt copy. NFC
Craig Topper [Mon, 18 Jul 2022 06:41:32 +0000 (23:41 -0700)]
[CodeGen] Remove unnecessary APInt copy. NFC

2 years ago[Support][CodeGen] Fix spelling Divison->Division. NFC
Craig Topper [Mon, 18 Jul 2022 05:56:57 +0000 (22:56 -0700)]
[Support][CodeGen] Fix spelling Divison->Division. NFC

2 years ago[CodeGen] Don't compare bool with integer 0. NFC
Craig Topper [Mon, 18 Jul 2022 05:45:05 +0000 (22:45 -0700)]
[CodeGen] Don't compare bool with integer 0. NFC

The IsAdd field is a bool.