platform/upstream/llvm.git
4 years agoXFAIL NativePDB tests on arm-linux
Muhammad Omair Javaid [Sun, 10 May 2020 23:40:23 +0000 (04:40 +0500)]
XFAIL NativePDB tests on arm-linux

NativePDB tests fail on arm-linux buildbot. clang-cl driver crashes with
-m32 option. Bug files http://llvm.org/pr45867

4 years ago[X86] Fix combineVectorCompareAndMaskUnaryOp regression after 0e8e731449d8fbfa6ba4523...
Fangrui Song [Mon, 11 May 2020 01:21:18 +0000 (18:21 -0700)]
[X86] Fix combineVectorCompareAndMaskUnaryOp regression after 0e8e731449d8fbfa6ba4523de928b4812ef9f100

4 years ago[examples] Fix the SpeculativeJIT and ThinLtoJIT examples for 41379f1ec46.
Lang Hames [Mon, 11 May 2020 00:33:48 +0000 (17:33 -0700)]
[examples] Fix the SpeculativeJIT and ThinLtoJIT examples for 41379f1ec46.

4 years agoRemove a comment that is no longer true after d03838343f2.
Nico Weber [Mon, 11 May 2020 00:15:29 +0000 (20:15 -0400)]
Remove a comment that is no longer true after d03838343f2.

4 years agoRemove a variable write that is not needed after d03838343f2.
Nico Weber [Mon, 11 May 2020 00:13:05 +0000 (20:13 -0400)]
Remove  a variable write that is not needed after d03838343f2.

4 years ago[Attributor][FIX] Carefully handle/ignore/forget `argmemonly`
Johannes Doerfert [Sat, 9 May 2020 17:48:29 +0000 (12:48 -0500)]
[Attributor][FIX] Carefully handle/ignore/forget `argmemonly`

When we have an existing `argmemonly` or `inaccessiblememorargmemonly`
we used to "know" that information. However, interprocedural constant
propagation can invalidate these attributes. We now ignore and remove
these attributes for internal functions (which may be affected by IP
constant propagation), if we are deriving new attributes for the
function.

4 years ago[Attributor] Use "simplify to constant" in genericValueTraversal
Johannes Doerfert [Sun, 10 May 2020 04:29:43 +0000 (23:29 -0500)]
[Attributor] Use "simplify to constant" in genericValueTraversal

As we replace values with constants interprocedurally, we also need to
do this "look-through" step during the generic value traversal or we
would derive properties from replaced values. While this is often not
problematic, it is when we use the "kind" of a value for reasoning,
e.g., accesses to arguments allow `argmemonly`.

4 years ago[Attributor] Ignore illegal accesses to `null`
Johannes Doerfert [Sun, 10 May 2020 21:53:07 +0000 (16:53 -0500)]
[Attributor] Ignore illegal accesses to `null`

When we categorize a pointer value we bailed at `null` before. If we
know `null` is not a valid memory location we can ignore it as there
won't be an access at all.

4 years ago[Attributor] Use existing helpers to determine IR facts
Johannes Doerfert [Sun, 10 May 2020 18:16:49 +0000 (13:16 -0500)]
[Attributor] Use existing helpers to determine IR facts

We now use getPointerDereferenceableBytes to determine `nonnull` and
`dereferenceable` facts from the IR. We also use getPointerAlignment in
AAAlign for the same reason. The latter can interfere with callbacks so
we do restrict it to non-function-pointers for now.

4 years ago[Attributor][NFC] Clang format Attributor*.cpp
Johannes Doerfert [Sat, 9 May 2020 17:49:39 +0000 (12:49 -0500)]
[Attributor][NFC] Clang format Attributor*.cpp

4 years ago[ORC] Share ownership of JITDylibs between ExecutionSession and
Lang Hames [Sun, 10 May 2020 18:34:04 +0000 (11:34 -0700)]
[ORC] Share ownership of JITDylibs between ExecutionSession and
MaterializationResponsibility.

MaterializationResponsibility objects provide a connection between a
materialization process (compiler, jit linker, etc.) and the JIT state held in
the ExecutionSession and JITDylib objects. Switching to shared ownership
extends the lifetime of JITDylibs to ensure they remain accessible until all
materializers targeting them have completed. This will allow (in a follow-up
patch) JITDylibs to be removed from the ExecutionSession and placed in a
pending-destruction state while they are kept alive to communicate errors
to/from any still-runnning materialization processes. The intent is to enable
JITDylibs to be safely removed even if they have running compiles targeting
them.

4 years ago[gcov] Default coverage version to '407*' and delete CC1 option -coverage-cfg-checksum
Fangrui Song [Sun, 10 May 2020 19:47:45 +0000 (12:47 -0700)]
[gcov] Default coverage version to '407*' and delete CC1 option -coverage-cfg-checksum

Defaulting to -Xclang -coverage-version='407*' makes .gcno/.gcda
compatible with gcov [4.7,8)

In addition, delete clang::CodeGenOptionsBase::CoverageExtraChecksum and GCOVOptions::UseCfgChecksum.
We can infer the information from the version.

With this change, .gcda files produced by `clang --coverage a.o` linked executable can be read by gcov 4.7~7.
We don't need other -Xclang -coverage* options.
There may be a mismatching version warning, though.

(Note, GCC r173147 "split checksum into cfg checksum and line checksum"
 made gcov 4.7 incompatible with previous versions.)

4 years ago[examples] Fix llvm.memset prototype in BrainF example.
Ricky Zhou [Sun, 10 May 2020 20:51:01 +0000 (16:51 -0400)]
[examples] Fix llvm.memset prototype in BrainF example.

Commit 1e68724d24ba38de7c7cdb2e1939d78c8b37cc0d removed the alignment
argument from the memset intrinsic. Update the BrainF example to match.

Reviewed By: jyknight
Differential Revision: https://reviews.llvm.org/D79601

4 years agoAMDGPU/GlobalISel: Remove -global-isel-abort=0 from tests
Matt Arsenault [Sun, 10 May 2020 19:27:40 +0000 (15:27 -0400)]
AMDGPU/GlobalISel: Remove -global-isel-abort=0 from tests

4 years agoFix clangd test that depended on a diagnostic removed in Clang.
Richard Smith [Sun, 10 May 2020 21:13:25 +0000 (14:13 -0700)]
Fix clangd test that depended on a diagnostic removed in Clang.

4 years agoEnforce the C++11 anonymous enum bitfields check even for
Richard Smith [Sun, 10 May 2020 20:58:42 +0000 (13:58 -0700)]
Enforce the C++11 anonymous enum bitfields check even for
Objective-C++11 and under MS extensions.

This matches the MSVC behavior, and means that Objective-C behaves as a
set of extensions to the base language, rather than replacing the base
language rule with a different one.

4 years agoFix typo in enum-base disambiguation.
Richard Smith [Sun, 10 May 2020 20:39:23 +0000 (13:39 -0700)]
Fix typo in enum-base disambiguation.

4 years ago[LLD] [COFF] Fix def file exporting of symbols containing periods
Martin Storsjö [Fri, 8 May 2020 08:01:09 +0000 (11:01 +0300)]
[LLD] [COFF] Fix def file exporting of symbols containing periods

This fixes an accidental breakage of exporting symbols using def
files, when the symbol name contains a period, since commit
0ca06f7950e5, mixing up a symbol name containing a period with
the case of exporting a symbol as a forward to another dll.

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

4 years agoProperly implement 'enum class' parsing.
Richard Smith [Sun, 10 May 2020 20:14:51 +0000 (13:14 -0700)]
Properly implement 'enum class' parsing.

The 'class' or 'struct' keyword is only permitted as part of either an
enum definition or a standalone opaque-enum-declaration, not as part of
an elaborated type specifier. We previously failed to diagnose this, and
generally didn't properly implement the restrictions on elaborated type
specifiers for enumeration types.

In passing, also fixed incorrect parsing for enum-bases, which we
previously parsed as a type-name, but are actually a type-specifier-seq.
This matters for cases like 'enum E : int *p;', which is valid as a
Microsoft extension.

Plus some minor parse diagnostic improvements.

Bumped the recently-added ExtWarn for 'enum E : int x;' to be
DefaultError; this is not an intentional extension, so producing an
error by default seems appropriate, but the warning flag to disable it
may still be useful for code written against old Clang. The same
treatment is given here to the diagnostic for 'enum class E x;', which
we similarly have incorrectly accepted for many years. These diagnostics
continue to be suppressed under -fms-extensions and when compiling
Objective-C code. We will need to decide separately whether Objective-C
should follow the C++ rules or the (older) MSVC rules.

4 years ago[gcov] Delete CC1 option -coverage-no-function-names-in-data
Fangrui Song [Sun, 10 May 2020 17:50:20 +0000 (10:50 -0700)]
[gcov] Delete CC1 option -coverage-no-function-names-in-data

rL144865 incorrectly wrote function names for GCOV_TAG_FUNCTION
(this might be part of the reasons the header says
"We emit files in a corrupt version of GCOV's "gcda" file format").

rL176173 and rL177475 realized the problem and introduced -coverage-no-function-names-in-data
to work around the issue. (However, the description is wrong.
libgcov never writes function names, even before GCC 4.2).

In reality, the linker command line has to look like:

clang --coverage -Xclang -coverage-version='407*' -Xclang -coverage-cfg-checksum -Xclang -coverage-no-function-names-in-data

Failing to pass -coverage-no-function-names-in-data can make gcov 4.7~7
either produce wrong results (for one gcov-4.9 program, I see "No executable lines")
or segfault (gcov-7).
(gcov-8 uses an incompatible format.)

This patch deletes -coverage-no-function-names-in-data and the related
function names support from libclang_rt.profile

4 years ago[X86] Add a few more shuffles to hasUndefRegUpdate.
Craig Topper [Sun, 10 May 2020 08:32:56 +0000 (01:32 -0700)]
[X86] Add a few more shuffles to hasUndefRegUpdate.

Mostly found by asserting on tests that have undef operands. I'm
sure this isn't an exhaustive list.

4 years ago[AssumeBundles] Remove non-determinisme from assume builder
Tyker [Sun, 10 May 2020 17:26:41 +0000 (19:26 +0200)]
[AssumeBundles] Remove non-determinisme from assume builder

Summary:
The assume builder was non-deterministic when working on unamed values.
this patch fixes this.

Reviewers: jdoerfert

Reviewed By: jdoerfert

Subscribers: hiraditya, mgrang, llvm-commits

Tags: #llvm

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

4 years ago[MCA][InstrBuilder] Correctly mark reserved resources in initializeUsedResources.
Andrea Di Biagio [Sun, 10 May 2020 17:55:58 +0000 (18:55 +0100)]
[MCA][InstrBuilder] Correctly mark reserved resources in initializeUsedResources.

This fixes a bug reported by Alex Renda on LLVMDev where mca did not correctly
mark a resource group as "reserved".
(See http://lists.llvm.org/pipermail/llvm-dev/2020-May/141485.html).

The issue was caused by a wrong check in function `initializeUsedResources`.
As a consequence of this, a resource group was left unreserved, and its field
`NumUnits` incorrectly reported an unrealistic number of consumed resource
units.

This patch fixes the issue with the handling of reserved resources in the
InstrBuilder class, and adds a simple test for it.  Ideally, as suggested by
Andy Trick, most of these problems will disappear if in the future we will
introduce a (optional) DelayCycles vector for SchedWriteRes.

4 years ago[gcov] Temporarily unsupport host-byteorder-big-endian
Fangrui Song [Sun, 10 May 2020 18:17:17 +0000 (11:17 -0700)]
[gcov] Temporarily unsupport host-byteorder-big-endian

4 years ago[compiler-rt][test] Add feature host-byteorder-big-endian
Fangrui Song [Sun, 10 May 2020 18:01:06 +0000 (11:01 -0700)]
[compiler-rt][test] Add feature host-byteorder-big-endian

This is needed to make 5a9b792d7251e19f69f96c9619cde49497c79a07 "[gcov] Temporarily unsupport host-byteorder-big-endian"
work.

4 years ago[gcov] Temporarily unsupport host-byteorder-big-endian
Fangrui Song [Sun, 10 May 2020 17:26:10 +0000 (10:26 -0700)]
[gcov] Temporarily unsupport host-byteorder-big-endian

llvm-cov gcov does not support host-byteorder-big-endian yet.

4 years ago[AssumeBundles] Prevent generation of some redundant assumes
Tyker [Sun, 10 May 2020 16:20:34 +0000 (18:20 +0200)]
[AssumeBundles] Prevent generation of some redundant assumes

Summary: with this patch the assume salvageKnowledge will not generate assume if all knowledge is already available in an assume with valid context. assume bulider can also in some cases update an existing assume with better information.

Reviewers: jdoerfert

Reviewed By: jdoerfert

Subscribers: hiraditya, llvm-commits

Tags: #llvm

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

4 years ago[gcov] Don't skip leading zeros when reading a string
Fangrui Song [Sun, 10 May 2020 17:12:26 +0000 (10:12 -0700)]
[gcov] Don't skip leading zeros when reading a string

Even a 2003 version of gcov_read_string does not have the behavior
described by rL204881. The wrong impression might come from
libclang_rt.profile (GCDAProfiling.c)'s corrupted output (since the
initial import rL144865). Note, the corrupted output crashes gcov.

4 years ago[gcov] Fix .gcda decoding and support GCC 8, 9 and 10
Fangrui Song [Sat, 9 May 2020 17:36:34 +0000 (10:36 -0700)]
[gcov] Fix .gcda decoding and support GCC 8, 9 and 10

GCDAProfiling.c unnecessarily writes function names to .gcda files.
GCC 4.2 gcc/libgcov.c (now renamed to libgcc/libgcov*) did not write function
names. gcov-7 (compatible) crashes on .gcda produced by libclang_rt.profile
rL176173 realized the problem and introduced a mode to remove function
names.

llvm-cov code apparently takes GCDAProfiling.c output format as truth
and tries to decode function names.  Additionally, llvm-cov tries to
decode tags in certain order which does not match libgcov emitted .gcda
files.

This patch fixes the .gcda decoder and makes it work with GCC 8 and 9
(10 is compatible with 9). Note, line statistics are broken and not
fixed by this patch.

Add test/tools/llvm-cov/gcov-{4.7,8,9}.c to test compatibility.

4 years ago[LAA] Move runtime-check generation to Transforms/Utils/loopUtils (NFC)
Florian Hahn [Sun, 10 May 2020 15:48:06 +0000 (16:48 +0100)]
[LAA] Move runtime-check generation to Transforms/Utils/loopUtils (NFC)

Currently LAA's uses of ScalarEvolutionExpander blocks moving the
expander from Analysis to Transforms. Conceptually the expander does not
fit into Analysis (it is only used for code generation) and
runtime-check generation also seems to be better suited as a
transformation utility.

Reviewers: Ayal, anemet

Reviewed By: Ayal

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

4 years agoCodeMetrics.cpp - remove unused includes. NFC.
Simon Pilgrim [Sun, 10 May 2020 15:59:39 +0000 (16:59 +0100)]
CodeMetrics.cpp - remove unused includes. NFC.

4 years agoLoopUtils.h - remove unused forward declarations. NFC.
Simon Pilgrim [Sun, 10 May 2020 15:58:34 +0000 (16:58 +0100)]
LoopUtils.h - remove unused forward declarations. NFC.

4 years agoLocal.h - remove unused forward declaration. NFC.
Simon Pilgrim [Sun, 10 May 2020 15:57:46 +0000 (16:57 +0100)]
Local.h - remove unused forward declaration. NFC.

4 years ago[InstCombine] canonicalize bitcast after insertelement into undef
Sanjay Patel [Sun, 10 May 2020 15:37:47 +0000 (11:37 -0400)]
[InstCombine] canonicalize bitcast after insertelement into undef

We have a transform in the opposite direction only for the x86 MMX type,
Other types are not handled either way before this patch.

The motivating case from PR45748:
https://bugs.llvm.org/show_bug.cgi?id=45748
...is the last test diff. In that example, we are triggering an existing
bitcast transform, so we reduce the number of casts, and that should give
us the ideal x86 codegen.

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

4 years ago[CodeGen] fix test to be (mostly) independent of LLVM optimizer; NFC
Sanjay Patel [Sun, 10 May 2020 15:25:37 +0000 (11:25 -0400)]
[CodeGen] fix test to be (mostly) independent of LLVM optimizer; NFC

This test would break with the proposed change to IR canonicalization
in D79171.

The test tried to do the right thing by only using -mem2reg with opt,
but it was using -O3 before that step, so the opt part was meaningless.

4 years ago[CodeGen] fix test to be (mostly) independent of LLVM optimizer; NFC
Sanjay Patel [Sun, 10 May 2020 15:19:43 +0000 (11:19 -0400)]
[CodeGen] fix test to be (mostly) independent of LLVM optimizer; NFC

This test would break with the proposed change to IR canonicalization
in D79171. The raw unoptimized IR from clang is massive, so I've
replaced -instcombine with -mem2reg to make it more manageable,
but still be unlikely to break with unrelated changed to optimization.

4 years ago[InstCombine] matchOrConcat - match BITREVERSE
Simon Pilgrim [Sun, 10 May 2020 15:00:13 +0000 (16:00 +0100)]
[InstCombine] matchOrConcat - match BITREVERSE

Fold or(zext(bitreverse(x)),shl(zext(bitreverse(y)),bw/2) -> bitreverse(or(zext(x),shl(zext(y),bw/2))

Practically this is the same as the BSWAP pattern so we might as well handle it.

4 years agoRecommit "[LAA] Remove one addRuntimeChecks function (NFC)."
Florian Hahn [Sun, 10 May 2020 14:04:49 +0000 (15:04 +0100)]
Recommit "[LAA] Remove one addRuntimeChecks function (NFC)."

The failing assertion has been fixed and the problematic test case has
been added.

This reverts the revert commit fc44617f28847417e55836193bbe8e9c3f09eca9.

4 years agoPassInstrumentation.h - reduce TypeName.h include to StringRef forward declaration...
Simon Pilgrim [Sun, 10 May 2020 13:22:02 +0000 (14:22 +0100)]
PassInstrumentation.h - reduce TypeName.h include to StringRef forward declaration. NFC.

4 years agoCoverageMapping.h - remove unused StringSet.h include. NFC.
Simon Pilgrim [Sun, 10 May 2020 13:19:54 +0000 (14:19 +0100)]
CoverageMapping.h - remove unused StringSet.h include. NFC.

4 years agoPassManager.h - remove unused raw_ostream.h include. NFC.
Simon Pilgrim [Sun, 10 May 2020 13:17:52 +0000 (14:17 +0100)]
PassManager.h - remove unused raw_ostream.h include. NFC.

4 years agoMangler.h - reduce GlobalValue.h include to forward declaration. NFC.
Simon Pilgrim [Sun, 10 May 2020 13:03:13 +0000 (14:03 +0100)]
Mangler.h - reduce GlobalValue.h include to forward declaration. NFC.

Exposes implicit dependency in ModuleSymbolTable.h - added missing Module forward declaration.

4 years agoLoopPass.h - remove unnecessary PMStack forward declaration. NFC.
Simon Pilgrim [Sun, 10 May 2020 13:01:26 +0000 (14:01 +0100)]
LoopPass.h - remove unnecessary PMStack forward declaration. NFC.

We have to include LegacyPassManagers.h where its defined.

4 years agoRevert "[LAA] Remove one addRuntimeChecks function (NFC)."
Florian Hahn [Sun, 10 May 2020 12:27:10 +0000 (13:27 +0100)]
Revert "[LAA] Remove one addRuntimeChecks function (NFC)."

This reverts commit c28114c8ffde705d7e16cd4c065fd23269661c81.

This causes some bots to fail:

http://lab.llvm.org:8011/builders/sanitizer-x86_64-linux-android/builds/30596/steps/build%20android%2Faarch64/logs/stdio

4 years ago[mlir] Affine dim and symbol checkers: support detached regions
Alex Zinenko [Sun, 10 May 2020 12:14:10 +0000 (14:14 +0200)]
[mlir] Affine dim and symbol checkers: support detached regions

Functions checking whether an SSA value is a valid dimension or symbol for
affine operations can be called on values defined in a detached region (a
region that is not yet attached to an operation), for example, during parsing
or operation construction. These functions will attempt to uncondtionally
dereference a pointer to the parent operation of a region, which may be null
(as fixed by the previous commit, uninitialized before that). Since one cannot
know to which operation a region will be attached, conservatively this
operation would not be a valid affine scope and act accordingly, instead of
crashing.

4 years ago[mlir] Initialize the Region::container field to nullptr by default
Alex Zinenko [Sun, 10 May 2020 12:14:04 +0000 (14:14 +0200)]
[mlir] Initialize the Region::container field to nullptr by default

Region has a default constructor that is called when a region is constructed
while an operation is being created, and therefore before the region can be
attached to this operation. The `container` field is uninitialized, which makes
it impossible to check programmatically if a Region is attached to an operation
or not, leading to sly memory errors when this field is read. Initialize it to
nullptr by default and thus make sure one can check if a region is attached to
an operation or not.

4 years ago[LAA] Remove one addRuntimeChecks function (NFC).
Florian Hahn [Sun, 10 May 2020 11:26:33 +0000 (12:26 +0100)]
[LAA] Remove one addRuntimeChecks function (NFC).

In order to reduce the API surface area (preparation for D78460), remove
a addRuntimeChecks() function and do the additional check in the single
caller.

Reviewers: Ayal, anemet

Reviewed By: Ayal

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

4 years ago[InstCombine] fold fpext into exact integer-to-FP cast
Sanjay Patel [Sun, 10 May 2020 10:59:30 +0000 (06:59 -0400)]
[InstCombine] fold fpext into exact integer-to-FP cast

We can combine a floating-point extension cast with a conversion
from integer if we know the earlier cast is exact.

This is an optimization suggested in PR36617:
https://bugs.llvm.org/show_bug.cgi?id=36617#c19

However, this patch does not change the example suggested there.
This patch only uses the existing analysis to handle cases where
the integer source value magnitude is narrower than the
intermediate FP mantissa (guarantees that the conversion to FP is
exact). Follow-up patches to the analysis function can enable
more cases.

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

4 years ago[gn build] Port 35d867a790c
LLVM GN Syncbot [Sun, 10 May 2020 11:04:15 +0000 (11:04 +0000)]
[gn build] Port 35d867a790c

4 years ago[clangd] Filter pch related flags coming from the user
Kadir Cetinkaya [Sat, 9 May 2020 10:34:06 +0000 (12:34 +0200)]
[clangd] Filter pch related flags coming from the user

Summary:
PCH format is unstable, hence using a preamble built with a different
version of clang (or even worse, a different compiler) might result in
unexpected behaviour.

PCH creation on the other hand is something clangd wouldn't want to perform, as
it doesn't generate any output files.

This patch makes sure clangd drops any PCH related compile commands after
parsing the command line args.

Fixes https://github.com/clangd/clangd/issues/248

Reviewers: sammccall

Subscribers: mgorny, ilya-biryukov, MaskRay, jkorous, arphaman, usaxena95, cfe-commits

Tags: #clang

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

4 years ago[libcxx testing] Remove ALLOW_RETRIES from sleep_until.pass.cpp
David Zarzycki [Sun, 10 May 2020 09:51:14 +0000 (05:51 -0400)]
[libcxx testing] Remove ALLOW_RETRIES from sleep_until.pass.cpp

Operating systems are best effort by default, so we cannot assume that
sleep-like APIs return as soon as we'd like.

Even if a sleep-like API returns when we want it to, the potential for
preemption means that attempts to measure time are subject to delays.

4 years agoRevert two patches, not ready to be shared
Sylvestre Ledru [Sun, 10 May 2020 09:26:53 +0000 (11:26 +0200)]
Revert two patches, not ready to be shared

Revert "clang-tidy doc: add a note for checkers with an autofix"

This reverts commit dc0f79ea5b99b9609a21c29089c294ab82d88094.

Revert "add_new_check.py: Update of the template to add an autofix section"

This reverts commit f97f92e5b0fd14240c2ec27c44e1b3cfddfdf668.

4 years agoclang-tidy doc: Fix the syntax to use rst list type
Sylvestre Ledru [Sun, 10 May 2020 09:22:53 +0000 (11:22 +0200)]
clang-tidy doc: Fix the syntax to use rst list type

4 years agoclang-tidy doc: add a note for checkers with an autofix
Sylvestre Ledru [Mon, 13 Apr 2020 20:33:11 +0000 (22:33 +0200)]
clang-tidy doc: add a note for checkers with an autofix

Summary:
Currently, when looking at a checker documentation, we have to go back
to the whole list or look at the sources to figure out if an autofix
is available or not.

Reviewers: alexfh, aaron.ballman

Subscribers: wuzish, Eugene.Zelenko, nemanjai, kbarton, arphaman, Charusso, cfe-commits

Tags: #clang

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

4 years agoadd_new_check.py: Update of the template to add an autofix section
Sylvestre Ledru [Mon, 13 Apr 2020 20:22:19 +0000 (22:22 +0200)]
add_new_check.py: Update of the template to add an autofix section

Summary: As discussed here: https://reviews.llvm.org/D77983

Reviewers: alexfh

Subscribers: cfe-commits

Tags: #clang

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

4 years ago[lld-macho] Delete dylink-lazy test for now
Jez Ng [Sun, 10 May 2020 09:22:33 +0000 (02:22 -0700)]
[lld-macho] Delete dylink-lazy test for now

Summary: It's breaking Windows builds

4 years ago[lld-macho] Try to unbreak dylink-lazy test on Windows
Jez Ng [Sun, 10 May 2020 07:22:36 +0000 (00:22 -0700)]
[lld-macho] Try to unbreak dylink-lazy test on Windows

4 years agoAdd missing pass initialization
Arthur Eubanks [Sat, 9 May 2020 03:19:05 +0000 (20:19 -0700)]
Add missing pass initialization

Summary: This was preventing MemorySanitizerLegacyPass from appearing in --print-after-all.

Reviewers: vitalybuka

Subscribers: hiraditya, llvm-commits

Tags: #llvm

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

4 years ago[lld-macho] Support pc-relative section relocations
Jez Ng [Mon, 27 Apr 2020 19:59:20 +0000 (12:59 -0700)]
[lld-macho] Support pc-relative section relocations

Summary: So far we've only supported symbol relocations.

Reviewers: ruiu, pcc, MaskRay, smeenai, alexshap, gkm, Ktwu, christylee

Subscribers: llvm-commits

Tags: #llvm

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

4 years ago[lld-macho] Use export trie instead of symtab when linking against dylibs
Jez Ng [Thu, 23 Apr 2020 03:00:57 +0000 (20:00 -0700)]
[lld-macho] Use export trie instead of symtab when linking against dylibs

Summary:
This allows us to link against stripped dylibs. Moreover, it's simply
more correct: The symbol table includes symbols that the dylib uses but
doesn't export.

This temporarily regresses our ability to do lazy symbol binding because
dyld_stub_binder isn't in libSystem's export trie. Rather, it is in one
of the sub-libraries libSystem re-exports. (This doesn't affect our
tests since we are mocking out dyld_stub_binder there.) A follow-up diff
will address this by adding support for sub-libraries.

Depends on D79114.

Reviewers: ruiu, pcc, MaskRay, smeenai, alexshap, gkm, Ktwu, christylee

Subscribers: mgorny, llvm-commits

Tags: #llvm

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

4 years ago[lld-macho] Dylib symbols should always replace undefined symbols
Jez Ng [Wed, 29 Apr 2020 12:30:47 +0000 (05:30 -0700)]
[lld-macho] Dylib symbols should always replace undefined symbols

Summary:
Otherwise we get undefined symbol errors depending on the order of
arguments on the command line.

Depends on D78270.

Reviewers: ruiu, pcc, MaskRay, smeenai, alexshap, gkm, Ktwu, christylee

Subscribers: llvm-commits

Tags: #llvm

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

4 years ago[lld-macho] Support calls to functions in dylibs
Jez Ng [Wed, 6 May 2020 00:38:10 +0000 (17:38 -0700)]
[lld-macho] Support calls to functions in dylibs

Summary:
This diff implements lazy symbol binding -- very similar to the PLT
mechanism in ELF.

ELF's .plt section is broken up into two sections in Mach-O:
StubsSection and StubHelperSection. Calls to functions in dylibs will
end up calling into StubsSection, which contains indirect jumps to
addresses stored in the LazyPointerSection (the counterpart to ELF's
.plt.got).

Initially, the LazyPointerSection contains addresses that point into one
of the entry points in the middle of the StubHelperSection. The code in
StubHelperSection will push on the stack an offset into the
LazyBindingSection. The push is followed by a jump to the beginning of
the StubHelperSection (similar to PLT0), which then calls into
dyld_stub_binder. dyld_stub_binder is a non-lazily bound symbol, so this
call looks it up in the GOT.

The stub binder will look up the bind opcodes in the LazyBindingSection
at the given offset. The bind opcodes will tell the binder to update the
address in the LazyPointerSection to point to the symbol, so that
subsequent calls don't have to redo the symbol resolution. The binder
will then jump to the resolved symbol.

Depends on D78269.

Reviewers: ruiu, pcc, MaskRay, smeenai, alexshap, gkm, Ktwu, christylee

Subscribers: llvm-commits

Tags: #llvm

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

4 years ago[lld-macho] Follow-up to D77893
Jez Ng [Wed, 6 May 2020 00:25:58 +0000 (17:25 -0700)]
[lld-macho] Follow-up to D77893

Summary:
1. Don't have isHidden() depend on isNeeded(). Whether a section is
  hidden is orthogonal from whether it is needed: hidden sections will
  never have a header regardless of whether they have a body. (I know we
  override this method with return false for synthetic sections, but
  regardless I think it's confusing to write it this way for non-synthetic
  sections.)

2. Don't call writeTo() on unneeded sections. D78270 assumes that this
  is true when implementing the stub helper section.

3. Filter out the unneeded sections early on to avoid having to deal
   with them in multiple places.

4. Remove assumption in test that the referenced file has no other symbols.
  (We should create separate input files for future tests to avoid such
  issues.)

Reviewers: ruiu, pcc, MaskRay, smeenai, alexshap, gkm, Ktwu, christylee

Subscribers: llvm-commits

Tags: #llvm

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

4 years ago[sanitizer] Enable whitelist/blacklist in new PM
Jinsong Ji [Sun, 10 May 2020 02:33:57 +0000 (02:33 +0000)]
[sanitizer] Enable whitelist/blacklist in new PM

https://reviews.llvm.org/D63616 added `-fsanitize-coverage-whitelist`
and `-fsanitize-coverage-blacklist` for clang.

However, it was done only for legacy pass manager.
This patch enable it for new pass manager as well.

Reviewed By: vitalybuka

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

4 years ago[X86] Add test cases for vXi16 PMULH opportunities that don't end in truncate.
Craig Topper [Sun, 10 May 2020 00:04:34 +0000 (17:04 -0700)]
[X86] Add test cases for vXi16 PMULH opportunities that don't end in truncate.

We already have matching for extend+mul+shift+trunc. But we could
also match up to the shift without the truncate and just extend the
result. That would still be a savings.

4 years agoGlobalISel: Handle more cases in lowerUnmergeValues
Matt Arsenault [Sun, 29 Mar 2020 22:04:53 +0000 (18:04 -0400)]
GlobalISel: Handle more cases in lowerUnmergeValues

Handle scalar sources, as well as vectors.

4 years ago[BreakFalseDeps] Harden pickBestRegisterForUndef against changing tied operands or...
Craig Topper [Sat, 9 May 2020 22:33:08 +0000 (15:33 -0700)]
[BreakFalseDeps] Harden pickBestRegisterForUndef against changing tied operands or physical registers that aren't renamable.

I don't have any test cases since X86 doesn't return any tied
operands from getUndefRegClearance today. But conceivably we could
want BreakFalseDeps to insert a dependency breaking XOR for
a tied operand in the future.

4 years ago[LAA] Remove unneeded PtrRtChecking argument (NFC).
Florian Hahn [Sat, 9 May 2020 21:07:51 +0000 (22:07 +0100)]
[LAA] Remove unneeded PtrRtChecking argument (NFC).

The argument is not required and simplifies D78460 a bit.

4 years ago[X86] isVectorShiftByScalarCheap - don't limit fast XOP vector shifts to 128-bit...
Simon Pilgrim [Sat, 9 May 2020 21:09:01 +0000 (22:09 +0100)]
[X86] isVectorShiftByScalarCheap - don't limit fast XOP vector shifts to 128-bit vectors

XOP targets have fast per-element vector shifts and we're better off splitting to 128-bit shifts where necessary (which is what we already do in LowerShift).

4 years ago[Clang] Pass -z max-page-size to linker for Fuchsia
Petr Hosek [Sat, 9 May 2020 20:44:20 +0000 (13:44 -0700)]
[Clang] Pass -z max-page-size to linker for Fuchsia

Currently all Fuchsia ABIs use a 4k page size, departing from
the recommended page sizes in the respective psABI documents.

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

4 years ago[Clang] Pass --pack-dyn-relocs=relr to lld for Fuchsia
Petr Hosek [Sat, 9 May 2020 20:42:19 +0000 (13:42 -0700)]
[Clang] Pass --pack-dyn-relocs=relr to lld for Fuchsia

The compact format is fully supported on Fuchsia and is the
preferred default.

Patch By: mcgrathr

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

4 years agoGlobalISel: Move code into lowering for G_MERGE_VALUES
Matt Arsenault [Sun, 29 Mar 2020 19:51:54 +0000 (15:51 -0400)]
GlobalISel: Move code into lowering for G_MERGE_VALUES

Currently this code exists in widenScalar for G_MERGE_VALUE
sources. I'm not sure if the existing expansion in widenScalar should
be removed or not. The widenScalar variant tries to extend to the
requested size, but this just uses the original bitwidth.

4 years agoGlobalISel: Combine G_UNMERGE_VALUES with G_TRUNC
Matt Arsenault [Sat, 4 Apr 2020 19:07:28 +0000 (15:07 -0400)]
GlobalISel: Combine G_UNMERGE_VALUES with G_TRUNC

G_BITCAST can be lowered with a pair of G_UNMERGE_VALUES and
G_MERGE_VALUES with different types, but G_UNMERGE_VALUES of a vector
can also be implemented with a bitcast to a scalar, which introduces
the possibility for infinite loops. Try to eliminate an illegal source
register type in the artifact combiner to avoid this from happening.

Avoids infinite looping in the legalizer in a future patch which
allows lowering G_UNMERGE_VALUES of a vector source with a G_BITCAST.

4 years agoInstCombine: Broaden copy-constant-to-alloca optimization
Matt Arsenault [Fri, 8 May 2020 19:35:41 +0000 (15:35 -0400)]
InstCombine: Broaden copy-constant-to-alloca optimization

Consider any constant memory type, not just global constants. AMDGPU
kernel parameters are effectively global constants, but appear as
either reads from an intrinsic derived pointer or function argument.

4 years agoFix typo
Matt Arsenault [Wed, 6 May 2020 00:25:03 +0000 (20:25 -0400)]
Fix typo

4 years agoAMDGPU: Skip GetUnderlyingObject check in pointsToConstantMemory
Matt Arsenault [Fri, 8 May 2020 19:53:41 +0000 (15:53 -0400)]
AMDGPU: Skip GetUnderlyingObject check in pointsToConstantMemory

Check the address space first before searching for the object
definition to save compile time. As an added bonus, this will now
treat casts to constant addrspace as constant.

We also seemed to be missing targeted tests for this, so add a few
missing other cases too.

4 years ago[CodeGenPrepare][X86] Add x16i16, v32i8 and XOP vector shift by scalar amount tests
Simon Pilgrim [Sat, 9 May 2020 14:54:53 +0000 (15:54 +0100)]
[CodeGenPrepare][X86] Add x16i16, v32i8 and XOP vector shift by scalar amount tests

Helps improve test coverage of the XOP modes in X86TargetLowering::isVectorShiftByScalarCheap (and where we always return false for vXi8 vector shifts).

4 years ago[X86] Add XOP vector shift by scalar amount tests
Simon Pilgrim [Sat, 9 May 2020 14:53:06 +0000 (15:53 +0100)]
[X86] Add XOP vector shift by scalar amount tests

Helps improve test coverage of the XOP modes in X86TargetLowering::isVectorShiftByScalarCheap

4 years ago[X86] Teach getUndefRegClearance that we use undef for inputs to PUNPCK in some cases.
Craig Topper [Sat, 9 May 2020 18:25:36 +0000 (11:25 -0700)]
[X86] Teach getUndefRegClearance that we use undef for inputs to PUNPCK in some cases.

This enables the register to be changed from XMM/YMM/ZMM0 to
instead match the other source. This prevents a false
dependency.

I added all the integer unpck instructions, but the tests
only show changes for BW and WD.

Unfortunately, we can have undef on operand 1 or 2 of the AVX
instructions. This breaks the interface with hasUndefRegUpdate
which used to tell which operand to check.

Now we scan the input operands looking for an undef register and
then ask hasUndefRegUpdate if its an instruction we care about
and which operands of that instruction we care about.

I also had to make some changes to the load folding code to
always pass operand 1 to hasUndefRegUpdate. I've updated
hasUndefRegUpdate to return false when ForLoadFold is set for
instructions that are not explicitly blocked for load folding in
isel patterns.

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

4 years ago[X86] Add an assert that v32i16/v64i8 splitting in LowerVSETCC should only occur...
Craig Topper [Sat, 9 May 2020 18:23:27 +0000 (11:23 -0700)]
[X86] Add an assert that v32i16/v64i8 splitting in LowerVSETCC should only occur when AVX512BW is disabled. NFC

With BWI we should only get a v32i1/v64i1 result type.

4 years ago[ARM] Convert VDUPLANE to VDUP under MVE
David Green [Sat, 9 May 2020 14:17:50 +0000 (15:17 +0100)]
[ARM] Convert VDUPLANE to VDUP under MVE

Unlike Neon, MVE does not have a way of duplicating from a vector lane,
so a VDUPLANE currently selects to a VDUP(move_from_lane(..)). This
forces that to be done earlier as a dag combine to allow other folds to
happen.

It converts to a VDUP(EXTRACT). On FP16 this is then folded to a
VGETLANEu to prevent it from creating a vmovx;vmovhr pair, using a
single move_from_reg instead.

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

4 years ago[NFC] Small rework to RenamerClangTidyCheck addUsage
Nathan James [Sat, 9 May 2020 17:57:05 +0000 (18:57 +0100)]
[NFC] Small rework to RenamerClangTidyCheck addUsage

4 years ago[lldb/debugserver] Include TargetConditionals.h where needed
Fred Riss [Sat, 9 May 2020 17:11:28 +0000 (10:11 -0700)]
[lldb/debugserver] Include TargetConditionals.h where needed

MachProcess.mm uses a TARGET_OS_ macro without directly including
TargetConditionals.h. This currently works as we get the header
as an indirect dependency, but might not in the future.

I just spent some time investigating an internal regression
caused by a similar issue, so I audited the codebase for such
cases.

4 years ago[clangd] Fix data race in BackgroundIndex test
Kadir Cetinkaya [Sat, 9 May 2020 16:14:48 +0000 (18:14 +0200)]
[clangd] Fix data race in BackgroundIndex test

MockFSProvider is not thread-safe. Make sure we don't modify it while
background index is working.

4 years ago[flang] Make implicit conversion explicit in assignment
Tim Keith [Sat, 9 May 2020 16:10:08 +0000 (09:10 -0700)]
[flang] Make implicit conversion explicit in assignment

When intrinsic types are assigned there are some implicit conversions
that take place. This change make them explicit in the types
representation of assignments.

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

4 years ago[clang-tidy] RenamerClangTidy now renames dependent member expr when the member can...
Nathan James [Fri, 8 May 2020 18:30:18 +0000 (19:30 +0100)]
[clang-tidy] RenamerClangTidy now renames dependent member expr when the member can be resolved

Summary:
Sometimes in templated code Member references are reported as `DependentScopeMemberExpr` because that's what the standard dictates, however in many trivial cases it is easy to resolve the reference to its actual Member.
Take this code:
```
template<typename T>
class A{
  int value;
  A& operator=(const A& Other){
    value = Other.value;
    this->value = Other.value;
    return *this;
  }
};
```
When ran with `clang-tidy file.cpp -checks=readability-identifier-naming --config="{CheckOptions: [{key: readability-identifier-naming.MemberPrefix, value: m_}]}" -fix`
Current behaviour:
```
template<typename T>
class A{
  int m_value;
  A& operator=(const A& Other){
    m_value = Other.value;
    this->value = Other.value;
    return *this;
  }
};
```
As `this->value` and `Other.value` are Dependent they are ignored when creating the fix-its, however this can easily be resolved.
Proposed behaviour:
```
template<typename T>
class A{
  int m_value;
  A& operator=(const A& Other){
    m_value = Other.m_value;
    this->m_value = Other.m_value;
    return *this;
  }
};
```

Reviewers: aaron.ballman, JonasToth, alexfh, hokein, gribozavr2

Reviewed By: aaron.ballman

Subscribers: merge_guards_bot, xazax.hun, cfe-commits

Tags: #clang, #clang-tools-extra

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

4 years ago[libcxx testing] Make three locking tests more reliable
David Zarzycki [Sat, 9 May 2020 15:10:41 +0000 (11:10 -0400)]
[libcxx testing] Make three locking tests more reliable

The challenge with measuring time in tests is that slow and/or busy
machines can cause tests to fail in unexpected ways. After this change,
three tests should be much more robust. The only remaining and tiny race
that I can think of is preemption after `--countDown`. That being said,
the race isn't fixable because the standard library doesn't provide a
way to count threads that are waiting to acquire a lock.

Reviewers: ldionne, EricWF, howard.hinnant, mclow.lists, #libc

Reviewed By: ldionne, #libc

Subscribers: dexonsmith, jfb, broadwaylamb, libcxx-commits

Tags: #libc

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

4 years agoLTO.h - reduce includes to forward declarations. NFC.
Simon Pilgrim [Sat, 9 May 2020 14:10:51 +0000 (15:10 +0100)]
LTO.h - reduce includes to forward declarations. NFC.

Add missing ToolOutputFile.h dependency to BackendUtil.cpp

4 years agoLLParser.h - remove unused ValueHandle.h include. NFC.
Simon Pilgrim [Sat, 9 May 2020 14:08:48 +0000 (15:08 +0100)]
LLParser.h - remove unused ValueHandle.h include. NFC.

4 years ago[X86] Remove mul(abs(x),abs(x)) -> mul(x,x) tests
Simon Pilgrim [Sat, 9 May 2020 14:07:15 +0000 (15:07 +0100)]
[X86] Remove mul(abs(x),abs(x)) -> mul(x,x) tests

This is handled in InstCombine (D79319) and its unlikely that these can occur in DAG (see D79304).

4 years ago[X86] Allow combineVectorCompareAndMaskUnaryOp to handle 'all-bits' general case
Simon Pilgrim [Sat, 9 May 2020 13:53:07 +0000 (14:53 +0100)]
[X86] Allow combineVectorCompareAndMaskUnaryOp to handle 'all-bits' general case

For the sint_to_fp(and(X,C)) -> and(X,sint_to_fp(C)) fold, allow combineVectorCompareAndMaskUnaryOp to match any X that ComputeNumSignBits says is all-bits, not just SETCC.

Noticed while investigating mask promotion issues in PR45808

4 years ago[X86] Add test cases for 'abs from mul patterns' (PR45691)
Simon Pilgrim [Sat, 9 May 2020 13:41:27 +0000 (14:41 +0100)]
[X86] Add test cases for 'abs from mul patterns' (PR45691)

4 years ago[clangd] Fix a data race in RecordsLatencies test
Kadir Cetinkaya [Sat, 9 May 2020 13:42:15 +0000 (15:42 +0200)]
[clangd] Fix a data race in RecordsLatencies test

4 years ago[X86] Add tests showing failure of combineVectorCompareAndMaskUnaryOp to handle ...
Simon Pilgrim [Sat, 9 May 2020 13:24:38 +0000 (14:24 +0100)]
[X86] Add tests showing failure of combineVectorCompareAndMaskUnaryOp to handle 'all-bits' general case

For the sint_to_fp(and(X,C)) -> and(X,sint_to_fp(C)) fold, combineVectorCompareAndMaskUnaryOp only matches X against SETCC (with an all-bits result) when really it could accept anything that ComputeNumSignBits says is all-bits.

Noticed while investigating mask promotion issues in PR45808

4 years agoNativeFormatting.h - reduce raw_ostream.h include to forward declaration. NFC.
Simon Pilgrim [Sat, 9 May 2020 12:31:39 +0000 (13:31 +0100)]
NativeFormatting.h - reduce raw_ostream.h include to forward declaration. NFC.

4 years ago[clang-format] [PR34574] Handle [[nodiscard]] attribute in class declaration
mydeveloperday [Sat, 9 May 2020 10:26:38 +0000 (11:26 +0100)]
[clang-format] [PR34574] Handle [[nodiscard]] attribute in class declaration

Summary:
https://bugs.llvm.org/show_bug.cgi?id=34574
https://bugs.llvm.org/show_bug.cgi?id=38401

```
template <typename T>
class [[nodiscard]] result
{
  public:
    result(T&&)
    {
    }
};
```

formats incorrectly to

```
template <typename T>
class [[nodiscard]] result{public : result(T &&){}};
```

Reviewed By: krasimir

Subscribers: cfe-commits

Tags: #clang, #clang-format

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

4 years ago[MLIR] Register JIT event listeners with RTDyldObjectLinkingLayer
Eugene Zhulenev [Sat, 9 May 2020 09:13:50 +0000 (11:13 +0200)]
[MLIR] Register JIT event listeners with RTDyldObjectLinkingLayer

Use a new API to register JIT event listeners.

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

4 years ago[lldb] [testsuite] TestReproducerAttach.py: Fix dependency on external symbol files
Jan Kratochvil [Sat, 9 May 2020 07:06:37 +0000 (09:06 +0200)]
[lldb] [testsuite] TestReproducerAttach.py: Fix dependency on external symbol files

D55859 and D63339 prevented needless dependencies on system symbol
files. This testcase was checked-in afterwards and it brings back one
such unwanted dependency. Under some circumstances it may cause false
FAILs and/or excessive resource usage to run the testcase.

clang-format does not support .py so I have formatted it as I found most
compatible.

Also this is not a full testcase-style initialization, for example
--no-lldbinit ignores env("NO_LLDBINIT") setting which lldbtest.py does
implement:
  # If we spawn an lldb process for test (via pexpect), do not load the
  # init file unless told otherwise.
  if os.environ.get("NO_LLDBINIT") != "NO":
      self.lldbOption += " --no-lldbinit"

But this is what lldbpexpect.py does - it also ignores
env("NO_LLDBINIT"). Sure one could also fix lldbpexpect.py to unify the
initialization more with lldbtest.py but I find that outside of the
scope of this patch.

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

4 years ago[Driver] Don't pass -u__llvm_profile_runtime for clang -fprofile-arcs a.o
Fangrui Song [Sat, 9 May 2020 06:13:19 +0000 (23:13 -0700)]
[Driver] Don't pass -u__llvm_profile_runtime for clang -fprofile-arcs a.o

clang --coverage a.o       # InstrProfilingRuntime.cpp.o not linked in
clang --fprofile-arcs a.o  # InstrProfilingRuntime.cpp.o unexpectedly linked in

Fix --fprofile-arcs.

4 years ago[NFC] Clean up in MCObjectStreamer and X86AsmBackend
Shengchen Kan [Sat, 9 May 2020 04:47:44 +0000 (12:47 +0800)]
[NFC] Clean up in MCObjectStreamer and X86AsmBackend