platform/upstream/llvm.git
2 years ago[funcattrs] Use callsite param attributes from indirect calls when inferring access...
Philip Reames [Thu, 23 Dec 2021 02:21:59 +0000 (18:21 -0800)]
[funcattrs] Use callsite param attributes from indirect calls when inferring access attributes

Arguments to an indirect call is by definition outside the SCC, but there's no reason we can't use locally defined facts on the call site. This also has the nice effect of further simplifying the code.

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

2 years ago[docs] Update new builder instructions to starting on the staging buildmaster
Philip Reames [Thu, 23 Dec 2021 02:19:37 +0000 (18:19 -0800)]
[docs] Update new builder instructions to starting on the staging buildmaster

This adds a step in the instructions to switch to the production buildmaster at the very end (after explicit approval), and updates the early instruction to start with the builder pointed at the staging buildmaster.

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

2 years ago[ELF] Replace LazyObjFile with lazy ObjFile/BitcodeFile
Fangrui Song [Thu, 23 Dec 2021 01:41:50 +0000 (17:41 -0800)]
[ELF] Replace LazyObjFile with lazy ObjFile/BitcodeFile

The new `lazy` state is the inverse of the previous `LazyObjFile::extracted`.
There are many advantages:

* previously when a LazyObjFile was extracted, a new ObjFile/BitcodeFile was created; now the file is reused, just with `lazy` cleared
* avoid the confusing transfer of `symbols` from LazyObjFile to the new file
* the `incompatible file:` diagnostic is unified with `is incompatible with`
* simpler code, smaller executable (6200+ bytes smaller on x86-64)
* make eager parsing feasible (for parallel section/symbol table initialization)

2 years ago[libc++] Remove unused headers from <filesystem>
Nikolas Klauser [Wed, 22 Dec 2021 10:00:37 +0000 (11:00 +0100)]
[libc++] Remove unused headers from <filesystem>

Remove unused headers from `<filesystem>`

Spies: libcxx-commits

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

2 years ago[DFSan] Add functions to print origin trace from origin id instead of address.
Andrew Browne [Wed, 22 Dec 2021 20:35:42 +0000 (12:35 -0800)]
[DFSan] Add functions to print origin trace from origin id instead of address.

dfsan_print_origin_id_trace
dfsan_sprint_origin_id_trace

Reviewed By: vitalybuka

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

2 years ago[libc] add modified Eisel-Lemire for long doubles
Michael Jones [Fri, 12 Nov 2021 23:45:56 +0000 (15:45 -0800)]
[libc] add modified Eisel-Lemire for long doubles

The Eisel-Lemire algorithm is an effecient way to handle converting to
floating point numbers from strings, but in its base form it only
supports up to 64 bit floating point numbers. This adds an
implementation to handle long doubles.

Reviewed By: lntue

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

2 years ago[LLDB][DWARF] Fix duplicate TypeSP in type list
Zequan Wu [Tue, 21 Dec 2021 00:18:25 +0000 (16:18 -0800)]
[LLDB][DWARF] Fix duplicate TypeSP in type list

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

2 years agoRevert "[DwarfDebug] Support emitting function-local declaration for a lexical block...
David Blaikie [Wed, 22 Dec 2021 22:29:41 +0000 (14:29 -0800)]
Revert "[DwarfDebug] Support emitting function-local declaration for a lexical block" & dependent patches

This patch causes invalid DWARF to be generated in some cases of LTO +
Split DWARF - follow-up on the original review thread (D113741) contains
further detail and test cases.

This reverts commit 75b622a7959479ccdb758ebe0973061b7b4fcacd.
This reverts commit b6ccca217c35a95b8c2a337a7801b37cb23dbae2.
This reverts commit 514d37441918dd04a2cd4f35c08959d7c3ff096d.

2 years ago[AMDGPU] Select build_vector DAG nodes according to the divergence
alex-t [Wed, 22 Dec 2021 21:45:01 +0000 (00:45 +0300)]
[AMDGPU] Select build_vector DAG nodes according to the divergence

This change enables divergence-driven instruction selection for the build_vector DAG nodes.
It also enables packed i16 instructions for GFX9.

Reviewed By: rampitec

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

2 years ago[libc++] Remove "clang-format off/on" comments. NFC.
Arthur O'Dwyer [Wed, 22 Dec 2021 22:56:03 +0000 (17:56 -0500)]
[libc++] Remove "clang-format off/on" comments. NFC.

These headers have stabilized; we don't expect anyone to be
blindly clang-formatting them anymore.
Leave the comments in `__format/*.h` for Mark to remove at his leisure.

2 years ago[NFC][sanitizer] Reformat script
Vitaly Buka [Wed, 22 Dec 2021 22:12:19 +0000 (14:12 -0800)]
[NFC][sanitizer] Reformat script

2 years ago[NFC][sanitizer] Reformat a part of the file
Vitaly Buka [Wed, 22 Dec 2021 22:13:24 +0000 (14:13 -0800)]
[NFC][sanitizer] Reformat a part of the file

2 years ago[libc][Obvious] Add target OSUtil tests only if the target OS/arch match.
Siva Chandra Reddy [Wed, 22 Dec 2021 22:19:38 +0000 (22:19 +0000)]
[libc][Obvious] Add target OSUtil tests only if the target OS/arch match.

2 years ago[ELF] Change some global pointers to unique_ptr
Fangrui Song [Wed, 22 Dec 2021 22:36:14 +0000 (14:36 -0800)]
[ELF] Change some global pointers to unique_ptr

Currently the singleton `config` is assigned by `config = make<Configuration>()`
and (if `canExitEarly` is false) destroyed by `lld::freeArena`.

`make<Configuration>` allocates a stab with `malloc(4096)`. This both wastes
memory and bloats the executable (every type instantiates `BumpPtrAllocator`
which costs more than 1KiB code on x86-64).

(No need to worry about `clang::no_destroy`. Regular invocations (`canExitEarly`
is true) call `_Exit` via llvm::sys::Process::ExitNoCleanup.)

Reviewed By: lichray

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

2 years ago[libc] Move the x86_64 syscall functions to OSUtil.
Siva Chandra Reddy [Wed, 22 Dec 2021 18:17:50 +0000 (18:17 +0000)]
[libc] Move the x86_64 syscall functions to OSUtil.

Reviewed By: michaelrj, lntue

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

2 years ago[NFC][mlgo]Make the test model generator inlining-specific
Mircea Trofin [Wed, 22 Dec 2021 21:17:10 +0000 (13:17 -0800)]
[NFC][mlgo]Make the test model generator inlining-specific

When looking at building the generator for regalloc, we realized we'd
need quite a bit of custom logic, and that perhaps it'd be easier to
just have each usecase (each kind of mlgo policy) have it's own
stand-alone test generator.

This patch just consolidates the old `config.py` and
`generate_mock_model.py` into one file, and does away with
subdirectories under Analysis/models.

2 years agoResolve -Wdocumentation warning in ClangTidyDiagnosticConsumer (NFC)
Salman Javed [Wed, 22 Dec 2021 21:18:45 +0000 (10:18 +1300)]
Resolve -Wdocumentation warning in ClangTidyDiagnosticConsumer (NFC)

Change to comments only; NFC.

```
ClangTidyDiagnosticConsumer.h:245:6: warning: '\param' command used in a
comment that is not attached to a function declaration [-Wdocumentation]
```

See this build for an example:
https://lab.llvm.org/buildbot/#/builders/109/builds/27293/steps/5/logs/warnings__702_

2 years ago[DSE] Fix invalid removal of store instruction
Marianne Mailhot-Sarrasin [Wed, 22 Dec 2021 21:11:23 +0000 (16:11 -0500)]
[DSE] Fix invalid removal of store instruction

Fix handling of alloc-like instructions in isGuaranteedLoopInvariant(). It was not valid when the 'KillingDef' was outside of the loop, while the 'CurrentDef' was inside the loop. In that case, the 'KillingDef' only overwrites the definition from the last iteration of the loop, and not the ones of all iterations. Therefor it does not make the 'CurrentDef' to be dead, and must not remove it.

Fixing issue : https://github.com/llvm/llvm-project/issues/52774

Reviewed by: Florian Hahn

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

2 years ago[mlir] Add unit test for disabling canonicalizer patterns (NFC)
Mogball [Wed, 22 Dec 2021 21:06:01 +0000 (21:06 +0000)]
[mlir] Add unit test for disabling canonicalizer patterns (NFC)

2 years ago[NFC][mlgo]Rename a variable in TensorFlowCompile.cmake
Mircea Trofin [Wed, 22 Dec 2021 20:54:37 +0000 (12:54 -0800)]
[NFC][mlgo]Rename a variable in TensorFlowCompile.cmake

Remaining var that had 'inlining' in name, despite being general-purpose

2 years agoFix more clang-tidy cleanups in mlir/ (NFC)
Mehdi Amini [Wed, 22 Dec 2021 00:19:53 +0000 (00:19 +0000)]
Fix more clang-tidy cleanups in mlir/ (NFC)

2 years ago[Hexagon] Make conversions to vector predicate types explicit for builtins
Krzysztof Parzyszek [Wed, 22 Dec 2021 19:29:36 +0000 (11:29 -0800)]
[Hexagon] Make conversions to vector predicate types explicit for builtins

HVX does not have load/store instructions for vector predicates (i.e. bool
vectors). Because of that, vector predicates need to be converted to another
type before being stored, and the most convenient representation is an HVX
vector.
As a consequence, in C/C++, source-level builtins that either take or
produce vector predicates take or return regular vectors instead. On the
other hand, the corresponding LLVM intrinsics do have boolean types that,
and so a conversion of the operand or the return value was necessary.
This conversion would happen inside clang's codegen, but was somewhat
fragile.

This patch changes the strategy: a builtin that takes a vector predicate
now really expects a vector predicate. Since such a predicate cannot be
provided via a variable, this builtin must be composed with other builtins
that either convert vector to a predicate (V6_vandvrt) or predicate to a
vector (V6_vandqrt).

For users using builtins defined in hvx_hexagon_protos.h there is no impact:
the conversions were added to that file. Other users will need to insert
- __builtin_HEXAGON_V6_vandvrt[_128B](V, -1) to convert vector V to a
  vector predicate, or
- __builtin_HEXAGON_V6_vandqrt[_128B](Q, -1) to convert vector predicate Q
  to a vector.

Builtins __builtin_HEXAGON_V6_vmaskedstore.* are a temporary exception to
that, but they are deprecated and should not be used anyway. In the future
they will either follow the same rule, or be removed.

2 years agoResolve lint warning about converting unsigned to signed (NFC)
Salman Javed [Wed, 22 Dec 2021 20:31:45 +0000 (09:31 +1300)]
Resolve lint warning about converting unsigned to signed (NFC)

FileOffset is unsigned while getLocWithOffset() requires a signed value.

2 years ago[mlir] Add missing unit tests to BUILD.bazel
Mogball [Wed, 22 Dec 2021 20:00:00 +0000 (20:00 +0000)]
[mlir] Add missing unit tests to BUILD.bazel

Several unit test folders were missing from the bazel build, including: Transforms, Conversion, Rewrite

2 years ago[DSE] Add test case showing bug PR52774.
Marianne Mailhot-Sarrasin [Wed, 22 Dec 2021 19:39:15 +0000 (14:39 -0500)]
[DSE] Add test case showing bug PR52774.

Pre-commiting the test case before the bug fix.

Reviewed by: Florian Hahn

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

2 years ago[mlir] Update BUILD.bazel to include `scf_tests`
Mogball [Wed, 22 Dec 2021 19:26:23 +0000 (19:26 +0000)]
[mlir] Update BUILD.bazel to include `scf_tests`

2 years ago[libc][obvious] fix formatting mistake
Michael Jones [Wed, 22 Dec 2021 19:24:02 +0000 (11:24 -0800)]
[libc][obvious] fix formatting mistake

I missed two instances of "SetUp" being replaced by "set_up" and
"TearDown" being replaced by "tear_down" when finalizing the formatting
change. This fixes that.

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

2 years ago[NFC][AMDGPU][CostModel] Add tests for AMDGPU cost model, part 2.
Daniil Fukalov [Wed, 22 Dec 2021 19:33:57 +0000 (22:33 +0300)]
[NFC][AMDGPU][CostModel] Add tests for AMDGPU cost model, part 2.

2 years ago[NFC][AMDGPU][CostModel] Add tests for AMDGPU cost model.
Daniil Fukalov [Wed, 22 Dec 2021 19:32:09 +0000 (22:32 +0300)]
[NFC][AMDGPU][CostModel] Add tests for AMDGPU cost model.

2 years ago[mlir] Fix missing namespace (NFC)
Mogball [Wed, 22 Dec 2021 19:16:09 +0000 (19:16 +0000)]
[mlir] Fix missing namespace (NFC)

2 years ago[MLIR][PDL] Clear up the terminology in the root ordering graph.
Stanislav Funiak [Wed, 22 Dec 2021 19:10:02 +0000 (19:10 +0000)]
[MLIR][PDL] Clear up the terminology in the root ordering graph.

Previously, we defined a struct named `RootOrderingCost`, which stored the cost (a pair consisting of the depth of the connector and a tie breaking ID), as well as the connector itself. This created some confusion, because we would sometimes write, e.g., `cost.cost.first` (the first `cost` referring to the struct, the second one referring to the `cost` field, and `first` referring to the depth). In order to address this confusion, here we rename `RootOrderingCost` to `RootOrderingEntry` (keeping the fields and their names as-is).

This clarification exposed non-determinism in the optimal branching algorithm. When choosing the best local parent, we were previuosly only considering its depth (`cost.first`) and not the tie-breaking ID (`cost.second`). This led to non-deterministic choice of the parent when multiple potential parents had the same depth. The solution is to compare both the depth and the tie-breaking ID.

Testing: Rely on existing unit tests. Non-detgerminism is hard to unit-test.

Reviewed By: rriddle, Mogball

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

2 years ago[mlir] Canonicalizer constructor should accept disabled/enabled patterns
Mogball [Tue, 21 Dec 2021 01:18:14 +0000 (01:18 +0000)]
[mlir] Canonicalizer constructor should accept disabled/enabled patterns

There is no way to programmatically configure the list of disabled and enabled patterns in the canonicalizer pass, other than the duplicate the whole pass. This patch exposes the `disabledPatterns` and `enabledPatterns` options.

Reviewed By: mehdi_amini

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

2 years ago[libc] apply formatting to tests
Michael Jones [Tue, 21 Dec 2021 21:12:45 +0000 (13:12 -0800)]
[libc] apply formatting to tests

Apply the formatting rules that were applied to the libc/src directory
to the libc/test directory, as well as the files in libc/utils that are
included by the tests. This does not include automated enforcement.

Reviewed By: sivachandra, lntue

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

2 years agoRemove superfluous semicolon.
Simon Pilgrim [Wed, 22 Dec 2021 17:42:45 +0000 (17:42 +0000)]
Remove superfluous semicolon.

Missed by MSVC

2 years ago[gn build] Port cb8a0b07974e
LLVM GN Syncbot [Wed, 22 Dec 2021 17:34:39 +0000 (17:34 +0000)]
[gn build] Port cb8a0b07974e

2 years ago[libc++] [ranges] Introduce _LIBCPP_AUTO_CAST(x) for auto(x).
Arthur O'Dwyer [Tue, 14 Dec 2021 00:21:38 +0000 (19:21 -0500)]
[libc++] [ranges] Introduce _LIBCPP_AUTO_CAST(x) for auto(x).

Clang is gaining `auto(x)` support in D113393; sadly there
seems to be no feature-test macro for it. Zhihao is opening
a core issue for that macro.

Use `_LIBCPP_AUTO_CAST` where C++20 specifies we should use `auto(x)`;
stop using `__decay_copy(x)` in those places.
In fact, remove `__decay_copy` entirely. As of C++20, it's purely
a paper specification tool signifying "Return just `x`, but it was
perfect-forwarded, so we understand you're going to have to call
its move-constructor sometimes." I believe there's no reason we'd
ever need to do its operation explicitly in code.

This heisenbugs away a test failure on MinGW; see D112214.

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

2 years ago[mlir][arith] Fix CmpIOP folding for vector types.
Adrian Kuegel [Wed, 22 Dec 2021 17:09:59 +0000 (18:09 +0100)]
[mlir][arith] Fix CmpIOP folding for vector types.

Previously, the folding assumed that it always operates on scalar types.

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

2 years ago[DAG][X86] Add TargetLowering::isSplatValueForTargetNode override
Simon Pilgrim [Wed, 22 Dec 2021 16:57:44 +0000 (16:57 +0000)]
[DAG][X86] Add TargetLowering::isSplatValueForTargetNode override

Add callback to enable us to test target nodes if they are splat vectors

Added some basic X86ISD::VBROADCAST + X86ISD::VBROADCAST_LOAD handling

2 years agoRevert "[AMDGPU] Move call clobbered return address registers s[30:31] to callee...
Ron Lieberman [Wed, 22 Dec 2021 16:39:28 +0000 (11:39 -0500)]
Revert "[AMDGPU] Move call clobbered return address registers s[30:31] to callee saved range"

This reverts commit 9075009d1fd5f2bf9aa6c2f362d2993691a316b3.

 Failed amdgpu runtime buildbot # 3514

2 years ago[Clang][DebugInfo] Cease turning instruction-referencing off by default
Jeremy Morse [Wed, 22 Dec 2021 16:13:29 +0000 (16:13 +0000)]
[Clang][DebugInfo] Cease turning instruction-referencing off by default

Over in D114631 I turned this debug-info feature on by default, for x86_64
only. I'd previously stripped out the clang cc1 option that controlled it
in 651122fc4ac, unfortunately that turned out to not be completely
effective, and the two things deleted in this patch continued to keep it
off-by-default.  Oooff.

As a follow-up, this patch removes the last few things to do with
ValueTrackingVariableLocations from clang, which was the original purpose
of D114631. In an ideal world, if this patch causes you trouble you'd
revert 3c045070882f instead, which was where this behaviour was supposed
to start being the default, although that might not be practical any more.

2 years ago[NFC][Clang] Move function implementation of `OpenMPAtomicUpdateChecker` into anonymo...
Shilei Tian [Wed, 22 Dec 2021 16:24:06 +0000 (11:24 -0500)]
[NFC][Clang] Move function implementation of `OpenMPAtomicUpdateChecker` into anonymous namespace

Just to keep code consistent as `OpenMPAtomicUpdateChecker` is defined
in anonymous namespace.

Reviewed By: ABataev

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

2 years ago[OpenMP] Regenerate test checks (NFC)
Nikita Popov [Wed, 22 Dec 2021 16:11:48 +0000 (17:11 +0100)]
[OpenMP] Regenerate test checks (NFC)

Regenerate test checks to reduce diff for an upcoming patch.

2 years ago[JSONNodeDumper] Regenerate test checks (NFC)
Nikita Popov [Wed, 22 Dec 2021 15:55:56 +0000 (16:55 +0100)]
[JSONNodeDumper] Regenerate test checks (NFC)

gen_ast_dump_json_test.py adds these lines of whitespace. Precommit
it to avoid spurious diffs in future changes.

2 years ago[clang-tidy] abseil-string-find-startswith: detect `s.rfind(z, 0) == 0`
Ivan Gerasimov [Wed, 22 Dec 2021 15:33:09 +0000 (16:33 +0100)]
[clang-tidy] abseil-string-find-startswith: detect `s.rfind(z, 0) == 0`

Suggest converting `std::string::rfind()` calls to `absl::StartsWith()`
where possible.

2 years ago[libc++] [ranges] Remove the static_assert from ranges::begin and ranges::end.
Arthur O'Dwyer [Thu, 16 Dec 2021 03:10:34 +0000 (22:10 -0500)]
[libc++] [ranges] Remove the static_assert from ranges::begin and ranges::end.

As discussed with ldionne. The problem with this static_assert
is that it makes ranges::begin a pitfall for anyone ever to use
inside a constraint or decltype. Many Ranges things, such as ranges::size,
are specified as "Does X if X is well-formed, or else Y if Y is well-formed,
or else `ranges::end(t) - ranges::begin(t)` if that is well-formed, or else..."
And if there's a static_assert hidden inside `ranges::begin(t)`, then you get
a hard error as soon as you ask the question -- even if the answer would have
been "no, that's not well-formed"!

Constraining on `requires { t + 0; }` or `requires { t + N; }` is verboten
because of https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103700 . For ranges::begin,
we can just decay to a pointer even in the incomplete-type case. For ranges::end,
we can safely constrain on `sizeof(*t)`. Yes, this means that an array of incomplete
type has a `ranges::begin` but no `ranges::end`... just like an unbounded array of
complete type. This is a valid manifestation of IFNDR.

All of the new libcxx/test/std/ cases are mandatory behavior, as far as I'm aware.
Tests for the IFNDR cases in ranges::begin and ranges::end remain in `libcxx/test/libcxx/`.
The similar tests for ranges::empty and ranges::data were simply wrong, AFAIK.

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

2 years ago[AMDGPU] Move call clobbered return address registers s[30:31] to callee saved range
RamNalamothu [Wed, 22 Dec 2021 13:02:52 +0000 (18:32 +0530)]
[AMDGPU] Move call clobbered return address registers s[30:31] to callee saved range

Currently the return address ABI registers s[30:31], which fall in the call
clobbered register range, are added as a live-in on the function entry to
preserve its value when we have calls so that it gets saved and restored
around the calls.

But the DWARF unwind information (CFI) needs to track where the return address
resides in a frame and the above approach makes it difficult to track the
return address when the CFI information is emitted during the frame lowering,
due to the involvment of understanding the control flow.

This patch moves the return address ABI registers s[30:31] into callee saved
registers range and stops adding live-in for return address registers, so that
the CFI machinery will know where the return address resides when CSR
save/restore happen during the frame lowering.

And doing the above poses an issue that now the return instruction uses undefined
register `sgpr30_sgpr31`. This is resolved by hiding the return address register
use by the return instruction through the `SI_RETURN` pseudo instruction, which
doesn't take any input operands, until the `SI_RETURN` pseudo gets lowered to the
`S_SETPC_B64_return` during the `expandPostRAPseudo()`.

As an added benefit, this patch simplifies overall return instruction handling.

Note: The AMDGPU CFI changes are there only in the downstream code and another
version of this patch will be posted for review for the downstream code.

Reviewed By: arsenm

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

2 years ago[lldb] [Process/FreeBSDKernel] Introduce libkvm support
Michał Górny [Sat, 18 Dec 2021 09:09:12 +0000 (10:09 +0100)]
[lldb] [Process/FreeBSDKernel] Introduce libkvm support

Introduce initial support for using libkvm on FreeBSD.  The library
can be used as an alternate implementation for processing kernel
coredumps but it can also be used to access live kernel memory through
specifying "/dev/mem" as the core file, i.e.:

    lldb --core /dev/mem /boot/kernel/kernel

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

2 years ago[clang][OpenMP][DebugInfo] Debug support for variables in shared clause of OpenMP...
Alok Kumar Sharma [Wed, 22 Dec 2021 14:26:37 +0000 (19:56 +0530)]
[clang][OpenMP][DebugInfo] Debug support for variables in shared clause of OpenMP task construct

Currently variables appearing inside shared clause of OpenMP task construct
are not visible inside lldb debugger.

After the current patch, lldb is able to show the variable

```
* thread #1, name = 'a.out', stop reason = breakpoint 1.1
    frame #0: 0x0000000000400934 a.out`.omp_task_entry. [inlined] .omp_outlined.(.global_tid.=0, .part_id.=0x000000000071f0d0, .privates.=0x000000000071f0e8, .copy_fn.=(a.out`.omp_task_privates_map. at testshared.cxx:8), .task_t.=0x000000000071f0c0, __context=0x000000000071f0f0) at testshared.cxx:10:34
   7      else {
   8    #pragma omp task shared(svar) firstprivate(n)
   9        {
-> 10         printf("Task svar = %d\n", svar);
   11         printf("Task n = %d\n", n);
   12         svar = fib(n - 1);
   13       }
(lldb) p svar
(int) $0 = 9
```

Reviewed By: djtodoro

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

2 years ago[msan] Break optimization in memccpy tests
Nikita Popov [Wed, 22 Dec 2021 13:43:52 +0000 (14:43 +0100)]
[msan] Break optimization in memccpy tests

After D116148 the memccpy gets optimized away and the expected
uninitialized memory access does not occur.

Make sure the call does not get optimized away.

2 years ago[libc++] Add from-scratch testing configs for Windows
Martin Storsjö [Wed, 8 Dec 2021 18:54:21 +0000 (20:54 +0200)]
[libc++] Add from-scratch testing configs for Windows

The paths to the compiler and to the python executable may need to
be quoted (if they're installed into e.g. C:\Program Files).

All testing commands that are executed expect a gcc compatible command
line interface, while clang-cl uses different command line options.
In the original testing config, if the chosen compiler was clang-cl, it
was replaced with clang++ by looking for such an executable in the path.

For the new from-scratch test configs, I instead chose to add
"--driver-mode=g++" to flags - invoking "clang-cl --driver-mode=g++"
has the same effect as invoking "clang++", without needing to run any
heuristics for picking a different compiler executable.

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

2 years ago[libcxx] [test] Remove a leftover unused function in config.py. NFC.
Martin Storsjö [Wed, 8 Dec 2021 22:04:35 +0000 (00:04 +0200)]
[libcxx] [test] Remove a leftover unused function in config.py. NFC.

While there's little value in polishing the old config system,
I ran into this function and was confused for a while, while grepping
around and trying to wrap my head around things.

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

2 years ago[libcxx] [test] Prepare the ctime.timespec test for mingw CI env upgrades
Martin Storsjö [Fri, 17 Dec 2021 12:15:37 +0000 (12:15 +0000)]
[libcxx] [test] Prepare the ctime.timespec test for mingw CI env upgrades

The test is currently marked XFAIL for mingw environments, but latest
mingw-w64 got support for timespec_get:
https://github.com/mingw-w64/mingw-w64/commit/e62a0a987c80f6a6fdac3e350943ae8085de0bd5

The CI environment will probably be upgraded to a state where this
test is passing only after 14.x is branched in the llvm-project monorepo.

If we'd just go from having an XFAIL to no marking at all (when CI is
passing), we'd have to update both main and 14.x branches in sync
exactly when the CI runners are updated to a newer version.

Instead, mark the test as temporarily unsupported (so it doesn't
cause failed builds when the CI environment is updated); after the
CI environments are upgraded to such a state, we can remove the
UNSUPPORTED marking to start requiring it to pass on the main branch,
without needing to synchronize that change to anything else.

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

2 years ago[lldb] Use GetSupportedArchitectures on darwin platforms
Pavel Labath [Fri, 17 Dec 2021 13:13:52 +0000 (14:13 +0100)]
[lldb] Use GetSupportedArchitectures on darwin platforms

This finishes the GetSupportedArchitectureAtIndex migration. There are
opportunities to simplify this even further, but I am going to leave
that to the platform owners.

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

2 years ago[lldb/python] Avoid more dangling pointers in python glue code
Pavel Labath [Fri, 17 Dec 2021 12:02:21 +0000 (13:02 +0100)]
[lldb/python] Avoid more dangling pointers in python glue code

2 years ago[VPlan] Create header & latch blocks for skeleton up front (NFC).
Florian Hahn [Wed, 22 Dec 2021 12:44:24 +0000 (12:44 +0000)]
[VPlan] Create header & latch blocks for skeleton up front (NFC).

By creating the header and latch blocks up front and adding blocks and
recipes in between those 2 blocks we ensure that the entry and exits of
the plan remain valid throughout construction.

In order to avoid test changes and keep printing of the plans the same,
we use the new header block instead of creating a new block on the first
iteration of the loop traversing the original loop.

We also fold the latch into its predecessor.

This is a follow up to a post-commit suggestion in D114586.

Reviewed By: Ayal

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

2 years ago[LV] Adjust comment to say the induction is created in header.
Florian Hahn [Wed, 22 Dec 2021 11:56:40 +0000 (11:56 +0000)]
[LV] Adjust comment to say the induction is created in header.

Follow-up suggested post-commit for 1a54889f48fa.

2 years ago[unittest][DebugInfo/DWARF] Do not report skipped tests as passed
Igor Kudrin [Wed, 22 Dec 2021 11:52:49 +0000 (18:52 +0700)]
[unittest][DebugInfo/DWARF] Do not report skipped tests as passed

This is similar to what we have already done to some other tests.
See D102643, D102710, D102754.

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

2 years ago[unittest][DebugInfo/DWARF] Do not create dwarfgen::Generator if MCAsmBackend is...
Igor Kudrin [Wed, 22 Dec 2021 11:52:43 +0000 (18:52 +0700)]
[unittest][DebugInfo/DWARF] Do not create dwarfgen::Generator if MCAsmBackend is missing

dwarfgen::Generator cannot be created if there is no asm backend for a
target. For example, if the default target triple is nvptx-nvidia-cuda,
some tests fail even after D98400, which added checks for most cases.
This patch extends the approach to the remaining cases.

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

2 years ago[unittest][DebugInfo/DWARF] Check that dwarfgen::Generator is created
Igor Kudrin [Wed, 22 Dec 2021 11:52:36 +0000 (18:52 +0700)]
[unittest][DebugInfo/DWARF] Check that dwarfgen::Generator is created

If Generator::create() returns an error, tests should fail gracefully
and report the cause, for example:

[ RUN      ] DebugLineBasicFixture.ParserSkipsCorrectly
.../llvm/unittests/DebugInfo/DWARF/DWARFDebugLineTest.cpp:47: Failure
Value of: llvm::detail::TakeExpected(ExpectedGenerator)
Expected: succeeded
  Actual: failed  (no asm backend for target nvptx64-nvidia-cuda)

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

2 years ago[mlir][NFC] Use .empty() instead of .size()
Adrian Kuegel [Wed, 22 Dec 2021 11:29:53 +0000 (12:29 +0100)]
[mlir][NFC] Use .empty() instead of .size()

2 years ago[CodeGen] Make lifetime marker test more robust (NFC)
Nikita Popov [Wed, 22 Dec 2021 11:21:54 +0000 (12:21 +0100)]
[CodeGen] Make lifetime marker test more robust (NFC)

Mark the first function optnone as well, to make sure that the
test is independent of optimization.

2 years ago[mlir][NFC] Fix typo in VectorOps.cpp
Adrian Kuegel [Wed, 22 Dec 2021 11:23:57 +0000 (12:23 +0100)]
[mlir][NFC] Fix typo in VectorOps.cpp

2 years ago[MemoryLocation] Don't require nocapture in getForDest()
Nikita Popov [Wed, 22 Dec 2021 09:54:49 +0000 (10:54 +0100)]
[MemoryLocation] Don't require nocapture in getForDest()

As reames mentioned on related reviews, we don't need the nocapture
requirement here. First of all, from an API perspective, this is
not something that MemoryLocation::getForDest() should be checking
in the first place, because it does not affect which memory this
particular call can access; it's an orthogonal concern that should
be handled by the caller if necessary.

However, for both of the motivating users in DSE and InstCombine,
we don't need the nocapture requirement, because the capture can
either be purely local to the call (a pointer identity check that
is irrelevant to us), be part of the return value (which we check
is unused), or be written in the dest location, which we have
determined to be dead.

This allows us to remove the special handling for libcalls as well.

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

2 years ago[ConstantFolding] Tests for constrained compare intrinsics
Serge Pavlov [Wed, 22 Dec 2021 10:12:54 +0000 (17:12 +0700)]
[ConstantFolding] Tests for constrained compare intrinsics

This are tests extracted from https://reviews.llvm.org/D110322, committed
prior to that patch to show the change in behavior.

2 years ago[Clang] Add __builtin_reduce_xor
Jun Zhan [Wed, 22 Dec 2021 10:00:27 +0000 (10:00 +0000)]
[Clang] Add __builtin_reduce_xor

This patch implements __builtin_reduce_xor as specified in D111529.

Reviewed By: fhahn, aaron.ballman

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

2 years ago[flang] Add missing include. NFCI.
Diana Picus [Wed, 22 Dec 2021 09:14:53 +0000 (09:14 +0000)]
[flang] Add missing include. NFCI.

descriptor.h is using std::max, so it should include <algorithm>.

This should fix a build issue on Windows on Arm.

2 years agofix build bots after f5ac23b5ae090d64d31f0b6624470af97dc20bf6
Krasimir Georgiev [Wed, 22 Dec 2021 09:00:35 +0000 (10:00 +0100)]
fix build bots after f5ac23b5ae090d64d31f0b6624470af97dc20bf6

The old member was `= 0`:
https://github.com/llvm/llvm-project/commit/f5ac23b5ae090d64d31f0b6624470af97dc20bf6#diff-7781d63141d53242da0520361a554df579ecb079b33bdcfbe7a0db95d44cca49L1740

It looks like this caused some bots to fail:
https://lab.llvm.org/buildbot/#/builders/127/builds/21684

2 years ago[RS4GC] Clean up attribute removal (NFC)
Nikita Popov [Wed, 22 Dec 2021 08:55:54 +0000 (09:55 +0100)]
[RS4GC] Clean up attribute removal (NFC)

It is not necessary to explicitly check which attributes are
present, and only add those to the builder. We can simply list
all attributes that need to be stripped and remove them
unconditionally. This also allows us to use some nicer APIs that
don't require mucking about with attribute list indices.

2 years ago[DataFlowSanitizer] Simplify attribute removal (NFC)
Nikita Popov [Wed, 22 Dec 2021 08:42:55 +0000 (09:42 +0100)]
[DataFlowSanitizer] Simplify attribute removal (NFC)

We're only removing a single attribute, so there is no need to
go through AttrBuilder.

2 years ago[Mips16HardFloat] Simplify attribute change (NFC)
Nikita Popov [Wed, 22 Dec 2021 08:41:11 +0000 (09:41 +0100)]
[Mips16HardFloat] Simplify attribute change (NFC)

As we're only removing and adding a single attribute, there is no
need to go through AttrBuilder.

2 years ago[ArgPromotion][TTI] Pass types to ABI compatibility hook
Nikita Popov [Mon, 20 Dec 2021 11:27:05 +0000 (12:27 +0100)]
[ArgPromotion][TTI] Pass types to ABI compatibility hook

The areFunctionArgsABICompatible() hook currently accepts a list of
pointer arguments, though what we're actually interested in is the
ABI compatibility after these pointer arguments have been converted
into value arguments.

This means that a) the current API is incompatible with opaque
pointers (because it requires inspection of pointee types) and
b) it can only be used in the specific context of ArgPromotion.
I would like to reuse the API when inspecting calls during inlining.

This patch converts it into an areTypesABICompatible() hook, which
accepts a list of types. This makes the method more generally usable,
and compatible with opaque pointers from an API perspective (the
actual usage in ArgPromotion/Attributor is still incompatible,
I'll follow up on that in separate patches).

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

2 years ago[Test] Add test showing missing opportunity in IndVar's handling of lshr
Max Kazantsev [Wed, 22 Dec 2021 08:07:41 +0000 (15:07 +0700)]
[Test] Add test showing missing opportunity in IndVar's handling of lshr

2 years agoSupport v2 of 'main bin spec' Mach-O LC_NOTE in corefiles
Jason Molenda [Wed, 22 Dec 2021 08:02:27 +0000 (00:02 -0800)]
Support v2 of 'main bin spec' Mach-O LC_NOTE in corefiles

Version 2 of 'main bin spec' LC_NOTE allows for the specification
of a slide of where the binary is loaded in the corefile virtual
address space.  It also adds a (currently unused) platform field
for the main binary.

Some corefile creators will only have a UUID and an offset to be
applied to the binary.

Changed TestFirmwareCorefiles.py to test this new form of
'main bin spec' with a slide, and also to run on both x86_64
and arm64 macOS systems.

Differential Revision: https://reviews.llvm.org/D116094
rdar://85938455

2 years ago[ConstantFolding] Do not remove side effect from constrained functions
Serge Pavlov [Thu, 16 Dec 2021 11:05:41 +0000 (18:05 +0700)]
[ConstantFolding] Do not remove side effect from constrained functions

According to the discussion in https://reviews.llvm.org/D110322 the code
that removes side effect from replaced function call is deleted.

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

2 years ago[llvm] Use depth_first (NFC)
Kazu Hirata [Wed, 22 Dec 2021 06:28:48 +0000 (22:28 -0800)]
[llvm] Use depth_first (NFC)

2 years ago[ELF] Change mipsGotIndex to uint32_t
Fangrui Song [Wed, 22 Dec 2021 04:19:51 +0000 (20:19 -0800)]
[ELF] Change mipsGotIndex to uint32_t

This does not decrease sizeof(InputSection) (important for memory usage) on
ELF64 by itself but allows we to add another uint32_t.

2 years ago[NFC] Use %clang_cc instead of %clang in c++20 module tests
Chuanqi Xu [Wed, 22 Dec 2021 03:43:56 +0000 (11:43 +0800)]
[NFC] Use %clang_cc instead of %clang in c++20 module tests

2 years ago[NFC] [C++20] [Modules] Add tests for template instantiation in transitively imported...
Chuanqi Xu [Wed, 22 Dec 2021 03:09:08 +0000 (11:09 +0800)]
[NFC] [C++20] [Modules] Add tests for template instantiation in transitively imported module

This commit adds two test about template class instantiation in
transitively imported module. They are used as pre-commit tests for
successive patches.

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

2 years ago[gn build] Port 7056250f517a
LLVM GN Syncbot [Wed, 22 Dec 2021 01:35:25 +0000 (01:35 +0000)]
[gn build] Port 7056250f517a

2 years ago[libc++][NFC] Granularize <filesystem>
Nikolas Klauser [Sat, 18 Dec 2021 09:21:25 +0000 (10:21 +0100)]
[libc++][NFC] Granularize <filesystem>

Granularize the `<filesystem>` header

Reviewed By: Quuxplusone, ldionne, #libc

Spies: libcxx-commits, mgorny

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

2 years ago[libc++] [test] Simplify some ranges tests.
Arthur O'Dwyer [Thu, 7 Oct 2021 02:30:47 +0000 (22:30 -0400)]
[libc++] [test] Simplify some ranges tests.

Eliminate a bogus operator== overload.
Also, check more intermediate steps in the logic we're checking here.
Some of this simplification is possible only now that we've implemented
more of <ranges>.

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

2 years ago[TSan] Don't instrument code that is executed from __tsan_on_report()
Julian Lettner [Wed, 22 Dec 2021 00:44:12 +0000 (16:44 -0800)]
[TSan] Don't instrument code that is executed from __tsan_on_report()

See also: https://reviews.llvm.org/D111157

2 years ago[clang-format][NFC] Handle wrapping after => in mustBreakBefore()
Owen Pan [Fri, 17 Dec 2021 20:00:48 +0000 (12:00 -0800)]
[clang-format][NFC] Handle wrapping after => in mustBreakBefore()

Move the handling of brace wrapping after => from unwrapped line
parser to token annotator and clean up the parser.

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

2 years ago[lldb] Use `GNUInstallDirs` to support custom installation dirs.
John Ericson [Sun, 4 Apr 2021 17:02:18 +0000 (13:02 -0400)]
[lldb] Use `GNUInstallDirs` to support custom installation dirs.

Extracted from D99484. My new plan is to start from the outside and work
inward.

Reviewed By: compnerd

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

2 years agoReland - [CodeView] Emit S_OBJNAME record
Alexandre Ganea [Tue, 21 Dec 2021 23:59:47 +0000 (18:59 -0500)]
Reland - [CodeView] Emit S_OBJNAME record

Reland integrates build fixes & further review suggestions.

Thanks to @zturner for the initial S_OBJNAME patch!

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

2 years agoRevert [CodeView] Emit S_OBJNAME record
Alexandre Ganea [Tue, 21 Dec 2021 23:36:54 +0000 (18:36 -0500)]
Revert [CodeView] Emit S_OBJNAME record

Also revert all subsequent fixes:
abd1cbf5e543f0f114d2742e109ead7d7ddbf9c4 [Clang] Disable debug-info-objname.cpp test on Unix until I sort out the issue.
00ec441253048f5e30540ea26bb0a28c42a5fc18 [Clang] debug-info-objname.cpp test: explictly encode a x86 target when using %clang_cl to avoid falling back to a native CPU triple.
cd407f6e52b09cce2bef24c74b7f36fedc94991b [Clang] Fix build by restricting debug-info-objname.cpp test to x86.

2 years ago[gn build] (manually) port f68e89044a2ee
Nico Weber [Tue, 21 Dec 2021 23:59:37 +0000 (18:59 -0500)]
[gn build] (manually) port f68e89044a2ee

2 years ago[libcxx] [test] Extend test for bash for executor-has-no-bash
Martin Storsjö [Tue, 21 Dec 2021 13:14:28 +0000 (13:14 +0000)]
[libcxx] [test] Extend test for bash for executor-has-no-bash

If %{exec} sets "--env PATH=single-dir", the directory containing
bash and related shell utils is omitted from the path, which means
that most shell scripts would fail.

(Setting PATH is needed for DLL builds on Windows; PATH fills the same
role as e.g. LD_LIBRARY_PATH on Linux.)

This condition is missed in the current test, because the executor
run.py first resolves the executable to run using the original path,
then invokes that executable with an environment with a restricted
path. Thus the executor is able to run bash, but that bash is then
unable to run further shell commands (other than bash builtins).

Extend the test from "bash --version" to "bash -c 'bash --version'".
This correctly identifies the executor-has-no-bash condition in the
current Windows CI configs, allowing removing 6 cases of
LIBCXX-WINDOWS-FIXME.

Another longterm fix would be to extend run.py with an option like
"--env-prepend PATH=dir", to allow keeping the current path while
adding a directory to it.

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

2 years ago[libcxx] Add LIBCXX_EXTRA_SITE_DEFINES for adding extra defines in __config_site
Martin Storsjö [Mon, 20 Dec 2021 23:19:34 +0000 (01:19 +0200)]
[libcxx] Add LIBCXX_EXTRA_SITE_DEFINES for adding extra defines in __config_site

This is similar to the existing setting LIBCXX_ABI_DEFINES, with
the difference that this also allows setting other defines than
ones that start with "_LIBCPP_ABI_", and allows setting defines
to a specific value.

This allows avoiding using LIBCXX_TEST_COMPILER_FLAGS in two
CI configurations.

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

2 years ago[libcxx] Use LIBCXX_EXECUTOR in new test configs
Martin Storsjö [Wed, 8 Dec 2021 21:29:18 +0000 (23:29 +0200)]
[libcxx] Use LIBCXX_EXECUTOR in new test configs

This allows cross-testing (by setting LIBCXX_EXECUTOR to point
to ssh.py) without making an entirely new test config file.

Implicitly, this also fixes quoting of the python executable name
(which is quoted in test/CMakeLists.txt).

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

2 years ago[Clang] Own the CommandLineArgs in CodeGenOptions
Alexandre Ganea [Tue, 21 Dec 2021 22:41:26 +0000 (17:41 -0500)]
[Clang] Own the CommandLineArgs in CodeGenOptions

Fixes PR52704 : https://github.com/llvm/llvm-project/issues/52704

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

2 years ago[libc++] Partially revert 346ef5e5879e
Louis Dionne [Tue, 21 Dec 2021 21:50:34 +0000 (16:50 -0500)]
[libc++] Partially revert 346ef5e5879e

This moves the macro definitions back to __config, but keeps the
improved documentation. 346ef5e5879e had broken the MinGW build.

2 years ago[ASan] Change optimized callbacks visibility to hidden.
Kirill Stoimenov [Tue, 21 Dec 2021 20:43:31 +0000 (20:43 +0000)]
[ASan] Change optimized callbacks visibility to hidden.

Making callbacks hidden will remove PLT calls.

Reviewed By: vitalybuka

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

2 years ago[PowerPC] Add missed test case updates
Nemanja Ivanovic [Tue, 21 Dec 2021 20:53:55 +0000 (14:53 -0600)]
[PowerPC] Add missed test case updates

In commit 1674d9b6b2da914619c7c197336bb74f7988cf38,
I missed adding the updates to existing test cases.
This should bring the bots back to green.

2 years ago[libc++][NFC] Improve documentation of the various random_device implementations
Louis Dionne [Tue, 21 Dec 2021 20:31:18 +0000 (15:31 -0500)]
[libc++][NFC] Improve documentation of the various random_device implementations

Also, move the setting of the macro closer to its point of use, which
also has the benefit of uncluttering `__config`.

2 years ago[PowerPC] Fix vector equality comparison for v2i64 pre-Power8
Nemanja Ivanovic [Tue, 21 Dec 2021 20:28:41 +0000 (14:28 -0600)]
[PowerPC] Fix vector equality comparison for v2i64 pre-Power8

The current code makes the assumption that equality
comparison can be performed with a word comparison
instruction. While this is true if the entire 64-bit
results are used, it does not generally work. It is
possible that the low order words and high order
words produce different results and a user of only
one will get the wrong result.

This patch adds an and of the result words so that
each word has the result of the comparison of the
entire doubleword that contains it.

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

2 years ago[PowerPC] Do not increase cost for getUserCost with MMA types
Nemanja Ivanovic [Tue, 21 Dec 2021 19:35:17 +0000 (13:35 -0600)]
[PowerPC] Do not increase cost for getUserCost with MMA types

Commit 150681f increases
cost of producing MMA types (vector pair and quad).
However, it increases the cost for getUserCost() which is
used in unrolling. As a result, loops that contain these
types already (from the user code) cannot be unrolled
(even with the user's unroll pragma). This was an unintended
sideeffect. Reverting that portion of the commit to allow
unrolling such loops.

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

2 years ago[libc] Show average runtime for math single-input-single-output performance tests.
Tue Ly [Tue, 21 Dec 2021 15:31:42 +0000 (10:31 -0500)]
[libc] Show average runtime for math single-input-single-output performance tests.

Run performance tests in denormal and normal ranges separately and show more detailed results.

Reviewed By: sivachandra

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

2 years ago[gn build] Port f78d49e06883
LLVM GN Syncbot [Tue, 21 Dec 2021 18:57:55 +0000 (18:57 +0000)]
[gn build] Port f78d49e06883

2 years agotsan: remove old vector clocks
Dmitry Vyukov [Wed, 6 Oct 2021 06:56:42 +0000 (08:56 +0200)]
tsan: remove old vector clocks

They are unused in the new tsan runtime.

Depends on D112604.

Reviewed By: vitalybuka, melver

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