platform/upstream/llvm.git
2 years ago[C++20] [Modules] Don't create multiple global module fragment
Chuanqi Xu [Tue, 8 Feb 2022 03:50:57 +0000 (11:50 +0800)]
[C++20] [Modules] Don't create multiple global module fragment

Since the serialization code would recognize modules by names and the
name of all global module fragment is <global>, so that the
serialization code would complain for the same module.

This patch fixes this by using a unique global module fragment in Sema.
Before this patch, the compiler would fail on an assertion complaining
the duplicated modules.

Reviewed By: urnathan, rsmith

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

2 years ago[C++20] [Coroutines] Warning for always_inline coroutine
Chuanqi Xu [Tue, 8 Feb 2022 03:42:38 +0000 (11:42 +0800)]
[C++20] [Coroutines] Warning for always_inline coroutine

See the discussion in https://reviews.llvm.org/D100282. The coroutine
marked always inline might not be inlined properly in current compiler
support. Since the coroutine would be splitted into pieces. And the call
to resume() and destroy() functions might be indirect call. Also the
ramp function wouldn't get inlined under O0 due to pipeline ordering
problems. It might be different to what users expects to. Emit a warning
to tell it.

This is what GCC does too: https://godbolt.org/z/7eajb1Gf8

Reviewed By: Quuxplusone

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

2 years ago[mlir] Finish removing FunctionPass
River Riddle [Tue, 1 Feb 2022 21:27:46 +0000 (13:27 -0800)]
[mlir] Finish removing FunctionPass

FunctionPass has been deprecated in favor of OperationPass<FuncOp>
for a few weeks, and this commit finished the deprecation with deletion.
The only difference between the two is that FunctionPass filters out function
declarations. When updating references to FunctionPass, ensure that
the pass either can handle declarations or explicitly add in filtering.

See https://llvm.discourse.group/t/functionpass-deprecated-in-favor-of-operationpass-funcop

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

2 years ago[mlir] Update uses of `parser`/`printer` ODS op field to `hasCustomAssemblyFormat`
River Riddle [Tue, 8 Feb 2022 01:54:04 +0000 (17:54 -0800)]
[mlir] Update uses of `parser`/`printer` ODS op field to `hasCustomAssemblyFormat`

The parser/printer fields are deprecated and in the process of being removed.

2 years ago[mlir] Update Toy operations to use the `hasCustomAssemblyFormat` field
River Riddle [Sat, 5 Feb 2022 21:59:43 +0000 (13:59 -0800)]
[mlir] Update Toy operations to use the `hasCustomAssemblyFormat` field

The parser/printer fields are deprecated and in the process of being removed.

2 years ago[mlir][NFC] Remove deprecated/old build/fold/parser utilities from OpDefinition
River Riddle [Sun, 6 Feb 2022 20:33:08 +0000 (12:33 -0800)]
[mlir][NFC] Remove deprecated/old build/fold/parser utilities from OpDefinition

These have generally been replaced by better ODS functionality, and do not
need to be explicitly provided anymore.

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

2 years ago[mlir][NFC] Remove a few op builders that simply swap parameter order
River Riddle [Sun, 6 Feb 2022 20:32:47 +0000 (12:32 -0800)]
[mlir][NFC] Remove a few op builders that simply swap parameter order

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

2 years ago[mlir:ODS] Deprecate Op parser/printer fields in favor of a new hasCustomAssemblyForm...
River Riddle [Sat, 5 Feb 2022 04:47:01 +0000 (20:47 -0800)]
[mlir:ODS] Deprecate Op parser/printer fields in favor of a new hasCustomAssemblyFormat field

Currently if an operation wants a C++ implemented parser/printer, it specifies inline
code blocks. This is quite problematic for various reasons, e.g. it requires defining
C++ inside of Tablegen which is discouraged when possible, but mainly because
nearly all usages simply forward to static functions (e.g. `static void parseSomeOp(...)`)
with users devising their own standards for how these are defined.

This commit adds support for a `hasCustomAssemblyFormat` bit field that specifies if
a C++ parser/printer is needed, and when set to 1 declares the parse/print methods for
operations to override. For migration purposes, the existing behavior is untouched. Upstream
usages will be replaced in a followup to keep this patch focused on the new implementation.

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

2 years ago[clang] Fix some clang->llvm type cache invalidation issues
Arthur Eubanks [Wed, 2 Feb 2022 00:47:29 +0000 (16:47 -0800)]
[clang] Fix some clang->llvm type cache invalidation issues

Take the following as an example

  struct z {
    z (*p)();
  };

  z f();

When we attempt to get the LLVM type of f, we recurse into z. z itself
has a function pointer with the same type as f. Given the recursion,
Clang simply treats z::p as a pointer to an empty struct `{}*`. The
LLVM type of f is as expected. So we have two different potential
LLVM types for a given Clang type. If we store one of those into the
cache, when we access the cache with a different context (e.g. we
are/aren't recursing on z) we may get an incorrect result. There is some
attempt to clear the cache in these cases, but it doesn't seem to handle
all cases.

This change makes it so we only use the cache when we are not in any
sort of function context, i.e. `noRecordsBeingLaidOut() &&
FunctionsBeingProcessed.empty()`, which are the cases where we may
decide to choose a different LLVM type for a given Clang type. LLVM
types for builtin types are never recursive so they're always ok.

This allows us to clear the type cache less often (as seen with the
removal of one of the calls to `TypeCache.clear()`). We
still need to clear it when we use a placeholder type then replace it
later with the final type and other dependent types need to be
recalculated.

I've added a check that the cached type matches what we compute. It
triggered in this test case without the fix. It's currently not
check-clang clean so it's not on by default for something like expensive
checks builds.

This change uncovered another issue where the LLVM types for an argument
and its local temporary don't match. For example in type-cache-3, when
expanding z::dc's argument into a temporary alloca, we ConvertType() the
type of z::p which is `void ({}*)*`, which doesn't match the alloca GEP
type of `{}*`.

No noticeable compile time changes:
https://llvm-compile-time-tracker.com/compare.php?from=3918dd6b8acf8c5886b9921138312d1c638b2937&to=50bdec9836ed40e38ece0657f3058e730adffc4c&stat=instructions

Fixes #53465.

Reviewed By: rnk

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

2 years ago[AMDGPU] [NFC] refactor the AMDGPU attributor
Sameer Sahasrabuddhe [Tue, 8 Feb 2022 02:45:32 +0000 (21:45 -0500)]
[AMDGPU] [NFC] refactor the AMDGPU attributor

Reviewed By: arsenm

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

2 years ago[AMDGPU] Allow hoisting of some VALU compare instructions
Carl Ritson [Tue, 8 Feb 2022 02:27:23 +0000 (11:27 +0900)]
[AMDGPU] Allow hoisting of some VALU compare instructions

Conversatively allow hoisting/sinking of VALU comparisons.
If the result of a comparison is masked with exec, narrowing the
set of active lanes, then it is safe to hoist it as the masking
instruction will never by hoisted.

Heuristically this is also true for sinking, as we do not expect
the result of a sunk comparison that is masked with exec to be
used outside of the loop.

Reviewed By: rampitec

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

2 years ago[Attributor][FIX] Do not use assumed information for UB detection
Johannes Doerfert [Tue, 8 Feb 2022 01:39:19 +0000 (19:39 -0600)]
[Attributor][FIX] Do not use assumed information for UB detection

The helper `Attributor::checkForAllReturnedValuesAndReturnInsts`
simplifies the returned value optimistically. In `AAUndefinedBehavior`
we cannot use such optimistic values when deducing UB. As a result, we
assumed UB for the return value of a function because we initially
(=optimistically) thought the function return is `undef`. While we later
adjusted this properly, the `AAUndefinedBehavior` was under the
impression the return value is "known" (=fix) and could never change.

To correct this we use `Attributor::checkForAllInstructions` and then
manually to perform simplification of the return value, only allowing
known values to be used. This actually matches the other UB deductions.

Fixes #53647

2 years ago[MemoryBuiltins][FIX] Adjust index type size properly wrt. AS casts
Johannes Doerfert [Tue, 1 Feb 2022 20:32:33 +0000 (14:32 -0600)]
[MemoryBuiltins][FIX] Adjust index type size properly wrt. AS casts

Use existing functionality to strip constant offsets that works well
with AS casts and avoids the code duplication.

Since we strip AS casts during the computation of the offset we also
need to adjust the APInt properly to avoid mismatches in the bit width.
This code ensures the caller of `compute` sees APInts that match the
index type size of the value passed to `compute`, not the value result
of the strip pointer cast.

Fixes #53559.

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

2 years ago[M68k][GlobalISel] Implement lowerCall based on M68k calling convention
Sheng [Tue, 8 Feb 2022 02:08:21 +0000 (21:08 -0500)]
[M68k][GlobalISel] Implement lowerCall based on M68k calling convention

This patch implements CallLowering::lowerCall based on M68k calling
convention and adds M68kOutgoingValueHandler and CallReturnHandler to
handle argument passing and returned value.

2 years ago[libc] Return a float NaN for log1pf instead of double NaN.
Tue Ly [Tue, 8 Feb 2022 02:04:12 +0000 (21:04 -0500)]
[libc] Return a float NaN for log1pf instead of double NaN.

2 years ago[lld-macho] Include address offsets in error messages
Jez Ng [Tue, 8 Feb 2022 02:06:02 +0000 (21:06 -0500)]
[lld-macho] Include address offsets in error messages

This makes it easier to pinpoint the source of the problem.

TODO: Have more relocation error messages make use of this
functionality.

Reviewed By: #lld-macho, oontvoo

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

2 years ago[SystemZ] Remove a superfluous semicolon to fix a gcc warning. NFC
Craig Topper [Tue, 8 Feb 2022 01:52:08 +0000 (17:52 -0800)]
[SystemZ] Remove a superfluous semicolon to fix a gcc warning. NFC

2 years ago[AMDGPU][NFC] AMDGPUUsage.rst: fix wording.
Lancelot Six [Tue, 8 Feb 2022 00:06:13 +0000 (19:06 -0500)]
[AMDGPU][NFC] AMDGPUUsage.rst: fix wording.

2 years ago[GlobalISel][Legalizer] Support reducing load/store width in big endian order
Sheng [Tue, 8 Feb 2022 00:04:27 +0000 (19:04 -0500)]
[GlobalISel][Legalizer] Support reducing load/store width in big endian order

2 years agoM68K: Pre-commit test of D116931
Sheng [Tue, 8 Feb 2022 00:03:26 +0000 (19:03 -0500)]
M68K: Pre-commit test of D116931

2 years ago[clang][driver] update the darwin driver to point to correct macho_embedded path
Alex Lorenz [Tue, 8 Feb 2022 00:49:47 +0000 (16:49 -0800)]
[clang][driver] update the darwin driver to point to correct macho_embedded path

Compiler-rt started emitting the macho_embedded libraries in
`<resource_dir>/lib/darwin/macho_embedded` after
https://reviews.llvm.org/D105765 / 1e03c37b97b6176a60404d84665c40321f4e33a4,
so update the clang's driver to reflect that.

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

2 years ago[BOLT] Fix runtime osx cross-compile build
Vladislav Khmelevsky [Fri, 4 Feb 2022 22:33:11 +0000 (01:33 +0300)]
[BOLT] Fix runtime osx cross-compile build

Place include elf.h under !apple condition

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

2 years ago[libc++][CI] Put runs into groups
Nikolas Klauser [Mon, 7 Feb 2022 20:06:03 +0000 (21:06 +0100)]
[libc++][CI] Put runs into groups

Many CI runs are very similar in nature. Let's put them into groups for a better overview

Reviewed By: ldionne, #libc

Spies: libcxx-commits, arichardson, mstorsjo

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

2 years ago[BOLT] Add aarch64 support for peephole passes
Vladislav Khmelevsky [Tue, 1 Feb 2022 20:41:07 +0000 (23:41 +0300)]
[BOLT] Add aarch64 support for peephole passes

Enable peephole optimizations for aarch64.
Also small code refactoring - add PeepholeOpts under Peepholes class.

Vladislav Khmelevsky,
Advanced Software Technology Lab, Huawei

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

2 years ago[RISCV] Use splat_vector instead of SplatPat in widening FP instruction patterns...
Craig Topper [Mon, 7 Feb 2022 23:52:13 +0000 (15:52 -0800)]
[RISCV] Use splat_vector instead of SplatPat in widening FP instruction patterns. NFCI

We use splat_vector for FP nodes without VL, not SplatPat which handles
splat_vector and integer VMV_V_X_VL.

Reduces isel table size by a few hundred bytes.

2 years ago[VP] llvm.vp.fma intrinsic and LangRef
Craig Topper [Mon, 7 Feb 2022 21:24:36 +0000 (13:24 -0800)]
[VP] llvm.vp.fma intrinsic and LangRef

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

2 years ago[gn build] (manually) port 157bbe6aea22e
Nico Weber [Mon, 7 Feb 2022 23:45:04 +0000 (18:45 -0500)]
[gn build] (manually) port 157bbe6aea22e

2 years ago[libc++] Mark some members private in experimental/functional
Joe Loser [Mon, 7 Feb 2022 00:47:45 +0000 (19:47 -0500)]
[libc++] Mark some members private in experimental/functional

Some members are public but should be private. Nothing requires they are public
right now, so make them private.

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

2 years agoRevert "[mlir][Linalg] NFC: Combine elementwise fusion test passes."
Mahesh Ravishankar [Mon, 7 Feb 2022 22:50:36 +0000 (22:50 +0000)]
Revert "[mlir][Linalg] NFC: Combine elementwise fusion test passes."

This reverts commit d730336411b59622a625510378cec0f9d23807c6.

2 years ago[libc++] Remove the ability to use the std::nullptr_t emulation in C++03 mode
Louis Dionne [Wed, 8 Sep 2021 16:57:58 +0000 (12:57 -0400)]
[libc++] Remove the ability to use the std::nullptr_t emulation in C++03 mode

Back in https://reviews.llvm.org/D109459, we stopped using the C++03
emulation for std::nullptr_t by default, which was an ABI break. We
still left a knob for users to turn it back on if they were broken by
the change, with a note that we would remove that knob after one release.

The time has now come to remove the knob and clean up the std::nullptr_t
emulation.

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

2 years ago[mlir][Linalg] NFC: Combine elementwise fusion test passes.
Mahesh Ravishankar [Mon, 7 Feb 2022 17:45:28 +0000 (17:45 +0000)]
[mlir][Linalg] NFC: Combine elementwise fusion test passes.

There are a few different test passes that check elementwise fusion in
Linalg. Consolidate them to a single pass controlled by different pass
options (in keeping with how `TestLinalgTransforms` exists).

2 years ago[lldb] Call __lldb_init_module from __init__
Dave Lee [Mon, 7 Feb 2022 20:24:51 +0000 (12:24 -0800)]
[lldb] Call __lldb_init_module from __init__

Update `__init__.py` generation to implement `__lldb_init_module`, which calls
`__lldb_init_module` on submodules that define it.

This allows the use case where a user runs `command script import lldb.macosx`.
With this change, the `__lldb_init_module` function in `crashlog.py` and
`heap.py` will be run, which is where command registration is occurring.

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

2 years ago[llvm-libtool-darwin] Add -warnings_as_errors
Keith Smiley [Thu, 3 Feb 2022 01:46:11 +0000 (17:46 -0800)]
[llvm-libtool-darwin] Add -warnings_as_errors

libtool can currently produce 2 warnings:

1. No symbols were in the object file
2. An object file with the same basename was specified multiple times

The first warning here is often harmless and may just mean you have some
translation units with no symbols for the target you're building for.
The second warning can lead to real issues like those mentioned in
https://reviews.llvm.org/D113130 where ODR violations can slip in.

This introduces a new -warnings_as_errors flag that can be used by build
systems that want to verify they never hit these warnings. For example
with bazel the libtool caller first uniques names to make sure the
duplicate base name case is not possible, but if that doesn't work as
expected, having it fail would be preferred.

It's also worth noting that llvm-libtool-darwin works around an issue
that cctools libtool experiences related to debug info and duplicate
basenames, the workaround is described here:
https://github.com/llvm/llvm-project/blob/30baa5d2a450d5e302d8cba3fc7a26a59d4b7ae1/llvm/lib/Object/ArchiveWriter.cpp#L424-L465
And it avoids this bug:
https://github.com/keith/radars/tree/f0cbbb1c37126ec6528c132510b29e08566377a7/DuplicateBasenameIssue

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

2 years ago[SDAG] try to fold one-demanded-bit-of-multiply
Sanjay Patel [Mon, 7 Feb 2022 22:14:30 +0000 (17:14 -0500)]
[SDAG] try to fold one-demanded-bit-of-multiply

This is a translation of the transform added to InstCombine with:
D118539

2 years ago[libcxx][test][NFC] Add tests for backward iteration over associative
Ruslan Arutyunyan [Mon, 7 Feb 2022 22:02:57 +0000 (01:02 +0300)]
[libcxx][test][NFC] Add tests for backward iteration over associative
containers

Add test cases for iteration over the ordered associative container from
end to begin using operator--

Reviewed By: Quuxplusone, rarutyun

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

2 years ago[Libomptarget] Replace Value RAII with default value
Joseph Huber [Mon, 7 Feb 2022 21:41:35 +0000 (16:41 -0500)]
[Libomptarget] Replace Value RAII with default value

This patch replaces the ValueRAII pointer with a default 'nullptr'
value. Previously this was initialized as a reference to an existing
variable. The use of this variable caused overhead as the compiler could
not look through the uses and determine that it was unused if 'Active'
was not set. Because of this accesses to the variable would be left in
the runtime once compiled.

Fixes #53641

Reviewed By: jdoerfert

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

2 years agoFix my email address in CODE_OWNERS.TXT
Paul Robinson [Mon, 7 Feb 2022 22:01:49 +0000 (14:01 -0800)]
Fix my email address in CODE_OWNERS.TXT

2 years ago[x86] avoid compile-time warning for parens; NFC
Sanjay Patel [Mon, 7 Feb 2022 21:59:50 +0000 (16:59 -0500)]
[x86] avoid compile-time warning for parens; NFC

2 years ago[mlir][spirv] Fix verification of nested array constants
Sergei Grechanik [Mon, 7 Feb 2022 20:42:23 +0000 (12:42 -0800)]
[mlir][spirv] Fix verification of nested array constants

Fix the verification function of spirv::ConstantOp to allow nesting
array attributes.

Reviewed By: antiagainst

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

2 years ago[Bitstream] Temporarily disable UBSan for invalid bitcode tests. This fixes failing...
Andrew Browne [Mon, 7 Feb 2022 20:21:30 +0000 (12:21 -0800)]
[Bitstream] Temporarily disable UBSan for invalid bitcode tests. This fixes failing sanitizer buildbots.

Tests added by
  https://github.com/llvm/llvm-project/commit/3c86642edd28f1ce970882edaba8dce468ec7401
  https://github.com/llvm/llvm-project/commit/f4fca0fbb052e55935b483c8955c440b59511ce8
cause existing code to exhibit UB:
  https://github.com/llvm/llvm-project/blob/b4c6d1bb379192cb5b712fda9f60cd105f21194f/llvm/include/llvm/Bitstream/BitstreamReader.h#L244

llvm/include/llvm/Bitstream/BitstreamReader.h:244:51:
runtime error: shift exponent 35 is too large for 32-bit type 'unsigned int'

Hitting the UBSan error before the expected error causes the test to fail under UBSan:

Reviewed By: vitalybuka

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

2 years ago[libc] Fix mixed-sign comparison warnings and an out-of-bound access in high_precisio...
Tue Ly [Mon, 7 Feb 2022 17:38:40 +0000 (12:38 -0500)]
[libc] Fix mixed-sign comparison warnings and an out-of-bound access in high_precision_decimal.h

Fix mixed-sign comparison warnings and an out-of-bound access in high_precision_decimal.h

Reviewed By: michaelrj

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

2 years ago[libc][Obvious] Suppress unused-variable warnings from syscall_unittest.
Tue Ly [Mon, 7 Feb 2022 20:54:50 +0000 (15:54 -0500)]
[libc][Obvious] Suppress unused-variable warnings from syscall_unittest.

The unused vararibles in the tests are intentional.

Reviewed By: sivachandra

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

2 years ago[libc] Implement log1pf correctly rounded to all rounding modes.
Tue Ly [Fri, 4 Feb 2022 02:27:26 +0000 (21:27 -0500)]
[libc] Implement log1pf correctly rounded to all rounding modes.

Implement log1pf correctly rounded to all rounding modes relying on logf implementation for exponent > 2^(-8).

Reviewed By: sivachandra, zimmermann6

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

2 years ago[HWASan] Use hwasan_memalign for aligned new.
Matt Morehouse [Mon, 7 Feb 2022 21:10:06 +0000 (13:10 -0800)]
[HWASan] Use hwasan_memalign for aligned new.

Aligned new does not require size to be a multiple of alignment, so
memalign is the correct choice instead of aligned_alloc.

Fixes false reports for unaligned sizes.

Reviewed By: eugenis

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

2 years agoFix address space for function pointers with qualifier
Elizabeth Andrews [Fri, 4 Feb 2022 23:45:35 +0000 (15:45 -0800)]
Fix address space for function pointers with qualifier

This patch fixes a bug introduced in commit 4eaf5846d0e7. Commit
4eaf5846d0e7 sets address space of function type as program
address space unconditionally. This breaks types which have
address space qualifiers. E.g. __ptr32.

This patch fixes the bug by using address space qualifiers if
present.

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

2 years ago[SDAG] SimplifyDemandedBits - generalize fold for 2 LSB of X*X
Sanjay Patel [Mon, 7 Feb 2022 20:22:08 +0000 (15:22 -0500)]
[SDAG] SimplifyDemandedBits - generalize fold for 2 LSB of X*X

This is translated from recent changes to the IR version of this function:
D119060
D119139

2 years ago[AArch64] add tests for demanded bits of multiply; NFC
Sanjay Patel [Mon, 7 Feb 2022 20:09:45 +0000 (15:09 -0500)]
[AArch64] add tests for demanded bits of multiply; NFC

This is adapted from existing tests for instcombine.
We want to keep the backend logic synchronized with
that as much as possible.

See D119139 / D119060 / D118539

2 years ago[lldb] Print message after loading 'crashlog' command
Dave Lee [Mon, 7 Feb 2022 17:31:25 +0000 (09:31 -0800)]
[lldb] Print message after loading 'crashlog' command

Previously, importing `crashlog` resulted in a message being printed. The
message was about other commands (those in heap.py), not `crashlog`. The
changes in D117237 made it so that the heap.py messages were printed only when
importing `lldb.macosx.heap`, not when importing `lldb.macosx.crashlog`. Some
users may see no output and think `crashlog` wasn't successfully loaded. This
ensures users see that `crashlog` is loaded.

rdar://88283132

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

2 years agoUse functions with prototypes when appropriate; NFC
Aaron Ballman [Mon, 7 Feb 2022 20:28:35 +0000 (15:28 -0500)]
Use functions with prototypes when appropriate; NFC

A significant number of our tests in C accidentally use functions
without prototypes. This patch converts the function signatures to have
a prototype for the situations where the test is not specific to K&R C
declarations. e.g.,

  void func();

becomes

  void func(void);

This is the fourth batch of tests being updated (there are a significant
number of other tests left to be updated).

2 years ago[Clang][Docs] Fix some typos in offloading design documentation
Joseph Huber [Mon, 7 Feb 2022 20:23:50 +0000 (15:23 -0500)]
[Clang][Docs] Fix some typos in offloading design documentation

2 years agoCleanup LLVMBitcode headers
serge-sans-paille [Fri, 4 Feb 2022 11:00:40 +0000 (12:00 +0100)]
Cleanup LLVMBitcode headers

Major user-facing changes:
llvm/Bitcode/BitcodeReader.h no longer includes llvm/IR/ModuleSummaryIndex.h

Some statistics:
clang++ -E  -Iinclude -I../llvm/include ../llvm/lib/Bitcode/Reader/*.cpp -std=c++14 -fno-rtti -fno-exceptions | wc -l
after: 493335
before: 539640

Discourse thread on the topic: https://discourse.llvm.org/t/include-what-you-use-include-cleanup/

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

2 years ago[OpenMP] Use executable path when searching for lld
Joseph Huber [Mon, 7 Feb 2022 19:59:03 +0000 (14:59 -0500)]
[OpenMP] Use executable path when searching for lld

Summary:
This patch changes the ClangLinkerWrapper to use the executable path
when searching for the lld binary. Previously we relied on the program
name. Also not finding 'llvm-strip' is not considered an error anymore
because it is an optional optimization.

2 years ago[lldb] Fix Lua/watchpoint_callback.test on Apple Silicon
Jonas Devlieghere [Mon, 7 Feb 2022 20:06:30 +0000 (12:06 -0800)]
[lldb] Fix Lua/watchpoint_callback.test on Apple Silicon

As Pavel pointed out, on Apple Silicon "b main" stops at a point after
the variable has already been initialized. This patch updates the test
case to avoids that. I've also split the test into separate files so its
easier to reproduce the individual scenarios without having to build any
shared state.

2 years ago[libc++][CI] Reorder CI runs
Nikolas Klauser [Fri, 4 Feb 2022 23:00:31 +0000 (00:00 +0100)]
[libc++][CI] Reorder CI runs

This patch makes the uncontrovertial changes to the pipeline.

Reviewed By: ldionne, #libc

Spies: libcxx-commits, arichardson

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

2 years ago[Bazel] Port e8bff9ae54a55b4dbfeb6ba55f723abbd81bf494 (move LLVM_ENABLE_ZLIB)
Fangrui Song [Mon, 7 Feb 2022 19:45:31 +0000 (11:45 -0800)]
[Bazel] Port e8bff9ae54a55b4dbfeb6ba55f723abbd81bf494 (move LLVM_ENABLE_ZLIB)

2 years ago[LoopVectorizer] Don't perform interleaving of predicated scalar loops
David Green [Mon, 7 Feb 2022 19:34:28 +0000 (19:34 +0000)]
[LoopVectorizer] Don't perform interleaving of predicated scalar loops

The vectorizer will choose at times to "vectorize" loops with a scalar
factor (VF=1) with interleaving (IC > 1). This can occasionally produce
better code than the unroller (notable for reductions where it can
produce independent reduction chains that are combined after the loop).
At times this is not very beneficial though, for example when runtime
checks are needed or when the scalar code requires predication.

This addresses the second point, preventing the vectorizer from
interleaving when the scalar loop will require predication. This
prevents it from making a bit of a mess, that is worse than the original
and better left for the unroller to unroll if beneficial. It helps
reverse some of the regressions from D118090.

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

2 years ago[MLIR][Presburger] Add support for piece-wise multi-affine functions
Arjun P [Mon, 7 Feb 2022 19:01:27 +0000 (00:31 +0530)]
[MLIR][Presburger] Add support for piece-wise multi-affine functions

Add the class MultiAffineFunction which represents functions whose domain is an
IntegerPolyhedron and which produce an output given by a tuple of affine
expressions in the IntegerPolyhedron's ids.

Also add support for piece-wise MultiAffineFunctions, which are defined on a
union of IntegerPolyhedrons, and may have different output affine expressions
on each IntegerPolyhedron. Thus the function is affine on each individual
IntegerPolyhedron piece in the domain.

This is part of a series of patches leading up to parametric integer programming.

Depends on D118778.

Reviewed By: Groverkss

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

2 years ago[AMDGPU] Fix debug values in scheduler not placed correctly when reverting
Vang Thao [Fri, 4 Feb 2022 18:44:20 +0000 (10:44 -0800)]
[AMDGPU] Fix debug values in scheduler not placed correctly when reverting

Debug position data is cleared after ScheduleDAGMILive::schedule() due to it also calling placeDebugValues(). Make it so the data is not cleared after initial call to placeDebugValues since we will call it again after reverting a schedule.

Secondly, since we skip debug instructions when reverting the schedule on AMDGPU, all debug instructions are now moved to the end of the scheduling region. RegionEnd points to the beginning of this chunk of debug instructions since it was not incremented when a debug instruction was skipped. RegionBegin may also point to the same debug instruction if Unsched.front() is a debug instruction thus shrinking the region to 1. Fix RegionBegin and RegionEnd so that they point to the current beginning and ending before calling placeDebugValues() since both vars will be used as reference points to move debug instructions back.

Reviewed By: rampitec

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

2 years ago[BOLT] Refactor heatmap to be standalone tool
Vladislav Khmelevsky [Mon, 7 Feb 2022 18:30:38 +0000 (21:30 +0300)]
[BOLT] Refactor heatmap to be standalone tool

Separate heatmap from bolt and build it as standalone tool.

Reviewed By: maksfb

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

2 years ago[libc++] Disable -Wattributes in GCC
Nikolas Klauser [Mon, 7 Feb 2022 15:07:01 +0000 (16:07 +0100)]
[libc++] Disable -Wattributes in GCC

Currently GCC produces lots of warnings. Most of them are `-Wattributes`, but these warnings are completly ignored by everybody. So let's disable -Wattributes and make the output cleaner.

Reviewed By: ldionne, #libc

Spies: libcxx-commits, mgorny

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

2 years ago[NFC] use Range based any_of for more concise code.
Florian Mayer [Mon, 7 Feb 2022 18:38:25 +0000 (10:38 -0800)]
[NFC] use Range based any_of for more concise code.

2 years ago[ELF] Move Symbol::needsTlsLd to config->needsTlsLd
Fangrui Song [Mon, 7 Feb 2022 18:26:16 +0000 (10:26 -0800)]
[ELF] Move Symbol::needsTlsLd to config->needsTlsLd

to decrease sizeof(SymbolUnion) from 72 to 64 on ELF64 platforms.

Use a dummy `Undefined` to prevent null pointer dereference (though unused)
`*rel.sym` in InputSectionBase::relocateAlloc.

The relocation order may shuffle a bit, but otherwise there is no behavior
difference.

2 years ago[LV] Adjust accesses in test to ensure full RT checks are generated.
Florian Hahn [Mon, 7 Feb 2022 18:07:19 +0000 (18:07 +0000)]
[LV] Adjust accesses in test to ensure full RT checks are generated.

Add an additional access so the full runtime checks are still generated,
even after D119078.

2 years ago[libc++][docs] Change some words to use reST inline literals
Fangrui Song [Mon, 7 Feb 2022 18:00:42 +0000 (10:00 -0800)]
[libc++][docs] Change some words to use reST inline literals

Reviewed By: #libc, ldionne, Quuxplusone

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

2 years agoRevert "[ELF] Move Symbol::needsTlsLd to config->needsTlsLd. NFC"
Alexander Kornienko [Mon, 7 Feb 2022 17:46:39 +0000 (18:46 +0100)]
Revert "[ELF] Move Symbol::needsTlsLd to config->needsTlsLd. NFC"

This reverts commit f9e3ca542ec17a0aa706bb51dcddf7fc6f0988ac.

The commit results in internal test failures. Test case provided offline.

2 years ago[LV] Use IRBuilderBase in VPlan.h, remove IRBuilder.h include (NFC).
Florian Hahn [Mon, 7 Feb 2022 17:46:16 +0000 (17:46 +0000)]
[LV] Use IRBuilderBase in VPlan.h, remove IRBuilder.h include (NFC).

By using IRBuilderBase instead of IRBuilder<> a forward declaration can
be used instead of including IRBuilder.h

2 years agoRevert "Add llgs category to all tests in TestLldbGdbServer that attach to the process."
Adrian Prantl [Mon, 7 Feb 2022 17:41:39 +0000 (09:41 -0800)]
Revert "Add llgs category to all tests in TestLldbGdbServer that attach to the process."

This reverts commit d42765b3bea5ee90426c49f35b0b5654de82a4f9.

2 years ago[lldb] Skip part of TestGdbRemoteMemoryAllocation.py on Apple Silicon
Jonas Devlieghere [Mon, 7 Feb 2022 17:40:45 +0000 (09:40 -0800)]
[lldb] Skip part of TestGdbRemoteMemoryAllocation.py on Apple Silicon

Skip the part of TestGdbRemoteMemoryAllocation.py that attempts to
allocate both writable and executable memory.

2 years ago[mlir][SCF] Further simplify affine maps during `for-loop-canonicalization`
Matthias Springer [Mon, 7 Feb 2022 17:25:55 +0000 (02:25 +0900)]
[mlir][SCF] Further simplify affine maps during `for-loop-canonicalization`

* Implement `FlatAffineConstraints::getConstantBound(EQ)`.
* Inject a simpler constraint for loops that have at most 1 iteration.
* Taking into account constant EQ bounds of FlatAffineConstraint dims/symbols during canonicalization of the resulting affine map in `canonicalizeMinMaxOp`.

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

2 years ago[libunwind] Define _Unwind_Backtrace for powerpc, sparc
Sam James [Mon, 7 Feb 2022 17:37:08 +0000 (09:37 -0800)]
[libunwind] Define _Unwind_Backtrace for powerpc, sparc

Add SPARC to the list of platforms for which we provide a full
unwind implementation which leads to _Unwind_Backtrace being defined within
libunwind.so.

Likewise for PPC (see D118320 for background).

Reviewed By: #libunwind, MaskRay, Arfrever

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

2 years ago[lldb] Fix a few lldb-server tests on Apple Silicon
Jonas Devlieghere [Mon, 7 Feb 2022 17:30:20 +0000 (09:30 -0800)]
[lldb] Fix a few lldb-server tests on Apple Silicon

This fixes TestGdbRemoteSingleStep.py and TestGdbRemote_vCont.py. This
patch updates the test to account for the possibility that the constants
are already materialized. This appears to behave differently between
embedded arm64 devices and Apple Silicon.

2 years ago[gn build] Port D119058
Arthur Eubanks [Mon, 7 Feb 2022 17:29:27 +0000 (09:29 -0800)]
[gn build] Port D119058

2 years ago[clang] Cache OpenCL types
Arthur Eubanks [Fri, 4 Feb 2022 17:21:20 +0000 (09:21 -0800)]
[clang] Cache OpenCL types

If we call CGOpenCLRuntime::convertOpenCLSpecificType() multiple times
we should get the same type back.

Reviewed By: svenvh

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

2 years agoFix lld standalone build
Mariusz Ceier [Mon, 7 Feb 2022 17:20:03 +0000 (09:20 -0800)]
Fix lld standalone build

lld/ELF/OutputSections.cpp includes llvm/Config/config.h for
LLVM_ENABLE_ZLIB definition, but llvm/Config/config.h doesn't exist in
standalone build.

To fix this, this patch moves LLVM_ENABLE_ZLIB from config.h to
llvm-config.h and updates OutputSections.cpp to include llvm-config.h
instead of config.h

Reviewed By: MaskRay, mgorny

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

2 years ago[InstCombine] generalize 2 LSB of demanded bits for X*X
Sanjay Patel [Mon, 7 Feb 2022 16:04:22 +0000 (11:04 -0500)]
[InstCombine] generalize 2 LSB of demanded bits for X*X

This is a follow-up suggested in D119060.
Instead of checking each of the bottom 2 bits individually,
we can check them together and handle the possibility that
we demand both together.

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

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

2 years agoAdd llgs category to all tests in TestLldbGdbServer that attach to the process.
Adrian Prantl [Mon, 7 Feb 2022 16:25:54 +0000 (08:25 -0800)]
Add llgs category to all tests in TestLldbGdbServer that attach to the process.

2 years agoReland "[clangd] Properly compute framework-style include spelling"
David Goldman [Mon, 7 Feb 2022 15:20:33 +0000 (10:20 -0500)]
Reland "[clangd] Properly compute framework-style include spelling"

Roll forward of https://reviews.llvm.org/D117056 with a fix. Proper
initialization of `IsPrivateHeader` was missing, causing failures
on Linux.

2 years ago[demangler] Stricter NestedName parsing
Nathan Sidwell [Fri, 21 Jan 2022 19:00:56 +0000 (11:00 -0800)]
[demangler] Stricter NestedName parsing

The parsing of nested names is a little lax.  This corrects that.

1) The 'L' local name prefix cannot appear before a NestedName -- only
within it.  Let's remove that check from parseName, and then adjust
parseUnscopedName to allow it with or without the 'St' prefix.

2) In a nested name, a <template-param>, <decltype> or <substitution>
can only appear as the first element.  Let's enforce that.  Note I do
not remove these from the loop, to make the change easier to follow
(such a change will come later).

3) Given that, there's no need to special case 'St' outside of the
loop, handle it with the other 'S' elements.

4) There's no need to reset 'EndsWithTemplateArgs' after each
non-template-arg component.  Rather, always clear it and then set it
in the template-args case.

5) An template-args cannot immediately follow a template-args.

6) The parsing of a CDtor name with ABITags would attach the tags to
the NestedName node, rather than the CDTor node.  This is different to
how ABITags are attached to an unscopedName.  Make it consistent.

7) We remain with only CDTor and UnscopedName requireing construction
of a NestedName, so let's drop the PushComponent lambda.

8) Add some tests to catch the new rejected manglings.

Reviewed By: ChuanqiXu

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

2 years ago[lldb] Update outdated comment in TestDyldTrieSymbols.py
Jonas Devlieghere [Mon, 7 Feb 2022 16:11:30 +0000 (08:11 -0800)]
[lldb] Update outdated comment in TestDyldTrieSymbols.py

After aed965d55d46 we no longer demangle and store the full name. The
test was updated accordingly but the comment still specified that we
should be able to find the symbol by its full demangled name.

2 years ago[MatrixBuilder] Require explicit element type in CreateColumnMajorLoad()
Nikita Popov [Mon, 7 Feb 2022 15:52:31 +0000 (16:52 +0100)]
[MatrixBuilder] Require explicit element type in CreateColumnMajorLoad()

This makes the method compatible with opaque pointers.

2 years agoRevert "Remove -Wweak-template-vtables"
Hans Wennborg [Mon, 7 Feb 2022 15:47:14 +0000 (16:47 +0100)]
Revert "Remove -Wweak-template-vtables"

Turns out there's still some code referencing this. No harm in keeping it in a
bit longer.

> as it was planned for removal in clang 15 and we're now past the branch point
>
> See https://github.com/llvm/llvm-project/issues/19107
>
> Differential revision: https://reviews.llvm.org/D118762

This reverts commit 564f9be11c9cb8d131f48df07538fab7a19b41a7.

2 years ago[mlir] Remove MatrixBuilder template argument
Nikita Popov [Mon, 7 Feb 2022 15:51:22 +0000 (16:51 +0100)]
[mlir] Remove MatrixBuilder template argument

I dropped this argument in cdc0573f753e639ed78f2a3645179ac2d2718fd0,
but did not adjust mlir. (Or rather I did, but I modified a generated
file ... oops)

2 years ago[demangler] Fix unresolvedname demangling
Nathan Sidwell [Fri, 28 Jan 2022 19:59:03 +0000 (11:59 -0800)]
[demangler] Fix unresolvedname demangling

We were dropping the [gs] modifier by parsing it in parseExpr, but not
forwarding it on to parseUnresolvedName.  This is the straightforwards
fix to forward that flag -- parseExpr must see past it.

Reviewed By: ChuanqiXu

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

2 years ago[demangler] Remove StdQualifiedName
Nathan Sidwell [Fri, 21 Jan 2022 19:37:01 +0000 (11:37 -0800)]
[demangler] Remove StdQualifiedName

The StdQualifiedName node class is used for names exactly in the std
namespace.  It is not used for nested names that descend further --
those use a NestedName with NameType("std") as the scope.
Representing the compression scheme in the node graph is layer
breaking.  We can use the same structure for those exactly in std too,
and reduce code size a bit.

Reviewed By: ChuanqiXu

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

2 years ago[ARM] Undeprecate complex IT blocks
Mark Murray [Mon, 24 Jan 2022 10:39:03 +0000 (10:39 +0000)]
[ARM] Undeprecate complex IT blocks

AArch32/Armv8A  introduced the performance deprecation of certain patterns
of IT instructions.  After some debate internal to ARM, this is now being
reverted; i.e. no IT instruction patterns are performance deprecated
anymore, as the perfomance degredation is not significant enough.

This reverts the following:

"ARMv8-A deprecates some uses of the T32 IT instruction. All uses of
IT that apply to instructions other than a single subsequent 16-bit
instruction from a restricted set are deprecated, as are explicit
references to the PC within that single 16-bit instruction. This permits
the non-deprecated forms of IT and subsequent instructions to be treated
as a single 32-bit conditional instruction."

The deprecation no longer applies, but the behaviour may be controlled
by the -arm-restrict-it and -arm-no-restrict-it command-line options,
with the latter being the default. No warnings about complex IT blocks
will be generated.

Reviewed By: dmgreen

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

2 years ago[MatrixBuilder] Remove unnecessary IRBuilder template (NFC)
Nikita Popov [Mon, 7 Feb 2022 15:33:58 +0000 (16:33 +0100)]
[MatrixBuilder] Remove unnecessary IRBuilder template (NFC)

IRBuilderBase exists specifically to avoid the need for this.

2 years agoAdd LLVM Embedded Toolchains call to the table of sync ups.
Volodymyr Turanskyy [Mon, 7 Feb 2022 13:30:16 +0000 (14:30 +0100)]
Add LLVM Embedded Toolchains call to the table of sync ups.

LLVM Embedded Toolchains working group regular sync up calls to start in early
March, adding details to the table of sync ups for general reference.

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

2 years ago[x86] avoid false dependency stall on 'sbb' with same source reg
Sanjay Patel [Mon, 7 Feb 2022 15:12:12 +0000 (10:12 -0500)]
[x86] avoid false dependency stall on 'sbb' with same source reg

This is effectively inverting the transform added with D116804
because the downside of the false dependency of something like
"sbb %eax, %eax" is much greater than the upside of eliminating
a zeroing instruction on (all?) Intel CPUs.

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

2 years ago[InstCombine] add test for demanded 2 low bits of X*X; NFC
Sanjay Patel [Mon, 7 Feb 2022 14:04:33 +0000 (09:04 -0500)]
[InstCombine] add test for demanded 2 low bits of X*X; NFC

2 years agoAMDGPU: Fix clobbering SCC when expanding large offset spill pseudos
Matt Arsenault [Mon, 1 Nov 2021 18:22:10 +0000 (14:22 -0400)]
AMDGPU: Fix clobbering SCC when expanding large offset spill pseudos

If we had a large offset which required materializing in a register,
we would emit an s_add_i32, clobbering SCC. Start checking if SCC is
live, and instead use a VGPR offset. For MUBUF, we switch to using
offen. We would do this anyway in a normal load/store with a frame
index, but not for spills.

The same problem still exists in other contexts where we expand frame
indices.

The nasty edge case is when SGPRs are spilled to memory at a large
frame offset where SCC is also clobbered. This requires a second
scavenging index, and also required several patches in the scavenger
to correctly handle multiple recursive scavenge indexes.

An even nastier edge case we still don't support is if we don't have
any free SGPRs. If SCC is live and we don't have any free SGPRs to
save exec, we have no way of flipping exec back and forth without also
clobbering SCC.

Fixes: SWDEV-309419

2 years ago[AArch64][NEON][SVE] Lower FCOPYSIGN using AArch64ISD::BSP
David Truby [Thu, 27 Jan 2022 16:31:00 +0000 (16:31 +0000)]
[AArch64][NEON][SVE] Lower FCOPYSIGN using AArch64ISD::BSP

This patch modifies the FCOPYSIGN lowering to go through the BSP
pseudo-instruction. This allows the same lowering code for NEON,
SVE and SVE2.

As part of this, lowering for BSP for SVE and SVE2 is also added.

For SVE and NEON this patch is NFC.

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

2 years agoUse functions with prototypes when appropriate; NFC
Aaron Ballman [Mon, 7 Feb 2022 14:24:09 +0000 (09:24 -0500)]
Use functions with prototypes when appropriate; NFC

A significant number of our tests in C accidentally use functions
without prototypes. This patch converts the function signatures to have
a prototype for the situations where the test is not specific to K&R C
declarations. e.g.,

  void func();

becomes

  void func(void);

This is the third batch of tests being updated (there are a significant
number of other tests left to be updated).

2 years ago[clang-format] Fix DefSeparator empty line issues
ksyx [Sun, 6 Feb 2022 02:18:04 +0000 (02:18 +0000)]
[clang-format] Fix DefSeparator empty line issues

- Add or remove empty lines surrounding union blocks.
- Fixes https://github.com/llvm/llvm-project/issues/53229, in which
  keywords like class and struct in a line ending with left brace or
  whose next line is left brace only, will be falsely recognized as
  definition line, causing extra empty lines inserted surrounding blocks
  with no need to be formatted.

Reviewed By: MyDeveloperDay, curdeius, HazardyKnusperkeks, owenpan
Differential Revision: https://reviews.llvm.org/D119067

2 years agoReformat CastExpr unittest suite; NFC
Kim Gräsman [Mon, 7 Feb 2022 14:21:41 +0000 (09:21 -0500)]
Reformat CastExpr unittest suite; NFC

In preparation for adding new tests. No functional change.

2 years ago[lldb/Platform] s/m_name/m_hostname
Pavel Labath [Mon, 7 Feb 2022 13:52:22 +0000 (14:52 +0100)]
[lldb/Platform] s/m_name/m_hostname

m_name is confusing, as there is a getter called GetName, but it returns
a completely different thing.

2 years ago[clang-tidy] Fixed a compile warning (NFC).
Balázs Kéri [Mon, 7 Feb 2022 13:50:47 +0000 (14:50 +0100)]
[clang-tidy] Fixed a compile warning (NFC).

Fixed a "override" related warning in SharedPtrArrayMismatchCheck.h.
Related to differential revision: https://reviews.llvm.org/D117306

2 years ago[InstCombine] SimplifyDemandedBits - mul(x,x) is odd iff x is odd
Sanjay Patel [Sat, 5 Feb 2022 15:18:38 +0000 (10:18 -0500)]
[InstCombine] SimplifyDemandedBits - mul(x,x) is odd iff x is odd

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

2 years ago[PPCISelLowering] Avoid use of getPointerElementType()
Nikita Popov [Mon, 7 Feb 2022 13:29:36 +0000 (14:29 +0100)]
[PPCISelLowering] Avoid use of getPointerElementType()

Use the value type instead.

2 years ago[test] Use -passes=instcombine instead of -instcombine in lots of tests. NFC
Bjorn Pettersson [Fri, 4 Feb 2022 12:39:52 +0000 (13:39 +0100)]
[test] Use -passes=instcombine instead of -instcombine in lots of tests. NFC

Another step moving away from the deprecated syntax of specifying
pass pipeline in opt.

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

2 years ago[test] Use -passes=instsimplify instead of -instsimplify in a number of tests. NFC
Bjorn Pettersson [Fri, 4 Feb 2022 10:45:19 +0000 (11:45 +0100)]
[test] Use -passes=instsimplify instead of -instsimplify in a number of tests. NFC

Another step moving away from the deprecated syntax of specifying
pass pipeline in opt.

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