platform/upstream/llvm.git
2 years ago[PowerPC][NFC] Add atomic alignments and ops tests for powerpc
Kai Luo [Fri, 18 Mar 2022 04:57:55 +0000 (12:57 +0800)]
[PowerPC][NFC] Add atomic alignments and ops tests for powerpc

PowerPC is lacking tests checking `_Atomic` alignment in cfe. Adding these tests since we're going to make change to align with gcc on Linux.

Reviewed By: hubert.reinterpretcast, jsji

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

2 years ago[X86] Set Int_MemBarrier as a meta-instruction
Shengchen Kan [Fri, 18 Mar 2022 05:11:39 +0000 (13:11 +0800)]
[X86] Set Int_MemBarrier as a meta-instruction

Compiler only emits a comment for `Int_MemBarrier`, so it should
be marked as a meta-instruction, which can help improve accuracy
of debug location.

Reviewed By: pengfei

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

2 years ago[Codegen][tablgen][NFC] Allow meta instruction to be target dependent
Shengchen Kan [Fri, 18 Mar 2022 05:07:13 +0000 (13:07 +0800)]
[Codegen][tablgen][NFC] Allow meta instruction to be target dependent

An instruction is a meta-instruction if it doesn't produce any output
in the form of executable instructions. So in the concept, a
meta-instruction does not have to be target independent.

Before this patch, `isMetaInstruction` is implemented by checking the
opcode of the instruction, add we have no way to add target dependent
opcode to the list, which does not make sense.

After this patch, a bit `isMeta` is added for class `Instruction` in
tablegen, which is used to indicate whether it's a meta instruction.

Reviewed By: pengfei

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

2 years ago[InstCombine] Sink instructions with multiple users in a successor block.
Andrew Wei [Fri, 18 Mar 2022 03:49:59 +0000 (11:49 +0800)]
[InstCombine] Sink instructions with multiple users in a successor block.

This patch tries to sink instructions when they are only used in a successor block.

This is a further enhancement patch based on Anna's commit:
D109700, which allows sinking an instruction having multiple uses in a single user.

In this patch, sink instructions with multiple users in a single successor block will be supported.
It could fix a known issue from rust:
  https://github.com/rust-lang/rust/issues/51346#issuecomment-394443610

Reviewed By: nikic, reames

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

2 years ago[libc][NFC] Add the platform independent file target only if mutex is available.
Siva Chandra Reddy [Thu, 17 Mar 2022 20:34:22 +0000 (20:34 +0000)]
[libc][NFC] Add the platform independent file target only if mutex is available.

The platform independent file implementation is not an entrypoint so it
cannot be excluded via the entrypoints.txt file. Hence, we need a
special treatment to exclude it from the build.

Reviewed By: michaelrj

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

2 years agoReland "Load pass plugins during option processing, so that plugin options are regist...
Wael Yehia [Mon, 14 Mar 2022 02:16:21 +0000 (22:16 -0400)]
Reland "Load pass plugins during option processing, so that plugin options are registered and live."

Fix Polly failures.

Reviewed By: mehdi_amini, Meinersbur

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

2 years ago[AMDGPU] Use COPY_TO_REGCLASS for buffer_atomic_cmpswap selection
Abinav Puthan Purayil [Thu, 17 Mar 2022 17:37:13 +0000 (23:07 +0530)]
[AMDGPU] Use COPY_TO_REGCLASS for buffer_atomic_cmpswap selection

GlobalISel was selecting the av_* regclass for some cases.

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

2 years ago[libc++][ranges] Implement changes to reverse_iterator from One Ranges Proposal.
Konstantin Varlamov [Fri, 18 Mar 2022 02:57:39 +0000 (19:57 -0700)]
[libc++][ranges] Implement changes to reverse_iterator from One Ranges Proposal.

Changes in [P0896](https://wg21.link/p0896):
- add `disable_sized_sentinel_for`;
- add `iter_move` and `iter_swap`;
- add a `requires` clause to the `operator->`;
- add `iterator_concept`;
- check that the `Iterator` template parameter is a bidirectional
  iterator;
- add constraints to all comparison operators;
- change the definitions of `iterator_category`, `value_type`,
  `difference_type` and `reference` (changes to `iterator_category` were
  already implemented).

Also add a few forgotten things to the `reverse_iterator` synopsis
(notably the spaceship operator).

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

2 years agoCorrect and complete dependency sets after 74b411d38c48513a125e67e049aca55452b9e855
Sterling Augustine [Fri, 18 Mar 2022 02:31:00 +0000 (19:31 -0700)]
Correct and complete dependency sets after 74b411d38c48513a125e67e049aca55452b9e855

Prior to this change the __support_cpp_array_ref target's only dependency was libc_root.
but it #includes "TypeTraits.h" and Array.h for that matter.

These dependencies matter when building in distributed build systems and the relevant
files must be know for the distributed build to ship them to the executor.

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

2 years ago[RISCV] Fix buildbot breakage by explicitly instantiating templates
Jessica Clarke [Fri, 18 Mar 2022 02:16:52 +0000 (02:16 +0000)]
[RISCV] Fix buildbot breakage by explicitly instantiating templates

RISCVISelDAGToDAG's selectImm uses RISCVTargetLowering::getAddr
(specifically the ConstantPoolSDNode) as of 41454ab25645 ("[RISCV] Use
constant pool for large integers"), but nothing explicitly instantiates
any of the templates, the only reason they exist is because of the
various lowering methods in RISCVISelLowering.cpp that themselves use
the methods. However, with inlining, those can end up not existing as
real functions and thus not be exported, leading to link errors. Up
until now this hasn't happened, but for whatever reason D121654 has
triggered this on the sanitizer-ppc64be-linux buildbot, giving:

  ../../../../lib/libLLVMRISCVCodeGen.a(RISCVISelDAGToDAG.cpp.o): In function `selectImm(llvm::SelectionDAG*, llvm::SDLoc const&, llvm::MVT, long, llvm::RISCVSubtarget const&)':
  RISCVISelDAGToDAG.cpp:(.text._ZL9selectImmPN4llvm12SelectionDAGERKNS_5SDLocENS_3MVTElRKNS_14RISCVSubtargetE+0x3d8): undefined reference to `llvm::SDValue llvm::RISCVTargetLowering::getAddr<llvm::ConstantPoolSDNode>(llvm::ConstantPoolSDNode*, llvm::SelectionDAG&, bool) const'
  collect2: error: ld returned 1 exit status

Fix this by explicitly instantiating getAddr in its four different forms
so separate translation units can reliably use it.

Fixes: 41454ab25645 ("[RISCV] Use constant pool for large integers")

2 years agoFix invalid preprocessor directive.
Sterling Augustine [Fri, 18 Mar 2022 02:12:48 +0000 (19:12 -0700)]
Fix invalid preprocessor directive.

2 years agoUpdate llvm-config.h.cmake for LLVM_UNREACHABLE_OPTIMIZE
Sterling Augustine [Fri, 18 Mar 2022 02:04:42 +0000 (19:04 -0700)]
Update llvm-config.h.cmake for LLVM_UNREACHABLE_OPTIMIZE

2 years ago[LoongArch] Add some blank lines to make .td more tidy. NFC
Weining Lu [Fri, 18 Mar 2022 01:49:16 +0000 (09:49 +0800)]
[LoongArch] Add some blank lines to make .td more tidy. NFC

2 years agoRevert "[SLP] Fix lookahead operand reordering for splat loads." due to build failures
Vasileios Porpodas [Fri, 18 Mar 2022 01:22:04 +0000 (18:22 -0700)]
Revert "[SLP] Fix lookahead operand reordering for splat loads." due to build failures

This reverts commit 5efa78985bf5cbba1c4346ba41a16435fc516446.

2 years ago[SLP][NFC] Added a test for a followup patch that enables handling splat loads with...
Vasileios Porpodas [Wed, 16 Mar 2022 22:45:51 +0000 (15:45 -0700)]
[SLP][NFC] Added a test for a followup patch that enables handling splat loads with uses.

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