platform/upstream/llvm.git
3 years ago[debugserver] Fix logic to extract app bundle from file path
Jonas Devlieghere [Thu, 25 Feb 2021 07:02:20 +0000 (23:02 -0800)]
[debugserver] Fix logic to extract app bundle from file path

Fix the logic to find the app bundle in a path by correctly accounting
for paths containing multiple occurrences of `.app`. The new logic will
correctly extract `com.app.Foo.app` from `com.app.Foo.app/com.app.Foo`.

rdar://74666208

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

3 years agoOpenMP: Fix object clobbering issue when using save-temps
Pushpinder Singh [Tue, 23 Feb 2021 12:43:57 +0000 (07:43 -0500)]
OpenMP: Fix object clobbering issue when using save-temps

There are two preconditions to reproduce the issue,
 1. Use -save-temps option
 2. Provide the -o option with name equal to the input file name
    without the file extension. For e.g. clang a.c -o a

With the -o specified, the AssembleJobAction after OffloadWrapperJobAction
will produce the object file with same name as host code object file.
Due to this clash, the OffloadWrapperAction overwrites the initial host
object file, which results in lld error. This also fixes the `multiple definition of __dummy.omp_offloading.entry'` issue in D96769 .

Reviewed By: jdoerfert

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

3 years ago[RISCV] Reuse existing SDLoc and XLenVT in the switch in RISCVISelDAGToDAG::Select...
Craig Topper [Thu, 25 Feb 2021 05:38:51 +0000 (21:38 -0800)]
[RISCV] Reuse existing SDLoc and XLenVT in the switch in RISCVISelDAGToDAG::Select. NFC

A SDLoc and XLenVT were already created above the switch.

3 years ago[docs][JITLink] Reintroduce JITLink design/API doc with fixes and improvements.
Lang Hames [Wed, 24 Feb 2021 21:30:47 +0000 (08:30 +1100)]
[docs][JITLink] Reintroduce JITLink design/API doc with fixes and improvements.

This document was originally introduced in ab4648504b2, and was reverted in
912bc4980e9 while I investigated a number of shpinx bot errors. This commit
reintroduces the document with fixes for those errors, as well as some
improvements to the wording and formatting.

3 years ago[NARY][NFC] New tests for upcoming changes.
Evgeniy Brevnov [Wed, 24 Feb 2021 12:28:02 +0000 (19:28 +0700)]
[NARY][NFC] New tests for upcoming changes.

3 years ago[NFC][AIX] Rename aix-csr-vector.ll to aix-csr-vector-extabi.ll
Zarko Todorovski [Thu, 25 Feb 2021 03:12:01 +0000 (22:12 -0500)]
[NFC][AIX] Rename aix-csr-vector.ll to aix-csr-vector-extabi.ll

3 years ago[Coroutine] Check indirect uses of alloca when checking lifetime info
Xun Li [Thu, 25 Feb 2021 02:29:23 +0000 (18:29 -0800)]
[Coroutine] Check indirect uses of alloca when checking lifetime info

In the existing logic, we look at the lifetime.start marker of each alloca, and check all uses of the alloca, to see if any pair of the lifetime marker and an use of alloca crosses suspension point.
This approach is unfortunately incorrect. An use of alloca does not need to be a direct use, but can be an indirect use through alias.
Only checking direct uses can miss cases where indirect uses are crossing suspension point.
This can be demonstrated in the newly added test case 007.
In the test case, both x and y are only directly used prior to suspend, but they are captured into an alias, merged through a PHINode (so they couldn't be materialized), and used after CoroSuspend.
If we only check whether the lifetime starts cross suspension points with direct uses, we will put the allocas to the stack, and then capture their addresses in the frame.

Instead of fixing it in D96441 and D96566, this patch takes a different approach which I think is better.
We still checks the lifetime info in the same way as before, but with two differences:
1. The collection of liftime.start is moved into AllocaUseVisitor to make the logic more concentrated.
2. When looking at lifetime.start and use pairs, we not only checks the direct uses as before, but in this patch we check all uses collected by AllocaUseVisitor, which would include all indirect uses through alias. This will make the analysis more accurate without throwing away the lifetime optimization.

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

3 years ago[docs] Add a release note for the removing of -Wreturn-std-move-in-c++11
Yang Fan [Wed, 24 Feb 2021 09:01:51 +0000 (17:01 +0800)]
[docs] Add a release note for the removing of -Wreturn-std-move-in-c++11

`-Wreturn-std-move-in-c++11` has been removed in fbee4a0c79cc4ee87c34e51342742a5bc6fcf872.

Reviewed By: aaronpuchert, amccarth

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

3 years ago[flang][fir][NFC] Remove dead code.
Eric Schweitz [Thu, 25 Feb 2021 00:06:17 +0000 (16:06 -0800)]
[flang][fir][NFC] Remove dead code.

This patch removes OpaqueAttr as it is no longer used.

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

3 years ago[flang][fir][NFC] Move remaining types to TableGen type definition
Valentin Clement [Thu, 25 Feb 2021 01:22:49 +0000 (20:22 -0500)]
[flang][fir][NFC] Move remaining types to TableGen type definition

Move the remaing of FIR types to TableGen type definition. This follow suggestion in D96422.

Reviewed By: schweitz, jeanPerier, rriddle

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

3 years ago[ThinLTO][NewPM] Clean up dead code under -O0
Arthur Eubanks [Wed, 24 Feb 2021 21:36:38 +0000 (13:36 -0800)]
[ThinLTO][NewPM] Clean up dead code under -O0

We're running into undefined references using ThinLTO with -O0 on
Windows/Chrome. This fixes that.

This matches the legacy PM.

Reviewed By: tejohnson

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

3 years ago[X86] Support amx-bf16 intrinsic.
Liu, Chen3 [Wed, 24 Feb 2021 03:25:35 +0000 (11:25 +0800)]
[X86] Support amx-bf16 intrinsic.

Adding support for intrinsics of AMX-BF16.
This patch alse fix a bug that AMX-INT8 instructions will be selected with wrong
predicate.

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

3 years ago[lld-macho] add code signature for native arm64 macOS
Greg McGary [Thu, 7 Jan 2021 02:11:44 +0000 (18:11 -0800)]
[lld-macho] add code signature for native arm64 macOS

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

3 years ago[test] Improve SanitizerCoverage tests on !associated and comdat
Fangrui Song [Thu, 25 Feb 2021 00:51:41 +0000 (16:51 -0800)]
[test] Improve SanitizerCoverage tests on !associated and comdat

3 years agoupdate AMDGPU _Float16 support in clang doc
Yaxun (Sam) Liu [Wed, 24 Feb 2021 15:24:48 +0000 (10:24 -0500)]
update AMDGPU _Float16 support in clang doc

Reviewed by: Matt Arsenault

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

3 years ago[llvm] Check availability for os_signpost
Jonas Devlieghere [Thu, 25 Feb 2021 00:23:12 +0000 (16:23 -0800)]
[llvm] Check availability for os_signpost

Add availability checks to the os_signpost code so this can be used with
an older deployment target.

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

3 years agoImprove attribute documentation for nodebug on typedefs
David Blaikie [Thu, 25 Feb 2021 00:25:37 +0000 (16:25 -0800)]
Improve attribute documentation for nodebug on typedefs

(followup to 8472fa6c54c9d044adcd147f6826bccebd730f30 )

3 years ago[RISCV] Teach VSETVLI inserter to use VSETIVLI when possible.
Craig Topper [Thu, 25 Feb 2021 00:07:32 +0000 (16:07 -0800)]
[RISCV] Teach VSETVLI inserter to use VSETIVLI when possible.

We always create the VL operand using a register, but if we can
determine that it came from an ADDI X0, imm with a sufficiently
small immediate, we can use VSETIVLI.

Reviewed By: frasercrmck

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

3 years ago[RISCV] Use a ComplexPattern for zexti32 to match sexti32.
Craig Topper [Wed, 24 Feb 2021 23:55:19 +0000 (15:55 -0800)]
[RISCV] Use a ComplexPattern for zexti32 to match sexti32.

We just started using a ComplexPattern for sexti32. This updates
zexti32 to match.

Reviewed By: luismarques

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

3 years ago[CUDA][HIP] Support accessing static device variable in host code for -fgpu-rdc
Yaxun (Sam) Liu [Tue, 19 Jan 2021 22:36:58 +0000 (17:36 -0500)]
[CUDA][HIP] Support accessing static device variable in host code for -fgpu-rdc

For -fgpu-rdc mode, static device vars in different TU's may have the same name.
To support accessing file-scope static device variables in host code, we need to give them
a distinct name and external linkage. This can be done by postfixing each static device variable with
a distinct CUID (Compilation Unit ID) hash.

Since the static device variables have different name across compilation units, now we let
them have external linkage so that they can be looked up by the runtime.

Reviewed by: Artem Belevich, and Jon Chesterfield

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

3 years agoAllow !shape.size type operands in "shape.from_extents" op.
Jing Pu [Wed, 24 Feb 2021 22:35:23 +0000 (14:35 -0800)]
Allow !shape.size type operands in "shape.from_extents" op.

This expands the op to support error propagation and also makes it symmetric with  "shape.get_extent" op.

Reviewed By: silvas

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

3 years ago[profile] Fix buffer overrun when parsing %c in filename string
Vedant Kumar [Tue, 23 Feb 2021 00:36:37 +0000 (16:36 -0800)]
[profile] Fix buffer overrun when parsing %c in filename string

Fix a buffer overrun that can occur when parsing '%c' at the end of a
filename pattern string.

rdar://74571261

Reviewed By: kastiglione

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

3 years agoRevert "[builtins] Define fmax and scalbn inline"
Ryan Prichard [Wed, 24 Feb 2021 22:47:48 +0000 (14:47 -0800)]
Revert "[builtins] Define fmax and scalbn inline"

This reverts commit 341889ee9e03e73b313263c516b3d1fd33d4c4ba.

The new unit tests fail on sanitizer-windows.

3 years agoReland "[Driver][Windows] Support per-target runtimes dir layout for profile instr...
Markus Böck [Wed, 24 Feb 2021 22:39:55 +0000 (23:39 +0100)]
Reland "[Driver][Windows] Support per-target runtimes dir layout for profile instr generate"

This relands commit rG7f9d5d6e444c which was reverted in rGab5b00ada9e7

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

3 years ago[builtins] Define fmax and scalbn inline
Ryan Prichard [Wed, 24 Feb 2021 06:09:24 +0000 (22:09 -0800)]
[builtins] Define fmax and scalbn inline

Define inline versions of __compiler_rt_fmax* and __compiler_rt_scalbn*
rather than depend on the versions in libm. As with
__compiler_rt_logbn*, these functions are only defined for single,
double, and quad precision (binary128).

Fixes PR32279 for targets using only these FP formats (e.g. Android
on arm/arm64/x86/x86_64).

For single and double precision, on AArch64, use __builtin_fmax[f]
instead of the new inline function, because the builtin expands to the
AArch64 fmaxnm instruction.

Reviewed By: MaskRay

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

3 years ago[MC][ARM] make Thumb function also if type attribute is set
Stefan Agner [Wed, 24 Feb 2021 21:47:40 +0000 (13:47 -0800)]
[MC][ARM] make Thumb function also if type attribute is set

Make sure to set the bottom bit of the symbol even when the type
attribute of a label is set after the label.

GNU as sets the thumb state according to the thumb state of the label.
If a .type directive is placed after the label, set the symbol's thumb
state according to the thumb state of the .type directive. This matches
GNU as in most cases.

From: Stefan Agner <stefan@agner.ch>

This fixes:
https://bugs.llvm.org/show_bug.cgi?id=44860
https://github.com/ClangBuiltLinux/linux/issues/866

Reviewed By: MaskRay

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

3 years agoRevert "[Profile] Include a few asserts in coverage mapping test"
Petr Hosek [Wed, 24 Feb 2021 22:01:42 +0000 (14:01 -0800)]
Revert "[Profile] Include a few asserts in coverage mapping test"

This reverts commit 80f329bcd0281c11062879025761d0657167fe8b.

3 years ago[InstCombine] fold fdiv with powi divisor (PR49147)
Sanjay Patel [Wed, 24 Feb 2021 21:12:48 +0000 (16:12 -0500)]
[InstCombine] fold fdiv with powi divisor (PR49147)

This extends b40fde062c for the especially non-standard
powi pattern. We want to avoid being completely wrong
on the negation-of-int-min corner case, so I'm adding
an extra FMF check for 'ninf' assuming that gives us
the flexibility to handle that possibility.
https://llvm.org/PR49147

3 years ago[InstCombine] add helper for x/pow(); NFC
Sanjay Patel [Wed, 24 Feb 2021 20:31:59 +0000 (15:31 -0500)]
[InstCombine] add helper for x/pow(); NFC

We at least want to add powi to this list, so
split it off into a switch to reduce code duplication.

3 years ago[Profile] Include a few asserts in coverage mapping test
Petr Hosek [Wed, 24 Feb 2021 18:26:11 +0000 (10:26 -0800)]
[Profile] Include a few asserts in coverage mapping test

These should catch any accidental use of the compilation directory.

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

3 years agoTransforms: Clone distinct nodes in metadata mapper unless RF_ReuseAndMutateDistinctMDs
Duncan P. N. Exon Smith [Mon, 15 Feb 2021 20:08:06 +0000 (12:08 -0800)]
Transforms: Clone distinct nodes in metadata mapper unless RF_ReuseAndMutateDistinctMDs

This is a follow up to 22a52dfddcefad4f275eb8ad1cc0e200074c2d8a and a
revert of df763188c9a1ecb1e7e5c4d4ea53a99fbb755903.

With this change, we only skip cloning distinct nodes in
MDNodeMapper::mapDistinct if RF_ReuseAndMutateDistinctMDs, dropping the
no-longer-needed local helper `cloneOrBuildODR()`.  Skipping cloning in
other cases is unsound and breaks CloneModule, which is why the textual
IR for PR48841 didn't pass previously. This commit adds the test as:
Transforms/ThinLTOBitcodeWriter/cfi-debug-info-cloned-type-references-global-value.ll

Cloning less often exposed a hole in subprogram cloning in
CloneFunctionInto thanks to df763188c9a1ecb1e7e5c4d4ea53a99fbb755903's
test ThinLTO/X86/Inputs/dicompositetype-unique-alias.ll. If a function
has a subprogram attachment whose scope is a DICompositeType that
shouldn't be cloned, but it has no internal debug info pointing at that
type, that composite type was being cloned. This commit plugs that hole,
calling DebugInfoFinder::processSubprogram from CloneFunctionInto.

As hinted at in 22a52dfddcefad4f275eb8ad1cc0e200074c2d8a's commit
message, I think we need to formalize ownership of metadata a bit more
so that ValueMapper/CloneFunctionInto (and similar functions) can deal
with cloning (or not) metadata in a more generic, less fragile way.

This fixes PR48841.

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

3 years agoIR: Rename Metadata::ImplicitCode to SubclassData1, NFC
Duncan P. N. Exon Smith [Tue, 16 Feb 2021 01:43:08 +0000 (17:43 -0800)]
IR: Rename Metadata::ImplicitCode to SubclassData1, NFC

Metadata::ImplicitCode is a bit shaved off of Metadata::Storage,
currently only in use by the subclass DILocation. However, the bit isn't
reserved for that purpose. Rename it `SubclassData1` to make it clear
that it has nothing to do with Metadata itself (and other subclasses are
free to use it).

As a drive-by, remove an old TODO about exposing bits to subclasses
(looks like that has mostly been done).

No functionality change here.

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

3 years ago[tests] precommit tests for D97219
Philip Reames [Wed, 24 Feb 2021 20:44:00 +0000 (12:44 -0800)]
[tests] precommit tests for D97219

3 years ago[amdgpu] Atomic should be source of divergence.
Michael Liao [Wed, 24 Feb 2021 00:51:50 +0000 (19:51 -0500)]
[amdgpu] Atomic should be source of divergence.

Reviewed By: arsenm

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

3 years ago[libcxx] [test] Quote the path to the python interpreter
Martin Storsjö [Wed, 24 Feb 2021 10:18:48 +0000 (12:18 +0200)]
[libcxx] [test] Quote the path to the python interpreter

This should allow running tests with the interpreter in some of the
default paths where Python for Windows might be installed.

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

3 years ago[InstCombine] add tests for fdiv+powi; NFC
Sanjay Patel [Tue, 23 Feb 2021 22:08:44 +0000 (17:08 -0500)]
[InstCombine] add tests for fdiv+powi; NFC

3 years agoAMDGPU: Remove special case in shouldCoalesce
Matt Arsenault [Tue, 23 Feb 2021 19:44:57 +0000 (14:44 -0500)]
AMDGPU: Remove special case in shouldCoalesce

Unaligned registers are now constrained with classes, rather than
specially reserving a subset of the whole class.

3 years agoAMDGPU: Add even aligned VGPR/AGPR register classes
Matt Arsenault [Fri, 19 Feb 2021 13:57:14 +0000 (08:57 -0500)]
AMDGPU: Add even aligned VGPR/AGPR register classes

gfx90a operations require even aligned registers, but this was
previously achieved by reserving registers inside the full class.

Ideally this would be captured in the static instruction definitions
for the operands, and we would have different instructions per
subtarget. The hackiest part of this is we need to manually reassign
AGPR register classes after instruction selection (we get away without
this for VGPRs since those types are actually registered for legal
types).

3 years ago[mlir][docs] Small fix to local Pass Manager reproduction documentation
River Riddle [Wed, 24 Feb 2021 19:42:48 +0000 (11:42 -0800)]
[mlir][docs] Small fix to local Pass Manager reproduction documentation

3 years ago[mlir][linalg] Reuse the symbol if attribute uses are identical.
Hanhan Wang [Wed, 24 Feb 2021 19:39:55 +0000 (11:39 -0800)]
[mlir][linalg] Reuse the symbol if attribute uses are identical.

Depends On D97312

Reviewed By: antiagainst

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

3 years ago[mlir][linalg] Support for using output values in TC definitions.
Hanhan Wang [Wed, 24 Feb 2021 19:37:18 +0000 (11:37 -0800)]
[mlir][linalg] Support for using output values in TC definitions.

This will allow us to define select(pred, in, out) for TC ops, which is useful
for pooling ops.

Reviewed By: antiagainst

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

3 years ago[lldb] Support debugging utility functions
Jonas Devlieghere [Wed, 24 Feb 2021 19:04:47 +0000 (11:04 -0800)]
[lldb] Support debugging utility functions

LLDB uses utility functions to run code in the inferior for its own
internal purposes, such as reading classes from the Objective-C runtime
for example. Because these expressions should be transparent to the
user, we ignore breakpoints and unwind the stack on errors, which
makes them hard to debug.

This patch adds a new setting target.debug-utility-expression that, when
enabled, changes these options to facilitate debugging. It enables
breakpoints, disables unwinding and writes out the utility function
source code to disk so it shows up in the source view.

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

3 years ago[llvm-objcopy] If input=output, preserve umask bits, otherwise drop S_ISUID/S_ISGID...
Fangrui Song [Wed, 24 Feb 2021 19:10:09 +0000 (11:10 -0800)]
[llvm-objcopy] If input=output, preserve umask bits, otherwise drop S_ISUID/S_ISGID bits

This makes the behavior similar to cp

```
chmod u+s,g+s,o+x a
sudo llvm-strip a -o b
// With this patch, b drops set-user-ID and set-group-ID bits.
// sudo cp a b => b does not have set-user-ID or set-group-ID bits.
```

This also changes the behavior for the following case:

```
chmod u+s,g+s,o+x a
llvm-strip a
// a preserves set-user-ID and set-group-ID bits.
// This matches binutils<2.36 and probably >=2.37.  2.36 and 2.36.1 have some compatibility issues.
```

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

3 years agoRemove a workaround for MSVC 2013, now that MSVC 2017 is the minimum.
James Y Knight [Wed, 24 Feb 2021 18:51:00 +0000 (13:51 -0500)]
Remove a workaround for MSVC 2013, now that MSVC 2017 is the minimum.

In MSVC 2013, 'alignas(integer-template-arg)' didn't compile; verified
on godbolt that this now works properly.

3 years ago[AArch64][GlobalISel] Fix manual selection for v4s16 and v8s8 G_DUP
Jessica Paquette [Tue, 23 Feb 2021 00:26:59 +0000 (16:26 -0800)]
[AArch64][GlobalISel] Fix manual selection for v4s16 and v8s8 G_DUP

The manual G_DUP selection code would produce DUPv16i8 for v8s8s and DUPv8i16
for v4s16.

This adds the missing cases to the manual selection code, and makes it return
false when there is an unexpected size.

Update select-dup.mir to reflect the change.

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

3 years ago[RISCV] Support fixed vector extract element. Use VL=1 for scalable vector extract...
Craig Topper [Wed, 24 Feb 2021 18:06:43 +0000 (10:06 -0800)]
[RISCV] Support fixed vector extract element. Use VL=1 for scalable vector extract element.

I've changed to use VL=1 for slidedown and shifts to avoid extra
element processing that we don't need.

The i64 fixed vector handling on i32 isn't great if the vector type
isn't legal due to an ordering issue in type legalization. If the
vector type isn't legal, we fall back to default legalization
which will bitcast the vector to vXi32 and use two independent extracts.
Doing better will require handling several different cases by
manually inserting insert_subvector/extract_subvector to adjust the type
to a legal vector before emitting custom nodes.

Reviewed By: frasercrmck

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

3 years ago[lit] Add --ignore-fail
Joel E. Denny [Wed, 24 Feb 2021 18:05:30 +0000 (13:05 -0500)]
[lit] Add --ignore-fail

For some build configurations, `check-all` calls lit multiple times to
run multiple lit test suites.  Most recently, I've found this to be
true when configuring openmp as part of `LLVM_ENABLE_RUNTIMES`, but
this is not the first time.

If one test suite fails, none of the remaining test suites run, so you
cannot determine if your patch has broken them.  It can then be
frustrating to try to determine which `check-` targets will run the
remaining tests without getting stuck on the failing tests.

When such cases arise, it is probably best to adjust the cmake
configuration for `check-all` to run all test suites as part of one
lit invocation.  Because that fix will likely not be implemented and
land immediately, this patch introduces `--ignore-fail` to serve as a
workaround for developers trying to see test results until it does
land:

```
$ LIT_OPTS=--ignore-fail ninja check-all
```

One problem with `--ignore-fail` is that it makes it challenging to
detect test failures in a script, perhaps in CI.  This problem should
serve as motivation to actually fix the cmake configuration instead of
continuing to use `--ignore-fail` indefinitely.

Reviewed By: jhenderson, thopre

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

3 years ago[mlir][spirv] Define spv.GLSL.Ldexp
Weiwei Li [Wed, 24 Feb 2021 18:07:05 +0000 (13:07 -0500)]
[mlir][spirv] Define spv.GLSL.Ldexp

co-authored-by: Alan Liu <alanliu.yf@gmail.com>

Reviewed By: antiagainst

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

3 years ago[LegalizeIntegerTypes] Further improve ExpandIntRes_SADDSUBO for targets where SADDO...
Craig Topper [Wed, 24 Feb 2021 17:36:28 +0000 (09:36 -0800)]
[LegalizeIntegerTypes] Further improve ExpandIntRes_SADDSUBO for targets where SADDO/SSUBO aren't supported.

Rather than converting 3 signbits to bools and comparing them,
we can do bitwise logic on the whole vector and convert the
resulting sign bit to a bool at the end.

This is still a different algorithm than what we do in LegalizeDAG
through expandSADDOSSUBO. That algorithm needs to know that the
RHS of SSUBO is > 0, but that's costly when the type is split.

Reviewed By: RKSimon

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

3 years ago[mlir] Add constBuilderCall to TypeAttr to simplify builders
Lei Zhang [Wed, 24 Feb 2021 17:53:28 +0000 (12:53 -0500)]
[mlir] Add constBuilderCall to TypeAttr to simplify builders

Reviewed By: rriddle

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

3 years agoRevert rGd65ddca83ff85c7345fe9a0f5a15750f01e38420 - "[ValueTracking] ComputeKnownBits...
Simon Pilgrim [Wed, 24 Feb 2021 18:03:05 +0000 (18:03 +0000)]
Revert rGd65ddca83ff85c7345fe9a0f5a15750f01e38420 - "[ValueTracking] ComputeKnownBits - minimum leading/trailing zero bits in LSHR/SHL (PR44526)"

This is causing sanitizer test failures that I haven't been able to fix yet.

3 years ago[libomptarget] Fixed MSVC build fail caused by __attribute__((used)).
Vyacheslav Zakharin [Wed, 24 Feb 2021 00:57:27 +0000 (16:57 -0800)]
[libomptarget] Fixed MSVC build fail caused by __attribute__((used)).

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

3 years ago[MC][ARM] add .w suffixes for BL (T1) and DBG
Nick Desaulniers [Wed, 24 Feb 2021 17:47:18 +0000 (09:47 -0800)]
[MC][ARM] add .w suffixes for BL (T1) and DBG

F1.2 Standard assembler syntax fields
describes .w and .n suffixes for wide and narrow encodings.

arch/arm/probes/kprobes/test-thumb.c tests installing kprobes for
certain instructions using inline asm.  There's a few instructions we
fail to assemble due to missing .w t2InstAliases.

Adds .w suffixes for:
* bl  (F5.1.25 BL, BLX (immediate) T1)
* dbg (F5.1.42 DBG T1)

Reviewed By: DavidSpickett

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

3 years ago[AArch64] Do not fold SP adjustments into pre-increment addr modes if it overflows...
Amara Emerson [Thu, 21 Jan 2021 22:54:26 +0000 (14:54 -0800)]
[AArch64] Do not fold SP adjustments into pre-increment addr modes if it overflows the redzone.

Instead of outright disabling this completely with the noredzone attribute,
we only avoid doing the optimization if there are memory operations between
the adjustment and the load/store that the adjustment would be folded into.
This avoids the case of something like a stack cookie being corrupted if an
exception happens before the pre-increment to the SP occurs.

This also prevents the folding happening if we have a redzone, but the offset
being folded is above the redzone amount (128 bytes in this case).

rdar://73269336

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

3 years ago[flang] add attribute to trim runtime implementation establish call
Jean Perier [Wed, 24 Feb 2021 17:53:03 +0000 (18:53 +0100)]
[flang] add attribute to trim runtime implementation establish call

CFI allocatable attribute is needed so that the descriptor for the
result can be allocated/deallocated.

Reviewed By: klausler

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

3 years ago[tests] precommit tests for an upcoming AA improvement
Philip Reames [Wed, 24 Feb 2021 17:50:33 +0000 (09:50 -0800)]
[tests] precommit tests for an upcoming AA improvement

3 years ago[OpenMP][Tests][NFC] rename macro to avoid naming clash
Joachim Protze [Wed, 24 Feb 2021 17:45:47 +0000 (18:45 +0100)]
[OpenMP][Tests][NFC] rename macro to avoid naming clash

Rename a macro use missed in e0f3acc5d34aa

3 years ago[OpenMP] Fixed a crash when offloading to x86_64 with target nowait
Shilei Tian [Wed, 24 Feb 2021 17:37:22 +0000 (12:37 -0500)]
[OpenMP] Fixed a crash when offloading to x86_64 with target nowait

PR#49334 reports a crash when offloading to x86_64 with `target nowait`,
which is caused by referencing a nullptr. The root cause of the issue is, when
pushing a hidden helper task in `__kmp_push_task`, it also maps the gtid to its
shadow gtid, which is wrong.

Reviewed By: jdoerfert

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

3 years ago[OpenMP][Tests][NFC] lit might also be known as llvm-lit.py
Joachim Protze [Wed, 24 Feb 2021 17:32:16 +0000 (18:32 +0100)]
[OpenMP][Tests][NFC] lit might also be known as llvm-lit.py

3 years agoRevert "[tests] Mark an autogened test as such"
Philip Reames [Wed, 24 Feb 2021 17:25:19 +0000 (09:25 -0800)]
Revert "[tests] Mark an autogened test as such"

This reverts commit 43a569faeb332ae8b355fffc33eec1ef6e33052e.

Unhelpfully, the tool just added the header and didn't actually update any of the tests.  I didn't notice until after pushing.

3 years agoMake sure some types are indeed trivially_copyable per llvm::is_trivially_copyable
serge-sans-paille [Thu, 11 Feb 2021 20:34:29 +0000 (21:34 +0100)]
Make sure some types are indeed trivially_copyable per llvm::is_trivially_copyable

Test a few types used as llvm::SmallVector parameter. It is important to ensure
we have a consistent behavior for these types to prevent ABI issues as the one
we met in https://bugs.llvm.org/show_bug.cgi?id=39427.

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

3 years ago[libomptarget] Load images in order of registration
Manoel Roemmer [Wed, 24 Feb 2021 17:14:35 +0000 (18:14 +0100)]
[libomptarget] Load images in order of registration

This makes sure that images are loaded in the order in which they are registered with libomptarget.

If a target can load multiple images and these images depend on each other (for example if one image contains the programs target regions and one image contains library code), then the order in which images are loaded can be important for symbol resolution (for example, in the VE plugin).
In this case: because the same code exist in the host binaries, the order in which the host linker loads them (which is also the order in which images are registered with libomptarget) is the order in which the images have to be loaded onto the device.

Reviewed By: JonChesterfield

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

3 years ago[tests] Mark an autogened test as such
Philip Reames [Wed, 24 Feb 2021 17:15:02 +0000 (09:15 -0800)]
[tests] Mark an autogened test as such

3 years ago[OpenMP][Tests][NFC] rename macro to avoid naming clash
Joachim Protze [Wed, 24 Feb 2021 17:12:06 +0000 (18:12 +0100)]
[OpenMP][Tests][NFC] rename macro to avoid naming clash

Rename a macro and macro use missed in 35ab6d6390ecd

3 years ago[AMDGPU] Add a bit more gfx90a test coverage
Jay Foad [Wed, 24 Feb 2021 12:07:22 +0000 (12:07 +0000)]
[AMDGPU] Add a bit more gfx90a test coverage

Update the GlobalISel version of llvm.amdgcn.workitem.id.ll to mostly
match the SelctionDAG version.

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

3 years ago[OpenMP][Tests][NFC] rename macro to avoid naming clash
Joachim Protze [Wed, 24 Feb 2021 16:54:50 +0000 (17:54 +0100)]
[OpenMP][Tests][NFC] rename macro to avoid naming clash

When including <ostream>, the register_callback macro of the OMPT callback.h
clashes with a function defined in ostream. This patch renames the macro
and includes ompt into the macro name.

3 years ago[libc][NFC] Exclude few targets from the `all` target.
Siva Chandra Reddy [Wed, 24 Feb 2021 15:22:58 +0000 (07:22 -0800)]
[libc][NFC] Exclude few targets from the `all` target.

3 years ago[libc++] NFC: Fix a few tests in tuple that would succeed trivially
Louis Dionne [Wed, 24 Feb 2021 16:33:41 +0000 (11:33 -0500)]
[libc++] NFC: Fix a few tests in tuple that would succeed trivially

3 years ago[libc++] NFC: Fix a few tests in pair that would succeed trivially
Louis Dionne [Wed, 24 Feb 2021 16:22:37 +0000 (11:22 -0500)]
[libc++] NFC: Fix a few tests in pair that would succeed trivially

3 years ago[flang][fir] Add zero_bits operation.
Eric Schweitz [Tue, 23 Feb 2021 21:09:10 +0000 (13:09 -0800)]
[flang][fir] Add zero_bits operation.

This patch adds the new zero_bits operation and upstrams other changes
including the following:

  - update tablegen syntax to newer forms
  - update memory effects annotations
  - update documentation [NFC]
  - other NFC, such as whitespace and formatting

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

3 years ago[clang-tidy] Fix readability-avoid-const-params-in-decls removing const in template...
Nathan James [Wed, 24 Feb 2021 15:54:10 +0000 (15:54 +0000)]
[clang-tidy] Fix readability-avoid-const-params-in-decls removing const in template paramaters

Fixes https://bugs.llvm.org/show_bug.cgi?id=38035

Reviewed By: aaron.ballman

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

3 years ago[mlir] Add polynomial approximation for math::LogOp (using builders API)
Eugene Zhulenev [Wed, 24 Feb 2021 14:59:28 +0000 (06:59 -0800)]
[mlir] Add polynomial approximation for math::LogOp (using builders API)

Replace math::LogOp with an approximations from the the Julien Pommier's SSE math library

Link: http://gruntthepeon.free.fr/ssemath
Reviewed By: asaadaldien

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

3 years ago[libc][NFC] Remove headergen for the cacheline size macro.
Siva Chandra Reddy [Wed, 24 Feb 2021 08:05:53 +0000 (00:05 -0800)]
[libc][NFC] Remove headergen for the cacheline size macro.

We want to be able to build and test the string functions in contexts
like that of Fuchsia where LLVM pieces like tablegen are not available.
Since header generation uses tablegen, we are removing the dependency on
headergen here.

Reviewed By: gchatelet

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

3 years ago[clang-tidy][test] Allow specifying potentially unused suffixes
Nathan James [Wed, 24 Feb 2021 15:22:53 +0000 (15:22 +0000)]
[clang-tidy][test] Allow specifying potentially unused suffixes

If a check-suffix is only required for a CHECK-FIXES or CHECK-MESSAGES. check_clang_tidy will pass the prefixes CHECK-FIXES<...> and CHECK-MESSAGES<...> to FileCheck.
This will result in a FileCheck failing because of an unused prefix.

This addresses the problem by not passing unused prefixes. Its also possible to fix this be passing `--allow-unused-prefixes` flag to FileCheck, but seeing as we have already done the legwork in the script to see its unused, this fix seems the better way to go.

Reviewed By: aaron.ballman

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

3 years ago[Coverage][Unittest] Fix stringref issue
Jinsong Ji [Wed, 24 Feb 2021 14:27:23 +0000 (14:27 +0000)]
[Coverage][Unittest] Fix stringref issue

We will pass StringRef and change it in reader.
But we reuse the same Filename vector without clear it,
so in some systems, we may clobbeer previous results.

Reviewed By: phosek

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

3 years ago[lld-macho] Add REQUIRES to incompatible-arch-tapi test
Jez Ng [Wed, 24 Feb 2021 14:42:52 +0000 (09:42 -0500)]
[lld-macho] Add REQUIRES to incompatible-arch-tapi test

3 years ago[InstructionCost] NFC: Fix up missing cases in LoopVectorize and CodeGenPrep.
Sander de Smalen [Wed, 24 Feb 2021 11:54:18 +0000 (11:54 +0000)]
[InstructionCost] NFC: Fix up missing cases in LoopVectorize and CodeGenPrep.

This fixes the types of a few more cost variables to be of type InstructionCost.

3 years agoRevert "[ValueTracking] computeKnownBitsFromShiftOperator - remove non-zero shift...
Nico Weber [Wed, 24 Feb 2021 14:06:12 +0000 (09:06 -0500)]
Revert "[ValueTracking] computeKnownBitsFromShiftOperator - remove non-zero shift amount handling."

This reverts commit d37400168ce2f1f9ccc91847431f5b8c020a7d67.
Breaks Analysis/./AnalysisTests/ComputeKnownBitsTest.KnownNonZeroShift

3 years ago[ValueTracking] computeKnownBitsFromShiftOperator - remove non-zero shift amount...
Simon Pilgrim [Wed, 24 Feb 2021 13:49:00 +0000 (13:49 +0000)]
[ValueTracking] computeKnownBitsFromShiftOperator - remove non-zero shift amount handling.

This no longer affects any tests after the improvements to the KnownBits shift helpers.

3 years ago[mlir] Add a builder to `linalg.tiled_loop`.
Alexander Belyaev [Wed, 24 Feb 2021 10:39:25 +0000 (11:39 +0100)]
[mlir] Add a builder to `linalg.tiled_loop`.

https://llvm.discourse.group/t/rfc-add-linalg-tileop/2833

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

3 years ago[lldb] Prevent double new lines behind errors/warning/messages from LLDB commands
Raphael Isemann [Wed, 24 Feb 2021 13:08:49 +0000 (14:08 +0100)]
[lldb] Prevent double new lines behind errors/warning/messages from LLDB commands

The current API for printing errors/warnings/messages from LLDB commands
sometimes adds newlines behind the messages for the caller. However, this
happens unconditionally so when the caller already specified a trailing newline
in the error message (or is trying to print a generated error message that ends
in a newline), LLDB ends up printing both the automatically added newline and
the one that was in the error message string. This leads to all the randomly
appearing new lines in error such as:

```
(lldb) command a
error: 'command alias' requires at least two arguments
(lldb) apropos a b
error: 'apropos' must be called with exactly one argument.

(lldb) why is there an empty line behind the second error?
```

This code adds a check that only appends the new line if the passed message
doesn't already contain a trailing new line.

Also removes the AppendRawWarning which had only one caller and doesn't serve
any purpose now.

Reviewed By: #lldb, mib

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

3 years ago[AMDGPU] Add more PAL metadata register names
Jay Foad [Fri, 29 Jan 2021 16:03:30 +0000 (16:03 +0000)]
[AMDGPU] Add more PAL metadata register names

Add all the registers that are currently used by
LLPC: https://github.com/GPUOpen-Drivers/llpc

This only affects disassembly of PAL metadata generated by LLPC and
similar frontends.

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

3 years ago[mlir] Specify cuda-runner pass pipeline as command line options.
Christian Sigg [Sat, 20 Feb 2021 21:16:56 +0000 (22:16 +0100)]
[mlir] Specify cuda-runner pass pipeline as command line options.

The cuda-runner registers two pass pipelines for nested passes,
so that we don't have to use verbose textual pass pipeline specification.

Reviewed By: herhut

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

3 years ago[AMDGPU] Update s_sendmsg messages
Jay Foad [Mon, 25 Jan 2021 17:40:56 +0000 (17:40 +0000)]
[AMDGPU] Update s_sendmsg messages

Update the list of s_sendmsg messages known to the assembler and
disassembler and validate the ones that were added or removed in gfx9
and gfx10.

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

3 years ago[lldb][NFC] Move trivial ValueObject getters/setters to the header
Raphael Isemann [Wed, 24 Feb 2021 13:03:30 +0000 (14:03 +0100)]
[lldb][NFC] Move trivial ValueObject getters/setters to the header

NFC refactoring that moves the definitions of all the trivial getters/setters to the header file
which is what we usually do in LLVM.

Reviewed By: #lldb, JDevlieghere

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

3 years ago[lldb][NFC] Rename the second ValueObjectManager to ValueObjectUpdater and remove...
Raphael Isemann [Wed, 24 Feb 2021 12:26:45 +0000 (13:26 +0100)]
[lldb][NFC] Rename the second ValueObjectManager to ValueObjectUpdater and remove the dead code

`ValueObject.h` contains the `ValueObject::ValueObjectManager` type which is
just a typedef for the ClusterManager that takes care of the whole ValueObject
memory management. However, there is also `ValueObjectManager` defined in the
same header which is only used in the curses UI implementation and consists
mostly of dead and completely untested code.

This code been around since a while (it was added in 2016 as
8369b28da0750129ababae357bea98940800a0e0), so I think we shouldn't just revert
the whole patch.

Instead this patch just moves the class to its own header that it isn't just
hiding in the ValueObject header and renames it to `ValueObjectUpdater` that it
at least has a unique name (which I hope also slightly better reflects the
purpose of this class). I also deleted all the dead code branches and functions.

Reviewed By: #lldb, mib, JDevlieghere

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

3 years ago[OpenCL] Allow taking address of functions as an extension.
Anastasia Stulova [Wed, 24 Feb 2021 12:27:15 +0000 (12:27 +0000)]
[OpenCL] Allow taking address of functions as an extension.

When '__cl_clang_function_pointers' extension is enabled
the parser should allow obtaining the function address.

This fixes PR49264!

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

3 years ago[lldb] Add asserts that prevent construction of cycles in the decl origin tracking
Raphael Isemann [Wed, 24 Feb 2021 12:25:18 +0000 (13:25 +0100)]
[lldb] Add asserts that prevent construction of cycles in the decl origin tracking

LLDB tracks where any imported `clang::Decl` originally came from via a simple
map from 'imported decl' to 'original decl'. That information is used to later
complete parts of the Decl when more information is requested about a certain
Decl (e.g., via the ExternalASTSource interface from Clang).

When finding the 'original decl' for a given decl, the ASTImporterDelegate
essentially just recursively follows the previously mentioned map from
'imported' to 'original decl' until it can find any further 'original decl'. The
final found decl is then the one that will be imported. The recursion is
necessary as in LLDB we don't just import decls from one ASTContext to another,
but also from one ASTContext to another via a (potentially temporary)
ASTContext. For example, the expression parser creates a temporary ASTContext
for parsing the current expression.

The problem with the recursion is however that if we somehow get a cycle into
our mapping, then the ASTImporterDelegate will just infinite recurse. As the
infinite recursion usually happens after the cycle was already created in a code
path such as completing a type, the crash backtraces we get for these bugs are
not very useful. However having the backtrace where the faulty map entry is
created usually makes the code trivial to fix (as there should be some rogue
CopyType call or something similar nearby. See for example D96366).

This patch tries to make these issues easier to track down by putting a bunch of
sanity asserts in the code that fills out the map. All the asserts are just
checking that there is no direct cycle (ASTContext maps to itself) when updating
the origin tracking map.

The assert in the ASTImportDelegate constructor is an `lldbassert` (which also
is getting checked in release builds with disabled asserts) as the code path
there is pretty cold and we can reliably detect a rogue CopyType call from
there.

I also had to update some code in
`ClangASTImporter::ASTImporterDelegate::Imported`. This code already had a
safety check for creating a cycle in the origin tracking map, but it still
constructed an ASTImporter while checking for the cycle (by requesting a
delegate via `GetDelegate` and passing two identical ASTContexts which looks
like a rogue CopyType call to the checks).

Reviewed By: shafik

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

3 years ago[ValueTracking] ComputeKnownBits - minimum leading/trailing zero bits in LSHR/SHL...
Simon Pilgrim [Wed, 24 Feb 2021 12:12:43 +0000 (12:12 +0000)]
[ValueTracking] ComputeKnownBits - minimum leading/trailing zero bits in LSHR/SHL (PR44526)

Followup to D72573 - as detailed in https://blog.regehr.org/archives/1709 we don't make use of the known leading/trailing zeros for shifted values in cases where we don't know the shift amount value.

Stop ValueTracking returning zero for poison shift patterns and use the KnownBits shift helpers directly.

Extend KnownBits::shl to combine all possible shifted combinations if both min/max shift amount values are in range.

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

3 years ago[asan] Avoid putting globals in a comdat section when targetting elf.
Pierre Gousseau [Wed, 24 Feb 2021 12:01:56 +0000 (12:01 +0000)]
[asan] Avoid putting globals in a comdat section when targetting elf.

Putting globals in a comdat for dead-stripping changes the semantic and
can potentially cause false negative odr violations at link time.
If odr indicators are used, we keep the comdat sections, as link time
odr violations will be dectected for the odr indicator symbols.

This fixes PR 47925

3 years ago[Utils] collectBitParts - add truncate() handling
Simon Pilgrim [Wed, 24 Feb 2021 11:48:03 +0000 (11:48 +0000)]
[Utils] collectBitParts - add truncate() handling

3 years ago[docs][JITLink] Remove the JITLink doc for now.
Lang Hames [Wed, 24 Feb 2021 11:32:18 +0000 (22:32 +1100)]
[docs][JITLink] Remove the JITLink doc for now.

I'll reinstate and continue investigation tomorrow.

3 years ago[docs][JITLink] Yet more experiments to try to understand sphinx error.
Lang Hames [Wed, 24 Feb 2021 11:22:16 +0000 (22:22 +1100)]
[docs][JITLink] Yet more experiments to try to understand sphinx error.

3 years ago[docs][JITLink] More experiments to try to understand sphinx error.
Lang Hames [Wed, 24 Feb 2021 11:14:17 +0000 (22:14 +1100)]
[docs][JITLink] More experiments to try to understand sphinx error.

3 years ago[dexter] Force dexter tests to use the host triple
OCHyams [Wed, 24 Feb 2021 11:09:18 +0000 (11:09 +0000)]
[dexter] Force dexter tests to use the host triple

If the default target and host triple don't match then print the following
message when the lit test runs:

    Forcing dexter tests to use host triple {HOST_TRIPLE}.

If we can't target the host arch then, when lit runs, we mark
the dexter test directories as UNSUPPORTED and print the message:

    Host triple {HOST_TRIPLE} not supported. Skipping dexter tests in
    the debuginfo-tests project.

Reviewed By: rnk

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

3 years ago[clangd] Fix a race
Kadir Cetinkaya [Wed, 24 Feb 2021 09:42:42 +0000 (10:42 +0100)]
[clangd] Fix a race

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

3 years ago[DAG] Add basic mul-with-overflow constant folding support
Simon Pilgrim [Wed, 24 Feb 2021 11:08:49 +0000 (11:08 +0000)]
[DAG] Add basic mul-with-overflow constant folding support

As noticed on D97160

3 years ago[docs][JITLink] Make ``ObjectLinkingLayer`` not a paragraph start.
Lang Hames [Wed, 24 Feb 2021 11:04:14 +0000 (22:04 +1100)]
[docs][JITLink] Make ``ObjectLinkingLayer`` not a paragraph start.

More experiments as I try to placate sphinx.

3 years ago[docs][JITLink] Return to `` for inline literals.
Lang Hames [Wed, 24 Feb 2021 10:55:49 +0000 (21:55 +1100)]
[docs][JITLink] Return to `` for inline literals.

Also awkwardly reformat text to test whether the error is occurring
on the line with the '::', or the previous one.

3 years ago[docs][JITLink] Try explicit literal blocks for monospace list elements.
Lang Hames [Wed, 24 Feb 2021 10:47:20 +0000 (21:47 +1100)]
[docs][JITLink] Try explicit literal blocks for monospace list elements.