platform/upstream/llvm.git
4 years ago[Statepoints][CGP] Minor parameter type cleanup
Philip Reames [Wed, 3 Jun 2020 22:21:11 +0000 (15:21 -0700)]
[Statepoints][CGP] Minor parameter type cleanup

4 years ago[AArch64][NFC] Regenerate arm64-rev.ll
Jessica Paquette [Wed, 3 Jun 2020 22:48:22 +0000 (15:48 -0700)]
[AArch64][NFC] Regenerate arm64-rev.ll

Test had some GISel stuff in it which was changed by 969d2d1ea94.

4 years ago[WebAssembly] Fix ISel crash in SIGN_EXTEND_INREG lowering
Thomas Lively [Wed, 3 Jun 2020 22:36:44 +0000 (15:36 -0700)]
[WebAssembly] Fix ISel crash in SIGN_EXTEND_INREG lowering

Summary:
The code previously assumed that the index of a vector extract was
constant, but this was not always true. This patch fixes the problem
by bailing out of the lowering if the index is nonconstant and also
replaces `static_cast`s in the lowering function with `cast`s because
the latter contain type-checking asserts that would make similar
issues easier to find and debug.

Reviewers: aheejin

Subscribers: dschuff, sbc100, jgravelle-google, hiraditya, sunfish, llvm-commits

Tags: #llvm

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

4 years ago[AArch64][GlobalISel] Add selection support for rev16, rev32, and rev64
Jessica Paquette [Tue, 2 Jun 2020 18:13:56 +0000 (11:13 -0700)]
[AArch64][GlobalISel] Add selection support for rev16, rev32, and rev64

This does three things:

1) Adds G_REV16, G_REV32, and G_REV64. These are equivalent to AArch64rev16,
   AArch64rev32, and AArch64rev64 respectively.

2) Adds support for producing G_REV64 in the postlegalizer combiner.
   We don't legalize any of the shuffles which could give us a G_REV32 or
   G_REV16 yet. Since the function for detecting the rev mask is lifted from
   AArch64ISelLowering, it should work for G_REV32 and G_REV16 when we get
   there.

3) Adds a selection test for a good portion of the patterns imported for the rev
   family. The only ones which are not tested are the ones with bitconvert.

This also does a little cleanup, and adds a struct for shuffle vector pseudo
matchdata. This lets us still use `applyShuffleVectorPseudo` rather than adding
a new function.

It should also make it a bit easier to port some of the other masks from
AArch64ISelLowering. (e.g. `isZIP_v_undef_Mask` and friends)

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

4 years agoFix bug in newly added VersionBase::operator>=
Julian Lettner [Wed, 3 Jun 2020 22:24:53 +0000 (15:24 -0700)]
Fix bug in newly added VersionBase::operator>=

Fixup for ba6b1b4353e33a7a36bcbad1d1c1157826197fd2.

4 years ago[Statepoint] Fix signed vs unsigned in index handling
Philip Reames [Wed, 3 Jun 2020 22:09:03 +0000 (15:09 -0700)]
[Statepoint] Fix signed vs unsigned in index handling

As noted in a comment on D80937, all of these are specified as unsigned values, but the verifier code was using signed.  Given the practical values involved, the different in range didn't matter, but we might as well clean it up.

4 years ago[AArch64][GlobalISel] Select uzp1 and uzp2
Jessica Paquette [Tue, 2 Jun 2020 16:30:04 +0000 (09:30 -0700)]
[AArch64][GlobalISel] Select uzp1 and uzp2

Porting the mask stuff for uzp1 and uzp2 from AArch64ISelLowering.

Add two custom opcodes: G_UZP1 and G_UZP2.

Produce them in the post-legalizer combiner when the mask checks out.

Tests:

- postlegalizer-combiner-uzp.mir verifies that we create G_UZP1 and G_UZP2.
The testcases that check that we create them come from neon-perm.ll.

- select-uzp.mir verifies that we can select G_UZP1 and G_UZP2.

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

4 years ago[mlir][StandardToSPIRV] Handle i1 case for lowering std.zexti to SPIR-V.
Hanhan Wang [Wed, 3 Jun 2020 22:00:33 +0000 (15:00 -0700)]
[mlir][StandardToSPIRV] Handle i1 case for lowering std.zexti to SPIR-V.

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

4 years agoIntroduce a "gc-live" bundle for the gc arguments of a statepoint
Philip Reames [Wed, 3 Jun 2020 21:56:24 +0000 (14:56 -0700)]
Introduce a "gc-live" bundle for the gc arguments of a statepoint

Currently, gc.relocates are defined in terms of indices into the statepoint's operand list. Given the gc args are at the end of a variable length list of operands, this makes interpreting their indices by hand a tad challenging. We can simplify the statepoint sequence and improve readability quite a bit by pulling these new operands into their own named operand bundle.

This patch defines a new operand bundle tag "gc-live". The semantics of the bundle are the same as the existing gc arguments of a statepoint. This patch simply introduces the definition and codegen for the bundle, future patches will migrate RS4GC to emitting the new form.

Interestingly, with this done and the recent migration to using deopt and gc-transition bundles, we really don't have much left in the statepoint itself. It really looks like the existing ID and flags fields are redundant; we have (existing!) attributes for all of them. I think we'll be able to reduce the gc.statepoint signature to simply a wrapped call (e.g. actual target and actual arguments).

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

4 years ago[mlir][Linalg] Add support for fusion between indexed_generic ops and tensor_reshape ops
Hanhan Wang [Wed, 3 Jun 2020 21:55:10 +0000 (14:55 -0700)]
[mlir][Linalg] Add support for fusion between indexed_generic ops and tensor_reshape ops

Summary:
The fusion for tensor_reshape is embedding the information to indexing maps,
thus the exising pattenr also works for indexed_generic ops.

Depends On D80347

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

4 years ago[mlir][Linalg] Add support for fusion between indexed_generic ops and generic ops...
Hanhan Wang [Wed, 3 Jun 2020 21:58:19 +0000 (14:58 -0700)]
[mlir][Linalg] Add support for fusion between indexed_generic ops and generic ops on tensors.

Summary:
Different from the fusion between generic ops, indices are involved. In this
context, we need to re-map the indices for producer since the fused op is built
on consumer's perspective. This patch supports all combination of the fusion
between indexed_generic ops and generic ops, which includes tests case:
  1) generic op as producer and indexed_generic op as consumer.
  2) indexed_generic op as producer and generic op as consumer.
  3) indexed_generic op as producer and indexed_generic op as consumer.

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

4 years ago[clangd] Fix forgotten propagation of AsnycPreamble flag
Kadir Cetinkaya [Wed, 3 Jun 2020 21:50:26 +0000 (23:50 +0200)]
[clangd] Fix forgotten propagation of AsnycPreamble flag

4 years ago[mlir] [VectorOps] Use 'vector.flat_transpose' for 2-D 'vector.tranpose'
aartbik [Wed, 3 Jun 2020 21:13:22 +0000 (14:13 -0700)]
[mlir] [VectorOps] Use 'vector.flat_transpose' for 2-D 'vector.tranpose'

Summary:
Progressive lowering of vector.transpose into an operation that
is closer to an intrinsic, and thus the hardware ISA. Currently
under the common vector transform testing flag, as we prepare
deploying this transformation in the LLVM lowering pipeline.

Reviewers: nicolasvasilache, reidtatge, andydavis1, ftynse

Reviewed By: nicolasvasilache, ftynse

Subscribers: mehdi_amini, rriddle, jpienaar, shauheen, antiagainst, nicolasvasilache, arpith-jacob, mgester, lucyrfox, liufengdb, stephenneuendorffer, Joonsoo, grosul1, frgossen, Kayjukh, jurahul, llvm-commits

Tags: #llvm, #mlir

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

4 years ago[lldb/Test] Python <3.5 requires **kwargs to come last
Jonas Devlieghere [Wed, 3 Jun 2020 21:53:30 +0000 (14:53 -0700)]
[lldb/Test] Python <3.5 requires **kwargs to come last

Thanks Martin Böhme for pointing this out.

4 years ago[lldb/Test] Remove un(used|needed|maintained) files from lldbsuite.
Jonas Devlieghere [Wed, 3 Jun 2020 20:14:08 +0000 (13:14 -0700)]
[lldb/Test] Remove un(used|needed|maintained) files from lldbsuite.

4 years agoAdd a test for preserving state on the non-expr thread across expression evaluation.
Jim Ingham [Wed, 3 Jun 2020 21:29:22 +0000 (14:29 -0700)]
Add a test for preserving state on the non-expr thread across expression evaluation.

There may be another test that tests this but I couldn't find one.

4 years ago[gn build] Port e636e6b79ac
LLVM GN Syncbot [Wed, 3 Jun 2020 21:16:03 +0000 (21:16 +0000)]
[gn build] Port e636e6b79ac

4 years ago[gn build] Port 7f50c15be5c
LLVM GN Syncbot [Wed, 3 Jun 2020 21:16:02 +0000 (21:16 +0000)]
[gn build] Port 7f50c15be5c

4 years ago[X86] Separate X86_CPU_TYPE_COMPAT_WITH_ALIAS from X86_CPU_TYPE_COMPAT. NFC
Craig Topper [Wed, 3 Jun 2020 18:57:03 +0000 (11:57 -0700)]
[X86] Separate X86_CPU_TYPE_COMPAT_WITH_ALIAS from X86_CPU_TYPE_COMPAT. NFC

Add a separate X86_CPU_TYPE_COMPAT_ALIAS that carries alias string
and the enum from X86_CPU_TYPE_COMPAT.

4 years ago[gn build] Fix link with ld.bfd and gold.
Nico Weber [Wed, 3 Jun 2020 21:05:34 +0000 (17:05 -0400)]
[gn build] Fix link with ld.bfd and gold.

lld's symbol resolution algorithm makes it not depend on
the order of object files and libraries, but ld.bfd and
gold require listing dependencies later on the link line.
Put {{libs}} after {{inputs}} so that e.g. -lpthreads
appears after the object files, not before it.

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

4 years agoReland "[WebAssembly] Eliminate range checks on br_tables"
Thomas Lively [Wed, 3 Jun 2020 21:04:59 +0000 (14:04 -0700)]
Reland "[WebAssembly] Eliminate range checks on br_tables"

This reverts commit 755a89591528b692315ad0325347e2fd4637271b.
Although I was not able to reproduce any test failures locally,
aheejin was able to reproduce them and found a fix, applied here.

4 years ago[WebAssembly] Add support for -mexec-model=reactor
Dan Gohman [Tue, 21 Apr 2020 17:35:10 +0000 (10:35 -0700)]
[WebAssembly] Add support for -mexec-model=reactor

This adds a -mexec-model= command-line flag. The default value is "command"
which is no change from the current behavior. The other option is "reactor"
which enables the WASI Reactor ABI:

https://github.com/WebAssembly/WASI/blob/master/design/application-abi.md

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

4 years ago[SVE] Eliminate calls to default-false VectorType::get() from IR
Christopher Tetreault [Wed, 3 Jun 2020 20:35:41 +0000 (13:35 -0700)]
[SVE] Eliminate calls to default-false VectorType::get() from IR

Reviewers: efriedma, kmclaughlin, sdesmalen, dexonsmith, dblaikie

Reviewed By: efriedma

Subscribers: tschuett, hiraditya, rkruppe, psnobl, llvm-commits

Tags: #llvm

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

4 years ago[clang-tidy]: Added modernize-replace-disallow-copy-and-assign-macro
Konrad Kleine [Wed, 3 Jun 2020 20:53:43 +0000 (16:53 -0400)]
[clang-tidy]: Added modernize-replace-disallow-copy-and-assign-macro

Summary:
This check finds macro expansions of `DISALLOW_COPY_AND_ASSIGN(Type)` and
replaces them with a deleted copy constructor and a deleted assignment operator.

Before the `delete` keyword was introduced in C++11 it was common practice to
declare a copy constructor and an assignment operator as a private members. This
effectively makes them unusable to the public API of a class.

With the advent of the `delete` keyword in C++11 we can abandon the
`private` access of the copy constructor and the assignment operator and
delete the methods entirely.

Migration example:

```
lang=dif
class Foo {
  private:
  -  DISALLOW_COPY_AND_ASSIGN(Foo);
  +  Foo(const Foo &) = delete;
  +  const Foo &operator=(const Foo &) = delete;
  };
```

Reviewers: alexfh, hokein, aaron.ballman, njames93

Reviewed By: njames93

Subscribers: Eugene.Zelenko, mgorny, xazax.hun, cfe-commits

Tags: #clang, #clang-tools-extra

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

4 years agoRegAllocFast: Record internal state based on register units
Matt Arsenault [Tue, 19 Mar 2019 17:50:22 +0000 (13:50 -0400)]
RegAllocFast: Record internal state based on register units

Record internal state based on register units. This is often more
efficient as there are typically fewer register units to update
compared to iterating over all the aliases of a register.

Original patch by Matthias Braun, but I've been rebasing and fixing it
for almost 2 years and fixed a few bugs causing intermediate failures
to make this patch independent of the changes in
https://reviews.llvm.org/D52010.

4 years agoX86: Switch fastregalloc test to use generated checks
Matt Arsenault [Wed, 3 Jun 2020 20:09:06 +0000 (16:09 -0400)]
X86: Switch fastregalloc test to use generated checks

4 years ago[Darwin] Improve runtime OS version checks
Julian Lettner [Thu, 14 May 2020 21:52:35 +0000 (14:52 -0700)]
[Darwin] Improve runtime OS version checks

Use a struct to represent numerical versions instead of encoding release
names in an enumeration. This avoids the need to extend the enumeration
every time there is a new release.

Rename `GetMacosVersion() -> GetMacosAlignedVersion()` to better reflect
how this is used on non-MacOS platforms.

Reviewed By: delcypher

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

4 years agoReplace separator in OpenMP variant name mangling.
Lukas Sommer [Wed, 3 Jun 2020 20:32:49 +0000 (16:32 -0400)]
Replace separator in OpenMP variant name mangling.

Summary:
Nvidia PTX does not allow `.` to appear in identifiers, so OpenMP variant mangling now uses `$` to separate segments of the mangled name for variants of functions declared via `declare variant`.

Reviewers: jdoerfert, Hahnfeld

Reviewed By: jdoerfert

Subscribers: yaxunl, guansong, sstefan1, cfe-commits

Tags: #openmp, #clang

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

4 years ago[IRInterpreter] Unused. Drive-by cleanup. NFCI.
Davide Italiano [Wed, 3 Jun 2020 19:21:35 +0000 (12:21 -0700)]
[IRInterpreter] Unused. Drive-by cleanup. NFCI.

4 years ago[mlir] Remove unneeded inference trait/fns
Jacques Pienaar [Wed, 3 Jun 2020 20:09:07 +0000 (13:09 -0700)]
[mlir] Remove unneeded inference trait/fns

Therse are all handled with the simple return type inference in ODS.
Also update some summaries to match what is recommended in ODS doc.

4 years ago[clang-format] [PR46157] Wrong spacing of negative literals with use of operator
mydeveloperday [Wed, 3 Jun 2020 19:44:08 +0000 (20:44 +0100)]
[clang-format] [PR46157] Wrong spacing of negative literals with use of operator

Summary:
see https://bugs.llvm.org/show_bug.cgi?id=46157

Reviewed By: curdeius

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

4 years ago[clang-format] [PR46159] Linux kernel 'C' code uses 'try' as a variable name, allow...
mydeveloperday [Wed, 3 Jun 2020 19:42:09 +0000 (20:42 +0100)]
[clang-format] [PR46159] Linux kernel 'C' code uses 'try' as a variable name, allow clang-format to handle such cases

Reviewed By: curdeius

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

4 years agoDefine __SPIR__ macro for spir/spir64 targets.
Vyacheslav Zakharin [Wed, 27 May 2020 19:27:53 +0000 (12:27 -0700)]
Define __SPIR__ macro for spir/spir64 targets.

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

4 years ago[lldb][NFC] Fix documentation formatting in ASTResultSynthesizer
Raphael Isemann [Wed, 3 Jun 2020 19:30:07 +0000 (21:30 +0200)]
[lldb][NFC] Fix documentation formatting in ASTResultSynthesizer

This comment apparently didn't survive the great LLDB reformatting unharmed.

4 years ago[lldb/StringPrinter] Support strings with invalid utf8 sub-sequences
Vedant Kumar [Wed, 3 Jun 2020 18:52:29 +0000 (11:52 -0700)]
[lldb/StringPrinter] Support strings with invalid utf8 sub-sequences

Support printing strings which contain invalid utf8 sub-sequences, e.g.
strings like "hello world \xfe", instead of bailing out with "Summary
Unavailable".

I took the opportunity here to delete some hand-rolled utf8 -> utf32
conversion code and replace it with calls into llvm's Support library.

rdar://61554346

4 years ago[lldb/StringPrinter] Convert DecodedCharBuffer to a class, NFC
Vedant Kumar [Wed, 3 Jun 2020 18:51:22 +0000 (11:51 -0700)]
[lldb/StringPrinter] Convert DecodedCharBuffer to a class, NFC

The m_size and m_data members of DecodedCharBuffer are meant to be
private.

4 years ago[AArch64] Fix stp-opt-with-renaming-ld3.mir with expensive checks.
Florian Hahn [Wed, 3 Jun 2020 19:11:52 +0000 (20:11 +0100)]
[AArch64] Fix stp-opt-with-renaming-ld3.mir with expensive checks.

Unconditionally use -verify-machineinstrs and XFAIL the test until
fixed.

4 years agolld: use `std::make_unique` (NFC)
Saleem Abdulrasool [Wed, 3 Jun 2020 18:13:05 +0000 (18:13 +0000)]
lld: use `std::make_unique` (NFC)

The LLVM code base already uses C++14, use std::make_unique
to avoid the explicit constructor invocation via new and to avoid
spelling out the type twice.

4 years agoCoroSplit: Fix coroutine splitting for retcon and retcon.once
Arnold Schwaighofer [Tue, 2 Jun 2020 14:19:22 +0000 (07:19 -0700)]
CoroSplit: Fix coroutine splitting for retcon and retcon.once

Summary:
For retcon and retcon.once coroutines we assume that all uses of spills
can be sunk past coro.begin. This simplifies handling of instructions
that escape the address of an alloca.

The current implementation would have issues if the address of the
alloca is escaped before coro.begin. (It also has issues with casts before and
uses of those casts after the coro.begin instruction)

  %alloca_addr = alloca ...
  %escape  = ptrtoint %alloca_addr
  coro.begin
  store %escape to %alloca_addr

rdar://60272809

Subscribers: hiraditya, modocache, mgrang, llvm-commits

Tags: #llvm

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

4 years ago[VectorCombine] Add multi-use shl test for D80885
Simon Pilgrim [Wed, 3 Jun 2020 18:41:56 +0000 (19:41 +0100)]
[VectorCombine] Add multi-use shl test for D80885

4 years ago[AArch64] Add ld3 test case for renaming in ldst-opt (NFC).
Florian Hahn [Wed, 3 Jun 2020 16:12:45 +0000 (17:12 +0100)]
[AArch64] Add ld3 test case for renaming in ldst-opt (NFC).

The test case highlights a mis-compile reported in PR46105, where
a consecutive register list is renamed, which invalidates some other
used registers.

4 years ago[NewGVN] Add test to ensure metadata is preserved for ssa_copy (NFC)
Florian Hahn [Wed, 3 Jun 2020 11:24:56 +0000 (12:24 +0100)]
[NewGVN] Add test to ensure metadata is preserved for ssa_copy (NFC)

Add a new test that checks that metadata is preserved when ssa_copy
calls introduced by PredicateInfo are replaced by their original
values.

4 years ago[JITLink] Skip debug sections in MachO objects.
Lang Hames [Wed, 3 Jun 2020 04:31:26 +0000 (21:31 -0700)]
[JITLink] Skip debug sections in MachO objects.

Debug sections will not be linked into the final executable and may contain
ambiguous relocations*. Skipping them avoids both some unnecessary processing
cost and the hassle of dealing with the problematic relocations.

* E.g. __debug_ranges contains non-extern relocations to the end of functions
hat begin with named symbols. Under the usual rules for interpreting non-extern
relocations these will be incorrectly associated with the following block, or
no block at all (if there is a gap between one block and the next).

4 years ago[VectorCombine] Add multi-use multiply test for D80885
Simon Pilgrim [Wed, 3 Jun 2020 17:53:35 +0000 (18:53 +0100)]
[VectorCombine] Add multi-use multiply test for D80885

4 years ago[doc] Fix use of ` where `` was intended in attribute docs.
Richard Smith [Wed, 3 Jun 2020 17:52:55 +0000 (10:52 -0700)]
[doc] Fix use of ` where `` was intended in attribute docs.

`...` is rST syntax for hyperlinks etc. ``...`` should be used for code snippets.

4 years ago[AIX] Change the default target CPU to power4 for AIX on Power
Steven Wan [Wed, 3 Jun 2020 17:49:47 +0000 (13:49 -0400)]
[AIX] Change the default target CPU to power4 for AIX on Power

Summary: This patch changes the AIX default target CPU to power4 since this is the the lowest arch for the lowest OS level supported.

Reviewers: hubert.reinterpretcast, cebowleratibm, daltenty

Reviewed By: hubert.reinterpretcast

Subscribers: cfe-commits

Tags: #clang

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

4 years ago[InstSimplify] fix bug in matching or-with-not op (PR46083)
Dorit Nuzman [Wed, 3 Jun 2020 17:11:54 +0000 (13:11 -0400)]
[InstSimplify] fix bug in matching or-with-not op (PR46083)

4 years ago[XCOFF][AIX] Use 'L..' instead of 'L' for PrivateGlobalPrefix
jasonliu [Wed, 3 Jun 2020 16:23:12 +0000 (16:23 +0000)]
[XCOFF][AIX] Use 'L..' instead of 'L' for PrivateGlobalPrefix

Without this change, names start with 'L' will get created as
temporary symbol in MCContext::createSymbol.

Some other potential prefix considered:
.L, does not work for AIX, as a function start with L will end
up with .L as prefix for its function entry point.

..L could work, but it does not play well with the convention
on AIX that anything start with '.' are considered as entry point.

L. could work, but not sure if it's safe enough, as it's possible
to have suffixes like .something append to a plain L, giving L.something
which is not necessarily a temporary.

That's why we picked L.. for now.

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

4 years ago[profile] Sync InstrProfData.inc with llvm.
Hiroshi Yamauchi [Tue, 2 Jun 2020 22:10:02 +0000 (15:10 -0700)]
[profile] Sync InstrProfData.inc with llvm.

Reviewers: davidxl

Subscribers: #sanitizers, llvm-commits

Tags: #sanitizers

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

4 years ago[libc++] Fix test broken in C++03 due to requiring C++11 features from vector
Louis Dionne [Wed, 3 Jun 2020 16:58:50 +0000 (12:58 -0400)]
[libc++] Fix test broken in C++03 due to requiring C++11 features from vector

4 years ago[doc] Fix typo.
Richard Smith [Wed, 3 Jun 2020 16:56:38 +0000 (09:56 -0700)]
[doc] Fix typo.

The absence of a space here caused this codeblock to be missing from the rendered output.

4 years ago[lldb/Test] Don't print 'command invoked'
Jonas Devlieghere [Wed, 3 Jun 2020 16:31:15 +0000 (09:31 -0700)]
[lldb/Test] Don't print 'command invoked'

The different tools constructing dotest invocations (lit and
lldb-dotest) already print the command invocation so there's no need to
print it again in the dotest output.

My motivation for removing it is that it doesn't include the Python
interpreter and every time I accidentally copy it, the command fails
with an `ImportError`.

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

4 years ago[MLIR] Shape to standard dialect lowering
Frederik Gossen [Wed, 3 Jun 2020 16:14:42 +0000 (16:14 +0000)]
[MLIR] Shape to standard dialect lowering

Add a new pass to lower operations from the `shape` to the `std` dialect.
The conversion applies only to the `size_to_index` and `index_to_size`
operations and affected types.
Other patterns will be added as needed.

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

4 years ago[libc++] Support move construction and assignment in <thread> in C++03
Louis Dionne [Wed, 3 Jun 2020 15:51:59 +0000 (11:51 -0400)]
[libc++] Support move construction and assignment in <thread> in C++03

Libc++ provides support for <thread> in C++03 as an extension. Furthermore,
it does not support any compiler that doesn't have rvalue references. It
is hence possible to provide the move constructor and move assignment
operator in C++03.

4 years ago[analyzer] ObjCAutoreleaseWriteChecker: Support explicit autoreleasepools.
Paul Pelzl [Wed, 3 Jun 2020 09:50:45 +0000 (12:50 +0300)]
[analyzer] ObjCAutoreleaseWriteChecker: Support explicit autoreleasepools.

The checker currently supports only a whitelist of block-enumeration
methods which are known to internally clear an autorelease pool.
Extend this checker to detect writes within the scope of explicit
@autoreleasepool statements.

rdar://25301111

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

4 years ago[analyzer] Add support for ObjCIndirectCopyRestoreExpr.
Paul Pelzl [Wed, 3 Jun 2020 08:39:12 +0000 (11:39 +0300)]
[analyzer] Add support for ObjCIndirectCopyRestoreExpr.

Idiomatic objc using ARC will generate this expression regularly due to
NSError out-param passing.  Providing an implementation for this
expression allows the analyzer to explore many more codepaths in ARC
projects.

The current implementation is not perfect but the differences are hopefully
subtle enough to not cause much problems.

rdar://63918914

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

4 years ago[CodeGen] Enable tail call position check for speculatable functions
Victor Huang [Wed, 3 Jun 2020 15:37:07 +0000 (10:37 -0500)]
[CodeGen] Enable tail call position check for speculatable functions

In the function "Analysis.cpp:isInTailCallPosition", it only checks whether
a call is in a tail call position if the call has side effects, access memory
or it is not safe to speculative execute. Therefore, a speculatable function
will not go through tail call position check and improperly tail called when
it is not in a tail-call position. This patch enables tail call position check
for speculatable functions.

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

4 years agolld: ignore the `-search_paths_first` option on MachO
Saleem Abdulrasool [Tue, 2 Jun 2020 23:05:09 +0000 (23:05 +0000)]
lld: ignore the `-search_paths_first` option on MachO

ld64 provides the `-search_path_firsts` which will search each path in
the library search path order for both `lib[name].dylib`, `lib[name].a`
before moving on (searching all paths for the dylib and then falling
back to the static library if a shared library was not found).

This option has been the default for a long time, but the command line
flag still exists.  Ignore it for compatibility.

4 years ago[libcxx testing] Fix bot failure in my last commit
David Zarzycki [Wed, 3 Jun 2020 15:23:27 +0000 (11:23 -0400)]
[libcxx testing] Fix bot failure in my last commit

4 years ago[LiveVariables] Don't set undef reg PHI used as live for FromMBB
Kang Zhang [Wed, 3 Jun 2020 15:25:30 +0000 (15:25 +0000)]
[LiveVariables] Don't set undef reg PHI used as live for FromMBB

Summary:
In the patch D73152, it adds a new function LiveVariables::addNewBlock.
This new function will add the reg which PHI used to the MBB which reg
is from.
But the new function may cause LiveVariable Verification failed when the
Src reg in PHI is undef.

Reviewed By: bjope

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

4 years ago[CodeGen][SVE] Replace deprecated calls in getCopyFromPartsVector()
Henry Kao [Wed, 3 Jun 2020 15:12:25 +0000 (11:12 -0400)]
[CodeGen][SVE] Replace deprecated calls in getCopyFromPartsVector()

Summary: Replaced getVectorNumElements() with getVectorElementCount(). Added operator overloads for class ElementCount. Fixes warning in several AArch64 unit tests.

Reviewers: sdesmalen, kmclaughlin, dancgr, efriedma, each, andwar, rengolin

Reviewed By: efriedma

Subscribers: tschuett, kristof.beyls, hiraditya, rkruppe, psnobl, llvm-commits

Tags: #llvm

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

4 years ago[BPF] Remove unnecessary MOV_32_64 instructions
Yonghong Song [Tue, 2 Jun 2020 07:47:18 +0000 (00:47 -0700)]
[BPF] Remove unnecessary MOV_32_64 instructions

Commit 13f6c81c5d9a ("[BPF] simplify zero extension
with MOV_32_64") tried to use MOV_32_64 instructions
instead of lshift/rshift instructions for zero extension.
This has the benefit to remove the number of instructions
and may help verifier too.

But the same commit also removed the old MOV_32_64
pruning as it deems unsafe as MOV_32_64 does have the
side effect, zeroing out the top 32bit in the register.
This caused the following failure in kernel selftest
test_cls_redirect.o. In linux kernel, we have
     struct __sk_buff {
        __u32 data;
        __u32 data_end;
     };
The compiler will generate 32bit load for __sk_buff->data
and __sk_buff->data_end. But kernel verifier will actually
loads an address (64bit address on 64bit kernel) to the
result register. In this particular example, the explicit zext
was not optimized away and destroyed top 32bit
address and the verifier rejected the program :
     w2 = *(u32 *)(r1 + 76)
     ...
     r2 = w2  /* MOV_32_64: this will clear top 32bit */

Currently, if the load and the zext are next to each other, the
instruction pattern match can actually capture this to
avoid MOV_32_64, e.g., in BPFInstrInfo.td, we have
  def : Pat<(i64 (zextloadi32 ADDRri:$src)),
            (SUBREG_TO_REG (i64 0), (LDW32 ADDRri:$src), sub_32)>;

However, if they are not next to each other, LDW32 and
MOV_32_64 are generated, which may cause the above mentioned
problem.

BPF Backend already tried to optimize away pattern
   mov_32_64 + lshift + rshift

Commit 13f6c81c5d9a may generate mov_32_64 not followed by shifts.
This patch added optimization for only mov_32_64 too.

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

4 years agoFix gcc -Wdocumentation warning. NFC.
Simon Pilgrim [Wed, 3 Jun 2020 15:05:31 +0000 (16:05 +0100)]
Fix gcc -Wdocumentation warning. NFC.

gcc doesn't recognise @llvm.experimental.guard as a code snippet

4 years ago[DAG] SimplifyDemandedBits - peek through SHL if we only demand sign bits.
Simon Pilgrim [Wed, 3 Jun 2020 14:56:28 +0000 (15:56 +0100)]
[DAG] SimplifyDemandedBits - peek through SHL if we only demand sign bits.

If we're only demanding the (shifted) sign bits of the shift source value, then we can use the value directly.

This handles SimplifyDemandedBits/SimplifyMultipleUseDemandedBits for both ISD::SHL and X86ISD::VSHLI.

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

4 years ago[HIP] Change default --gpu-max-threads-per-block value to 1024
Yaxun (Sam) Liu [Wed, 25 Mar 2020 18:47:18 +0000 (14:47 -0400)]
[HIP] Change default --gpu-max-threads-per-block value to 1024

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

4 years ago[ELF] Append " [--no-allow-shlib-undefined]" to the corresponding diagnostics
Fangrui Song [Wed, 3 Jun 2020 14:59:28 +0000 (07:59 -0700)]
[ELF] Append " [--no-allow-shlib-undefined]" to the corresponding diagnostics

--no-allow-shlib-undefined (enabled by default when linking an
executable) rejects unresolved references in shared objects.

Users may be confused by the common diagnostics of unresolved symbols in
object files (LLD: "undefined symbol: foo"; GNU ld/gold: "undefined reference to")

Learn from GCC/clang " [-Wfoo]": append the option name to the
diagnostics. Users can find relevant information by searching
"--no-allow-shlib-undefined".  It should also be obvious to them that
the positive form --allow-shlib-undefined can suppress the error.

Also downgrade the error to a warning if --noinhibit-exec is used (compatible
with GNU ld and gold).

Reviewed By: grimar, psmith

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

4 years ago[AIX] Update data directives for AIX assembly
David Tenty [Wed, 3 Jun 2020 14:54:56 +0000 (10:54 -0400)]
[AIX] Update data directives for AIX assembly

Summary:
The standard data emission directives (e.g. .short, .long) in the AIX assembler
have the unintended consequence of aligning their output to the natural byte
boundary. This cause problems because we aren't expecting behavior from the
Data*bitsDirectives, so the final alignment of data isn't correct in some cases
on AIX.

This patch updated the Data*bitsDirectives to use .vbyte pseudo-ops instead to emit the
data, since we will emit the .align directives as needed. We update the existing
testcases and add a test for emission of struct data.

Reviewers: hubert.reinterpretcast, Xiangling_L, jasonliu

Reviewed By: hubert.reinterpretcast, jasonliu

Subscribers: wuzish, nemanjai, hiraditya, kbarton, arphaman, llvm-commits

Tags: #llvm

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

4 years ago[SveEmitter] Add SVE ACLE for svld1ro.
Francesco Petrogalli [Thu, 28 May 2020 02:17:45 +0000 (02:17 +0000)]
[SveEmitter] Add SVE ACLE for svld1ro.

Reviewers: sdesmalen, efriedma

Subscribers: tschuett, cfe-commits

Tags: #clang

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

4 years agoARM: Reduce debug info testcase
Matt Arsenault [Thu, 12 Dec 2019 15:51:18 +0000 (21:21 +0530)]
ARM: Reduce debug info testcase

This had multiple functions and only one vague check. Reduce it.

4 years ago[libcxx testing] Fix more bogus timeouts: condvarany/notify_all.pass.cpp
David Zarzycki [Wed, 3 Jun 2020 14:20:37 +0000 (10:20 -0400)]
[libcxx testing] Fix more bogus timeouts: condvarany/notify_all.pass.cpp

On slow/busy machines, timing cannot be guaranteed.

4 years ago[X86][AVX] getFauxShuffleMask - fix sub vector size check in INSERT_SUBVECTOR(X,SHUFF...
Simon Pilgrim [Wed, 3 Jun 2020 14:03:26 +0000 (15:03 +0100)]
[X86][AVX] getFauxShuffleMask - fix sub vector size check in INSERT_SUBVECTOR(X,SHUFFLE(Y,Z))

We were bailing on subvector shuffle inputs that were smaller than the subvector type instead of larger than it.

Fixes PR46178

4 years agosecond attempt to fix build after add51e1
Nathan James [Wed, 3 Jun 2020 14:16:36 +0000 (15:16 +0100)]
second attempt to fix build after add51e1

4 years agoAMDGPU: Switch test to generated checks
Matt Arsenault [Wed, 3 Jun 2020 14:13:42 +0000 (10:13 -0400)]
AMDGPU: Switch test to generated checks

This is was a very frustrating test to update manually.

4 years ago[libc++abi] Fix incorrect XFAILs for mis-aligned _Unwind_Exception on Apple
Louis Dionne [Wed, 3 Jun 2020 14:06:56 +0000 (10:06 -0400)]
[libc++abi] Fix incorrect XFAILs for mis-aligned _Unwind_Exception on Apple

The problem mentioned in the XFAILs has been resolved in macosx10.15, so
the test is now XPASSing on that platform.

rdar://63640184

4 years ago[llvm][SVE] IR intrinsic for LD1RO.
Francesco Petrogalli [Wed, 27 May 2020 19:58:04 +0000 (19:58 +0000)]
[llvm][SVE] IR intrinsic for LD1RO.

Reviewers: sdesmalen, efriedma

Subscribers: tschuett, hiraditya, rkruppe, psnobl, llvm-commits

Tags: #llvm

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

4 years agoAdd support for `nullptr` in SyntaxTrees
Eduardo Caldas [Wed, 3 Jun 2020 13:34:25 +0000 (15:34 +0200)]
Add support for `nullptr` in SyntaxTrees

Reviewers: gribozavr2

Reviewed By: gribozavr2

Subscribers: cfe-commits

Tags: #clang

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

4 years ago[PowerPC] Replace subtract-from-zero float in version with fneg in PowerPC special...
Andrew Wock [Tue, 2 Jun 2020 17:42:48 +0000 (13:42 -0400)]
[PowerPC] Replace subtract-from-zero float in version with fneg in PowerPC special fma compiler builtins

This is a re-revert with a corrected test.

This patch adds a test for the PowerPC fma compiler builtins, some variations
of which negate inputs and outputs. The code to generate IR for these
builtins was untested before this patch.

Originally, the code used the outdated method of subtracting floating point
values from -0.0 as floating point negation. This patch remedies that.

Patch by: Drew Wock <drew.wock@sas.com>
Differential Revision: https://reviews.llvm.org/D76949

4 years ago[clangd] Add std::move() to a return statement to please some compilers.
Martin Boehme [Wed, 3 Jun 2020 11:07:13 +0000 (13:07 +0200)]
[clangd] Add std::move() to a return statement to please some compilers.

This has been causing build errors in Swift CI.

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

4 years ago[libc++] Remove the c++98 Lit feature from the test suite
Louis Dionne [Mon, 1 Jun 2020 14:38:23 +0000 (10:38 -0400)]
[libc++] Remove the c++98 Lit feature from the test suite

C++98 and C++03 are effectively aliases as far as Clang is concerned.
As such, allowing both std=c++98 and std=c++03 as Lit parameters is
just slightly confusing, but provides no value. It's similar to allowing
both std=c++17 and std=c++1z, which we don't do.

This was discovered because we had an internal bot that ran the test
suite under both c++98 AND c++03 -- one of which is redundant.

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

4 years ago[mlir] DialectConversion: remove vtable from TypeConverter
Alex Zinenko [Tue, 2 Jun 2020 11:35:43 +0000 (13:35 +0200)]
[mlir] DialectConversion: remove vtable from TypeConverter

The original design of TypeConverter expected specific converters to derive the
class and override virtual functions for conversions and materializations. This
did not scale well to multi-dialect conversions, so the design was changed to
register a list of converter and materializer functions, removing the need for
virtual functions. The only remaining virtual function, `convertSignatureArg`
is never overridden in-tree. Make it non-virtual, drop the virtual destructor
and thus remove vtable from TypeConverter.

If there exist TypeConverter users that need custom `convertSignatureArg`
behavior, it should be implemented using the callback registration mechanism
similar to that of conversions and materializations.

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

4 years ago[OPENMP]Fix PR46170: partial mapping for array sections of data members.
Alexey Bataev [Tue, 2 Jun 2020 18:26:28 +0000 (14:26 -0400)]
[OPENMP]Fix PR46170: partial mapping for array sections of data members.

Summary:
If the data member is mapped as an array section, need to emit the
pointer to the last element of this array section and use this pointer
as the highest element in partial struct data.

Reviewers: jdoerfert

Subscribers: yaxunl, guansong, sstefan1, cfe-commits, caomhin

Tags: #clang

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

4 years agoReplaced C++2a with C++20 in clang-tools-extra
Dmitri Gribenko [Wed, 3 Jun 2020 12:53:59 +0000 (14:53 +0200)]
Replaced C++2a with C++20 in clang-tools-extra

Reviewers: hlopko, aaron.ballman

Reviewed By: aaron.ballman

Subscribers: wuzish, aaron.ballman, nemanjai, kbarton, jkorous, arphaman, kadircet, usaxena95, cfe-commits

Tags: #clang

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

4 years ago[libcxx testing] Fix lingering bugs in notify_one.pass.cpp
David Zarzycki [Wed, 3 Jun 2020 12:44:45 +0000 (08:44 -0400)]
[libcxx testing] Fix lingering bugs in notify_one.pass.cpp

This test is arguably fatally flawed, at least as long as C++ condition
variables are just trivial wrappers around POSIX. I've added some notes
to the test for future authors to consider.

4 years ago[InstSimplify] add/move tests for or with not op (PR46083); NFC
Sanjay Patel [Wed, 3 Jun 2020 12:00:35 +0000 (08:00 -0400)]
[InstSimplify] add/move tests for or with not op (PR46083); NFC

4 years ago[VE] Support a basic disassembler for Aurora VE target
Kazushi (Jam) Marukawa [Wed, 3 Jun 2020 11:48:32 +0000 (13:48 +0200)]
[VE] Support a basic disassembler for Aurora VE target

Summary:
Add a basic disassember and regression tests of LEA/LD/ST
instructions.  This patch also removes DecoderMethod declarations for
branch and call since those are not implemented in this patch.  They
will be added again later.  This patch also corrects DecoderMethod for
LD/ST instructions for one byte or two.

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

4 years agoFix gcc "enumeral and non-enumeral type in conditional expression" warning. NFCI.
Simon Pilgrim [Wed, 3 Jun 2020 11:37:31 +0000 (12:37 +0100)]
Fix gcc "enumeral and non-enumeral type in conditional expression" warning. NFCI.

4 years ago[DAG] GetDemandedBits - don't bother asserting for a non-null cast<> result. NFC.
Simon Pilgrim [Wed, 3 Jun 2020 11:30:27 +0000 (12:30 +0100)]
[DAG] GetDemandedBits - don't bother asserting for a non-null cast<> result. NFC.

cast<> will assert on failure anyhow.

This lets us fold the cast<> with the getAPIntValue() that uses it.

4 years ago[clang][Sema] SequenceChecker: C++17 sequencing rule for call expressions.
Bruno Ricci [Wed, 3 Jun 2020 11:35:12 +0000 (12:35 +0100)]
[clang][Sema] SequenceChecker: C++17 sequencing rule for call expressions.

In C++17 the postfix-expression of a call expression is sequenced before
each expression in the expression-list and any default argument.

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

Reviewed By: rsmith

4 years agoRevert "[Dexter] Add DexLimitSteps command and ConditionalController"
Tom Weaver [Wed, 3 Jun 2020 11:28:26 +0000 (12:28 +0100)]
Revert "[Dexter] Add DexLimitSteps command and ConditionalController"

This reverts commit 81e836a5a675f6a3d9d35560fddbbb87fdf66201.

Accidentally committed a diff file.

4 years ago[lldb/cmake] Tweak descriptions of swig rules
Pavel Labath [Wed, 3 Jun 2020 11:10:00 +0000 (13:10 +0200)]
[lldb/cmake] Tweak descriptions of swig rules

This descriptions are printed while running the command, and so the
continuous tense is more appropriate and consistent.

4 years ago[Scalar] Fix assignment operator for long long.
Andy Yankovsky [Wed, 3 Jun 2020 11:08:00 +0000 (13:08 +0200)]
[Scalar] Fix assignment operator for long long.

Summary:
Assignment operator `operator=(long long)` currently allocates `sizeof(long)`.
On some platforms it works as they have `sizeof(long) == sizeof(long long)`,
but on others (e.g. Windows) it's not the case.

Reviewed By: labath

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

4 years ago[LLDB] skip TestCreateDuringInstructionStep on arm/linux
Muhammad Omair Javaid [Wed, 3 Jun 2020 09:46:20 +0000 (14:46 +0500)]
[LLDB] skip TestCreateDuringInstructionStep on arm/linux

There are sporadic failures in this test on arm. I am marking it
skipped as labath suggested flaky decorators no longer work.

4 years ago[VPlan] Support extracting lanes for defs managed in VPTransformState.
Florian Hahn [Wed, 3 Jun 2020 10:30:06 +0000 (11:30 +0100)]
[VPlan] Support extracting lanes for defs managed in VPTransformState.

Currently extracting a lane for a VPValue def is not supported, if it is
managed directly by VPTransformState (e.g. because it is created by a
VPInstruction or an external VPValue def).

For now, simply extract the requested lane. In the future, we should
also cache the extracted scalar values, similar to LV.

Reviewers: Ayal, rengolin, gilr, SjoerdMeijer

Reviewed By: SjoerdMeijer

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

4 years ago[gn build] Port add51e152aa
LLVM GN Syncbot [Wed, 3 Jun 2020 10:50:20 +0000 (10:50 +0000)]
[gn build] Port add51e152aa

4 years agoattempt to fix build after add51e152aa
Nico Weber [Wed, 3 Jun 2020 10:49:50 +0000 (06:49 -0400)]
attempt to fix build after add51e152aa

4 years ago[lldb] Pass fewer parameters by non-const reference to DWARFASTParserClang::ParseSing...
Raphael Isemann [Wed, 3 Jun 2020 08:34:11 +0000 (10:34 +0200)]
[lldb] Pass fewer parameters by non-const reference to DWARFASTParserClang::ParseSingleMember

These parameters are only passed on by value or const reference, so we should
do the same when calling this function.

4 years ago[AMDGPU] Fold llvm.amdgcn.cos and llvm.amdgcn.sin intrinsics (fix tests)
Jay Foad [Wed, 3 Jun 2020 10:36:09 +0000 (11:36 +0100)]
[AMDGPU] Fold llvm.amdgcn.cos and llvm.amdgcn.sin intrinsics (fix tests)

Try to fix Windows buildbots.

4 years ago[Clang][AArch64] Capturing proper pointer alignment for Neon vld1 intrinsicts
Lucas Prates [Tue, 5 May 2020 10:52:09 +0000 (11:52 +0100)]
[Clang][AArch64] Capturing proper pointer alignment for Neon vld1 intrinsicts

Summary:
During CodeGen for AArch64 Neon intrinsics, Clang was incorrectly
assuming all the pointers from which loads were being generated for vld1
intrinsics were aligned according to the intrinsics result type, causing
alignment faults on the code generated by the backend.

This patch updates vld1 intrinsics' CodeGen to properly capture the
correct load alignment based on the type of the pointer provided as
input for the intrinsic.

Reviewers: t.p.northover, ostannard, pcc, efriedma

Reviewed By: ostannard, efriedma

Subscribers: echristo, plotfi, nickdesaulniers, efriedma, kristof.beyls, danielkiss, cfe-commits

Tags: #clang

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

4 years ago[LangRef] Fix description of shape args for matrix.multiply.
Braedy Kuzma [Wed, 3 Jun 2020 10:23:16 +0000 (11:23 +0100)]
[LangRef] Fix description of shape args for matrix.multiply.

Currently all code instances within the matrix lowering pass consider
matrix A to be MxN and B to be NxK, producing C which is MxK. Anyone
interacting with this API after reading the docs but without reading the pass
would expect A: MxK, B: KxN, and C: MxN. These changes bring the documentation
in line with the implementation.

One point of concern with this, the original signature as described in the docs
may be better or at least more expected. The interface as it was written
reflected other common matrix multiplication interfaces such as BLAS'[1], where
the matrices are MxK, KxN, MxN respectively. Choosing to honor this requires
changing code and tests instead, but should be mostly just renaming of variables.

Patch by Braedy Kuzma <braedy@ualberta.ca>

[1] http://www.netlib.org/lapack/explore-html/db/dc9/group__single__blas__level3_gafe51bacb54592ff5de056acabd83c260.html#gafe51bacb54592ff5de056acabd83c260

Reviewers: anemet, LuoYuanke, nicolasvasilache, fhahn

Reviewed By: fhahn

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

4 years ago[clang-tidy] add new check readability-use-anyofallof
Matthias Gehre [Wed, 2 Oct 2019 22:39:46 +0000 (00:39 +0200)]
[clang-tidy] add new check readability-use-anyofallof

Summary:
Finds range-based for loops that can be replaced by a call to ``std::any_of`` or
``std::all_of``. In C++ 20 mode, suggests ``std::ranges::any_of`` or
``std::ranges::all_of``.
For now, no fixits are produced.

Reviewers: aaron.ballman, alexfh, hokein

Subscribers: mgorny, xazax.hun, cfe-commits

Tags: #clang

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