platform/upstream/llvm.git
3 years ago[OpaquePointers][ThreadSanitizer] Cleanup calls to PointerType::getElementType()
Arthur Eubanks [Fri, 9 Jul 2021 16:24:59 +0000 (09:24 -0700)]
[OpaquePointers][ThreadSanitizer] Cleanup calls to PointerType::getElementType()

Reviewed By: #opaque-pointers, dblaikie

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

3 years agoFix test - mistaken hardcoded path from my local machine.
David Blaikie [Tue, 13 Jul 2021 01:39:41 +0000 (18:39 -0700)]
Fix test - mistaken hardcoded path from my local machine.

3 years agoDebugInfo: Use debug_rnglists.dwo for ranges in debug_info.dwo when parsing DWARFv5
David Blaikie [Tue, 13 Jul 2021 01:10:58 +0000 (18:10 -0700)]
DebugInfo: Use debug_rnglists.dwo for ranges in debug_info.dwo when parsing DWARFv5

This call would incorrectly overwrite (with the .debug_rnglists.dwo from
the executable, if there was one) the rnglists section instead of the
correct value (from the .debug_rnglists.dwo in the .dwo file) that's
applied in DWARFUnit::tryExtractDIEsIfNeeded

3 years ago[mlir][sparse] add support for AND and OR operations
Aart Bik [Mon, 12 Jul 2021 22:22:31 +0000 (15:22 -0700)]
[mlir][sparse] add support for AND and OR operations

Integral AND and OR follow the simple conjunction and disjuction rules
for lattice building. This revision also completes some of the Merge
refactoring by moving the remainder parts that are merger specific from
sparsification into utils files.

Reviewed By: gussmith23

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

3 years ago[llc] Default MCUseDwarfDirectory to true
Fangrui Song [Tue, 13 Jul 2021 00:44:02 +0000 (17:44 -0700)]
[llc] Default MCUseDwarfDirectory to true

For Clang, `MCUseDwarfDirectory` is true by default for the majority cases
(-fintegrated-as or -gdwarf-5; most targets use -fintegrated-as by default).
Defaulting MCUseDwarfDirectory to true can reduce the differences between clang
and llc.

Reviewed By: #debug-info, dblaikie

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

3 years ago[mlir][Linalg] Add 3D pooling named ops to Linalg.
Hanhan Wang [Tue, 13 Jul 2021 00:25:55 +0000 (17:25 -0700)]
[mlir][Linalg] Add 3D pooling named ops to Linalg.

Reviewed By: gysit, hanchung

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

3 years ago[compiler-rt][hwasan] Refactor kAliasRegionStart usage
Leonard Chan [Fri, 9 Jul 2021 20:41:48 +0000 (13:41 -0700)]
[compiler-rt][hwasan] Refactor kAliasRegionStart usage

This moves logic for setting kAliasRegionStart into hwasan_allocator.cpp
so other platforms that do not support aliasing mode will not need to define
kAliasRegionStart.

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

3 years agosanitizer_common: Fix build for tests
Marco Elver [Mon, 12 Jul 2021 22:39:17 +0000 (15:39 -0700)]
sanitizer_common: Fix build for tests

It turns out that COMPILER_RT_TEST_COMPILER_CFLAGS is actually a string
that is being appended to and not a list.

Therefore, append the thread-safety flags to the string. Because CMake
separates list elements by ';' when turning into a string, also
substitute ';' with ' '.

Reviewed By: hctim

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

3 years ago[Driver] Let -fno-integrated-as -gdwarf-5 use -fdwarf-directory-asm
Fangrui Song [Mon, 12 Jul 2021 22:46:20 +0000 (15:46 -0700)]
[Driver] Let -fno-integrated-as -gdwarf-5 use -fdwarf-directory-asm

While GNU as only allows the directory form of the .file directive for DWARF v5,
the integrated assembler prefers the directory form on all DWARF versions
(-fdwarf-directory-asm).

We currently set CC1 -fno-dwarf-directory-asm for -fno-integrated-as -gdwarf-5
which may cause the directory entry 0 and the filename entry 0 to be incorrect
(see D105662 and the example below). This patch makes -fno-integrated-as -gdwarf-5 use
-fdwarf-directory-asm as well.

```
cd /tmp/c

before
% clang -g -gdwarf-5 -fno-integrated-as e/a.c -S -o - | grep '\.file.*0'
        .file   0 "/tmp/c/e/a.c" md5 0x97e31cee64b4e58a4af8787512d735b6
% clang -g -gdwarf-5 -fno-integrated-as e/a.c -c
% llvm-dwarfdump a.o | grep include_directories
include_directories[  0] = "/tmp/c/e"

after
% clang -g -gdwarf-5 -fno-integrated-as e/a.c -S -o - | grep '\.file.*0'
        .file   0 "/tmp/c" "e/a.c" md5 0x97e31cee64b4e58a4af8787512d735b6
% clang -g -gdwarf-5 -fno-integrated-as e/a.c -c
% llvm-dwarfdump a.o | grep include_directories
include_directories[  0] = "/tmp/c"
```

Reviewed By: #debug-info, dblaikie, osandov

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

3 years ago[mlir][tosa] Added shape propagation for TOSA pool operations.
Rob Suderman [Thu, 8 Jul 2021 22:17:15 +0000 (15:17 -0700)]
[mlir][tosa] Added shape propagation for TOSA pool operations.

Pool operations perform the same shape propagation. Included the shape
propagation and tests for these avg_pool2d and max_pool2d.

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

3 years ago[AArch64] Dump a little more info about unimplemented reg-to-reg copies. NFC
Jon Roelofs [Mon, 12 Jul 2021 22:36:36 +0000 (15:36 -0700)]
[AArch64] Dump a little more info about unimplemented reg-to-reg copies. NFC

3 years ago[AArch64] Optimize overflow checks for [s|u]mul.with.overflow.i32.
Eli Friedman [Mon, 12 Jul 2021 22:28:09 +0000 (15:28 -0700)]
[AArch64] Optimize overflow checks for [s|u]mul.with.overflow.i32.

Saves one instruction for signed, uses a cheaper instruction for
unsigned.

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

3 years ago[WebAssembly] Fixed LLD generation of 64-bit __wasm_init_memory
Wouter van Oortmerssen [Mon, 12 Jul 2021 22:05:11 +0000 (15:05 -0700)]
[WebAssembly] Fixed LLD generation of 64-bit __wasm_init_memory

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

3 years ago[mlir][sparse] add restrictive versions of division support
Aart Bik [Fri, 9 Jul 2021 20:45:23 +0000 (13:45 -0700)]
[mlir][sparse] add restrictive versions of division support

Right now, we only accept x/c with nonzero c, since this
conceptually can be treated as a x*(1/c) conjunction for both
FP and INT as far as lattice computations go. The codegen
keeps the division though to preserve precise semantics.

See discussion:
https://llvm.discourse.group/t/sparse-tensors-in-mlir/3389/28

Reviewed By: gussmith23

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

3 years ago[SelectionDAG][RISCV] Support @llvm.vscale.i64() on 32-bit targets.
Eli Friedman [Mon, 12 Jul 2021 20:06:23 +0000 (13:06 -0700)]
[SelectionDAG][RISCV] Support @llvm.vscale.i64() on 32-bit targets.

Not really useful on its own, but D105673 depends on it.

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

3 years ago[libc++] ci: Properly target macOS nodes per-os
Louis Dionne [Mon, 12 Jul 2021 21:26:16 +0000 (17:26 -0400)]
[libc++] ci: Properly target macOS nodes per-os

3 years ago[libc++] Add the 'os=macos' tag to macOS nodes to workaround lack of wildcard matching
Louis Dionne [Mon, 12 Jul 2021 21:22:26 +0000 (17:22 -0400)]
[libc++] Add the 'os=macos' tag to macOS nodes to workaround lack of wildcard matching

3 years agoRevert "Revert "Reset the wakeup timeout when we re-enter the continue wait.""
Jim Ingham [Fri, 9 Jul 2021 01:08:11 +0000 (18:08 -0700)]
Revert "Revert "Reset the wakeup timeout when we re-enter the continue wait.""

This reverts commit 82a38837150099288a1262391ef43e1fd69ffde4.

The original version had a copy-paste error: using the Interrupt timeout
for the ResumeSynchronous wait, which is clearly wrong.  This error would
have been evident with real use, but the interrupt is long enough that it
only caused one testsuite failure (in the Swift fork).

Anyway, I found that mistake and fixed it and checked all the other places
where I had to plumb through a timeout, and added a test with a short
interrupt timeout stepping over a function that takes 3x the interrupt timeout
to complete, so that should detect a similar mistake in the future.

3 years ago[PowerPC] Fix the splat immediate in PPCMIPeephole depending on if we have an Altivec...
Amy Kwan [Mon, 12 Jul 2021 21:19:15 +0000 (16:19 -0500)]
[PowerPC] Fix the splat immediate in PPCMIPeephole depending on if we have an Altivec and VSX splat instruction.

An assertion of the following can occur because Altivec and VSX splats use a different operand number for the immediate:
```
int64_t llvm::MachineOperand::getImm() const: Assertion `isImm() && "Wrong MachineOperand accessor"' failed.
```
This patch updates PPCMIPeephole.cpp assign the correct splat immediate.

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

3 years ago[libc++][ci] Clean up the Docker image
Louis Dionne [Thu, 8 Jul 2021 16:31:06 +0000 (12:31 -0400)]
[libc++][ci] Clean up the Docker image

- Remove symlinks that are not used anymore
- Stop installing GCC 10, which isn't tested anymore

3 years ago[libc++] Use 'os' tags to target Linux libc++ builders
Louis Dionne [Mon, 12 Jul 2021 20:25:29 +0000 (16:25 -0400)]
[libc++] Use 'os' tags to target Linux libc++ builders

3 years ago[clang] Document llvm options controlling pragma unroll
Yaxun (Sam) Liu [Mon, 28 Jun 2021 15:19:43 +0000 (11:19 -0400)]
[clang] Document llvm options controlling pragma unroll

Reviewed by: Artem Belevich

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

3 years ago[mlir][sparse] Add Merger unit tests (with gcc5 build fix)
Gus Smith [Mon, 12 Jul 2021 18:18:23 +0000 (18:18 +0000)]
[mlir][sparse] Add Merger unit tests (with gcc5 build fix)

This is a fix of https://reviews.llvm.org/D104956, which broke the gcc5 build.

We opt to use unit tests rather than check tests as the lattice/merger code is a small C++ component with a well-defined API. Testing this API via check tests would be far less direct and readable. In addition, as the check tests will only be able to test the API indirectly, the tests may break based on unrelated changes; e.g. changes in linalg.

Reviewed By: aartbik

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

3 years ago[libcxx] [test] Fix spurious failures in the thread join test on Windows
Martin Storsjö [Wed, 7 Jul 2021 21:06:08 +0000 (21:06 +0000)]
[libcxx] [test] Fix spurious failures in the thread join test on Windows

Make sure that the detached thread has started up before exiting
the process.

This is exactly the same fix as D105592, with the same pattern
being present in a different test case.

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

3 years ago[clang-tidy] performance-unnecessary-copy-initialization: Do not remove comments...
Felix Berger [Fri, 9 Jul 2021 20:58:01 +0000 (16:58 -0400)]
[clang-tidy] performance-unnecessary-copy-initialization: Do not remove comments on new lines.

When deleting the copy assignment statement because copied variable is not used
only remove trailing comments on the same line.

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

Reviewed-by: ymandel
3 years ago[vscode] fix ubsan problem in the progress event reporter
Walter Erquinigo [Mon, 12 Jul 2021 18:46:36 +0000 (11:46 -0700)]
[vscode] fix ubsan problem in the progress event reporter

The error

UndefinedBehaviorSanitizer: undefined-behavior /Users/buildslave/jenkins/workspace/lldb-cmake-sanitized/llvm-project/lldb/tools/lldb-vscode/ProgressEvent.cpp:89:64 in

was found in https://green.lab.llvm.org/green/view/LLDB/job/lldb-cmake-sanitized/1910/consoleFull#-15641370498254eaf0-7326-4999-85b0-388101f2d404

It turns out that we were not setting m_event_type when initializatin
and update case. The fix is very simple.

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

3 years ago[Attributes] Determine attribute properties from TableGen data
Nikita Popov [Sun, 11 Jul 2021 14:54:03 +0000 (16:54 +0200)]
[Attributes] Determine attribute properties from TableGen data

Continuing from D105763, this allows placing certain properties
about attributes in the TableGen definition. In particular, we
store whether an attribute applies to fn/param/ret (or a combination
thereof). This information is used by the Verifier, as well as the
ForceFunctionAttrs pass. I also plan to use this in LLParser,
which also duplicates info on which attributes are valid where.

This keeps metadata about attributes in one place, and makes it
more likely that it stays in sync, rather than in various
functions spread across the codebase.

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

3 years ago[libcxx][docs] Update the ranges status document to reflect the current state of...
zoecarver [Mon, 12 Jul 2021 20:09:55 +0000 (13:09 -0700)]
[libcxx][docs] Update the ranges status document to reflect the current state of the world.

Marks a few things as done. Marks a few things as in progress. Assigns a few things to me.

3 years ago[WebAssembly] fix typo in range check for Asm locals
Wouter van Oortmerssen [Mon, 12 Jul 2021 20:06:54 +0000 (13:06 -0700)]
[WebAssembly] fix typo in range check for Asm locals

3 years ago[libc++] Encode the arch and OS in buildkite agent tags
Louis Dionne [Mon, 12 Jul 2021 20:01:32 +0000 (16:01 -0400)]
[libc++] Encode the arch and OS in buildkite agent tags

3 years ago[Attributes] Remove duplicate attribute in typeIncompatible() (NFC)
Nikita Popov [Mon, 12 Jul 2021 19:59:29 +0000 (21:59 +0200)]
[Attributes] Remove duplicate attribute in typeIncompatible() (NFC)

InAlloca was listed twice, once as a normal attribute, once as a
type attribute.

3 years ago[Attributes] Replace doesAttrKindHaveArgument() (NFC)
Nikita Popov [Mon, 12 Jul 2021 19:25:46 +0000 (21:25 +0200)]
[Attributes] Replace doesAttrKindHaveArgument() (NFC)

This is now the same as isIntAttrKind(), so use that instead, as
it does not require manual maintenance. The naming is also more
accurate in that both int and type attributes have an argument,
but this method was only targeting int attributes.

I initially wanted to tighten the AttrBuilder assertion, but we
have some in-tree uses that would violate it.

3 years ago[Bazel] ignore build files under libcxx's copy of google-benchmark
Geoffrey Martin-Noble [Mon, 12 Jul 2021 19:14:11 +0000 (12:14 -0700)]
[Bazel] ignore build files under libcxx's copy of google-benchmark

https://github.com/llvm/llvm-project/commit/5208ec5c66dc updated the
of google-benchmark under libcxx adding a BUILD.bazel file. This upsets
Bazel in our overlay configuration because it tries to interpret this
file.

Currently this is breaking the CI:
https://buildkite.com/llvm-project/upstream-bazel-rbe/builds/1828

Tested (same command the CI uses)
`bazel query //... + @llvm-project//... | xargs bazel test --config=generic-clang --config=rbe --test_output=errors --test_tag_filters=-nobuildkite --build_tag_filters=-nobuildkite`

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

3 years ago[libc++] Exit from macos-ci-setup upon error
Louis Dionne [Mon, 12 Jul 2021 19:44:28 +0000 (15:44 -0400)]
[libc++] Exit from macos-ci-setup upon error

3 years ago[CostModel][X86] Adjust fptosi/fptoui SSE/AVX legalized costs based on llvm-mca reports.
Simon Pilgrim [Mon, 12 Jul 2021 16:34:38 +0000 (17:34 +0100)]
[CostModel][X86] Adjust fptosi/fptoui SSE/AVX legalized costs based on llvm-mca reports.

Update (mainly) vXf32/vXf64 -> vXi8/vXi16 fptosi/fptoui costs based on the worst case costs from the script in D103695.

Move to using legalized types wherever possible, which allows us to prune the cost tables.

3 years ago[ARC] Add disassembly for the conditioned move immediate instruction
Thomas Johnson [Thu, 8 Jul 2021 23:45:45 +0000 (16:45 -0700)]
[ARC] Add disassembly for the conditioned move immediate instruction

This change is a step towards implementing codegen for __builtin_clz().
Full support for CLZ with a regression test will follow shortly.
Differential Revision: https://reviews.llvm.org/D105560

3 years ago[libc++][ci] Add arch and os tags to the macOS CI builders
Louis Dionne [Mon, 12 Jul 2021 19:34:17 +0000 (15:34 -0400)]
[libc++][ci] Add arch and os tags to the macOS CI builders

3 years ago[PowerPC][AIX] Fix Zero-width bit fields wrt MaxFieldAlign.
Steven Wan [Mon, 12 Jul 2021 19:31:15 +0000 (15:31 -0400)]
[PowerPC][AIX] Fix Zero-width bit fields wrt MaxFieldAlign.

On AIX when there is a pragma pack, or pragma align in effect then zero-width bitfields should pad out to the end of the bitfield container but not increase the alignment requirements of the struct greater then the max field align.

Reviewed By: ZarkoCA

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

3 years ago[Attributes] Simplify attribute sorting (NFCI)
Nikita Popov [Mon, 12 Jul 2021 19:08:41 +0000 (21:08 +0200)]
[Attributes] Simplify attribute sorting (NFCI)

It's not necessary to explicitly sort by enum/int/type attribute,
as the attribute kinds are already sorted this way. We can directly
sort by kind.

3 years ago[Attributes] Assert correct attribute constructor is used (NFCI)
Nikita Popov [Mon, 12 Jul 2021 18:54:58 +0000 (20:54 +0200)]
[Attributes] Assert correct attribute constructor is used (NFCI)

Assert that enum/int/type attributes go through the constructor
they are supposed to use.

To make sure this can't happen via invalid bitcode, explicitly
verify that the attribute kind if correct there.

3 years agoRevert "sanitizer_common: add simpler ThreadRegistry ctor"
Vitaly Buka [Mon, 12 Jul 2021 18:58:01 +0000 (11:58 -0700)]
Revert "sanitizer_common: add simpler ThreadRegistry ctor"

Breaks https://lab.llvm.org/buildbot/#/builders/sanitizer-x86_64-linux-android

This reverts commit 6062c672bc5e560a4c3dc73741f9e82b39d08527.
This reverts commit 8e489b4b96e31cfb004e03cfa1393c425c504013.

3 years agoAdd newline to fix documentation build
Krzysztof Drewniak [Mon, 12 Jul 2021 16:36:27 +0000 (16:36 +0000)]
Add newline to fix documentation build

Reviewed By: xgupta

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

3 years ago[Attributes] Make type attribute handling more generic (NFCI)
Nikita Popov [Sat, 10 Jul 2021 16:36:00 +0000 (18:36 +0200)]
[Attributes] Make type attribute handling more generic (NFCI)

Followup to D105658 to make AttrBuilder automatically work with
new type attributes. TableGen is tweaked to emit First/LastTypeAttr
markers, based on which we can handle type attributes
programmatically.

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

3 years ago[Bazel] Update configuration to HEAD
Geoffrey Martin-Noble [Mon, 12 Jul 2021 18:24:13 +0000 (11:24 -0700)]
[Bazel] Update configuration to HEAD

Bazel configuration updates for
https://github.com/llvm/llvm-project/commit/75e5f0aac97d,
https://github.com/llvm/llvm-project/commit/c282d55a3857, and
https://github.com/llvm/llvm-project/commit/26e59cc19f86

Tested: `bazel test ... @llvm-project//...`

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

3 years agoRevert "sanitizer_common: optimize memory drain"
Nikita Popov [Mon, 12 Jul 2021 18:28:28 +0000 (20:28 +0200)]
Revert "sanitizer_common: optimize memory drain"

This reverts commit 072669521456a369409cf9db30739a3fac740173.

This causes the following build failure with gcc 10.3.0:

/home/nikic/llvm-project/compiler-rt/lib/sanitizer_common/sanitizer_allocator_primary64.h:114:31: error: declaration of ‘typedef class __sanitizer::MemoryMapper<__sanitizer::SizeClassAllocator64<Params> > __sanitizer::SizeClassAllocator64<Params>::MemoryMapper’ changes meaning of ‘MemoryMapper’ [-fpermissive]
  114 |   typedef MemoryMapper<ThisT> MemoryMapper;

3 years ago[libc++] Update Google benchmark to v 1.5.5
Louis Dionne [Mon, 12 Jul 2021 17:15:34 +0000 (13:15 -0400)]
[libc++] Update Google benchmark to v 1.5.5

3 years ago[PowerPC] Custom Lowering BUILD_VECTOR for v2i64 for P7 as well
Jinsong Ji [Mon, 12 Jul 2021 17:04:54 +0000 (17:04 +0000)]
[PowerPC] Custom Lowering BUILD_VECTOR for v2i64 for P7 as well

The lowering for v2i64 is now guarded with hasDirectMove,
however, the current lowering can handle the pattern correctly,
only lowering it when there is efficient patterns and corresponding
instructions.

The original guard was added in D21135, and was for Legal action.
The code has evloved now, this guard is not necessary anymore.

Reviewed By: #powerpc, nemanjai

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

3 years ago[lld/mac] Implement -application_extension
Nico Weber [Mon, 12 Jul 2021 14:26:54 +0000 (10:26 -0400)]
[lld/mac] Implement -application_extension

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

3 years ago[WebAssembly] Custom combines for f32x4.demote_zero_f64x2
Thomas Lively [Mon, 12 Jul 2021 17:32:18 +0000 (10:32 -0700)]
[WebAssembly] Custom combines for f32x4.demote_zero_f64x2

Replace the clang builtin function and LLVM intrinsic for
f32x4.demote_zero_f64x2 with combines from normal SDNodes. Also add missing
combines for i32x4.trunc_sat_zero_f64x2_{s,u}, which share the same pattern.

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

3 years agosanitizer_common: optimize memory drain
Dmitry Vyukov [Sun, 11 Jul 2021 13:12:24 +0000 (15:12 +0200)]
sanitizer_common: optimize memory drain

Currently we allocate MemoryMapper per size class.
MemoryMapper mmap's and munmap's internal buffer.
This results in 50 mmap/munmap calls under the global
allocator mutex. Reuse MemoryMapper and the buffer
for all size classes. This radically reduces number of
mmap/munmap calls. Smaller size classes tend to have
more objects allocated, so it's highly likely that
the buffer allocated for the first size class will
be enough for all subsequent size classes.

Reviewed By: melver

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

3 years ago[NFC][compiler-rt][hwasan] Move shadow bound variables to hwasan.cpp
Leonard Chan [Fri, 9 Jul 2021 22:14:20 +0000 (15:14 -0700)]
[NFC][compiler-rt][hwasan] Move shadow bound variables to hwasan.cpp

This way, other platforms can define these values.

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

3 years ago[X86] Teach X86FloatingPoint's handleCall to only erase the FP stack if there is...
Craig Topper [Mon, 12 Jul 2021 17:09:15 +0000 (10:09 -0700)]
[X86] Teach X86FloatingPoint's handleCall to only erase the FP stack if there is a regmask operand that clobbers the FP stack.

There are some calls to functions like `__alloca` that are missing
a regmask operand. Lack of a regmask operand means that all
registers that aren't mentioned by def operands are preserved.
__alloca only updates EAX and ESP and has def operands for
them so this is ok. Because there is no regmask the register
allocator won't spill the FP registers across the call. Assuming
we want to keep the FP stack untoched across these calls, we
need to handle this is in the FP stackifier.

We might want to add a proper regmask operand to the code that
creates these calls to indicate all registers are preserved, but we'd
still need this change to the FP stackifier to know to preserve the
FP stack for such a regmask.

The test is kind of long, but bugpoint wasn't able to reduce it
any further.

Fixes PR50782

Reviewed By: pengfei

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

3 years ago[llvm-readobj] Switch command line parsing from llvm::cl to OptTable
Fangrui Song [Mon, 12 Jul 2021 17:14:42 +0000 (10:14 -0700)]
[llvm-readobj] Switch command line parsing from llvm::cl to OptTable

Users should generally observe no difference as long as they don't use
unintended option forms. Behavior changes:

* `-t=d` is removed. Use `-t d` instead.
* `--demangle=false` and `--demangle=0` cannot be used. Omit the option or use `--no-demangle`. Other flag-style options don't have `--no-` forms.
* `--help-list` is removed. This is a `cl::` specific option.
* llvm-readobj now supports grouped short options as well.
* `--color` is removed. This is generally not useful (only apply to errors/warnings) but was inherited from Support.

Some adjustment to the canonical forms
(usually from GNU readelf; currently llvm-readobj has too many redundant aliases):

* --dyn-syms is canonical. --dyn-symbols is a hidden alias
* --file-header is canonical. --file-headers is a hidden alias
* --histogram is canonical. --elf-hash-histogram is a hidden alias
* --relocs is canonical. --relocations is a hidden alias
* --section-groups is canonical. --elf-section-groups is a hidden alias

OptTable avoids global option collision if we decide to support multiplexing for binary utilities.

* Most one-dash long options are still supported. `-dt, -sd, -st, -sr` are dropped due to their conflict with grouped short options.
* `--section-mapping=false` (D57365) is strange but is kept for now.
* Many `cl::opt` variables were unnecessarily external. I added `static` whenever appropriate.

Reviewed By: jhenderson

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

3 years ago[flang][nfc] Simplify CMake
Andrzej Warzynski [Mon, 12 Jul 2021 14:55:47 +0000 (14:55 +0000)]
[flang][nfc] Simplify CMake

Folds `list(APPEND <list> [<element>...])` into the definition of
`<list>`.

3 years ago[mlir][tosa] Added more shape inference for tosa ops
Rob Suderman [Sat, 3 Jul 2021 00:00:20 +0000 (17:00 -0700)]
[mlir][tosa] Added more shape inference for tosa ops

Added shape inference for:
- scatter
- gather
- transpose
- slice
- pad
- concat
- reduction operations

Also updated reshape for more aggressive shape inference.

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

3 years ago[test] Move AMDGPU reloc test from Object to tools/llvm-readobj and simplify it
Fangrui Song [Mon, 12 Jul 2021 17:04:31 +0000 (10:04 -0700)]
[test] Move AMDGPU reloc test from Object to tools/llvm-readobj and simplify it

We already have some reloc-types-elf-*.test serving the similar purpose.

Reviewed By: jhenderson

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

3 years ago[AIX] Emit version string in .file directive
Jinsong Ji [Mon, 12 Jul 2021 03:37:06 +0000 (03:37 +0000)]
[AIX] Emit version string in .file directive

AIX .file directive support including compiler version string.
https://www.ibm.com/docs/en/aix/7.2?topic=ops-file-pseudo-op

This patch adds the support so that it will be easier to identify build
compiler in objects.

Reviewed By: #powerpc, shchenz

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

3 years ago[ARM] Expand types in VQDMULH tests. NFC
David Green [Mon, 12 Jul 2021 16:56:11 +0000 (17:56 +0100)]
[ARM] Expand types in VQDMULH tests. NFC

3 years ago[OpenMP] Remove TSAN annotations from libomp
Joachim Protze [Fri, 4 Jun 2021 12:05:05 +0000 (14:05 +0200)]
[OpenMP] Remove TSAN annotations from libomp

The annotations in libomp were never built by default. The annotations are
also superseded by the annotations which the OMPT tool libarcher.so provides.
With respect to libarcher, libomp behaves as if libarcher would be the last
element of OMP_TOOL_LIBARARIES. I.e., if no other OMPT tool gets active,
libarcher will check if an OpenMP application is built with TSan.

Since libarcher gets loaded by default, enabling LIBOMP_TSAN_SUPPORT would
result in redundant annotations for TSan, which slightly differ in details
and coverage (e.g. task dependencies are not handled well by the annotations
in libomp).

This patch removes all TSan annotations from the OpenMP runtime code.

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

3 years ago[libc++] Remove random [[nodiscard]] in the test suite
Louis Dionne [Mon, 12 Jul 2021 16:31:51 +0000 (12:31 -0400)]
[libc++] Remove random [[nodiscard]] in the test suite

3 years ago[PowerPC] Implement trap and conversion builtins for XL compatibility
Albion Fung [Mon, 12 Jul 2021 03:16:27 +0000 (22:16 -0500)]
[PowerPC] Implement trap and conversion builtins for XL compatibility

This patch implements trap and FP to and from double conversions. The builtins
generate code that mirror what is generated from the XL compiler. Intrinsics
are named conventionally with builtin_ppc, but are aliased to provide the same
builtin names as the XL compiler.

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

3 years ago[llvm-objcopy] Improve performance of long pattern lists
Fangrui Song [Mon, 12 Jul 2021 16:03:33 +0000 (09:03 -0700)]
[llvm-objcopy] Improve performance of long pattern lists

Some users use a long list of fixed patterns (PR50404) and
O(|patterns|*|symbols|) can be too slow. Such usage typically does not use
--regex or --wildcard. We can use a DenseSet<CachedHashStringRef> to optimize
name lookups.

Reviewed By: jhenderson

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

3 years agosanitizer_common: Suppress another thread safety warning
Benjamin Kramer [Mon, 12 Jul 2021 15:55:49 +0000 (17:55 +0200)]
sanitizer_common: Suppress another thread safety warning

Another follow-up to 0da172b1766e1559ef677aa836dce4f1995dfef3

compiler-rt/lib/scudo/scudo_tsd_shared.cpp:103:1: error: mutex 'CandidateTSD->Mutex' is not held on every path through here [-Werror,-Wthread-safety-analysis]
}
^
compiler-rt/lib/scudo/scudo_tsd_shared.cpp:95:21: note: mutex acquired here
      CandidateTSD->lock();
                    ^
compiler-rt/lib/scudo/scudo_tsd_shared.cpp:103:1: error: mutex 'TSD->Mutex' is not held on every path through here [-Werror,-Wthread-safety-analysis]
}
^
compiler-rt/lib/scudo/scudo_tsd_shared.cpp:101:8: note: mutex acquired here
  TSD->lock();
       ^
compiler-rt/lib/scudo/scudo_tsd_shared.cpp:103:1: error: mutex 'TSDs[Index].Mutex' is not held on every path through here [-Werror,-Wthread-safety-analysis]
}
^
compiler-rt/lib/scudo/scudo_tsd_shared.cpp:80:23: note: mutex acquired here
      if (TSDs[Index].tryLock()) {
                      ^

3 years agosanitizer_common: Fix the build for platforms that use shared TSDs
Benjamin Kramer [Mon, 12 Jul 2021 15:47:46 +0000 (17:47 +0200)]
sanitizer_common: Fix the build for platforms that use shared TSDs

Looks like an oversight in 0da172b1766e1559ef677aa836dce4f1995dfef3

compiler-rt/lib/scudo/scudo_tsd_shared.inc:53:1: error: mutex 'TSD->Mutex' is not held on every path through here [-Werror,-Wthread-safety-analysis]
}
^
compiler-rt/lib/scudo/scudo_tsd_shared.inc:49:12: note: mutex acquired here
  if (TSD->tryLock())
           ^

3 years ago[langref] attempt to clarify semantics of inttoptr/ptrtoint for non-integral types
Philip Reames [Mon, 12 Jul 2021 15:47:42 +0000 (08:47 -0700)]
[langref] attempt to clarify semantics of inttoptr/ptrtoint for non-integral types

In review discussion on D104322, Eli and Roman quite reasonable raised concerns about the LangRef not really providing a precise definition for inttoptr/ptrtoint on non-integral types. These had previously been disallowed, but I'd pragmatically allowed them in ac81cb7e6. This is my attempt to improve the situation.

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

3 years ago[Altivec] Use signed comparison for vec_all_* and vec_any_* interfaces
Bardia Mahjour [Mon, 12 Jul 2021 15:41:16 +0000 (11:41 -0400)]
[Altivec] Use signed comparison for vec_all_* and vec_any_* interfaces

We are currently being inconsistent in using signed vs unsigned comparisons for
vec_all_* and vec_any_* interfaces that use vector bool types. For example we
use signed comparison for vec_all_ge(vector signed char, vector bool char) but
unsigned comparison for when the arguments are swapped. GCC and XL use signed
comparison instead. This patch makes clang consistent with itself and with XL
and GCC.

Reviewed By: nemanjai

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

3 years agoReland "[clang-repl] Implement partial translation units and error recovery."
Vassil Vassilev [Mon, 12 Jul 2021 13:35:20 +0000 (13:35 +0000)]
Reland "[clang-repl] Implement partial translation units and error recovery."

Original commit message:

[clang-repl] Implement partial translation units and error recovery.

https://reviews.llvm.org/D96033 contained a discussion regarding efficient
modeling of error recovery. @rjmccall has outlined the key ideas:

Conceptually, we can split the translation unit into a sequence of partial
translation units (PTUs). Every declaration will be associated with a unique PTU
that owns it.

The first key insight here is that the owning PTU isn't always the "active"
(most recent) PTU, and it isn't always the PTU that the declaration
"comes from". A new declaration (that isn't a redeclaration or specialization of
anything) does belong to the active PTU. A template specialization, however,
belongs to the most recent PTU of all the declarations in its signature - mostly
that means that it can be pulled into a more recent PTU by its template
arguments.

The second key insight is that processing a PTU might extend an earlier PTU.
Rolling back the later PTU shouldn't throw that extension away. For example, if
the second PTU defines a template, and the third PTU requires that template to
be instantiated at float, that template specialization is still part of the
second PTU. Similarly, if the fifth PTU uses an inline function belonging to the
fourth, that definition still belongs to the fourth. When we go to emit code in
a new PTU, we map each declaration we have to emit back to its owning PTU and
emit it in a new module for just the extensions to that PTU. We keep track of
all the modules we've emitted for a PTU so that we can unload them all if we
decide to roll it back.

Most declarations/definitions will only refer to entities from the same or
earlier PTUs. However, it is possible (primarily by defining a
previously-declared entity, but also through templates or ADL) for an entity
that belongs to one PTU to refer to something from a later PTU. We will have to
keep track of this and prevent unwinding to later PTU when we recognize it.
Fortunately, this should be very rare; and crucially, we don't have to do the
bookkeeping for this if we've only got one PTU, e.g. in normal compilation.
Otherwise, PTUs after the first just need to record enough metadata to be able
to revert any changes they've made to declarations belonging to earlier PTUs,
e.g. to redeclaration chains or template specialization lists.

It should even eventually be possible for PTUs to provide their own slab
allocators which can be thrown away as part of rolling back the PTU. We can
maintain a notion of the active allocator and allocate things like Stmt/Expr
nodes in it, temporarily changing it to the appropriate PTU whenever we go to do
something like instantiate a function template. More care will be required when
allocating declarations and types, though.

We would want the PTU to be efficiently recoverable from a Decl; I'm not sure
how best to do that. An easy option that would cover most declarations would be
to make multiple TranslationUnitDecls and parent the declarations appropriately,
but I don't think that's good enough for things like member function templates,
since an instantiation of that would still be parented by its original class.
Maybe we can work this into the DC chain somehow, like how lexical DCs are.

We add a different kind of translation unit `TU_Incremental` which is a
complete translation unit that we might nonetheless incrementally extend later.
Because it is complete (and we might want to generate code for it), we do
perform template instantiation, but because it might be extended later, we don't
warn if it declares or uses undefined internal-linkage symbols.

This patch teaches clang-repl how to recover from errors by disconnecting the
most recent PTU and update the primary PTU lookup tables. For instance:

```./clang-repl
clang-repl> int i = 12; error;
In file included from <<< inputs >>>:1:
input_line_0:1:13: error: C++ requires a type specifier for all declarations
int i = 12; error;
            ^
error: Parsing failed.
clang-repl> int i = 13; extern "C" int printf(const char*,...);
clang-repl> auto r1 = printf("i=%d\n", i);
i=13
clang-repl> quit
```

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

3 years ago[SelectionDAG] Simplify PromoteIntRes_INSERT_SUBVECTOR to only handle result
Bradley Smith [Thu, 8 Jul 2021 11:28:38 +0000 (11:28 +0000)]
[SelectionDAG] Simplify PromoteIntRes_INSERT_SUBVECTOR to only handle result

Let other parts of legalization handle the rest of the node, this allows
re-use of existing optimizations elsewhere.

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

3 years ago[lld/mac] Make tbd files in one test valid
Nico Weber [Mon, 12 Jul 2021 15:12:11 +0000 (11:12 -0400)]
[lld/mac] Make tbd files in one test valid

No behavior change, but ld64 can't load .tbd files without the
trailing `...`, so include them to make it easier to run tests
with l64 too.

3 years ago[libc++] Test on Clang ToT by default
Louis Dionne [Mon, 12 Jul 2021 15:10:59 +0000 (11:10 -0400)]
[libc++] Test on Clang ToT by default

This is what ffccf96e90d6b should have enabled, however the symlink
in the Docker image was not pointing to the right compiler, so we were
testing with Clang 12 instead of ToT.

3 years ago[SLP] add test for multiple logical reductions; NFC
Sanjay Patel [Mon, 12 Jul 2021 13:49:59 +0000 (09:49 -0400)]
[SLP] add test for multiple logical reductions; NFC

More coverage for:
D105730

3 years agosanitizer_common: support printing __m128i type
Dmitry Vyukov [Mon, 10 May 2021 13:35:14 +0000 (15:35 +0200)]
sanitizer_common: support printing __m128i type

__m128i is vector SSE type used in tsan.
It's handy to be able to print it for debugging.

Reviewed By: vitalybuka

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

3 years agoRemove unused parameter from parseMSInlineAsm.
Simon Tatham [Mon, 12 Jul 2021 14:05:12 +0000 (15:05 +0100)]
Remove unused parameter from parseMSInlineAsm.

No implementation uses the `LocCookie` parameter at all. Errors are
reported from inside that function by `llvm::SourceMgr`, and the
instance of that at the clang call site arranges to pass the error
messages back to a `ClangAsmParserCallback`, which is where the clang
SourceLocation for the error is computed.

(This is part of a patch series working towards the ability to make
SourceLocation into a 64-bit type to handle larger translation units.
But this particular change seems beneficial in its own right.)

Reviewed By: miyuki

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

3 years ago[analyzer] LoopUnrolling: fix crash when a loop counter is captured in a lambda by...
Abbas Sabra [Mon, 12 Jul 2021 14:04:56 +0000 (17:04 +0300)]
[analyzer] LoopUnrolling: fix crash when a loop counter is captured in a lambda by reference

Reviewed By: vsavchenko

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

3 years ago[AArch64] Silence unused variable warning. NFC.
Benjamin Kramer [Mon, 12 Jul 2021 14:01:11 +0000 (16:01 +0200)]
[AArch64] Silence unused variable warning. NFC.

AArch64ISelLowering.cpp:15167:8: warning: unused variable 'OpCode' [-Wunused-variable]
  auto OpCode = N->getOpcode();
       ^

3 years ago[libc++] NFC: Fix synopsis comments and sort includes in ranges
Louis Dionne [Mon, 12 Jul 2021 13:54:53 +0000 (09:54 -0400)]
[libc++] NFC: Fix synopsis comments and sort includes in ranges

3 years ago[clang-tidy] performance-unnecessary-copy-initialization: Disable structured bindings.
Felix Berger [Fri, 9 Jul 2021 19:53:40 +0000 (15:53 -0400)]
[clang-tidy] performance-unnecessary-copy-initialization: Disable structured bindings.

Structured bindings can currently trigger the check and lead to a wrong
fix. Because the DecompositionDecl itself is not used and the check does not
iterate through its the decl's bindings to verify whether the bindings' holding
vars are used this leads to the whole statement to be deleted.

To support structured bindings properly 3 cases would need to be considered.

  1. All holding vars are not used -> The statement can be deleted.
  2. All holding vars are used as const or not used -> auto can be converted to const auto&.
  3. Neither case is true -> leave unchanged.

In the check we'll have to separate the logic that determines this from the code
that produces the diagnostic and fixes and first determine which of the cases
we're dealing with before creating fixes.

Since this is a bigger refactoring we'll disable structured bindings for now to
prevent incorrect fixes.

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

Reviewed-by: ymandel
3 years agosanitizer_common: allow COMMON_INTERCEPTOR_ENTER to use labels
Dmitry Vyukov [Sun, 11 Jul 2021 12:25:40 +0000 (14:25 +0200)]
sanitizer_common: allow COMMON_INTERCEPTOR_ENTER to use labels

The memcpy interceptor is the only one that uses COMMON_INTERCEPTOR_ENTER
more than once in a single function. This does not allow COMMON_INTERCEPTOR_ENTER
to use labels, because they are global for the whole function (not block scoped).
Don't include COMMON_INTERCEPTOR_ENTER code twice.

Reviewed By: melver

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

3 years ago[lldb][NFC] Use ArrayRef in TypeSystemClang::SetFunctionParameters
Raphael Isemann [Mon, 12 Jul 2021 13:16:44 +0000 (15:16 +0200)]
[lldb][NFC] Use ArrayRef in TypeSystemClang::SetFunctionParameters

The implementation converts the pointer/size pair anyway back to ArrayRef.

3 years ago[MLIR][StandardToLLVM] Move `copyUnrankedDescriptors` to pattern
Frederik Gossen [Mon, 12 Jul 2021 13:14:25 +0000 (15:14 +0200)]
[MLIR][StandardToLLVM] Move `copyUnrankedDescriptors` to pattern

Make the function `copyUnrankedDescriptors` accessible in
`ConvertToLLVMPattern`.

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

3 years ago[AArch64] Add target features for Armv9-A Scalable Matrix Extension (SME)
Cullen Rhodes [Mon, 12 Jul 2021 10:58:36 +0000 (10:58 +0000)]
[AArch64] Add target features for Armv9-A Scalable Matrix Extension (SME)

First patch in a series adding MC layer support for the Arm Scalable
Matrix Extension.

This patch adds the following features:

    sme, sme-i64, sme-f64

The sme-i64 and sme-f64 flags are for the optional I16I64 and F64F64
features.

If a target supports I16I64 then the following instructions are
implemented:

  * 64-bit integer ADDHA and ADDVA variants (D105570).
  * SMOPA, SMOPS, SUMOPA, SUMOPS, UMOPA, UMOPS, USMOPA, and USMOPS
    instructions that accumulate 16-bit integer outer products into 64-bit
    integer tiles.

If a target supports F64F64 then the FMOPA and FMOPS instructions that
accumulate double-precision floating-point outer products into
double-precision tiles are implemented.

Outer products are implemented in D105571.

The reference can be found here:
https://developer.arm.com/documentation/ddi0602/2021-06

Reviewed By: CarolineConcatto

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

3 years agoFix warning '-Wparentheses'. NFC.
Michael Liao [Mon, 12 Jul 2021 13:23:59 +0000 (09:23 -0400)]
Fix warning '-Wparentheses'. NFC.

3 years ago[SystemZ] Bugfix for the 'N' code for inline asm operand.
Jonas Paulsson [Sat, 10 Jul 2021 09:15:12 +0000 (11:15 +0200)]
[SystemZ]  Bugfix for the 'N' code for inline asm operand.

Don't use a local MachineOperand copy in SystemZAsmPrinter::PrintAsmOperand()
and change the register as it may break the MRI tracking of register
uses. Use an MCOperand instead.

Review: Ulrich Weigand

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

3 years ago[InstCombine] reduce signbit test of logic ops to cmp with zero
Sanjay Patel [Mon, 12 Jul 2021 12:58:05 +0000 (08:58 -0400)]
[InstCombine] reduce signbit test of logic ops to cmp with zero

This is the pattern from the description of:
https://llvm.org/PR50816

There might be a way to generalize this to a smaller or more
generic pattern, but I have not found it yet.

https://alive2.llvm.org/ce/z/ShzJoF

define i1 @src(i8 %x) {
  %add = add i8 %x, -1
  %xor = xor i8 %x, -1
  %and = and i8 %add, %xor
  %r = icmp slt i8 %and, 0
  ret i1 %r
}

define i1 @tgt(i8 %x) {
  %r = icmp eq i8 %x, 0
  ret i1 %r
}

3 years ago[InstCombine][tests] add tests for signbit + logic; NFC
Sanjay Patel [Mon, 12 Jul 2021 12:43:29 +0000 (08:43 -0400)]
[InstCombine][tests] add tests for signbit + logic; NFC

PR50816

3 years ago[mlir][linalg][python] Add auto-generated file warning (NFC).
Tobias Gysi [Mon, 12 Jul 2021 12:31:30 +0000 (12:31 +0000)]
[mlir][linalg][python] Add auto-generated file warning (NFC).

Annotate LinalgNamedStructuredOps.yaml with a comment stating the file is auto-generated and should not be edited manually.

Reviewed By: nicolasvasilache

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

3 years ago[CostModel][X86] Adjust truncate SSE/AVX legalized costs based on llvm-mca reports.
Simon Pilgrim [Mon, 12 Jul 2021 11:29:35 +0000 (12:29 +0100)]
[CostModel][X86] Adjust truncate SSE/AVX legalized costs based on llvm-mca reports.

Update truncation costs based on the worst case costs from the script in D103695.

Move to using legalized types wherever possible, which allows us to prune the cost tables.

3 years ago[gn build] port 0da172b1766e more
Nico Weber [Mon, 12 Jul 2021 12:50:11 +0000 (08:50 -0400)]
[gn build] port 0da172b1766e more

3 years ago[AArch64] Set the latency of Cortex-A55 stores to 1
David Green [Mon, 12 Jul 2021 12:39:21 +0000 (13:39 +0100)]
[AArch64] Set the latency of Cortex-A55 stores to 1

This sets the latency of stores to 1 in the Cortex-A55 scheduling model,
to better match the values given in the software optimization guide.

The latency of a store in normal llvm scheduling does not appear to have
a lot of uses. If the store has no outputs then the latency is somewhat
meaningless (and pre/post increment update operands use the WriteAdr
write for those operands instead). The one place it does alter things is
the latency between a store and the end of the scheduling region, which
can in turn have an effect on the critical path length. As a result a
latency of 1 is more correct and offers ever-so-slightly better
scheduling of instructions near the end of the block.

They are marked as RetireOOO to keep the llvm-mca from introducing
stalls where non would exist.

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

3 years ago[gn build] (semi-manually) port 0da172b1766e
Nico Weber [Mon, 12 Jul 2021 12:15:59 +0000 (08:15 -0400)]
[gn build] (semi-manually) port 0da172b1766e

3 years agoPartially implement P1401R5 (Narrowing contextual conversions to bool)
Corentin Jabot [Mon, 12 Jul 2021 12:03:51 +0000 (08:03 -0400)]
Partially implement P1401R5 (Narrowing contextual conversions to bool)

Support Narrowing conversions to bool in if constexpr condition
under C++23 language mode.

Only if constexpr is implemented as the behavior of static_assert
is already conforming. Still need to work on explicit(bool) to
complete support.

3 years agosanitizer_common: fix 32-bit build
Dmitry Vyukov [Mon, 12 Jul 2021 11:57:14 +0000 (13:57 +0200)]
sanitizer_common: fix 32-bit build

https://reviews.llvm.org/D105716 enabled thread safety annotations,
and that broke 32-bit build:
https://green.lab.llvm.org/green/job/lldb-cmake/33604/consoleFull#-77815080549ba4694-19c4-4d7e-bec5-911270d8a58c

1. Enable thread-safety analysis in unit tests
(this catches the breakage even in 64-bit mode).
2. Add NO_THREAD_SAFETY_ANALYSIS to sanitizer_allocator_primary32.h
to unbreak the build.

Reviewed By: melver

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

3 years agoFix the Clang documentation builder; NFC.
Aaron Ballman [Mon, 12 Jul 2021 11:58:06 +0000 (07:58 -0400)]
Fix the Clang documentation builder; NFC.

It was broken three days ago by the changes in D95561.

3 years ago[lldb/Target] Fix event handling during process launch
Med Ismail Bennani [Mon, 12 Jul 2021 11:32:07 +0000 (12:32 +0100)]
[lldb/Target] Fix event handling during process launch

This patch fixes process event handling when the events are broadcasted
at launch. To do so, the patch introduces a new listener to fetch events
by hand off the event queue and then resending them ensure the event ordering.

Differental Revision: https://reviews.llvm.org/D105698

Signed-off-by: Med Ismail Bennani <medismail.bennani@gmail.com>
3 years ago[RS4GC] Use one DVCache for both inlineGetBaseAndOffset() and insertParsePoints()
Yevgeny Rouban [Mon, 12 Jul 2021 11:06:06 +0000 (18:06 +0700)]
[RS4GC] Use one DVCache for both inlineGetBaseAndOffset() and insertParsePoints()

This new test demonstrates a case where a base ptr is generated
twice for the same value: the first one is generated while
the gc.get.pointer.base() is inlined, the second is generated
for the statepoint. This happens because the methods
inlineGetBaseAndOffset() and insertParsePoints() do not share
their defining value cache used by the findBasePointer() method.

Reviewed By: reames
Differential Revision: https://reviews.llvm.org/D103240

3 years ago[RS4GC] Add a test to demonstrate duplication of base generation. NFC
Yevgeny Rouban [Mon, 12 Jul 2021 10:35:10 +0000 (17:35 +0700)]
[RS4GC] Add a test to demonstrate duplication of base generation. NFC

This new test demonstrates a case where a base ptr is generated
twice for the same value: the first one is generated while
the gc.get.pointer.base() is inlined, the second is generated
for the statepoint. This happens because the methods
inlineGetBaseAndOffset() and insertParsePoints() do not share
their defining value cache used by the findBasePointer() method.

Reviewed By: reames
Differential Revision: https://reviews.llvm.org/D103238

3 years ago[PowerPC] Fix rounding mode for vec_round in altivec.h
Nemanja Ivanovic [Mon, 12 Jul 2021 10:49:12 +0000 (05:49 -0500)]
[PowerPC] Fix rounding mode for vec_round in altivec.h

The function is supposed to be the equivalent of rint() (as in
round to nearest, ties to even) rather than round() (round to
nearest, ties away from zero). In fact, the instruction we emit
without VSX is vrfin which is correct. However, with VSX we emit
xvrspi which is the equivalent of round() and therefore incorrect.
Since there is no equivalent VSX instruction, simply use vrfin
regardless of availability of VSX.

3 years agosanitizer_common: make sem_trywait as non-blocking
Dmitry Vyukov [Sun, 11 Jul 2021 12:43:31 +0000 (14:43 +0200)]
sanitizer_common: make sem_trywait as non-blocking

sem_trywait never blocks.
Use REAL instead of COMMON_INTERCEPTOR_BLOCK_REAL.

Reviewed By: melver

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

3 years agosanitizer_common: remove debugging logic from the internal allocator
Dmitry Vyukov [Sun, 11 Jul 2021 12:51:58 +0000 (14:51 +0200)]
sanitizer_common: remove debugging logic from the internal allocator

The internal allocator adds 8-byte header for debugging purposes.
The problem with it is that it's not possible to allocate nicely-sized
objects without a significant overhead. For example, if we allocate
512-byte objects, that will be rounded up to 768 or something.
This logic migrated from tsan where it was added during initial development,
I don't remember that it ever caught anything (we don't do bugs!).
Remove it so that it's possible to allocate nicely-sized objects
without overheads.

Reviewed By: melver

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

3 years ago[OpenMP] Support OpenMP 5.1 attributes
Aaron Ballman [Mon, 12 Jul 2021 10:51:19 +0000 (06:51 -0400)]
[OpenMP] Support OpenMP 5.1 attributes

OpenMP 5.1 added support for writing OpenMP directives using [[]]
syntax in addition to using #pragma and this introduces support for the
new syntax.

In OpenMP, the attributes take one of two forms:
[[omp::directive(...)]] or [[omp::sequence(...)]]. A directive
attribute contains an OpenMP directive clause that is identical to the
analogous #pragma syntax. A sequence attribute can contain either
sequence or directive arguments and is used to ensure that the
attributes are processed sequentially for situations where the order of
the attributes matter (remember:
https://eel.is/c++draft/dcl.attr.grammar#4.sentence-4).

The approach taken here is somewhat novel and deserves mention. We
could refactor much of the OpenMP parsing logic to work for either
pragma annotation tokens or for attribute clauses. It would be a fair
amount of effort to share the logic for both, but it's certainly
doable. However, the semantic attribute system is not designed to
handle the arbitrarily complex arguments that OpenMP directives
contain. Adding support to thread the novel parsed information until we
can produce a semantic attribute would be considerably more effort.
What's more, existing OpenMP constructs are not (often) represented as
semantic attributes. So doing this through Attr.td would be a massive
undertaking that would likely only benefit OpenMP and comes with
additional risks. Rather than walk down that path, I am taking
advantage of the fact that the syntax of the directives within the
directive clause is identical to that of the #pragma form. Once the
parser recognizes that we're processing an OpenMP attribute, it caches
all of the directive argument tokens and then replays them as though
the user wrote a pragma. This reuses the same OpenMP parsing and
semantic logic directly, but does come with a risk if the OpenMP
committee decides to purposefully diverge their pragma and attribute
syntaxes. So, despite this being a novel approach that does token
replay, I think it's actually a better approach than trying to do this
through the declarative syntax in Attr.td.