platform/upstream/llvm.git
2 years ago[libc++] Disable local submodule visibility in the modules build
Louis Dionne [Thu, 10 Feb 2022 20:06:50 +0000 (15:06 -0500)]
[libc++] Disable local submodule visibility in the modules build

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

2 years ago[ConstraintElimination] Support add with precondition.
Florian Hahn [Fri, 11 Feb 2022 20:26:25 +0000 (20:26 +0000)]
[ConstraintElimination] Support add with precondition.

If we can prove that an addition without wrap flags won't wrap, decompse
the operation.

Issue #48253

2 years agoFix build broken by missing empty line in SourceLevelDebugging.rst
YASHASVI KHATAVKAR [Fri, 11 Feb 2022 20:18:57 +0000 (15:18 -0500)]
Fix build broken by missing empty line in SourceLevelDebugging.rst

2 years ago[libcxx] Wrap [[no_unique_address]] in a macro, for clang-cl
Martin Storsjö [Thu, 10 Feb 2022 11:23:40 +0000 (13:23 +0200)]
[libcxx] Wrap [[no_unique_address]] in a macro, for clang-cl

This should silence all remaining clang-cl build warnings.

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

2 years ago[x86] add test for load ordering; NFC
Sanjay Patel [Fri, 11 Feb 2022 17:05:58 +0000 (12:05 -0500)]
[x86] add test for load ordering; NFC

This is reduced from a test that failed with D118376.
The C source is posted in issue #53695

2 years ago[x86] scrub less memory ops in test; NFC
Sanjay Patel [Thu, 10 Feb 2022 20:18:46 +0000 (15:18 -0500)]
[x86] scrub less memory ops in test; NFC

The addresses matter - we want to verify the splitting
and order of the memops.

2 years ago[libc++][NFC] Work around false positive ODR violations from ASan.
Konstantin Varlamov [Fri, 11 Feb 2022 19:56:29 +0000 (11:56 -0800)]
[libc++][NFC] Work around false positive ODR violations from ASan.

This works around a known issue in ASan. ASan doesn't instrument weak
symbols. Because instrumentation increases object size, the binary can
end up with two versions of the same object, one instrumented and one
not instrumented, with different sizes, which ASan will report as an ODR
violation. In libc++, this affects typeinfo for `std::bad_function_call`
which is emitted as a weak symbol in the test executable and as a strong
symbol in the shared library.

The main open issue for ASan appears to be
https://github.com/google/sanitizers/issues/1017.

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

2 years ago[MSan][OpaquePtr] Use inline asm elementtype instead of getPointerElementType()
Arthur Eubanks [Fri, 11 Feb 2022 19:50:11 +0000 (11:50 -0800)]
[MSan][OpaquePtr] Use inline asm elementtype instead of getPointerElementType()

2 years ago[Sanitizers] Fix build broken by missing import.
Florian Mayer [Fri, 11 Feb 2022 19:27:24 +0000 (11:27 -0800)]
[Sanitizers] Fix build broken by missing import.

2 years agohwasan: fix up includes
Dmitry Vyukov [Fri, 11 Feb 2022 19:35:17 +0000 (20:35 +0100)]
hwasan: fix up includes

Fix up includes after 595d340dceca
("sanitizer_common: make internal/external headers compatible").

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

2 years agoAdding DiBuilder interface for assumed length strings
YASHASVI KHATAVKAR [Fri, 11 Feb 2022 19:38:50 +0000 (14:38 -0500)]
Adding DiBuilder interface for assumed length strings

2 years ago[SCEVPredicate] Remove getExpr mechanism [NFC]
Philip Reames [Fri, 11 Feb 2022 19:34:30 +0000 (11:34 -0800)]
[SCEVPredicate] Remove getExpr mechanism [NFC]

This mechanism was used for a couple of purposes, but the primary one was keeping track of which predicates in a union might apply to an expression.  As these sets are small and agressively deduped, this has little value.

2 years ago[OpaquePtr][SPARC] Remove getPointerElementType() call in SparcISelLowering
Arthur Eubanks [Fri, 11 Feb 2022 19:30:42 +0000 (11:30 -0800)]
[OpaquePtr][SPARC] Remove getPointerElementType() call in SparcISelLowering

Requires keeping better track of sret types.

2 years ago[flang] Upstream fix to allocmem codegen to deal with missing dimensions
Eric Schweitz [Fri, 11 Feb 2022 02:40:13 +0000 (18:40 -0800)]
[flang] Upstream fix to allocmem codegen to deal with missing dimensions
for sequence of character types.

Upstream type test. Upstream test. Fix tests.

Do not run on windows, as that is not an implemented target.

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

2 years ago[NFC] [MTE] Use helpers for stack tagging.
Florian Mayer [Fri, 11 Feb 2022 00:15:59 +0000 (16:15 -0800)]
[NFC] [MTE] Use helpers for stack tagging.

Reviewed By: eugenis

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

2 years ago[NFCI][SCEV] `SCEVTraversal`: if search terminated, don't push further ops of nary
Roman Lebedev [Fri, 11 Feb 2022 18:25:06 +0000 (21:25 +0300)]
[NFCI][SCEV] `SCEVTraversal`: if search terminated, don't push further ops of nary

Even if the search is marked as terminated after only looking at
the first operand, we'd still look at the remaining operands
before actually ending the search.

This seems pointless and wasteful, let's not do that.

2 years ago[SCEV] Generalize umin_seq matching
Roman Lebedev [Fri, 11 Feb 2022 17:34:46 +0000 (20:34 +0300)]
[SCEV] Generalize umin_seq matching

Since we don't greedily flatten `umin_seq(a, umin(b, c))` into `umin_seq(a, b, c)`,
just looking at the operands of the outer-level `umin` is not sufficient,
and we need to recurse into all same-typed `umin`'s.

2 years ago[SCEV] Recognize `x == 0 ? 0 : umin_seq(..., x, ...) -> umin_seq(x, umin_seq(....
Roman Lebedev [Fri, 11 Feb 2022 14:59:09 +0000 (17:59 +0300)]
[SCEV] Recognize `x == 0 ? 0 : umin_seq(..., x, ...)  ->  umin_seq(x, umin_seq(...))`

2 years ago[SCEV] Recognize `x == 0 ? 0 : umin(..., x, ...) -> umin_seq(x, umin(...))`
Roman Lebedev [Fri, 11 Feb 2022 14:52:11 +0000 (17:52 +0300)]
[SCEV] Recognize `x == 0 ? 0 : umin(..., x, ...)  ->  umin_seq(x, umin(...))`

That is the canonical expansion for umin_seq,
so we really should roundtrip it.

2 years ago[SCEV] `createNodeForSelectOrPHIInstWithICmpInstCond()`: generalize eq handling
Roman Lebedev [Fri, 11 Feb 2022 12:48:36 +0000 (15:48 +0300)]
[SCEV] `createNodeForSelectOrPHIInstWithICmpInstCond()`: generalize eq handling

The current logic was: https://alive2.llvm.org/ce/z/j8muXk
but in reality the offset to the Y in the 'true' hand
does not need to exist: https://alive2.llvm.org/ce/z/MNQ7DZ
https://alive2.llvm.org/ce/z/S2pMQD

To catch that, instead of computing the Y's in both
hands and checking their equality, compute Y and C,
and check that C is 0 or 1.

2 years ago[NFC][SCEV] `createNodeForSelectOrPHIInstWithICmpInstCond()`: dedup eq/ne pred handling
Roman Lebedev [Fri, 11 Feb 2022 12:25:47 +0000 (15:25 +0300)]
[NFC][SCEV] `createNodeForSelectOrPHIInstWithICmpInstCond()`: dedup eq/ne pred handling

2 years ago[NFC][SCEV] Add test more tests for umin_seq recognition
Roman Lebedev [Fri, 11 Feb 2022 15:02:47 +0000 (18:02 +0300)]
[NFC][SCEV] Add test more tests for umin_seq recognition

2 years ago[NFC][SCEV] Add some tests for select->umax recognition
Roman Lebedev [Fri, 11 Feb 2022 12:22:12 +0000 (15:22 +0300)]
[NFC][SCEV] Add some tests for select->umax recognition

Apparently we didn't have any tests for that codepath?

2 years ago[X86] Replace X86ISD::AVG with generic ISD::AVGCEILU
David Green [Fri, 11 Feb 2022 18:57:18 +0000 (18:57 +0000)]
[X86] Replace X86ISD::AVG with generic ISD::AVGCEILU

Pulled out of D106237, this replaces the X86ISD::AVG DAG node with the
generic ISD::AVGCEILU. It doesn't remove the detectAVGPattern method,
but the extra generic ISel matching does alter the existing test.

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

2 years ago[hwasan] keep debug intrinsicts in AllocaInfo.
Florian Mayer [Thu, 10 Feb 2022 23:57:47 +0000 (15:57 -0800)]
[hwasan] keep debug intrinsicts in AllocaInfo.

Reviewed By: eugenis

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

2 years ago[flang] Allow mixed association of procedure pointers and targets
Peter Steinfeld [Thu, 10 Feb 2022 03:46:34 +0000 (19:46 -0800)]
[flang] Allow mixed association of procedure pointers and targets

Section 10.2.2.4, paragraph 3 states that a procedure pointer with an explicit
interface must have the same characteristics as its target.  Previously, we
interpreted this as disallowing such pointers to point to procedures with
implicit interfaces.  But several other compilers allow this.

We make an exception for the case where the explicit interface cannot be
called via an implicit interface.

This change makes us allow this, also

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

2 years ago[lld/coff] Make lld-link work in a non-MSVC shell, add /winsysroot:
Peter Kasting [Fri, 11 Feb 2022 18:45:58 +0000 (13:45 -0500)]
[lld/coff] Make lld-link work in a non-MSVC shell, add /winsysroot:

Makes lld-link work in a non-MSVC shell by autodetecting MSVC toolchain. Also
adds support for /winsysroot and a few other switches.

All this is done by refactoring to share code with clang-cl's existing support
for the same.

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

2 years ago[gn build] Manually port c7eb84634519e6497
Arthur Eubanks [Fri, 11 Feb 2022 18:51:52 +0000 (10:51 -0800)]
[gn build] Manually port c7eb84634519e6497

Since the bot is broken due to hwasan issues, it's not auto updating the file lists.

2 years ago[nfc] [hwasan] factor out logic to collect info about stack
Florian Mayer [Thu, 3 Feb 2022 19:56:42 +0000 (11:56 -0800)]
[nfc] [hwasan] factor out logic to collect info about stack

this is the first step in unifying some of the logic between hwasan and
mte stack tagging. this only moves around code, changes to converge
different implementations of the same logic follow later.

Reviewed By: eugenis

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

2 years ago[RGT] Refactor environment-specific checks to use GTEST_SKIP()
Paul Robinson [Fri, 11 Feb 2022 18:43:22 +0000 (10:43 -0800)]
[RGT] Refactor environment-specific checks to use GTEST_SKIP()

This allows using GTEST_SKIP() to identify un-executed tests.

Found by the Rotten Green Tests project.

2 years ago[RGT] Refactor Windows-specific checks into their own test
Paul Robinson [Fri, 11 Feb 2022 18:42:38 +0000 (10:42 -0800)]
[RGT] Refactor Windows-specific checks into their own test

This allows using GTEST_SKIP() to identify un-executed tests.

Found by the Rotten Green Tests project.

2 years ago[RGT] Exercise both paths through a test
Paul Robinson [Fri, 11 Feb 2022 18:41:24 +0000 (10:41 -0800)]
[RGT] Exercise both paths through a test

BitcastToGEP had an opaque/typed pointer decision point, make sure it
exercises both sides.

Found by the Rotten Green Tests project.

2 years ago[OpenMP][FIX] The `llvm.amdgcn.s.barrier` is actually not aligned
Johannes Doerfert [Fri, 11 Feb 2022 18:22:51 +0000 (12:22 -0600)]
[OpenMP][FIX] The `llvm.amdgcn.s.barrier` is actually not aligned

If we assume `llvm.amdgcn.s.barrier` is aligned we may remove it and
cause OpenMP GPU applications on the AMD GPU to be stuck or wrongly
synchronized.

Reported by Carlo Bertolli.

2 years ago[clang][OpaquePtr] Remove call to getPointerElementType() in CodeGenModule::GetAddrOf...
Arthur Eubanks [Fri, 11 Feb 2022 18:39:26 +0000 (10:39 -0800)]
[clang][OpaquePtr] Remove call to getPointerElementType() in CodeGenModule::GetAddrOfGlobalTemporary()

2 years agosanitizer_common: make internal/external headers compatible
Dmitry Vyukov [Fri, 11 Feb 2022 15:11:23 +0000 (16:11 +0100)]
sanitizer_common: make internal/external headers compatible

This is a follow up to 4f3f4d672254
("sanitizer_common: fix __sanitizer_get_module_and_offset_for_pc signature mismatch")
which fixes a similar problem for msan build.

I am getting the following error compiling a unit test for code that
uses sanitizer_common headers and googletest transitively includes
sanitizer interface headers:

In file included from third_party/gwp_sanitizers/singlestep_test.cpp:3:
In file included from sanitizer_common/sanitizer_common.h:19:
sanitizer_interface_internal.h:41:5: error: typedef redefinition with different types
('struct __sanitizer_sandbox_arguments' vs 'struct __sanitizer_sandbox_arguments')
  } __sanitizer_sandbox_arguments;
common_interface_defs.h:39:3: note: previous definition is here
} __sanitizer_sandbox_arguments;

Reviewed By: melver

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

2 years ago[PSE] Allow duplicate predicates in debug output
Philip Reames [Fri, 11 Feb 2022 18:37:39 +0000 (10:37 -0800)]
[PSE] Allow duplicate predicates in debug output

This lets us avoid redundant implication work in the constructor of SCEVUnionPredicate which simplifies an upcoming change.  If we're actually building a predicate via PSE, that goes through addPredicate which does include the implication check.

2 years ago[X86] combineVSelectToBLENDV - handle vselect(vXi1,A,B) -> blendv(sext(vXi1),A,B)
Simon Pilgrim [Fri, 11 Feb 2022 18:38:07 +0000 (18:38 +0000)]
[X86] combineVSelectToBLENDV - handle vselect(vXi1,A,B) -> blendv(sext(vXi1),A,B)

For pre-AVX512 targets, attempt to sign-extend a vXi1 condition mask to pass to a X86ISD::BLENDV node

Fixes Issue #53760

2 years ago[AMDGPU] Merge AMDGPULDSUtils into AMDGPUMemoryUtils
Stanislav Mekhanoshin [Fri, 11 Feb 2022 00:30:10 +0000 (16:30 -0800)]
[AMDGPU] Merge AMDGPULDSUtils into AMDGPUMemoryUtils

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

2 years ago[ISel] Port AArch64 HADD and RHADD to ISel
David Green [Fri, 11 Feb 2022 18:28:56 +0000 (18:28 +0000)]
[ISel] Port AArch64 HADD and RHADD to ISel

This ports the aarch64 combines for HADD and RHADD over to DAG combine,
so that they can be used in more architectures (notably MVE in a
followup patch). They are renamed to AVGFLOOR and AVGCEIL in the
process, to avoid confusion with instructions such as X86 hadd. The code
was also rewritten slightly to remove the AArch64 idiosyncrasies.

The general pattern for a AVGFLOORS is
  %xe = sext i8 %x to i32
  %ye = sext i8 %y to i32
  %a = add i32 %xe, %ye
  %r = lshr i32 %a, 1
  %t = trunc i32 %r to i8

An AVGFLOORU is equivalent with zext. Because of the truncate
lshr==ashr, as the top bits are not demanded. An AVGCEIL also includes
an extra rounding, so includes an extra add of 1.

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

2 years ago[AlwaysInliner] Respect noinline call site attribute
Dávid Bolvanský [Fri, 11 Feb 2022 18:22:51 +0000 (19:22 +0100)]
[AlwaysInliner] Respect noinline call site attribute

```
always_inline foo() { }

bar () {

noinline foo();
}
```

We should prefer call site attribute over attribute on decl. This is fix for AlwaysInliner, similar fix is needed for normal Inliner (follow up).

Related to https://reviews.llvm.org/D119061

Reviewed By: aeubanks

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

2 years ago[CodeView] Match any backend version in the new test
Reid Kleckner [Fri, 11 Feb 2022 18:20:10 +0000 (10:20 -0800)]
[CodeView] Match any backend version in the new test

This makes the test pass for any LLVM_VERSION_MAJOR/MINOR value. Vendors
override these, and they change every six months.

2 years ago[libc++] Remove __functional_base
Nikolas Klauser [Fri, 11 Feb 2022 18:15:18 +0000 (19:15 +0100)]
[libc++] Remove __functional_base

Reviewed By: ldionne, Quuxplusone, #libc

Spies: Mordante, mgorny, libcxx-commits, arichardson, llvm-commits, arphaman

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

2 years agoRevert "StackProtector: ignore debug insts when splitting blocks."
Tim Northover [Fri, 11 Feb 2022 18:06:28 +0000 (18:06 +0000)]
Revert "StackProtector: ignore debug insts when splitting blocks."

This reverts commit 7605ca85f1a8e4e61e7de98856630d67da11aaae.

It caused an assertion failure in Fuschia.

2 years ago[InferAddressSpaces] Fix assert on invalid cast ordering
Austin Kerbow [Fri, 11 Feb 2022 06:43:45 +0000 (22:43 -0800)]
[InferAddressSpaces] Fix assert on invalid cast ordering

If a cast is needed when replacing uses with newly created values, the
cast must be inserted after the instruction that defines the new value.

Fixes: SWDEV-321215

Reviewed By: arsenm

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

2 years ago[CoroFrame][OpaquePtr] Remove getPointerElementType() call
Arthur Eubanks [Fri, 11 Feb 2022 17:52:44 +0000 (09:52 -0800)]
[CoroFrame][OpaquePtr] Remove getPointerElementType() call

Get it from the byval type instead.

2 years ago[Hexagon] Add patterns for select(i1, Q, Q)
Krzysztof Parzyszek [Fri, 11 Feb 2022 17:19:00 +0000 (09:19 -0800)]
[Hexagon] Add patterns for select(i1, Q, Q)

2 years ago[gn build] Port 31f9519d48c2
LLVM GN Syncbot [Fri, 11 Feb 2022 17:36:54 +0000 (17:36 +0000)]
[gn build] Port 31f9519d48c2

2 years ago[mlir][bufferize] Use rewriter instead of replacing all uses directly
Matthias Springer [Fri, 11 Feb 2022 17:31:00 +0000 (02:31 +0900)]
[mlir][bufferize] Use rewriter instead of replacing all uses directly

This is important for compatibility with DialectConversion.

2 years ago[RISCV] Insert VSETVLI at the end of a basic block if we didn't produce BlockInfo...
Craig Topper [Fri, 11 Feb 2022 05:33:08 +0000 (21:33 -0800)]
[RISCV] Insert VSETVLI at the end of a basic block if we didn't produce BlockInfo.Exit.

This is an alternative to D118667 that instead of fixing the store
to match phase 1, it tries to detect the mismatch with the expected
value at the end of the block. This inserts a vsetvli after the vse
to satisfy the requirement of the other basic block.

We still have serious design issues in the pass, that is going to
require some rethinking.

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

2 years agoRevert "[RISCV] Fix a vsetvli insertion bug involving loads/stores." and "[RISCC...
Craig Topper [Fri, 11 Feb 2022 05:03:12 +0000 (21:03 -0800)]
Revert "[RISCV] Fix a vsetvli insertion bug involving loads/stores." and "[RISCC] Add missing words to comment. NFC"

This reverts commit f943c58cae2480755cecdac5be832274f238df93.
and commit 7eb781072744b31a60e82b5a5903471032d4845f.

This introduced a new bug that appears to be easier to hit.

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

2 years ago[RISCV] Add test case for a vsetvli insertion bug found after D118667.
Craig Topper [Thu, 10 Feb 2022 21:55:29 +0000 (13:55 -0800)]
[RISCV] Add test case for a vsetvli insertion bug found after D118667.

We're missing a vsetvli before a vse after a redsum in this test.

This appears to be because the vmv.s.x has a VL of 1, but did not
trigger a vsetvli because it is a scalar move op and any non-zero
VL would work. So it looked at it the predecessors and decided it was
that they all had a non-zero vl. Then the redsum was visited, it
also took the VL from the predecessors since the vmv.s.x and the 4
was found compatible.

Finally we visit the vse and it looks at the BBLocalInfo and sees
that is compatible because it contains a VL of 1 from the vmv.s.x,
the first instruction in the block. BBLocalInfo was not updated
when the vredsum was visited because BBLocalInfo was valid and no
vsetvli was generated.

I think fundamentally the vmv.s.x optimization has the same first
phase and third phase not matching problem that D118667 was trying
to fix for stores.

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

2 years ago[M68k] Adopt the new VarLenCodeEmitterGen for arithmetic instructions
Min-Yih Hsu [Mon, 6 Dec 2021 03:36:10 +0000 (11:36 +0800)]
[M68k] Adopt the new VarLenCodeEmitterGen for arithmetic instructions

This patch refactors all the existing M68k arithmetic instructions
to use the new VarLenCodeEmitterGen infrastructure.

This patch is tested by the existing MC test cases.

Note that one of the codegen tests needed to be updated because the
ordering of two equivalent instructions were switched.

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

2 years ago[TableGen][CodeEmitter] Introducing the VarLenCodeEmitterGen infrastructure
Min-Yih Hsu [Mon, 6 Dec 2021 03:01:17 +0000 (11:01 +0800)]
[TableGen][CodeEmitter] Introducing the VarLenCodeEmitterGen infrastructure

Full write up:
https://gist.github.com/mshockwave/66e98d099256deefc062633909bb7b5b

The existing CodeEmitterGen infrastructure is unable to generate encoder
function for ISAs with variable-length instructions. This patch
introduces a new infrastructure to support variable-length instruction
encoding, including a new TableGen syntax for writing instruction
encoding directives and a new TableGen backend component,
VarLenCodeEmitterGen, built on top of CodeEmitterGen.

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

2 years ago[TableGen][AMDGPU] Allow empty register classes
Jay Foad [Fri, 11 Feb 2022 14:07:15 +0000 (14:07 +0000)]
[TableGen][AMDGPU] Allow empty register classes

Remove ARTIFICIAL_VGPR which only existed to make VReg_1 not empty.

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

2 years ago[libc++] Remove unused include from ranges_swap_ranges.h
Joe Loser [Thu, 10 Feb 2022 23:11:39 +0000 (18:11 -0500)]
[libc++] Remove unused include from ranges_swap_ranges.h

`ranges_swap_ranges.h` includes `<type_traits>` but does not use anything from
it. So, remove the include.

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

2 years ago[AMDGPU] Make enable-flat-scratch a subtarget feature
Sebastian Neubauer [Fri, 11 Feb 2022 17:18:25 +0000 (18:18 +0100)]
[AMDGPU] Make enable-flat-scratch a subtarget feature

Use a subtarget feature instead of a command line argument to reduce
global state.
We want to enable flat scratch for graphics in some cases and this
doesn't work well with command line options.

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

2 years ago[AMDGPU] replace hostcall module flag with function attribute
Sameer Sahasrabuddhe [Fri, 11 Feb 2022 05:13:41 +0000 (10:43 +0530)]
[AMDGPU] replace hostcall module flag with function attribute

The module flag to indicate use of hostcall is insufficient to catch
all cases where hostcall might be in use by a kernel. This is now
replaced by a function attribute that gets propagated to top-level
kernel functions via their respective call-graph.

If the attribute "amdgpu-no-hostcall-ptr" is absent on a kernel, the
default behaviour is to emit kernel metadata indicating that the
kernel uses the hostcall buffer pointer passed as an implicit
argument.

The attribute may be placed explicitly by the user, or inferred by the
AMDGPU attributor by examining the call-graph. The attribute is
inferred only if the function is not being sanitized, and the
implictarg_ptr does not result in a load of any byte in the hostcall
pointer argument.

Reviewed By: jdoerfert, arsenm, kpyzhov

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

2 years ago[AMDGPU] Add a new intrinsic to control fp_trunc rounding mode
Julien Pages [Fri, 11 Feb 2022 17:00:09 +0000 (12:00 -0500)]
[AMDGPU] Add a new intrinsic to control fp_trunc rounding mode

Add a new llvm.fptrunc.round intrinsic to precisely control
the rounding mode when converting from f32 to f16.

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

2 years ago[ConstraintElimination] Add test for #48253.
Florian Hahn [Fri, 11 Feb 2022 17:07:13 +0000 (17:07 +0000)]
[ConstraintElimination] Add test for #48253.

Test from https://github.com/llvm/llvm-project/issues/48253.

2 years ago[CSSPGO] Do not recount callee samples when computing profile summary for nested...
Hongtao Yu [Fri, 11 Feb 2022 05:55:19 +0000 (21:55 -0800)]
[CSSPGO] Do not recount callee samples when computing profile summary for nested CS profile.

When generating nested CS profile with all calling contexts of a function duplicated into a base profile under `--generate-merged-base-profiles`, do not recount callee samples when computing profile summary. This fixes the profile summary mismatch between flat cs profile and nested cs profile, for both extbinary and text format.

Reviewed By: wenlei

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

2 years ago[Bazel] Document continuous and pre-merge testing
Geoffrey Martin-Noble [Fri, 11 Feb 2022 16:59:11 +0000 (08:59 -0800)]
[Bazel] Document continuous and pre-merge testing

2 years ago[SystemZ/z/OS] Add alias for XPLINK return
Kai Nacke [Fri, 11 Feb 2022 15:24:50 +0000 (10:24 -0500)]
[SystemZ/z/OS] Add alias for XPLINK return

The XPLINK return `b 2(7)` has size 4 bytes, while the Linux return
`br 7` only has size 2 bytes. Thus a new alias is required to have correct
instruction byte count. It also fixes the conditional return code.

Reviewed By: uweigand

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

2 years ago[X86] Move combineToExtendBoolVectorInReg before the select combines. NFC.
Simon Pilgrim [Fri, 11 Feb 2022 16:51:36 +0000 (16:51 +0000)]
[X86] Move combineToExtendBoolVectorInReg before the select combines. NFC.

Avoid the need for a forward declaration.

Cleanup prep for Issue #53760

2 years ago[libc++][format] LWG-3648 format should not print bool with 'c'
Mark de Wever [Wed, 9 Feb 2022 16:36:12 +0000 (17:36 +0100)]
[libc++][format] LWG-3648 format should not print bool with 'c'

Reviewed By: #libc, ldionne

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

2 years ago[libc++][format] LWG-3654 basic_format_context::arg(size_t) should be noexcept
Mark de Wever [Wed, 9 Feb 2022 16:36:12 +0000 (17:36 +0100)]
[libc++][format] LWG-3654 basic_format_context::arg(size_t) should be noexcept

Reviewed By: #libc, ldionne

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

2 years ago[X86] combineToExtendBoolVectorInReg - use explicit arguments. NFC.
Simon Pilgrim [Fri, 11 Feb 2022 16:39:56 +0000 (16:39 +0000)]
[X86] combineToExtendBoolVectorInReg - use explicit arguments. NFC.

Replace the *_EXTEND node with the raw operands, this will make it easier to use combineToExtendBoolVectorInReg for any boolvec extension combine.

Cleanup prep for Issue #53760

2 years ago[libc++][nfc] Add TEST_HAS_NO_CHAR8_T.
Mark de Wever [Wed, 2 Feb 2022 18:28:05 +0000 (19:28 +0100)]
[libc++][nfc] Add TEST_HAS_NO_CHAR8_T.

This avoids using an libc++ internal macro in our tests. This version
doesn't depend on the internal macro but redefines it.

Reviewed By: #libc, ldionne

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

2 years ago[gn build] Port 3b470d1ce992
LLVM GN Syncbot [Fri, 11 Feb 2022 16:20:57 +0000 (16:20 +0000)]
[gn build] Port 3b470d1ce992

2 years ago[libc++][ranges] Implement ranges::min_element
Nikolas Klauser [Fri, 11 Feb 2022 12:11:57 +0000 (13:11 +0100)]
[libc++][ranges] Implement ranges::min_element

Implement ranges::min_element

Reviewed By: Quuxplusone, Mordante, #libc

Spies: miscco, libcxx-commits, mgorny

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

2 years ago[gn build] Port 1e77b396ffe4
LLVM GN Syncbot [Fri, 11 Feb 2022 16:11:07 +0000 (16:11 +0000)]
[gn build] Port 1e77b396ffe4

2 years ago[InstCombine] Check source element type in gep of phi of gep fold
Nikita Popov [Fri, 11 Feb 2022 16:09:52 +0000 (17:09 +0100)]
[InstCombine] Check source element type in gep of phi of gep fold

2 years ago[libc++] Add ranges::in_fun_result
Nikolas Klauser [Fri, 11 Feb 2022 16:01:58 +0000 (17:01 +0100)]
[libc++] Add ranges::in_fun_result

Add `ranges::in_fun_result`

Reviewed By: Quuxplusone, #libc, var-const

Spies: CaseyCarter, var-const, libcxx-commits, mgorny

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

2 years ago[dexter] Don't generate results files by default
OCHyams [Fri, 11 Feb 2022 15:45:07 +0000 (15:45 +0000)]
[dexter] Don't generate results files by default

Dexter saves various files to a new results directory each time it is run
(including when it's run by lit tests) and there isn't a way to opt-out. This
patch reconfigures the behaviour to be opt-in by removing the default
`--results-directory` location. Now results are only saved if
`--results-directory` is specified.

Reviewed By: jmorse

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

2 years agoInferAddressSpaces: Fix assert on inferred source for inttoptr/ptrtoint
Matt Arsenault [Wed, 9 Feb 2022 00:22:00 +0000 (19:22 -0500)]
InferAddressSpaces: Fix assert on inferred source for inttoptr/ptrtoint

If we had some source value we could infer an address space from that
went through a ptrtoint/inttoptr pair, this would fail since bitcast
can't change the address space.

Fixes issue 53665.

2 years ago[PHITransAddr] Check GEP source element type
Nikita Popov [Fri, 11 Feb 2022 15:22:21 +0000 (16:22 +0100)]
[PHITransAddr] Check GEP source element type

It's not the same GEP if the source element type is different.

2 years ago[clang][sema] - remove CodeCompleter nullptr checks
Simon Pilgrim [Fri, 11 Feb 2022 15:09:32 +0000 (15:09 +0000)]
[clang][sema] - remove CodeCompleter nullptr checks

All paths have already dereferenced the CodeCompleter pointer in the ResultBuilder constructor

2 years ago[clang][sema] ActOnExplicitInstantiation - remove Prev nullptr check
Simon Pilgrim [Fri, 11 Feb 2022 15:08:31 +0000 (15:08 +0000)]
[clang][sema] ActOnExplicitInstantiation - remove Prev nullptr check

All paths have already dereferenced the Prev pointer

2 years ago[clang] RewriteModernObjC::SynthBlockInitExpr - remove block nullptr check
Simon Pilgrim [Fri, 11 Feb 2022 15:05:09 +0000 (15:05 +0000)]
[clang] RewriteModernObjC::SynthBlockInitExpr - remove block nullptr check

All paths have already dereferenced the block pointer

2 years ago[lld-macho][nfc] Rename %no_fatal_warnings_lld in tests
Jez Ng [Fri, 11 Feb 2022 15:06:38 +0000 (10:06 -0500)]
[lld-macho][nfc] Rename %no_fatal_warnings_lld in tests

... to use hyphens instead of underscores, making it consistent with
our other substitutions like %no-arg-lld and %lld-watchos.

Reviewed By: keith

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

2 years ago[clang] inheritance fix for nomerge attribute
Dávid Bolvanský [Fri, 11 Feb 2022 14:49:06 +0000 (15:49 +0100)]
[clang] inheritance fix for nomerge attribute

Discussed here: https://reviews.llvm.org/D119061#3310822

Reviewed By: aaron.ballman

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

2 years ago[OpenCL] Adjust diagnostic for subgroup support.
Anton Zabaznov [Fri, 11 Feb 2022 12:54:55 +0000 (15:54 +0300)]
[OpenCL] Adjust diagnostic for subgroup support.

OpenCL C 3.0 __opencl_c_subgroups feature is slightly different
then other equivalent features and extensions (fp64 and 3d image writes):
OpenCL C 3.0 device can support the extension but not the feature.
cl_khr_subgroups requires subgroup independent forward progress.

This patch adjusts the check which is used when translating language
builtins to check either the extension or feature is supported.

Reviewed By: Anastasia

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

2 years ago[pseudo] NFC, fix some typos.
Haojian Wu [Fri, 11 Feb 2022 14:34:40 +0000 (15:34 +0100)]
[pseudo] NFC, fix some typos.

2 years ago[OpenMP] libomp: fix bug in implementation of distribute construct.
AndreyChurbanov [Fri, 11 Feb 2022 14:34:26 +0000 (17:34 +0300)]
[OpenMP] libomp: fix bug in implementation of distribute construct.

Fixed mistaken iterations distribution between different target regions.

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

2 years ago[NFC][SLP] Set default parameter for Offset equal to zero
Anton Afanasyev [Fri, 11 Feb 2022 12:49:44 +0000 (15:49 +0300)]
[NFC][SLP] Set default parameter for Offset equal to zero

2 years ago[clang-format] Avoid multiple calls to FormatToken::getNextNonComment(). NFC.
Marek Kurdej [Fri, 11 Feb 2022 14:15:18 +0000 (15:15 +0100)]
[clang-format] Avoid multiple calls to FormatToken::getNextNonComment(). NFC.

2 years ago[clang-format] Mark FormatToken::getNextNonComment() nodiscard. NFC.
Marek Kurdej [Fri, 11 Feb 2022 13:19:59 +0000 (14:19 +0100)]
[clang-format] Mark FormatToken::getNextNonComment() nodiscard. NFC.

2 years ago[docs] Fix missing space in the GettingStarted documentation
Louis Dionne [Fri, 11 Feb 2022 14:17:33 +0000 (09:17 -0500)]
[docs] Fix missing space in the GettingStarted documentation

2 years ago[TableGen] Dump RC.Allocatable with -register-info-debug
Jay Foad [Fri, 11 Feb 2022 13:48:28 +0000 (13:48 +0000)]
[TableGen] Dump RC.Allocatable with -register-info-debug

2 years ago[test-release.sh] Add option to disable building clang-tools-extra during release...
Amy Kwan [Fri, 11 Feb 2022 07:06:25 +0000 (01:06 -0600)]
[test-release.sh] Add option to disable building clang-tools-extra during release testing.

This patch adds an option (no-clang-tools) to disable building clang-tools-extra when
performing release testing. Prior to this patch, clang-tools-extra was built by default,
but on some platforms (such as AIX), clang-tools-extra is not supported, and so we do
not normally build it. Furthermore, this change should not change the invocation for
targets that build clang-tools-extra normally.

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

2 years ago[InstCombine] Check source element type in phi of gep fold
Nikita Popov [Fri, 11 Feb 2022 13:25:09 +0000 (14:25 +0100)]
[InstCombine] Check source element type in phi of gep fold

Rather than checking that the type is the same (which is always
the case, given how these are part of the same phi) check that the
source element type is the same. With opaque pointers, this is no
longer implied.

2 years ago[RISCV] Add the policy operand for some masked RVV ternary IR intrinsics.
Zakk Chen [Fri, 11 Feb 2022 12:24:37 +0000 (04:24 -0800)]
[RISCV] Add the policy operand for some masked RVV ternary IR intrinsics.

Masked reduction intrinsics are specical cases which don't need to have policy
operand. The mask only affects which elements are read. It doesn't effect the
destination register.
The reduction intrinsics have a dedicated destination operand. If it
is undef, we use tail agnostic. If it not undef we use tail
undisturbed.

Co-Authored-by: Craig Topper <craig.topper@sifive.com>
Differential Revision: https://reviews.llvm.org/D117681

2 years ago[mlir][MemRef] Fix MemRefCopyOpLowering to use correct number of bytes
Adrian Kuegel [Fri, 11 Feb 2022 11:53:47 +0000 (12:53 +0100)]
[mlir][MemRef] Fix MemRefCopyOpLowering to use correct number of bytes

When lowering to memrefCopy call, the size for i1 type was calculated as 0.
Instead of using getTypeSizeInBits() and dividing by 8, we should just use getTypeSize().

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

2 years ago[OpenCL] Add support of language builtins for OpenCL C 3.0
Anton Zabaznov [Mon, 7 Feb 2022 12:45:42 +0000 (15:45 +0300)]
[OpenCL] Add support of language builtins for OpenCL C 3.0

OpenCL C 3.0 introduces optionality to some builtins, in particularly
to those which are conditionally supported with pipe, device enqueue
and generic address space features.

The idea is to conditionally support such builtins depending on the language options
being set for a certain feature. This allows users to define functions with names
of those optional builtins in OpenCL (as such names are not reserved).

Reviewed By: Anastasia

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

2 years ago[demangler] Adjust unqualified name parsing
Nathan Sidwell [Tue, 25 Jan 2022 20:23:31 +0000 (12:23 -0800)]
[demangler] Adjust unqualified name parsing

The unqualified name grammar includes <ctor-dtor-name>, but we handle
that specially in parseNestedName.  This is a little awkward.  We can
pass in the current scope and have parseUnqualifiedName deal with
cdtors too.  That also allows a couple of other simplifications:

1) parseUnqualifiedName can also build up the NestedName, when the
provided scope is non-null.  Which means ...

2) parseUnscopedName can pass a "std" scope in (and tailcall).

3) ... and also parseNestedName need not construct the nestedname itself.

4) also parseNestedName's detection of a cdtor-name doesn't have to
rule out a decomposition name anymore.

This change also makes adding module demangling more
straight-forwards, btw.

Reviewed By: ChuanqiXu

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

2 years ago[GVN] Store source element type for GEP expressions
Nikita Popov [Fri, 11 Feb 2022 12:01:17 +0000 (13:01 +0100)]
[GVN] Store source element type for GEP expressions

To avoid incorrectly merging GEPs with different source types
under opaque pointers.

To avoid increasing the Expression structure size, this reuses the
existing type member. The code does not rely on this to be the
expression result type, it's only used as a disambiguator.

2 years ago[AArch64][SVE] Fix selection failure caused by fp/int convert using non-Neon types
Bradley Smith [Thu, 10 Feb 2022 12:38:02 +0000 (12:38 +0000)]
[AArch64][SVE] Fix selection failure caused by fp/int convert using non-Neon types

Fixes: #53679

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

2 years ago[mlir][MemRef] Fix MemRefCastOpLowering for 32 bit index type.
Adrian Kuegel [Fri, 11 Feb 2022 10:45:47 +0000 (11:45 +0100)]
[mlir][MemRef] Fix MemRefCastOpLowering for 32 bit index type.

The lowering creates llvm.insertvalue with the rank value, so it needs to use
index type instead of 64 bit integer type. Otherwise, we get an error:

llvm.insertvalue' op Type mismatch: cannot insert 'i64' into '!llvm.struct<(i32, ptr<i8>)>'

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

2 years ago[MLIR][Presburger] normalizeDivisionByGCD: fix bug when constant term is negative
Arjun P [Fri, 11 Feb 2022 11:31:50 +0000 (17:01 +0530)]
[MLIR][Presburger] normalizeDivisionByGCD: fix bug when constant term is negative

Reviewed By: Groverkss

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

2 years ago[IR] Check GEP source type when comparing instructions
Nikita Popov [Fri, 11 Feb 2022 11:25:36 +0000 (12:25 +0100)]
[IR] Check GEP source type when comparing instructions

Two GEPs with same indices but different source type are not the
same.

Worth noting that FunctionComparator already handles this correctly.

2 years ago[clang][dataflow] Include terminator statements in buildStmtToBasicBlockMap
Stanislav Gatev [Thu, 10 Feb 2022 16:34:07 +0000 (16:34 +0000)]
[clang][dataflow] Include terminator statements in buildStmtToBasicBlockMap

This will be necessary later when we add support for evaluating logic
expressions such as && and ||.

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/D119447