platform/upstream/llvm.git
2 years ago[SLP] Fix lookahead operand reordering for splat loads.
Vasileios Porpodas [Thu, 10 Mar 2022 02:18:16 +0000 (18:18 -0800)]
[SLP] Fix lookahead operand reordering for splat loads.

Splat loads are inexpensive in X86. For a 2-lane vector we need just one
instruction: `movddup (%reg), xmm0`. Using the standard Splat score leads
to worse code. This patch adds a new score dedicated for splat loads.

Please note that a splat is usually three IR instructions:
- It is usually a load and 2 inserts:
 %ld = load double, double* %gep
 %ins1 = insertelement <2 x double> poison, double %ld, i32 0
 %ins2 = insertelement <2 x double> %ins1, double %ld, i32 1

- But it can also be a load, an insert and a shuffle:
 %ld = load double, double* %gep
 %ins = insertelement <2 x double> poison, double %ld, i32 0
 %shf = shufflevector <2 x double> %ins, <2 x double> poison, <2 x i32> zeroinitializer

Because of this some of the lit tests contain more IR instructions.

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

2 years ago[SLP][NFC] This adds a test for a follow-up patch that fixes a look-ahead operand...
Vasileios Porpodas [Thu, 10 Mar 2022 01:47:23 +0000 (17:47 -0800)]
[SLP][NFC] This adds a test for a follow-up patch that fixes a look-ahead operand reordering issue

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

2 years agoUse llvm::append_range instead of push_back loops where applicable. NFCI.
Benjamin Kramer [Fri, 18 Mar 2022 00:15:43 +0000 (01:15 +0100)]
Use llvm::append_range instead of push_back loops where applicable. NFCI.

2 years agoRevert "Revert "Revert "[misexpect] Re-implement MisExpect Diagnostics"""
Paul Kirth [Fri, 18 Mar 2022 00:21:33 +0000 (00:21 +0000)]
Revert "Revert "Revert "[misexpect] Re-implement MisExpect Diagnostics"""

This reverts commit 6cf560d69a222bff4af4e1d092437fd77f0f981c.

2 years ago[gn build] (manually) port 6316129e066e
Nico Weber [Fri, 18 Mar 2022 00:08:11 +0000 (20:08 -0400)]
[gn build] (manually) port 6316129e066e

2 years agoRevert "Revert "[misexpect] Re-implement MisExpect Diagnostics""
Paul Kirth [Fri, 18 Mar 2022 00:04:22 +0000 (00:04 +0000)]
Revert "Revert "[misexpect] Re-implement MisExpect Diagnostics""

I mistakenly reverted my commit, so I'm relanding it.

This reverts commit 10866a1df4a82cdc54187330c509a2d46235455d.

2 years agoRevert "[misexpect] Re-implement MisExpect Diagnostics"
Paul Kirth [Thu, 17 Mar 2022 23:54:26 +0000 (23:54 +0000)]
Revert "[misexpect] Re-implement MisExpect Diagnostics"

This reverts commit e7749d4713a5ec886011ceb0fc821c6723061724.

2 years ago[misexpect] Re-implement MisExpect Diagnostics
Paul Kirth [Wed, 9 Mar 2022 16:01:38 +0000 (16:01 +0000)]
[misexpect] Re-implement MisExpect Diagnostics

Reimplements MisExpect diagnostics from D66324 to reconstruct its
original checking methodology only using MD_prof branch_weights
metadata.

New checks rely on 2 invariants:

1) For frontend instrumentation, MD_prof branch_weights will always be
   populated before llvm.expect intrinsics are lowered.

2) for IR and sample profiling, llvm.expect intrinsics will always be
   lowered before branch_weights are populated from the IR profiles.

These invariants allow the checking to assume how the existing branch
weights are populated depending on the profiling method used, and emit
the correct diagnostics. If these invariants are ever invalidated, the
MisExpect related checks would need to be updated, potentially by
re-introducing MD_misexpect metadata, and ensuring it always will be
transformed the same way as branch_weights in other optimization passes.

Frontend based profiling is now enabled without using LLVM Args, by
introducing a new CodeGen option, and checking if the -Wmisexpect flag
has been passed on the command line.

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

2 years ago[BPF] handle unsigned icmp ops in BPFAdjustOpt pass
Yonghong Song [Thu, 17 Mar 2022 05:09:59 +0000 (22:09 -0700)]
[BPF] handle unsigned icmp ops in BPFAdjustOpt pass

When investigating an issue with bcc tool inject.py, I found
a verifier failure with latest clang. The portion of code
can be illustrated as below:
  struct pid_struct {
    u64 curr_call;
    u64 conds_met;
    u64 stack[2];
  };
  struct pid_struct *bpf_map_lookup_elem();
  int foo() {
    struct pid_struct *p = bpf_map_lookup_elem();
    if (!p) return 0;
    p->curr_call--;
    if (p->conds_met < 1 || p->conds_met >= 3)
        return 0;
    if (p->stack[p->conds_met - 1] == p->curr_call)
        p->conds_met--;
    ...
  }

The verifier failure looks like:
  ...
  8: (79) r1 = *(u64 *)(r0 +0)
   R0_w=map_value(id=0,off=0,ks=4,vs=32,imm=0) R10=fp0 fp-8=mmmm????
  9: (07) r1 += -1
  10: (7b) *(u64 *)(r0 +0) = r1
   R0_w=map_value(id=0,off=0,ks=4,vs=32,imm=0) R1_w=inv(id=0) R10=fp0 fp-8=mmmm????
  11: (79) r2 = *(u64 *)(r0 +8)
   R0_w=map_value(id=0,off=0,ks=4,vs=32,imm=0) R1_w=inv(id=0) R10=fp0 fp-8=mmmm????
  12: (bf) r3 = r2
  13: (07) r3 += -3
  14: (b7) r4 = -2
  15: (2d) if r4 > r3 goto pc+13
   R0=map_value(id=0,off=0,ks=4,vs=32,imm=0) R1=inv(id=0) R2=inv(id=2)
   R3=inv(id=0,umin_value=18446744073709551614,var_off=(0xffffffff00000000; 0xffffffff))
   R4=inv-2 R10=fp0 fp-8=mmmm????
  16: (07) r2 += -1
  17: (bf) r3 = r2
  18: (67) r3 <<= 3
  19: (bf) r4 = r0
  20: (0f) r4 += r3
  math between map_value pointer and register with unbounded min value is not allowed

Here the compiler optimized "p->conds_met < 1 || p->conds_met >= 3" to
  r2 = p->conds_met
  r3 = r2
  r3 += -3
  r4 = -2
  if (r3 < r4) return 0
  r2 += -1
  r3 = r2
  ...
In the above, r3 is initially equal to r2, but is modified used by the comparison.
But later on r2 is used again. This caused verification failure.

BPF backend has a pass, AdjustOpt, to prevent such transformation, but only
focused on signed integers since typical bpf helper returns signed integers.
To fix this case, let us handle unsigned integers as well.

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

2 years ago[docs] Fix codeblock.
Alina Sbirlea [Thu, 17 Mar 2022 22:52:49 +0000 (15:52 -0700)]
[docs] Fix codeblock.

2 years agoRevert "[MLIR][Presburger] introduce SetCoalescer"
Mehdi Amini [Thu, 17 Mar 2022 22:49:13 +0000 (22:49 +0000)]
Revert "[MLIR][Presburger] introduce SetCoalescer"

This reverts commit dad80e97109afda17a278a5c1a87b2c595aa01a6.

The build is broken with some configurations (gcc-5 and gcc-8):

mlir/lib/Analysis/Presburger/PresburgerRelation.cpp:402:32: error: qualified name does not name a class before '{' token
 class presburger::SetCoalescer {

2 years ago[AMDGPU] Add 2 gfx940 mfma tests. NFC.
Stanislav Mekhanoshin [Thu, 17 Mar 2022 22:46:01 +0000 (15:46 -0700)]
[AMDGPU] Add 2 gfx940 mfma tests. NFC.

2 years ago[Attributor] Remove more non-deterministic behavior and debug output
Johannes Doerfert [Thu, 17 Mar 2022 22:40:05 +0000 (17:40 -0500)]
[Attributor] Remove more non-deterministic behavior and debug output

2 years ago[OpenMP][FIX] Initialize member to avoid undefined value in debug output
Johannes Doerfert [Thu, 17 Mar 2022 22:39:25 +0000 (17:39 -0500)]
[OpenMP][FIX] Initialize member to avoid undefined value in debug output

2 years ago[Attributor][FIX] Remove reference into map that might dangle
Johannes Doerfert [Thu, 17 Mar 2022 22:37:15 +0000 (17:37 -0500)]
[Attributor][FIX] Remove reference into map that might dangle

The reference was taken and the map was modified after. This can (and
did) lead to dangling pointers and all sorts of problems afterwards.

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