platform/upstream/llvm.git
2 years ago[AlwaysInliner] Emit inline remark only when successful
Ellis Hoag [Thu, 17 Mar 2022 20:00:27 +0000 (13:00 -0700)]
[AlwaysInliner] Emit inline remark only when successful

Failures in `InlineFunction()` are caught after D121722, but `emitInlinedIntoBasedOnCost()` should only be called when inlining is successful. This also removes an unnecessary call to `shouldInline()` which always returned `InlineCost::getAlways()`.

Reviewed By: kyulee, nikic

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

2 years ago[docs] Add details to MemorySSA docs.
Alina Sbirlea [Tue, 15 Mar 2022 21:16:00 +0000 (14:16 -0700)]
[docs] Add details to MemorySSA docs.

Add more details to the docs regarding optimized accesses for Uses and Defs.
Include incoming changes from https://reviews.llvm.org/D121381.

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

2 years ago[WebAssembly] Add end-to-end codegen tests for wasm_simd128.h
Thomas Lively [Thu, 17 Mar 2022 22:22:17 +0000 (15:22 -0700)]
[WebAssembly] Add end-to-end codegen tests for wasm_simd128.h

Add a test checking that each SIMD intrinsic produces the expected instruction.
Since this test spans both clang and LLVM, place it in a new
intrinsic-header-tests subdirectory of cross-project-tests.

This revives D101684 now that cross-project-tests exists. In practice, the tests
of lowering from wasm_simd128.h to LLVM IR were not as useful as this end-to-end
test.

Updates the version check of gdb in cross-project-tests/lit.cfg.py so that
unexpected version formats do not prevent the new tests from running.

Depends on D121661.

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

2 years agoAdd a cmake flag to turn `llvm_unreachable()` into builtin_trap() when assertions...
Mehdi Amini [Thu, 17 Mar 2022 22:19:33 +0000 (22:19 +0000)]
Add a cmake flag to turn `llvm_unreachable()` into builtin_trap() when assertions are disabled

Reviewed By: dexonsmith

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

2 years ago[lldb] Migrate ProcessGDBRemote to ReportWarning
Jonas Devlieghere [Thu, 17 Mar 2022 20:55:24 +0000 (13:55 -0700)]
[lldb] Migrate ProcessGDBRemote to ReportWarning

2 years ago[ObjCARC] Fix non-determinism
Kyungwoo Lee [Thu, 17 Mar 2022 22:00:29 +0000 (15:00 -0700)]
[ObjCARC] Fix non-determinism

We often failed in the assertion, non-deterministically with a large IR:
```
Assertion `notDifferentParent(LocA.Ptr, LocB.Ptr) && "BasicAliasAnalysis doesn't support interprocedural queries."
```
Looking at the comment in https://reviews.llvm.org/D87806, it appears it's actually a module pass for new PM while the legacy PM still works as a function pass.
The fix is to align the same behavior in between new PM and old PM, which initializes ObjCARCContract for each function.

Reviewed By: aeubanks

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

2 years ago[libc++] [test] Add ranges_robust_against_copying_*.pass.cpp
Nikolas Klauser [Thu, 17 Mar 2022 21:27:13 +0000 (22:27 +0100)]
[libc++] [test] Add ranges_robust_against_copying_*.pass.cpp

    This tests the same QoI issue as the existing STL Classic test,
    but for the Ranges algorithms. Also, do the same thing for all
    the algorithms that take projections.

I found a few missing algorithms and added them to the existing test, too. `std::find_first_of` currently fails; I should look at why that is (and in particular, what is it doing weird that //makes// it inconsistent with the entire rest of libc++?).

Reviewed By: ldionne, #libc

Spies: libcxx-commits

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

2 years ago[libc++] Install psutil on CI builders
Louis Dionne [Thu, 17 Mar 2022 21:32:29 +0000 (17:32 -0400)]
[libc++] Install psutil on CI builders

This will make it possible to add a timeout when running the tests.

2 years agoAMDGPU: Use the implicit kernargs for code object version 5
Changpeng Fang [Thu, 17 Mar 2022 21:12:36 +0000 (14:12 -0700)]
AMDGPU: Use the implicit kernargs for code object version 5

Summary:
  Specifically, for trap handling, for targets that do not support getDoorbellID,
we load the queue_ptr from the implicit kernarg, and move queue_ptr to s[0:1].
To get aperture bases when targets do not have aperture registers, we load
private_base or shared_base directly from the implicit kernarg. In clang, we use
implicitarg_ptr + offsets to implement __builtin_amdgcn_workgroup_size_{xyz}.

Reviewers: arsenm, sameerds, yaxunl

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

2 years ago[libc++] Add missing <cstddef> include
Louis Dionne [Thu, 17 Mar 2022 21:07:27 +0000 (17:07 -0400)]
[libc++] Add missing <cstddef> include

2 years ago[lld][WebAssembly] Fix crash accessing non-live __tls_base symbol
Sam Clegg [Thu, 17 Mar 2022 05:28:38 +0000 (22:28 -0700)]
[lld][WebAssembly] Fix crash accessing non-live __tls_base symbol

In programs that don't otherwise depend on `__tls_base` it won't
be marked as live.  However this symbol is used internally in
a couple of places do we need to mark it as live explictily in
those places.

Fixes: #54386

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

2 years ago[IndVars] Add a new test affected by 62f86d4f
Eli Friedman [Thu, 17 Mar 2022 20:48:11 +0000 (13:48 -0700)]
[IndVars] Add a new test affected by 62f86d4f

2 years ago[IROutliner] Make sure that loop debug info is stripped.
Andrew Litteken [Mon, 14 Mar 2022 04:45:29 +0000 (23:45 -0500)]
[IROutliner] Make sure that loop debug info is stripped.

As pointed out in https://github.com/llvm/llvm-project/issues/54155#issuecomment-1057465479, there was a crash when loop info was being outlined. It was not being properly stripped and adjusted, so would point to the wrong location. This uses similar logic found in the CodeExtractor to adjust the loop debug info.

Reviewer: fhahn, paquette

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

2 years ago[flang] Add array constructor lowering tests
Valentin Clement [Thu, 17 Mar 2022 20:39:19 +0000 (21:39 +0100)]
[flang] Add array constructor lowering tests

This patch adds some tests for the lowering of
array constructors.

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

Reviewed By: PeteSteinfeld

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

Co-authored-by: mleair <leairmark@gmail.com>
Co-authored-by: Jean Perier <jperier@nvidia.com>
Co-authored-by: Eric Schweitz <eschweitz@nvidia.com>
Co-authored-by: V Donaldson <vdonaldson@nvidia.com>
2 years ago[AMDGPU] New MFMA names for existing instructions
Stanislav Mekhanoshin [Tue, 15 Mar 2022 20:36:06 +0000 (13:36 -0700)]
[AMDGPU] New MFMA names for existing instructions

Old names are supported as aliases.
_1k MFMA got new opcodes.

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

2 years ago[AMDGPU] Add gfx90a and gfx940 to get_elf_mach_gfx_name.cpp
Stanislav Mekhanoshin [Wed, 2 Mar 2022 22:18:13 +0000 (14:18 -0800)]
[AMDGPU] Add gfx90a and gfx940 to get_elf_mach_gfx_name.cpp

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

2 years ago[VFS] Add print/dump to the whole FileSystem hierarchy
Ben Barham [Wed, 9 Mar 2022 20:23:22 +0000 (12:23 -0800)]
[VFS] Add print/dump to the whole FileSystem hierarchy

For now most are implemented by printing out the name of the filesystem,
but this can be expanded in the future. Only `OverlayFileSystem` and
`RedirectingFileSystem` are properly implemented in this patch.
  - `OverlayFileSystem`: Prints each filesystem in the order that any
    operations are actually run on them. Optionally prints recursively.
  - `RedirectingFileSystem`: Prints out all mappings, as well as the
    `ExternalFS`. Most of this was already implemented other than the
    handling for the `DirectoryRemap` case and to actually print out the
    mapping.

Each FS should implement `printImpl` rather than `print`, where the
latter just fowards to the former. This is to avoid spreading the
default arguments through to the subclasses (where we may miss updating
in the future).

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

2 years ago[OpenMP][FIX] Make metadata and attribute check lines less detailed
Johannes Doerfert [Thu, 17 Mar 2022 19:58:22 +0000 (14:58 -0500)]
[OpenMP][FIX] Make metadata and attribute check lines less detailed

The update_cc script should really do this automatically :(

2 years ago[MLIR][Presburger] introduce SetCoalescer
Michel Weber [Thu, 17 Mar 2022 19:50:38 +0000 (19:50 +0000)]
[MLIR][Presburger] introduce SetCoalescer

This patch refactors the current coalesce implementation. It introduces
the `SetCoalescer`, a class in which all coalescing functionality lives.
The main advantage over the old design is the fact that the vectors of
constraints do not have to be passed around, but are implemented as
private fields of the SetCoalescer. This will become especially
important once more inequality types are introduced.

Reviewed By: arjunp

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

2 years ago[dsymutil] Store possible Swift reflection sections in an array
Benjamin Kramer [Thu, 17 Mar 2022 19:37:39 +0000 (20:37 +0100)]
[dsymutil] Store possible Swift reflection sections in an array

No need for a unordered_map of enum, which is also broken in GCC before
6.1. No functionality change intended.

2 years ago[mlir] Move InterfaceMap::InterfaceMap to the cpp file
Benjamin Kramer [Thu, 17 Mar 2022 19:13:52 +0000 (20:13 +0100)]
[mlir] Move InterfaceMap::InterfaceMap to the cpp file

So we don't end up with a copy of std::sort in every dialect definition.
NFCI.

2 years ago[mlir] Use array_pod_sort for sorting stats/counters.
Benjamin Kramer [Thu, 17 Mar 2022 19:10:27 +0000 (20:10 +0100)]
[mlir] Use array_pod_sort for sorting stats/counters.

This isn't performance sensitive and array_pod_sort is a lot smaller.
NFCI.

2 years ago[AMDGPU] Allow v_accvgpr_write to use SGPR src on gfx940
Stanislav Mekhanoshin [Wed, 16 Mar 2022 19:39:31 +0000 (12:39 -0700)]
[AMDGPU] Allow v_accvgpr_write to use SGPR src on gfx940

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

2 years ago[gn build] Port 22570bac6943
LLVM GN Syncbot [Thu, 17 Mar 2022 19:06:22 +0000 (19:06 +0000)]
[gn build] Port 22570bac6943

2 years agoPrecommit test for D121483:
Kevin P. Neal [Thu, 17 Mar 2022 19:01:12 +0000 (15:01 -0400)]
Precommit test for D121483:
[FPEnv][InstSimplify] Teach CannotBeNegativeZero() about constrained intrinsics.

2 years ago[OpenMP][FIX] Relax test check lines
Johannes Doerfert [Thu, 17 Mar 2022 19:01:07 +0000 (14:01 -0500)]
[OpenMP][FIX] Relax test check lines

2 years ago[lldb] Fix ^C handling in IOHandlerProcessSTDIO
Pavel Labath [Thu, 17 Mar 2022 18:47:00 +0000 (11:47 -0700)]
[lldb] Fix ^C handling in IOHandlerProcessSTDIO

D120762 accidentally moved the interrupt check into the block which was
reading stdio. This meant that a ^C only took effect after a regular
character has been pressed.

This patch fixes that and adds a (pexpect) test.

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

2 years agoCurrently the control of the eval-method is mixed with fast-math.
Zahira Ammarguellat [Mon, 7 Mar 2022 15:28:45 +0000 (07:28 -0800)]
Currently the control of the eval-method is mixed with fast-math.
FLT_EVAL_METHOD tells the user the precision at which, temporary results
are evaluated but when fast-math is enabled, the numeric values are not
guaranteed to match the source semantics, so the eval-method is
meaningless.
For example, the expression `x + y + z` has as source semantics `(x + y)
+ z`. FLT_EVAL_METHOD is telling the user at which precision `(x + y)`
is evaluated. With fast-math enable the compiler can choose to
evaluate the expression as `(y + z) + x`.
The correct behavior is to set the FLT_EVAL_METHOD to `-1` to tell the
user that the precision of the intermediate values is unknow. This
patch is doing that.

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

2 years ago[AMDGPU] Fix PreRARematerialize scheduler pass sinking subreg defs
Vang Thao [Thu, 17 Mar 2022 00:40:08 +0000 (17:40 -0700)]
[AMDGPU] Fix PreRARematerialize scheduler pass sinking subreg defs

When collecting trivially rematerializable defs, skip any subreg defs. We do not want to sink these.

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

2 years agoReland "Use a stable-sort when combining bases"
Sterling Augustine [Thu, 17 Mar 2022 17:01:49 +0000 (10:01 -0700)]
Reland "Use a stable-sort when combining bases"

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

2 years ago[libc++] Switch to the new testing configurations by default
Louis Dionne [Mon, 14 Mar 2022 18:23:38 +0000 (14:23 -0400)]
[libc++] Switch to the new testing configurations by default

We've been meaning to remove support for the legacy testing configuration
for a long time. This patch switches the default from the legacy config
to the appropriate new-style configuration based on a few hints.

We've been running with the new-style configuration for more than a year
in our CI, however it's possible that this will uncover issues with some
users that run the tests on platforms that we don't support yet with the
new-style configs. Unfortunately, there is no way to know about it other
than to land this patch and see whether anything breaks.

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

2 years ago[MLIR][Math] Add constant folder for powf
William S. Moses [Wed, 16 Mar 2022 20:51:03 +0000 (16:51 -0400)]
[MLIR][Math] Add constant folder for powf

Constant fold powf, given two constant operands and a compatible type

Reviewed By: ftynse

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

2 years ago[SLP]Do not schedule instructions with constants/argument/phi operands and external...
Alexey Bataev [Tue, 1 Mar 2022 19:32:32 +0000 (11:32 -0800)]
[SLP]Do not schedule instructions with constants/argument/phi operands and external users.

No need to schedule entry nodes where all instructions are not memory
read/write instructions and their operands are either constants, or
arguments, or phis, or instructions from others blocks, or their users
are phis or from the other blocks.
The resulting vector instructions can be placed at
the beginning of the basic block without scheduling (if operands does
not need to be scheduled) or at the end of the block (if users are
outside of the block).
It may save some compile time and scheduling resources.

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

2 years ago[scudo] Use portable sysconf instead of deprecated getpagesize
Dominic Chen [Wed, 16 Mar 2022 20:51:46 +0000 (13:51 -0700)]
[scudo] Use portable sysconf instead of deprecated getpagesize

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

2 years ago[MLIR] Add affine.load fold hook on global constant memrefs
Uday Bondhugula [Thu, 17 Mar 2022 17:31:54 +0000 (23:01 +0530)]
[MLIR] Add affine.load fold hook on global constant memrefs

Fold affine.load ops on global constant memrefs when indices are all
constant.

Reviewed By: ayzhuang

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

2 years agoReapply "[OpenMP][FIX] Allow device constructors for AMD GPU"
Johannes Doerfert [Thu, 17 Mar 2022 16:10:11 +0000 (11:10 -0500)]
Reapply "[OpenMP][FIX] Allow device constructors for AMD GPU"

This reverts commit a597d6a780b184539f504392168b004bf392a135 and
reapplies 07b176646134.

In AMD GPU device code the globals are in AS(1). Before, we crashed if
the global was a structure. Now we simply cast away the AS before we
generate the code to initialize the global.

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

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

2 years agoAdd another office hour
Johannes Doerfert [Thu, 17 Mar 2022 17:48:13 +0000 (12:48 -0500)]
Add another office hour

2 years agoLower `@llvm.global_dtors` using `__cxa_atexit` on MachO
Julian Lettner [Wed, 9 Mar 2022 20:33:59 +0000 (12:33 -0800)]
Lower `@llvm.global_dtors` using `__cxa_atexit` on MachO

For MachO, lower `@llvm.global_dtors` into `@llvm_global_ctors` with
`__cxa_atexit` calls to avoid emitting the deprecated `__mod_term_func`.

Reuse the existing `WebAssemblyLowerGlobalDtors.cpp` to accomplish this.

Enable fallback to the old behavior via Clang driver flag
(`-fregister-global-dtors-with-atexit`) or llc / code generation flag
(`-lower-global-dtors-via-cxa-atexit`).  This escape hatch will be
removed in the future.

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

2 years ago[mlir][sparse] Introduce new binary and unary op
Jim Kitchen [Thu, 17 Mar 2022 17:16:29 +0000 (12:16 -0500)]
[mlir][sparse] Introduce new binary and unary op

When the sparse_tensor dialect lowers linalg.generic,
it makes inferences about how the operations should
affect the looping logic. For example, multiplication
is an intersection while addition is a union of two
sparse tensors.

The new binary and unary op separate the looping logic
from the computation by nesting the computation code
inside a block which is merged at the appropriate level
in the lowered looping code.

The binary op can have custom computation code for the
overlap, left, and right sparse overlap regions. The
unary op can have custom computation code for the
present and absent values.

Reviewed by: aartbik

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

2 years ago[ARM] Fix Decode of tsb csync
Archibald Elliott [Thu, 17 Mar 2022 17:29:24 +0000 (17:29 +0000)]
[ARM] Fix Decode of tsb csync

There is a crash in the ARM backend when attempting to decode a "tsb
csync" instruction using `llvm-objdump --triple=armv8.4a -d`. The crash
was in `ARMMCInstrAnalysis::evaluateBranch` where the number of operands
in the decoded instruction (0) did not match the number of operands in
the instruction description (1).

This is becuase `tsb csync` looks like it has an operand during
assembly, but there is only one valid operand (csync), so there is no
encoding space in the instruction for the operand, so the decoder never
has a field to decode that represents `csync`.

The fix is to add a custom decode method, which ensures that this
instruction does have the right number of operands after decoding. This
method merely adds the only available operand value, `ARM_TSB::CSYNC`.

Reviewed By: tmatheson

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

2 years ago[dsymutil] Apply relocations present in Swift reflection sections
Augusto Noronha [Fri, 25 Feb 2022 18:20:02 +0000 (15:20 -0300)]
[dsymutil] Apply relocations present in Swift reflection sections

The strippable Swift reflection sections contain subtractor relocations
that need to be applied. There are two situations we need to support.
1) Both symbols used in the relocation come from the .o file (for
   example, one symbol lives in __swift5_fieldmd and the second in
   __swift5_reflstr).
2) One symbol comes from th .o file and the second from the main
   binary (for example, __swift5_fieldmd and __swift5_typeref).

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

2 years ago[scudo][tests] Pass read-only vector by reference
Dominic Chen [Wed, 16 Mar 2022 20:48:20 +0000 (13:48 -0700)]
[scudo][tests] Pass read-only vector by reference

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

2 years ago[scudo] Fix test harness integration
Dominic Chen [Wed, 16 Mar 2022 20:45:24 +0000 (13:45 -0700)]
[scudo] Fix test harness integration

Explicitly specify the class name to avoid selecting the wrong Run function, and inherit from the correct Test parent

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

2 years ago[scudo] Use nullptr instead of integer-to-pointer cast
Dominic Chen [Wed, 16 Mar 2022 20:49:29 +0000 (13:49 -0700)]
[scudo] Use nullptr instead of integer-to-pointer cast

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

2 years ago[scudo] Don't unmap other low memory pages if mapping doesn't exist
Dominic Chen [Wed, 16 Mar 2022 20:51:08 +0000 (13:51 -0700)]
[scudo] Don't unmap other low memory pages if mapping doesn't exist

Tests can register multiple allocators, but only the first will initialize since it initializes the TSDRegistrySharedT. Then, destruction of subsequent allocator may end up unmapping a nullptr PrimaryBase with non-zero PrimarySize.

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

2 years ago[scudo] Explicitly mark enum as unsigned
Dominic Chen [Wed, 16 Mar 2022 20:52:04 +0000 (13:52 -0700)]
[scudo] Explicitly mark enum as unsigned

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

2 years ago[scudo] Remove unused vector value initializer
Dominic Chen [Wed, 16 Mar 2022 20:52:31 +0000 (13:52 -0700)]
[scudo] Remove unused vector value initializer

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

2 years ago[AlwaysInliner] Check inliner errors even without assserts
Ellis Hoag [Tue, 15 Mar 2022 18:10:32 +0000 (11:10 -0700)]
[AlwaysInliner] Check inliner errors even without assserts

When we build clang without asserts we should still check the result of
`InlineFunction()` to be sure there wasn't an error. Otherwise we could
incorrectly merge attributes in the next line.

This also removes a redundent call to `getCaller()`.

Reviewed By: nikic

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

2 years ago[NFC] Disable clang/SymbolGraph test
Zixu Wang [Thu, 17 Mar 2022 17:14:19 +0000 (10:14 -0700)]
[NFC] Disable clang/SymbolGraph test

2 years ago[RISCV] Mention Zvfh extension in release notes. NFC
Craig Topper [Thu, 17 Mar 2022 17:12:09 +0000 (10:12 -0700)]
[RISCV] Mention Zvfh extension in release notes. NFC

2 years ago[PS4] Make __BIGGEST_ALIGNMENT__ 32bytes
Yuanfang Chen [Thu, 17 Mar 2022 17:12:28 +0000 (10:12 -0700)]
[PS4] Make __BIGGEST_ALIGNMENT__ 32bytes

So it matches `__STDCPP_DEFAULT_NEW_ALIGNMENT__`.

Reviewed By: probinson, aaron.ballman

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

2 years agoRevert "RegAllocGreedy: Fix last chance recolor assert in impossible case"
Matt Arsenault [Thu, 17 Mar 2022 16:46:01 +0000 (12:46 -0400)]
Revert "RegAllocGreedy: Fix last chance recolor assert in impossible case"

This reverts commit c46aab01c002b7a04135b8b7f1f52d8c9ae23a58.

This evidently blocks compiling in some cases that used to work
before. I'm also not fully convinced this is the correct place to fix
this problem.

2 years ago[clang][dataflow] Model the behavior of non-standard optional assignment
Stanislav Gatev [Wed, 16 Mar 2022 22:20:05 +0000 (22:20 +0000)]
[clang][dataflow] Model the behavior of non-standard optional assignment

Model nullopt, value, and conversion assignment operators.

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

2 years ago[RISCV] Add +experimental-zvfh extension to cover half types in vectors.
Craig Topper [Thu, 17 Mar 2022 16:44:43 +0000 (09:44 -0700)]
[RISCV] Add +experimental-zvfh extension to cover half types in vectors.

Currently we allow half types in vectors if the scalar Zfh extension
is enabled. This behavior is not inline with the vector spec. For f32
and f64 types, the Zve32f, Zve64f, Zve64d, and V explicitly control
the availablity of floating point types in vectors.

In order to make our compiler compliant, we either need to remove all support
for half in vectors or we need an extension to control it.

Draft spec here https://github.com/riscv/riscv-v-spec/pull/780

Reviewed By: kito-cheng

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

2 years ago[LoopSimplifyCFG] Add test case for PR54023.
Florian Hahn [Thu, 17 Mar 2022 17:01:36 +0000 (17:01 +0000)]
[LoopSimplifyCFG] Add test case for PR54023.

Test case for #54023.

2 years ago[gn build] Port 1af5fbd5c605
LLVM GN Syncbot [Thu, 17 Mar 2022 16:55:08 +0000 (16:55 +0000)]
[gn build] Port 1af5fbd5c605

2 years agoRevert "Use a stable-sort when combining bases"
Sterling Augustine [Thu, 17 Mar 2022 16:53:40 +0000 (09:53 -0700)]
Revert "Use a stable-sort when combining bases"

This reverts commit 81417261a15f46284f2613118120d7d6de2bc02d.

2 years agoAttempt forward fix for Linux buildbots for D116385
David Goldman [Thu, 17 Mar 2022 16:49:08 +0000 (12:49 -0400)]
Attempt forward fix for Linux buildbots for D116385

2 years ago[flang][nfc] Move a test
Andrzej Warzynski [Thu, 17 Mar 2022 16:44:16 +0000 (16:44 +0000)]
[flang][nfc] Move a test

All option forwarding tests should be added to frontend-forwarding.f90
rather than files corresponding to various options. This patch moves
such test for `-mllvm` accordingly.

2 years ago[RISCV] Simplify scalable vector case in lowerVectorMaskExt.
Craig Topper [Thu, 17 Mar 2022 16:33:52 +0000 (09:33 -0700)]
[RISCV] Simplify scalable vector case in lowerVectorMaskExt.

Since we have SPLAT_VECTOR_PARTS these days, I don't think we need
to go through extra lengths to avoid introducing an illegal scalar type.
We can just call getConstant using the scalable vector type and let
it create either a SPLAT_VECTOR or a SPLAT_VECTOR_PARTS.

Reviewed By: frasercrmck, rogfer01

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

2 years ago[mlir][docs] Fix formatting issue in Dialects/Vector.md.
Ingo Mueller [Thu, 17 Mar 2022 16:37:11 +0000 (16:37 +0000)]
[mlir][docs] Fix formatting issue in Dialects/Vector.md.

Reviewed By: aartbik

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

2 years ago[NFC][ InstCombine] precommit test for D121585
Andrew Wei [Thu, 17 Mar 2022 16:35:47 +0000 (00:35 +0800)]
[NFC][ InstCombine] precommit test for D121585

Based on original tests from D121585.

2 years ago[BPF] Fix a bug in BPFAdjustOpt pass for icmp transformation
Yonghong Song [Thu, 17 Mar 2022 06:24:15 +0000 (23:24 -0700)]
[BPF] Fix a bug in BPFAdjustOpt pass for icmp transformation

When checking a bcc issue related to bcc tool inject.py,
I found a bug in BPFAdjustOpt pass for icmp transformation,
caused by typo's. For the following condition:
  Cond2Op != ICmpInst::ICMP_SLT && Cond1Op != ICmpInst::ICMP_SLE
it should be
  Cond2Op != ICmpInst::ICMP_SLT && Cond2Op != ICmpInst::ICMP_SLE

This patch fixed the problem and a test case is added.

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

2 years ago[mlir] Extend SimplifyTrivialLoops
Amy Zhuang [Thu, 17 Mar 2022 15:40:25 +0000 (08:40 -0700)]
[mlir] Extend SimplifyTrivialLoops

Fold away empty loops that iterate at least once and only return
values defined outside of the loop.

Reviewed By: bondhugula, dcaballe

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

2 years ago[AArch64][SVE] InstCombine llvm.aarch64.sve.sel to select
Matt Devereau [Wed, 16 Mar 2022 11:41:14 +0000 (11:41 +0000)]
[AArch64][SVE] InstCombine llvm.aarch64.sve.sel to select

InstCombine llvm.aarch64.sve.sel to select. This allows an existing instCombine
added in 20b0fa91c9ee to fire.

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

2 years ago[flang] Lower some numeric intrinsics
Valentin Clement [Thu, 17 Mar 2022 16:16:43 +0000 (17:16 +0100)]
[flang] Lower some numeric intrinsics

This patch adds lowering for the following numeric intrinsics:
- aint
- anint
- cmplx
- conjg
- dble
- dprod
- sign

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

Reviewed By: schweitz

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

Co-authored-by: Jean Perier <jperier@nvidia.com>
Co-authored-by: Eric Schweitz <eschweitz@nvidia.com>
Co-authored-by: V Donaldson <vdonaldson@nvidia.com>
2 years ago[flang] Add equivalence lowering tests
Valentin Clement [Thu, 17 Mar 2022 16:15:34 +0000 (17:15 +0100)]
[flang] Add equivalence lowering tests

This patch adds couple of lwoering tests for equivalences

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

Reviewed By: schweitz

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

Co-authored-by: Jean Perier <jperier@nvidia.com>
Co-authored-by: Eric Schweitz <eschweitz@nvidia.com>
Co-authored-by: V Donaldson <vdonaldson@nvidia.com>
2 years ago[clang] AddObjCKeyValueCompletions - use castAs<> instead of getAs<> to avoid derefer...
Simon Pilgrim [Thu, 17 Mar 2022 15:15:08 +0000 (15:15 +0000)]
[clang] AddObjCKeyValueCompletions - use castAs<> instead of getAs<> to avoid dereference of nullptr

The pointers are always dereferenced, so assert the cast is correct instead of returning nullptr

2 years ago[flang] Add more lowering tests for dummy arguments
Valentin Clement [Thu, 17 Mar 2022 16:01:46 +0000 (17:01 +0100)]
[flang] Add more lowering tests for dummy arguments

This patch adds more lowering tests for dummy arguments
and adds lowering for a specific case.

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

Reviewed By: schweitz

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

Co-authored-by: Jean Perier <jperier@nvidia.com>
Co-authored-by: Eric Schweitz <eschweitz@nvidia.com>
2 years agoUse a stable-sort when combining bases
Sterling Augustine [Wed, 16 Mar 2022 23:35:40 +0000 (16:35 -0700)]
Use a stable-sort when combining bases

While experimenting with different algorithms for std::sort
I discovered that combine-vmovdrr.ll fails if this sort is not
stable.

I suspect that the test is too stringent in its check--the resultant
code looks functionally identical to me under both stable and unstable
sorting, but a generic fix is quite a bit more difficult to implement.

Thanks to scw@google.com for finding the proper fix.

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

2 years ago[flang] Add IO lowering test
Valentin Clement [Thu, 17 Mar 2022 15:59:31 +0000 (16:59 +0100)]
[flang] Add IO lowering test

This patch adds more lowering tests for IO
Test lowering of IO read SIZE control-spec (12.6.2.15)

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

Reviewed By: jeanPerier

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

Co-authored-by: V Donaldson <vdonaldson@nvidia.com>
2 years ago[AtomicExpandPass][NFC] Reformat with clang-format
Marco Elver [Thu, 17 Mar 2022 15:46:12 +0000 (16:46 +0100)]
[AtomicExpandPass][NFC] Reformat with clang-format

NFCI.

2 years ago[LTO][ELF] Require asserts for --stats-file= tests.
henry wong [Thu, 17 Mar 2022 15:53:36 +0000 (23:53 +0800)]
[LTO][ELF] Require asserts for --stats-file= tests.

https://reviews.llvm.org/D121809 causes the build bot failure, add the `REQUIRES: asserts` to fix it.

Reviewed By: tejohnson

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

2 years ago[CodeGen] Avoid pointer element type access for blocks
Nikita Popov [Thu, 17 Mar 2022 15:54:21 +0000 (16:54 +0100)]
[CodeGen] Avoid pointer element type access for blocks

Pass the block struct type down to the TargetInfo hooks.

2 years ago[LLDB] Modifying expression code in MakeLoadImageUtilityFunction to be more consistent
Shafik Yaghmour [Thu, 17 Mar 2022 15:51:32 +0000 (08:51 -0700)]
[LLDB] Modifying expression code in MakeLoadImageUtilityFunction to be more consistent

MakeLoadImageUtilityFunction() is not using extern "C" for external C functions
and it is not using eLanguageTypeC_plus_plus. So I am modifying it to be consistent.

Also see: rdar://87544782

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

2 years ago[Coroutines][NFC] Format line to 80 cols
Fraser Cormack [Thu, 17 Mar 2022 15:33:52 +0000 (15:33 +0000)]
[Coroutines][NFC] Format line to 80 cols

2 years ago[libc][NFC] Add a separate flag for capturing the '+' in fopen mode string.
Siva Chandra Reddy [Thu, 17 Mar 2022 08:39:58 +0000 (08:39 +0000)]
[libc][NFC] Add a separate flag for capturing the '+' in fopen mode string.

Having a separate flag helps in setting up proper flags when
implementing, say the Linux specialization of File.

Along the way, a signature for a function which is to be used to open
files has been added. The implementation of the function is to be
included in platform specializations.

Reviewed By: lntue

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

2 years ago[OpaquePtr][LLParser] Automatically detect opaque pointers in .ll files
Arthur Eubanks [Thu, 10 Feb 2022 19:56:14 +0000 (11:56 -0800)]
[OpaquePtr][LLParser] Automatically detect opaque pointers in .ll files

This allows us to not have to specify -opaque-pointers when updating
IR tests from typed pointers to opaque pointers.

We detect opaque pointers in .ll files by looking for relevant tokens,
either "ptr" or "*".

Reviewed By: #opaque-pointers, nikic

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

2 years ago[CodeGen] Avoid some pointer element type accesses
Nikita Popov [Thu, 17 Mar 2022 14:41:50 +0000 (15:41 +0100)]
[CodeGen] Avoid some pointer element type accesses

2 years ago[lldb] Skip invalid-condition.test on Windows
Jonas Devlieghere [Thu, 17 Mar 2022 15:22:55 +0000 (08:22 -0700)]
[lldb] Skip invalid-condition.test on Windows

This test is making the Windows bot unhappy. Unfortunately the output
doesn't tell me much about what exactly is wrong.

2 years ago[CodeGen] Avoid some pointer element type accesses
Nikita Popov [Thu, 17 Mar 2022 14:21:01 +0000 (15:21 +0100)]
[CodeGen] Avoid some pointer element type accesses

2 years ago[clangd] Code action for creating an ObjC initializer
David Goldman [Wed, 29 Dec 2021 21:20:29 +0000 (16:20 -0500)]
[clangd] Code action for creating an ObjC initializer

The code action creates an initializer for the selected
ivars/properties, defaulting to all if only the interface/implementation
container is selected.

We add it based on the position of the first non initializer that we
see, and default to adding it where the @end token is.

We also use the ObjC parameter form of (nullable id) instead of
(id _Nullable) if the property has the nullable attribute.

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

2 years ago[Clang] Added info about noinline/always_inline statement attributes to release notes
Dávid Bolvanský [Thu, 17 Mar 2022 15:28:37 +0000 (16:28 +0100)]
[Clang] Added info about noinline/always_inline statement attributes to release notes

Reviewed By: aaron.ballman

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

2 years ago[AArch64] Add extra insert-subvector tests. NFC
David Green [Thu, 17 Mar 2022 15:29:07 +0000 (15:29 +0000)]
[AArch64] Add extra insert-subvector tests. NFC

2 years ago[AMDGPU] Stop using getMinimalPhysRegClass in LowerFormalArguments
Jay Foad [Thu, 17 Mar 2022 12:55:33 +0000 (12:55 +0000)]
[AMDGPU] Stop using getMinimalPhysRegClass in LowerFormalArguments

NFCI. The motivation for this is avoid problems in future if we add new
classes containing only a subset of all VGPRs, or a subset of all SGPRs.
getMinimalPhysRegClass would favour these smaller classes, which is not
what we want here.

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

2 years ago[DebugInfo][InstrRef] Prefer stack locations for variables
Jeremy Morse [Thu, 17 Mar 2022 14:03:22 +0000 (14:03 +0000)]
[DebugInfo][InstrRef] Prefer stack locations for variables

This patch adjusts what location is picked for a known variable value --
preferring to leave locations on the stack, even when a value is re-loaded
into a register. The benefit is reduced location list entropy, on a
clang-3.4 build I found that .debug_loclists reduces in size by 6%, from
29Mb down to 27Mb.

Testing: a few tests need the stack slot to be written to explicitly, to
force LiveDebugValues into restoring the variable location to a register.
I've added an explicit test for the desired behaviour in
livedebugvalues_recover_clobbers.mir .

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

2 years ago[CodeGen] Avoid some pointer element type accesses
Nikita Popov [Thu, 17 Mar 2022 13:54:18 +0000 (14:54 +0100)]
[CodeGen] Avoid some pointer element type accesses

2 years ago[Instruction] Introduce getAtomicSyncScopeID()
Marco Elver [Thu, 17 Mar 2022 13:56:29 +0000 (14:56 +0100)]
[Instruction] Introduce getAtomicSyncScopeID()

An analysis may just be interested in checking if an instruction is
atomic but system scoped or single-thread scoped, like ThreadSanitizer's
isAtomic(). Unfortunately Instruction::isAtomic() can only answer the
"atomic" part of the question, but to also check scope becomes rather
verbose.

To simplify and reduce redundancy, introduce a common helper
getAtomicSyncScopeID() which returns the scope of an atomic operation.
Start using it in ThreadSanitizer.

NFCI.

Reviewed By: dvyukov

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

2 years ago[CGObjCGNU] Remove pointer element type uses
Nikita Popov [Thu, 17 Mar 2022 13:33:31 +0000 (14:33 +0100)]
[CGObjCGNU] Remove pointer element type uses

2 years ago[Flang] Lower the repeat intrinsic
Kiran Chandramohan [Thu, 17 Mar 2022 13:18:19 +0000 (13:18 +0000)]
[Flang] Lower the repeat intrinsic

The repeat intrinsic creates ncopies of a string. The lowering is to
a runtime call to a function in the flang library. The runtime allocates
the buffer to store the result string. This buffer is freed by code
added in the lowering.

This is part of the upstreaming effort from the fir-dev branch in [1].
[1] https://github.com/flang-compiler/f18-llvm-project

Reviewed By: clementval

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

Co-authored-by: Valentin Clement <clementval@gmail.com>
Co-authored-by: Jean Perier <jperier@nvidia.com>
2 years ago[flang] Lower command and environment intrinsics
Valentin Clement [Thu, 17 Mar 2022 13:34:58 +0000 (14:34 +0100)]
[flang] Lower command and environment intrinsics

This patch adds lowering for command and environment
related intrinsics:
- `get_command_argument`
- `get_environment_variable`
- `command_argument_count`

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

Reviewed By: PeteSteinfeld

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

Co-authored-by: Josh Mottley <Josh.Mottley@arm.com>
Co-authored-by: Jean Perier <jperier@nvidia.com>
2 years ago[LV] Use usesScalars in widenPHIInstruction.
Florian Hahn [Thu, 17 Mar 2022 13:16:32 +0000 (13:16 +0000)]
[LV] Use usesScalars in widenPHIInstruction.

This uses the existing VPlan helpers to check whether there are scalar
uses of a phi recipe. It remove one of the few remaining dependencies on
the cost model from VPlan code generation.

Depends on D121612.

Reviewed By: Ayal

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

2 years ago[Flang] Lower the transpose intrinsic
Kiran Chandramohan [Thu, 17 Mar 2022 13:05:16 +0000 (13:05 +0000)]
[Flang] Lower the transpose intrinsic

Tranpose intrinsic performs the transpose matrix operation for arrays
of rank 2. The intrinsic is lowered to a runtime call.

This is part of the upstreaming effort from the fir-dev branch in [1].
[1] https://github.com/flang-compiler/f18-llvm-project

Reviewed By: clementval

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

Co-authored-by: Valentin Clement <clementval@gmail.com>
Co-authored-by: Jean Perier <jperier@nvidia.com>
2 years ago[x86] try harder to use shift instead of test if it can save some immediate bytes
Sanjay Patel [Thu, 17 Mar 2022 13:09:42 +0000 (09:09 -0400)]
[x86] try harder to use shift instead of test if it can save some immediate bytes

We favor 'and' and 'test' in earlier phases of optimization,
and that's usually the better option, but we can save a few
instruction bytes by converting a mask constant to a shift here.

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

2 years ago[pseudo] Tweak some docs, NFC
Haojian Wu [Wed, 16 Mar 2022 15:45:24 +0000 (16:45 +0100)]
[pseudo] Tweak some docs, NFC

Consitently use the "nonterminal", "pseudoparser" terms.

2 years ago[clangd] Re-enable clang-tidy's nolint blocks
Haojian Wu [Thu, 17 Mar 2022 12:48:47 +0000 (13:48 +0100)]
[clangd] Re-enable clang-tidy's nolint blocks

The previous inefficient implementation is polished.

Reviewed By: kadircet

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

2 years ago[pseudo] Split greatergreater token.
Haojian Wu [Thu, 17 Mar 2022 12:42:31 +0000 (13:42 +0100)]
[pseudo] Split greatergreater token.

For a >> token (a right shift operator, or a nested template?), the clang
lexer always returns a single greatergreater token, as a result,
the grammar-based GLR parser never try to parse the nested template
case.

We derive a token stream by always splitting the >> token, so that the
GLR parser is able to pursue both options during parsing (usually 1
path fails).

Reviewed By: sammccall

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

2 years ago[Flang] Lower the trim intrinsic
Kiran Chandramohan [Thu, 17 Mar 2022 12:33:53 +0000 (12:33 +0000)]
[Flang] Lower the trim intrinsic

The trim intrinsic removes trailing blank spaces from a string. The
intrinsic is lowered to a runtime call.

This is part of the upstreaming effort from the fir-dev branch in [1].
[1] https://github.com/flang-compiler/f18-llvm-project

Reviewed By: jeanPerier

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

Co-authored-by: Jean Perier <jperier@nvidia.com>
Co-authored-by: Valentin Clement <clementval@gmail.com>
Co-authored-by: Eric Schweitz <eschweitz@nvidia.com>
2 years ago[Flang] Lower Matmul intrinsic
Kiran Chandramohan [Thu, 17 Mar 2022 12:30:05 +0000 (12:30 +0000)]
[Flang] Lower Matmul intrinsic

The Matmul intrinsic performs matrix multiplication on rank 2 arrays.
The intrinsic is lowered to a runtime call.

This is part of the upstreaming effort from the fir-dev branch in [1].
[1] https://github.com/flang-compiler/f18-llvm-project

Reviewed By: clementval

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

Co-authored-by: Jean Perier <jperier@nvidia.com>
Co-authored-by: Valentin Clement <clementval@gmail.com>
2 years ago[Sema] add warning for tautological FP compare with literal
Sanjay Patel [Thu, 17 Mar 2022 11:40:03 +0000 (07:40 -0400)]
[Sema] add warning for tautological FP compare with literal

If we are equality comparing an FP literal with a value cast from a type
where the literal can't be represented, that's known true or false and
probably a programmer error.

Fixes issue #54222.
https://github.com/llvm/llvm-project/issues/54222

Note - I added the optimizer change with:
9397bdc67eb2
...and as discussed in the post-commit comments, that transform might be
too dangerous without this warning in place, so it was reverted to allow
this change first.

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