platform/upstream/llvm.git
3 years ago[mlir][tosa] Add lowering to tosa.abs for integer cases
Rob Suderman [Mon, 3 May 2021 20:56:00 +0000 (13:56 -0700)]
[mlir][tosa] Add lowering to tosa.abs for integer cases

Integer case requires decomposing to simple LLVM operatons.

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

3 years ago[libc] Enable fmaf and fma on x86_64.
Siva Chandra Reddy [Thu, 13 May 2021 20:48:45 +0000 (20:48 +0000)]
[libc] Enable fmaf and fma on x86_64.

They require clang-11 or above for building and hence had to be disabled
as the bots did not have clang-11 or higher. Bots have now been upgraded
so we can enable these functions now.

3 years ago[CMake][ELF] Link libLLVM.so and libclang-cpp.so with -Bsymbolic-functions
Fangrui Song [Thu, 13 May 2021 20:44:57 +0000 (13:44 -0700)]
[CMake][ELF] Link libLLVM.so and libclang-cpp.so with -Bsymbolic-functions

llvm-dev message: https://lists.llvm.org/pipermail/llvm-dev/2021-May/150465.html

In an ELF shared object, a default visibility defined symbol is preemptible by
default. This creates some missed optimization opportunities.
-Bsymbolic-functions is more aggressive than our current -fvisibility-inlines-hidden
(present since 2012) as it applies to all function definitions.  It can

* avoid PLT for cross-TU function calls && reduce dynamic symbol lookup
* reduce dynamic symbol lookup for taking function addresses and optimize out GOT/TOC on x86-64/ppc64

In a -DLLVM_TARGETS_TO_BUILD=X86 build, the number of JUMP_SLOT decreases from 12716 to 1628, and the number of GLOB_DAT decreases from 1918 to 1313
The built clang with `-DLLVM_LINK_LLVM_DYLIB=on -DCLANG_LINK_CLANG_DYLIB=on` is significantly faster.
See the Linux kernel build result https://bugs.archlinux.org/task/70697

Note: the performance of -fno-semantic-interposition -Bsymbolic-functions
libLLVM.so and libclang-cpp.so is close to a PIE binary linking against
`libLLVM*.a` and `libclang*.a`. When the host compiler is Clang,
-Bsymbolic-functions is the major contributor.  On x86-64 (with GOTPCRELX) and
ppc64 ELFv2, the GOT/TOC relocations can be optimized.

Some implication:

Interposing a subset of functions is no longer supported.
(This is fragile on ELF and unsupported on Mach-O at all. For Mach-O we don't
use `ld -interpose` or `-flat_namespace`)

Compiling a program which takes the address of any LLVM function with
`{gcc,clang} -fno-pic` and expects the address to equal to the address taken
from libLLVM.so or libclang-cpp.so is unsupported. I am fairly confident that
llvm-project shouldn't have different behaviors depending on such pointer
equality (as we've been using -fvisibility-inlines-hidden which applies to
inline functions for a long time), but if we accidentally do, users should be
aware that they should not make assumption on pointer equality in `-fno-pic`
mode.

See more on https://maskray.me/blog/2021-05-09-fno-semantic-interposition

Reviewed By: phosek

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

3 years ago[OpenMP] Prevent Attributor from deleting functions in OpenMPOptCGSCC pass
Joseph Huber [Thu, 13 May 2021 19:54:22 +0000 (15:54 -0400)]
[OpenMP] Prevent Attributor from deleting functions in OpenMPOptCGSCC pass

Summary:
This patch prevents the Attributor instances made in the CGSCC pass from
deleting functions. This prevents the attributor from changing the call
graph while OpenMPOpt is working with it.

Reviewed By: jdoerfert

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

3 years ago[mlir][tosa] Add tosa.div integer lowering to linalg.generic.
natashaknk [Thu, 13 May 2021 20:15:57 +0000 (13:15 -0700)]
[mlir][tosa] Add tosa.div integer lowering to linalg.generic.

Lowering div elementwise op to the linalg dialect. Since tosa only supports integer division, that is the only version that is currently implemented.

Reviewed By: rsuderman

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

3 years ago[mlir][NFC] Add helper for common pattern of replaceAllUsesExcept
Sean Silva [Wed, 12 May 2021 21:59:12 +0000 (14:59 -0700)]
[mlir][NFC] Add helper for common pattern of replaceAllUsesExcept

This covers the extremely common case of replacing all uses of a Value
with a new op that is itself a user of the original Value.

This should also be a little bit more efficient than the
`SmallPtrSet<Operation *, 1>{op}` idiom that was being used before.

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

3 years ago[llvm-nm] Support the -V option, print that the tool is compatible with GNU nm
Martin Storsjö [Tue, 11 May 2021 06:19:52 +0000 (09:19 +0300)]
[llvm-nm] Support the -V option, print that the tool is compatible with GNU nm

This unlocks some codepaths in libtool.

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

3 years ago[libc][NFC] Instead of erroring, skip math targets with missing implementations.
Siva Chandra Reddy [Thu, 13 May 2021 19:22:11 +0000 (19:22 +0000)]
[libc][NFC] Instead of erroring, skip math targets with missing implementations.

Fixes Aarch64 bot.

3 years ago[libc] Add x86_64 implementations of double precision cos, sin and tan.
Siva Chandra Reddy [Wed, 12 May 2021 23:05:13 +0000 (23:05 +0000)]
[libc] Add x86_64 implementations of double precision cos, sin and tan.

The implementations use the x86_64 FPU instructions. These instructions
are extremely slow compared to a polynomial based software
implementation. Also, their accuracy falls drastically once the input
goes beyond 2PI. To improve both the speed and accuracy, we will be
taking the following approach going forward:
1. As a follow up to this CL, we will implement a range reduction algorithm
which will expand the accuracy to the entire double precision range.
2. After that, we will replace the HW instructions with a polynomial
implementation to improve the run time.

After step 2, the implementations will be accurate, performant and target
architecture independent.

Reviewed By: lntue

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

3 years ago[flang][OpenMP] Add semantic check for close nesting of `master` regions
Arnamoy Bhattacharyya [Thu, 13 May 2021 18:56:07 +0000 (14:56 -0400)]
[flang][OpenMP] Add semantic check for close nesting of `master` regions

This patch implements the following semantic check:
```
A master region may not be closely nested inside a work-sharing, loop, atomic, task, or taskloop region.
```

Adds a test case and also modifies a couple of existing test cases to include the check.

Reviewed By: kiranchandramohan

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

3 years ago[HIP] Clean up llvm intrinsics using __asm
Aaron En Ye Shi [Mon, 10 May 2021 18:20:42 +0000 (18:20 +0000)]
[HIP] Clean up llvm intrinsics using __asm

Instead of using inline asm, use clang builtins
for llvm intrinsics.

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

3 years ago[flang] Support legacy extension OPEN(ACCESS='APPEND')
peter klausler [Wed, 12 May 2021 19:03:21 +0000 (12:03 -0700)]
[flang] Support legacy extension OPEN(ACCESS='APPEND')

It should of course be POSITION='APPEND' but Sun Fortran
supported it on ACCESS=.

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

3 years ago[libcxx][docs] Add two locks: transform_view and take_view.
zoecarver [Thu, 13 May 2021 18:48:43 +0000 (11:48 -0700)]
[libcxx][docs] Add two locks: transform_view and take_view.

Assign myself both of these views.

3 years ago[libcxx][docs] Update the One Ranges PRoposal Status with open revisions.
zoecarver [Thu, 13 May 2021 18:45:22 +0000 (11:45 -0700)]
[libcxx][docs] Update the One Ranges PRoposal Status with open revisions.

1. Moves the names into the names column.
2. Changes the names to reflect who's actually working on what.
3. Adds open revisions.

3 years ago[AMDGPU] Add gfx1034 target
Aakanksha Patil [Thu, 13 May 2021 18:21:40 +0000 (14:21 -0400)]
[AMDGPU] Add gfx1034 target

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

3 years ago[clang-tidy] bugprone-infinite-loop: React to ObjC ivars and messages.
Artem Dergachev [Tue, 11 May 2021 23:44:49 +0000 (16:44 -0700)]
[clang-tidy] bugprone-infinite-loop: React to ObjC ivars and messages.

If the loop condition is a value of an instance variable, a property value,
or a message result value, it's a good indication that the loop is not infinite
and we have a really hard time proving the opposite so suppress the warning.

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

3 years ago[clang-tidy] bugprone-infinite-loop: forFunction() -> forCallable().
Artem Dergachev [Tue, 11 May 2021 03:09:32 +0000 (20:09 -0700)]
[clang-tidy] bugprone-infinite-loop: forFunction() -> forCallable().

Take advantage of the new ASTMatcher added in D102213 to fix massive false negatives of the infinite loop checker on Objective-C.

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

3 years ago[ASTMatchers] Add forCallable(), a generalization of forFunction().
Artem Dergachev [Wed, 12 May 2021 03:22:58 +0000 (20:22 -0700)]
[ASTMatchers] Add forCallable(), a generalization of forFunction().

The new matcher additionally covers blocks and Objective-C methods.

This matcher actually makes sure that the statement truly belongs
to that declaration's body. forFunction() incorrectly reported that
a statement in a nested block belonged to the surrounding function.

forFunction() is now deprecated due to the above footgun, in favor of
forCallable(functionDecl()) when only functions need to be considered.

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

3 years ago[ASTMatchers] NFC: Fix formatting around forFunction().
Artem Dergachev [Wed, 12 May 2021 03:21:26 +0000 (20:21 -0700)]
[ASTMatchers] NFC: Fix formatting around forFunction().

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

3 years ago[NFC] Delete two newly-added test cases
Roman Lebedev [Thu, 13 May 2021 18:22:38 +0000 (21:22 +0300)]
[NFC] Delete two newly-added test cases

Failing on bots in unobvious ways.

3 years ago[flang] (NFC) Expose internal idiom as utility API
peter klausler [Wed, 12 May 2021 19:10:28 +0000 (12:10 -0700)]
[flang] (NFC) Expose internal idiom as utility API

Add overloads to AsGenericExpr() in Evaluate/tools.h to take care
of wrapping an untyped DataRef or bare Symbol in a typed Designator
wrapped up in a generic Expr<SomeType>.  Use the new overloads to
replace a few instances of code that was calling TypedWrapper<>()
with a dynamic type.

This new tool will be useful in lowering to drive some code that
works with typed expressions (viz., list-directed I/O list items)
when starting with only a bare Symbol (viz., NAMELIST).

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

3 years ago[NFC] Try to fix CodeGenCXX/thunk-wrong-return-type.cpp test
Roman Lebedev [Thu, 13 May 2021 18:16:44 +0000 (21:16 +0300)]
[NFC] Try to fix CodeGenCXX/thunk-wrong-return-type.cpp test

3 years agoSupport unwinding from inline assembly
cynecx [Thu, 13 May 2021 18:05:11 +0000 (19:05 +0100)]
Support unwinding from inline assembly

I've taken the following steps to add unwinding support from inline assembly:

1) Add a new `unwind` "attribute" (like `sideeffect`) to the asm syntax:

```
invoke void asm sideeffect unwind "call thrower", "~{dirflag},~{fpsr},~{flags}"()
    to label %exit unwind label %uexit
```

2.) Add Bitcode writing/reading support + LLVM-IR parsing.

3.) Emit EHLabels around inline assembly lowering (SelectionDAGBuilder + GlobalISel) when `InlineAsm::canThrow` is enabled.

4.) Tweak InstCombineCalls/InlineFunction pass to not mark inline assembly "calls" as nounwind.

5.) Add clang support by introducing a new clobber: "unwind", which lower to the `canThrow` being enabled.

6.) Don't allow unwinding callbr.

Reviewed By: Amanieu

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

3 years ago[NFC] Try to fix CodeGenCXX/thunk-wrong-this.cpp test
Roman Lebedev [Thu, 13 May 2021 18:09:45 +0000 (21:09 +0300)]
[NFC] Try to fix CodeGenCXX/thunk-wrong-this.cpp test

3 years ago[PowerPC] Add ROP Protection to prologue and epilogue
Stefan Pintilie [Thu, 13 May 2021 14:58:59 +0000 (09:58 -0500)]
[PowerPC] Add ROP Protection to prologue and epilogue

Added hashst to the prologue and hashchk to the epilogue.
The hash for the prologue and epilogue must always be stored as the first
element in the local variable space on the stack.

Reviewed By: nemanjai, #powerpc

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

3 years ago[flang] Implement DOT_PRODUCT in the runtime
peter klausler [Wed, 12 May 2021 19:07:51 +0000 (12:07 -0700)]
[flang] Implement DOT_PRODUCT in the runtime

API, implementation, and basic tests for the transformational
reduction intrinsic function DOT_PRODUCT in the runtime support
library.

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

3 years agoModules: Simplify how DisableGeneratingGlobalModuleIndex is set, likely NFC
Duncan P. N. Exon Smith [Fri, 30 Apr 2021 22:23:47 +0000 (15:23 -0700)]
Modules: Simplify how DisableGeneratingGlobalModuleIndex is set, likely NFC

DisableGeneratingGlobalModuleIndex was being set by
CompilerInstance::findOrCompileModuleAndReadAST most of (but not all of)
the times it returned `nullptr` as a "normal" failure. Pull that up to
the caller, CompilerInstance::loadModule, to simplify the code. This
resolves a number of FIXMEs added during the refactoring in
5cca622310c10fdf6f921b6cce26f91d9f14c762.

The extra cases where this is set are all some version of a fatal error,
and the only client of the field, shouldBuildGlobalModuleIndex, seems
to be unreachable in that case. Even if there is some corner case where
this has an effect, it seems like the right/consistent behaviour.

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

3 years agoReturn "[CGCall] Annotate `this` argument with alignment"
Roman Lebedev [Thu, 13 May 2021 15:20:37 +0000 (18:20 +0300)]
Return "[CGCall] Annotate `this` argument with alignment"

The original change was reverted because it was discovered
that clang mishandles thunks, and they receive wrong
attributes for their this/return types - the ones for the function
they will call, not the ones they have.

While i have tried to fix this in https://reviews.llvm.org/D100388
that patch has been up and stuck for a month now,
with little signs of progress.

So while it will be good to solve this for real,
for now we can simply avoid introducing the bug,
by not annotating this/return for thunks.

This reverts commit 6270b3a1eafaba4279e021418c5a2c5a35abc002,
relanding 0aa0458f1429372038ca6a4edc7e94c96cd9a753.

3 years ago[Clang][Codegen] Do not annotate thunk's this/return types with align/deref/nonnull...
Roman Lebedev [Thu, 13 May 2021 11:48:26 +0000 (14:48 +0300)]
[Clang][Codegen] Do not annotate thunk's this/return types with align/deref/nonnull attrs

As it was discovered in post-commit feedback
for 0aa0458f1429372038ca6a4edc7e94c96cd9a753,
we handle thunks incorrectly, and end up annotating
their this/return with attributes that are valid
for their callees, not for thunks themselves.

While it would be good to fix this properly,
and keep annotating them on thunks,
i've tried doing that in https://reviews.llvm.org/D100388
with little success, and the patch is stuck for a month now.

So for now, as a stopgap measure, subj.

3 years ago[NFC][Clang][Codegen] Add tests with wrong attributes on this/return of thunks
Roman Lebedev [Thu, 13 May 2021 11:46:41 +0000 (14:46 +0300)]
[NFC][Clang][Codegen] Add tests with wrong attributes on this/return of thunks

From https://reviews.llvm.org/D100388

3 years ago[ARM] Constrain CMPZ shift combine to a single use
David Green [Thu, 13 May 2021 17:31:01 +0000 (18:31 +0100)]
[ARM] Constrain CMPZ shift combine to a single use

We currently prefer t2CMPrs over t2CMPri when the node contains a shift.
This can introduce more nodes if the shift has multiple uses though, as
value from the shift will be needed anyway, and in the case of a t2CMPri
compared with zero will more readily be removed entirely.

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

3 years ago[lldb] Fixup indirect symbols as they are signed.
Jonas Devlieghere [Thu, 13 May 2021 17:12:00 +0000 (10:12 -0700)]
[lldb] Fixup indirect symbols as they are signed.

This fixes a bunch of test failures in Apple Silicon (arm64e).

3 years ago[lldb] Fixup more code addresses
Jonas Devlieghere [Thu, 13 May 2021 16:41:09 +0000 (09:41 -0700)]
[lldb] Fixup more code addresses

The Swift async task pointers are signed on arm64e and we need to fixup
the addresses in the CFA and DWARF expressions.

3 years agoModules: Rename ModuleBuildFailed => DisableGeneratingGlobalModuleIndex, NFC
Duncan P. N. Exon Smith [Fri, 30 Apr 2021 22:09:09 +0000 (15:09 -0700)]
Modules: Rename ModuleBuildFailed => DisableGeneratingGlobalModuleIndex, NFC

Rename CompilerInstance's ModuleBuildFailed field to
DisableGeneratingGlobalModuleIndex, which more precisely describes its
role. Otherwise, it's hard to suss out how it's different from
ModuleLoader::HadFatalFailure, and what sort of code simplifications are
safe.

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

3 years ago[mlir][spirv] Define spv.ImageQuerySize operation
Weiwei Li [Thu, 13 May 2021 17:06:53 +0000 (13:06 -0400)]
[mlir][spirv] Define spv.ImageQuerySize operation

Support OpImageQuerySize in spirv dialect

co-authored-by: Alan Liu <alanliu.yf@gmail.com>

Reviewed By: antiagainst

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

3 years ago[analyzer][solver] Prevent use of a null state
Valeriy Savchenko [Tue, 11 May 2021 14:30:02 +0000 (17:30 +0300)]
[analyzer][solver] Prevent use of a null state

rdar://77686137

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

3 years ago[pstl] Use logical operator for loop condition in tests
zoecarver [Thu, 13 May 2021 17:09:15 +0000 (10:09 -0700)]
[pstl] Use logical operator for loop condition in tests

Fix a probable typo in two PSTL tests that causes warnings with GCC.

Patch by Jonathan Wakely (jwakely).

Reviewed By: zoecarver

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

3 years agoModules: Remove ModuleLoader::OtherUncachedFailure, NFC
Duncan P. N. Exon Smith [Fri, 30 Apr 2021 21:14:03 +0000 (14:14 -0700)]
Modules: Remove ModuleLoader::OtherUncachedFailure, NFC

5cca622310c10fdf6f921b6cce26f91d9f14c762 refactored
CompilerInstance::loadModule, splitting out
findOrCompileModuleAndReadAST, but was careful to avoid making any
functional changes. It added ModuleLoader::OtherUncachedFailure to
facilitate this and left behind FIXMEs asking why certain failures
weren't cached.

After a closer look, I think we can just remove this and simplify the
code. This changes the behaviour of the following (simplified) code from
CompilerInstance::loadModule, causing a failure to be cached more often:

```
  if (auto MaybeModule = MM.getCachedModuleLoad(*Path[0].first))
    return *MaybeModule;
  if (ModuleName == getLangOpts().CurrentModule)
    return MM.cacheModuleLoad(PP.lookupModule(...));
  ModuleLoadResult Result = findOrCompileModuleAndReadAST(...);
  if (Result.isNormal()) // This will be 'true' more often.
    return MM.cacheModuleLoad(..., Module);
  return Result;
```

`MM` here is a ModuleMap owned by the Preprocessor. Here are the cases
where `findOrCompileModuleAndReadAST` starts returning a "normal" failed
result:
- Emitted `diag::err_module_not_found`, where there's no module map
  found.
- Emitted `diag::err_module_build_disabled`, where implicitly building
  modules is disabled.
- Emitted `diag::err_module_cycle`, which detects module cycles in the
  implicit modules build system.
- Emitted `diag::err_module_not_built`, which avoids building a module
  in this CompilerInstance if another one tried and failed already.
- `compileModuleAndReadAST()` was called and failed to build.

The four errors are all fatal, and last item also reports a fatal error,
so it this extra caching has no functionality change... but even if it
did, it seems fine to cache these failed results within a ModuleMap
instance (note that each CompilerInstance has its own Preprocessor and
ModuleMap).

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

3 years ago[libcxx][ranges] Fix `ranges::empty` when begin, end, and empty members are provided.
zoecarver [Tue, 11 May 2021 18:14:26 +0000 (11:14 -0700)]
[libcxx][ranges] Fix `ranges::empty` when begin, end, and empty members are provided.

Before this commit, we'd get a compilation error because the operator() overload was ambiguous.

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

3 years ago[PowerPC] Add clang option -m[no-]prefixed
Lei Huang [Mon, 10 May 2021 20:20:16 +0000 (15:20 -0500)]
[PowerPC] Add clang option -m[no-]prefixed

Add user-facing front end option to turn off power10 prefixed instructions.

Reviewed By: nemanjai

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

3 years ago[libomptarget][amdgpu] Fix truncation error for partial wavefront
Jon Chesterfield [Thu, 13 May 2021 16:31:57 +0000 (17:31 +0100)]
[libomptarget][amdgpu] Fix truncation error for partial wavefront

[libomptarget][amdgpu] Fix truncation error for partial wavefront

The partial barrier implementation involves one wavefront resetting and N-1
waiting. This change future proofs against launching with a number of threads
that is not a multiple of the wavefront size.

Reviewed By: jdoerfert

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

3 years ago[libomptarget][amdgpu] Convert an assert to print and offload_fail
Jon Chesterfield [Thu, 13 May 2021 16:31:35 +0000 (17:31 +0100)]
[libomptarget][amdgpu] Convert an assert to print and offload_fail

[libomptarget][amdgpu] Convert an assert to print and offload_fail

The kernel launched is supposed to be present in the binary, but a not yet
diagnosed bug means it is missing for some of the qmcpack test cases. Changing
from assert to print and offload_fail should help diagnose that and similar bugs.

Reviewed By: jdoerfert

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

3 years ago[mlir] Add python test for shape dialect
Jacques Pienaar [Thu, 13 May 2021 16:13:47 +0000 (09:13 -0700)]
[mlir] Add python test for shape dialect

Add basic test for shape.const_shape op as start.

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

3 years ago[InstSimplify] Remove redundant {insert,extract}_vector intrinsic chains
Joe Ellis [Thu, 13 May 2021 15:50:06 +0000 (15:50 +0000)]
[InstSimplify] Remove redundant {insert,extract}_vector intrinsic chains

This commit removes some redundant {insert,extract}_vector intrinsic
chains by implementing the following patterns as instsimplifies:

   (insert_vector _, (extract_vector X, 0), 0) -> X
   (extract_vector (insert_vector _, X, 0), 0) -> X

Reviewed By: peterwaller-arm

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

3 years ago[OpenMP] Test unified shared memory tests only on systems that support it.
Michael Kruse [Thu, 13 May 2021 16:04:59 +0000 (11:04 -0500)]
[OpenMP] Test unified shared memory tests only on systems that support it.

Add a `REQUIRES: unified_shared_memory` option to tests that use `#pragma omp requires unified_shared_memory`.

For CUDA, the feature tag is derived from LIBOMPTARGET_DEP_CUDA_ARCH which itself is derived using [[ https://cmake.org/cmake/help/latest/module/FindCUDA.html#commands | cuda_select_nvcc_arch_flags ]]. The latter determines which compute capability the GPU in the system supports. To ensure that this is the CUDA arch being used, we could also set the `-Xopenmp-target -march=` flag.
In the absence of an NVIDIA GPU, LIBOMPTARGET_DEP_CUDA_ARCH will be 35. That is, in that case we are assuming unified_shared_memory is not available. CUDA plugin testing could be disabled entirely in this case, but this currently depends on `LIBOMPTARGET_CAN_LINK_LIBCUDA OR LIBOMPTARGET_FORCE_DLOPEN_LIBCUDA`, not on whether the hardware is actually available.

For all other targets, nothing changes and we are assuming unified shared memory is available. This might need refinement if not the case.

This tries to fix the [[ http://meinersbur.de:8011/#/builders/143 | OpenMP Offloading Buildbot ]] that, although brand-new, only has a Pascal-generation (sm_61) GPU installed. Hence, tests that require unified shared memory are currently failing. I wish I had known in advance.

Reviewed By: protze.joachim, tianshilei1992

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

3 years ago[AMDGPU] Only allow global fp atomics with unsafe option
Stanislav Mekhanoshin [Wed, 12 May 2021 18:35:12 +0000 (11:35 -0700)]
[AMDGPU] Only allow global fp atomics with unsafe option

Previously we were allowing to use FP atomics without
-amdgpu-unsafe-fp-atomics option if a scope is less then
system. This is not safe just as well if we have UC memory.

This change only allows global and flat FP atomics with
the unsafe option. Consequentially that makes a check for
denorm mode redundant since we skip it with the unsafe
option and do not have a way to produce these instructions
without it anyway.

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

3 years ago[HIP] Add __builtin_amdgcn_groupstaticsize
Aaron En Ye Shi [Wed, 12 May 2021 19:53:47 +0000 (19:53 +0000)]
[HIP] Add __builtin_amdgcn_groupstaticsize

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

3 years agoParse vector bool when stdbool.h and altivec.h are included
Zarko Todorovski [Thu, 13 May 2021 14:44:40 +0000 (10:44 -0400)]
Parse vector bool when stdbool.h and altivec.h are included

Currently when including stdbool.h and altivec.h declaration of `vector bool` leads to
errors due to `bool` being expanded to '_Bool`. This patch allows the parser
to recognize `_Bool`.

Reviewed By: hubert.reinterpretcast, Everybody0523

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

3 years ago[AArch64][SVE] Fix missed immediate selection due to mishandling of signedness
Bradley Smith [Tue, 4 May 2021 10:18:34 +0000 (11:18 +0100)]
[AArch64][SVE] Fix missed immediate selection due to mishandling of signedness

The complex selection pattern for add/sub shifted immediates is
incorrect in it's handling of incoming constant values, in that it
does not properly anticipate the values to be signed extended to
32-bits.

Co-authored-by: Graham Hunter <graham.hunter@arm.com>
Differential Revision: https://reviews.llvm.org/D101833

3 years ago[mlir][linalg] Remove IndexedGenericOp support from FusionOnTensors...
Tobias Gysi [Thu, 13 May 2021 14:24:33 +0000 (14:24 +0000)]
[mlir][linalg] Remove IndexedGenericOp support from FusionOnTensors...

after introducing the IndexedGenericOp to GenericOp canonicalization (https://reviews.llvm.org/D101612).

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

3 years ago[mlir] Replace vector-to-scf with progressive-vector-to-scf
Matthias Springer [Thu, 13 May 2021 04:55:47 +0000 (13:55 +0900)]
[mlir] Replace vector-to-scf with progressive-vector-to-scf

Depends On D102388

Reviewed By: nicolasvasilache

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

3 years ago[mlir][linalg] Remove IndexedGenericOp support from DropUnitDims...
Tobias Gysi [Thu, 13 May 2021 13:14:47 +0000 (13:14 +0000)]
[mlir][linalg] Remove IndexedGenericOp support from DropUnitDims...

after introducing the IndexedGenericOp to GenericOp canonicalization (https://reviews.llvm.org/D101612).

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

3 years ago[TableGen] Make the NUL character invalid in .td files
Paul C. Anagnostopoulos [Tue, 11 May 2021 16:50:09 +0000 (12:50 -0400)]
[TableGen] Make the NUL character invalid in .td files

Now uses tr instead of sed.

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

3 years agoReapply [ConstantFold] Fold more operations to poison
Juneyoung Lee [Sat, 28 Nov 2020 19:26:44 +0000 (04:26 +0900)]
Reapply [ConstantFold] Fold more operations to poison

This was reverted to mitigate mitigate miscompiles caused by
the logical and/or to bitwise and/or fold. Reapply it now that
the underlying issue has been fixed by D101191.

-----

This patch folds more operations to poison.

Alive2 proof: https://alive2.llvm.org/ce/z/mxcb9G (it does not contain tests about div/rem because they fold to poison when raising UB)

Reviewed By: nikic

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

3 years ago[mlir] Migrate vector-to-loops.mlir to ProgressiveVectorToSCF
Matthias Springer [Thu, 13 May 2021 07:50:15 +0000 (16:50 +0900)]
[mlir] Migrate vector-to-loops.mlir to ProgressiveVectorToSCF

Create a copy of vector-to-loops.mlir and adapt the test for
ProgressiveVectorToSCF. Fix a small bug in getExtractOp() triggered by
this test.

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

3 years agoFix section title underlining in the release notes
Krzysztof Parzyszek [Thu, 13 May 2021 13:36:07 +0000 (08:36 -0500)]
Fix section title underlining in the release notes

3 years agoRevert "[CMake][ELF] Add -fno-semantic-interposition and -Bsymbolic-functions"
Oliver Stannard [Thu, 13 May 2021 13:25:40 +0000 (14:25 +0100)]
Revert "[CMake][ELF] Add -fno-semantic-interposition and -Bsymbolic-functions"

This reverts commit 3bf1acab5b454ad7fb2074b34663108b53620695.

This is causing the test `gcov-shared-flush.c' to fail on the 2-stage
aarch64 buildbots (https://lab.llvm.org/buildbot/#/builders/7/builds/2720).

3 years agoAdd entry about Hexagon V68 support to the release notes
Krzysztof Parzyszek [Thu, 13 May 2021 13:25:04 +0000 (08:25 -0500)]
Add entry about Hexagon V68 support to the release notes

3 years ago[AIX] XFAIL CodeGen/Generic/externally_available.ll
Jinsong Ji [Thu, 13 May 2021 13:24:45 +0000 (13:24 +0000)]
[AIX] XFAIL CodeGen/Generic/externally_available.ll

    Globals with “available_externally” linkage should never be emitted into the
    object file corresponding to the LLVM module.

    However, AIX system assembler default print error for undefined reference .
    so AIX chose to emit the available externally symbols into .s,
    so that users won't run into errors in situations like:

    clang -target powerpc-ibm-aix -xc -<<<$'extern inline
    __attribute__((__gnu_inline__)) void foo() {}\nvoid bar() { foo(); }' -O
    -Xclang -disable-llvm-passes

Reviewed By: hubert.reinterpretcast

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

3 years ago[mlir] Do not use pass labels in unrolled ProgressiveVectorToSCF
Matthias Springer [Thu, 13 May 2021 12:57:49 +0000 (21:57 +0900)]
[mlir] Do not use pass labels in unrolled ProgressiveVectorToSCF

Do not rely on pass labels to detect if the pattern was already applied in the past (which allows for more some extra optimizations to avoid extra InsertOps and ExtractOps). Instead, check if these optimizations can be applied on-the-fly.

This also fixes a bug, where vector.insert and vector.extract ops sometimes disappeared in the middle of the pass because they get folded away, but the next application of the pattern expected them to be there.

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

3 years ago[gn build] (manually) port 92f9852fc99b, clang-repl
Nico Weber [Thu, 13 May 2021 12:53:11 +0000 (08:53 -0400)]
[gn build] (manually) port 92f9852fc99b, clang-repl

3 years ago[clang-tidy] Fix test that requires Windows platofrm
Georgy Komarov [Wed, 12 May 2021 17:23:05 +0000 (20:23 +0300)]
[clang-tidy] Fix test that requires Windows platofrm

This commit fixes the cppcoreguidelines-pro-type-vararg test when it
runs on a Windows host, but the toolchain is targeted a non-Windows
platform.

Reviewed By: njames93

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

3 years ago[PowerPC] Handle inline assembly clobber of link regsiter
Stefan Pintilie [Thu, 13 May 2021 10:49:19 +0000 (05:49 -0500)]
[PowerPC] Handle inline assembly clobber of link regsiter

This patch adds the handling of clobbers of the link register LR for inline
assembly.

This patch is to fix:
https://bugs.llvm.org/show_bug.cgi?id=50147

Reviewed By: nemanjai, #powerpc

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

3 years ago[VPlan] Adjust assert in splitBlock to allow splitting at end.
Florian Hahn [Thu, 13 May 2021 11:57:39 +0000 (12:57 +0100)]
[VPlan] Adjust assert in splitBlock to allow splitting at end.

SplitAt should only be dereferenced in the assert if it does not point
to the end of the block. This fixes a crash in the added test case.

3 years ago[X86] X86ExpandPseudo.cpp - try to pass DebugLoc by const-ref to avoid costly Trackin...
Simon Pilgrim [Thu, 13 May 2021 12:27:01 +0000 (13:27 +0100)]
[X86] X86ExpandPseudo.cpp - try to pass DebugLoc by const-ref to avoid costly TrackingMDNodeRef copies. NFCI.

3 years ago[X86] X86InstrInfo.cpp - try to pass DebugLoc by const-ref to avoid costly TrackingMD...
Simon Pilgrim [Thu, 13 May 2021 12:23:19 +0000 (13:23 +0100)]
[X86] X86InstrInfo.cpp - try to pass DebugLoc by const-ref to avoid costly TrackingMDNodeRef copies. NFCI.

3 years ago[X86] VZeroUpperInserter::insertVZeroUpper - avoid DebugLoc creation by embedding...
Simon Pilgrim [Thu, 13 May 2021 12:19:13 +0000 (13:19 +0100)]
[X86] VZeroUpperInserter::insertVZeroUpper - avoid DebugLoc creation by embedding in the BuildMI calls. NFCI.

Try to pass DebugLoc by const-ref to avoid costly TrackingMDNodeRef copies.

3 years ago[Passes] Use regex to match GlobalsAA line in test.
Florian Hahn [Thu, 13 May 2021 12:22:18 +0000 (13:22 +0100)]
[Passes] Use regex to match GlobalsAA line in test.

On some platforms/compiler combinations, it appears the output is
slightly different. Update the test to use a regex, as is done at other
places in the new-pm-*default.ll tests to address buildbot failures.

3 years ago[Passes] Run GlobalsAA before LICM during LTO in new PM.
Florian Hahn [Thu, 13 May 2021 11:53:05 +0000 (12:53 +0100)]
[Passes] Run GlobalsAA before LICM during LTO in new PM.

This patch adjusts the LTO pipeline in the new PM to run GlobalsAA
before LICM to match the legacy PM.

This fixes a regression where the new PM failed to vectorize loops that
require hoisting/sinking by LICM depending on GlobalsAA info.

Reviewed By: aeubanks

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

3 years ago[RISCV][NFC] Simplify test run lines
Fraser Cormack [Thu, 13 May 2021 11:35:03 +0000 (12:35 +0100)]
[RISCV][NFC] Simplify test run lines

Several tests had -verify-machineinstrs twice, and several tests were
explicitly specifying the default FileCheck prefix of CHECK.

3 years ago[Passes] Use MemorySSA for LICM during LTO.
Florian Hahn [Thu, 13 May 2021 10:59:41 +0000 (11:59 +0100)]
[Passes] Use MemorySSA for LICM during LTO.

Split off from D102345 to commit this separately from other changes in
the patch. This aligns the behavior of the new PM with the legacy PM
for LTO, with respect to running LICM.

Together with the remaining changes in D102345, this fixes new PM
regressions where we fail to vectorize loops that are vectorized with
the legacy PM.

3 years ago[clang-repl] Fix ClangReplInterpreterTests unittest dependency.
Vassil Vassilev [Thu, 13 May 2021 10:31:59 +0000 (10:31 +0000)]
[clang-repl] Fix ClangReplInterpreterTests unittest dependency.

3 years ago[Utils] Use whoami to get username for arcanist warning message
David Spickett [Thu, 13 May 2021 10:11:43 +0000 (11:11 +0100)]
[Utils] Use whoami to get username for arcanist warning message

959eec1fddc83c90c208789f20cb6573b2a20642 changed the message
to show the local username with "$user" but this is not always set.

Some systems will have USER/USERNAME/LOGNAME, so just use "whoami"
instead.

3 years ago[PowerPC] Provide doubleword vector predicate form comparisons on Power7
Nemanja Ivanovic [Wed, 12 May 2021 17:18:52 +0000 (12:18 -0500)]
[PowerPC] Provide doubleword vector predicate form comparisons on Power7

There are two reasons this shouldn't be restricted to Power8 and up:
1. For XL compatibility
2. Because clang will expand comparison operators to these intrinsics*

*Without this patch, the following causes a selection error:

int test(vector signed long a, vector signed long b) {
  return a < b;
}

This patch provides the handling for the intrinsics in the back
end and removes the Power8 guards from the predicate functions
(vec_{all|any}_{eq|ne|gt|ge|lt|le}).

3 years ago[SCEV] Apply guards to max with non-unitary steps.
Florian Hahn [Thu, 13 May 2021 08:32:41 +0000 (09:32 +0100)]
[SCEV] Apply guards to max with non-unitary steps.

We already apply loop-guards when computing the maximum with unitary
steps. This extends the code to also do so when dealing with non-unitary
steps.

This allows us to infer a tighter maximum in some cases.

Reviewed By: nikic

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

3 years ago[TSAN] Honor failure memory orders in AtomicCAS
Bruno Cardoso Lopes [Thu, 13 May 2021 07:35:22 +0000 (00:35 -0700)]
[TSAN] Honor failure memory orders in AtomicCAS

LLVM has lifted strong requirements for CAS failure memory orders in 431e3138a and 819e0d105e84.

Add support for honoring them in `AtomicCAS`.

https://github.com/google/sanitizers/issues/970

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

3 years ago[clang-repl] Add final set of missing library dependencies.
Vassil Vassilev [Thu, 13 May 2021 08:06:52 +0000 (08:06 +0000)]
[clang-repl] Add final set of missing library dependencies.

3 years ago[libcxx] NFC. Fix misprint unodered -> unordered
Kristina Bessonova [Wed, 12 May 2021 12:32:43 +0000 (14:32 +0200)]
[libcxx] NFC. Fix misprint unodered -> unordered

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

3 years ago[NFC] Add GetInferiorAddrSize method, unify code to compute
Jason Molenda [Thu, 13 May 2021 07:46:21 +0000 (00:46 -0700)]
[NFC] Add GetInferiorAddrSize method, unify code to compute

MachProcess.mm has a sequence to get the address size in
the inferior in three places; and I'm about to add a fourth
in a future patch.  Not a fan.

3 years agoRevert "[SimpleLoopUnswitch] Port partially invariant unswitch from LoopUnswitch...
Jingu Kang [Thu, 13 May 2021 07:22:26 +0000 (08:22 +0100)]
Revert "[SimpleLoopUnswitch] Port partially invariant unswitch from LoopUnswitch to SimpleLoopUnswitch"

This reverts commit 88b259c01463c08ac2575b4432c07ea7751946b5.

It needs to fix below bugs.

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

3 years ago[FPEnv][X86] Implement lowering of llvm.set.rounding
Serge Pavlov [Thu, 13 May 2021 06:44:10 +0000 (13:44 +0700)]
[FPEnv][X86] Implement lowering of llvm.set.rounding

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

3 years agoUse an allow list on reserved macro identifiers
serge-sans-paille [Mon, 10 May 2021 13:56:22 +0000 (15:56 +0200)]
Use an allow list on reserved macro identifiers

The allow list is based on various official sources (see in-code comment).

This fixes https://bugs.llvm.org/show_bug.cgi?id=50248

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

3 years ago[clang-repl] Add exhaustive list of libInterpreter dependencies.
Vassil Vassilev [Thu, 13 May 2021 07:18:01 +0000 (07:18 +0000)]
[clang-repl] Add exhaustive list of libInterpreter dependencies.

This patch should appease the bots building with -DBUILD_SHARED_LIBS=On,
resolving the regression introduced in 92f9852fc99b.

3 years ago[clang-repl] Recommit "Land initial infrastructure for incremental parsing"
Vassil Vassilev [Thu, 13 May 2021 05:41:44 +0000 (05:41 +0000)]
[clang-repl] Recommit "Land initial infrastructure for incremental parsing"

Original commit message:

  In http://lists.llvm.org/pipermail/llvm-dev/2020-July/143257.html we have
  mentioned our plans to make some of the incremental compilation facilities
  available in llvm mainline.

  This patch proposes a minimal version of a repl, clang-repl, which enables
  interpreter-like interaction for C++. For instance:

  ./bin/clang-repl
  clang-repl> int i = 42;
  clang-repl> extern "C" int printf(const char*,...);
  clang-repl> auto r1 = printf("i=%d\n", i);
  i=42
  clang-repl> quit

  The patch allows very limited functionality, for example, it crashes on invalid
  C++. The design of the proposed patch follows closely the design of cling. The
  idea is to gather feedback and gradually evolve both clang-repl and cling to
  what the community agrees upon.

  The IncrementalParser class is responsible for driving the clang parser and
  codegen and allows the compiler infrastructure to process more than one input.
  Every input adds to the “ever-growing” translation unit. That model is enabled
  by an IncrementalAction which prevents teardown when HandleTranslationUnit.

  The IncrementalExecutor class hides some of the underlying implementation
  details of the concrete JIT infrastructure. It exposes the minimal set of
  functionality required by our incremental compiler/interpreter.

  The Transaction class keeps track of the AST and the LLVM IR for each
  incremental input. That tracking information will be later used to implement
  error recovery.

  The Interpreter class orchestrates the IncrementalParser and the
  IncrementalExecutor to model interpreter-like behavior. It provides the public
  API which can be used (in future) when using the interpreter library.

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

3 years ago[mlir] Support masks in TransferOpReduceRank and TransferReadPermutationLowering
Matthias Springer [Thu, 13 May 2021 06:04:40 +0000 (15:04 +0900)]
[mlir] Support masks in TransferOpReduceRank and TransferReadPermutationLowering

These two patterns allow for more efficient codegen in VectorToSCF.

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

3 years ago[gn build] Port d8b37de8a478
LLVM GN Syncbot [Thu, 13 May 2021 05:32:35 +0000 (05:32 +0000)]
[gn build] Port d8b37de8a478

3 years ago[GC][NFC] Move GCStrategy from CodeGen to IR
Max Kazantsev [Wed, 12 May 2021 07:36:24 +0000 (14:36 +0700)]
[GC][NFC] Move GCStrategy from CodeGen to IR

We want it to be available in analyzes so that we could use the
CodeGen notion in middle-end passes (for example, to check if
a GC may free some particular pointer).

This is a preparatory patch that simply moves the files around.

Note: if this causes some build issues, this patch must just be reverted.

Differential Revision: https://reviews.llvm.org/D100557
Reviewed By: reames

3 years ago[JITLink] Expose x86-64 pointer jump stub block construction.
Lang Hames [Thu, 13 May 2021 03:56:07 +0000 (20:56 -0700)]
[JITLink] Expose x86-64 pointer jump stub block construction.

This can be useful for clients who want to define their own symbol for the
stub, or re-use some existing symbol.

3 years ago[JITLink] Add a transferDefinedSymbol operation.
Lang Hames [Thu, 13 May 2021 03:48:42 +0000 (20:48 -0700)]
[JITLink] Add a transferDefinedSymbol operation.

The transferDefinedSymbol operation updates a Symbol's target block, offset,
and size. This can be convenient when you want to redefine the content of some
symbol(s) pointing at a block, while retaining the original block in the graph.

3 years agoAdd some warnings when debugserver is running in translation
Jason Molenda [Thu, 13 May 2021 05:15:55 +0000 (22:15 -0700)]
Add some warnings when debugserver is running in translation

A debugserver launched x86_64 cannot control an arm64/arm64e
process on an Apple Silicon system.  Warn when this situation
has happened and return an error for the most common case of
attach.  I think there will be refinements to this in the
future, but start out by making it easy to spot the problem
when it happens.

rdar://76630595

3 years ago[Coroutines] Salvege Debug.values
Chuanqi Xu [Thu, 13 May 2021 05:05:05 +0000 (13:05 +0800)]
[Coroutines] Salvege Debug.values

Summary: The previous implementation of coro-split didn't collect values
used by dbg instructions into the spills which made a log debug info
unavailable with optimization on.
This patch tries to collect these uses which are used by dbg.values. In
this way, the debugbility of coroutine could be as powerful as normal
functions with optimization on.

To avoid enlarging the coroutine frame, this patch only collects
`dbg.value` whose value is already in the coroutine frame. This decision
may make some debug info getting unavailable. But if we are with
optimization on, the performance issue should be considered first. And
this patch would make the debugbility of coroutine to be better only
without changing the layout of the frame.

Test-plan: check-llvm

Reviewed By: aprantl, lxfind

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

3 years ago[mlir][tosa] Fix tosa.cast semantics to perform rounding/clipping
Rob Suderman [Thu, 13 May 2021 04:47:55 +0000 (21:47 -0700)]
[mlir][tosa] Fix tosa.cast semantics to perform rounding/clipping

Rounding to integers requires rounding (for floating points) and clipping
to the min/max values of the destination range. Added this behavior and
updated tests appropriately.

Reviewed By: sjarus, silvas

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

3 years agoRevert "[clang-repl] Land initial infrastructure for incremental parsing"
Vassil Vassilev [Thu, 13 May 2021 04:43:01 +0000 (04:43 +0000)]
Revert "[clang-repl] Land initial infrastructure for incremental parsing"

This reverts commit 44a4000181e1a25027e87f2ae4e71cb876a7a275.

We are seeing build failures due to missing dependency to libSupport and
CMake Error at tools/clang/tools/clang-repl/cmake_install.cmake
file INSTALL cannot find

3 years ago[Coroutines] Enable printing coroutine frame when dbg info is available
Chuanqi Xu [Thu, 13 May 2021 04:35:37 +0000 (12:35 +0800)]
[Coroutines] Enable printing coroutine frame when dbg info is available

Summary: This patch tries to build debug info for coroutine frame in the
middle end. Although the coroutine frame is constructed and maintained by
the compiler and the programmer shouldn't care about the coroutine frame
by the design of C++20 coroutine,
a lot of programmers told me that they want to see the layout of the
coroutine frame strongly. Although C++ is designed as an abstract layer
so that the programmers shouldn't care about the actual memory in bits,
many experienced C++ programmers  are familiar with assembler and
debugger to see the memory layout in fact, After I was been told they
want to see the coroutine frame about 3 times, I think it is an actual
and desired demand.

However, the debug information is constructed in the front end and
coroutine frame is constructed in the middle end. This is a natural and
clear gap. So I could only try to construct the debug information in the
middle end after coroutine frame constructed. It is unusual, but we are
in consensus that the approch is the best one.

One hard part is we need construct the name for variables since there
isn't a map from llvm variables to DIVar. Then here is the strategy this
patch uses:
- The name `__resume_fn `, `__destroy_fn` and `__coro_index ` are
  constructed by the patch.
- Then the name `__promise` comes from the dbg.variable of corresponding
  dbg.declare of PromiseAlloca, which shows highest priority to
construct the debug information for the member of coroutine frame.
- Then if the member is struct, we would try to get the name of the llvm
  struct directly. Then replace ':' and '.' with '_' to make it
printable for debugger.
- If the member is a basic type like integer or double, we would try to
  emit the corresponding name.
- Then if the member is a Pointer Type, we would add `Ptr` after
  corresponding pointee type.
- Otherwise, we would name it with 'UnknownType'.

Reviewered by: lxfind, aprantl, rjmcall, dblaikie

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

3 years ago[SLP] Add insertelement instructions to vectorizable tree
Anton Afanasyev [Tue, 16 Mar 2021 07:23:13 +0000 (10:23 +0300)]
[SLP] Add insertelement instructions to vectorizable tree

Add new type of tree node for `InsertElementInst` chain forming vector.
These instructions could be either removed, or replaced by shuffles during
vectorization and we can add this node to cost model, so naturally estimating
their cost, getting rid of `CompensateCost` tricks and reducing further work
for InstCombine. This fixes PR40522 and PR35732 in a natural way. Also this
patch is the first step towards revectorization of partially vectorization
(to fix PR42022 completely). After adding inserts to tree the next step is
to add vector instructions there (for instance, to merge `store <2 x float>`
and `store <2 x float>` to `store <4 x float>`).

Fixes PR40522 and PR35732.

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

3 years ago[SLP][Test] Fix and precommit tests for D98714
Anton Afanasyev [Fri, 19 Mar 2021 08:09:58 +0000 (11:09 +0300)]
[SLP][Test] Fix and precommit tests for D98714

3 years ago[SLP][Test] Fix and precommit tests for D98714
Anton Afanasyev [Fri, 19 Mar 2021 08:09:58 +0000 (11:09 +0300)]
[SLP][Test] Fix and precommit tests for D98714

3 years ago[clang-repl] Land initial infrastructure for incremental parsing
Vassil Vassilev [Wed, 12 May 2021 20:48:03 +0000 (20:48 +0000)]
[clang-repl] Land initial infrastructure for incremental parsing

In http://lists.llvm.org/pipermail/llvm-dev/2020-July/143257.html we have
mentioned our plans to make some of the incremental compilation facilities
available in llvm mainline.

This patch proposes a minimal version of a repl, clang-repl, which enables
interpreter-like interaction for C++. For instance:

./bin/clang-repl
clang-repl> int i = 42;
clang-repl> extern "C" int printf(const char*,...);
clang-repl> auto r1 = printf("i=%d\n", i);
i=42
clang-repl> quit

The patch allows very limited functionality, for example, it crashes on invalid
C++. The design of the proposed patch follows closely the design of cling. The
idea is to gather feedback and gradually evolve both clang-repl and cling to
what the community agrees upon.

The IncrementalParser class is responsible for driving the clang parser and
codegen and allows the compiler infrastructure to process more than one input.
Every input adds to the “ever-growing” translation unit. That model is enabled
by an IncrementalAction which prevents teardown when HandleTranslationUnit.

The IncrementalExecutor class hides some of the underlying implementation
details of the concrete JIT infrastructure. It exposes the minimal set of
functionality required by our incremental compiler/interpreter.

The Transaction class keeps track of the AST and the LLVM IR for each
incremental input. That tracking information will be later used to implement
error recovery.

The Interpreter class orchestrates the IncrementalParser and the
IncrementalExecutor to model interpreter-like behavior. It provides the public
API which can be used (in future) when using the interpreter library.

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

3 years ago[mlir] Support memref layout maps in vector transfer ops
Matthias Springer [Thu, 13 May 2021 04:12:30 +0000 (13:12 +0900)]
[mlir] Support memref layout maps in vector transfer ops

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

3 years ago[mlir] Unrolled progressive-vector-to-scf.
Matthias Springer [Thu, 13 May 2021 03:57:45 +0000 (12:57 +0900)]
[mlir] Unrolled progressive-vector-to-scf.

Instead of an SCF for loop, these pattern generate fully unrolled loops with no temporary buffer allocations.

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