platform/upstream/llvm.git
2 years ago[clang] support relative roots to vfs overlays
Richard Howell [Wed, 19 Jan 2022 18:12:32 +0000 (10:12 -0800)]
[clang] support relative roots to vfs overlays

This diff adds support for relative roots to VFS overlays. The directory root
will be made absolute from the current working directory and will be used to
determine the path style to use. This supports the use of VFS overlays with
remote build systems that might use a different working directory for each
compilation.

Reviewed By: benlangmuir

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

2 years ago[InstrProf] Restore InstrProfData.inc to fix Fuchsia builds
Ellis Hoag [Wed, 19 Jan 2022 18:09:56 +0000 (10:09 -0800)]
[InstrProf] Restore InstrProfData.inc to fix Fuchsia builds

https://reviews.llvm.org/D116179 introduced some changes to
`InstrProfData.inc` which broke some downstream builds. This commit
reverts those changes since they only changes two field names.

Reviewed By: phosek

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

2 years ago[DebugInfod] Prefix debuginfod cache directory
Petr Hosek [Wed, 19 Jan 2022 18:08:17 +0000 (10:08 -0800)]
[DebugInfod] Prefix debuginfod cache directory

This prevents the debuginfod client from dumping files directly into the
default cache directory (e.g., ~/.cache). Instead, these files are
placed in a subdirectory (e.g., ~/.cache/llvm-debuginfod/client).
Behavior is unaffected if the cache directory is provided by the
DEBUGINFO_CACHE_PATH environment variable.

Patch By: mysterymath

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

2 years ago[flang] Intrinsic assignment of distinct but "same" derived types
Peter Klausler [Mon, 10 Jan 2022 23:59:12 +0000 (15:59 -0800)]
[flang] Intrinsic assignment of distinct but "same" derived types

Subclause 7.5.2.4 lists conditions under which two distinct derived
types are to be considered the same type for purposes of argument
association, assignment, and so on.  These conditions are implemented
in evaluate::IsTkCompatibleWith(), but assignment semantics doesn't
use it for testing for intrinsic assignment compatibility.  Fix that.

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

2 years agoAMDGPU: Account for usage HIP-style dynamic LDS
Yaxun (Sam) Liu [Wed, 19 Jan 2022 17:56:21 +0000 (12:56 -0500)]
AMDGPU: Account for usage HIP-style dynamic LDS

Disable promote alloca to LDS when HIP-style dynamic LDS since the size
is unknown at compile time.

Patch by: Siu Chi Chan

Reviewed by: Matt Arsenault, Yaxun Liu

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

2 years ago[ELF] Allow non-bitcode archive with an empty index
Fangrui Song [Wed, 19 Jan 2022 18:01:53 +0000 (10:01 -0800)]
[ELF] Allow non-bitcode archive with an empty index

When an archive with an empty index contains only bitcode files, it is
handled as a group of lazy (--start-lib) object files. If there is a
non-bitcode file, there will be a diagnostic a la GNU ld.

For some programs, the archive member extraction ratio is high (e.g. for chrome,
79% archive members are extracted according to --print-archive-stats=). Because
symbol interning is cached for ObjFile::parseLazy but not for ArchiveFile,
parsing an archive as a group of --start-lib object files may be faster.

If the linker speculatively creates section representations for archive members,
the archive index will not be used.

If we take the above view, the archive index is essentially useless. If a user
wants a fast build without using --start-lib, they may just build thin archives
without index (`ar rcS --thin`).

Therefore, I suggest that we no longer treat the code as a hack, instead as a
supported feature. I believe we will do this anyway if we add parallel symbol
interning (parallel symbol interning for lazy object files is simpler than that
for archives).

Ecosystem issues:

* parseLazy actually has nearly the same behavior as ArchiveFile::parse, but the symbol order may be different.
* users may get addicted to the behavior and build archives not working with GNU ld and gold. I think it is easy to rebuild archives to be compatible.

Reviewed By: ikudrin

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

2 years ago[mlir][Linalg] Add a useLinalgCopy option to Linalg bufferization.
Nicolas Vasilache [Wed, 19 Jan 2022 17:49:06 +0000 (12:49 -0500)]
[mlir][Linalg] Add a useLinalgCopy option to Linalg bufferization.

Benchmarks show that memref::CopyOp is curently up to 200x slower than
tiled and vectorized versions of linalg::Copy.
Add a temporary flag to allow comprehensive bufferize to generate a
linalg::GenericOp that implements a copy until this performance bug is
resolved.

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

2 years agounique_ptrify the ModuleManager's VisitState linked list
David Blaikie [Wed, 19 Jan 2022 17:56:53 +0000 (09:56 -0800)]
unique_ptrify the ModuleManager's VisitState linked list

2 years ago[lldb] Initialize Python exactly once
Jonas Devlieghere [Wed, 19 Jan 2022 17:16:16 +0000 (09:16 -0800)]
[lldb] Initialize Python exactly once

We got a few crash reports that showed LLDB initializing Python on two
separate threads. Make sure Python is initialized exactly once.

rdar://87287005

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

2 years agoPrevent adding module flag amdgpu_hostcall multiple times
Yaxun (Sam) Liu [Wed, 19 Jan 2022 17:19:06 +0000 (12:19 -0500)]
Prevent adding module flag amdgpu_hostcall multiple times

HIP program with printf call fails to compile with -fsanitize=address
option, because of appending module flag - amdgpu_hostcall twice, one
for printf and one for sanitize option. This patch fixes that issue.

Patch by: Praveen Velliengiri

Reviewed by: Yaxun Liu, Roman Lebedev

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

2 years ago[CMake] Add explicit return to GetErrcMessages test program
John Brawn [Wed, 19 Jan 2022 17:05:14 +0000 (17:05 +0000)]
[CMake] Add explicit return to GetErrcMessages test program

2 years ago[DAG] SelectionDAG::computeKnownBits - add mul(x,x) self-multiply handling (PR48683)
Simon Pilgrim [Wed, 19 Jan 2022 17:16:31 +0000 (17:16 +0000)]
[DAG] SelectionDAG::computeKnownBits - add mul(x,x) self-multiply handling (PR48683)

Pass the SelfMultiply flag to KnownBits::mul() - added at D108992

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

2 years ago[X86] Add mul(x,x) self-multiply known bits test coverage (PR48683)
Simon Pilgrim [Wed, 19 Jan 2022 16:36:51 +0000 (16:36 +0000)]
[X86] Add mul(x,x) self-multiply known bits test coverage (PR48683)

D108992 added self-multiply handling to KnownBits::mul but we don't use it yet..

2 years ago[RISCV] Test expected inst opcode in sink-splat test
Fraser Cormack [Wed, 19 Jan 2022 17:18:24 +0000 (17:18 +0000)]
[RISCV] Test expected inst opcode in sink-splat test

The function's name suggests it should be testing 'sub' rather than
'add'. We test 'add' in an earlier test so we're not losing any coverage
here.

2 years ago[AIX] identify big archive magic as archive.
zhijian [Wed, 19 Jan 2022 17:18:45 +0000 (12:18 -0500)]
[AIX] identify big archive magic as archive.
Summary:

  identify big archive magic as archive.

Reviewers: Hubert Tong
Differential Revision: https://reviews.llvm.org/D117511

2 years ago[mlir][cmake] Use `GNUInstallDirs` to support custom installation dirs
John Ericson [Tue, 18 Jan 2022 07:03:10 +0000 (07:03 +0000)]
[mlir][cmake] Use `GNUInstallDirs` to support custom installation dirs

I am breaking apart D99484 so the cause of build failures is easier to
understand.

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

2 years ago[mlir] Rework subclass construction in PybindAdaptors.h
Alex Zinenko [Wed, 19 Jan 2022 11:21:42 +0000 (12:21 +0100)]
[mlir] Rework subclass construction in PybindAdaptors.h

The constructor function was being defined without indicating its "__init__"
name, which made it interpret it as a regular fuction rather than a
constructor. When overload resolution failed, Pybind would attempt to print the
arguments actually passed to the function, including "self", which is not
initialized since the constructor couldn't be called. This would result in
"__repr__" being called with "self" referencing an uninitialized MLIR C API
object, which in turn would cause undefined behavior when attempting to print
in C++. Even if the correct name is provided, the mechanism used by
PybindAdaptors.h to bind constructors directly as "__init__" functions taking
"self" is deprecated by Pybind. The new mechanism does not seem to have access
to a fully-constructed "self" object (i.e., the constructor in C++ takes a
`pybind11::detail::value_and_holder` that cannot be forwarded back to Python).

Instead, redefine "__new__" to perform the required checks (there are no
additional initialization needed for attributes and types as they are all
wrappers around a C++ pointer). "__new__" can call its equivalent on a
superclass without needing "self".

Bump pybind11 dependency to 3.8.0, which is the first version that allows one
to redefine "__new__".

Reviewed By: stellaraccident

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

2 years ago[LLVM-C] Use NameLen in LLVMGetNamedGlobalAlias
Jakob Bornecrantz [Wed, 19 Jan 2022 16:48:28 +0000 (08:48 -0800)]
[LLVM-C] Use NameLen in LLVMGetNamedGlobalAlias

I tried to look over the file and didn't see any other non-use of *Len variables.

Reviewed By: deadalnix

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

2 years ago[PowerPC] Fix issue with strict float to int conversion.
Stefan Pintilie [Wed, 19 Jan 2022 15:33:18 +0000 (09:33 -0600)]
[PowerPC] Fix issue with strict float to int conversion.

When doing the float to int conversion the strict conversion also needs to
retun a chain. This patch fixes that.

Reviewed By: nemanjai, #powerpc, qiucf

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

2 years ago[gn build] port c22329972f02 (lldb REPL/Clang)
Nico Weber [Wed, 19 Jan 2022 16:31:00 +0000 (11:31 -0500)]
[gn build] port c22329972f02 (lldb REPL/Clang)

Fixes `lldb-shell :: REPL/Basic.test` in the gn build, making
check-lldb pass (on Linux) again.

2 years ago[OMPIRBuilder] Add support for simd (loop) directive.
Arnamoy Bhattacharyya [Wed, 19 Jan 2022 16:18:35 +0000 (11:18 -0500)]
[OMPIRBuilder] Add support for simd (loop) directive.

This patch adds OMPIRBuilder support for the simd directive (without any clause).  This will be a first step towards lowering simd directive in LLVM_Flang.  The patch uses existing CanonicalLoop infrastructure of IRBuilder to add the support.  Also adds necessary code to add llvm.access.group and llvm.loop metadata wherever needed.

Reviewed By: Meinersbur

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

2 years ago[clang][dataflow] Add a transfer function for conditional operator
Stanislav Gatev [Wed, 19 Jan 2022 13:56:21 +0000 (13:56 +0000)]
[clang][dataflow] Add a transfer function for conditional operator

This is part of the implementation of the dataflow analysis framework.
See "[RFC] A dataflow analysis framework for Clang AST" on cfe-dev.

Reviewed-by: xazax.hun
Differential Revision: https://reviews.llvm.org/D117667

2 years ago[gn build] link lldb-vscode against ws2_32.lib
Nico Weber [Wed, 19 Jan 2022 16:06:01 +0000 (11:06 -0500)]
[gn build] link lldb-vscode against ws2_32.lib

Necessary after aaa50e54e60fd6c4.

2 years agoFix the use of -fno-approx-func along with -Ofast or -ffast-math
Masoud Ataei [Wed, 19 Jan 2022 16:05:08 +0000 (08:05 -0800)]
Fix the use of -fno-approx-func along with -Ofast or -ffast-math

Fix how -fapprox-func interact correctly with the other floating point options.
Reported bug Number 52565: https://bugs.llvm.org/show_bug.cgi?id=52565

Differential: https://reviews.llvm.org/D114564
Reviewer: @andrew.w.kaylor

2 years ago[lit] Fix compatibility with upstream gtest
Lukáš Zaoral [Wed, 19 Jan 2022 16:01:18 +0000 (08:01 -0800)]
[lit] Fix compatibility with upstream gtest

Upstream gtest now prints 'Running main() from FILE' instead of
plain 'Running main() from gtest_main.cc'. Thus, all such tests
ended-up being mistakenly marked as UNRESOLVED.

Patch by @lzaoral

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

2 years ago[openmp][amdgpu] Remove xfail from test using declare target variable
Jon Chesterfield [Wed, 19 Jan 2022 15:55:09 +0000 (15:55 +0000)]
[openmp][amdgpu] Remove xfail from test using declare target variable

2 years ago[gn build] port b2a162e63bd73 (liblldb.dll)
Nico Weber [Wed, 19 Jan 2022 15:49:13 +0000 (10:49 -0500)]
[gn build] port b2a162e63bd73 (liblldb.dll)

This requires making liblldb a dll on Windows.
Things still work with a static lib on non-Windows, so keep it a
static lib there for now.

2 years ago[openmp][amdgpu] Disable tests on old runtime, enable tests on new one
Jon Chesterfield [Wed, 19 Jan 2022 15:49:47 +0000 (15:49 +0000)]
[openmp][amdgpu] Disable tests on old runtime, enable tests on new one

2 years agoAMDGPU/GlobalISel: Fix introducing f16 fmed3 for gfx8
Matt Arsenault [Wed, 19 Jan 2022 01:46:51 +0000 (20:46 -0500)]
AMDGPU/GlobalISel: Fix introducing f16 fmed3 for gfx8

2 years ago[lldb] Make StatsDuration thread-safe
Pavel Labath [Mon, 17 Jan 2022 14:04:30 +0000 (15:04 +0100)]
[lldb] Make StatsDuration thread-safe

std::chrono::duration types are not thread-safe, and they cannot be
concurrently updated from multiple threads. Currently, we were doing
such a thing (only) in the DWARF indexing code
(DWARFUnit::ExtractDIEsRWLocked), but I think it can easily happen that
someone else tries to update another statistic like this without
bothering to check for thread safety.

This patch changes the StatsDuration type from a simple typedef into a
class in its own right. The class stores the duration internally as
std::atomic<uint64_t> (so it can be updated atomically), but presents it
to its users as the usual chrono type (duration<float>).

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

2 years ago[openmp][amdgpu] Temporarily disable tests on old runtime
Jon Chesterfield [Wed, 19 Jan 2022 15:35:22 +0000 (15:35 +0000)]
[openmp][amdgpu] Temporarily disable tests on old runtime

2 years ago[LangRef] Mangle all vector operands in insert/extract intrinsics
Fraser Cormack [Wed, 19 Jan 2022 14:22:11 +0000 (14:22 +0000)]
[LangRef] Mangle all vector operands in insert/extract intrinsics

This better matches the canonical mangling of these intrinsics.

Reviewed By: peterwaller-arm

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

2 years agoAMDGPU/GlobalISel: Fix legalize failure on i65 ctpop
Matt Arsenault [Wed, 19 Jan 2022 00:31:34 +0000 (19:31 -0500)]
AMDGPU/GlobalISel: Fix legalize failure on i65 ctpop

2 years ago[AMDGPU] Simplify SILoadStoreOptimizer::getSubRegIdxs. NFC.
Jay Foad [Wed, 19 Jan 2022 15:18:42 +0000 (15:18 +0000)]
[AMDGPU] Simplify SILoadStoreOptimizer::getSubRegIdxs. NFC.

2 years agoGlobalISel: Fix assert on unmerge to different element of casted vector
Matt Arsenault [Thu, 13 Jan 2022 02:13:15 +0000 (21:13 -0500)]
GlobalISel: Fix assert on unmerge to different element of casted vector

This was failing if a G_UNMERGE_VALUES produced a different element
type than the cast result type.

2 years agoAMDGPU/GlobalISel: Introduce pseudo to copy sp in call sequences
Matt Arsenault [Wed, 12 Jan 2022 14:05:12 +0000 (09:05 -0500)]
AMDGPU/GlobalISel: Introduce pseudo to copy sp in call sequences

Arbitrary stack pointers are accessed using MUBUF instructions with
the voffset field, which is interpreted as the swizzled address. We
want to fold fold into the MUBUF form to use the SP in the SGPR
offset, and previously we were special casing the interpretation of
the pointer value if the access memory operand said it was relative to
the stack pointer.

690f5b7a0128a210093e9b217932743ad35b5c5a removed this check, and moved
the DAG path to special casing copies from SGPRs. This is not an
entirely sound approach, since it's still changing the interpretation
of pointer values based the context.

Introduce a new pseudo which corresponds to the wave-to-vector address
transform. This way the memory instruction has consistent semantics
where the incoming pointer is always interpreted as a vector address,
and we're not obligated to optimize into the MUBUF offset-only
addressing mode. The DAG should probably have an equivalent pseudo.

This should fix some correctness issues, and folding this into
addressing modes will be a future optimization patch.

2 years ago[clangd] NFC, emit source ranges in selection debug messages.
Haojian Wu [Wed, 19 Jan 2022 14:06:34 +0000 (15:06 +0100)]
[clangd] NFC, emit source ranges in selection debug messages.

It will make the output more versbose, but I found that these are useful
information when debugging selection tree.

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

2 years ago[MemCpyOpt] Test invalid noalias metadata after call slot opt (NFC)
Nikita Popov [Wed, 19 Jan 2022 14:50:32 +0000 (15:50 +0100)]
[MemCpyOpt] Test invalid noalias metadata after call slot opt (NFC)

2 years ago[MemCpyOpt] Add some debug output to call slot optimization (NFC)
Nikita Popov [Wed, 19 Jan 2022 14:41:16 +0000 (15:41 +0100)]
[MemCpyOpt] Add some debug output to call slot optimization (NFC)

2 years ago[LLDB] Adjust compiler-full-path.test for Windows/Arm64
TCWG [Tue, 9 Nov 2021 19:33:07 +0000 (19:33 +0000)]
[LLDB] Adjust compiler-full-path.test for Windows/Arm64

This patch updates compiler-full-path.test to make sure it passes on
Windows Arm64 platform with MSVC.

2 years ago[LoopFlatten] Move it from LPM2 to LPM1
Sjoerd Meijer [Wed, 19 Jan 2022 14:09:59 +0000 (14:09 +0000)]
[LoopFlatten] Move it from LPM2 to LPM1

In D110057 we moved LoopFlatten to a LoopPassManager. This caused a performance
regression for our 64-bit targets (the 32-bit were unaffected), the pass is no
longer triggering for a motivating example. The reason is that the IR is just
very different than expected; we try to match loop statements and particular
uses of induction variables. The easiest is to just move LoopFlatten to a place
in the pipeline where the IR is as expected, which is just before
IndVarSimplify. This means we move it from LPM2 to LPM1, so that it actually
runs just a bit earlier from where it was running before. IndVarSimplify is
responsible for significant rewrites that are difficult to "look through" in
LoopFlatten.

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

2 years agoRecommit "[LoopFlatten] Move it to a LoopPassManager"
Sjoerd Meijer [Wed, 19 Jan 2022 14:06:51 +0000 (14:06 +0000)]
Recommit "[LoopFlatten] Move it to a LoopPassManager"

This was reverted because of a performance regression, which is fixed by
D116612 that I will commit directly after this change.

This reverts commit e92d63b467e13227408f9726fbd66d07cc58811c.

2 years ago[LoopVectorize] Test in-loop reductions with tail folding for scalable vectors
Kerry McLaughlin [Wed, 19 Jan 2022 14:18:28 +0000 (14:18 +0000)]
[LoopVectorize] Test in-loop reductions with tail folding for scalable vectors

Adds `-prefer-inloop-reductions` to the RUN line of sve-tail-folding.ll & adds
a new test where in-loop reductions cannot be used (`@cond_xor_reduction`). NFC.

Reviewed By: david-arm

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

2 years ago[analyzer][NFC] Re-enable skipped SValTests by relaxing expectations
Balazs Benics [Wed, 19 Jan 2022 14:16:18 +0000 (15:16 +0100)]
[analyzer][NFC] Re-enable skipped SValTests by relaxing expectations

Some tests were skipped in D114454 to resolve test failures on some
platforms, where the pointers have different bitwidth than expected.
This patch re-enables these tests, by relaxing the requirements on the
types of the SVal.

The issue:
There is no way to reconstruct the type of the `SVal` perfectly
accurately, since there could be multiple types having the required
bitwidth and signedness.
Consider platforms where `int` and `long` have the same bitwidth.
Additionally, we need to be careful about casting a pointer to an
integral representation, because we don't know what smallest integral
type can represent that.

To workaround these issues, I propose enforcing a type that has the
same signedness and bitwidth as the expected type, instead of perfect
equality.

In the `GetLocAsIntType` test, in case of pointer-to-integral casts
I'm using the widest standard integral type (long long) to make sure
that the pointer can be represented by the type without losing
precision. This won't affect the test in any meaningful way, since the
type of the `lvalue` remained the same.

In one case, I had to replace `getUIntPtrType()` with `UnsignedLongTy`
because on some platforms `getUIntPtrType()` is different then `long
int`.

In this patch, I also enforce that the tests must compile without
errors, to prevent narrowing conversions in the future.

Reviewed By: stevewan

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

2 years ago[JITLink] Add RISCV label subtraction and addition relocations
luxufan [Fri, 7 Jan 2022 07:49:03 +0000 (15:49 +0800)]
[JITLink] Add RISCV label subtraction and addition relocations

This patch add RISCV label subtraction and addition relocations in JITLink

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

2 years ago[AArch64][SVE][VLS] Move extends into arguments of comparisons
David Truby [Tue, 16 Nov 2021 11:33:12 +0000 (11:33 +0000)]
[AArch64][SVE][VLS] Move extends into arguments of comparisons

When a comparison is extended and it would be free to extend the
arguments to that comparison, we can propagate the extend into those arguments.
This prevents extra instructions being generated to extend the result of the
comparison, which is not free to extend.

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

2 years ago[flang][NFC] Fix indentation
Valentin Clement [Wed, 19 Jan 2022 14:08:40 +0000 (15:08 +0100)]
[flang][NFC] Fix indentation

2 years ago[flang][NFC] Remove number of inlined elements
Valentin Clement [Wed, 19 Jan 2022 13:51:07 +0000 (14:51 +0100)]
[flang][NFC] Remove number of inlined elements

Following the recommendation just remove the specified number of
inlined elements since it is not well-motivated choice here.

2 years ago[flang][NFC] Fix includes order
Valentin Clement [Wed, 19 Jan 2022 13:32:48 +0000 (14:32 +0100)]
[flang][NFC] Fix includes order

2 years ago[mlir][linalg][bufferize][NFC] Move analysis-related code to Comprehensive Bufferize
Matthias Springer [Wed, 19 Jan 2022 13:19:31 +0000 (22:19 +0900)]
[mlir][linalg][bufferize][NFC] Move analysis-related code to Comprehensive Bufferize

The code in `BufferizableOpInterface`'s header/source no longer contains any analysis code. This makes it easier to run the bufferization with a different analysis or without any analysis.

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

2 years ago[clang-format] [docs] Fix link to avoid redirection. NFC.
Marek Kurdej [Wed, 19 Jan 2022 13:16:14 +0000 (14:16 +0100)]
[clang-format] [docs] Fix link to avoid redirection. NFC.

2 years ago[AVR] Do not clear r0 at interrupt entry
Ayke van Laethem [Thu, 6 Jan 2022 17:22:06 +0000 (18:22 +0100)]
[AVR] Do not clear r0 at interrupt entry

There is no reason to do this: it's a scratch register and can therefore
hold any arbitrary value. And because it is in an interrupt, this code
is performance critical so it should be as short as possible.

I believe r0 was cleared because of the following:

 1. There used to be a bug that the cleared register was r0, not r1 as
    it should have been.
 2. This was fixed in https://reviews.llvm.org/D99467, but left the code
    to clear r0.

This patch completes D99467 by removing the `clr r0` instruction.

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

2 years ago[AVR] Mark call-clobbered registers as clobbered in interrupt handlers
Ayke van Laethem [Mon, 3 Jan 2022 19:29:27 +0000 (20:29 +0100)]
[AVR] Mark call-clobbered registers as clobbered in interrupt handlers

I have matched the RISCV backend, which only uses the interrupt save
list in getCalleeSavedRegs, _not_ in getCallPreservedMask. I don't know
the details of these two methods, but with it, the correct amount of
registers is saved and restored.

Without this patch, practically all interrupt handlers that call a
function will miscompile.

I have added a test to verify this behavior. I've also added a very
simple test to verify that more normal interrupt operations (in this
case, incrementing a global value) behave as expected.

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

2 years ago[AVR] Remove redundant dynalloca SP save/restore pass
Ayke van Laethem [Tue, 2 Mar 2021 23:45:15 +0000 (00:45 +0100)]
[AVR] Remove redundant dynalloca SP save/restore pass

I think this pass was previously used under the assumption that most
functions would not need a frame pointer and it would be more efficient
to store the old stack pointer in a regular register pair.

Unfortunately, right now we're forced to always reserve the Y register
as a frame pointer: whether or not this is needed is only known after
regsiter allocation at which point it doesn't make sense anymore to mark
it as non-reserved. Therefore, it makes sense to use the Y register to
store the old stack pointer in functions with dynamic allocas (with a
variable size or not in the entry block). Knowing this can make the code
around dynamic allocas a lot simpler: simply save/restore the frame
pointer.

This is especially relevant in functions that have a frame pointer
anyway (for example, because they have stack spills). The stack restore
in the epilogue will implicitly restore the old stack pointer, so there
is no need to store the old stack pointer separately. It even reduces
register pressure as a side effect.

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

2 years ago[LLD][COFF] Support GNU style == aliases
Ayke van Laethem [Sun, 7 Nov 2021 15:46:29 +0000 (16:46 +0100)]
[LLD][COFF] Support GNU style == aliases

D46245 added support for this in llvm-libtool, but while lld-link can
also create .lib files from .def files it didn't support aliases.

I compared the Inputs/library.def test against the output from
llvm-libtool and it matches, except for the fact that lld-link reorders
functions for some reason.

I have also verified that this fixes a bug I was running into while
trying to compile .def files to .lib files in MinGW-w64 (using lld-link
instead of llvm-libtool).

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

2 years ago[bazel] Fix the python bindings for 7ceffae18c43
Benjamin Kramer [Wed, 19 Jan 2022 13:20:55 +0000 (14:20 +0100)]
[bazel] Fix the python bindings for 7ceffae18c43

Also run buildifier.

2 years ago[AST] Fix the incorrect auto-keyword loc for constrained auto type loc.
Haojian Wu [Wed, 19 Jan 2022 12:55:07 +0000 (13:55 +0100)]
[AST] Fix the incorrect auto-keyword loc for constrained auto type loc.

E.g.  `Concept auto Func();`

The nameLoc for the constained auto type loc pointed to the concept name
loc, it should be the auto token loc. This patch fixes it, and remove
a relevant hack in clang-tidy check.

Reviewed By: sammccall

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

2 years ago[bazel] Port 7ceffae18c43
Benjamin Kramer [Wed, 19 Jan 2022 13:14:36 +0000 (14:14 +0100)]
[bazel] Port 7ceffae18c43

2 years ago[clangd] Sort targets before printing for tests
Kadir Cetinkaya [Tue, 18 Jan 2022 10:03:20 +0000 (11:03 +0100)]
[clangd] Sort targets before printing for tests

Targets are not necessarily inserted in the order they appear in source
code. For example we could traverse overload sets, or selectively insert
template patterns after all other decls.
So order the targets before printing to make sure tests are not dependent on
such implementation details. We can also do it in production, but that might be
wasteful as we haven't seen any complaints in the wild around these orderings
yet.

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

2 years ago[mlir][linalg][bufferize][NFC] Split analysis-related code from BufferizationState...
Matthias Springer [Wed, 19 Jan 2022 09:58:36 +0000 (18:58 +0900)]
[mlir][linalg][bufferize][NFC] Split analysis-related code from BufferizationState/Options

This separates the analysis (and its helpers/data structures) more clearly from the rest of the bufferization.

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

2 years ago[mlir] Fix PDL python bindings build
Denys Shabalin [Wed, 19 Jan 2022 12:42:14 +0000 (13:42 +0100)]
[mlir] Fix PDL python bindings build

Fixes incorrect build definition for the bindings for the PDL dialect.

Reviewed By: ftynse

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

2 years ago[AMDGPU] Tweak some compares in wqm.ll test
Jay Foad [Wed, 19 Jan 2022 12:42:56 +0000 (12:42 +0000)]
[AMDGPU] Tweak some compares in wqm.ll test

This prevents the compares from being optimized away when D86578 lands,
which seems unintended. Also fixed some unused results.

2 years ago[NFC] Use Register instead of unsigned
Jim Lin [Wed, 19 Jan 2022 09:25:52 +0000 (17:25 +0800)]
[NFC] Use Register instead of unsigned

2 years ago[BuildLibCalls] Mark calloc as inaccessiblememonly
Nikita Popov [Wed, 19 Jan 2022 11:52:02 +0000 (12:52 +0100)]
[BuildLibCalls] Mark calloc as inaccessiblememonly

Now that DSE handles inaccessiblememonly calloc, mark it as such,
as we do with other memory allocation functions.

2 years ago[DSE] Handle inaccessiblememonly calloc
Nikita Popov [Tue, 18 Jan 2022 08:04:12 +0000 (09:04 +0100)]
[DSE] Handle inaccessiblememonly calloc

Change the DSE calloc handling to assume that it is
inaccessiblememonly, i.e. the defining access is liveOnEntry.

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

2 years ago[lldb] Introduce SBPlatform::SetSDKRoot
Pavel Labath [Tue, 18 Jan 2022 10:26:07 +0000 (11:26 +0100)]
[lldb] Introduce SBPlatform::SetSDKRoot

It complements the existing SBDebugger::SetCurrentPlatformSDKRoot and
allows one to set the sysroot of a platform without making it current.

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

2 years ago[lldb] Remove the requirement for windows clients to specify -DIMPORT_LIBLLDB
Pavel Labath [Tue, 18 Jan 2022 15:15:10 +0000 (16:15 +0100)]
[lldb] Remove the requirement for windows clients to specify -DIMPORT_LIBLLDB

This macro was being used to select the proper import/export annotations
on SB classes. Non-windows clients do not have such requirements.

Instead introduce a new macro (LLDB_IN_LIBLLDB), which signals that
we're compiling liblldb itself (and should use dllexport). The default
(no macro) is to use dllimport. I've moved the macro definition to
SBDefines.h, since it only makes sense when building the API library.

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

2 years ago[lldb] Fix NativeThreadLinux to build with older compilers
Pavel Labath [Wed, 19 Jan 2022 10:58:40 +0000 (11:58 +0100)]
[lldb] Fix NativeThreadLinux to build with older compilers

2 years ago[lldb] Fix D114722 for python<=3.6
Pavel Labath [Wed, 19 Jan 2022 10:59:19 +0000 (11:59 +0100)]
[lldb] Fix D114722 for python<=3.6

_Py_IsFinalizing was called _Py_Finalizing back then (and it was a
variable instead of a function).

2 years ago[X86] Add some missing dependency-breaking zero idiom patterns to scheduler models
Simon Pilgrim [Wed, 19 Jan 2022 11:29:07 +0000 (11:29 +0000)]
[X86] Add some missing dependency-breaking zero idiom patterns to scheduler models

Many of the x86 scheduler models are not accounting for their microarch's ability to handle dependency-breaking zero idioms (pxor xmm0,xmm0 etc.), which is causing some notable differences when comparing llvm-mca reports to iaca, uops.info etc.

These are based on the Intel AoMs and Agner's docs which list the instructions handled on each cpu model - there may be more, although tbh the xor/pxor/xorps/xorpd are by far the most commonly encountered.

Once this is in place we also need to review missing support for 'allones' idioms and reg-reg move elimination, but this needs fixing first.

@lebedev.ri The Barcelona test changes are due to the cpu still being tagged as using the SandyBridge model, if/when you get back to D63628 these will need to be addressed.

Based on an original patch by @andreadb (Andrea Di Biagio)

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

2 years ago[AttrBuilder] Change storage to sorted vector (NFC)
Nikita Popov [Sat, 15 Jan 2022 09:05:22 +0000 (10:05 +0100)]
[AttrBuilder] Change storage to sorted vector (NFC)

This follows up on the work in D116599, which changed AttrBuilder
to store string attributes as SmallVector<Attribute>. This patch
changes the implementation to store *all* attributes as a sorted
vector.

This both makes the implementation simpler and improves compile-time.
We get a -0.5% geomean compile-time improvement on CTMark at O0.

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

2 years ago[NFC] Add missing <map> includes
Nikita Popov [Wed, 19 Jan 2022 11:19:03 +0000 (12:19 +0100)]
[NFC] Add missing <map> includes

These were relying on a transitive include.

2 years ago[clang][AVR] Implement '__flashN' for variables on different flash banks
Ben Shi [Sat, 18 Dec 2021 05:51:45 +0000 (05:51 +0000)]
[clang][AVR] Implement '__flashN' for variables on different flash banks

Reviewed By: aykevl

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

2 years ago[Doc] Fix wrong indentation
Saiyedul Islam [Wed, 19 Jan 2022 11:13:46 +0000 (11:13 +0000)]
[Doc] Fix wrong indentation

Handle Sphinx's warning at line 218.

2 years ago[Attributes] Make attribute addition behavior consistent
Nikita Popov [Tue, 18 Jan 2022 10:55:28 +0000 (11:55 +0100)]
[Attributes] Make attribute addition behavior consistent

Currently, the behavior when adding an attribute with the same key
as an existing attribute is inconsistent, depending on the type of
the attribute and the method used to add it. When going through
AttrBuilder::addAttribute(), the new attribute always overwrites
the old one. When going through AttrBuilder::merge() the new
attribute overwrites the existing one if it is a string attribute,
but keeps the existing one for int and type attributes. One
particular API also asserts that you can't overwrite an align
attribute, but does not handle any of the other int, type or string
attributes.

This patch makes the behavior consistent by always overwriting with
the new attribute, which is the behavior I would intuitively expect.
Two tests are affected, which now make a different (but equally
valid) choice. Those tests could be improved by taking the maximum
deref bytes, but I haven't bothered with that, since this is testing
a degenerate case -- the important bit is that it doesn't crash.

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

2 years ago[LoopFlatten] Update MemorySSA state
Sjoerd Meijer [Wed, 5 Jan 2022 13:48:57 +0000 (13:48 +0000)]
[LoopFlatten] Update MemorySSA state

I would like to move LoopFlatten from LoopPass Manager LPM2 to LPM1 (D116612),
but that is a LPM that is using MemorySSA and so LoopFlatten needs to preserve
MemorySSA and this adds that. More specifically, LoopFlatten restructures the
CFG and with this change the MSSA state is updated accordingly, where we also
update the DomTree. LoopFlatten doesn't rewrite/optimise/delete load or store
instructions, so I have not added any MSSA updates for that.

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

2 years ago[IR] Remove NumElements tracking from GEP type iterator
Nikita Popov [Wed, 19 Jan 2022 10:47:27 +0000 (11:47 +0100)]
[IR] Remove NumElements tracking from GEP type iterator

After ed0cdb29397ecd7d03579b846360906081d80aea, this is no longer
used by anything, and shouldn't be used by anything.

2 years ago[Doc] Add documentation for the clang-offload-wrapper tool (NFC)
Saiyedul Islam [Wed, 12 Jan 2022 15:44:10 +0000 (15:44 +0000)]
[Doc] Add documentation for the clang-offload-wrapper tool (NFC)

Add the missing documentation for this tool.

Reviewed By: sdmitriev

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

2 years ago[Constants] Remove unused isGEPWithNoNotionalOverIndexing() method
Nikita Popov [Wed, 19 Jan 2022 10:36:40 +0000 (11:36 +0100)]
[Constants] Remove unused isGEPWithNoNotionalOverIndexing() method

Since d56b0ad441a34ae6c353c823969397b451f053a6, this method is
no longer used -- and shouldn't be used.

2 years ago[ConstantHoist] Remove check for notional overindexing
Nikita Popov [Thu, 13 Jan 2022 09:07:33 +0000 (10:07 +0100)]
[ConstantHoist] Remove check for notional overindexing

ConstantHoist currently only hoists GEPs if there is no notional
overindexing. As this transform only hoists address arithmetic,
it shouldn't care about whether any overindexing occurs or not.

There is one caveat: If the hoisted base GEP is inbounds, and a
later non-inbounds GEP is rewritten in terms of it, the value
may be incorrectly poisoned. To avoid this, restrict the transform
to inbounds GEPs for now, as the notional overindexing check
effectively did that as well. The inbounds restriction could be
dropped by dropping inbounds from the base GEP expression.

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

2 years ago[Attributor] Remove notional overindexing check
Nikita Popov [Thu, 13 Jan 2022 09:49:36 +0000 (10:49 +0100)]
[Attributor] Remove notional overindexing check

AAPointerInfo currently bails on constant expression GEPs with
notional overindexing. I don't think this is necessary, as the
following code handling GEPOperator will deal with arbitrary
indices appropriately.

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

2 years ago[mlir] Introduce Python bindings for the PDL dialect
Denys Shabalin [Thu, 13 Jan 2022 09:53:21 +0000 (10:53 +0100)]
[mlir] Introduce Python bindings for the PDL dialect

This change adds full python bindings for PDL, including types and operations
with additional mixins to make operation construction more similar to the PDL
syntax.

Reviewed By: ftynse

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

2 years ago[X86][AVX] LowerFunnelShift - improve FSHL/FSHR per-element lowering
Simon Pilgrim [Tue, 18 Jan 2022 20:48:54 +0000 (20:48 +0000)]
[X86][AVX] LowerFunnelShift - improve FSHL/FSHR per-element lowering

Similar to LowerRotate, see if we can either unpack or extend to a wider type and use that type's per-element shift instruction

2 years ago[libc++] Fix GDB pretty printers when GDB uses Python 2.7
Alex Richardson [Wed, 19 Jan 2022 09:53:41 +0000 (09:53 +0000)]
[libc++] Fix GDB pretty printers when GDB uses Python 2.7

The gdb_pretty_printer_test.sh fails if GDB was built against Python 2.7
since Python 2 expects iterators to have a next() method rather than
using __next__. To make the pretty printers work with both Python 2 and 3
we can simply set next to __next__ in the iterator classes.

Python 2.7 support was removed in f46f93b4786377dd7ee704ef2beedadfe4f05adf,
so this partially reverts that commit. While Python 2.7 is EOL, it
appears there are still many GDB installations that are linked against
Python 2.7, so we may want to keep this tiny amount of compat code
around for a while longer.

Without this commit the tests fails with errors such as:
```
GDB printed:
   u"std::tuple containingTypeError: iter() returned non-iterator of type '_Children'\n"
Value should match:
   u'std::tuple containing = {[1] = 2, [2] = 3, [3] = 4}'
```

Reviewed By: #libc, ldionne

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

2 years ago[VPlan] Assert can IV is only used by increments during epilogue vec.
Florian Hahn [Wed, 19 Jan 2022 10:09:46 +0000 (10:09 +0000)]
[VPlan] Assert can IV is only used by increments during epilogue vec.

After resetting the start value of the canonical IV, it might not be
canonical any more. Add an assertion to make sure it is only used by its
increment, to avoid potential mis-use. Suggested in D117140.

2 years agoRevert "Revert "[clang][dataflow] Add a test to justify skipping past references...
Stanislav Gatev [Wed, 19 Jan 2022 09:28:02 +0000 (09:28 +0000)]
Revert "Revert "[clang][dataflow] Add a test to justify skipping past references in UO_Deref""

This reverts commit a0262043bb87fdef68c817722de320a5dd9eb9c9.

Add the -fno-delayed-template-parsing arg to fix the failing test on Windows.

2 years ago[AMDGPU] Fix missing waitcnt issue
Piotr Sobczak [Mon, 17 Jan 2022 16:51:23 +0000 (17:51 +0100)]
[AMDGPU] Fix missing waitcnt issue

Ignore out of order counters when merging brackets. The fact that
there was a pending event in the old state does not guarantee that
the waitcnt was generated, so we still need to conservatively re-process
the block.

The patch fixes a correctness issue where the block was not re-processed
and the waitcnt not inserted in consequence.

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

2 years ago[mlir][linalg][bufferize][NFC] Merge AllocationCallbacks into BufferizationOptions
Matthias Springer [Wed, 19 Jan 2022 09:34:48 +0000 (18:34 +0900)]
[mlir][linalg][bufferize][NFC] Merge AllocationCallbacks into BufferizationOptions

Also move `createAlloc` and related helper functions out of BufferizationState. The goal is to make BufferizationState as small as possible. (Code cleanup)

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

2 years ago[mlir][linalg][bufferize] Generalize destination-passing style detection
Matthias Springer [Wed, 19 Jan 2022 07:46:24 +0000 (16:46 +0900)]
[mlir][linalg][bufferize] Generalize destination-passing style detection

If not allow-return-memref, raise an error if a new memory allocation is returned/yielded from a block. We do not check for new allocations directly, but for ops that yield/return values that are not equivalent to values that are defined outside of the current of the block.

Note: We still need to check that scf.for yield values and bbArgs are aliasing to ensure that getAliasingOpOperand/getAliasingOpResult is correct.

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

2 years ago[clang-format] Fix incorrect alignment of operator= overloads.
Elliott Maguire [Wed, 19 Jan 2022 08:31:21 +0000 (09:31 +0100)]
[clang-format] Fix incorrect alignment of operator= overloads.

Fixes https://github.com/llvm/llvm-project/issues/31568.

Added a check for operator keyword tokens.

Reviewed By: MyDeveloperDay, curdeius, owenpan, HazardyKnusperkeks

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

2 years ago[mlir][linalg][bufferize] Support scf.execute_region bufferization
Matthias Springer [Wed, 19 Jan 2022 07:45:54 +0000 (16:45 +0900)]
[mlir][linalg][bufferize] Support scf.execute_region bufferization

This op is needed for unit testing in a subsequent revision. (This is the first op that has a block that yields equivalent values via the op's results.)

Note: Bufferization of scf.execute_region ops with multiple blocks is not yet supported.

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

2 years ago[NFC][XCOFF] remove the tool name `yaml2obj` in the test.
esmeyi [Wed, 19 Jan 2022 09:11:21 +0000 (04:11 -0500)]
[NFC][XCOFF] remove the tool name `yaml2obj` in the test.

2 years ago[NFC][XCOFF] commit tests for D113552.
esmeyi [Wed, 19 Jan 2022 09:06:37 +0000 (04:06 -0500)]
[NFC][XCOFF] commit tests for D113552.

The code part of D113552 was committed at
817936408bad, where the test was left because
it depended on another patch.
There are no dependencies now.

2 years ago[AMDGPU] Tweak some compares in wave32.ll test
Jay Foad [Wed, 19 Jan 2022 08:13:46 +0000 (08:13 +0000)]
[AMDGPU] Tweak some compares in wave32.ll test

This prevents the compares from being optimized away when D86578 lands,
which seems unintended.

2 years ago[llvm-objcopy] Preserve ARM and AArch64 mapping symbols
Igor Kudrin [Wed, 19 Jan 2022 07:41:21 +0000 (14:41 +0700)]
[llvm-objcopy] Preserve ARM and AArch64 mapping symbols

Mapping symbols are required by ARM/AArch64 ELF ABI. They help to
disassemble files correctly and are also used in linkers. Nonetheless,
for executable files, the symbols can be stripped to better resemble
the behavior of GNU's objcopy.

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

2 years ago[ELF] Move SHT_REL/SHT_RELA handling from createInputSection to initializeSections
Fangrui Song [Wed, 19 Jan 2022 07:31:51 +0000 (23:31 -0800)]
[ELF] Move SHT_REL/SHT_RELA handling from createInputSection to initializeSections

This simplifies the code a bit. While here,

* change the `multiple relocation sections` diagnostic from `fatal` to `error` and include the relocated section name.
* drop less useful name from `getRelocTarget`. Without -r/--emit-relocs we don't need to get SHT_REL/SHT_RELA names.

2 years ago[mlir][tosa] Add tosa.clamp as no-op canonicalization
not-jenni [Wed, 19 Jan 2022 07:02:51 +0000 (23:02 -0800)]
[mlir][tosa] Add tosa.clamp as no-op canonicalization

When the min/max are the total range of the value, it is a no-op as the values
are already restricted to that range.

Reviewed By: rsuderman

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

2 years agoRevert "[clang][dataflow] Add a test to justify skipping past references in UO_Deref"
Stanislav Gatev [Wed, 19 Jan 2022 06:44:33 +0000 (06:44 +0000)]
Revert "[clang][dataflow] Add a test to justify skipping past references in UO_Deref"

This reverts commit 68226e572f41105446413b12ee95ab5540b2b6ac.

2 years ago[ELF] Simplify ObjFile<ELFT>::initializeSections. NFC
Fangrui Song [Wed, 19 Jan 2022 06:45:04 +0000 (22:45 -0800)]
[ELF] Simplify ObjFile<ELFT>::initializeSections. NFC

2 years agoFix GCC 5 MLIR Build (NFC)
Mehdi Amini [Wed, 19 Jan 2022 06:43:57 +0000 (06:43 +0000)]
Fix GCC 5 MLIR Build (NFC)

Try to fix the error:

mlir/lib/Parser/Parser.cpp:553:14: error: cannot call member function 'mlir::InFlightDiagnostic mlir::detail::Parser::emitError(llvm::SMLoc, const llvm::Twine&)' without object
              << "operation location alias was never defined";