platform/upstream/llvm.git
2 years ago[mlir][pdl] Make `pdl` the default dialect when parsing/printing
Mogball [Thu, 20 Jan 2022 20:17:40 +0000 (20:17 +0000)]
[mlir][pdl] Make `pdl` the default dialect when parsing/printing

PDLDialect being a somewhat user-facing dialect and whose ops contain exclusively other PDL ops in their regions can take advantage of `OpAsmOpInterface` to provide nicer IR.

Reviewed By: rriddle

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

2 years ago[mlir][pdl] OperationOp should not be side-effect free
Mogball [Thu, 20 Jan 2022 20:17:26 +0000 (20:17 +0000)]
[mlir][pdl] OperationOp should not be side-effect free

Unbound OperationOp in the matcher (i.e. one with no uses) is already disallowed by the verifier. However, an OperationOp in the rewriter is not side-effect free -- it's creating an op!

Reviewed By: rriddle

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

2 years ago[mlir][pdl] Some ops are missing `NoSideEffect`
Mogball [Thu, 20 Jan 2022 20:17:14 +0000 (20:17 +0000)]
[mlir][pdl] Some ops are missing `NoSideEffect`

Querying or building constraints on types, operands, results, and attributes are side-effect free in both the matcher and rewriter. The ops should be marked as such.

Reviewed By: rriddle

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

2 years ago[libcxx][test] view_interface need not derive from view_base
Casey Carter [Wed, 29 Dec 2021 23:58:25 +0000 (15:58 -0800)]
[libcxx][test] view_interface need not derive from view_base

... after LWG-3549.

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

2 years ago[lld][macho] Stop grouping symbols by sections in mapfile.
Roger Kim [Thu, 20 Jan 2022 20:13:04 +0000 (12:13 -0800)]
[lld][macho] Stop grouping symbols by sections in mapfile.

As per [Bug 50689](https://bugs.llvm.org/show_bug.cgi?id=50689),

```
2. getSectionSyms() puts all the symbols into a map of section -> symbols, but this seems unnecessary. This was likely copied from the ELF port, which prints a section header before the list of symbols it contains. But the Mach-O map file doesn't print these headers.
```

This diff removes `getSectionSyms()` and keeps all symbols in a flat vector.

What does ld64's mapfile look like?
```
$ llvm-mc -filetype=obj -triple=x86_64-apple-darwin test.s -o test.o
$ llvm-mc -filetype=obj -triple=x86_64-apple-darwin foo.s -o foo.o
$ ld -map map test.o foo.o -o out -L/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/lib -lSystem
```

```
[  0] linker synthesized
[  1] test.o
[  2] foo.o
0x100003FB7     0x00000001      __TEXT  __text
0x100003FB8     0x00000000      __TEXT  obj
0x100003FB8     0x00000048      __TEXT  __unwind_info
0x100004000     0x00000001      __DATA  __common
0x100003FB7     0x00000001      [  1] _main
0x100003FB8     0x00000000      [  2] _foo
0x100003FB8     0x00000048      [  0] compact unwind info
0x100004000     0x00000001      [  1] _number
```

Perf numbers when linking chromium framework on a 16-Core Intel Xeon W Mac Pro:
```
base           diff           difference (95% CI)
sys_time   1.406 ± 0.020  1.388 ± 0.019  [  -1.9% ..   -0.6%]
user_time  5.557 ± 0.023  5.914 ± 0.020  [  +6.2% ..   +6.6%]
wall_time  4.455 ± 0.041  4.436 ± 0.035  [  -0.8% ..   -0.0%]
samples    35             35
```

Reviewed By: #lld-macho, int3

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

2 years ago[clang-format] Refactor: add FormatToken::hasWhitespaceBefore(). NFC.
Marek Kurdej [Thu, 20 Jan 2022 20:05:54 +0000 (21:05 +0100)]
[clang-format] Refactor: add FormatToken::hasWhitespaceBefore(). NFC.

This factors out a pattern that comes up from time to time.

Reviewed By: MyDeveloperDay, HazardyKnusperkeks, owenpan

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

2 years ago[SLP] Rename a couple lambdas to be more clearly separate from method names
Philip Reames [Thu, 20 Jan 2022 20:13:22 +0000 (12:13 -0800)]
[SLP] Rename a couple lambdas to be more clearly separate from method names

2 years ago[gn build] Port 83d59e05b201
LLVM GN Syncbot [Thu, 20 Jan 2022 20:02:50 +0000 (20:02 +0000)]
[gn build] Port 83d59e05b201

2 years ago[gn build] Port 63a991d03589
LLVM GN Syncbot [Thu, 20 Jan 2022 20:02:49 +0000 (20:02 +0000)]
[gn build] Port 63a991d03589

2 years ago[llvm] Remove an old bot cleanup command
Nico Weber [Thu, 20 Jan 2022 20:02:35 +0000 (15:02 -0500)]
[llvm] Remove an old bot cleanup command

2 years agoclang: Auto-cleanup left-over file from before 3da69fb5a26c7b on bots
Nico Weber [Thu, 20 Jan 2022 19:59:30 +0000 (14:59 -0500)]
clang: Auto-cleanup left-over file from before 3da69fb5a26c7b on bots

2 years ago[libc] Use get_round() instead of floating point tricks in generic hypot implementation.
Tue Ly [Thu, 20 Jan 2022 19:43:09 +0000 (14:43 -0500)]
[libc] Use get_round() instead of floating point tricks in generic hypot implementation.

The floating point tricks used to get rounding mode require -frounding-math flag, which behaves differently on aarch64.  Reverting back to use get_round instead.

Reviewed By: sivachandra

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

2 years agoRe-land [LLD] Remove global state in lldCommon
Alexandre Ganea [Thu, 20 Jan 2022 19:53:18 +0000 (14:53 -0500)]
Re-land [LLD] Remove global state in lldCommon

Move all variables at file-scope or function-static-scope into a hosting structure (lld::CommonLinkerContext) that lives at lldMain()-scope. Drivers will inherit from this structure and add their own global state, in the same way as for the existing COFFLinkerContext.

See discussion in https://lists.llvm.org/pipermail/llvm-dev/2021-June/151184.html

The previous land f860fe362282ed69b9d4503a20e5d20b9a041189 caused issues in https://lab.llvm.org/buildbot/#/builders/123/builds/8383, fixed by 22ee510dac9440a74b2e5b3fe3ff13ccdbf55af3.

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

2 years ago[lldb] Surround LLDB_API-defining code with #ifndef LLDB_API
Pavel Labath [Thu, 20 Jan 2022 19:36:14 +0000 (20:36 +0100)]
[lldb] Surround LLDB_API-defining code with #ifndef LLDB_API

This enables power-users to annotate lldb api functions with arbitrary
attributes. The motivation for this is being able to build liblldb as a
static library on windows (see discussion on D117564).

This should not be interpreted to mean that building liblldb is
supported in any way, but this does not cause any problems for us, and
can help users who really know what they are doing (or have no other
choice).

2 years ago[libcxx] chrono::month_weekday should not be default constructible
Casey Carter [Wed, 19 Jan 2022 06:50:15 +0000 (22:50 -0800)]
[libcxx] chrono::month_weekday should not be default constructible

It was not in P0355R7, nor has it ever been so in a working draft.

Drive-by:
* tests should test something: fix loop bounds so initial value is not >= final value
* calender type streaming tests are useless - let's remove them
* don't declare printf, especially if you don't intend to use it

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

2 years ago[demangler][NFC] Small cleanups and sync
Nathan Sidwell [Thu, 20 Jan 2022 15:40:12 +0000 (07:40 -0800)]
[demangler][NFC] Small cleanups and sync

Some precursor work to adding module demangling.

* some mismatched comment and code in the demangler

* a const fn was not marked thusly

* we use std::islower.  A direct range check is smaller code (no function call),
  and we know we're in ASCII-land and later in that same function make the same
  assumption about upper-case contiguity.  Heck, maybe just drop the switch's
  precondition and rely on the optimizer to do its thing?

* the directory is cloned in two places, which had gotten out of sync.

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

2 years ago[InstCombine] Instruction sinking: fix check for function terminating block
Roman Lebedev [Thu, 20 Jan 2022 19:41:31 +0000 (22:41 +0300)]
[InstCombine] Instruction sinking: fix check for function terminating block

Checking for specific function terminating opcodes
means we don't handle other non-hardcoded ones :)

This should probably be generalized to something
similar to the `IsBlockFollowedByDeoptOrUnreachable()`.

Reviewed By: spatel

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

2 years ago[libc++] Eliminate the `__function_like` helper.
Arthur O'Dwyer [Tue, 4 Jan 2022 01:28:00 +0000 (20:28 -0500)]
[libc++] Eliminate the `__function_like` helper.

As prefigured in the comments on D115315.
This gives us one unified style for all niebloids,
and also simplifies the modulemap.

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

2 years ago[RISCV] Add DAG combine to fold (fp_to_int_sat (ffloor X)) -> (select X == nan, 0...
Craig Topper [Thu, 20 Jan 2022 19:32:26 +0000 (11:32 -0800)]
[RISCV] Add DAG combine to fold (fp_to_int_sat (ffloor X)) -> (select X == nan, 0, (fcvt X, rdn))

Similar for ceil, trunc, round, and roundeven. This allows us to use
static rounding modes to avoid a libcall.

This is similar to D116771, but for the saturating conversions.

This optimization is done for AArch64 as isel patterns.
RISCV doesn't have instructions for ceil/floor/trunc/round/roundeven
so the operations don't stick around until isel to enable a pattern
match. Thus I've implemented a DAG combine.

I'm only handling saturating to i64 or i32. This could be extended
to other sizes in the future.

Reviewed By: asb

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

2 years ago[Support] [DebugInfo] Lazily create cache dir.
Daniel Thornburgh [Fri, 14 Jan 2022 23:10:37 +0000 (23:10 +0000)]
[Support] [DebugInfo] Lazily create cache dir.

This change defers creating Support/Caching.cpp's cache directory until
it actually writes to the cache.

This allows using Caching library in a read-only fashion. If read-only,
the cache is guaranteed not to write to disk. This keeps tools using
DebugInfod (currently llvm-symbolizer) hermetic when not configured to
perform remote lookups.

Reviewed By: phosek

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

2 years ago[clang][NFC] Small mangler cleanups
Nathan Sidwell [Thu, 20 Jan 2022 15:39:22 +0000 (07:39 -0800)]
[clang][NFC] Small mangler cleanups

In working on a module mangling problem I noticed a few cleanups to the mangler.

1) Use 'if (auto x = ...' idiom in a couple of places.

2) I noticed both 'isFileContext' and 'isNamespace || isTranslationUnit'
   synonyms. Let's use the former.

3) The control flow in the seqId mangling was misordered. Let's channel Count
   von Count. Also fix the inconsistent bracing.

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

2 years ago[AMDGPU] Regenerate remat-vop.mir. NFC.
Stanislav Mekhanoshin [Thu, 20 Jan 2022 19:05:01 +0000 (11:05 -0800)]
[AMDGPU] Regenerate remat-vop.mir. NFC.

2 years ago[Clang] Separate the 'debug-info-hotpatch' test in two parts: one for ARM and another...
Alexandre Ganea [Thu, 20 Jan 2022 18:38:32 +0000 (13:38 -0500)]
[Clang] Separate the 'debug-info-hotpatch' test in two parts: one for ARM and another for AArch64

After 5af2433e1794ebf7e58e848aa612c7912d71dc78, this shall fix: https://lab.llvm.org/buildbot/#/builders/188/builds/8400 - if not I'll revert this patch and 5af2433e1794ebf7e58e848aa612c7912d71dc78.

2 years ago[SystemZ] Remove the ManipulatesSP flag from backend (NFC).
Jonas Paulsson [Tue, 18 Jan 2022 23:40:26 +0000 (17:40 -0600)]
[SystemZ] Remove the ManipulatesSP flag from backend (NFC).

This flag was set in the presence of stacksave/stackrestore in order to force
a frame pointer.

This should however not be needed per the comment in MachineFrameInfo.h
stating that a a variable sized object "...is the sole condition which
prevents frame pointer elimination", and experiments have also shown that
there seems to be no effect whatsoever on code generation with ManipulatesSP.

Review: Ulrich Weigand

2 years ago[cmake] Make include(GNUInstallDirs) always below project(..)
John Ericson [Wed, 19 Jan 2022 06:45:07 +0000 (06:45 +0000)]
[cmake] Make include(GNUInstallDirs) always below project(..)

Its defaulting logic must go after `project(..)` to work correctly,  but `project(..)` is often in a standalone condition making this
awkward, since the rest of the condition code may also need GNUInstallDirs.

The good thing is there are the various standalone booleans, which I had missed before. This makes splitting the conditional blocks less awkward.

Reviewed By: arichardson, phosek, beanz, ldionne, #libunwind, #libc, #libc_abi

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

2 years ago[clang] Improve -Wdeclaration-after-statement
Marco Elver [Thu, 20 Jan 2022 18:36:16 +0000 (19:36 +0100)]
[clang] Improve -Wdeclaration-after-statement

With 118f966b46cf, Clang matches GCC's behaviour and allows enabling
-Wdeclaration-after-statement with C99 and later.

However, the check for mixing declarations and code is not a constant time
algorithm, and therefore should be guarded with Diags.isIgnored().

Furthermore, improve test coverage with: non-pedantic C89 with the
warning; C11 with the warning; and when using -Wall.

Finally, mention the changed behaviour in ReleaseNotes.rst.

Reviewed By: aaron.ballman

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

2 years ago[InstCombine] add one-use check to opposite shift folds
Sanjay Patel [Thu, 20 Jan 2022 18:35:58 +0000 (13:35 -0500)]
[InstCombine] add one-use check to opposite shift folds

Test comments say this might be intentional, but I don't
see any hard evidence to support it. The extra instruction
shows up as a potential regression in D117680.

One test does show a missed fold that might be recovered
with better demanded bits analysis.

2 years ago[InstCombine] avoid 'tmp' usage in test files; NFC
Sanjay Patel [Thu, 20 Jan 2022 17:29:12 +0000 (12:29 -0500)]
[InstCombine] avoid 'tmp' usage in test files; NFC

The update script ( utils/update_test_checks.py ) warns against this
because it can conflict with the default FileCheck names given to
anonymous values in the IR.

2 years ago[NFC][RISCV] Add end-of-line symbol in target-feature testcases
eopXD [Thu, 20 Jan 2022 18:36:23 +0000 (10:36 -0800)]
[NFC][RISCV] Add end-of-line symbol in target-feature testcases

Reviewed By: craig.topper

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

2 years ago[TargetLowering][InstCombine] Simplify BSwap demanded bits code a little. NFC
Craig Topper [Thu, 20 Jan 2022 18:36:21 +0000 (10:36 -0800)]
[TargetLowering][InstCombine] Simplify BSwap demanded bits code a little. NFC

Use alignDown instead of &= ~7.

Replace ResultBit with NLZ. (BitWidth - NLZ - NTZ == 8) so
(BitWidth - NTZ - 8 == NLZ).

Reviewed By: spatel

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

2 years ago[NFC][InstCombine] Add test showing failure to sink into `resume` block
Roman Lebedev [Thu, 20 Jan 2022 18:37:26 +0000 (21:37 +0300)]
[NFC][InstCombine] Add test showing failure to sink into `resume` block

2 years agoAdd `isConsteval` matcher
Evgeny Shulgin [Thu, 20 Jan 2022 18:34:28 +0000 (13:34 -0500)]
Add `isConsteval` matcher

Support C++20 consteval functions and C++2b if consteval for AST Matchers.

2 years ago[libc] Implement correct rounding with all rounding modes for hypot functions.
Tue Ly [Tue, 18 Jan 2022 18:46:18 +0000 (13:46 -0500)]
[libc] Implement correct rounding with all rounding modes for hypot functions.

Update the rounding logic for generic hypot function so that it will round correctly with all rounding modes.

Reviewed By: sivachandra, zimmermann6

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

2 years ago[OpenMP] Don't pass empty files to nvlink
Joseph Huber [Thu, 20 Jan 2022 13:29:16 +0000 (08:29 -0500)]
[OpenMP] Don't pass empty files to nvlink

This patch adds and exception to the nvlink wrapper tool to not pass
empty cubin files to the nvlink job. If an empty file is passed to
nvlink it will cause an error indicating that the file could not be
opened. This would occur if the user tried to link object files that
contained offloading code with a file that didnt. This will act as a
workaround until the new OpenMP offloading driver becomes the default.

Reviewed By: jdoerfert

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

2 years ago[mlir][vector] Allow values outside of [0; dim-size] in create_mask
Sergei Grechanik [Thu, 20 Jan 2022 16:54:38 +0000 (08:54 -0800)]
[mlir][vector] Allow values outside of [0; dim-size] in create_mask

This commits explicitly states that negative values and values exceeding
vector dimensions are allowed in vector.create_mask (but not in
vector.constant_mask). These values are now truncated when
canonicalizing vector.create_mask to vector.constant_mask.

Reviewed By: aartbik

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

2 years ago[clang-cl] Support the /HOTPATCH flag
Alexandre Ganea [Thu, 20 Jan 2022 16:04:46 +0000 (11:04 -0500)]
[clang-cl] Support the /HOTPATCH flag

This patch adds support for the MSVC /HOTPATCH flag: https://docs.microsoft.com/sv-se/cpp/build/reference/hotpatch-create-hotpatchable-image?view=msvc-170&viewFallbackFrom=vs-2019

The flag is translated to a new -fms-hotpatch flag, which in turn adds a 'patchable-function' attribute for each function in the TU. This is then picked up by the PatchableFunction pass which would generate a TargetOpcode::PATCHABLE_OP of minsize = 2 (which means the target instruction must resolve to at least two bytes). TargetOpcode::PATCHABLE_OP is only implemented for x86/x64. When targetting ARM/ARM64, /HOTPATCH isn't required (instructions are always 2/4 bytes and suitable for hotpatching).

Additionally, when using /Z7, we generate a 'hot patchable' flag in the CodeView debug stream, in the S_COMPILE3 record. This flag is then picked up by LLD (or link.exe) and is used in conjunction with the linker /FUNCTIONPADMIN flag to generate extra space before each function, to accommodate for live patching long jumps. Please see: https://github.com/llvm/llvm-project/blob/d703b922961e0d02a5effdd4bfbb23ad50a3cc9f/lld/COFF/Writer.cpp#L1298

The outcome is that we can finally use Live++ or Recode along with clang-cl.

NOTE: It seems that MSVC cl.exe always enables /HOTPATCH on x64 by default, although if we did the same I thought we might generate sub-optimal code (if this flag was active by default). Additionally, MSVC always generates a .debug$S section and a S_COMPILE3 record, which Clang doesn't do without /Z7. Therefore, the following MSVC command-line "cl /c file.cpp" would have to be written with Clang such as "clang-cl /c file.cpp /HOTPATCH /Z7" in order to obtain the same result.

Depends on D43002, D80833 and D81301 for the full feature.

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

2 years agoAMDGPU: Fix asm in test using wrong IR type for physical register
Matt Arsenault [Wed, 19 Jan 2022 22:39:27 +0000 (17:39 -0500)]
AMDGPU: Fix asm in test using wrong IR type for physical register

2 years agoAMDGPU/GlobalISel: Try to use s_and_b64 in ptrmask selection
Matt Arsenault [Wed, 19 Jan 2022 20:20:39 +0000 (15:20 -0500)]
AMDGPU/GlobalISel: Try to use s_and_b64 in ptrmask selection

Avoids a test diff with SDAG.

2 years agoAMDGPU/GlobalISel: Regenerate test checks with -NEXT
Matt Arsenault [Wed, 19 Jan 2022 21:14:56 +0000 (16:14 -0500)]
AMDGPU/GlobalISel: Regenerate test checks with -NEXT

2 years agoAMDGPU/GlobalISel: Explicitly set -global-isel-abort in failure tests
Matt Arsenault [Wed, 19 Jan 2022 21:46:49 +0000 (16:46 -0500)]
AMDGPU/GlobalISel: Explicitly set -global-isel-abort in failure tests

If the default mode is the fallback, this would fail since it would
end up seeing the DAG failure message instead.

2 years agoadd tsan shared library
zijunzhao [Thu, 20 Jan 2022 09:30:51 +0000 (09:30 +0000)]
add tsan shared library

Add tsan shared library on Android. Only build tsan when minSdkVersion is above 23.

Reviewed By: danalbert, vitalybuka

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

2 years agoAMDGPU/GlobalISel: Directly diagnose return value use for FP atomics
Matt Arsenault [Wed, 19 Jan 2022 16:06:25 +0000 (11:06 -0500)]
AMDGPU/GlobalISel: Directly diagnose return value use for FP atomics

Emit an error if the return value is used on subtargets that do not
support them. Previously we were falling back to the DAG on selection
failure, where it would emit this error and then fail again.

2 years ago[libc++] basic_string::resize_and_overwrite: Adopt LWG3645 (Not voted in yet)
Nikolas Klauser [Thu, 20 Jan 2022 12:53:59 +0000 (13:53 +0100)]
[libc++] basic_string::resize_and_overwrite: Adopt LWG3645 (Not voted in yet)

Adopt LWG3645, which fixes the value categories of basic_string::resize_and_overwrite
https://timsong-cpp.github.io/lwg-issues/3645

Reviewed By: ldionne, #libc

Spies: libcxx-commits

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

2 years ago[NFC][SimplifyCFG] Add some tests for `invoke` merging
Roman Lebedev [Thu, 20 Jan 2022 17:31:47 +0000 (20:31 +0300)]
[NFC][SimplifyCFG] Add some tests for `invoke` merging

2 years ago[lld][WebAssemlby] Convert test to check disassembly output. NFC
Sam Clegg [Thu, 20 Jan 2022 02:41:39 +0000 (18:41 -0800)]
[lld][WebAssemlby] Convert test to check disassembly output. NFC

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

2 years agooptimize icmp-ugt-ashr
Nadav Rotem [Thu, 20 Jan 2022 17:25:45 +0000 (09:25 -0800)]
optimize icmp-ugt-ashr

This diff optimizes the sequence icmp-ugt(ashr,C_1) C_2. InstCombine
already implements this optimization for sgt, and this patch adds
support ugt. This patch adds the check for UGT.

@craig.topper came up with the idea and proof:

  define i1 @src(i8 %x, i8 %y, i8 %c) {
    %cp1 = add i8 %c, 1
    %i = shl i8 %cp1, %y
    %i.2 = ashr i8 %i, %y
    %cmp = icmp eq i8 %cp1, %i.2
    ;Assume: C + 1 == (((C + 1) << y) >> y)
    call void @llvm.assume(i1 %cmp)

    ; uncomment for the sgt case
    %j = shl i8 %cp1, %y
    %j.2 = sub i8 %j, 1
    %cmp2 = icmp ne i8 %j.2, 127
    ;Assume (((c + 1 ) << y) - 1) != 127
    call void @llvm.assume(i1 %cmp2)

    %s = ashr i8 %x, %y
    %r = icmp sgt i8 %s, %c
    ret i1 %r
  }

  define i1 @tgt(i8 %x, i8 %y, i8 %c) {
    %cp1 = add i8 %c, 1
    %j = shl i8 %cp1, %y
    %j.2 = sub i8 %j, 1

    %r = icmp sgt i8 %x, %j.2
    ret i1 %r
  }

  declare void @llvm.assume(i1)

  This change is related to the optimizations in D117252.

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

2 years ago[flang][NFC] Remove unused/duplicated kStridePosInDim
Valentin Clement [Thu, 20 Jan 2022 17:30:09 +0000 (18:30 +0100)]
[flang][NFC] Remove unused/duplicated kStridePosInDim

kStridePosInDim is a duplicate of kDimStridePos and is not used. Just
remove it.

Reviewed By: kiranchandramohan

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

2 years ago[RISCV] Add tests for commuted vector/scalar VP patterns
Fraser Cormack [Thu, 20 Jan 2022 17:07:11 +0000 (17:07 +0000)]
[RISCV] Add tests for commuted vector/scalar VP patterns

This patch adds a variety of tests checking that we can match
vector/scalar instructions against masked VP intrinsics when the splat
is on the LHS. At this stage, we can't, despite us having
ostensibly-commutable ISel patterns for them. The use of V0 as the mask
operand interferes with the auto-generated ISel table.

2 years agoAMDGPU/GlobalISel: Stop handling llvm.amdgcn.buffer.atomic.fadd
Matt Arsenault [Wed, 19 Jan 2022 15:45:37 +0000 (10:45 -0500)]
AMDGPU/GlobalISel: Stop handling llvm.amdgcn.buffer.atomic.fadd

This code is not structured to handle the legacy buffer intrinsics and
was miscompiling them.

2 years agoAMDGPU/GlobalISel: Fix selection of gfx90a FP atomics
Matt Arsenault [Wed, 19 Jan 2022 02:08:01 +0000 (21:08 -0500)]
AMDGPU/GlobalISel: Fix selection of gfx90a FP atomics

The struct/raw forms for the buffer atomics now work as
expected. However, we're incorrectly handling the legacy form (which
we probably shouldn't handle at all). We also are not diagnosing the
use of the return value on gfx908. These will be addressed separately.

2 years agoAMDGPU: Stop reserving 36-bytes before kernel arguments for amdpal
Matt Arsenault [Sun, 16 Jan 2022 00:16:03 +0000 (19:16 -0500)]
AMDGPU: Stop reserving 36-bytes before kernel arguments for amdpal

This was inheriting the mesa behavior, and as far as I know nobody is
using opencl kernels with amdpal. The isMesaKernel check was
irrelevant because this property needs to be held for all functions.

2 years ago[mips] Improve vr4300 mulmul bugfix pass
Random06457 [Thu, 20 Jan 2022 17:03:49 +0000 (20:03 +0300)]
[mips] Improve vr4300 mulmul bugfix pass

When compiling with dwarf info, the mfix4300 flag introduced in
https://reviews.llvm.org/D116238 can miss some occurrences of the vr4300
mulmul bug if a debug instruction happens to be between two `muls`
instructions. This change skips debug instructions in order to fix
the mulmul bug detection.

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

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

2 years ago[GlobalISel] Fix incorrect sign extension when combining G_INTTOPTR and G_PTR_ADD
Lucas Prates [Mon, 10 Jan 2022 10:19:27 +0000 (10:19 +0000)]
[GlobalISel] Fix incorrect sign extension when combining G_INTTOPTR and G_PTR_ADD

The GlobalISel combiner currently uses sign extension when manipulating
the LHS constant when combining a sequence of the following sequence of
machine instructions into a single constant:
```
  %0:_(s32) = G_CONSTANT i32 <CONSTANT>
  %1:_(p0) = G_INTTOPTR %0:_(s32)
  %2:_(s64) = G_CONSTANT i64 <CONSTANT>
  %3:_(p0) = G_PTR_ADD %1:_, %2:_(s64)
```

This causes an issue when the bit width of the first contant and the
target pointer size are different, as G_INTTOPTR has no sign extension
semantics.

This patch fixes this by capture an arbitrary precision in when matching
the constant, allowing the matching function to correctly zero extend
it.

Reviewed By: arsenm

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

2 years ago[FuncSpec] Add a reference, and some other clarifying comments. NFC.
Sjoerd Meijer [Thu, 20 Jan 2022 16:56:31 +0000 (16:56 +0000)]
[FuncSpec] Add a reference, and some other clarifying comments. NFC.

2 years ago{SLP] Delete dead code in favor of proper assert [NFC]
Philip Reames [Thu, 20 Jan 2022 16:53:01 +0000 (08:53 -0800)]
{SLP] Delete dead code in favor of proper assert [NFC]

2 years ago[SLP] Reduce nesting depth in calculateDependencies via for loop and early continue...
Philip Reames [Thu, 20 Jan 2022 16:46:06 +0000 (08:46 -0800)]
[SLP] Reduce nesting depth in calculateDependencies via for loop and early continue [NFC]

2 years ago[ScalableVectors] Warn instead of error for invalid size requests.
Sander de Smalen [Thu, 20 Jan 2022 15:13:32 +0000 (15:13 +0000)]
[ScalableVectors] Warn instead of error for invalid size requests.

This was intended to be fixed by D98856, but that only seemed to have
the desired behaviour when compiling to assembly using `-S`, not when
compiling into an object file or executable. Given that this was not
the intention of D98856, this patch fixes the behaviour.

2 years agoAdd missing include to fix modular build
Adrian Prantl [Thu, 20 Jan 2022 16:35:33 +0000 (08:35 -0800)]
Add missing include to fix modular build

2 years agoAdd missing include to fix modular build
Adrian Prantl [Thu, 20 Jan 2022 16:33:08 +0000 (08:33 -0800)]
Add missing include to fix modular build

2 years ago[SLP] Add an asser to make a non-obvious precondition clear [NFC]
Philip Reames [Thu, 20 Jan 2022 16:23:51 +0000 (08:23 -0800)]
[SLP] Add an asser to make a non-obvious precondition clear [NFC]

2 years ago[OpenMPIRBuilder] Detect and fix ambiguous InsertPoints for createParallel.
Michael Kruse [Thu, 20 Jan 2022 14:18:08 +0000 (08:18 -0600)]
[OpenMPIRBuilder] Detect and fix ambiguous InsertPoints for createParallel.

When a Builder methods accepts multiple InsertPoints, when both point to
the same position, inserting instructions at one position will "move" the
other after the inserted position since the InsertPoint is pegged to the
instruction following the intended InsertPoint. For instance, when
creating a parallel region at Loc and passing the same position as AllocaIP,
creating instructions at Loc will "move" the AllocIP behind the Loc
position.

To avoid this ambiguity, add an assertion checking this condition and
fix the unittests.

In case of AllocaIP, an alternative solution could be to implicitly
split BasicBlock at InsertPoint, using the first as AllocaIP, the second
for inserting the instructions themselves. However, this solution is
specific to AllocaIP since AllocaIP will always have to be first. Hence,
this is an argument to generally handling ambiguous InsertPoints as API
sage error.

Reviewed By: jdoerfert

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

2 years ago[gn build] (manually) port f29256a64a
Nico Weber [Thu, 20 Jan 2022 16:02:06 +0000 (11:02 -0500)]
[gn build] (manually) port f29256a64a

2 years ago[InstSimplify] Add test for load of non-integral pointer (NFC)
Nikita Popov [Thu, 20 Jan 2022 15:48:19 +0000 (16:48 +0100)]
[InstSimplify] Add test for load of non-integral pointer (NFC)

2 years ago[Clang][AArch64][ARM] Unaligned Access Test Fix
Mubashar Ahmad [Thu, 20 Jan 2022 15:20:57 +0000 (15:20 +0000)]
[Clang][AArch64][ARM] Unaligned Access Test Fix

Test fixed for the unaligned access warning.

2 years ago[InstSimplify] Add test for reinterpret load of pointer type (NFC)
Nikita Popov [Thu, 20 Jan 2022 15:25:22 +0000 (16:25 +0100)]
[InstSimplify] Add test for reinterpret load of pointer type (NFC)

2 years ago[X86] lowerToAddSubOrFMAddSub - lower 512-bit ADDSUB patterns to blend(fsub,fadd)
Simon Pilgrim [Thu, 20 Jan 2022 15:15:46 +0000 (15:15 +0000)]
[X86] lowerToAddSubOrFMAddSub - lower 512-bit ADDSUB patterns to blend(fsub,fadd)

AVX512 doesn't provide a ADDSUB instruction, but if we've built this from a build vector of scalar fsub/fadd elements we can still lower to blend(fsub,fadd)

2 years ago[MLGO] Improved support for AOT cross-targeting scenarios
Mircea Trofin [Thu, 20 Jan 2022 05:19:53 +0000 (21:19 -0800)]
[MLGO] Improved support for AOT cross-targeting scenarios

The tensorflow AOT compiler can cross-target, but it can't run on (for
example) arm64. We added earlier support where the AOT-ed header and object
would be built on a separate builder and then passed at build time to
a build host where the AOT compiler can't run, but clang can be otherwise
built.

To simplify such scenarios given we now support more than one AOT-able
case (regalloc and inliner), we make the AOT scenario centered on whether
files are generated, case by case (this includes the "passed from a
different builder" scenario).
This means we shouldn't need an 'umbrella' LLVM_HAVE_TF_AOT, in favor of
case by case control. A builder can opt out of an AOT case by passing that case's
model path as `none`. Note that the overrides still take precedence.

This patch controls conditional compilation with case-specific flags,
which can be enabled locally, for the component where those are
available. We still keep an overall flag for some tests.

The 'development/training' mode is unchanged, because there the model is
passed from the command line and interpreted.

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

2 years ago[DebugInstrRef] Memoize variable order during sorting (NFC)
Nikita Popov [Tue, 18 Jan 2022 16:38:08 +0000 (17:38 +0100)]
[DebugInstrRef] Memoize variable order during sorting (NFC)

Instead of constructing DebugVariables and looking up the order
in the comparison function, compute the order upfront and then sort
a vector of (order, instr).

This improves compile-time by -0.4% geomean on CTMark ReleaseLTO-g.

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

2 years ago[X86] Fix v16f32 ADDSUB test
Simon Pilgrim [Thu, 20 Jan 2022 14:58:23 +0000 (14:58 +0000)]
[X86] Fix v16f32 ADDSUB test

This was supposed to ensure we're not generating 512-bit ADDSUB nodes, but cut+paste typos meant we weren't generating a full 512-bit pattern

2 years ago[Clang][RISCV] Change TARGET_BUILTIN to require zve32x for vector instruction
eopXD [Sat, 6 Nov 2021 14:54:58 +0000 (07:54 -0700)]
[Clang][RISCV] Change TARGET_BUILTIN to require zve32x for vector instruction

According to v-spec v1.0, `zve-32x` is the new minimum extension to include
to have vector instructions.

Reviewed By: kito-cheng

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

2 years ago[llvm][vfs] Abstract in-memory node creation
Jan Svoboda [Thu, 20 Jan 2022 14:07:39 +0000 (15:07 +0100)]
[llvm][vfs] Abstract in-memory node creation

The creation of in-memory VFS nodes happens in a single function that deduces what kind of node to create from the arguments. This leads to complicated if-then-else logic that's difficult to cleanly extend.

This patch abstracts away in-memory node creation via a type-erased factory function that's passed instead.

Reviewed By: dexonsmith

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

2 years ago[llvm][vfs] NFC: Virtualize in-memory `getStatus`
Jan Svoboda [Thu, 20 Jan 2022 14:05:38 +0000 (15:05 +0100)]
[llvm][vfs] NFC: Virtualize in-memory `getStatus`

This patch virtualizes the `getStatus` function on `InMemoryNode` in LLVM VFS. Currently, this is implemented via top-level function `getNodeStatus` that tries to cast `InMemoryNode *` into each subtype. Virtual functions seem to be the simpler solution here.

Reviewed By: dexonsmith

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

2 years ago[mlir][memref] Add better support for identity layouts in memref.collapse_shape canon...
Stephan Herhut [Thu, 20 Jan 2022 13:02:04 +0000 (14:02 +0100)]
[mlir][memref] Add better support for identity layouts in memref.collapse_shape canonicalizer

When computing the new type of a collapse_shape operation, we need to at least
take into account whether the type has an identity layout, in which case we can
easily support dynamic strides. Otherwise, the canonicalizer creates invalid
IR.

Longer term, both the verifier and the canoncializer need to be extended to
support the general case.

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

2 years ago[clang][dataflow] Intersect ExprToLoc when joining environments
Stanislav Gatev [Thu, 20 Jan 2022 09:28:25 +0000 (09:28 +0000)]
[clang][dataflow] Intersect ExprToLoc when joining environments

This is part of the implementation of the dataflow analysis framework.
See "[RFC] A dataflow analysis framework for Clang AST" on cfe-dev.

Reviewed-by: xazax.hun
Differential Revision: https://reviews.llvm.org/D117754

2 years ago[flang][NFC] Remove extra braces
Valentin Clement [Thu, 20 Jan 2022 14:18:47 +0000 (15:18 +0100)]
[flang][NFC] Remove extra braces

Noticed during the upstreaming process.

2 years ago[Clang][AArch64][ARM] Unaligned Access Warning Added
Mubashar Ahmad [Thu, 23 Dec 2021 16:37:44 +0000 (16:37 +0000)]
[Clang][AArch64][ARM] Unaligned Access Warning Added

Added warning for potential cases of
unaligned access when option
-mno-unaligned-access has been specified

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

2 years ago[EarlyCSE] Regenerate test checks (NFC)
Nikita Popov [Thu, 20 Jan 2022 13:49:12 +0000 (14:49 +0100)]
[EarlyCSE] Regenerate test checks (NFC)

2 years ago[IRGen] Do not overwrite existing attributes in CGCall.
Florian Hahn [Thu, 20 Jan 2022 13:45:19 +0000 (13:45 +0000)]
[IRGen] Do not overwrite existing attributes in CGCall.

When adding new attributes, existing attributes are dropped. While
this appears to be a longstanding issue, this was highlighted by D105169
which dropped a lot of attributes due to adding the new noundef
attribute.

Ahmed Bougacha (@ab) tracked down the issue and provided the fix in
CGCall.cpp. I bundled it up and updated the tests.

2 years ago[AArch64] Remove PRBAR0_ELn and PRLAR0_ELn sysregs.
Simon Tatham [Thu, 20 Jan 2022 13:22:34 +0000 (13:22 +0000)]
[AArch64] Remove PRBAR0_ELn and PRLAR0_ELn sysregs.

The Armv8-R.64 architecture defines numbered MPU region registers with
indices 1-15, not 0-15. So there's no such register as PRBAR0_EL2 or
PRLAR0_EL1 (for example). The encodings that they would occupy are
used for the unnumbered PRBAR_ELn and PRLAR_ELn registers.

Reviewed By: labrinea

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

2 years ago[MC] Add a disassembly test for Armv8-R sysregs.
Simon Tatham [Thu, 20 Jan 2022 09:31:11 +0000 (09:31 +0000)]
[MC] Add a disassembly test for Armv8-R sysregs.

This is the counterpart to llvm/test/MC/AArch64/armv8r-sysreg.s,
checking all the same encodings when fed to the disassembler.

2 years ago[AMDGPU] Set MemoryVT for truncstores in tblgen.
Abinav Puthan Purayil [Thu, 20 Jan 2022 09:59:57 +0000 (15:29 +0530)]
[AMDGPU] Set MemoryVT for truncstores in tblgen.

GlobalISelEmitter was skipping these patterns when its predicates were
checked. This patch should allow us to select d16_hi stores in
GlobalISel.

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

2 years ago[clang-format] Indicate source location on test failure. NFC.
Marek Kurdej [Thu, 20 Jan 2022 13:03:18 +0000 (14:03 +0100)]
[clang-format] Indicate source location on test failure. NFC.

2 years ago[X86] combineConcatVectorOps - remove superfluous Subtarget.hasAVX() check
Simon Pilgrim [Thu, 20 Jan 2022 12:50:47 +0000 (12:50 +0000)]
[X86] combineConcatVectorOps - remove superfluous Subtarget.hasAVX() check

This function only ever gets called by AVX targets, and we already assert for this at the top of the function

2 years ago[X86] combineConcatVectorOps - add handling for X86ISD::VSHL/VSRL/VSRA
Simon Pilgrim [Thu, 20 Jan 2022 12:47:08 +0000 (12:47 +0000)]
[X86] combineConcatVectorOps - add handling for X86ISD::VSHL/VSRL/VSRA

These can be handled the same as the vector shift by immediate variants that are already handled.

2 years ago[AMDGPU] Regenerate some MIR checks
Jay Foad [Thu, 20 Jan 2022 12:31:12 +0000 (12:31 +0000)]
[AMDGPU] Regenerate some MIR checks

2 years ago[flang][NFC] Move current inliner files in Dialect directory
Valentin Clement [Thu, 20 Jan 2022 12:34:29 +0000 (13:34 +0100)]
[flang][NFC] Move current inliner files in Dialect directory

This patch just move the files from the Transforms directory to
the Dialect directory.

Reviewed By: jeanPerier

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

2 years ago[flang][NFC] Cleanup dependent dialects and make def homogenous
Valentin Clement [Thu, 20 Jan 2022 12:33:38 +0000 (13:33 +0100)]
[flang][NFC] Cleanup dependent dialects and make def homogenous

Remove unnecessary dependent dialect and make the definition of the
pass more homogenous with the two others.

This patch is part of the upstreaming effort from fir-dev branch.

Reviewed By: jeanPerier

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

2 years ago[RISCV] Match RVV VF variants also through masked operations
Fraser Cormack [Wed, 19 Jan 2022 17:40:33 +0000 (17:40 +0000)]
[RISCV] Match RVV VF variants also through masked operations

This brings floating-point RVV vector/scalar support more in line with
the integer vector patterns, which can already match '.vx' instructions
with masked operations.

Reviewed By: craig.topper

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

2 years agoRevert "[AArch64][SVE][VLS] Move extends into arguments of comparisons"
Peter Waller [Thu, 20 Jan 2022 12:01:23 +0000 (12:01 +0000)]
Revert "[AArch64][SVE][VLS] Move extends into arguments of comparisons"

This reverts commit db04d3e30b3878ae39ef64eb0b0a1538644c7f6a, which
causes a buildbot failure.

2 years ago[RISCV] Optimize lowering of floating-point -0.0
Fraser Cormack [Wed, 19 Jan 2022 16:17:59 +0000 (16:17 +0000)]
[RISCV] Optimize lowering of floating-point -0.0

This idea has come up in several reviews -- D115978 and D105902 -- so I
can't take any credit for the idea. Instead of using a constant pool to
lower -0.0, we can emit a sequence of two instructions:

    fmv.[hwd].x freg, zero
    fsgnjn.[hsd] freg, freg, freg

This is only done when the floating-point type is legal.

Reviewed By: craig.topper

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

2 years ago[MLIR] The return type in the `computeSingleVarRepr` function is modified to include...
Prashant Kumar [Sun, 16 Jan 2022 15:47:03 +0000 (21:17 +0530)]
[MLIR] The return type in the `computeSingleVarRepr` function is modified to include equality expressions.

Earlier `computeSingleVarRepr` was returning a pair of upper bound and
lower bound indices of the inequality contraints that can be expressed
as a floordiv of an affine function. The equality expression can also be
expressed as a floordiv but contains only one index and hence the `LocalRepr`
class is introduced to facilitate this.

Reviewed By: Groverkss

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

2 years ago[lldb] Remove non-address bits from addresses given to memory tag commands
David Spickett [Wed, 12 Jan 2022 14:55:31 +0000 (14:55 +0000)]
[lldb] Remove non-address bits from addresses given to memory tag commands

Although the memory tag commands use a memory tag manager to handle
addresses, that only removes the top byte.

That top byte is 4 bits of memory tag and 4 free bits, which is more
than it should strictly remove but that's how it is for now.

There are other non-address bit uses like pointer authentication.
To ensure the memory tag manager only has to deal with memory tags,
use the ABI plugin to remove the rest.

The tag access test has been updated to sign all the relevant pointers
and require that we're running on a system with pointer authentication
in addition to memory tagging.

The pointers will look like:
<4 bit user tag><4 bit memory tag><signature><bit virtual address>

Note that there is currently no API for reading memory tags. It will
also have to consider this when it arrives.

Reviewed By: omjavaid

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

2 years ago[lldb] Rename MemoryTagManager RemoveNonAddressBits to RemoveTagBits
David Spickett [Wed, 12 Jan 2022 13:30:25 +0000 (13:30 +0000)]
[lldb] Rename MemoryTagManager RemoveNonAddressBits to RemoveTagBits

This better describes the intent of the method. Which for AArch64
is removing the top byte which includes the memory tags.

It does not include pointer signatures, for those we need to use
the ABI plugin. The rename makes this a little more clear.

It's a bit awkward that the memory tag manager is removing the whole
top byte not just the memory tags but it's an improvement for now.

Reviewed By: omjavaid

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

2 years ago[IRBuilder] Migrate and-folding to value-based FoldAnd.
Florian Hahn [Thu, 20 Jan 2022 10:22:20 +0000 (10:22 +0000)]
[IRBuilder] Migrate and-folding to value-based FoldAnd.

Similar to the migration of or-folding to FoldOr, there are a few cases
where the fold in IRBuilder::CreateAnd triggered directly. Those have
been updated.

Reviewed By: nikic

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

2 years ago[flang][NFC] Fix header guard and comment
Valentin Clement [Thu, 20 Jan 2022 09:56:23 +0000 (10:56 +0100)]
[flang][NFC] Fix header guard and comment

2 years ago[libcxx][test] Use TEST_HAS_BUILTIN in test code
Casey Carter [Thu, 20 Jan 2022 09:46:58 +0000 (01:46 -0800)]
[libcxx][test] Use TEST_HAS_BUILTIN in test code

... rather than using `__has_builtin` directly. This both (1) allows a compiler that doesn't speak `__has_builtin` to workaround with preprocessor magic, and (2) avoids diagnostics about things that look like function like macros after `#if` but are not.

2 years ago[RISCV] Imply extensions in RISCVTargetInfo::initFeatureMap
eopXD [Sat, 6 Nov 2021 09:05:43 +0000 (02:05 -0700)]
[RISCV] Imply extensions in RISCVTargetInfo::initFeatureMap

Under ASTContext, clang only copies the features from the options with
Target->initFeatureMap, and no implications is done there. This makes
clang_cc1 fail to imply into `zve32x` for the vector extension, and test
cases will have to add ` -target-feature +experimental-zve32x` in order
to work.

This patch fixes it.

Reviewed By: kito-cheng

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

2 years ago[flang][NFC] Fix header guard
Valentin Clement [Thu, 20 Jan 2022 09:23:47 +0000 (10:23 +0100)]
[flang][NFC] Fix header guard

Fix header guard to fit other files.

Reviewed By: kiranchandramohan

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

2 years ago[mlir][bufferization] Move one-shot bufferization to Bufferization dialect
Matthias Springer [Thu, 20 Jan 2022 09:14:59 +0000 (18:14 +0900)]
[mlir][bufferization] Move one-shot bufferization to Bufferization dialect

This commit is the first step towards unifying core bufferization and One-Shot Bufferize.

This commit does not move over the implementations of BufferizableOpInterface yet. This will be done in separate commits. This change does also not move the unit tests yet. The tests will be moved together with op interface implementations and split into separate files.

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

2 years ago[llvm][AArch64] Accept armv8.8 "hbc" and "mops" in .arch_extension directive
David Spickett [Wed, 19 Jan 2022 16:56:41 +0000 (16:56 +0000)]
[llvm][AArch64] Accept armv8.8 "hbc" and "mops" in .arch_extension directive

Reviewed By: lenary

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