platform/upstream/llvm.git
21 months ago[LoongArch] Allow %pc_lo12 relocs in JIRL's immediate operand position
WANG Xuerui [Sun, 22 Jan 2023 05:24:43 +0000 (13:24 +0800)]
[LoongArch] Allow %pc_lo12 relocs in JIRL's immediate operand position

Currently, gcc-13 will generate such assembly when `-mcmodel=medium`,
which is ostensibly a dirty hack to allow bigger offsets for extern
function calls without having to add more reloc types. This is not the
best way to accomplish the original goal, but such usages will appear
soon and we have to support it anyway.

Example:

```c
extern int foo(int);

int bar(int x) {
    return foo(x + 123);
}
```

will produce the following (simplified) assembly when compiled with
`-O2 -mcmodel=medium`:

```
    .globl  bar
    .type   bar, @function
bar:
    .cfi_startproc
    addi.w  $r4,$r4,123
    pcalau12i   $r12,%pc_hi20(foo)
    jirl    $r0,$r12,%pc_lo12(foo)
    .cfi_endproc
```

Reviewed By: SixWeining, wangleiat, MaskRay, xry111

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

21 months ago[C++20][Modules] Fix named module import diagnostics.
Iain Sandoe [Tue, 13 Dec 2022 08:45:08 +0000 (08:45 +0000)]
[C++20][Modules] Fix named module import diagnostics.

We have been incorrectly disallowing imports of named modules in the
global and private module fragments.

This addresses: https://github.com/llvm/llvm-project/issues/59688

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

21 months ago[bazel] Add missing dependencies for 4f1e244eb5
Benjamin Kramer [Sun, 22 Jan 2023 09:58:47 +0000 (10:58 +0100)]
[bazel] Add missing dependencies for 4f1e244eb5

21 months ago[OpenMP] Simplify `llvm.assume` operands in device code
Johannes Doerfert [Sun, 22 Jan 2023 09:27:41 +0000 (01:27 -0800)]
[OpenMP] Simplify `llvm.assume` operands in device code

21 months ago[Attributor] Handle constant icmp expressions in AAPotentialValues
Johannes Doerfert [Sun, 22 Jan 2023 09:13:24 +0000 (01:13 -0800)]
[Attributor] Handle constant icmp expressions in AAPotentialValues

A `ConstantExpr` ICmp is pretty much the same thing as an ICmpInst when
we want to simplify it. We just need to be less restrictive wrt. the
type and use the static helper functions directly.

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

21 months ago[clang][Interp][NFCI] Make InitMap::isInitialized() const
Timm Bäder [Sat, 21 Jan 2023 18:48:37 +0000 (19:48 +0100)]
[clang][Interp][NFCI] Make InitMap::isInitialized() const

21 months ago[clang][Interp][NFC] Forward-declare Boolean in PrimTypes.h
Timm Bäder [Sat, 21 Jan 2023 18:32:02 +0000 (19:32 +0100)]
[clang][Interp][NFC] Forward-declare Boolean in PrimTypes.h

We don't need the full header file here.

21 months ago[clang][Interp][NFC] Fix header comment file name
Timm Bäder [Sat, 21 Jan 2023 16:25:57 +0000 (17:25 +0100)]
[clang][Interp][NFC] Fix header comment file name

21 months agoTransform ctpop(Pow2) -> icmp ne Pow2, 0
Noah Goldstein [Sun, 22 Jan 2023 06:00:14 +0000 (22:00 -0800)]
Transform ctpop(Pow2) -> icmp ne Pow2, 0

This makes folding to 0/1 later on easier and regardless `icmp ne` is
'probably' faster on most targets (especially for vectors).

Reviewed By: nikic

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

21 months agoAdd tests for ctpop(Pow2); NFC
Noah Goldstein [Sun, 22 Jan 2023 05:59:58 +0000 (21:59 -0800)]
Add tests for ctpop(Pow2); NFC

Reviewed By: nikic

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

21 months ago[libc++] Rename take_while_view::__sentinel to __take_while_view_sentinel
Nikolas Klauser [Sat, 21 Jan 2023 07:34:47 +0000 (08:34 +0100)]
[libc++] Rename take_while_view::__sentinel to __take_while_view_sentinel

This makes it easier to specialize traits classes, like __segmented_iterator_traits.

Reviewed By: var-const, #libc

Spies: libcxx-commits

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

21 months ago[BPF][Clang] Fix func argument pattern in bpf-stack-protector test
Yonghong Song [Sun, 22 Jan 2023 06:24:22 +0000 (22:24 -0800)]
[BPF][Clang] Fix func argument pattern in bpf-stack-protector test

Commit 56b038f887f3("[BPF][clang] Ignore stack protector options for BPF
target") added a test for its corresponding functionality.
Douglas Yung found that the test will fail with the release build
buildbot due to different func argument patterns (from %msg
to %0). This patch fixed the issue by using pattern [0-9a-z]+
which allows both %msg and %0.

21 months ago[OpenMP] Try to fix Flang after new clause was added
Johannes Doerfert [Sun, 22 Jan 2023 04:24:43 +0000 (20:24 -0800)]
[OpenMP] Try to fix Flang after new clause was added

21 months ago[OpenMP][FIX] Split test into amdgpu and nvptx specific ones
Johannes Doerfert [Sun, 22 Jan 2023 03:54:35 +0000 (19:54 -0800)]
[OpenMP][FIX] Split test into amdgpu and nvptx specific ones

This avoids running the test for the host.

21 months ago[OpenMP][FIX] Add default clause to switch
Johannes Doerfert [Sun, 22 Jan 2023 03:50:22 +0000 (19:50 -0800)]
[OpenMP][FIX] Add default clause to switch

21 months ago[OpenMP] Introduce the `ompx_dyn_cgroup_mem(<N>)` clause
Johannes Doerfert [Sun, 8 Jan 2023 00:14:48 +0000 (16:14 -0800)]
[OpenMP] Introduce the `ompx_dyn_cgroup_mem(<N>)` clause

Dynamic memory allows users to allocate fast shared memory when a kernel
is launched. We support a single size for all kernels via the
`LIBOMPTARGET_SHARED_MEMORY_SIZE` environment variable but now we can
control it per kernel invocation, hence allow computed values.

Note: Only the nextgen plugins will allocate memory based on the clause,
      the old plugins will silently miscompile.

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

21 months agoAdd the test dialect as dependent for the "test-legalize-patterns" test pass
Mehdi Amini [Sun, 22 Jan 2023 02:39:49 +0000 (02:39 +0000)]
Add the test dialect as dependent for the "test-legalize-patterns" test pass

Fixes #60183

21 months agoAdd missing dependent dialects to "convert-gpu-to-rocdl"
Mehdi Amini [Sun, 22 Jan 2023 02:26:34 +0000 (02:26 +0000)]
Add missing dependent dialects to "convert-gpu-to-rocdl"

Fixes #60198

21 months ago[NFC][SCEV] `CompareSCEVComplexity`: deduplicate handling
Roman Lebedev [Sun, 22 Jan 2023 01:45:38 +0000 (04:45 +0300)]
[NFC][SCEV] `CompareSCEVComplexity`: deduplicate handling

For all but unknown/constant/recurrences, the handling is identical,
there is no point in special-casing anything.

21 months ago[NFC][SCEV] `SCEVTraversal::visitAll()`: deduplicate handling
Roman Lebedev [Sun, 22 Jan 2023 01:12:11 +0000 (04:12 +0300)]
[NFC][SCEV] `SCEVTraversal::visitAll()`: deduplicate handling

They don't not do anything different from what we do for n-ary expressions,
there is no point in special-casing them.

21 months ago[NFC][SCEV] `createNodeForSelectOrPHIInstWithICmpInstCond()`: directly take `Type...
Roman Lebedev [Sun, 22 Jan 2023 01:09:39 +0000 (04:09 +0300)]
[NFC][SCEV] `createNodeForSelectOrPHIInstWithICmpInstCond()`: directly take `Type`, not `Instruction`

We don't use the `Instruction` itself, only it's type anyways.

21 months ago[NFC][SCEV] `createNodeForSelectOrPHIInstWithICmpInstCond()`: return optional
Roman Lebedev [Sun, 22 Jan 2023 01:07:26 +0000 (04:07 +0300)]
[NFC][SCEV] `createNodeForSelectOrPHIInstWithICmpInstCond()`: return optional

We only want about the result if it succeeds, and don't want `SCEVUnknown`.

21 months agoRemove trailing whitespace from comment
Noah Goldstein [Sat, 21 Jan 2023 19:33:38 +0000 (11:33 -0800)]
Remove trailing whitespace from comment

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

21 months ago[llvm] Use llvm::bit_width (NFC)
Kazu Hirata [Sat, 21 Jan 2023 22:48:32 +0000 (14:48 -0800)]
[llvm] Use llvm::bit_width (NFC)

21 months ago[NFC][SCEV] Reflow `getRangeRef()` into an exhaustive switch
Roman Lebedev [Sat, 21 Jan 2023 22:34:22 +0000 (01:34 +0300)]
[NFC][SCEV] Reflow `getRangeRef()` into an exhaustive switch

21 months ago[NFC][SCEV] Reflow `getRelevantLoop()` into an exhaustive switch
Roman Lebedev [Sat, 21 Jan 2023 22:09:13 +0000 (01:09 +0300)]
[NFC][SCEV] Reflow `getRelevantLoop()` into an exhaustive switch

21 months ago[llvm] Use llvm::bit_width (NFC)
Kazu Hirata [Sat, 21 Jan 2023 21:56:47 +0000 (13:56 -0800)]
[llvm] Use llvm::bit_width (NFC)

21 months ago[OpenMP][FIX] Runtime args are not kernel args
Johannes Doerfert [Sat, 21 Jan 2023 21:43:10 +0000 (13:43 -0800)]
[OpenMP][FIX] Runtime args are not kernel args

Clang passes `KernelArgs.NumArgs` to the runtime but not all are kernel
arguments. This ensures we fallback to the old logic. In a follow up we
should introduce a new `KernelArgs.NumKernelArgs` field and set it in
the runtime.

21 months ago[OpenMP][FIX] Remove version check lines in clang test
Johannes Doerfert [Sat, 21 Jan 2023 21:23:03 +0000 (13:23 -0800)]
[OpenMP][FIX] Remove version check lines in clang test

We really need a way to make the check line script deal with these
automatically.

21 months ago[X86] `X86TargetLowering`: override `allowsMemoryAccess()`
Roman Lebedev [Sat, 21 Jan 2023 21:12:27 +0000 (00:12 +0300)]
[X86] `X86TargetLowering`: override `allowsMemoryAccess()`

The baseline `allowsMemoryAccess()` is wrong for X86.
It assumes that aligned memory operations are always allowed,
but that is not true.

For example, We can not perform a 32-byte aligned non-temporal load
of a 32-byte vector, without AVX2 that is, yet `allowsMemoryAccess()`
will say it is allowed, so we may end up merging non-temporal loads,
only to split them up to legalize them, and here we go again.

NOTE: the test changes here are superfluous. The main effect is that without this change,
in D141777, we'd get stuck endlessly merging and splitting non-temporal stores.

Reviewed By: RKSimon

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

21 months ago[NFC][SCEV] `computeSCEVAtScope()`: reserve vector size upfront
Roman Lebedev [Sat, 21 Jan 2023 20:42:11 +0000 (23:42 +0300)]
[NFC][SCEV] `computeSCEVAtScope()`: reserve vector size upfront

21 months ago[NFC][SCEV] `computeSCEVAtScope()`: `scUnknown`: use early-returns
Roman Lebedev [Sat, 21 Jan 2023 20:27:51 +0000 (23:27 +0300)]
[NFC][SCEV] `computeSCEVAtScope()`: `scUnknown`: use early-returns

21 months ago[NFC][SCEV] Reflow `computeSCEVAtScope()` into an exhaustive switch
Roman Lebedev [Sat, 21 Jan 2023 20:23:59 +0000 (23:23 +0300)]
[NFC][SCEV] Reflow `computeSCEVAtScope()` into an exhaustive switch

Otherwise instead of a compile-time error that you forgot to modify it,
you'd get a run-time error, which happened every time i've added new expr.

This is completely NFC, there are no other changes here.

21 months ago[NFC][SCEV] `computeSCEVAtScope()`: clang-format
Roman Lebedev [Sat, 21 Jan 2023 20:23:20 +0000 (23:23 +0300)]
[NFC][SCEV] `computeSCEVAtScope()`: clang-format

21 months ago[clang/driver] Make sure that `-gno-modules` by itself doesn't enable debug info
Argyrios Kyrtzidis [Sat, 21 Jan 2023 19:31:21 +0000 (11:31 -0800)]
[clang/driver] Make sure that `-gno-modules` by itself doesn't enable debug info

21 months ago[OpenMP] Modernize the kernel launching interface and APIs
Johannes Doerfert [Thu, 19 Jan 2023 21:40:58 +0000 (13:40 -0800)]
[OpenMP] Modernize the kernel launching interface and APIs

We already created a versioned `__tgt_kernel_arguments` struct but it
was only briefly used and its content was passed in isolation anyway.
This makes it hard to add more information in the future. With this
patch we fully embrace the struct as means to pass information from the
compiler to the plugin as part of a kernel launch.

The patch also extends and renames the struct, bumping the version
number to 2. Version 1 entries are auto-upgraded. This is in preparation
for "bare" kernel launches, per kernel dynamic shared memory, CUDA/HIP
lowering, etc.

The `__tgt_target_kernel_nowait` interface was deprecated as it was
unused. Once we actually implement support for something like that, we
can add an appropriate API.

Note: Only plugins with the `launch_kernel` interface are now supported.
      That means that a new clang won't be able to use an old runtime.
      An old clang can still use the new runtime since the libomptarget
      interface did not change.

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

21 months ago[RISCV] Use llvm::bit_width (NFC)
Kazu Hirata [Sat, 21 Jan 2023 18:54:09 +0000 (10:54 -0800)]
[RISCV] Use llvm::bit_width (NFC)

I've verified that the arguments to llvm::bit_width are all of
uint64_t with:

  static_assert(std::is_same_v<uint64_t, decltype(Mask)>)

21 months ago[DAG] Convert static combineABSToABD to DAGCombiner::foldABSToABD. NFCI.
Simon Pilgrim [Sat, 21 Jan 2023 18:23:36 +0000 (18:23 +0000)]
[DAG] Convert static combineABSToABD to DAGCombiner::foldABSToABD. NFCI.

This will make some future legality checks easier.

21 months ago[ARM] Cortex-M55 Scheduling Model
David Green [Sat, 21 Jan 2023 18:03:24 +0000 (18:03 +0000)]
[ARM] Cortex-M55 Scheduling Model

This adds an Arm Cortex-M55 scheduling model, using the information from
https://developer.arm.com/documentation/102692/latest/

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

21 months ago[AArch64] Simplify isSeveralBitsExtractOpFromShr (NFC)
Kazu Hirata [Sat, 21 Jan 2023 17:23:39 +0000 (09:23 -0800)]
[AArch64] Simplify isSeveralBitsExtractOpFromShr (NFC)

This patch simplifies isSeveralBitsExtractOpFromShr.

The following statements are equivalent:

  unsigned BitWide = 64 - countLeadingOnes(~(AndMask >> SrlImm));
  unsigned BitWide = 64 - countLeadingZeros(AndMask >> SrlImm);

Now, consider:

  if (BitWide && isMask_64(AndMask >> SrlImm)) {

When isMask_64 returns true, AndMask >> SrlImm and BitWide must be
nonzero.  Since BitWide does not contribute to narrowing the
condition, we can simplify the condition as:

  if (isMask_64(AndMask >> SrlImm)) {

We can negate the condition for an early exit as recommended by the
LLVM Coding Standards.

Now, all of the following are equivalent if AndMask >> SrlImm is
nonzero:

  MSB = BitWide + SrlImm - 1
  MSB = (64 - countLeadingZero(AndMask >> SrlImm)) + SrlImm - 1
  MSB = (63 - countLeadingZero(AndMask >> SrlImm)) + SrlImm
  MSB = 63 - countLeadingZero(AndMask)
  MSB = 63 ^ countLeadingZero(AndMask)
  MSB = findLastSet(AndMask, ZB_Undefined)

21 months ago[VPlan] Consider all recipes in replicate blocks as sink candidates.
Florian Hahn [Sat, 21 Jan 2023 17:14:13 +0000 (17:14 +0000)]
[VPlan] Consider all recipes in replicate blocks as sink candidates.

Update sinkScalarOperands to consider all operands of recipes in
replicate blocks as sink candidates This enables additional sinking
opportunities and is another step towards retiring LLVM IR-based
sinkScalarOperands.

This enables iterative sinking of operands for successive calls of
sinkScalarOperands.

Depends on D139788.

Reviewed By: Ayal

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

21 months ago[X86] Add DAG tests showing the failure to reassociate IMINMAX nodes to fold constant...
Simon Pilgrim [Sat, 21 Jan 2023 15:24:49 +0000 (15:24 +0000)]
[X86] Add DAG tests showing the failure to reassociate IMINMAX nodes to fold constant operands

Test coverage for Issue #58110

21 months ago[X86] v8i1-masks.ll - add avx512 test coverage and use X86 check prefix instead of X32
Simon Pilgrim [Sat, 21 Jan 2023 14:14:24 +0000 (14:14 +0000)]
[X86] v8i1-masks.ll - add avx512 test coverage and use X86 check prefix instead of X32

We try to use X32 for tests on gnux32 triples

21 months ago[libc++] Granularize <type_traits> includes in <bit>, <numbers> and <coroutine>
Nikolas Klauser [Thu, 22 Dec 2022 23:23:30 +0000 (00:23 +0100)]
[libc++] Granularize <type_traits> includes in <bit>, <numbers> and <coroutine>

`<coroutine>` seems to be new enough to not be a huge problem.

Reviewed By: Mordante, #libc

Spies: libcxx-commits, ChuanqiXu

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

21 months ago[libc++] Implement P1413R3 (Deprecate std::aligned_storage and std::aligned_union)
Nikolas Klauser [Sun, 11 Dec 2022 01:10:31 +0000 (02:10 +0100)]
[libc++] Implement P1413R3 (Deprecate std::aligned_storage and std::aligned_union)

There are no tests for the aliases because clang doesn't diagnose deprecated template aliases currently.

Reviewed By: ldionne, #libc

Spies: libcxx-commits

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

21 months ago[Cost] Add CostKind to getVectorInstrCost and its related users
ShihPo Hung [Sat, 21 Jan 2023 13:29:05 +0000 (05:29 -0800)]
[Cost] Add CostKind to getVectorInstrCost and its related users

LoopUnroll estimates the loop size via getInstructionCost(),
but getInstructionCost() cannot pass CostKind to getVectorInstrCost().
And so does getShuffleCost() to getBroadcastShuffleOverhead(),
getPermuteShuffleOverhead(), getExtractSubvectorOverhead(),
and getInsertSubvectorOverhead().

To address this, this patch adds an argument CostKind to these
functions.

Reviewed By: RKSimon

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

21 months ago[M68k] Fix M68k pipeline order test after 4ece50737d5385fb80cfa23f5297d1111f8eed39
Simon Pilgrim [Sat, 21 Jan 2023 13:00:46 +0000 (13:00 +0000)]
[M68k] Fix M68k pipeline order test after 4ece50737d5385fb80cfa23f5297d1111f8eed39

21 months ago[C++20][Modules] Handle defaulted and deleted functions in header units.
Iain Sandoe [Tue, 17 Jan 2023 10:17:08 +0000 (10:17 +0000)]
[C++20][Modules] Handle defaulted and deleted functions in header units.

Address part of https://github.com/llvm/llvm-project/issues/60079.

Deleted and Defaulted functions are implicitly inline, but that state
is not set at the point that we perform the diagnostic checks for externally-
visible non-inline functions; check the function body type explicitly in the
diagnostic.

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

21 months ago[openmp] Workaround for HSA in issue 60119
Jon Chesterfield [Sat, 21 Jan 2023 12:01:13 +0000 (12:01 +0000)]
[openmp] Workaround for HSA in issue 60119

Move plugin initialization to libomptarget initialization.

Removes the call_once control, probably fractionally faster overall.
Fixes issue 60119 because the plugin initialization, which might
try to dlopen unrelated shared libraries, is no longer nested within
a call from application code.

Fixes #60119

Reviewed By: Maetveis, jhuber6

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

21 months ago[X86] avx2-vperm.ll - use X86 check prefix instead of X32
Simon Pilgrim [Sat, 21 Jan 2023 11:43:42 +0000 (11:43 +0000)]
[X86] avx2-vperm.ll - use X86 check prefix instead of X32

We try to use X32 for tests on gnux32 triples

21 months ago[DAG] getNode - add type assertion checks for ISD::ABDS/ABDU
Simon Pilgrim [Sat, 21 Jan 2023 11:31:47 +0000 (11:31 +0000)]
[DAG] getNode - add type assertion checks for ISD::ABDS/ABDU

21 months ago[cmake] Fix some indentation in HandleLLVMOptions.cmake
Jay Foad [Sat, 21 Jan 2023 09:26:36 +0000 (09:26 +0000)]
[cmake] Fix some indentation in HandleLLVMOptions.cmake

21 months ago[ORC] Add lazy jit support for LoongArch64
wanglei [Sat, 21 Jan 2023 05:31:33 +0000 (13:31 +0800)]
[ORC] Add lazy jit support for LoongArch64

This patch adds resolver, indirection and trampoline stubs for
loongarch64, allowing lazy compilation to work.

It assumes hard float feature exists.

Depends on D141036

Reviewed By: lhames

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

21 months agoRe-commit "[clang][Interp] Unify visiting variable declarations"
Timm Bäder [Fri, 20 Jan 2023 14:07:25 +0000 (15:07 +0100)]
Re-commit "[clang][Interp] Unify visiting variable declarations"

We often visit the same variable multiple times, e.g. once when checking
its initializer and later when compiling the function. Unify both of
those in visitVarDecl() and do the returning of the value in
visitDecl().

This time, use a VariableScope instead of a DeclScope for local
variables. This way, we don't emit Destroy ops for the local variables
immediately after creating them.

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

21 months agoGlobalISel: Fix the broken release build after c1fc5219cb23d1e14c0115381321f6d8d6a4fc17
Haojian Wu [Sat, 21 Jan 2023 09:09:17 +0000 (10:09 +0100)]
GlobalISel: Fix the broken release build after c1fc5219cb23d1e14c0115381321f6d8d6a4fc17

21 months agoMake `shouldExpandLogicAtomicRMWInIR` able to match both operands.
Noah Goldstein [Sat, 21 Jan 2023 08:53:14 +0000 (00:53 -0800)]
Make `shouldExpandLogicAtomicRMWInIR` able to match both operands.

Previous logic was buggy and erroneously asserted that I->operand(0) must
be the RMW instruction. This change fixes that and makes it so that the
RMW instruction can be used in operand 0 or 1.

Also update the tests to explicitly test RMW as operand 0/1 (no change
to codegen).

Reviewed By: pengfei

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

21 months agosanmd: refine selection of functions for UAR checking
Dmitry Vyukov [Fri, 20 Jan 2023 09:26:20 +0000 (10:26 +0100)]
sanmd: refine selection of functions for UAR checking

There are no intrinsic functions that leak arguments.
If the called function does not return, the current function
does not return as well, so no possibility of use-after-return.
Sanitizer function also don't leak or don't return.
It's safe to both pass pointers to local variables to them
and to tail-call them.

Reviewed By: melver

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

21 months ago[Clang][test] Avoid FileCheck error when matching `-cc1`
hezuoqiang [Sat, 21 Jan 2023 04:28:01 +0000 (23:28 -0500)]
[Clang][test] Avoid FileCheck error when matching `-cc1`

FileCheck patterns consisting of only `-cc1` on a line by itself often
cause mismatches, e.g. with version strings formed from commit hashes
such as "clang-cc1514432c58". They should be changed to contain more
context and match more precisely.

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

21 months ago[ADT] Add [[nodiscard]] to the functions in bit.h (NFC)
Kazu Hirata [Sat, 21 Jan 2023 04:27:08 +0000 (20:27 -0800)]
[ADT] Add [[nodiscard]] to the functions in bit.h (NFC)

21 months ago[BOLT][NFC] Move getLTOCommonName to Utils
Amir Ayupov [Sat, 21 Jan 2023 03:27:38 +0000 (19:27 -0800)]
[BOLT][NFC] Move getLTOCommonName to Utils

Reuse getLTOCommonName in components other than Profile (to be used in Core)

Reviewed By: #bolt, maksfb

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

21 months ago[mlir][sparse] factoring out getRankedTensorType helper function
wren romano [Thu, 19 Jan 2023 03:11:48 +0000 (19:11 -0800)]
[mlir][sparse] factoring out getRankedTensorType helper function

Reviewed By: Peiming

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

21 months ago[ADT] Add bit_floor, bit_ceil, and bit_width to bit.h
Kazu Hirata [Sat, 21 Jan 2023 03:34:42 +0000 (19:34 -0800)]
[ADT] Add bit_floor, bit_ceil, and bit_width to bit.h

This patch adds C++20-style bit_floor, bit_ceil, and bit_width.

In a subsequent patch, I'm going to define PowerOf2Floor in
MathExtras.h in terms of bit_floor.

Unfortunately, PowerOf2Ceil isn't quite the same as bit_ceil because
PowerOf2Ceil(0) == 0, whereas bit_ceil(0) == 1.

MathExtras.h does not have a function directly corresponding to
bit_width, but Log2_32(X) + 1, which occurs in a few places, can be
replaced with bit_width(X).

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

21 months ago[bazel][libc] fixes
David Blaikie [Sat, 21 Jan 2023 01:52:20 +0000 (01:52 +0000)]
[bazel][libc] fixes

(Phab review only sent in draft to use bazel presubmit testing -
precommit human review was not required)

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

21 months ago[BOLT] Handle __uniq suffix added by -funique-internal-linkage-names
Amir Ayupov [Fri, 20 Jan 2023 23:50:59 +0000 (15:50 -0800)]
[BOLT] Handle __uniq suffix added by -funique-internal-linkage-names

In profile matching, if `.__uniq` suffix added for internal linkage
symbols with `-funique-internal-linkage-names` prevents BOLT from
matching to a binary function, try to strip the suffix and perform
fuzzy name matching.

Follow-up to D124117.

Reviewed By: #bolt, maksfb

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

21 months agoGlobalISel: Split main function of RegBankSelect up
Matt Arsenault [Wed, 18 Jan 2023 10:53:18 +0000 (05:53 -0500)]
GlobalISel: Split main function of RegBankSelect up

This will allow for easier overriding of the pass.

21 months agollvm-reduce: Fix default handling of intermediate format
Matt Arsenault [Fri, 20 Jan 2023 00:47:18 +0000 (20:47 -0400)]
llvm-reduce: Fix default handling of intermediate format

Bitcode inputs should produce bitcode intermediates by
default.

21 months agollvm-reduce: Reorganize some function locations
Matt Arsenault [Tue, 17 Jan 2023 18:35:43 +0000 (13:35 -0500)]
llvm-reduce: Reorganize some function locations

Move things that are naturally methods of ReducerWorkItem to
be methods of ReducerWorkItem in the same source file.

21 months agoReland: Drop the ZeroBehavior parameter from countLeadingZeros and the like (NFC)
Kazu Hirata [Sat, 21 Jan 2023 02:42:03 +0000 (18:42 -0800)]
Reland: Drop the ZeroBehavior parameter from countLeadingZeros and the like (NFC)

This patch drops the ZeroBehavior parameter from bit counting
functions like countLeadingZeros.  ZeroBehavior specifies the behavior
when the input to count{Leading,Trailing}Zeros is zero and when the
input to count{Leading,Trailing}Ones is all ones.

ZeroBehavior was first introduced on May 24, 2013 in commit
eb91eac9fb866ab1243366d2e238b9961895612d.  While that patch did not
state the intention, I would guess ZeroBehavior was for performance
reasons.  The x86 machines around that time required a conditional
branch to implement countLeadingZero<uint32_t> that returns the 32 on
zero:

        test    edi, edi
        je      .LBB0_2
        bsr     eax, edi
        xor     eax, 31
.LBB1_2:
        mov     eax, 32

That is, we can remove the conditional branch if we don't care about
the behavior on zero.

IIUC, Intel's Haswell architecture, launched on June 4, 2013,
introduced several bit manipulation instructions, including lzcnt and
tzcnt, which eliminated the need for the conditional branch.

I think it's time to retire ZeroBehavior as its utility is very
limited.  If you care about compilation speed, you should build LLVM
with an appropriate -march= to take advantage of lzcnt and tzcnt.
Even if not, modern host compilers should be able to optimize away
quite a few conditional branches because the input is often known to
be nonzero from dominating conditional branches.

In this iteration, I've moved the forward declarations of
_BitScanForward outside the llvm space to fix builds on Windows.

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

21 months ago[bazel][libc] fixes
David Blaikie [Sat, 21 Jan 2023 01:26:52 +0000 (01:26 +0000)]
[bazel][libc] fixes

& some aarch64 fixes?

21 months ago[libc][Obvious] Restore static keyword of a few static methods.
Siva Chandra [Sat, 21 Jan 2023 00:56:07 +0000 (16:56 -0800)]
[libc][Obvious] Restore static keyword of a few static methods.

The static keyword of the concerned methods was accidentally lost in a
previous commit.

21 months ago[clang][dataflow] Allow analyzing multiple functions in unit tests
Dmitri Gribenko [Sat, 21 Jan 2023 00:22:22 +0000 (01:22 +0100)]
[clang][dataflow] Allow analyzing multiple functions in unit tests

In unit tests for concrete dataflow analyses we typically use the
testonly `checkDataflow()` helper to analyse a free function called
"target". This pattern allows our tests to be uniform and focused on
specific statement- or expression-level C++ features.

As we expand our feature coverage, we want to analyze functions whose
names we don't fully control, like constructors, destructors, operators
etc. In such tests it is often convenient to analyze all functions
defined in the input code, to avoid having to carefully craft an AST
matcher that finds the exact function we're interested in. That can be
easily done by providing `checkDataflow()` with a catch-all matcher like
`functionDecl()`.

It is also often convenient to define multiple special member functions
in a single unit test, for example, multiple constructors, and share the
rest of the class definition code between constructors. As a result, it
makes sense to analyze multiple functions in one unit test.

This change allows `checkDataflow()` to correctly handle AST matchers
that match more than one function. Previously, it would only ever
analyze the first matched function, and silently ignore the rest. Now it
runs dataflow analysis in a loop, and calls `VerifyResults` for each
function that was found in the input and analyzed.

Reviewed By: ymandel, sgatev

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

21 months agobazel: libc: Add missing dependency
David Blaikie [Sat, 21 Jan 2023 00:18:19 +0000 (00:18 +0000)]
bazel: libc: Add missing dependency

21 months agoRevert "WIP listeners", totally pushed by mistake!
Mehdi Amini [Sat, 21 Jan 2023 00:16:06 +0000 (01:16 +0100)]
Revert "WIP listeners", totally pushed by mistake!

This reverts commit 2e312a7baec5e8d8f841ee819966ff3f53f274c6.
Should never have been pushed here...

21 months agoWIP listeners
Mehdi Amini [Fri, 20 Jan 2023 23:43:52 +0000 (00:43 +0100)]
WIP listeners

21 months ago[clang] Add ElaboratedType sugaring for types on implicit special members
Brad King [Fri, 20 Jan 2023 23:29:11 +0000 (15:29 -0800)]
[clang] Add ElaboratedType sugaring for types on implicit special members

Extend the change from commit 15f3cd6bfc67 ([clang] Implement
ElaboratedType sugaring for types written bare, 2021-10-11, D112374)
to cover types in the signatures of implicit copy-constructor,
copy-assignment, move-constructor, and move-assignment members in
C++ record types.

With this fix, diagnostic messages print types of special members
consistently whether they are explicitly or implicitly defined.

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

Reviewed By: rsmith

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

21 months ago[BOLT][NFC] Move out ReorderFunctions::printStats
Amir Ayupov [Fri, 20 Jan 2023 23:41:37 +0000 (15:41 -0800)]
[BOLT][NFC] Move out ReorderFunctions::printStats

Break out stats-printing code from ReorderFunctions::reorder for brevity.

Reviewed By: #bolt, maksfb

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

21 months agoRemove the LINK_COMPONENTS entry from lldb-instr CMakery
Jim Ingham [Fri, 20 Jan 2023 23:40:55 +0000 (15:40 -0800)]
Remove the LINK_COMPONENTS entry from lldb-instr CMakery

The presence of this entry causes the Xcode generator to produce
two references to libLLVMSupport.a, one at the end of the list, and
that causes the build to fail with a link error.  The first version
was pulled in when processing the CLANG_LIBS entries in the
lldb/tools/lldb-instr/CMakeLists.txt.

I looked around and the only places where we use LINK_COMPONENTS and
CLANG_LIBS together are various lldb subdirectories that produce .a
files but don't actually link anything.

Anyway, this line doesn't seem to be needed for either the regular
Ninja or the Xcode generator, and removing it makes the xcode build
work again.

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

21 months ago[OpenMP] Remove unfinished and unused 'Analyzer' tool
Joseph Huber [Fri, 20 Jan 2023 23:34:26 +0000 (17:34 -0600)]
[OpenMP] Remove unfinished and unused 'Analyzer' tool

Summary:
This patch removes a tool that was never finished and has no plans of
being picked up again. It does not need to live in LLVM source in an
unusable state.

21 months ago[OpenMP] Clean up AMD handling for `-fopenmp-targets=amdgcn` arch inference
Joseph Huber [Thu, 19 Jan 2023 17:49:15 +0000 (11:49 -0600)]
[OpenMP] Clean up AMD handling for `-fopenmp-targets=amdgcn` arch inference

Previously we had some special handling here that errored out if
multiple architectures were detected. This isn't a problem anymore as
the runtime can handle multi-archicture binaries automatically. So it's
safe to simply take the first architecture that we know works. If users
use `--offload-arch=native` instead it will build for all the
architectures at the same time rather than just picking one. This patch
makes it consisten with the NVPTX version.

Reviewed By: jdoerfert

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

21 months ago[BPF][clang] Ignore stack protector options for BPF target
Eduard Zingerman [Fri, 20 Jan 2023 23:11:00 +0000 (15:11 -0800)]
[BPF][clang] Ignore stack protector options for BPF target

Stack protector builtin functions are not implemented for BPF target,
thus compiling programs with one of the following options would result
in an error:
  -fstack-protector
  -fstack-protector-all
  -fstack-protector-strong

This commit adds logic to ignore these options for BPF target.
Searching through DiagnosticDriverKinds.td shows that all messages for
such kind of behavior are implemented as warnings, this commit follows
the suit.

Here is an example of the diagnostic message:
  clang-16: warning: ignoring '-fstack-protector' option as it is not currently supported for target 'bpf' [-Woption-ignored]

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

21 months ago[LegacyDivergenceAnalysis] Add NewPM support
Anshil Gandhi [Fri, 20 Jan 2023 22:20:39 +0000 (15:20 -0700)]
[LegacyDivergenceAnalysis] Add NewPM support

Reviewed By: arsenm

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

21 months agoFix a -Wunused-variable warning in release build.
Haojian Wu [Fri, 20 Jan 2023 22:39:04 +0000 (23:39 +0100)]
Fix a -Wunused-variable warning in release build.

21 months agoAMDGPU: Put un-initiaized enumerators together in an enum definition.
Changpeng Fang [Fri, 20 Jan 2023 22:39:40 +0000 (14:39 -0800)]
AMDGPU: Put un-initiaized enumerators together in an enum definition.

Summary:
  For any enumerator whose definition does not have an initializer,
the associated value is the value of the previous enumerator plus one.
In order to avoid the possibility that two unrelated enumerators to
have the same value, we should try to cluster the uninitialized enumerators
together.

Reviewers: arsenm

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

21 months ago[InstSimplify] with poison-safe logical ops: (X && Y) || X --> X
Sanjay Patel [Fri, 20 Jan 2023 21:06:33 +0000 (16:06 -0500)]
[InstSimplify] with poison-safe logical ops: (X && Y) || X --> X

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

issue #60167

21 months ago[InstSimplify] add tests for logical-and/or reduction; NFC
Sanjay Patel [Fri, 20 Jan 2023 20:42:08 +0000 (15:42 -0500)]
[InstSimplify] add tests for logical-and/or reduction; NFC

issue #60167

21 months ago[mlir] Fix a warning
Kazu Hirata [Fri, 20 Jan 2023 22:33:57 +0000 (14:33 -0800)]
[mlir] Fix a warning

This patch fixes:

  mlir/lib/Dialect/SparseTensor/IR/SparseTensorDialect.cpp:528:22:
  error: comparison of integers of different signs: 'uint64_t' (aka
  'unsigned long') and 'int64_t' (aka 'long') [-Werror,-Wsign-compare]

21 months ago[libc][NFC] Replace static inline and inline annotations with LIBC_INLINE.
Siva Chandra Reddy [Thu, 19 Jan 2023 08:32:50 +0000 (08:32 +0000)]
[libc][NFC] Replace static inline and inline annotations with LIBC_INLINE.

This is first of a few patches which will do similar mechanical changes.

LIBC_INLINE is a simple macro which is default defined as just `inline`.
The idea is that, different downstream contexts can define the macro as
suitable to their use case and context. For example, one can choose to
define LIBC_INLINE as `[[clang::internal_linkage]] inline`.

Reviewed By: lntue

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

21 months ago[libc++] Add FreeBSD XFAILs in preparation for CI
Ed Maste [Thu, 15 Dec 2022 14:34:29 +0000 (09:34 -0500)]
[libc++] Add FreeBSD XFAILs in preparation for CI

This at least allows us to stand up libc++ FreeBSD CI and avoid future
regressions.  The failures do need to be addressed, and can be done
iteratively.

Reviewed By: philnik, Mordante

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

21 months agoRevert "Add support for clang-cl's option `-fexcess-precision`."
Zahira Ammarguellat [Fri, 20 Jan 2023 21:42:56 +0000 (16:42 -0500)]
Revert "Add support for clang-cl's option `-fexcess-precision`."

This reverts commit 47074683c906f920cb7bba462beeb57ca4b84ab0.

Had to revert it that since it's breaking tests on MacOS. See
https://reviews.llvm.org/D141929 comments from @thakis.

21 months ago[Clang] Fix test case `clang/test/OpenMP/bug59944.c`
Shilei Tian [Fri, 20 Jan 2023 21:40:38 +0000 (16:40 -0500)]
[Clang] Fix test case `clang/test/OpenMP/bug59944.c`

21 months agoRevert "sanmd: refine selection of functions for UAR checking"
Arthur Eubanks [Fri, 20 Jan 2023 21:40:36 +0000 (13:40 -0800)]
Revert "sanmd: refine selection of functions for UAR checking"

This reverts commit 9d4f1a9eff27716069dc6a2d991baa228c197b85.

Breaks under -DCOMPILER_RT_BUILD_SANITIZERS=OFF

21 months ago[libc++] add FreeBSD atomic wait support
Konstantin Belousov [Wed, 18 Jan 2023 01:18:24 +0000 (20:18 -0500)]
[libc++] add FreeBSD atomic wait support

Reviewed By: philnik

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

21 months ago[clang][modules] Disallow importing private framework in the implementation
Jan Svoboda [Fri, 20 Jan 2023 01:02:42 +0000 (17:02 -0800)]
[clang][modules] Disallow importing private framework in the implementation

Whenever we are compiling implementation of a framework (with the `-fmodule-name=FW` option), we never translate `#import <FW/Header.h>` to an import, regardless of whether "Header.h" belongs to "FW" or "FW_Private". For the same reasons, we also disallow `@import FW`. However, we still allow `@import FW_Private`. This patch disallows that a well, to be consistent with the rest of the rules.

Reviewed By: benlangmuir

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

21 months ago[mlir][sparse] IR/SparseTensorDialect.cpp: misc code cleanup
wren romano [Thu, 19 Jan 2023 02:22:48 +0000 (18:22 -0800)]
[mlir][sparse] IR/SparseTensorDialect.cpp: misc code cleanup

Reviewed By: Peiming

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

21 months ago[Clang] [Sema] Removed a fix-it for system headers
Fahad Nayyar [Mon, 16 Jan 2023 19:42:10 +0000 (19:42 +0000)]
[Clang] [Sema] Removed a fix-it for system headers

Disabled an invalid fix-it which suggested fixes to be applied in system headers for some programs in IDEs like Xcode.

rdar://100890960

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

21 months ago[APSInt] Fix bug in APSInt mentioned in https://github.com/llvm/llvm-project/issues...
Peter Rong [Tue, 27 Dec 2022 02:05:11 +0000 (18:05 -0800)]
[APSInt] Fix bug in APSInt mentioned in https://github.com/llvm/llvm-project/issues/59515

Also provide a `tryExtValue()` API like APInt did in D139683

Reviewed By: RKSimon, efriedma

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

21 months ago[clang/CodeGenActionTest] Use the platform's path separator for the `DebugInfoCWDCode...
Argyrios Kyrtzidis [Fri, 20 Jan 2023 18:14:11 +0000 (10:14 -0800)]
[clang/CodeGenActionTest] Use the platform's path separator for the `DebugInfoCWDCodeGen` test

Fixes a failure in some Windows configuration.

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

21 months ago[AMDGPU][NFC] Clarify heterogeneous DWARF address/memory spaces
Tony Tye [Fri, 20 Jan 2023 18:08:19 +0000 (18:08 +0000)]
[AMDGPU][NFC] Clarify heterogeneous DWARF address/memory spaces

Reviewed By: scott.linder

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

21 months ago[OMPIRBuilder] Pass dependencies to createTask by value
Prabhdeep Singh Soni [Fri, 13 Jan 2023 03:58:21 +0000 (22:58 -0500)]
[OMPIRBuilder] Pass dependencies to createTask by value

This patch modifies OpenMPIRBuilder::createTask to accept its
Dependencies vector by value instead of by reference. This is
necessary because the PostOutlineCB lambda that uses this Dependencies
vector may outlive the original Dependencies vector.

Reviewed By: kiranchandramohan

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

21 months ago[lldb] Implement SymbolFile::CopyType
Augusto Noronha [Wed, 18 Jan 2023 20:22:43 +0000 (12:22 -0800)]
[lldb] Implement SymbolFile::CopyType

SymbolFiles should be the only point of creation of Types to ensure
that they aren't destroyed prematurely by keeping them in the
SymbolFile's TypeList. This patch hides the copy constructor of Types,
and adds a new CopyType function to SymbolFile, so Types can still be
copied safely.

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