platform/upstream/llvm.git
3 years ago[libomptarget][amdgpu][nfc] Drop dead signal pool setup
Jon Chesterfield [Thu, 22 Jul 2021 09:29:30 +0000 (10:29 +0100)]
[libomptarget][amdgpu][nfc] Drop dead signal pool setup

This class is instantiated once in rtl.cpp before hsa_init is
called. The hsa_signal_create call therefore fails leaving the pool empty.

This signal pool is a legacy from ATMI where it was constructed after hsa_init.
Moving the state into the rtl.cpp global class disabled the initial populating
of the pool without noticeably changing performance. Just rechecked with a fix
that allocates the signals after hsa_init and that also doesn't noticeably
change performance.

This patch therefore drops the initialisation. Only change from main is to
drop a DEBUG_PRINT statement that would say the pool initial size is zero.

Reviewed By: jdoerfert

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

3 years ago[clang] Use i64 for the !srcloc metadata on asm IR nodes.
Simon Tatham [Thu, 22 Jul 2021 09:08:06 +0000 (10:08 +0100)]
[clang] Use i64 for the !srcloc metadata on asm IR nodes.

This is part of a patch series working towards the ability to make
SourceLocation into a 64-bit type to handle larger translation units.

!srcloc is generated in clang codegen, and pulled back out by llvm
functions like AsmPrinter::emitInlineAsm that need to report errors in
the inline asm. From there it goes to LLVMContext::emitError, is
stored in DiagnosticInfoInlineAsm, and ends up back in clang, at
BackendConsumer::InlineAsmDiagHandler(), which reconstitutes a true
clang::SourceLocation from the integer cookie.

Throughout this code path, it's now 64-bit rather than 32, which means
that if SourceLocation is expanded to a 64-bit type, this error report
won't lose half of the data.

The compiler will tolerate both of i32 and i64 !srcloc metadata in
input IR without faulting. Test added in llvm/MC. (The semantic
accuracy of the metadata is another matter, but I don't know of any
situation where that matters: if you're reading an IR file written by
a previous run of clang, you don't have the SourceManager that can
relate those source locations back to the original source files.)

Original version of the patch by Mikhail Maltsev.

Reviewed By: dexonsmith

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

3 years ago[AArch64] Add and update reduction and shuffle costs. NFC
David Green [Thu, 22 Jul 2021 09:22:42 +0000 (10:22 +0100)]
[AArch64] Add and update reduction and shuffle costs. NFC

3 years agosanitizers: increase .clang-format columns to 100
Dmitry Vyukov [Wed, 21 Jul 2021 13:39:01 +0000 (15:39 +0200)]
sanitizers: increase .clang-format columns to 100

The current (default) line length is 80 columns.
That's based on old hardware and historical conventions.
There are no existent reasons to keep line length that small,
especially provided that our coding style uses quite lengthy
identifiers. The Linux kernel recently switched to 100,
let's start with 100 as well.

This change intentionally does not re-format code.
Re-formatting is intended to happen incrementally,
or on dir-by-dir basis separately.

Reviewed By: vitalybuka, melver, MaskRay

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

3 years ago[RISCV] Fix a crash when lowering split float arguments
Fraser Cormack [Thu, 20 May 2021 16:28:45 +0000 (17:28 +0100)]
[RISCV] Fix a crash when lowering split float arguments

Lowering certain float vectors without legal vector types could cause a
crash due to a bad interaction between passing floats via GPRs and
argument splitting. Split vector floats appear just like scalar floats.
Under certain situations we choose to pass these float arguments via
GPRs and use an XLenVT location and set the 'BCvt' info to track how
they must be converted back to floating-point values. However, later
logic for handling split arguments may take over, in which case we lose
the previous information and set the 'Indirect' info, thus incorrectly
lowering to integer types.

I don't believe that we would have come across the notion of split
floating-point arguments before. This patch addresses the issue by
updating the lowering so that split arguments are only passed indirectly
when they are scalar integer types.

This has some change to how we lower some larger illegal float vectors,
as can be seen in 'fastcc-float.ll' where the vector is now passed
partly in registers and partly on the stack.

Reviewed By: luismarques

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

3 years ago[RISCV] Lower more BUILD_VECTOR sequences to RVV's VID
Fraser Cormack [Fri, 16 Jul 2021 14:12:46 +0000 (15:12 +0100)]
[RISCV] Lower more BUILD_VECTOR sequences to RVV's VID

This relands a6ca88e908b5befcd9b0f8c8cb40f53095cc17bc which was originally
reverted due to overflow bugs in e3fa2b1eab60342dc882b7b888658b03c472fa2b.

This patch teaches the compiler to identify a wider variety of
`BUILD_VECTOR`s which form integer arithmetic sequences, and to lower
them to `vid.v` with modifications for non-unit steps and non-zero
addends.

The sequences handled by this optimization must either be monotonically
increasing or decreasing. Consecutive elements holding the same value
indicate a fractional step which, while simple mathematically,
becomes more complex to handle both in the realm of lossy integer
division and in the presence of `undef`s.

For example, a common "interleaving" shuffle index will be lowered by
LLVM to both `<0,u,1,u,2,...>` and `<u,0,u,1,u,...>` `BUILD_VECTOR`
nodes. Either of these would ideally be lowered to `vid.v` shifted right
by 1. Detection of this sequence in presence of general `undef` values
is more complicated, however: `<0,u,u,1,>` could match either
`<0,0,0,1,>` or `<0,0,1,1,>` depending on later values in the sequence.
Both are possible, so backtracking or multiple passes is inevitable.

Sticking to monotonic sequences keeps the logic simpler as it can be
done in one pass. Fractional steps will likely be a separate
optimization in a future patch.

Reviewed By: craig.topper

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

3 years ago[clang-tidy] Fix crash and handle AttributedType in 'bugprone-easily-swappable-parame...
Whisperity [Tue, 20 Jul 2021 14:05:54 +0000 (16:05 +0200)]
[clang-tidy] Fix crash and handle AttributedType in 'bugprone-easily-swappable-parameters'

@vabridgers identified a way to crash the check by running on code that
involve `AttributedType`s. This patch fixes the check to first and
foremost not crash, but also improves the logic handling qualifiers.

If the types contain any additional (not just CVR) qualifiers that are
not the same, they will not be deemed mixable. The logic for CVR-Mixing
and the `QualifiersMix` check option remain unchanged.

Reviewed By: aaron.ballman, vabridgers

Differential Revision: http://reviews.llvm.org/D106361

3 years agoRead and write a LC_NOTE "addrable bits" for addressing mask
Jason Molenda [Thu, 22 Jul 2021 08:02:54 +0000 (01:02 -0700)]
Read and write a LC_NOTE "addrable bits" for addressing mask

This patch adds code to process save-core for Mach-O files which
embeds an "addrable bits" LC_NOTE when the process is using a
code address mask (e.g. AArch64 v8.3 with ptrauth aka arm64e).
Add code to ObjectFileMachO to read that LC_NOTE from corefiles,
and ProcessMachCore to set the process masks based on it when reading
a corefile back in.

Also have "process status --verbose" print the current address masks
that lldb is using internally to strip ptrauth bits off of addresses.

Differential Revision: https://reviews.llvm.org/D106348
rdar://68630113

3 years ago[llvm][tools] Hide remaining unrelated llvm- tool options
Timm Bäder [Wed, 21 Jul 2021 10:03:05 +0000 (12:03 +0200)]
[llvm][tools] Hide remaining unrelated llvm- tool options

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

3 years ago[clangd] Ensure Ref::Container refers to an indexed symbol
Nathan Ridge [Tue, 29 Jun 2021 05:54:12 +0000 (01:54 -0400)]
[clangd] Ensure Ref::Container refers to an indexed symbol

Fixes https://github.com/clangd/clangd/issues/806

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

3 years ago[llvm-mc-assemble-fuzzer] Initialize MCTargetOptions.
Hsiangkai Wang [Wed, 21 Jul 2021 02:27:35 +0000 (10:27 +0800)]
[llvm-mc-assemble-fuzzer] Initialize MCTargetOptions.

When run the command in the llvm-mc-assemble-fuzzer document,

```
llvm-mc-fuzzer --triple=aarch64-linux-gnu --fuzzer-args -max_len=4
```

it triggers the following assertion:

```
llvm-mc-assemble-fuzzer:
llvm-project/llvm/lib/MC/MCTargetOptionsCommandFlags.cpp:38:
bool llvm::mc::getRelaxAll(): Assertion `RelaxAllView &&
"RegisterMCTargetOptionsFlags not created."' failed.
```

It is caused by no global RegisterMCTargetOptionsFlags object to initialize
the MC target options.

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

3 years ago[AArch64][SVE] Handle svbool_t VLST <-> VLAT/GNUT conversion
Jun Ma [Mon, 19 Jul 2021 13:10:17 +0000 (21:10 +0800)]
[AArch64][SVE] Handle svbool_t VLST <-> VLAT/GNUT conversion

According to https://godbolt.org/z/q5rME1naY and acle, we found that
there are different SVE conversion behaviours between clang and gcc. It turns
out that llvm does not handle SVE predicates width properly.

This patch 1) checks SVE predicates width rightly with svbool_t type.
2) removes warning on svbool_t VLST <-> VLAT/GNUT conversion.
3) disables VLST <-> VLAT/GNUT conversion between SVE vectors and predicates
due to different width.

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

3 years ago[Attributor][FIX] Improve call graph updating
Johannes Doerfert [Fri, 16 Jul 2021 19:14:37 +0000 (14:14 -0500)]
[Attributor][FIX] Improve call graph updating

If we remove a non-intrinsic instruction we need to tell the (old) call
graph about it. This caused problems with some features down the line as
they allowed to removed calls more aggressively.

3 years ago[Attributor][FIX] Do not introduce multiple instances of SSA values
Johannes Doerfert [Wed, 21 Jul 2021 20:11:44 +0000 (15:11 -0500)]
[Attributor][FIX] Do not introduce multiple instances of SSA values

If we have a recursive function we could create multiple instantiations
of an SSA value, one per recursive invocation of the function. This is a
problem as we use SSA value equality in various places. The basic idea
follows from this test:

```
static int r(int c, int *a) {
  int X;
  return c ? r(false, &X) : a == &X;
}

int test(int c) {
  return r(c, undef);
}
```

If we look through the argument `a` we will end up with `X`. Using SSA
value equality we will fold `a == &X` to true and return true even
though it should have been false because `a` and `&X` are from different
instantiations of the function.

Various tests for this  have been placed in value-simplify-instances.ll
and this commit fixes them all by avoiding to produce simplified values
that could be non-unique at runtime. Thus, the result of a simplify
value call will always be unique at runtime or the original value, both
do not allow to accidentally compare two instances of a value with each
other and conclude they are equal statically (pointer equivalence) while
they are unequal at runtime.

3 years ago[Attributor] Improve the Attributor::getAssumedConstant interface
Johannes Doerfert [Thu, 22 Jul 2021 02:58:00 +0000 (21:58 -0500)]
[Attributor] Improve the Attributor::getAssumedConstant interface

Similar to Attributor::getAssumedSimplified we need to allow IRPs
directly to get the right simplification callback (and context).

3 years ago[RegisterCoalescer] Make resolveConflicts aware of earlyclobber
ShihPo Hung [Thu, 22 Jul 2021 03:51:18 +0000 (11:51 +0800)]
[RegisterCoalescer] Make resolveConflicts aware of earlyclobber

Prior to this patch, it skipped the instruction defining VNI when checking if the tainted lanes are used.
In the given example, VRGATHER is an illegal instruction because its DstReg overlaps with SrcReg.

Therefore we need to check the defining instruction as well when there is an earlyclobber constraint.

Reviewed By: qcolombet

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

3 years ago[Attributor][NFC] Precommit tests exposing a conceptual simplification problem
Johannes Doerfert [Wed, 21 Jul 2021 04:00:32 +0000 (23:00 -0500)]
[Attributor][NFC] Precommit tests exposing a conceptual simplification problem

Value simplification works under the implicit assumption that two SSA
values (`llvm::Value`) that are pointer equal are also equal at runtime.
This is mostly true except for values that are instantiated multiple
times. These test cases expose the problems we currently have when it
comes to recursion and multiple instances of values.

3 years ago[OpenMP][FIX] Use name + type checks not only name checks for calls
Johannes Doerfert [Tue, 20 Jul 2021 03:31:51 +0000 (22:31 -0500)]
[OpenMP][FIX] Use name + type checks not only name checks for calls

A call that is analyzed in an optimization needs to be verified against
the name and type of the runtime function to avoid that we look at
arguments that do not exist (anymore). This can happen if the signature
was rewritten. Since we will not set RFI.Declaration if the type doesn't
match we can use it (if it's not null) to determine if the signature is
as expected.

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

3 years ago[Attributor][NFC] Clang format
Johannes Doerfert [Thu, 22 Jul 2021 03:01:02 +0000 (22:01 -0500)]
[Attributor][NFC] Clang format

3 years ago[mlir] Fix various issues in TimerImpl.
rdzhabarov [Thu, 22 Jul 2021 00:06:43 +0000 (00:06 +0000)]
[mlir] Fix various issues in TimerImpl.

More specifically:
1) Use variable after move.
2) steady_clock needs to be used for measuring time intervals, but not the system_clock.

Reviewed By: mehdi_amini

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

3 years ago[MLIR] Fix affine.for empty loop body folder
Uday Bondhugula [Thu, 22 Jul 2021 01:39:53 +0000 (07:09 +0530)]
[MLIR] Fix affine.for empty loop body folder

Fix affine.for empty loop body folder in the presence of yield values.
The existing pattern ignored iter_args/yield values and thus crashed
when yield values had uses.

Reviewed By: mehdi_amini

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

3 years ago[RISCV] Optimize multiplication in the zba extension with SH*ADD
Ben Shi [Thu, 22 Jul 2021 02:26:52 +0000 (10:26 +0800)]
[RISCV] Optimize multiplication in the zba extension with SH*ADD

This patch make the following optimization.

(mul x, 3 * power_of_2) -> (SLLI (SH1ADD x, x), bits)
(mul x, 5 * power_of_2) -> (SLLI (SH2ADD x, x), bits)
(mul x, 9 * power_of_2) -> (SLLI (SH3ADD x, x), bits)

Reviewed By: craig.topper

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

3 years ago[AMDGPU] Add VReg_192/VReg_224 support for MIMG instructions
Carl Ritson [Thu, 22 Jul 2021 01:22:02 +0000 (10:22 +0900)]
[AMDGPU] Add VReg_192/VReg_224 support for MIMG instructions

Allow MIMG instructions to be selected with 6/7 VGPRs for vaddr.
Previously these were rounded up to VReg_256 this saves VGPRs.

Reviewed By: foad

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

3 years ago[mlir] Extend scf pipeling to support loop carried dependencies
thomasraoux [Mon, 19 Jul 2021 23:05:23 +0000 (16:05 -0700)]
[mlir] Extend scf pipeling to support loop carried dependencies

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

3 years ago[Clang][RISCV] Implement vsoxseg and vsuxseg.
Hsiangkai Wang [Tue, 8 Jun 2021 06:29:40 +0000 (14:29 +0800)]
[Clang][RISCV] Implement vsoxseg and vsuxseg.

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

3 years ago[Clang][RISCV] Implement vssseg.
Hsiangkai Wang [Tue, 8 Jun 2021 05:29:51 +0000 (13:29 +0800)]
[Clang][RISCV] Implement vssseg.

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

3 years ago[Clang][RISCV] Implement vsseg.
Hsiangkai Wang [Tue, 8 Jun 2021 05:09:07 +0000 (13:09 +0800)]
[Clang][RISCV] Implement vsseg.

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

3 years ago[Clang][RISCV] Add vloxseg and vluxseg test cases.
Hsiangkai Wang [Mon, 7 Jun 2021 13:53:49 +0000 (21:53 +0800)]
[Clang][RISCV] Add vloxseg and vluxseg test cases.

3 years ago[Clang][RISCV] Implement vloxseg and vluxseg.
Hsiangkai Wang [Mon, 7 Jun 2021 13:53:37 +0000 (21:53 +0800)]
[Clang][RISCV] Implement vloxseg and vluxseg.

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

3 years ago[Clang][RISCV] Implement vlsseg.
Hsiangkai Wang [Mon, 7 Jun 2021 09:54:00 +0000 (17:54 +0800)]
[Clang][RISCV] Implement vlsseg.

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

3 years ago[AMDGPU] Allow frontends to disable null export for pixel shaders
Carl Ritson [Thu, 22 Jul 2021 00:59:35 +0000 (09:59 +0900)]
[AMDGPU] Allow frontends to disable null export for pixel shaders

Disable null export (for kills) when a frontend defines a pixel
shader as not exporting using amdgpu-color-export and
amdgpu-depth-export function attrbutes.
This allows the generation of export free pixel shaders.

Reviewed By: foad

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

3 years ago[OpenMP] Strip NoInline from known OpenMP runtime functions
Joseph Huber [Wed, 21 Jul 2021 19:52:04 +0000 (15:52 -0400)]
[OpenMP] Strip NoInline from known OpenMP runtime functions

This patch strips the NoInline attribute from known OpenMP runtime functions.
This is done so that we can denote certain runtime functions as NoInline to
ensure their call sites are intact so they can be checked by OpenMPOpt. We
don't wan't this noinline attribute to remain for any functions after OpenMPOpt
has been run however.

Reviewed By: jdoerfert

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

3 years ago[OpenMP] Fold `__kmpc_is_generic_main_thread_id` if possible
Joseph Huber [Tue, 20 Jul 2021 21:55:08 +0000 (17:55 -0400)]
[OpenMP] Fold `__kmpc_is_generic_main_thread_id` if possible

This patch adds the ability to fold `__kmpc_is_generic_main_thread_id` if we
know for a fact that it is executed by the initial thread using
AAExecutionDomain. This combined with folding `__kmpc_is_spmd_exec_mode` will
allow us to fully fold `__kmpc_is_generic_main_thread`.

Depends on D106438 D106437

Reviewed By: jdoerfert

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

3 years ago[OpenMP] Add an option to disable function internalization
Joseph Huber [Wed, 21 Jul 2021 12:57:34 +0000 (08:57 -0400)]
[OpenMP] Add an option to disable function internalization

Function internalization can sometimes occur in situations where we want to
keep the call sites intact. This patch adds an option to disable function
internalization and prevents the device runtime from being internalized while
creating the bitcode library.

Reviewed By: jdoerfert

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

3 years ago[Libomptarget] Introduce new main thread ID runtime function
Joseph Huber [Tue, 20 Jul 2021 20:07:52 +0000 (16:07 -0400)]
[Libomptarget] Introduce new main thread ID runtime function

This patch introduces `__kmpc_is_generic_main_thread_id` which splits the old
comparison into its own runtime function. The purpose of this is so we can fold
this part independently, so when both this and `is_spmd_mode` are folded the
final function will be folded as well.

Reviewed By: jdoerfert

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

3 years ago[OpenMP] Add new execution mode for SPMD execution with Generic semantics
Joseph Huber [Wed, 21 Jul 2021 16:48:39 +0000 (12:48 -0400)]
[OpenMP] Add new execution mode for SPMD execution with Generic semantics

Qualified kernels can be transformed from generic-mode to SPMD mode using an
optimization in OpenMPOpt. This patch introduces a new execution mode to
indicate kernels that have been transformed from generic-mode to SPMD-mode.
These kernels have SPMD-mode execution, but need generic-mode semantics for
scheduling the blocks and threads. Without this far too few blocks will be
scheduled for a generic region as SPMD mode expects the trip count to be
divided by the number of threads.

Reviewed By: ggeorgakoudis

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

3 years ago[OpenMP] Change `__kmpc_free_shared` to include the paired allocation size
Joseph Huber [Wed, 21 Jul 2021 21:13:46 +0000 (17:13 -0400)]
[OpenMP] Change `__kmpc_free_shared` to include the paired allocation size

This patch changes `__kmpc_free_shared` to take an additional argument
corresponding to the associated allocation's size. This makes it easier to
implement the allocator in the runtime.

Reviewed By: jdoerfert

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

3 years agoRe-re-revert "[ORC][ORC-RT] Add initial native-TLV support to MachOPlatform."
Lang Hames [Thu, 22 Jul 2021 00:45:24 +0000 (10:45 +1000)]
Re-re-revert "[ORC][ORC-RT] Add initial native-TLV support to MachOPlatform."

This reverts commit 6b2a96285b9bbe92d2c5e21830f21458f8be976d.

The ccache builders are still failing. Looks like they need to be updated to
get the llvm-zorg config change in 490633945677656ba75d42ff1ca9d4a400b7b243.

I'll re-apply this as soon as the builders are updated.

3 years agoFix assigned-but-unused (except in an assert) warning with a void cast
David Blaikie [Mon, 19 Jul 2021 04:44:08 +0000 (21:44 -0700)]
Fix assigned-but-unused (except in an assert) warning with a void cast

3 years ago[libc] Rename FEnv.h and refactor subsequent files
Hedin Garca [Wed, 21 Jul 2021 18:12:29 +0000 (18:12 +0000)]
[libc] Rename FEnv.h and refactor subsequent files

Because Windows's pathnames are not case sensitive,
to avoid include conflicts between our header file FEnv.h and the
one from the C Standard library, <fenv.h>, the prior file was renamed.
The motive for the relabel came to fix this include error in
TestHelpers.cpp since a conflict arose with a file in the same
directory when #include <fenv.h> was being used.

Reviewed By: sivachandra, aeubanks

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

3 years ago[NFC] Code cleanups in InlineCost.cpp.
Jacob Hegna [Fri, 16 Jul 2021 21:25:33 +0000 (21:25 +0000)]
[NFC] Code cleanups in InlineCost.cpp.

 - annotate const functions with "const"
 - replace C-style casts with static_cast

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

3 years agoRe-re-apply "[ORC][ORC-RT] Add initial native-TLV support to MachOPlatform."
Lang Hames [Wed, 21 Jul 2021 07:38:35 +0000 (17:38 +1000)]
Re-re-apply "[ORC][ORC-RT] Add initial native-TLV support to MachOPlatform."

This reapplies commit a7733e9556b5a6334c910f88bcd037e84e17e3fc ("Re-apply
[ORC][ORC-RT] Add initial native-TLV support to MachOPlatform."), and
d4abdefc998a1ee19d5edc79ec233774cbf64f6a ("[ORC-RT] Rename macho_tlv.x86-64.s
to macho_tlv.x86-64.S (uppercase suffix)").

These patches were reverted in 48aa82cacbff10e1c5395a03f86488bf449ba4da while I
investigated bot failures (e.g.
https://lab.llvm.org/buildbot/#/builders/109/builds/18981). The fix was to
disable building of the ORC runtime on buliders using ccache (which is the same
fix used for other compiler-rt projects containing assembly code). This fix was
commited to llvm-zorg in 490633945677656ba75d42ff1ca9d4a400b7b243.

3 years ago[WebAssembly] Replace @llvm.wasm.popcnt with @llvm.ctpop.v16i8
Thomas Lively [Wed, 21 Jul 2021 23:45:54 +0000 (16:45 -0700)]
[WebAssembly] Replace @llvm.wasm.popcnt with @llvm.ctpop.v16i8

Use the standard target-independent intrinsic to take advantage of standard
optimizations.

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

3 years ago[mlir] Add workaround for false positive in -Wfree-nonheap-object
Fangrui Song [Wed, 21 Jul 2021 23:16:20 +0000 (16:16 -0700)]
[mlir] Add workaround for false positive in -Wfree-nonheap-object

Restore 499571ea835daf786626a0db1e12f890b6cd8f8d
reverted by 0082764605cc0e7e0363a41ffa77d214c3157aa6.

A compiler slightly older than
"[clang][Sema] removes -Wfree-nonheap-object reference param false positive"
may report the false positive.
We need to retain the workaround a bit longer so that such compilers
can be used to compile MLIR in a warning-free way.

3 years ago[WebAssembly] Remove clang builtins for extract_lane and replace_lane
Thomas Lively [Wed, 21 Jul 2021 23:11:00 +0000 (16:11 -0700)]
[WebAssembly] Remove clang builtins for extract_lane and replace_lane

These builtins were added to capture the fact that the underlying Wasm
instructions return i32s and implicitly sign or zero extend the extracted lanes
in the case of the i8x16 and i16x8 variants. But we do sufficient optimizations
during code gen that these low-level details do not need to be exposed to users.

This commit replaces the use of the builtins in wasm_simd128.h with normal
target-independent vector code. As a result, we can switch the relevant
intrinsics to use functions rather than macros and can use more user-friendly
return types rather than trying to precisely expose the underlying Wasm types.
Note, however, that the generated LLVM IR is no different after this change.

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

3 years agoRemove `LIBC_INSTALL_PREFIX`
John Ericson [Sat, 3 Jul 2021 05:18:37 +0000 (05:18 +0000)]
Remove `LIBC_INSTALL_PREFIX`

This matches the decision made in D99697.

It also shouldn't reintroduce the issue fixed in D99636.

The variable was originally introduced in
b22f448c21e718a3b6219df89169f38d436189c6 but is not essential to that
change.

Once we finish adding `GnuInstallDirs` support in D100810 and D99484,
setting `CMAKE_INSTALL_LIBDIR` would also work to change the
installation directory (though for more than libc).

`GnuInstallDirs` support also brings up an issue which is avoided if
variables like `LIBC_INSTALL_PREFIX` don't exist. Because the
`GnuInstallDirs` variables can be absolute paths, it is a bit unclear
how the per-project prefixes would work: does the project-agnostic
role-specific variable (e.g. `CMAKE_INSTALL_LIBDIR`), or project-specfic
role-agnostic (e.g. `LIBC_INSTALL_PREFIX`) take priority? Each is more
specific than the other on one axis, but not the other.

Reviewed By: phosek

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

3 years agoAdd verifier for insert/extract element/value on type match between container and...
Mehdi Amini [Wed, 21 Jul 2021 22:28:45 +0000 (22:28 +0000)]
Add verifier for insert/extract element/value on type match between container and inserted/extracted value, and fix vector.shuffle lowering

Reviewed By: nicolasvasilache

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

3 years agoPrevent dead uses in register coalescer after rematerialization
Stanislav Mekhanoshin [Tue, 20 Jul 2021 20:53:14 +0000 (13:53 -0700)]
Prevent dead uses in register coalescer after rematerialization

The coalescer does not check if register uses are available
at the point of rematerialization. If it attempts to rematerialize
an instruction with such uses it can end up with use without a def.

LiveRangeEdit does such check during rematerialization, so just
call LiveRangeEdit::allUsesAvailableAt() to avoid the problem.

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

3 years ago[mlir][LLVM] Revert bareptr calling convention handling as an argument materialization.
Nicolas Vasilache [Wed, 21 Jul 2021 22:01:51 +0000 (22:01 +0000)]
[mlir][LLVM] Revert bareptr calling convention handling as an argument materialization.

Type conversion and argument materialization are context-free: there is no available information on which op / branch is currently being converted.
As a consequence, bare ptr convention cannot be handled as an argument materialization: it would apply irrespectively of the parent op.
This doesn't typecheck in the case of non-funcOp and we would see cases where a memref descriptor would be inserted in place of the pointer in another memref descriptor.

For now the proper behavior is to revert to a specific BarePtrFunc implementation and drop the blanket argument materialization logic.

This reverts the relevant piece of the conversion to LLVM to what it was before https://reviews.llvm.org/D105880 and adds a relevant test and documentation to avoid the mistake by whomever attempts this again in the future.

Reviewed By: arpith-jacob

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

3 years ago[AArch64][GlobalISel] Change | -> || in an if
Jessica Paquette [Wed, 21 Jul 2021 21:57:31 +0000 (14:57 -0700)]
[AArch64][GlobalISel] Change | -> || in an if

I wrote the wrong type of OR by mistake.

3 years ago[gn build] Port 74fd3cb8cd3e
LLVM GN Syncbot [Wed, 21 Jul 2021 21:45:33 +0000 (21:45 +0000)]
[gn build] Port 74fd3cb8cd3e

3 years ago[AMDGPU] Mark relevant rematerializable VOP3 instructions
Stanislav Mekhanoshin [Thu, 15 Jul 2021 23:17:02 +0000 (16:17 -0700)]
[AMDGPU] Mark relevant rematerializable VOP3 instructions

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

3 years ago[LLDB][GUI] Add required property to text fields
Omar Emara [Wed, 21 Jul 2021 21:39:59 +0000 (14:39 -0700)]
[LLDB][GUI] Add required property to text fields

This patch adds a required property to text fields and their
derivatives. Additionally, the Process Name and PID fields in the attach
form were marked as required.

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

3 years ago[LLDB][GUI] Add Process Plugin Field
Omar Emara [Wed, 21 Jul 2021 21:34:40 +0000 (14:34 -0700)]
[LLDB][GUI] Add Process Plugin Field

This patch adds a new Process Plugin Field. It is a choices field that
lists all the available process plugins and can retrieve the name of the
selected plugin or an empty string if the default is selected.

The Attach form now uses that field instead of manually creating a
choices field.

Reviewed By: clayborg

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

3 years ago[libcxx][ranges] implements dangling, borrowed_iterator_t, borrowed_subrange_t
Christopher Di Bella [Thu, 8 Jul 2021 21:01:19 +0000 (21:01 +0000)]
[libcxx][ranges] implements dangling, borrowed_iterator_t, borrowed_subrange_t

* Implements part of P0896 'The One Ranges Proposal'
* Implements http://wg21.link/range.dangling

Reviewed By: zoecarver

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

3 years agoRevert "Add workaround for false positive in -Wfree-nonheap-object"
Christopher Di Bella [Wed, 21 Jul 2021 21:29:24 +0000 (21:29 +0000)]
Revert "Add workaround for false positive in -Wfree-nonheap-object"

This reverts commit 499571ea835daf786626a0db1e12f890b6cd8f8d.

3 years ago[clang][Sema] removes -Wfree-nonheap-object reference param false positive
Christopher Di Bella [Tue, 13 Jul 2021 02:02:17 +0000 (02:02 +0000)]
[clang][Sema] removes -Wfree-nonheap-object reference param false positive

Taking the address of a reference parameter might be valid, and without
CFA, false positives are going to be more trouble than they're worth.

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

3 years ago[AMDGPU] Mark relevant rematerializable VOP2 instructions
Stanislav Mekhanoshin [Thu, 15 Jul 2021 23:10:36 +0000 (16:10 -0700)]
[AMDGPU] Mark relevant rematerializable VOP2 instructions

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

3 years ago[llvm-diff] Check for recursive initialiers
Bill Wendling [Thu, 8 Jul 2021 09:08:45 +0000 (02:08 -0700)]
[llvm-diff] Check for recursive initialiers

We need to check for recursive initializers in the "ConstantStruct"
case.

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

3 years ago[ARM] Pass SelectionDAG to methods that dont require DCI. NFC
David Green [Wed, 21 Jul 2021 21:11:09 +0000 (22:11 +0100)]
[ARM] Pass SelectionDAG to methods that dont require DCI. NFC

In these methods DCI is never used, only the DAG from it. Pass the DAG
directly, cleaning up the code a little.

3 years ago[intel pt] fix builds
Walter Erquinigo [Wed, 21 Jul 2021 21:09:25 +0000 (14:09 -0700)]
[intel pt] fix builds

https://reviews.llvm.org/D105649 broke intel pt builds. Fortunately the
fix is super easy.

3 years ago[AMDGPU] Mark all relevant VOP1 instructions rematerializable
Stanislav Mekhanoshin [Tue, 13 Jul 2021 17:47:30 +0000 (10:47 -0700)]
[AMDGPU] Mark all relevant VOP1 instructions rematerializable

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

3 years ago[sanitizer] Place module_ctor/module_dtor in llvm.used
Fangrui Song [Wed, 21 Jul 2021 21:03:26 +0000 (14:03 -0700)]
[sanitizer] Place module_ctor/module_dtor in llvm.used

This removes an abuse of ELF linker behaviors while keeping Mach-O/COFF linker
behaviors unchanged.

ELF: when module_ctor is in a comdat, this patch removes reliance on a linker
abuse (an SHT_INIT_ARRAY in a section group retains the whole group) by using
SHF_GNU_RETAIN. No linker behavior difference when module_ctor is not in a comdat.

Mach-O: module_ctor gets `N_NO_DEAD_STRIP`. No linker behavior difference
because module_ctor is already referenced by a `S_MOD_INIT_FUNC_POINTERS`
section (GC root).

PE/COFF: no-op. SanitizerCoverage already appends module_ctor to `llvm.used`.
Other sanitizers: llvm.used for local linkage is not implemented in
`TargetLoweringObjectFileCOFF::emitLinkerDirectives` (once implemented or
switched to a non-local linkage, COFF can use module_ctor in comdat (i.e.
generalize ELF-specific rL301586)).

There is no object file size difference.

Reviewed By: vitalybuka

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

3 years ago[flang] Implement the runtime portion of the CSHIFT intrinsic
Peter Steinfeld [Mon, 19 Jul 2021 18:22:45 +0000 (11:22 -0700)]
[flang] Implement the runtime portion of the CSHIFT intrinsic

This change fixes a bug in  the runtime portion of the CSHIFT intrinsic
that happens when the value of the SHIFT argument is negative.

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

3 years ago[LLDB] Move Trace-specific classes into separate library
Alex Langford [Wed, 7 Jul 2021 18:51:16 +0000 (11:51 -0700)]
[LLDB] Move Trace-specific classes into separate library

These two classes, TraceSessionFileParser and ThreadPostMortemTrace,
seem to be useful primarily for tracing. Currently it looks like
intel-pt is the sole user of these, but that other tracing plugins could
be written in the future that take advantage of these. Unfortunately
with them in Target, there is a dependency on PluginProcessUtility. I'd
like to sever that dependency, so I moved them into a `TraceCommon`
plugin.

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

3 years ago[SimplifyCFG] Fix if conversion with opaque pointers
Nikita Popov [Wed, 21 Jul 2021 20:22:26 +0000 (22:22 +0200)]
[SimplifyCFG] Fix if conversion with opaque pointers

We need to make sure that the value types are the same. Otherwise
we both may not have the necessary dereferenceability implication,
nor can we directly form the desired select pattern.

Without opaque pointers this is enforced implicitly through the
pointer comparison.

3 years ago[SimplifyCFG] Regenerate test checks (NFC)
Nikita Popov [Wed, 21 Jul 2021 20:17:46 +0000 (22:17 +0200)]
[SimplifyCFG] Regenerate test checks (NFC)

3 years ago[AMDGPU] Move perfhint analysis
Stanislav Mekhanoshin [Thu, 8 Jul 2021 18:00:57 +0000 (11:00 -0700)]
[AMDGPU] Move perfhint analysis

This is SCC pass, moving it to the end of SCC PM saves one
Function PM. This needs the analysis to take into account
memory access width since it is now places after the
load/store optimizer (D105651).

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

3 years ago[AArch64][GlobalISel] Widen s2 and s4 G_IMPLICIT_DEF + G_FREEZE
Jessica Paquette [Wed, 21 Jul 2021 00:28:45 +0000 (17:28 -0700)]
[AArch64][GlobalISel] Widen s2 and s4 G_IMPLICIT_DEF + G_FREEZE

These had

```
.clampScalar(0, s1, 64)
.widenScalarToNextPow2(0, 8)
```

If you have s2 or s4, then `widenScalarToNextPow2` does nothing.

This changes the `widenScalarToNextPow2` rule to use s8 as the minimum type
instead, allowing us to correctly widen s2 and s4.

This does not impact s1, since it's marked as legal already.

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

3 years agoChange requires line from arm to aarch64 since the test uses arm64_32 which is AArch64.
Douglas Yung [Wed, 21 Jul 2021 19:51:05 +0000 (12:51 -0700)]
Change requires line from arm to aarch64 since the test uses arm64_32 which is AArch64.

3 years agoFix a bug in OptimizedStructLayout when filling gaps before
John McCall [Wed, 21 Jul 2021 19:39:42 +0000 (15:39 -0400)]
Fix a bug in OptimizedStructLayout when filling gaps before
fixed fields with highly-aligned flexible fields.

The code was not considering the possibility that aligning
the current offset to the alignment of a queue might push
us past the end of the gap.  Subtracting the offsets to
figure out the maximum field size for the gap then overflowed,
making us think that we had nearly unbounded space to fill.

Fixes PR 51131.

3 years ago[clang][sema] NFC, include DarwinSDKInfo header instead of using the forward reference
Alex Lorenz [Wed, 21 Jul 2021 19:46:11 +0000 (12:46 -0700)]
[clang][sema] NFC, include DarwinSDKInfo header instead of using the forward reference

This fixes a build issue with an older libc++ on some bots: clang-cmake-x86_64-avx2-linux and clang-ppc64be-linux

3 years ago[AMDGPU] Tune perfhint analysis to account access width
Stanislav Mekhanoshin [Thu, 8 Jul 2021 19:23:52 +0000 (12:23 -0700)]
[AMDGPU] Tune perfhint analysis to account access width

A function with less memory instructions but wider access
is the same as a function with more but narrower accesses
in terms of memory boundness. In fact the pass would give
different answers before and after vectorization without
this change.

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

3 years ago[RISCV] Cleanup comment around vector tail policy handling. NFC
Craig Topper [Wed, 21 Jul 2021 19:35:31 +0000 (12:35 -0700)]
[RISCV] Cleanup comment around vector tail policy handling. NFC

vmv.x.s and reductions don't ignore tail policy anymore.

3 years ago[SROA] avoid crash on memset with constant expression length
Sanjay Patel [Wed, 21 Jul 2021 19:15:47 +0000 (15:15 -0400)]
[SROA] avoid crash on memset with constant expression length

https://llvm.org/PR50888

3 years ago[HIP] Remove workaround in __clang_hip_runtime_wrapper.h
Yaxun (Sam) Liu [Thu, 15 Jul 2021 15:14:02 +0000 (11:14 -0400)]
[HIP] Remove workaround in __clang_hip_runtime_wrapper.h

Remove the workaround for -fopenmp in __clang_hip_runtime_wrapper.h
since it causes device functions in HIP wrapper headers disabled when
compiling HIP program with -fopenmp.

Reviewed by: Aaron Enye Shi, Jon Chesterfield

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

3 years agoRevert "[profile] Add binary id into profiles"
Gulfem Savrun Yeniceri [Wed, 21 Jul 2021 19:08:58 +0000 (19:08 +0000)]
Revert "[profile] Add binary id into profiles"

Revert "[profile] Change linkage type of a compiler-rt func"
This reverts commits f984ac2715f71c38a7872fa2c2ad535b3d4fa285 and
467c7191249b76abff33853b1692a77f327c2422 because it broke some builds.

3 years ago[Sanitizers][darwin] Fix a -Wcast-qual
Jon Roelofs [Wed, 21 Jul 2021 18:45:40 +0000 (11:45 -0700)]
[Sanitizers][darwin] Fix a -Wcast-qual

3 years ago[clang][darwin] add support for remapping macOS availability to Mac Catalyst availability
Alex Lorenz [Wed, 14 Jul 2021 04:55:08 +0000 (21:55 -0700)]
[clang][darwin] add support for remapping macOS availability to Mac Catalyst availability

This commit adds supports for clang to remap macOS availability attributes that have introduced,
deprecated or obsoleted versions to appropriate Mac Catalyst availability attributes. This
mapping is done using the version mapping provided in the macOS SDK, in the SDKSettings.json file.
The mappings in the SDKSettings json file will also be used in the clang driver for the driver
Mac Catalyst patch, and they could also be used in the future for other platforms as well.

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

3 years ago[AArch64] Regenerate and add more tests for i128 atomics.
Eli Friedman [Wed, 21 Jul 2021 18:21:21 +0000 (11:21 -0700)]
[AArch64] Regenerate and add more tests for i128 atomics.

Generating these tests unfortunately means a lot of junk, but it's hard
to write/update these tests by hand.

Added tests focus on atomic orderings for cmpxchg.

Actually writing out these tests showed some potentially dubious
results; we should probably consider using casp for 128-bit atomic
load/store/rmw.

3 years ago[Attributor] Preserve BBs and instructions added in AA manifests
Giorgis Georgakoudis [Tue, 13 Jul 2021 03:41:33 +0000 (20:41 -0700)]
[Attributor] Preserve BBs and instructions added in AA manifests

Manifesting AbstractAttributes may add new BBs in the IR. This patch provides an interface to register those BBs in the Attributor so that those BBs and containing instructions are not deleted as dead.

Reviewed By: jdoerfert

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

3 years ago[profile] Change linkage type of a compiler-rt func
Gulfem Savrun Yeniceri [Wed, 21 Jul 2021 18:11:33 +0000 (18:11 +0000)]
[profile] Change linkage type of a compiler-rt func

This patch changes the linkage type of a compiler-rt func
(__llvm_write_binary_ids) to fix the sanitizer-windows bot
build issue introduced in change f984ac271.

The issue is as the following:
C:\b\slave\sanitizer-windows\llvm-project\compiler-rt\lib\profile\InstrProfilingInternal.h(201):
error C2496: '__llvm_write_binary_ids': 'selectany' can only be applied
to data items with external linkage

3 years ago[SelectionDAG] Fix the representation of ISD::STEP_VECTOR.
Eli Friedman [Thu, 8 Jul 2021 23:14:33 +0000 (16:14 -0700)]
[SelectionDAG] Fix the representation of ISD::STEP_VECTOR.

The existing rule about the operand type is strange.  Instead, just say
the operand is a TargetConstant with the right width.  (Legalization
ignores TargetConstants, so it doesn't matter if that width is legal.)

Highlights:

1. I had to substantially rewrite the AArch64 isel patterns to expect a
TargetConstant.  Nothing too exotic, but maybe a little hairy. Maybe
worth considering a target-specific node with some dagcombines instead
of this complicated nest of isel patterns.
2. Our behavior on RV32 for vectors of i64 has changed slightly. In
particular, we correctly preserve the width of the arithmetic through
legalization.  This changes the DAG a bit. Maybe room for
improvement here.
3. I explicitly defined the behavior around overflow. This is necessary
to make the DAGCombine transforms legal, and I don't think it causes any
practical issues.

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

3 years ago[profile] Add binary id into profiles
Gulfem Savrun Yeniceri [Thu, 6 May 2021 16:09:12 +0000 (16:09 +0000)]
[profile] Add binary id into profiles

This patch adds binary id into profiles to easily associate binaries
with the corresponding profiles. There is an RFC that discusses
the motivation, design and implementation in more detail:
https://lists.llvm.org/pipermail/llvm-dev/2021-June/151154.html

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

3 years ago[SystemZ][z/OS][libcxx]: add the missing comment for patch D106153 and D106151
Nancy Wang [Wed, 21 Jul 2021 17:42:22 +0000 (13:42 -0400)]
[SystemZ][z/OS][libcxx]: add the missing comment for patch D106153 and D106151

This patch is to add the missing comments in https://reviews.llvm.org/D106153 and https://reviews.llvm.org/D106151 to address comments.

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

3 years ago[mlir] Add alias for input to shaped type op interface
Jacques Pienaar [Wed, 21 Jul 2021 17:34:27 +0000 (10:34 -0700)]
[mlir] Add alias for input to shaped type op interface

Range type that allows for wrapping different value & shape ranges with
correspondence to Shape's ValueShape type - initially aliased to
ValueRange (which corresponds to the trivial mapping from a ShapedType's
Value's shape to shape). Just plain alias, before expanding.

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

3 years ago[Attributor][NFC] Modify isAssumedHeapToStack for const argument
Giorgis Georgakoudis [Wed, 21 Jul 2021 01:50:05 +0000 (18:50 -0700)]
[Attributor][NFC] Modify isAssumedHeapToStack for const argument

There is no need for a non-const argument interface and the const argument modification covers existing and upcoming use cases.

Reviewed By: jdoerfert

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

3 years ago[OpenMP] Expose libomptarget function to get HW thread id
Giorgis Georgakoudis [Wed, 21 Jul 2021 07:18:38 +0000 (00:18 -0700)]
[OpenMP] Expose libomptarget function to get HW thread id

The patch exposes the libomptarget runtime function that gets the hardware thread id through the kmpc API. This is to be used in SPMDization for checking the thread id to execute regions by a single thread in a block.

Reviewed By: jdoerfert

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

3 years ago[trace] [intel pt] Create a "thread trace dump stats" command
Walter Erquinigo [Wed, 21 Jul 2021 16:49:15 +0000 (09:49 -0700)]
[trace] [intel pt] Create a "thread trace dump stats" command

When the user types that command 'thread trace dump info' and there's a running Trace session in LLDB, a raw trace in bytes should be printed; the command 'thread trace dump info all' should print the info for all the threads.

Original Author: hanbingwang

Reviewed By: clayborg, wallace

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

3 years agoRevert "[OpenMP][AMDGCN] Initial math headers support"
Jon Chesterfield [Wed, 21 Jul 2021 16:35:40 +0000 (17:35 +0100)]
Revert "[OpenMP][AMDGCN] Initial math headers support"

This reverts commit 968899ad9cf17579f9867dafb35c4d97bad0863f.

3 years ago[libomptarget][amdgpu][nfc] Refactor #includes
Jon Chesterfield [Wed, 21 Jul 2021 16:28:07 +0000 (17:28 +0100)]
[libomptarget][amdgpu][nfc] Refactor #includes

Create a hsa_api.h header that includes the ROCr headers in use
Drop some unused headers and _cplusplus macros

Reviewed By: jdoerfert

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

3 years ago[WebAssembly] Codegen for v128.load{32,64}_zero
Thomas Lively [Wed, 21 Jul 2021 16:02:12 +0000 (09:02 -0700)]
[WebAssembly] Codegen for v128.load{32,64}_zero

Replace the experimental clang builtins and LLVM intrinsics for these
instructions with normal instruction selection patterns. The wasm_simd128.h
intrinsics header was already using portable code for the corresponding
intrinsics, so now it produces the correct instructions.

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

3 years ago[PowerPC] Removing a REQUIRES line from llvm test
Quinn Pham [Wed, 21 Jul 2021 15:47:52 +0000 (10:47 -0500)]
[PowerPC] Removing a REQUIRES line from llvm test

The test has been moved to the correct directory so this
`REQUIRES` line is not needed.

3 years ago[ms] [llvm-ml] Restrict implicit RIP-relative addressing to named-variable references
Eric Astor [Wed, 21 Jul 2021 15:46:23 +0000 (11:46 -0400)]
[ms] [llvm-ml] Restrict implicit RIP-relative addressing to named-variable references

ML64.EXE applies implicit RIP-relative addressing only to memory references that include a named-variable reference.

Reviewed By: mstorsjo

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

3 years ago[NewPM][Inliner] Check if deleted function is in current SCC
Arthur Eubanks [Tue, 20 Jul 2021 21:51:12 +0000 (14:51 -0700)]
[NewPM][Inliner] Check if deleted function is in current SCC

In weird cases, the inliner will inline internal recursive functions,
sometimes causing them to have no more uses, in which case the
inliner will mark the function to be deleted. The function is
actually deleted after the call to
updateCGAndAnalysisManagerForCGSCCPass(). In
updateCGAndAnalysisManagerForCGSCCPass(), UR.UpdatedC may be set to
the SCC containing the function to be deleted. Then the inliner calls
CG.removeDeadFunction() which can cause that SCC to be deleted, even
though it's still stored in UR.UpdatedC.

We could potentially check in the wrappers/pass managers if UR.UpdatedC
is in UR.InvalidatedSCCs before doing anything with it, but it's safer
to do this as close to possible to the call to CG.removeDeadFunction()
to avoid issues with allocating a new SCC in the same address as
the deleted one.

It's hard to find a small test case since we need to have recursive
internal functions be reachable from non-internal functions, yet they
need to become non-recursive and not referenced by other functions when
inlined.

Similar to https://reviews.llvm.org/D106306.

Fixes PR50788.

Reviewed By: asbirlea

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

3 years ago[MachineVerifier] Make INSERT_SUBREG diagnostic respect operand 2 subregs
Jon Roelofs [Wed, 21 Jul 2021 15:23:17 +0000 (08:23 -0700)]
[MachineVerifier] Make INSERT_SUBREG diagnostic respect operand 2 subregs

This came out of post-commit review: https://reviews.llvm.org/D105953#inline-1012919

Thanks uabelho!

3 years ago[ms] [llvm-ml] Support built-in text macros
Eric Astor [Wed, 21 Jul 2021 15:43:25 +0000 (11:43 -0400)]
[ms] [llvm-ml] Support built-in text macros

Add support for all built-in text macros supported by ML64:
@Date, @Time, @FileName, @FileCur, and @CurSeg.

Reviewed By: thakis

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

3 years ago[ms] [llvm-ml] Add support for numeric built-in symbols
Eric Astor [Wed, 21 Jul 2021 15:39:41 +0000 (11:39 -0400)]
[ms] [llvm-ml] Add support for numeric built-in symbols

Support @Version and @Line as built-in symbols. For now, resolves @Version to 1427 (the same as for the VS 2019 release of ML.EXE).

Reviewed By: thakis

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

3 years ago[Bazel] Remove deprecated td_relative_includes
Geoffrey Martin-Noble [Wed, 21 Jul 2021 15:37:38 +0000 (08:37 -0700)]
[Bazel] Remove deprecated td_relative_includes

This has been deprecated for a while and there are no in-tree usages.
I'm not aware of any out-of-tree usages either.

3 years ago[OpenMP][AMDGCN] Initial math headers support
Pushpinder Singh [Wed, 21 Jul 2021 15:15:38 +0000 (16:15 +0100)]
[OpenMP][AMDGCN] Initial math headers support

With this patch, OpenMP on AMDGCN will use the math functions
provided by ROCm ocml library. Linking device code to the ocml will be
done in the next patch.

Reviewed By: JonChesterfield, jdoerfert, scchan

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