platform/upstream/llvm.git
15 months ago[Support] Remove llvm::is_trivially_{copy/move}_constructible
Fangrui Song [Wed, 26 Jul 2023 00:21:16 +0000 (17:21 -0700)]
[Support] Remove llvm::is_trivially_{copy/move}_constructible

This restores D132311, which was reverted in
29c841ce93e087fa4e0c5f3abae94edd460bc24a (Sep 2022) due to certain files
not buildable with GCC 7.3.0. The previous attempt was reverted by
6cd9608fb37ca2418fb44b57ec955bb5efe10689 (Dec 2020).

This time, GCC 7.3.0 has existing build errors for a long time due to
structured bindings for many files, e.g.

```
llvm/lib/Transforms/Vectorize/LoopVectorize.cpp:9098:13: error: cannot decompose class type ‘std::pair<llvm::Value*, const llvm::SCEV*>’: both it and it
s base class ‘std::pair<llvm::Value*, const llvm::SCEV*>’ have non-static data members
   for (auto [_, Stride] : Legal->getLAI()->getSymbolicStrides()) {
             ^~~~~~~~~~~
```

... and also some `error: duplicate initialization of` instances due to llvm/Transforms/IPO/Attributor.h.

---

GCC 7.5.0 has a bug that, without this change, certain `SmallVector` with a `std::pair` element type like `SmallVector<std::pair<Instruction * const, Info>, 0> X;` lead to spurious

```
/tmp/opt/gcc-7.5.0/include/c++/7.5.0/type_traits:878:48: error: constructor required before non-static data member for ‘...’ has been parsed
```

Switching to std::is_trivially_{copy/move}_constructible fixes the error.

(cherry picked from commit 6a684dbc4433a33e5f94fb15c9e378a2408021e0)

15 months agoHIP: Fix broken version check for deprecated macro
Matt Arsenault [Tue, 25 Jul 2023 12:20:16 +0000 (08:20 -0400)]
HIP: Fix broken version check for deprecated macro

Remove test hack that was accidentally pushed.

(cherry picked from commit 73105a54725ec11165dd8c90ca3b7a0b1b9cd6e3)

15 months agoRevert "[FuncSpec] Add Phi nodes to the InstCostVisitor."
Alexandros Lamprineas [Wed, 26 Jul 2023 18:09:35 +0000 (19:09 +0100)]
Revert "[FuncSpec] Add Phi nodes to the InstCostVisitor."

This reverts commit 03f1d09fe484f6c924434bc9c888e022b3514455
because of a crash reported on https://reviews.llvm.org/D154852

15 months ago[libc++][mdspan] Fix uglification, categorize asserts and move tests
Christian Trott [Tue, 25 Jul 2023 18:25:17 +0000 (12:25 -0600)]
[libc++][mdspan] Fix uglification, categorize asserts and move tests

Fixes uglification in mdspan deduction guides, which CI
did not test for until recently. The CI modification
and mdspan testing overlapped, so mdspan landed with green
CI, and the CI modification landed too.

Make most assertions in mdspan and its helper classes
trigger during a hardened build in order to catch
out of bounds access errors.

Also moves all mdspan assertions tests from libcxx/test/std
to libcxx/test/libcxx.

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

15 months ago[libc++][mdspan] Implement std::mdspan class
Christian Trott [Tue, 25 Jul 2023 04:35:15 +0000 (22:35 -0600)]
[libc++][mdspan] Implement std::mdspan class

This implements P0009 std::mdspan ((https://wg21.link/p0009)),
a multidimensional span with customization points for
layouts and data access.

Co-authored-by: Damien L-G <dalg24@gmail.com>
Differential Revision: https://reviews.llvm.org/154367

15 months ago[lldb] Treat ARM64X images as ARM64.
Jacek Caban [Tue, 25 Jul 2023 22:09:34 +0000 (00:09 +0200)]
[lldb] Treat ARM64X images as ARM64.

With D149091, ARM64X binaries are no longer reported as ARM64. This broke
lldb tests as Windows 11 system DLLs are mostly ARM64X binaries and lldb
doesn't know how to handle them. Ideally lldb would understand a bit more
about ARM64X and handle them as AMD64 in x64 processes, but this is
enough to preserve previous behavior and fix tests.

Reviewed By: mstorsjo
Differential Revision: https://reviews.llvm.org/D156268

(cherry picked from commit 48feef277a24b1b9c0ff33267a91e70d9584012e)

15 months ago[XCOFF] Enable available_externally linkage for functions.
esmeyi [Wed, 26 Jul 2023 02:47:11 +0000 (22:47 -0400)]
[XCOFF] Enable available_externally linkage for functions.

Summary: D80642 added support for emitting AvailableExternally Linkage on AIX. However, an assertion of "Trying to get csect representation of this symbol but none was set." occurred when a function is declared as available_externally. This is due to we missing to generate a csect for the function. This patch fixes it.

Reviewed By: hubert.reinterpretcast, shchenz

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

Signed-off-by: Esme Yi <esme.yi@ibm.com>
(cherry picked from commit e83b8a5e711a663c44e80965da5c747e08dea497)

15 months ago[OpenMP] [OMPT] [7/8] Invoke tool-supplied callbacks before and after target launch...
Michael Halkenhaeuser [Tue, 25 Jul 2023 12:14:59 +0000 (08:14 -0400)]
[OpenMP] [OMPT] [7/8] Invoke tool-supplied callbacks before and after target launch and data transfer operations

Implemented RAII objects, initialized at target entry points, that
invoke tool-supplied callbacks. Updated status of target callbacks as
implemented.

Depends on D127365

Patch from John Mellor-Crummey <johnmc@rice.edu>
With contributions from:
Dhruva Chakrabarti <Dhruva.Chakrabarti@amd.com>
Jan-Patrick Lehr <janpatrick.lehr@amd.com>

Reviewed By: jdoerfert, dhruvachak, jplehr

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

(cherry picked from commit 1dec417ac4a533e40f637cd1a7f0628803d9e634)

15 months agoReland "[LoongArch] Support -march=native and -mtune="
Weining Lu [Wed, 26 Jul 2023 01:56:49 +0000 (09:56 +0800)]
Reland "[LoongArch] Support -march=native and -mtune="

As described in [1][2], `-mtune=` is used to select the type of target
microarchitecture, defaults to the value of `-march`. The set of
possible values should be a superset of `-march` values. Currently
possible values of `-march=` and `-mtune=` are `native`, `loongarch64`
and `la464`.

D136146 has supported `-march={loongarch64,la464}` and this patch adds
support for `-march=native` and `-mtune=`.

A new ProcessorModel called `loongarch64` is defined in LoongArch.td
to support `-mtune=loongarch64`.

`llvm::sys::getHostCPUName()` returns `generic` on unknown or future
LoongArch CPUs, e.g. the not yet added `la664`, leading to
`llvm::LoongArch::isValidArchName()` failing to parse the arch name.
In this case, use `loongarch64` as the default arch name for 64-bit
CPUs.

And these two preprocessor macros are defined:
- __loongarch_arch
- __loongarch_tune

[1]: https://github.com/loongson/LoongArch-Documentation/blob/2023.04.20/docs/LoongArch-toolchain-conventions-EN.adoc
[2]: https://github.com/loongson/la-softdev-convention/blob/v0.1/la-softdev-convention.adoc

Reviewed By: xen0n, wangleiat

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

15 months ago[Clang] use unsigned integer constants in unit-test | fixes build error on ppc64le...
Kai Stierand [Tue, 25 Jul 2023 11:47:46 +0000 (13:47 +0200)]
[Clang] use unsigned integer constants in unit-test | fixes build error on ppc64le-lld-multistage-test

Fixes:
    /home/buildbots/ppc64le-lld-multistage-test/ppc64le-lld-multistage-test/llvm-project/third-party/unittest/googletest/include/gtest/gtest.h:1526:11: warning: comparison of integer expressions of different signedness: ‘const unsigned int’ and ‘const int’ [-Wsign-compare]
    /home/buildbots/ppc64le-lld-multistage-test/ppc64le-lld-multistage-test/llvm-project/third-party/unittest/googletest/include/gtest/gtest.h:1526:11: warning: comparison of integer expressions of different signedness: ‘const long unsigned int’ and ‘const int’ [-Wsign-compare]

Reviewed By: cor3ntin

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

15 months agoRevert "[OpenMP] Add the `ompx_attribute` clause for target directives"
Aaron Ballman [Tue, 25 Jul 2023 11:55:28 +0000 (07:55 -0400)]
Revert "[OpenMP] Add the `ompx_attribute` clause for target directives"

This reverts commit ef9ec4bbcca2fa4f64df47bc426f1d1c59ea47e2.

The changes broke several bots:
https://lab.llvm.org/buildbot/#/builders/176/builds/3408
https://lab.llvm.org/buildbot/#/builders/198/builds/4028
https://lab.llvm.org/buildbot/#/builders/197/builds/8491
https://lab.llvm.org/buildbot/#/builders/197/builds/8491

15 months agoHIP: Directly call nearbyint builtins
Matt Arsenault [Tue, 22 Nov 2022 04:37:15 +0000 (23:37 -0500)]
HIP: Directly call nearbyint builtins

15 months agoAMDGPU: Remove trailing whitespace from documentation
Matt Arsenault [Tue, 25 Jul 2023 11:50:08 +0000 (07:50 -0400)]
AMDGPU: Remove trailing whitespace from documentation

15 months agoAMDGPU: Correctly expand f64 sqrt intrinsic
Matt Arsenault [Sun, 20 Nov 2022 16:40:25 +0000 (08:40 -0800)]
AMDGPU: Correctly expand f64 sqrt intrinsic

rocm-device-libs and llpc were avoiding using f64 sqrt
intrinsics in favor of their own expansions. Port the
expansion into the backend. Both of these users should be
updated to call the intrinsic instead.

The library and llpc expansions are slightly different.
llpc uses an ldexp to do the scale; the library uses a multiply.

Use ldexp to do the scale instead of the multiply.
I believe v_ldexp_f64 and v_mul_f64 are always the same number of
cycles, but it's cheaper to materialize the 32-bit integer constant
than the 64-bit double constant.

The libraries have another fast version of sqrt which will
be handled separately.

I am tempted to do this in an IR expansion instead. In the IR
we could take advantage of computeKnownFPClass to avoid
the 0-or-inf argument check.

15 months agoAMDGPU: Add more sqrt f64 lowering tests
Matt Arsenault [Tue, 20 Jun 2023 10:19:08 +0000 (06:19 -0400)]
AMDGPU: Add more sqrt f64 lowering tests

Almost all permutations of the flags are potentially relevant.

15 months agoHIP: Directly call rint builtins
Matt Arsenault [Sun, 20 Nov 2022 16:44:50 +0000 (08:44 -0800)]
HIP: Directly call rint builtins

15 months ago[Sema] Fix handling of functions that hide classes
John Brawn [Wed, 28 Jun 2023 09:31:38 +0000 (10:31 +0100)]
[Sema] Fix handling of functions that hide classes

When a function is declared in the same scope as a class with the same
name then the function hides that class. Currently this is done by a
single check after the main loop in LookupResult::resolveKind, but
this can give the wrong result when we have a using declaration in
multiple namespace scopes in two different ways:

 * When the using declaration is hidden in one namespace but not the
   other we can end up considering only the hidden one when deciding
   if the result is ambiguous, causing an incorrect "not ambiguous"
   result.

 * When two classes with the same name in different namespace scopes
   are both hidden by using declarations this can result in
   incorrectly deciding the result is ambiguous. There's currently a
   comment saying this is expected, but I don't think that's correct.

Solve this by checking each Decl to see if it's hidden by some other
Decl in the same scope. This means we have to delay removing anything
from Decls until after the main loop, in case a Decl is hidden by
another that is removed due to being non-unique.

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

15 months agoAttributor: Fix typo
Matt Arsenault [Mon, 24 Jul 2023 13:34:52 +0000 (09:34 -0400)]
Attributor: Fix typo

15 months ago[FuncSpec][NFC] Leave a comment for future improvements.
Alexandros Lamprineas [Tue, 25 Jul 2023 10:09:52 +0000 (11:09 +0100)]
[FuncSpec][NFC] Leave a comment for future improvements.

Adds a TODO for checking inlinining opportunities while traversing
the users of the specialization arguments. This was brought up in
the review of D154852.

15 months ago[RISCV] Remove zvk uimm constraints
4vtomat [Wed, 19 Jul 2023 02:10:18 +0000 (19:10 -0700)]
[RISCV] Remove zvk uimm constraints

Since the spec doesn't describe these behaviors as invalid,
the llvm-mc should just make them take care by hardware.

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

15 months agoRevert "[OpenMP] [OMPT] [7/8] Invoke tool-supplied callbacks before and after target...
Michael Halkenhaeuser [Tue, 25 Jul 2023 10:21:51 +0000 (06:21 -0400)]
Revert "[OpenMP] [OMPT] [7/8] Invoke tool-supplied callbacks before and after target launch and data transfer operations"

This reverts commit 00ccfcf9a6ee61c56cbe01d1e01b074797465fa4.

15 months ago[SVE] Add vselect(mla/mls) patterns for cases where a multiplicand is used for the...
Paul Walker [Fri, 21 Jul 2023 15:18:20 +0000 (15:18 +0000)]
[SVE] Add vselect(mla/mls) patterns for cases where a multiplicand is used for the false lanes.

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

15 months ago[FuncSpec] Add Phi nodes to the InstCostVisitor.
Alexandros Lamprineas [Thu, 6 Jul 2023 17:09:32 +0000 (18:09 +0100)]
[FuncSpec] Add Phi nodes to the InstCostVisitor.

This patch allows constant folding of PHIs when estimating the user
bonus. Phi nodes are a special case since some of their inputs may
remain unresolved until all the specialization arguments have been
processed by the InstCostVisitor. Therefore, we keep a list of dead
basic blocks and then lazily visit the Phi nodes once the user bonus
has been computed for all the specialization arguments.

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

15 months ago[bazel] Bazel fix for 69bd7fae2b037c6538d531f39c25c160d8e6ff87
Dmitry Chernenkov [Tue, 25 Jul 2023 09:58:57 +0000 (09:58 +0000)]
[bazel] Bazel fix for 69bd7fae2b037c6538d531f39c25c160d8e6ff87

15 months ago[bazel][mlir] Port ca9a3354d04b15366088d7831b40f891e3d77b95
Goran Flegar [Tue, 25 Jul 2023 09:38:35 +0000 (11:38 +0200)]
[bazel][mlir] Port ca9a3354d04b15366088d7831b40f891e3d77b95

15 months ago[NFC][clang] Fix static analyzer concerns
Podchishchaeva, Mariya [Tue, 25 Jul 2023 09:32:16 +0000 (02:32 -0700)]
[NFC][clang] Fix static analyzer concerns

EHScopeStack doesn't seem to be intended for copy. It frees memory in
the destructor and doesn't have user-written copy c'tor and assignment
operator, so delete them to avoid using default ones which would do
wrong.

Reviewed By: aaron.ballman

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

15 months ago[clang][analyzer] Improved documentation for TaintPropagation Checker
Daniel Krupp [Tue, 28 Feb 2023 13:45:23 +0000 (14:45 +0100)]
[clang][analyzer] Improved documentation for TaintPropagation Checker

The usage of the taint analysis is described through a command injection attack example.
It is explained how to make a variable sanitized through configuration.

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

15 months agoRevert rGfae7b98c221b5b28797f7b56b656b6b819d99f27 "[Support] Change SetVector's defau...
Simon Pilgrim [Tue, 25 Jul 2023 09:21:58 +0000 (10:21 +0100)]
Revert rGfae7b98c221b5b28797f7b56b656b6b819d99f27 "[Support] Change SetVector's default template parameter to SmallVector<*, 0>"

This is failing on Windows MSVC builds:
llvm\unittests\Support\ThreadPool.cpp(380): error C2440: 'return': cannot convert from 'Vector' to 'std::vector<llvm::BitVector,std::allocator<llvm::BitVector>>'
        with
        [
            Vector=llvm::SmallVector<llvm::BitVector,0>
        ]

15 months ago[gn build] Port 6084ee742064
LLVM GN Syncbot [Tue, 25 Jul 2023 09:16:39 +0000 (09:16 +0000)]
[gn build] Port 6084ee742064

15 months ago[docs] Add llvm & clang release notes for LoongArch
Weining Lu [Tue, 25 Jul 2023 08:31:23 +0000 (16:31 +0800)]
[docs] Add llvm & clang release notes for LoongArch

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

15 months ago[lld][ELF] Support LoongArch
WANG Xuerui [Tue, 25 Jul 2023 09:03:28 +0000 (17:03 +0800)]
[lld][ELF] Support LoongArch

This adds support for the LoongArch ELF psABI v2.00 [1] relocation
model to LLD. The deprecated stack-machine-based psABI v1 relocs are not
supported.

The code is tested by successfully bootstrapping a Gentoo/LoongArch
stage3, complete with common GNU userland tools and both the LLVM and
GNU toolchains (GNU toolchain is present only for building glibc,
LLVM+Clang+LLD are used for the rest). Large programs like QEMU are
tested to work as well.

[1]: https://loongson.github.io/LoongArch-Documentation/LoongArch-ELF-ABI-EN.html

Reviewed By: MaskRay, SixWeining

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

15 months ago[Clang][SVE] Permit specific predicate-as-counter registers in inline assembly
David Sherwood [Mon, 24 Jul 2023 12:34:42 +0000 (12:34 +0000)]
[Clang][SVE] Permit specific predicate-as-counter registers in inline assembly

This patch adds the predicate-as-counter registers pn0-pn15 to the
list of supported registers used when writing inline assembly.

Tests added to

  clang/test/CodeGen/aarch64-sve-inline-asm.c

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

15 months ago[Clang] Fix crash in CIndex, when visiting a static_assert without message
Kai Stierand [Tue, 25 Jul 2023 08:36:53 +0000 (10:36 +0200)]
[Clang] Fix crash in CIndex, when visiting a static_assert without message

After implementation of "[Clang] Implement P2741R3 - user-generated static_assert messages"  (47ccfd7a89e2a9a747a7114db18db1376324799c) the c indexer crashes when handling a `static_assert` w/o any message.
This is caused by using `dyn_cast` to get the literal string, which isn't working on `nullptr`.

Reviewed By: cor3ntin

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

15 months ago[mlir][ArmSME] Add tile load op and extend tile store tile size support
Cullen Rhodes [Tue, 25 Jul 2023 08:28:36 +0000 (08:28 +0000)]
[mlir][ArmSME] Add tile load op and extend tile store tile size support

This extends the existing 'arm_sme.tile_store' op to support all tile
sizes and adds a new op 'arm_sme.tile_load', as well as lowerings from
vector -> custom ops and custom ops -> intrinsics. Currently there's no
lowering for i128.

Depends on D154867

Reviewed By: awarzynski, dcaballe

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

15 months ago[JITLink][PowerPC] Pre-commit test for D155925. NFC.
Kai Luo [Tue, 25 Jul 2023 08:21:43 +0000 (08:21 +0000)]
[JITLink][PowerPC] Pre-commit test for D155925. NFC.

15 months ago[clang][driver][NFC] Call IsARMBigEndain function only for isARM and isThumb.
Simi Pallipurath [Thu, 20 Jul 2023 09:26:45 +0000 (10:26 +0100)]
[clang][driver][NFC] Call IsARMBigEndain function only for isARM and isThumb.

IsARMBIgEndian function returns true only if:
  1. The triples are either arm or thumb and the
     commandline has the  option -mbig-endian
  2. The triples are either armeb or thumbeb.

Missing the checking of arm or thumb triples in the
first case pass through the --be8 endian flag to
linker For AArch64 as well which is not expected.
This is the regression happened from the previous
patch https://reviews.llvm.org/D154786.

It is better to refactor to only call IsARMBigEndian
for isARM and isthumb satisfying conditions which
keeps ARM and AArch64 separate.

Reviewed By: MaskRay

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

15 months ago[RISCV] Merge rv32/rv64 vector narrowing integer right shift intrinsic tests that...
Jim Lin [Tue, 25 Jul 2023 05:14:27 +0000 (13:14 +0800)]
[RISCV] Merge rv32/rv64 vector narrowing integer right shift intrinsic tests that have the same content. NFC.

15 months ago[AMDGPU] Remove unused variable 'CNI' in /AMDGPUMachineCFGStructurizer.cpp (NFC)
Jie Fu [Tue, 25 Jul 2023 07:56:40 +0000 (15:56 +0800)]
[AMDGPU] Remove unused variable 'CNI' in /AMDGPUMachineCFGStructurizer.cpp (NFC)

/Users/jiefu/llvm-project/llvm/lib/Target/AMDGPU/AMDGPUMachineCFGStructurizer.cpp:2603:10: error: variable 'CNI' set but not used [-Werror,-Wunused-but-set-variable]
    auto CNI = CI;
         ^
1 error generated.

15 months ago[Support] Change SetVector's default template parameter to SmallVector<*, 0>
Fangrui Song [Tue, 25 Jul 2023 07:39:17 +0000 (00:39 -0700)]
[Support] Change SetVector's default template parameter to SmallVector<*, 0>

Similar to D156016 for MapVector.

15 months agoRevert "[LV] Re-use existing broadcast value for live-ins."
Martin Storsjö [Tue, 25 Jul 2023 07:27:56 +0000 (10:27 +0300)]
Revert "[LV] Re-use existing broadcast value for live-ins."

This reverts commit eea9258648ce73507f6f85c395de978af659d498.

That commit triggered crashes in the following testcase:

$ cat reduced.c
typedef struct {
  int a[8]
} b;
typedef struct {
  b *c;
  short d
} e;
void f() {
  int g;
  char *h;
  e *i = f;
  short j = i->d;
  int a = i->c->a[0];
  for (;;)
    for (; g < a; g++) {
      *h = j * i->d >> 8;
      h++;
    }
}
$ clang -target aarch64-linux-gnu -w -c -O2 reduced.c

15 months ago[DAGCombiner] Minor improvements to foldAndOrOfSETCC. NFC
Craig Topper [Tue, 25 Jul 2023 07:20:05 +0000 (00:20 -0700)]
[DAGCombiner] Minor improvements to foldAndOrOfSETCC. NFC

Reduce the scope of some variables.
Replace an if with an assertion.

Reviewed By: kmitropoulou

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

15 months ago[RISCV] Don't print a tab after mnemonics that don't have operands.
Craig Topper [Tue, 25 Jul 2023 05:55:24 +0000 (22:55 -0700)]
[RISCV] Don't print a tab after mnemonics that don't have operands.

Reviewed By: wangpc

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

15 months ago[RISCV] Match ext_vl+sra_vl/srl_vl+trunc_vector_vl to vnsra.wv/vnsrl.wv
LiaoChunyu [Tue, 25 Jul 2023 06:07:01 +0000 (14:07 +0800)]
[RISCV] Match ext_vl+sra_vl/srl_vl+trunc_vector_vl to vnsra.wv/vnsrl.wv

similar to D117454, try to add vl patterns and testcases.

Reviewed By: craig.topper

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

15 months ago[X86] Support -march=graniterapids-d and update -march=graniterapids
Freddy Ye [Tue, 25 Jul 2023 05:47:45 +0000 (13:47 +0800)]
[X86] Support -march=graniterapids-d and update -march=graniterapids

Reviewed By: pengfei, RKSimon, skan

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

15 months ago[AMDGPU] Allow vector access types in PromoteAllocaToVector
pvanhout [Wed, 19 Jul 2023 13:33:28 +0000 (15:33 +0200)]
[AMDGPU] Allow vector access types in PromoteAllocaToVector

Depends on D152706
Solves SWDEV-408279

Reviewed By: #amdgpu, arsenm

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

15 months ago[AMDGPU] Use SSAUpdater in PromoteAlloca
pvanhout [Wed, 28 Jun 2023 10:22:26 +0000 (12:22 +0200)]
[AMDGPU] Use SSAUpdater in PromoteAlloca

This allows PromoteAlloca to not be reliant on a second SROA run to remove the alloca completely. It just does the full transformation directly.

Note PromoteAlloca is still reliant on SROA running first to
canonicalize the IR. For instance, PromoteAlloca will no longer handle aggregate types because those should be simplified by SROA before reaching the pass.

Reviewed By: #amdgpu, arsenm

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

15 months agoDon't perform dynamic_cast optimization at -O0.
Richard Smith [Tue, 25 Jul 2023 05:21:49 +0000 (22:21 -0700)]
Don't perform dynamic_cast optimization at -O0.

It seems preferable to avoid this optimization under -O0, and we're not
set up to emit speculative references to vtables at -O0 in general
anyway.

For #64088.

15 months ago[OpenMP] Add the `ompx_attribute` clause for target directives
Johannes Doerfert [Fri, 3 Mar 2023 02:35:15 +0000 (18:35 -0800)]
[OpenMP] Add the `ompx_attribute` clause for target directives

CUDA and HIP have kernel attributes to tune the code generation (in the
backend). To reuse this functionality for OpenMP target regions we
introduce the `ompx_attribute` clause that takes these kernel
attributes and emits code as if they had been attached to the kernel
fuction (which is implicitly generated).

To limit the impact, we only support three kernel attributes:
`amdgpu_waves_per_eu`, for AMDGPU
`amdgpu_flat_work_group_size`, for AMDGPU
`launch_bounds`, for NVPTX

The existing implementations of those attributes are used for error
checking and code generation. `ompx_attribute` can be attached to any
executable target region and it can hold more than one kernel attribute.

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

15 months ago[Support] Change MapVector's default template parameter to SmallVector<*, 0>
Fangrui Song [Tue, 25 Jul 2023 05:04:03 +0000 (22:04 -0700)]
[Support] Change MapVector's default template parameter to SmallVector<*, 0>

SmallVector<*, 0> is often a better replacement for std::vector :
both the object size and the code size are smaller.
(SmallMapVector uses SmallVector as well, but it is not common.)

clang size decreases by 0.0226%.
instructions:u decreases 0.037% when compiling a sqlite3 amalgram.

Reviewed By: JDevlieghere

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

15 months ago[mlir-tblgen] Fix IWYU
Fangrui Song [Tue, 25 Jul 2023 04:50:29 +0000 (21:50 -0700)]
[mlir-tblgen] Fix IWYU

Right now std::vector is instantiated with an incomplete element type,
which is ok but best to avoid.

15 months ago[BOLT] Add blocks order kind to YAML profile header
Amir Ayupov [Tue, 25 Jul 2023 04:32:44 +0000 (21:32 -0700)]
[BOLT] Add blocks order kind to YAML profile header

Specify blocks order used in YAML profile. Needed to ensure profile backwards
compatibility with pre-D155514 DFS order by default.

Reviewed By: #bolt, maksfb

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

15 months ago[mlir] Fix for MSVC bool splat issue encountered.
Kevin Gleason [Tue, 25 Jul 2023 03:39:40 +0000 (20:39 -0700)]
[mlir] Fix for MSVC bool splat issue encountered.

When building MLIR using bazel on windows with MSVC2019, bool splats
were being created incorrectly:

```
dense<[true,true,true,true]> : tensor<4xi1>
-(parse with mlir-opt)-> dense<[true, false, false, false]> : tensor<4xi1>
```

Appears that a Windows bazel build produces a corrupt DenseIntOrFPElementsAttr.
Unable to repro using MSVC and cmake.

Issue first discovered here:
https://github.com/google/jax/issues/16394

Added test point for reproduction:

```
$ bazel test @llvm-project//mlir/unittests:ir_tests --test_arg=--gtest_filter=DenseSplatTest.BoolSplatSmall
```

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

15 months agotest/.../print-dot-dom.ll: Avoid writing to cwd of test by creating/cding into %t...
David Blaikie [Tue, 25 Jul 2023 02:32:04 +0000 (02:32 +0000)]
test/.../print-dot-dom.ll: Avoid writing to cwd of test by creating/cding into %t instead

The cwd of the test might not be writable.

15 months agoADT: ArrayRef: Assert that begin <= end
David Blaikie [Wed, 19 Jul 2023 18:42:57 +0000 (18:42 +0000)]
ADT: ArrayRef: Assert that begin <= end

This came up in the context of #63169 - if this assert were in place it
would've been much easier to reduce the test case.

15 months agoRevert "[C++20] [Modules] Use CanonicalType for base classes"
Chuanqi Xu [Tue, 25 Jul 2023 02:55:15 +0000 (10:55 +0800)]
Revert "[C++20] [Modules] Use CanonicalType for base classes"

Close https://github.com/llvm/llvm-project/issues/64091

This reverts commit f82df0b285acd8a7115f0bfc55ce44474251c2d1 and add a
test from https://github.com/llvm/llvm-project/issues/64091

15 months ago[X86] Update features for sierraforest, grandridge
Freddy Ye [Tue, 25 Jul 2023 03:00:04 +0000 (11:00 +0800)]
[X86] Update features for sierraforest, grandridge

Reviewed By: pengfei

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

15 months agoAdd new option -fkeep-persistent-storage-variables to Clang release notes
Zheng Qian [Tue, 25 Jul 2023 02:49:58 +0000 (22:49 -0400)]
Add new option -fkeep-persistent-storage-variables to Clang release notes

This patch updates the Clang release notes with the new option
-fkeep-persistent-storage-variables added in bb6ab91b1dcd.

Reviewed By: hubert.reinterpretcast

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

15 months agoFix MLIR test pass crash
Mehdi Amini [Tue, 25 Jul 2023 02:47:23 +0000 (19:47 -0700)]
Fix MLIR test pass crash

The pass tried to fold in reverse-post-order, but it cause an issue
when a parent is folded before the chilren as they will still be
present in the worklist.
Use reverse-preorder instead here.

Fixes #64089

15 months ago[libc++] Fix template parameter naming and enforce it through readability-identifier...
Nikolas Klauser [Tue, 25 Jul 2023 02:53:39 +0000 (19:53 -0700)]
[libc++] Fix template parameter naming and enforce it through readability-identifier-naming

Reviewed By: #libc, Mordante

Spies: Mordante, aheejin, libcxx-commits

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

15 months ago[NFC] Fix release notes about ASan
Advenam Tacet [Mon, 24 Jul 2023 19:00:56 +0000 (21:00 +0200)]
[NFC] Fix release notes about ASan

Existing notes were not fully correct and were missing a detail:
- `std::vector` was annotated long time ago,
- `std::deque` annotations are new,
- now container annotations were extended to all allocators (support in ASan API exists since LLVM16).

Reviewed By: philnik, #libc

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

15 months ago[bazel] Add UPToSPIRV library/dep
Jordan Rupprecht [Tue, 25 Jul 2023 02:33:33 +0000 (19:33 -0700)]
[bazel] Add UPToSPIRV library/dep

Added in D156163

15 months ago[clang-format] Add SpacesInParens with SpacesInParensOptions
Gedare Bloom [Tue, 25 Jul 2023 02:13:33 +0000 (19:13 -0700)]
[clang-format] Add SpacesInParens with SpacesInParensOptions

This is a refactoring of:
- SpacesInConditionalStatement
- SpacesInCStyleCastParentheses
- SpaceInEmptyParentheses
- SpacesInParentheses

These are now options under the new Style Option: SpacesInParens. The
existing options are maintained for backward compatibility.

Within SpacesInParens, there are currently options for:
- Never
- Custom

The currently available options for Custom are:
- InConditionalStatements
- InCStyleCasts
- InEmptyParentheses
- Other

Setting InConditionalStatements and Other to true enables the same space
additions as SpacesInParentheses.

This refactoring does not add or remove any existing features, but it makes
it possible to more easily extend and maintain the addition of spaces within
parentheses.

Related to #55428.

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

15 months ago[RISCV] Add a common class for cm.push, cm.popret, cm.popretz and cm.pop.
Jim Lin [Tue, 25 Jul 2023 00:31:04 +0000 (08:31 +0800)]
[RISCV] Add a common class for cm.push, cm.popret, cm.popretz and cm.pop.

Reviewed By: craig.topper

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

15 months ago[LoongArch] Implement isSExtCheaperThanZExt
WANG Rui [Tue, 25 Jul 2023 01:39:47 +0000 (09:39 +0800)]
[LoongArch] Implement isSExtCheaperThanZExt

Implement isSExtCheaperThanZExt.

Signed-off-by: WANG Rui <wangrui@loongson.cn>
Differential Revision: https://reviews.llvm.org/D154919

15 months ago[clang-format] Add AlignConsecutiveShortCaseStatements
Galen Elias [Tue, 25 Jul 2023 01:05:51 +0000 (18:05 -0700)]
[clang-format] Add AlignConsecutiveShortCaseStatements

This adds a new AlignConsecutiveShortCaseStatements option in line with the
existing AlignConsecutive* options , which when
AllowShortCaseLabelsOnASingleLine is enabled will align the tokens after the
case statement's colon. This also adds a AlignCaseColons option to allow
aligning the case label colon itself rather than the token after it.

Fixes #55475.

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

15 months agoRevert "[clang-format] Add AlignConsecutiveShortCaseStatements"
Owen Pan [Tue, 25 Jul 2023 01:36:53 +0000 (18:36 -0700)]
Revert "[clang-format] Add AlignConsecutiveShortCaseStatements"

This reverts commit 4ba00844174db562d2bd8b15dab6aac605eddf57.

15 months ago[LoongArch] Add test case showing suboptimal codegen when zero extending
WANG Rui [Tue, 25 Jul 2023 01:22:18 +0000 (09:22 +0800)]
[LoongArch] Add test case showing suboptimal codegen when zero extending

Add test case showing suboptimal codegen when zero extending.

Signed-off-by: WANG Rui <wangrui@loongson.cn>
Reviewed By: xen0n

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

15 months agoRevert "Revert "[clang-format] Add AlignConsecutiveShortCaseStatements""
Owen Pan [Tue, 25 Jul 2023 01:24:30 +0000 (18:24 -0700)]
Revert "Revert "[clang-format] Add AlignConsecutiveShortCaseStatements""

This reverts commit 4f093b31669a4f8e417259583141159586a05b28.

15 months agoRevert "[clang-format] Add AlignConsecutiveShortCaseStatements"
Owen Pan [Tue, 25 Jul 2023 01:18:27 +0000 (18:18 -0700)]
Revert "[clang-format] Add AlignConsecutiveShortCaseStatements"

This reverts commit 4ba00844174db562d2bd8b15dab6aac605eddf57 due to missing
authorship.

15 months agoRevert "[Clang][LoongArch] Fix ABI handling of empty structs in C++ to match GCC...
Weining Lu [Tue, 25 Jul 2023 01:16:28 +0000 (09:16 +0800)]
Revert "[Clang][LoongArch] Fix ABI handling of empty structs in C++ to match GCC behaviour"

This reverts commit c299efbf284fae92bb8d7d29110f76912f089daf.

Reason to revert: D142327 has been reverted which is depended by this
change.

15 months agoUpdate ODS variadic segments "magic" attributes to use native Properties
Mehdi Amini [Fri, 21 Jul 2023 05:51:35 +0000 (22:51 -0700)]
Update ODS variadic segments "magic" attributes to use native Properties

The operand_segment_sizes and result_segment_sizes Attributes are now inlined
in the operation as native propertie. We continue to support building an
Attribute on the fly for `getAttr("operand_segment_sizes")` and setting the
property from an attribute with `setAttr("operand_segment_sizes", attr)`.

A new bytecode version is introduced to support backward compatibility and
backdeployments.

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

15 months ago[clang-format] Add AlignConsecutiveShortCaseStatements
Owen Pan [Tue, 25 Jul 2023 01:05:51 +0000 (18:05 -0700)]
[clang-format] Add AlignConsecutiveShortCaseStatements

This adds a new AlignConsecutiveShortCaseStatements option in line with the
existing AlignConsecutive* options , which when
AllowShortCaseLabelsOnASingleLine is enabled will align the tokens after the
case statement's colon. This also adds a AlignCaseColons option to allow
aligning the case label colon itself rather than the token after it.

Fixes #55475.

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

15 months ago[LoongArch] Support InlineAsm for LSX and LASX
chenli [Tue, 25 Jul 2023 01:02:14 +0000 (09:02 +0800)]
[LoongArch] Support InlineAsm for LSX and LASX

The author of the following files is licongtian <licongtian@loongson.cn>:
- clang/lib/Basic/Targets/LoongArch.cpp
- llvm/lib/Target/LoongArch/LoongArchAsmPrinter.cpp
- llvm/lib/Target/LoongArch/LoongArchISelLowering.cpp

The files mentioned above implement InlineAsm for LSX and LASX as follows:
- Enable clang parsing LSX/LASX register name, such as $vr0.
- Support the case which operand type is 128bit or 256bit when the
  constraints is 'f'.
- Support the way of specifying LSX/LASX register by using constraint,
  such as "={$xr0}".
- Support the operand modifiers 'u' and 'w'.
- Support and legalize the data types and register classes involved in
  LSX/LASX in the lowering process.

Reviewed By: xen0n, SixWeining

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

15 months ago[Clang][LoongArch] Fix ABI handling of empty structs in C++ to match GCC behaviour
Weining Lu [Tue, 25 Jul 2023 00:58:41 +0000 (08:58 +0800)]
[Clang][LoongArch] Fix ABI handling of empty structs in C++ to match GCC behaviour

GCC doesn't ignore non-zero-length array of empty structures in C++
while clang does. What this patch did is to match GCC's behaviour
although this rule is not documented in psABI.

Similar to D142327 for RISCV.

Reviewed By: xry111, xen0n

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

15 months ago[Clang][LoongArch] Pre-commit test for D156116
Weining Lu [Tue, 25 Jul 2023 00:58:32 +0000 (08:58 +0800)]
[Clang][LoongArch] Pre-commit test for D156116

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

15 months agoCleanup CMake dependencies from unnecessary libraries in mlir/test/lib/Dialect/GPU...
Mehdi Amini [Tue, 25 Jul 2023 00:57:55 +0000 (17:57 -0700)]
Cleanup CMake dependencies from unnecessary libraries in mlir/test/lib/Dialect/GPU/CMakeLists.txt (NFC)

15 months ago[OpenMP] Add OMPT release note
Michael Halkenhaeuser [Tue, 25 Jul 2023 00:35:16 +0000 (20:35 -0400)]
[OpenMP] Add OMPT release note

OMPT release note addition for LLVM 17

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

15 months ago[OpenMP] [OMPT] [7/8] Invoke tool-supplied callbacks before and after target launch...
Michael Halkenhaeuser [Mon, 24 Jul 2023 23:56:02 +0000 (19:56 -0400)]
[OpenMP] [OMPT] [7/8] Invoke tool-supplied callbacks before and after target launch and data transfer operations

Implemented RAII objects, initialized at target entry points, that
invoke tool-supplied callbacks. Updated status of target callbacks as
implemented.

Depends on D127365

Patch from John Mellor-Crummey <johnmc@rice.edu>
With contributions from:
Dhruva Chakrabarti <Dhruva.Chakrabarti@amd.com>
Jan-Patrick Lehr <janpatrick.lehr@amd.com>

Reviewed By: jdoerfert, dhruvachak

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

15 months agoRevert "[mlir][gpu][transforms] Only depend on ExecutionEngine if MLIR_ENABLE_CUDA_RU...
Mehdi Amini [Tue, 25 Jul 2023 00:18:55 +0000 (17:18 -0700)]
Revert "[mlir][gpu][transforms] Only depend on ExecutionEngine if MLIR_ENABLE_CUDA_RUNNER is true"

This reverts commit 68b7d3fffd7e8ebc40fdcb0acdcf2e88a93ea5c3.
The mlir-nvidia bot is broken.

15 months ago[llvm-objdump][test] Improve elf-aarch64-mapping-symbols.test
Fangrui Song [Tue, 25 Jul 2023 00:21:28 +0000 (17:21 -0700)]
[llvm-objdump][test] Improve elf-aarch64-mapping-symbols.test

15 months ago[PowerPC][AIX] Enable quadword atomics by default for AIX
Kai Luo [Tue, 25 Jul 2023 00:08:53 +0000 (08:08 +0800)]
[PowerPC][AIX] Enable quadword atomics by default for AIX

On AIX, a libatomic supporting inline quadword atomic operations has been released, so that compatibility is not an issue now, we can enable quadword atomics by default.

Reviewed By: #powerpc, nemanjai

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

15 months ago[builtins] Avoid using CRT_LDBL_128BIT in implementation. NFC
Alex Richardson [Mon, 24 Jul 2023 23:41:44 +0000 (16:41 -0700)]
[builtins] Avoid using CRT_LDBL_128BIT in implementation. NFC

Currently the *tf builtin functions can only be built if long double is an
IEEE float, which prevents them from being available e.g. for x86 targets
(unlike libgcc which has them). This non-functional change prepares the
builtins library *tf functions for being able to target x86 by decoupling
their presence from CRT_LDBL_128BIT and instead checking for a
CRT_HAS_TF_MODE macro. This change is NFC since the CRT_HAS_TF_MODE is
currently only set if long double is an IEEE 128-bit float.

Reviewed By: compnerd

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

15 months ago[builtins] Drop -fnested-functions flag from tests
Alex Richardson [Mon, 26 Jun 2023 21:58:29 +0000 (14:58 -0700)]
[builtins] Drop -fnested-functions flag from tests

This flag does nothing for clang and is apparently not supported by GCC:
aarch64-linux-gnu-gcc: error: unrecognized command-line option '-fnested-functions'; did you mean '-Wunused-function'?
It looks like it was maybe supported by Apple GCC, but that is no longer
a supported compiler.

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

15 months ago[builtins] Fix building trunc*fhf2_test with GCC
Alex Richardson [Mon, 26 Jun 2023 18:09:34 +0000 (11:09 -0700)]
[builtins] Fix building trunc*fhf2_test with GCC

GCC does not support __fp16, use the TYPE_FP16 macro instead.

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

15 months agoConstantFolding: Constant fold denormal inputs to canonicalize for IEEE
Matt Arsenault [Sat, 22 Jul 2023 12:12:23 +0000 (08:12 -0400)]
ConstantFolding: Constant fold denormal inputs to canonicalize for IEEE

This makes it possible to use canonicalize to perform a dynamic check
for whether denormal flushing is enabled, which will fold out when the
denormal mode is known. Previously it would only fold if denormal
flushing were known enabled.

https://reviews.llvm.org/D156107

15 months ago[mlir][gpu][transforms] Only depend on ExecutionEngine if MLIR_ENABLE_CUDA_RUNNER...
Nicolas Vasilache [Mon, 24 Jul 2023 23:26:00 +0000 (01:26 +0200)]
[mlir][gpu][transforms] Only depend on ExecutionEngine if MLIR_ENABLE_CUDA_RUNNER is true

This fixes a compilation bug where we would try to depend on ExecutionEngine but it wasn't actually built.

15 months ago[mlir][linalg] NFC - Move some utils in preparation for revamping mapping of scf...
Nicolas Vasilache [Mon, 24 Jul 2023 22:50:42 +0000 (00:50 +0200)]
[mlir][linalg] NFC - Move some utils in preparation for revamping mapping of scf.forall

15 months ago[NFC] Add MprotectReadWrite
Vitaly Buka [Mon, 24 Jul 2023 22:52:16 +0000 (15:52 -0700)]
[NFC] Add MprotectReadWrite

It's unused, but I need it for debuging.
Seems usefull for completeness.

Reviewed By: thurston

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

15 months ago[mlir][spirv] Convert `ub.poison` to `spirv.undef`
Ivan Butygin [Mon, 24 Jul 2023 19:35:28 +0000 (21:35 +0200)]
[mlir][spirv] Convert `ub.poison` to `spirv.undef`

SPIR-V doesn't have poison, but poison can be converted to undef.

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

15 months ago[libc++][hardening] Categorize more assertions.
varconst [Mon, 24 Jul 2023 21:56:44 +0000 (14:56 -0700)]
[libc++][hardening] Categorize more assertions.

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

15 months ago[TextAPI] Remove TBD file attributes that aren't used anymore.
Cyndy Ishida [Mon, 24 Jul 2023 21:25:21 +0000 (14:25 -0700)]
[TextAPI] Remove TBD file attributes that aren't used anymore.

UUID's & `installapi` flag are no longer useful in recent apple linker/tapi.
The reason for removing them is that these are attributes that record
how a library was built but not really about the library itself. TBD
files now only track information this is important as link time
dependencies.

Reviewed By: ributzka

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

15 months ago clang: Add elementwise pow builtin
Joshua Batista [Mon, 24 Jul 2023 20:09:21 +0000 (13:09 -0700)]
 clang: Add elementwise pow builtin

Add codegen for llvm pow elementwise builtin
The pow elementwise builtin is necessary for HLSL codegen.
Tests were added to make sure that the expected errors are encountered when these functions are given inputs of incompatible types, or too many inputs.
The new builtin is restricted to floating point types only.

Reviewed By: arsenm

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

15 months ago[OpenMP] Move KMP_VERSION printout logic to post-serial-init
Jonathan Peyton [Thu, 6 Jul 2023 20:05:59 +0000 (15:05 -0500)]
[OpenMP] Move KMP_VERSION printout logic to post-serial-init

Get the KMP_VERSION printout logic out of environment variable file
(kmp_settings.cpp) and move to end of serial initialization where
KMP_SETTINGS and OMP_DISPLAY_ENV are.

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

15 months ago[OpenMP] Restore comment accidently deleted in D154650
Jonathan Peyton [Mon, 24 Jul 2023 21:01:03 +0000 (16:01 -0500)]
[OpenMP] Restore comment accidently deleted in D154650

15 months ago[OpenMP] Re-use affinity raii class in worker spawning
Jonathan Peyton [Thu, 6 Jul 2023 18:50:34 +0000 (13:50 -0500)]
[OpenMP] Re-use affinity raii class in worker spawning

Get rid of explicit mask alloc, getthreadaffinity, set temp affinity,
reset to old affinity, dealloc steps in favor of existing
kmp_affinity_raii_t to push/pop a temporary affinity.

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

15 months agoRevert "[llvm-objdump] [NFC] Factor out DisassemblerTarget class."
Jacek Caban [Mon, 24 Jul 2023 20:49:58 +0000 (22:49 +0200)]
Revert "[llvm-objdump] [NFC] Factor out DisassemblerTarget class."

This reverts commit 6c48f57c14dcfe2410afcb4c6778dcbb40d294b5.

Build broken on GCC.

15 months ago[clang][ConstantEmitter] have tryEmitPrivate[ForVarInit] try ConstExprEmitter fast...
Nick Desaulniers [Mon, 24 Jul 2023 20:40:14 +0000 (13:40 -0700)]
[clang][ConstantEmitter] have tryEmitPrivate[ForVarInit] try ConstExprEmitter fast-path first

As suggested by @efriedma in:
https://reviews.llvm.org/D76096#4370369

This should speed up evaluating whether an expression is constant or
not, but due to the complexity of these two different implementations,
we may start getting different answers for edge cases for which we do
not yet have test cases in-tree (or perhaps even performance regressions
for some cases). As such, contributors have carte blanche to revert if
necessary.

For additional historical context about ExprConstant vs CGExprConstant,
here's snippets from a private conversation on discord:

  ndesaulniers:
  why do we have clang/lib/AST/ExprConstant.cpp and
  clang/lib/CodeGen/CGExprConstant.cpp? Does clang constant fold during
  ast walking/creation AND during LLVM codegen?
  efriedma:
  originally, clang needed to handle two things: integer constant
  expressions (the "5" in "int x[5];"), and constant global initializers
  (the "5" in "int x = 5;").  pre-C++11, the two could be handled mostly
  separately; so we had the code for integer constants in AST/, and the
  code for globals in CodeGen/.  C++11 constexpr sort of destroyed that
  separation, though. so now we do both kinds of constant evaluation on
  the AST, then CGExprConstant translates the result of that evaluation
  to LLVM IR.  but we kept around some bits of the old cgexprconstant to
  avoid performance/memory usage regressions on large arrays.

Reviewed By: efriedma

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

15 months ago[RISCV] Add lowering for scalar fmaximum/fminimum.
Craig Topper [Mon, 24 Jul 2023 20:38:51 +0000 (13:38 -0700)]
[RISCV] Add lowering for scalar fmaximum/fminimum.

Unlike fmaxnum and fminnum, these operations propagate nan and
consider -0.0 to be less than +0.0.

Without Zfa, we don't have a single instruction for this. The
lowering I've used forces the other input to nan if one input
is a nan. If both inputs are nan, they get swapped. Then use
the fmax or fmin instruction.

New ISD nodes are needed because fmaxnum/fminnum to not define
the order of -0.0 and +0.0.

This lowering ensures the snans are quieted though that is probably not
required in default environment). Also ensures non-canonical nans
are canonicalized, though I'm also not sure that's needed.

Another option could be to use fmax/fmin and then overwrite the
result based on the inputs being nan, but I'm not sure we can do
that with any less code.

Future work will handle nonans FMF, and handling the case where
we can prove the input isn't nan.

This does fix the crash in #64022, but we need to do more work
to avoid scalarization.

Reviewed By: fakepaper56

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

15 months ago[llvm-objdump] [NFC] Factor out DisassemblerTarget class.
Jacek Caban [Wed, 19 Apr 2023 21:39:53 +0000 (23:39 +0200)]
[llvm-objdump] [NFC] Factor out DisassemblerTarget class.

This is a preparation for ARM64EC/ARM64X binaries, which may contain both ARM64
and x86_64 code in the same file. llvm-objdump already has partial support for
mixing disassemblers for ARM thumb mode support. However, for ARM64EC we can't
share MCContext, MCInstrAnalysis and PrettyPrinter instances. This patch
provides additional abstraction which makes adding mixed code support later in
the series easier.

Reviewed By: jhenderson, MaskRay
Differential Revision: https://reviews.llvm.org/D149093

15 months ago[clang-tidy] Initialize DiagnosticEngine in ExpandModularHeaders
Piotr Zegar [Mon, 24 Jul 2023 19:43:47 +0000 (19:43 +0000)]
[clang-tidy] Initialize DiagnosticEngine in ExpandModularHeaders

Fix issue preventing suppression of compiler warnings with
-Wno-<warning> under C++20 and above. Add call to
ProcessWarningOptions and propagate DiagnosticOpts more properly.

Fixes: #56709, #61969

Reviewed By: carlosgalvezp

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