platform/upstream/llvm.git
4 years ago[flang][OpenMP] Place the insertion point to the start of the block
Sourabh Singh Tomar [Fri, 25 Sep 2020 18:25:43 +0000 (23:55 +0530)]
[flang][OpenMP] Place the insertion point to the start of the block

After skeleton of the `Parallel Op` is created set the insertion point to start of the block. So that later `CodeGen` can proceed.

Note: This patch reflects the work that can be upstreamed from PR(merged)
PR: https://github.com/flang-compiler/f18-llvm-project/pull/424

Reviewed By: schweitz, kiranchandramohan

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

4 years agoOpaquePtr: Add type to sret attribute
Matt Arsenault [Wed, 23 Sep 2020 17:06:59 +0000 (13:06 -0400)]
OpaquePtr: Add type to sret attribute

Make the corresponding change that was made for byval in
b7141207a483d39b99c2b4da4eb3bb591eca9e1a. Like byval, this requires a
bulk update of the test IR tests to include the type before this can
be mandatory.

4 years ago[SCEV] Add support for `x != 0` to CollectCondition.
Florian Hahn [Fri, 25 Sep 2020 09:01:31 +0000 (10:01 +0100)]
[SCEV] Add support for `x != 0` to CollectCondition.

Add support for NE predicates with 0 constants. Those can be translated
to UMaxExpr(x, 1).

4 years ago[SCEV] Add another test using info from loop guards for BTC with NE.
Florian Hahn [Fri, 25 Sep 2020 17:51:12 +0000 (18:51 +0100)]
[SCEV] Add another test using info from loop guards for BTC with NE.

4 years agoMove PassBuilder::registerParseTopLevelPipelineCallback out-of-line
Hans Wennborg [Fri, 25 Sep 2020 17:49:15 +0000 (19:49 +0200)]
Move PassBuilder::registerParseTopLevelPipelineCallback out-of-line

For some mysterious reason it doesn't build with clang-cl when compiled
as part of the includes in clang's CodeGenAction.cpp
(crbug.com/1132292).

4 years agoRevert "Add a verifier check that rejects non-distinct DISubprogram function"
Adrian Prantl [Fri, 25 Sep 2020 17:51:54 +0000 (10:51 -0700)]
Revert "Add a verifier check that rejects non-distinct DISubprogram function"

This reverts commit e17f52d623cc146b7d9bf5a2e02965043508b4c4.

while investigating bot breakage.

4 years agoAArch64/GlobalISel: Narrow stack passed argument access size
Matt Arsenault [Fri, 25 Sep 2020 14:26:36 +0000 (10:26 -0400)]
AArch64/GlobalISel: Narrow stack passed argument access size

This fixes a verifier error in the testcase from bug 47619.

The stack passed s3 value was widened to 4-bytes, and producing a
4-byte memory access with a < 1 byte result type. We need to either
widen the result type or narrow the access size. This copies the code
directly from the AMDGPU handling, which narrows the load size. I
don't like that every target has to handle this, but this is currently
broken on the 11 release branch and this is the simplest fix.

This reverts commit 42bfa7c63b85e76fe16521d1671afcafaf8f64ed.

4 years ago[MLIR] Fix for updating function signature in normalizing memrefs
Haruki Imai [Fri, 25 Sep 2020 17:19:23 +0000 (22:49 +0530)]
[MLIR] Fix for updating function signature in normalizing memrefs

Normalizing memrefs failed when a caller of symbolic use in a function
can not be casted to `CallOp`. This patch avoids the failure by checking
the result of the casting. If the caller can not be casted to `CallOp`,
it is skipped.

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

4 years agoFix Assembler/disubprogram.ll after e17f52d623cc146b7d9bf5a2e02965043508b4c4
Fangrui Song [Fri, 25 Sep 2020 17:26:35 +0000 (10:26 -0700)]
Fix Assembler/disubprogram.ll after e17f52d623cc146b7d9bf5a2e02965043508b4c4

4 years ago[PowerPC] Add accumulator register class and instructions
Baptiste Saleil [Fri, 25 Sep 2020 16:30:38 +0000 (11:30 -0500)]
[PowerPC] Add accumulator register class and instructions

This patch adds the xxmfacc, xxmtacc and xxsetaccz instructions to manipulate
accumulator registers. It also adds the ACC register class definition for the
accumulator registers.

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

4 years agoFix DISubprogram-v4.ll after e17f52d623cc146b7d9bf5a2e02965043508b4c4
Fangrui Song [Fri, 25 Sep 2020 17:08:24 +0000 (10:08 -0700)]
Fix DISubprogram-v4.ll after e17f52d623cc146b7d9bf5a2e02965043508b4c4

4 years agoSema: remove unnecessary parameter for SwiftName handling (NFCI)
Saleem Abdulrasool [Thu, 24 Sep 2020 21:44:14 +0000 (21:44 +0000)]
Sema: remove unnecessary parameter for SwiftName handling (NFCI)

This code never actually did anything in the implementation.

`mergeDeclAttribute` is declared as `static`, and referenced exactly
once in the file: from `Sema::mergeDeclAttributes`.

`Sema::mergeDeclAttributes` sets `LocalAMK` to `AMK_None`.  If the
attribute is `DeprecatedAttr`, `UnavailableAttr`, or `AvailabilityAttr`
then the `LocalAMK` is updated.  However, because we are dealing with a
`SwiftNameDeclAttr` here, `LocalAMK` remains `AMK_None`.  This is then
passed to the function which will as a result pass the value of
`AMK_None == AMK_Override` aka `false`.  Simply propagate the value
through and erase the dead codepath.

Thanks to Aaron Ballman for flagging the use of the availability merge
kind here leading to this simplification!

Differential Revision: https://reviews.llvm.org/D88263
Reviewed By: Aaron Ballman

4 years ago[AArch64][GlobalISel] Add selection support for <8 x s16> G_INSERT_VECTOR_ELT with...
Amara Emerson [Fri, 25 Sep 2020 16:49:27 +0000 (09:49 -0700)]
[AArch64][GlobalISel] Add selection support for <8 x s16>  G_INSERT_VECTOR_ELT with GPR scalar.

Fixes the neon intrinsics test in the test suite.

4 years ago[profile] Add %t LLVM_PROFILE_FILE option to substitute $TMPDIR
Vedant Kumar [Tue, 8 Sep 2020 21:45:41 +0000 (14:45 -0700)]
[profile] Add %t LLVM_PROFILE_FILE option to substitute $TMPDIR

Add support for expanding the %t filename specifier in LLVM_PROFILE_FILE
to the TMPDIR environment variable. This is supported on all platforms.

On Darwin, TMPDIR is used to specify a temporary application-specific
scratch directory. When testing apps on remote devices, it can be
challenging for the host device to determine the correct TMPDIR, so it's
helpful to have the runtime do this work.

rdar://68524185

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

4 years ago[NFC] Fix build warnings
Rahul Joshi [Fri, 25 Sep 2020 16:35:41 +0000 (09:35 -0700)]
[NFC] Fix build warnings

4 years ago[SCEV] Add support for `x == constant` to CollectCondition.
Florian Hahn [Thu, 24 Sep 2020 20:57:14 +0000 (21:57 +0100)]
[SCEV] Add support for `x == constant` to CollectCondition.

Add support for EQ predicates with constant operand. In that case, using
the constant instead of an unknown expression should always be
beneficial.

4 years ago[SystemZ] Optimize bcmp calls (PR47420)
Dávid Bolvanský [Fri, 25 Sep 2020 15:54:21 +0000 (17:54 +0200)]
[SystemZ] Optimize bcmp calls (PR47420)

Solves https://bugs.llvm.org/show_bug.cgi?id=47420

Reviewed By: uweigand

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

4 years ago[CMake] Make sure _cmake_system_name has a default
David Tenty [Fri, 21 Aug 2020 16:47:12 +0000 (12:47 -0400)]
[CMake] Make sure _cmake_system_name has a default

We currently try to pick it up from the CMake arguments passed to llvm_ExternalProject_Add but
if there isn't an explicit option passed, we should reflect CMake's own default behaviour
of targeting the host, since we'll make decisions about what tools to use for the build based on
the setting. Otherwise, we'll get different behaviour between configuring an external project with
the default target and configuring with an explicit one targeting the same platform.

Reviewed By: stevewan, hubert.reinterpretcast

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

4 years ago[libc++][ci] Don't require passing --token to phabricator-report
Louis Dionne [Fri, 25 Sep 2020 14:49:18 +0000 (10:49 -0400)]
[libc++][ci] Don't require passing --token to phabricator-report

The CONDUIT_TOKEN is already taken from the environment. Also, disable
reporting back to Phabricator for now until we're ready to start spamming
the results back. This still needs a bit of testing.

4 years ago[NFC] Fix syntax of ranked memrefs in the MLIR Language Reference.
Rahul Joshi [Wed, 23 Sep 2020 17:57:09 +0000 (10:57 -0700)]
[NFC] Fix syntax of ranked memrefs in the MLIR Language Reference.

- Eliminate incorrect |
- Eliminate memspace0 as the memory spaces currently are integer literals and memory
  space 0 is not explicitly printed.

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

4 years ago[NFC] Fix minor typos in comments and reuse concreteOp.
Rahul Joshi [Thu, 24 Sep 2020 16:47:02 +0000 (09:47 -0700)]
[NFC] Fix minor typos in comments and reuse concreteOp.

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

4 years agoAdd a verifier check that rejects non-distinct DISubprogram function
Adrian Prantl [Thu, 24 Sep 2020 23:59:36 +0000 (16:59 -0700)]
Add a verifier check that rejects non-distinct DISubprogram function
attachments. They would crash the backend, which expects all
DISubprograms that are not part of the type system to have a unit field.

Clang right before https://reviews.llvm.org/D79967 would generate this
kind of broken IR.

rdar://problem/69534688

4 years ago[SVE] Revert accidental change from 405e22fbe8719cff6c40eec15c2044f42527f116
Cameron McInally [Fri, 25 Sep 2020 15:11:10 +0000 (10:11 -0500)]
[SVE] Revert accidental change from 405e22fbe8719cff6c40eec15c2044f42527f116

Accidentally commited two lines that were not intended. Remove those.

4 years ago[SVE] Lower fixed length VECREDUCE_[SMAX|SMIN] to Scalable
Cameron McInally [Fri, 25 Sep 2020 14:30:51 +0000 (09:30 -0500)]
[SVE] Lower fixed length VECREDUCE_[SMAX|SMIN] to Scalable

This patch is pretty similar to the VECREDUCE_ADD patch, with some minor tweaks.

Results from the AArch64ISD::[SMAX|SMIN]V_PRED return element sized results. This requires an ANY_EXTEND for results < 32-bits, since Legalization promotes those results.

There is no NEON i64 vector support for SMAXV|SMINV, so use SVE for those.

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

4 years ago[AIX] Try to not use LLVM tools while building runtimes
David Tenty [Tue, 11 Aug 2020 14:27:41 +0000 (10:27 -0400)]
[AIX] Try to not use LLVM tools while building runtimes

Since 64-bit XCOFF and the big AR format is not yet supported in some of these tools, this patch avoids additional setup of these tools. This patch is not intended to prevent picking up the LLVM tools if they happen to be available otherwise.

Reviewed By: hubert.reinterpretcast

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

4 years ago[SCEV] Swap operands if LHS is not unknown.
Florian Hahn [Thu, 24 Sep 2020 20:38:08 +0000 (21:38 +0100)]
[SCEV] Swap operands if LHS is not unknown.

Currently we only use information from guards for unknown expressions.
Swap LHS/RHS and predicate, if LHS is not unknown.

4 years ago[PowerPC][NFC] Merged two switch entries.
Stefan Pintilie [Fri, 25 Sep 2020 14:47:08 +0000 (09:47 -0500)]
[PowerPC][NFC] Merged two switch entries.

Two switch entries did exactly the same thing. This patch merges them.

4 years ago[InstCombine] Add some extra bswap tests from PR39793
Simon Pilgrim [Fri, 25 Sep 2020 14:45:53 +0000 (15:45 +0100)]
[InstCombine] Add some extra bswap tests from PR39793

Also test for cases where recognizeBSwapOrBitReverseIdiom checks for a truncated bswap pattern.

4 years agoFix some of the more egregious 80-col and whitespace issues; NFC
Aaron Ballman [Fri, 25 Sep 2020 14:36:45 +0000 (10:36 -0400)]
Fix some of the more egregious 80-col and whitespace issues; NFC

4 years ago[InstCombine] Add 'partial' bswap tests from PR39793
Simon Pilgrim [Fri, 25 Sep 2020 14:28:01 +0000 (15:28 +0100)]
[InstCombine] Add 'partial' bswap tests from PR39793

Tests for basic zext(bswap(trunc(x))) patterns shown on PR39793

4 years agoTypo fix; NFC
Aaron Ballman [Fri, 25 Sep 2020 14:25:17 +0000 (10:25 -0400)]
Typo fix; NFC

4 years ago[SCEV] Extract code to collect conditions to lambda (NFC).
Florian Hahn [Thu, 24 Sep 2020 17:01:55 +0000 (18:01 +0100)]
[SCEV] Extract code to collect conditions to lambda (NFC).

This makes re-using the common functionality easier in follow-up
patches.

4 years ago[libc++] Initial support for pre-commit CI with Buildkite
Louis Dionne [Wed, 23 Sep 2020 13:20:03 +0000 (09:20 -0400)]
[libc++] Initial support for pre-commit CI with Buildkite

This commit adds basic files and scripts that are used for the Buildkite
pre-commit CI setup. This was tested to mostly work on a fork of llvm-project,
however some adjustments will have to be made as we complete the real
setup.

4 years ago[SCEV] Add more tests using info from loop guards for BTC.
Florian Hahn [Fri, 25 Sep 2020 12:53:58 +0000 (13:53 +0100)]
[SCEV] Add more tests using info from loop guards for BTC.

4 years ago[gn build] Port e336b74c995
LLVM GN Syncbot [Fri, 25 Sep 2020 12:13:19 +0000 (12:13 +0000)]
[gn build] Port e336b74c995

4 years ago[Analyzer] Fix unused variable warning in Release builds
Benjamin Kramer [Fri, 25 Sep 2020 12:08:45 +0000 (14:08 +0200)]
[Analyzer] Fix unused variable warning in Release builds

clang/lib/StaticAnalyzer/Core/ExprEngineCXX.cpp:377:19: warning: unused variable 'Init'

4 years ago[clang-format] Add a MacroExpander.
Manuel Klimek [Tue, 7 Jul 2020 10:17:14 +0000 (12:17 +0200)]
[clang-format] Add a MacroExpander.

Summary:
The MacroExpander allows to expand simple (non-resursive) macro
definitions from a macro identifier token and macro arguments. It
annotates the tokens with a newly introduced MacroContext that keeps
track of the role a token played in expanding the macro in order to
be able to reconstruct the macro expansion from an expanded (formatted)
token stream.

Made Token explicitly copy-able to enable copying tokens from the parsed
macro definition.

Reviewers: sammccall

Subscribers: mgorny, cfe-commits

Tags: #clang

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

4 years ago[mlir] [VectorOps] generalize printing support for integers
Aart Bik [Fri, 25 Sep 2020 10:32:05 +0000 (03:32 -0700)]
[mlir] [VectorOps] generalize printing support for integers

This generalizes printing beyond just i1,i32,i64 and also accounts
for signed and unsigned interpretation in the output.

Reviewed By: nicolasvasilache

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

4 years ago[PPC] [AIX] Implement calling convention IR for C99 complex types on AIX
Chris Bowler [Fri, 25 Sep 2020 11:36:49 +0000 (07:36 -0400)]
[PPC] [AIX] Implement calling convention IR for C99 complex types on AIX

Add AIX calling convention logic to Clang for C99 complex types on AIX

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

4 years ago[InstCombine] Add bswap tests from funnel shift intrinsics
Simon Pilgrim [Fri, 25 Sep 2020 11:32:08 +0000 (12:32 +0100)]
[InstCombine] Add bswap tests from funnel shift intrinsics

Based on (WIP) patch in D87452 - I'm intending to add the intrinsics handling to collectBitParts as a separate patch to make the changes clearer.

4 years ago[PowerPC][LLD] Extend R2 save stub to support offsets of more than 26 bits
Stefan Pintilie [Tue, 22 Sep 2020 23:44:54 +0000 (18:44 -0500)]
[PowerPC][LLD] Extend R2 save stub to support offsets of more than 26 bits

The R2 save stub will now support offsets up to 64 bits.

There are three cases that will be used.
1) The offset fits in 26 bits.
```
b <26 bit offset>
```
2) The offset does not fit in 26 bits but fits in 34 bits.
```
paddi r12, 0, <34 bit offset>, 1
mtctr r12
bctr
```
3) The offset does not fit in 34 bits. Since this is an R2 save stub we can use
the TOC in R2. We are not loading the offset but the actual address we want to
branch to.
```
addis r12, r2, <address in TOC lo>
ld r12 <address in TOC hi>(r12)
mtctr r12
bctr
```

In case 1) the stub is only 8 bytes while in cases 2) and 3) the stub will be
20 bytes.

Reviewed By: MaskRay, sfertile, NeHuang

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

4 years ago[CMake][CTE] Add "check-clang-extra-..." targets to test only a particular Clang...
Whisperity [Fri, 25 Sep 2020 11:32:56 +0000 (13:32 +0200)]
[CMake][CTE] Add "check-clang-extra-..." targets to test only a particular Clang extra tool

Create targets `check-clang-extra-clang-tidy`, `check-clang-extra-clang-query`
similar to how `check-clang-sema`, `check-clang-parser`, etc. are
auto-generated from the directory structure.

This allows running only a particular sub-tool's tests, not having to wait
through the entire `check-clang-tools` execution.

Differential Revision: http://reviews.llvm.org/D84176

4 years ago[Analyzer] Fix for `ExprEngine::computeObjectUnderConstruction()` for base and delega...
Adam Balogh [Wed, 5 Aug 2020 19:38:15 +0000 (21:38 +0200)]
[Analyzer] Fix for `ExprEngine::computeObjectUnderConstruction()` for base and delegating consturctor initializers

For /C++/ constructor initializers `ExprEngine:computeUnderConstruction()`
asserts that they are all member initializers. This is not neccessarily
true when this function is used to get the return value for the
construction context thus attempts to fetch return values of base and
delegating constructor initializers result in assertions. This small
patch fixes this issue.

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

4 years ago[AArch64] PAC/BTI code generation for LLVM generated functions
Momchil Velikov [Fri, 25 Sep 2020 10:45:22 +0000 (11:45 +0100)]
[AArch64] PAC/BTI code generation for LLVM generated functions

PAC/BTI-related codegen in the AArch64 backend is controlled by a set
of LLVM IR function attributes, added to the function by Clang, based
on command-line options and GCC-style function attributes. However,
functions, generated in the LLVM middle end (for example,
asan.module.ctor or __llvm_gcov_write_out) do not get any attributes
and the backend incorrectly does not do any PAC/BTI code generation.

This patch record the default state of PAC/BTI codegen in a set of
LLVM IR module-level attributes, based on command-line options:

* "sign-return-address", with non-zero value means generate code to
  sign return addresses (PAC-RET), zero value means disable PAC-RET.

* "sign-return-address-all", with non-zero value means enable PAC-RET
  for all functions, zero value means enable PAC-RET only for
  functions, which spill LR.

* "sign-return-address-with-bkey", with non-zero value means use B-key
  for signing, zero value mean use A-key.

This set of attributes are always added for AArch64 targets (as
opposed, for example, to interpreting a missing attribute as having a
value 0) in order to be able to check for conflicts when combining
module attributed during LTO.

Module-level attributes are overridden by function level attributes.
All the decision making about whether to not to generate PAC and/or
BTI code is factored out into AArch64FunctionInfo, there shouldn't be
any places left, other than AArch64FunctionInfo, which directly
examine PAC/BTI attributes, except AArch64AsmPrinter.cpp, which
is/will-be handled by a separate patch.

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

4 years ago[AMDGPU] Fix declaration parameter names to match definition
Jay Foad [Fri, 25 Sep 2020 10:38:17 +0000 (11:38 +0100)]
[AMDGPU] Fix declaration parameter names to match definition

This fixes the declaration of AMDGPULegalizerInfo::legalizeBufferLoad to
match the definition. It is still confusing that that parameter order is
different from legalizeBufferStore.

https://bugs.llvm.org/show_bug.cgi?id=47535

4 years ago[SplitKit] In addDeadDef tolerate parent range that defines more lanes
Jay Foad [Mon, 21 Sep 2020 11:32:13 +0000 (12:32 +0100)]
[SplitKit] In addDeadDef tolerate parent range that defines more lanes

Following on from D87757 "[SplitKit] Only copy live lanes", in
SplitEditor::addDeadDef, when we're checking whether the parent live
interval has a subrange defining the same lanes, tolerate the case
where the parent subrange defines a superset of the lanes. This can
happen when the child subrange comes from SplitEditor::buildCopy
decomposing a partial copy into a sequence of subreg copies that cover
the required lanes.

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

4 years agoRevert rGe55410f8b260 : "AArch64/GlobalISel: Add testcase for bug 47619"
Simon Pilgrim [Fri, 25 Sep 2020 10:31:14 +0000 (11:31 +0100)]
Revert rGe55410f8b260 : "AArch64/GlobalISel: Add testcase for bug 47619"

This reverts commit e55410f8b260a2868d600ca99fe5ee80f9cd4fc5.

This is failing on EXPENSIVE_CHECKS buildbots

4 years ago[msan] Remove redundant test
Vitaly Buka [Fri, 25 Sep 2020 09:20:33 +0000 (02:20 -0700)]
[msan] Remove redundant test

The test needs to control intercept_strcmp option.
It's already implemented as lit.test strcmp.c.

4 years ago[msan] Fix gethostent tests
Vitaly Buka [Fri, 25 Sep 2020 08:28:23 +0000 (01:28 -0700)]
[msan] Fix gethostent tests

gethostent should follow sethostent.

4 years ago[Object/yaml2obj/obj2yaml][test] - Split, cleanup and move MIPS abi-flags.yaml test...
Georgii Rymar [Thu, 24 Sep 2020 14:39:11 +0000 (17:39 +0300)]
[Object/yaml2obj/obj2yaml][test] - Split, cleanup and move MIPS abi-flags.yaml test. NFCI.

We have the `Object/Mips/abi-flags.yaml` which tests how yaml2obj/obj2yaml
handle `SHT_MIPS_ABIFLAGS` sections.

This patch splits it into two tests: one for obj2yaml and one for yaml2obj
and moves the result to right places.

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

4 years ago[AArch64][GlobalISel] Manually select G_DUP with s8/s16 gpr scalar operands.
Amara Emerson [Fri, 25 Sep 2020 08:28:50 +0000 (01:28 -0700)]
[AArch64][GlobalISel] Manually select G_DUP with s8/s16 gpr scalar operands.

These don't get selected by the imported patterns, and avoiding generating them
is a whole load of not-worth-it-hassle (until we have fp types in GlobalISel).

4 years ago[AArch64][GlobalISel] Make <8 x s16> for G_INSERT_VECTOR_ELT legal.
Amara Emerson [Thu, 24 Sep 2020 20:06:03 +0000 (13:06 -0700)]
[AArch64][GlobalISel] Make <8 x s16> for G_INSERT_VECTOR_ELT legal.

4 years ago[flang][driver] Add missing dependency (shared library builds, NFC)
Andrzej Warzynski [Fri, 25 Sep 2020 08:52:49 +0000 (09:52 +0100)]
[flang][driver] Add missing dependency (shared library builds, NFC)

`FlangFrontendTests` depends on libclangFrontend (it uses
DiagnosticConsumer classes from there). This patch adds the missing
dependency in CMake.

The missing dependency manifests itself only with BUILD_SHARED_LIBS=ON.
This symbol is linked in statically with libflangFrontend when
BUILD_SHARED_LIBS=OFF.

4 years ago[ARM] Find VPT implicitly predicated by VCTP
Sam Parker [Tue, 22 Sep 2020 09:43:18 +0000 (10:43 +0100)]
[ARM] Find VPT implicitly predicated by VCTP

On failing to find a VCTP in the list of instructions that explicitly
predicate the entry of a VPT block, inspect whether the block is
controlled via VPT which is implicitly predicated due to it's
predicated operand(s).

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

4 years ago[mlir][SCFToGPU] LaunchOp propagate optional attributes
Artur Bialas [Fri, 25 Sep 2020 07:21:16 +0000 (09:21 +0200)]
[mlir][SCFToGPU] LaunchOp propagate optional attributes

Allow propagating optional user defined attributes during SCF to GPU conversion. Gives opportunity to use user defined attributes in the further lowering. For example setting subgroup size, or other options for GPU dispatch. This does not break backward compatibility and does not require new attributes, just allow passing optional ones.

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

4 years ago[libc] Using llvm_libc memcpy in mem* benchmarks.
Anthony Steinhauser [Fri, 25 Sep 2020 05:03:52 +0000 (22:03 -0700)]
[libc] Using llvm_libc memcpy in mem* benchmarks.

Currently the mem* benchmarks use memcpy from Glibc and memset from LLVM libc.
That's misleading and produces inconsistent results and behaviors.

This change makes Memcpy.cpp consistent with Memset.cpp:
https://github.com/llvm/llvm-project/blob/master/libc/benchmarks/Memset.cpp#L49

Reviewers: sivachandra

Reviewed By: sivachandra

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

4 years agoFix uninitialized XRayArg
Ian Levesque [Fri, 25 Sep 2020 04:20:14 +0000 (00:20 -0400)]
Fix uninitialized XRayArg

4 years ago[lld][WebAssembly] Allow `atomics` feature with unshared memory
Thomas Lively [Fri, 25 Sep 2020 03:35:29 +0000 (20:35 -0700)]
[lld][WebAssembly] Allow `atomics` feature with unshared memory

 https://github.com/WebAssembly/threads/issues/144 updated the
WebAssembly threads proposal to make atomic operations on unshared memories
valid. This change updates the feature checking in the linker accordingly.
Production WebAssembly engines have recently been updated to allow this
behvaior, but after this change users who accidentally use atomics with unshared
memories on older versions of the engines will get validation errors at runtime
rather than link errors.

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

4 years ago[NFC] [PPC] Add PowerPC expected IR tests for C99 complex
Chris Bowler [Thu, 24 Sep 2020 23:06:56 +0000 (19:06 -0400)]
[NFC] [PPC] Add PowerPC expected IR tests for C99 complex

Adding this test so that I can extend it in a follow on patch with
expected IR for AIX when I implement complex handling in
AIXABIInfo.

Reviewed By: daltenty, ZarkoCA

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

4 years ago[xray] Function coverage groups
Ian Levesque [Fri, 18 Sep 2020 18:45:51 +0000 (14:45 -0400)]
[xray] Function coverage groups

Add the ability to selectively instrument a subset of functions by dividing the functions into N logical groups and then selecting a group to cover. By selecting different groups over time you could cover the entire application incrementally with lower overhead than instrumenting the entire application at once.

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

4 years agoPR47176: Don't read from an inactive union member if a friend function
Richard Smith [Fri, 25 Sep 2020 01:07:05 +0000 (18:07 -0700)]
PR47176: Don't read from an inactive union member if a friend function
has default arguments and an exception specification.

4 years agoHint how to get a symbolized stack trace if llvm-symbolizer is not found on crashes
Mehdi Amini [Fri, 25 Sep 2020 01:50:40 +0000 (01:50 +0000)]
Hint how to get a symbolized stack trace if llvm-symbolizer is not found on crashes

Most users of LLVM tools hit the raw traces and don't know how to get LLVM to
symbolize automatically for them.

When we print the non-symbolized stack trace, we will add information about
how to get it symbolized.

Reviewed By: MaskRay

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

4 years ago[Hexagon] Avoid crash on CONCAT_VECTORS with illegal element types
Krzysztof Parzyszek [Fri, 25 Sep 2020 00:00:15 +0000 (19:00 -0500)]
[Hexagon] Avoid crash on CONCAT_VECTORS with illegal element types

Legal vector element types may not be legal as scalar types. When
CONCAT_VECTORS is converted to BUILD_VECTOR, the individual vector
elements become standalone operands to the build operation. If they
have illegal (scalar) types, they need to be made legal. In doing
so, the case of TRUNCATE was not handled, causing an assertion to
fail.

4 years ago[lld] Clean up in lld::{coff,elf}::link after D70378
Fangrui Song [Fri, 25 Sep 2020 01:01:26 +0000 (18:01 -0700)]
[lld] Clean up in lld::{coff,elf}::link after D70378

Library users should not need to call errorHandler().reset() explicitly.

google/iree calls lld::elf::link and without the patch some global
variables are not cleaned up in the next invocation.

4 years ago[ValueTracking] Make isGuaranteedNotToBeUndefOrPoison exit early when MetadataAsValue...
Juneyoung Lee [Fri, 25 Sep 2020 00:49:13 +0000 (09:49 +0900)]
[ValueTracking] Make isGuaranteedNotToBeUndefOrPoison exit early when MetadataAsValue is given

It is set to conservatively return false, otherwise noundef attributes are added to function calls with metadata arguments.

4 years ago[ValueTracking] Check uses of Argument if it is given to isGuaranteedNotToBeUndefOrPoison
Juneyoung Lee [Thu, 24 Sep 2020 09:52:30 +0000 (18:52 +0900)]
[ValueTracking] Check uses of Argument if it is given to isGuaranteedNotToBeUndefOrPoison

This is a patch that allows isGuaranteedNotToBeUndefOrPoison to return more precise result
when an argument is given, by looking through its uses at the entry block (and following blocks as well, if it is checking poison only).

This is useful when there is a function call with noundef arguments at the entry block.

Reviewed By: nikic

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

4 years agoRevert "[NFCI][IR] ConstantRangeTest: add basic scaffolding for next-gen precision...
Reid Kleckner [Thu, 24 Sep 2020 23:47:15 +0000 (16:47 -0700)]
Revert "[NFCI][IR] ConstantRangeTest: add basic scaffolding for next-gen precision/correctness testing"

This reverts commit 9bcf7b1c7a139a455400df109d81c638b9e75150.

Breaks build with MSVC.

4 years agoRevert "Add a static_assert confirming that DiagnosticBuilder is small"
Reid Kleckner [Thu, 24 Sep 2020 23:39:46 +0000 (16:39 -0700)]
Revert "Add a static_assert confirming that DiagnosticBuilder is small"

This reverts commit a32feed0dbeac7606d042d0d7e041c9eaf12cd51.

This assert doesn't hold in 32-bit builds, I didn't do the math right.

4 years agoAdd a static_assert confirming that DiagnosticBuilder is small
Reid Kleckner [Thu, 24 Sep 2020 23:38:07 +0000 (16:38 -0700)]
Add a static_assert confirming that DiagnosticBuilder is small

4 years ago[intel-pt] Refactor the JSON parsing
Walter Erquinigo [Thu, 24 Sep 2020 20:39:21 +0000 (13:39 -0700)]
[intel-pt] Refactor the JSON parsing

Recently https://reviews.llvm.org/D88103 introduced a nice API for
converting a JSON object into C++ types, which include nice error
messaging.

I'm using that new functioniality to perform the parsing in a much more
elegant way. As a result, the code looks simpler and more maintainable,
as we aren't parsing anymore individual fields manually.

I updated the test cases accordingly.

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

4 years ago[MS] For unknown ISAs, pass non-trivially copyable arguments indirectly
Reid Kleckner [Thu, 24 Sep 2020 21:11:06 +0000 (14:11 -0700)]
[MS] For unknown ISAs, pass non-trivially copyable arguments indirectly

Passing them directly is likely to be non-conforming, since it usually
involves copying the bytes of the record. For unknown architectures, we
don't know what MSVC does or will do, but we should at least try to
conform as well as we can.

4 years ago[MS] Simplify rules for passing C++ records
Reid Kleckner [Thu, 24 Sep 2020 20:42:41 +0000 (13:42 -0700)]
[MS] Simplify rules for passing C++ records

Regardless of the target architecture, we should always use the C rules
(RAA_Default) for records that "canBePassedInRegisters". Those are
trivially copyable things, and things marked with [[trivial_abi]].

This should be NFC, although it changes where the final decision about
x86_32 overaligned records is made. The current x86_32 C rules say that
overaligned things are passed indirectly, so there is no functional
difference.

4 years ago[AMDGPU] Fixes typo in the test. NFC.
Stanislav Mekhanoshin [Thu, 24 Sep 2020 23:07:15 +0000 (16:07 -0700)]
[AMDGPU] Fixes typo in the test. NFC.

denormal-fp-math-fp32 -> denormal-fp-math-f32

4 years ago[RISCV] Merge the pipeline models for Rocket
Evandro Menezes [Thu, 17 Sep 2020 23:20:50 +0000 (18:20 -0500)]
[RISCV] Merge the pipeline models for Rocket

Merge the 32 and 64 bit pipeline models for Rocket into a single file.

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

4 years ago[llvm] Add -bbsections-cold-text-prefix to emit cold clusters to a different section.
Snehasish Kumar [Thu, 17 Sep 2020 04:40:00 +0000 (21:40 -0700)]
[llvm] Add -bbsections-cold-text-prefix to emit cold clusters to a different section.

This change adds an option to basic block sections to allow cold
clusters to be assigned a custom text prefix. With a custom prefix such
as ".text.split." (D87840), lld can place them in a separate output section.
The benefits are -

* Empirically shown to improve icache and itlb metrics by 3-5%
(absolute) compared to placing split parts in .text.unlikely.
* Mitigates against poor profiles, eg samplePGO profiles used with the
machine function splitter. Optimizations such as hugepage remapping can
make different decisions at the section granularity.
* Enables section granularity hotness monitoring (checking on the
decisions made during compilation vs sample data from production).

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

4 years ago[OpenMP] OpenMPOpt Support for Globalization Remarks
Joseph Huber [Thu, 24 Sep 2020 16:49:58 +0000 (12:49 -0400)]
[OpenMP] OpenMPOpt Support for Globalization Remarks

Summary:
This patch add support for printing analysis messages relating to data
globalization on the GPU. This occurs when data is shared between the
threads in a GPU context and must be pushed to global or shared memory.

Reviewers: jdoerfert

Subscribers: guansong hiraditya llvm-commits ormris sstefan1 yaxunl

Tags: #OpenMP #LLVM

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

4 years agoFix regex in test.
Bill Wendling [Thu, 24 Sep 2020 22:20:47 +0000 (15:20 -0700)]
Fix regex in test.

4 years ago[lld] Make -z keep-text-section-prefix recognize .text.split. as a prefix.
Snehasish Kumar [Thu, 17 Sep 2020 17:04:03 +0000 (10:04 -0700)]
[lld] Make -z keep-text-section-prefix recognize .text.split. as a prefix.

".text.split." holds symbols which are split out from functions in
other input sections. For example, with -fsplit-machine-functions,
placing the cold parts in .text.split instead of .text.unlikely mitigates
against poor profile inaccuracy. Techniques such as hugepage remapping can
make conservative decisions at the section granularity.

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

4 years ago[lld-macho][re-land] Implement and test resolution of common symbols
Jez Ng [Thu, 24 Sep 2020 22:00:56 +0000 (15:00 -0700)]
[lld-macho][re-land] Implement and test resolution of common symbols

Earlier build break fixed in c32e69b2ce7abfb151a87ba363ac9e25abf7d417.

This reverts commit c367f93e8539c4d0bcdc86ad7ea7923e06231a93.

4 years ago[lld-macho][re-land] Initial support for common symbols
Jez Ng [Thu, 24 Sep 2020 21:44:14 +0000 (14:44 -0700)]
[lld-macho][re-land] Initial support for common symbols

Fix earlier build break via a static_cast.

This reverts commit 8112d494d344dc0935d5c078f066a43d7c984e0c.

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

4 years ago[Instruction] Add dropLocation and updateLocationAfterHoist helpers
Vedant Kumar [Tue, 8 Sep 2020 20:39:52 +0000 (13:39 -0700)]
[Instruction] Add dropLocation and updateLocationAfterHoist helpers

Introduce a helper which can be used to update the debug location of an
Instruction after the instruction is hoisted. This can be used to safely
drop a source location as recommended by the docs.

For more context, see the discussion in https://reviews.llvm.org/D60913.

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

4 years ago[WebAssembly] Make SjLj lowering globals thread-local
Thomas Lively [Thu, 24 Sep 2020 21:56:19 +0000 (14:56 -0700)]
[WebAssembly] Make SjLj lowering globals thread-local

Emscripten's longjump and exception mechanism depends on two global variables,
`__THREW__` and `__threwValue`, which are changed to be defined as thread-local
in https://github.com/emscripten-core/emscripten/pull/12056. This patch updates
the corresponding code in the WebAssembly backend to properly declare these
globals as thread-local as well.

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

4 years ago[LLDB] Add a defensive check for member__f_
shafik [Thu, 24 Sep 2020 21:31:31 +0000 (14:31 -0700)]
[LLDB] Add a defensive check for member__f_

I only have a crash log and was not able to come up with a test case for this.

rdar://problem/69403150

4 years ago[DebugInfo] Fix bug in constructor homing with classes with trivial
Amy Huang [Wed, 16 Sep 2020 16:58:39 +0000 (09:58 -0700)]
[DebugInfo] Fix bug in constructor homing with classes with trivial
constructors.

This changes the code to avoid using constructor homing for aggregate
classes and classes with trivial default constructors, instead of trying
to loop through the constructors.

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

4 years agoTemporary fix for D85085 debug_loc bug with basic block sections.
Sriraman Tallam [Thu, 24 Sep 2020 21:37:56 +0000 (14:37 -0700)]
Temporary fix for D85085 debug_loc bug with basic block sections.

Until then, this one line fix removes the assert fail with basic block sections
with debug info. Bug tracking this: #47549
This fix does not generate loc list or DW_AT_const_value if the argument is
mentioned in a different section than the start of the function.

Temporarily fixes bugzilla : https://bugs.llvm.org/show_bug.cgi?id=47549

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

4 years agoReland [CodeGen] emit CG profile for COFF object file
Zequan Wu [Wed, 23 Sep 2020 23:58:57 +0000 (16:58 -0700)]
Reland [CodeGen] emit CG profile for COFF object file

This reverts commit 90242caca2074dab5a9b76e5bc36d9fafd2179a7.

Error fixed at f5435399e823746bbe1737b95c853d77a42e1ac3

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

4 years ago[NFCI][IR] ConstantRangeTest: add basic scaffolding for next-gen precision/correctnes...
Roman Lebedev [Thu, 24 Sep 2020 21:30:54 +0000 (00:30 +0300)]
[NFCI][IR] ConstantRangeTest: add basic scaffolding for next-gen precision/correctness testing

I have long complained that while we have exhaustive tests
for ConstantRange, they are, uh, not good.

The approach of groking our own constant range
via exhaustive enumeration is, mysterious.

It neither tells us without doubt that the result is
conservatively correct, nor the precise match to the ConstantRange
result tells us that the result is precise.
But yeah, it's fast, i give it that.

In short, there are three things that we need to check:
1. That ConstantRange result is conservatively correct
2. That ConstantRange range is reasonable
3. That ConstantRange result is reasonably precise

So let's not just check the middle one, but all three.

This provides precision test coverage for D88178.

4 years ago[NFCI][IR] ConstantRangeTest: refactor operation range gatherers
Roman Lebedev [Thu, 24 Sep 2020 14:13:09 +0000 (17:13 +0300)]
[NFCI][IR] ConstantRangeTest: refactor operation range gatherers

We do the same dance to acquire the "exact" range of an op via
an exhaustive approach in many places.
Let's not invent the wheel each time.

4 years agoRevert "[CodeGen] Postprocess PHI nodes for callbr"
Bill Wendling [Thu, 24 Sep 2020 21:35:15 +0000 (14:35 -0700)]
Revert "[CodeGen] Postprocess PHI nodes for callbr"

Accidental commit.

This reverts commit 7f4c940bd0b526f25e11c51bb4d58a85024330ae.

4 years agoFix testcase.
Bill Wendling [Thu, 24 Sep 2020 21:34:08 +0000 (14:34 -0700)]
Fix testcase.

4 years ago[CodeGen] Postprocess PHI nodes for callbr
Bill Wendling [Thu, 20 Aug 2020 02:51:20 +0000 (19:51 -0700)]
[CodeGen] Postprocess PHI nodes for callbr

When processing PHI nodes after a callbr, we need to make sure that the
PHI nodes on the default branch are resolved after the callbr
(inserted after INLINEASM_BR). The PHI node values on the indirect
branches are processed before the INLINEASM_BR.

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

4 years ago[CUDA] Added conversion functions to builtin vars.
Artem Belevich [Thu, 24 Sep 2020 17:47:45 +0000 (10:47 -0700)]
[CUDA] Added conversion functions to builtin vars.

This is needed to compile some headers in CUDA-11 that assume that threadIdx is
implicitly convertible to dim3. With NVCC, threadIdx is uint3 and there's
dim3(uint3) constructor. Clang uses a special type for the builtin variables, so
that path does not work. Instead, this patch adds conversion function to the
builtin variable classes. that will allow them to be converted to dim3 and uint3.

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

4 years ago[AArch64] __builtin_return_address for PAuth.
Daniel Kiss [Thu, 24 Sep 2020 18:24:12 +0000 (20:24 +0200)]
[AArch64] __builtin_return_address for PAuth.

This change adds the support for __builtin_return_address
for ARMv8.3A Pointer Authentication.
Location of the authentication code in the pointer depends on
the system configuration, therefore a dedicated instruction is used for
effectively removing the authentication code without
authenticating the pointer.

Reviewed By: chill

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

4 years ago[mlir][NFC] Promote memory space to BaseMemRefType
Diego Caballero [Thu, 24 Sep 2020 19:29:56 +0000 (12:29 -0700)]
[mlir][NFC] Promote memory space to BaseMemRefType

This patch moves the memory space field from MemRefType and UnrankedMemRefType
to their base class BaseMemRefType so that it can be retrieved from it without
downcasting it to the specific memref.

Reviewed By: silvas

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

4 years agoRemove stale assert.
Bill Wendling [Thu, 24 Sep 2020 02:09:10 +0000 (19:09 -0700)]
Remove stale assert.

This is triggered during serialization. The test is for modules, but
will occur for any serialization effort using asm goto.

Reviewed By: nickdesaulniers, jyknight

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

4 years ago[AST] Use data-recursion when building ParentMap, avoid stack overflow.
Sam McCall [Thu, 24 Sep 2020 12:26:11 +0000 (14:26 +0200)]
[AST] Use data-recursion when building ParentMap, avoid stack overflow.

The following crashes on my system before this patch, but not after:

  void foo(int i) {
    switch (i) {
      case 1:
      case 2:
      ... 100000 cases ...
        ;
    }
  }

  clang-query -c="match stmt(hasAncestor(stmt()))" deep.c

I'm not sure it's actually a sane testcase to run though, it's pretty slow :-)

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

4 years ago[CMake][AIX] Set LLVM_ENABLE_PER_TARGET_RUNTIME_DIR appropriately for AIX
David Tenty [Fri, 4 Sep 2020 20:44:40 +0000 (16:44 -0400)]
[CMake][AIX] Set LLVM_ENABLE_PER_TARGET_RUNTIME_DIR appropriately for AIX

AIX by default usually folds 32-bit & 64-bit arch libraries into a single
archive, a behaviour we may want for the runtime libraries in the future,
so we don't necessarily want to opt into the multlib layout introduce in
D45604, which is currently the default for runtime builds.

Reviewed By: hubert.reinterpretcast

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

4 years ago[OPENMP]Fix PR47621: Variable used by task inside a template function is not made...
Alexey Bataev [Thu, 24 Sep 2020 18:46:06 +0000 (14:46 -0400)]
[OPENMP]Fix PR47621: Variable used by task inside a template function is not made firstprivate by default

Need to fix a check for the variable if it is declared in the inner
OpenMP region to be able to firstprivatize it.

Reviewed By: jdoerfert

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

4 years ago[flang][driver] Add missing dependency (shared library builds, NFC)
Andrzej Warzynski [Thu, 24 Sep 2020 19:57:46 +0000 (20:57 +0100)]
[flang][driver] Add missing dependency (shared library builds, NFC)

`flang-new` depends on libclangFrontend (it uses DiagnosticConsumer
classes from there). This patch adds the missing dependency in CMake.

clang::TextDiagnosticBuffer is only reported as missing when compiling
`flang-new` with BUILD_SHARED_LIBS=ON. This symbol is linked in
statically with libflangFrontend when BUILD_SHARED_LIBS=OFF.

4 years agoRemove dead branch identified by @rsmith on post-commit for D88236
Erich Keane [Thu, 24 Sep 2020 20:04:36 +0000 (13:04 -0700)]
Remove dead branch identified by @rsmith on post-commit for D88236