platform/upstream/llvm.git
19 months ago[sanitizer] Undef _TIME_BITS along with _FILE_OFFSET_BITS on Linux
Khem Raj [Fri, 3 Feb 2023 19:48:35 +0000 (11:48 -0800)]
[sanitizer] Undef _TIME_BITS along with _FILE_OFFSET_BITS on Linux

On 32-bit glibc>=2.34 systems using 64bit time_t build fails because
_FILE_OFFSET_BITS is undefined here but _TIME_BITS is still set to 64

Fixes

```
/usr/include/features-time64.h:26:5: error: "_TIME_BITS=64 is allowed
 only with _FILE_OFFSET_BITS=64"
| #   error "_TIME_BITS=64 is allowed only with _FILE_OFFSET_BITS=64"
|     ^
| 1 error generated.
```

Reviewed By: thesamesam, MaskRay

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

19 months ago[InstCombine] fold shuffle of fabs
Sanjay Patel [Fri, 3 Feb 2023 19:19:55 +0000 (14:19 -0500)]
[InstCombine] fold shuffle of fabs

shuffle (fabs X), Mask --> fabs (shuffle X, Mask)
shuffle (fabs X), (fabs Y), Mask --> fabs (shuf X, Y, Mask)

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

This generalizes the existing fneg transforms to also work with fabs.

A likely follow-up would generalize this further to move any unary
intrinsic op.

19 months ago[Docs] Updated my Office Hours
Anastasia Stulova [Fri, 3 Feb 2023 19:10:18 +0000 (19:10 +0000)]
[Docs] Updated my Office Hours

19 months agoRevert "[AMDGPU] Modify adjustInliningThreshold to also consider the cost of passing...
Janek van Oirschot [Fri, 3 Feb 2023 19:09:17 +0000 (19:09 +0000)]
Revert "[AMDGPU] Modify adjustInliningThreshold to also consider the cost of passing function arguments through the stack"

This reverts commit 142c28ffa1323e9a8d53200a22c80d5d778e0d0f.

19 months ago[mlir][sparse] add some documentation to storage layout (NFC)
Aart Bik [Fri, 3 Feb 2023 17:55:51 +0000 (09:55 -0800)]
[mlir][sparse] add some documentation to storage layout (NFC)

in particular, the trailing COO optimization was not
desribed in the general layout description

Reviewed By: Peiming

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

19 months ago[ELF] Support quoted output section names
Fangrui Song [Fri, 3 Feb 2023 19:03:00 +0000 (11:03 -0800)]
[ELF] Support quoted output section names

Similar to e7a7ad134fe182aad190cb3ebc441164470e92f5 and
2bf06d9345caeb26520be8e830c092683bbdf0f7 for other linker script syntax.

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

19 months ago[mlir] Fix an unused variable warning
Kazu Hirata [Fri, 3 Feb 2023 18:52:35 +0000 (10:52 -0800)]
[mlir] Fix an unused variable warning

This patch fixes:

  mlir/lib/Dialect/Transform/Transforms/TransformInterpreterPassBase.cpp:248:14:
  error: unused variable 'root' [-Werror,-Wunused-variable]

19 months ago[AArch64] Unconditionally use DW_EH_PE_indirect|DW_EH_PE_pcrel personality/lsda/ttype...
Fangrui Song [Fri, 3 Feb 2023 18:41:04 +0000 (10:41 -0800)]
[AArch64] Unconditionally use DW_EH_PE_indirect|DW_EH_PE_pcrel personality/lsda/ttype encodings

For -fno-pic, without DW_EH_PE_indirect, the personality routine pointer in a
CIE needs an R_AARCH64_ABS64 relocation. In common configurations that
`__gcc_personality_v0` is defined in a shared object, this will lead to a
discouraged canonical PLT entry, or, if `ld.lld -z notext` (betwen D122459 and
D143136), a dynamic R_AARCH64_ABS64 relocation with an incorrect offset:
https://github.com/llvm/llvm-project/issues/60392

Since GCC uses DW_EH_PE_indirect for -fno-pic code (the behavior hasn't changed
since the initial port in 2012), let's follow suit by simplifying the code.
(
For tiny and small code models, we use DW_EH_PE_sdata8 instead of GCC's
DW_EH_PE_sdata4. This is a deliberate choice to support personality-.eh_frame
offset > 2GiB. This is necessary for small code model since "Max text segment
size < 2GiB" but it is unnecessary to make `-fno-pic -mcmodel={tiny,small}`
different: The scenarios that uses both -fno-pic and C++ exceptions have been
increasingly rare now, so there is little advantage optimizing for the little
size saving with code complexity.
)

Reviewed By: MatzeB

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

19 months ago[ELF] -z notext: avoid dynamic relocations in .eh_frame
Fangrui Song [Fri, 3 Feb 2023 18:27:33 +0000 (10:27 -0800)]
[ELF] -z notext: avoid dynamic relocations in .eh_frame

Fix https://github.com/llvm/llvm-project/issues/60392

```
// a.cc
void raise() { throw 42; }
bool foo() {
  try { raise(); } catch (int) { return true; }
  return false;
}
int main() { foo(); }
```

```
clang++ --target=x86_64-linux-gnu -fno-pic -mcmodel=large -no-pie -fuse-ld=lld -z notext a.cc -o a && ./a
clang++ --target=aarch64-linux-gnu -fno-pic -no-pie -fuse-ld=lld -Wl,--dynamic-linker=/usr/aarch64-linux-gnu/lib/ld-linux-aarch64.so.1 -Wl,-rpath=/usr/aarch64-linux-gnu/lib -z notext a.cc -o a && ./a
```
Both commands fail because we produce a dynamic relocation for
R_X86_64_64/R_AARCH64_ABS64 in .eh_frame which will be adjusted to a wrong
offset by `SectionBase::getOffset` after D122459.

Since GNU ld uses a canonical PLT entry instead of a dynamic relocation for
.eh_frame, we follow suit as well to avoid the issue.

Mips has an ABI issue (https://github.com/llvm/llvm-project/issues/5837) and we
don't implement GNU ld's DW_EH_PE_absptr conversion. mips64-eh-abs-reloc.s wants
a dynamic relocation, so keep the original behavior for EM_MIPS.

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

19 months agoRevert "[SelectionDAG] Add pcsections recursively on SDNode values"
Marco Elver [Fri, 3 Feb 2023 17:11:13 +0000 (18:11 +0100)]
Revert "[SelectionDAG] Add pcsections recursively on SDNode values"
Revert "[SelectionDAG] Add missing setValue calls in visitIntrinsicCall"

This reverts commit 0c64e1b68f36640ffe82fc90e6279c50617ad1cc.
This reverts commit 1142e6c7c795de7f80774325a07ed49bc95a48c9.

It spuriously added !pcsections where they shouldn't be. See added test
case in test/CodeGen/X86/pcsections.ll as an example. The reason is that
the SelectionDAG chains operations in a basic block as "operands"
pointing to preceding instructions. This resulted in setting the
metadata on _all_ instructions preceding the one that should have the
metadata.

Reverting for now because the semantics of !pcsections was completely
buggy now.

19 months agoFix tests commited in 450a461
ManuelJBrito [Fri, 3 Feb 2023 17:51:43 +0000 (17:51 +0000)]
Fix tests commited in 450a461

Remove alignment matching in tests to avoid ABI compatibility issues

19 months ago[NFC][TargetParser] Remove llvm/Support/AArch64TargetParser.h
Archibald Elliott [Fri, 3 Feb 2023 13:55:31 +0000 (13:55 +0000)]
[NFC][TargetParser] Remove llvm/Support/AArch64TargetParser.h

Removes the forwarding header `llvm/Support/AArch64TargetParser.h`.

I am proposing to do this for all the forwarding headers left after
rGf09cf34d00625e57dea5317a3ac0412c07292148 - for each header:
- Update all relevant in-tree includes
- Remove the forwarding Header

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

19 months ago[OpenMP][libomp] Fix CMake version symbol testing
Jonathan Peyton [Thu, 2 Feb 2023 17:18:36 +0000 (11:18 -0600)]
[OpenMP][libomp] Fix CMake version symbol testing

Do not check for version symbol support if the necessary linker flag is
not supported.

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

19 months agoRevert "[Clang] Implement Change scope of lambda trailing-return-type"
Jordan Rupprecht [Fri, 3 Feb 2023 16:49:34 +0000 (08:49 -0800)]
Revert "[Clang] Implement Change scope of lambda trailing-return-type"

This reverts commit d708a186b6a9b050d09558163dd353d9f738c82d (and typo fix e4bc9898ddbeb70bc49d713bbf863f050f21e03f). It causes a compilation error for this:

```
struct StringLiteral {
  template <int N>
  StringLiteral(const char (&array)[N])
      __attribute__((enable_if(N > 0 && N == __builtin_strlen(array) + 1,
                               "invalid string literal")));
};

struct Message {
  Message(StringLiteral);
};

void Func1() {
  auto x = Message("x");  // Note: this is fine

  // Note: "xx\0" to force a different type, StringLiteral<3>, otherwise this
  // successfully builds.
  auto y = [&](decltype(Message("xx"))) {};

  // ^ fails with: repro.cc:18:13: error: reference to local variable 'array'
  // declared in enclosing function 'StringLiteral::StringLiteral<3>'

  (void)x;
  (void)y;
}
```

More details posted to D124351.

19 months ago[NFC] Cosmetic change + remove irrelevant FIXME
Guillaume Chatelet [Fri, 3 Feb 2023 16:38:52 +0000 (16:38 +0000)]
[NFC] Cosmetic change + remove irrelevant FIXME

19 months ago[AMDGPU] GFX11: rename VALU pknorm instructions to pk_norm
Jay Foad [Fri, 3 Feb 2023 14:46:48 +0000 (14:46 +0000)]
[AMDGPU] GFX11: rename VALU pknorm instructions to pk_norm

GFX11 renames:
v_cvt_pknorm_i16_f32 to v_cvt_pk_norm_i16_f32
v_cvt_pknorm_u16_f32 to v_cvt_pk_norm_u16_f32

Accept the old name as an alias.

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

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

19 months ago[NFC] Migrate aarch64 alignment to Align
Guillaume Chatelet [Fri, 3 Feb 2023 16:28:56 +0000 (16:28 +0000)]
[NFC] Migrate aarch64 alignment to Align

19 months ago[AArch64][SVE2p1] Add IntrNoMem to int_aarch64_sve_psel intrinsic
David Sherwood [Fri, 3 Feb 2023 13:33:18 +0000 (13:33 +0000)]
[AArch64][SVE2p1] Add IntrNoMem to int_aarch64_sve_psel intrinsic

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

19 months ago[NFC] Remove dead code
Guillaume Chatelet [Fri, 3 Feb 2023 16:05:45 +0000 (16:05 +0000)]
[NFC] Remove dead code

19 months ago[include-mapping] Implement language separation in stdlib recognizer library
Viktoriia Bakalova [Fri, 3 Feb 2023 13:00:51 +0000 (14:00 +0100)]
[include-mapping] Implement language separation in stdlib recognizer library

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

19 months ago[MemProf] Add helper to access the back (last) call stack id
Teresa Johnson [Thu, 2 Feb 2023 15:01:16 +0000 (07:01 -0800)]
[MemProf] Add helper to access the back (last) call stack id

This is split out of D140908 as suggested.

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

19 months ago[clang][Interp] Support pointers in compound assignment operators
Timm Bäder [Tue, 3 Jan 2023 09:04:27 +0000 (10:04 +0100)]
[clang][Interp] Support pointers in compound assignment operators

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

19 months ago[NFC] Simplify logic in ConstantFold
Guillaume Chatelet [Fri, 3 Feb 2023 15:21:02 +0000 (15:21 +0000)]
[NFC] Simplify logic in ConstantFold

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

19 months ago[Orc] XFAIL test with Comdats on macOS
Jonas Hahnfeld [Fri, 3 Feb 2023 15:33:02 +0000 (16:33 +0100)]
[Orc] XFAIL test with Comdats on macOS

The bots report:
LLVM ERROR: MachO doesn't support COMDATs, 'f' cannot be lowered.

19 months ago[AMDGPU] Modify adjustInliningThreshold to also consider the cost of passing function...
Janek van Oirschot [Fri, 3 Feb 2023 15:23:29 +0000 (15:23 +0000)]
[AMDGPU] Modify adjustInliningThreshold to also consider the cost of passing function arguments through the stack

A regression from when new PM got enabled as default. Functions with a big number of instructions will elide getting inlined but do not consider the cost of passing arguments over stack if there are a lot of function arguments. This patch attempts to add a heuristic for AMDGPU's function calling convention that also considers function arguments passed through the stack.

Reviewed By: #amdgpu, arsenm

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

19 months ago[mlir][llvm] Use tablegen for enum conversion.
Tobias Gysi [Fri, 3 Feb 2023 15:20:30 +0000 (16:20 +0100)]
[mlir][llvm] Use tablegen for enum conversion.

The revision uses tablegen to convert multiple atomic and comparison
related enums automatically rather than using hand coded functions
in the import and export from and to LLVM IR.

The revision also adds additional binary operation cases to the
AtomicBinOp enum that have not been supported till now. It also
introduces the possibility to define unsupported enum cases that exist
only in LLVM IR and that are not imported into MLIR. These unsupported
cases are helpful to handle sentinel values such as BAD_BINOP that
LLVM commonly uses to terminate its enums.

Reviewed By: Dinistro

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

19 months agoRevert "[clang][Interp] Only generate disassembly in debug builds"
Timm Bäder [Fri, 3 Feb 2023 15:23:39 +0000 (16:23 +0100)]
Revert "[clang][Interp] Only generate disassembly in debug builds"

This reverts commit 60dcc70e48fa9814a4e0d5e12856bc88b7f927eb.

This breaks builders, e.g.
https://lab.llvm.org/buildbot/#/builders/36/builds/30036

19 months ago[Tooling/Inclusions] ensure the Mapping is inititalized in
Haojian Wu [Fri, 3 Feb 2023 15:08:06 +0000 (16:08 +0100)]
[Tooling/Inclusions] ensure the Mapping is inititalized in
Symbol/Header::all() calls

19 months ago[clang][Interp][NFCI] Handle DiscardResult for ExprWithCleanups
Timm Bäder [Thu, 22 Dec 2022 16:43:50 +0000 (17:43 +0100)]
[clang][Interp][NFCI] Handle DiscardResult for ExprWithCleanups

Just pop the pointer.

19 months ago[LoopVectorize][TTI] NFCI: Clarify enum for the tail folding style.
Sander de Smalen [Fri, 3 Feb 2023 09:38:45 +0000 (09:38 +0000)]
[LoopVectorize][TTI] NFCI: Clarify enum for the tail folding style.

This NFC (intended) patch has several small changes:
* It renames PredicationStyle to TailFoldingStyle.
* It renames TTI.emitActiveLaneMask() to TTI.getPreferredTailFoldingStyle()
* Simplifies some of its uses in the LoopVectorizer

Rationale: To my surprise PredicationStyle::None did not mean 'no
predication', but rather 'no active lane mask intrinsic', such that the
predicate is created using a splat + compare with stepvector. The enum is
also highly specific to tail folding, so it seems better to name this
around that feature, i.e. 'tail folding style'.

This also makes it more amenable to extend it to other tail folding styles,
such as the one added in D142109.

Reviewed By: david-arm

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

19 months ago[SDAG] fix miscompiles caused by using ValueTracking matchSelectPattern to create...
Sanjay Patel [Fri, 3 Feb 2023 14:31:31 +0000 (09:31 -0500)]
[SDAG] fix miscompiles caused by using ValueTracking matchSelectPattern to create FMINIMUM/FMAXIMUM

ValueTracking attempts to match compare+select patterns to FP min/max
operations, but it was created before the newer IEEE-754-2019
minimum/maximum ops were defined. Ie, matchSelectPattern() does not
account for the -0.0/+0.0 behavior that is specified in the newer
standard.

FMINIMUM/FMAXIMUM nodes were created to map to the newer standard:

/// FMINIMUM/FMAXIMUM - NaN-propagating minimum/maximum that also treat -0.0
/// as less than 0.0. While FMINNUM_IEEE/FMAXNUM_IEEE follow IEEE 754-2008
/// semantics, FMINIMUM/FMAXIMUM follow IEEE 754-2018 draft semantics.

We could adjust ValueTracking to deal with signed zero, but it seems like
a moot point given the divergent NaN behavior discussed in D143056, so just
delete this possibility to avoid bugs when converting IR to SDAG.

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

19 months ago[lldb] Enable arm64 target for entry values test
Felipe de Azevedo Piovezan [Tue, 31 Jan 2023 17:23:11 +0000 (12:23 -0500)]
[lldb] Enable arm64 target for entry values test

This test is supposed to work in arm64.

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

19 months ago[libc] Fix quotation marks in overlay mode instructions
David Spickett [Fri, 3 Feb 2023 10:22:35 +0000 (10:22 +0000)]
[libc] Fix quotation marks in overlay mode instructions

These were using ” ("right double quotation mark") instead of
the usual ". This means CMake took the value literally and you
got:
```
CMake Error at CMakeLists.txt:139 (MESSAGE):
  ”libc” isn't a known project:
  bolt;clang;clang-tools-extra;compiler-rt;cross-project-tests;libc;libclc;lld;lldb;mlir;openmp;polly;pstl;flang.
  Did you mean to enable it as a runtime in LLVM_ENABLE_RUNTIMES?
```
`="libc"` works fine.

Reviewed By: lntue

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

19 months ago[clang][Interp] Only generate disassembly in debug builds
Timm Bäder [Fri, 27 Jan 2023 08:14:31 +0000 (09:14 +0100)]
[clang][Interp] Only generate disassembly in debug builds

With the current set of opcodes, this saves 3460 lines in the generated
Opcodes.inc in release builds (-17%).

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

19 months ago[clang][Interp][NFC] Make VariableScope::getParent() const
Timm Bäder [Mon, 30 Jan 2023 08:09:22 +0000 (09:09 +0100)]
[clang][Interp][NFC] Make VariableScope::getParent() const

19 months ago[SanitizerBinaryMetadata] Treat constant globals and non-escaping addresses specially
Marco Elver [Fri, 3 Feb 2023 14:34:42 +0000 (15:34 +0100)]
[SanitizerBinaryMetadata] Treat constant globals and non-escaping addresses specially

For atomics metadata, we can make data race analysis more efficient by
entirely ignoring functions that include memory accesses but which only
access non-escaping (non-shared) and/or non-mutable memory. Such
functions will not be considered to be covered by "atomics" metadata,
resulting in the following benefits:

  1. reduces "covered" metadata; and
  2. allows data race analysis to skip such functions.

Reviewed By: dvyukov

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

19 months ago[InstCombine] add tests for shuffle-of-fabs; NFC
Sanjay Patel [Thu, 2 Feb 2023 21:16:48 +0000 (16:16 -0500)]
[InstCombine] add tests for shuffle-of-fabs; NFC

Adapted from the existing shuffle-of-fneg tests.

19 months ago[mlir] properly fix concurrent transform interpreter pass base
Alex Zinenko [Tue, 31 Jan 2023 09:37:09 +0000 (09:37 +0000)]
[mlir] properly fix concurrent transform interpreter pass base

The original implementation of the transform interpreter pass base was
cloning the entire transform IR in presence of PDL-related operations to
avoid concurrency issues when running the pass with the same transform
IR on multiple operations of the payload IR. The root cause of those
issues is the `transform.pdl_match` operation that was moving the PDL
pattern definition operation into a new module, consumed by the PDL
interpreter and leading to a race. Clone the pattern operation instead.
This avoids the race as well as the cost for transform IR that doesn't
use PDL.

Depends on D142729.

Reviewed By: nicolasvasilache

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

19 months ago[mlir] provide a base class for transform interpreter passes
Alex Zinenko [Fri, 27 Jan 2023 16:01:26 +0000 (16:01 +0000)]
[mlir] provide a base class for transform interpreter passes

The transform dialect infrastructure does not provide a default
interpreter pass and instead expects users to create their own to ensure
all relevant extensions and dependent dialects are loaded. Provide a
base class for implementing such passes that includes the additional
facilities for debugging and is aware of the multithreaded nature of
pass execution.

Reviewed By: pifon2a, nicolasvasilache

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

19 months ago[clang][Interp] Materializing primitive temporaries
Timm Bäder [Sat, 15 Oct 2022 12:40:23 +0000 (14:40 +0200)]
[clang][Interp] Materializing primitive temporaries

Implement MaterializeTemporaryExpr for primitive types.

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

19 months ago[flang][hlfir] Handle intrinsic subroutines
Jean Perier [Fri, 3 Feb 2023 14:02:26 +0000 (15:02 +0100)]
[flang][hlfir] Handle intrinsic subroutines

The code did not propagate the result optionality for subroutine.
Make the result of genIntrinsicRef optional.

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

19 months ago[clang] Change AMX macros to match names from GCC
Joe Loser [Wed, 1 Feb 2023 17:19:27 +0000 (10:19 -0700)]
[clang] Change AMX macros to match names from GCC

The current behavior for AMX macros is:

```
gcc -march=native -dM -E - < /dev/null | grep TILE

clang -march=native -dM -E - < /dev/null | grep TILE
```

which is not ideal.  Change `__AMXTILE__` and friends to `__AMX_TILE__` (i.e.
have an underscore in them).  This makes GCC and Clang agree on the naming of
these AMX macros to simplify downstream user code.

Fix this for `__AMXTILE__`, `__AMX_INT8__`, `__AMX_BF16__`, and `__AMX_FP16__`.

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

19 months ago[OpenMP][FIX] Do not overalign mapped structures
Johannes Doerfert [Fri, 3 Feb 2023 13:32:10 +0000 (07:32 -0600)]
[OpenMP][FIX] Do not overalign mapped structures

While we potentially need to align partially mapped structs more than
the first member, we do not need to align past the struct itself. This
prevents us from moving the base pointer past the struct beginning too.

See https://reviews.llvm.org/D142508 for a discussion.

Reviewed By: pavelkopyl, grokos, jhuber6

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

19 months agoRevert "[AArch64][CostModel]: Add costs for zero/sign extend."
Hassnaa Hamdi [Fri, 3 Feb 2023 13:45:00 +0000 (13:45 +0000)]
Revert "[AArch64][CostModel]: Add costs for zero/sign extend."

This reverts commit d65c3bf39aa49eda0f5a6bff02c9292895a37e26.

19 months ago[clang][Interp] Fix Pointer::toAPValue() for expressions
Timm Bäder [Mon, 16 Jan 2023 16:58:22 +0000 (17:58 +0100)]
[clang][Interp] Fix Pointer::toAPValue() for expressions

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

19 months ago[X86] Add some very basic test coverage for the few @llvm.vp.* intrinsics that correc...
Simon Pilgrim [Thu, 2 Feb 2023 17:14:56 +0000 (17:14 +0000)]
[X86] Add some very basic test coverage for the few @llvm.vp.* intrinsics that correctly expand

Inspired by Issue #60464 - wel can add/enable additional intrinsics when we add expansion support

19 months ago[mlir] Add nontemporal field to memref.load/store and convey to llvm.load/store
Guray Ozen [Fri, 3 Feb 2023 11:11:38 +0000 (12:11 +0100)]
[mlir] Add nontemporal field to memref.load/store and convey to llvm.load/store

`llvm.load` op has nonTemporal field which is missing for `memref.load` and `memref.store`. This revision first adds nonTemporal field to memref's load/store op, then it lowers the field to llvm.load/store ops.

Reviewed By: nicolasvasilache

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

19 months agoRevert unintended debug things :-(
Sam McCall [Fri, 3 Feb 2023 12:47:13 +0000 (13:47 +0100)]
Revert unintended debug things :-(

19 months ago[Tooling] Add stdlib::Symbol::all() and stdlib::Symbol::qualified_name()
Sam McCall [Tue, 24 Jan 2023 14:40:35 +0000 (15:40 +0100)]
[Tooling] Add stdlib::Symbol::all() and stdlib::Symbol::qualified_name()

These address some remaining reasons to #include StdSymbolMap.inc directly.

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

19 months ago[NFC] PHITransAddr refactoring - use range-based loops and standard algorithms
Sergey Kachkov [Thu, 2 Feb 2023 14:49:54 +0000 (17:49 +0300)]
[NFC] PHITransAddr refactoring - use range-based loops and standard algorithms

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

19 months ago[AArch64][SVE2p1] Add 2-way SVE2p1 dot product intrinsics
David Sherwood [Wed, 1 Feb 2023 13:48:48 +0000 (13:48 +0000)]
[AArch64][SVE2p1] Add 2-way SVE2p1 dot product intrinsics

This patch adds the LLVM IR intrinsics for the following:

* sdot (2-way, vectors + indexed)
* udot (2-way, vectors + indexed)
* fdot (vectors + indexed)

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

19 months agoAMDGPU: Add more tests to fneg modifier with casting tests
Matt Arsenault [Fri, 27 Jan 2023 14:11:55 +0000 (10:11 -0400)]
AMDGPU: Add more tests to fneg modifier with casting tests

19 months ago[flang] Avoid double finalization when intrinsic assignment is done in the runtime
Valentin Clement [Fri, 3 Feb 2023 11:21:59 +0000 (12:21 +0100)]
[flang] Avoid double finalization when intrinsic assignment is done in the runtime

genRecordAssignment is emitting code to call Assign in the runtime for some cases.
In these cases, the finalization is done by the runtime so we do not need to do it in
a separate cal to avoid multiple finalization..
Also refactor the code in Bridge so the actual finalization of allocatable
is done before any reallocation. We might need to push this into ReallocIfNeeded.
It is not clear if the allocatable lhs needs to be finalized in any cases or only if it is
reallocated.

Reviewed By: jeanPerier

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

19 months agoFix up tests committed in 57a6bb34729df30df18a133ee2083b3323a936dc
David Sherwood [Fri, 3 Feb 2023 11:00:35 +0000 (11:00 +0000)]
Fix up tests committed in 57a6bb34729df30df18a133ee2083b3323a936dc

I committed an older version of the patch without the test updates.
This patch uses the latest versions on
https://reviews.llvm.org/D142904

19 months ago[AArch64][SME2] Add multi-vector zip/uzp intrinsics
David Sherwood [Mon, 30 Jan 2023 16:10:22 +0000 (16:10 +0000)]
[AArch64][SME2] Add multi-vector zip/uzp intrinsics

This patch adds the LLVM IR intrinsics for the following:

* zip (2 and 4 vectors, 8 to 64-bit elements) - aarch64.sve.zip.*
* zip (2 and 4 vectors, 128-bit elements) - aarch64.sve.zipq.*
* uzp (2 and 4 vectors, 8 to 64-bit elements) - aarch64.sve.uzp.*
* uzp (2 and 4 vectors, 128-bit elements) - aarch64.sve.uzpq.*

I have created separate intrinsics for the 128-bit variants
in a similar way to what was done for int_aarch64_sme_readq_horiz.
This permits us to use any vector type (<vscale x 16 x i8>, etc.)
for the 128-bit versions.

I have also named the tests sve2p1-intrinsics-* because although
the instructions are added as part of the SME2 feature they only
operate on SVE vectors.

NOTE: These intrinsics are still in development and are subject to future changes.

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

19 months ago[MLIR] NFC: fully scope use FastMathFlag.
Christian Sigg [Fri, 3 Feb 2023 10:47:28 +0000 (11:47 +0100)]
[MLIR] NFC: fully scope use FastMathFlag.

Second instance.

19 months ago[AMDGPU] Make offset a 32-bit operand
Piotr Sobczak [Thu, 2 Feb 2023 12:37:46 +0000 (13:37 +0100)]
[AMDGPU] Make offset a 32-bit operand

Promote offset to 32-bit, similarily to what D142549 did for flat_offset.

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

19 months ago[NFC] Remove isSafeToSpeculativelyExecute checks for casts
Sergey Kachkov [Fri, 3 Feb 2023 10:26:30 +0000 (13:26 +0300)]
[NFC] Remove isSafeToSpeculativelyExecute checks for casts

isSafeToSpeculativelyExecute always return true for casts, so remove
this redundant checks.

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

19 months ago[gn build] Port 1e72920c8859
LLVM GN Syncbot [Fri, 3 Feb 2023 10:26:23 +0000 (10:26 +0000)]
[gn build] Port 1e72920c8859

19 months ago[Test] Add tests with narrow checks for SCEVLoopGuardRewriter
Max Kazantsev [Fri, 3 Feb 2023 10:21:29 +0000 (17:21 +0700)]
[Test] Add tests with narrow checks for SCEVLoopGuardRewriter

19 months ago[ORC] Drop Comdat when discarding IR symbol
Jonas Hahnfeld [Tue, 24 Jan 2023 09:54:55 +0000 (10:54 +0100)]
[ORC] Drop Comdat when discarding IR symbol

According to the IR verifier, "Declaration[s] may not be in a Comdat!"

This is a re-commit of 76b3f0b4d5a0b8c54147c4c73a30892bbca76467 with
updates to the test:
 * Force emission of the extra-module, to trigger the bug after D138264,
   by providing a second symbol @g, and making the comdat nodeduplicate.
   (Technically only one is needed, but two should be safer.)
 * Name the comdat $f to avoid failure on Windows:
   LLVM ERROR: Associative COMDAT symbol 'c' does not exist.

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

19 months ago[dsymutil] dsymutil produces broken lines info (probably) with LTO on mac
Alexey Lapshin [Mon, 30 Jan 2023 14:05:53 +0000 (15:05 +0100)]
[dsymutil] dsymutil produces broken lines info (probably) with LTO on mac

This patch fixes #60307 issue. The 8bb4451 introduces the possibility
to unite overlapped or adjacent address ranges to keep address ranges
in an unambiguous state. The AddressRangesMap is used to normalize
address ranges. The AddressRangesMap keeps address ranges and the value
of the relocated address. For intersected range, it creates a united
range that keeps the last inserted mapping value. The same for adjusted ranges.
While it is OK to use the last inserted mapping value for intersected ranges
(as there is no way how to resolve ambiguity) It is not OK to use the
last inserted value for adjacent address ranges. Currently, two following
address ranges are united into a single one:

{0,24,17e685c} {24,d8,55afe20} -> {0,d8,55afe20}

To avoid the problem, the AddressRangesMap should not unite adjacent address ranges
with different relocated addresses. Instead, it should leave adjacent address ranges
as separate ranges. So, the ranges should look like this:

{0,24,17e685c} {24,d8,55afe20}

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

19 months ago[llvm-objcopy] Fix strip-all-gnu test
Anton Sidorenko [Wed, 1 Feb 2023 15:58:24 +0000 (18:58 +0300)]
[llvm-objcopy] Fix strip-all-gnu test

Originally the test has a bug: in the input YAML `.symtab.dyn` section has a type
repeated twice with different values (SHT_SYMTAB and SHT_NOBITS). YAML parser
took SHT_NOBITS as a type of the section, so the test wasn't checking the desired
case.

This patch changes the test to verify that a section with SHT_SYMTAB type and
SHF_ALLOC flag is not removed when --strip-all-gnu flag present.

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

19 months ago[Test] Add signed counterparts of unsigned tests on SCEVLoopGuardRewriter
Max Kazantsev [Fri, 3 Feb 2023 10:06:37 +0000 (17:06 +0700)]
[Test] Add signed counterparts of unsigned tests on SCEVLoopGuardRewriter

19 months ago[Test] Add motivating test for umin support in SCEVLoopGuardRewriter
Max Kazantsev [Fri, 3 Feb 2023 09:00:24 +0000 (16:00 +0700)]
[Test] Add motivating test for umin support in SCEVLoopGuardRewriter

This test is equivalent to another one, where we can infer a
reasonable iteration count. The only difference is that umin and zext
here are swapped, and rewriter fails here.

19 months ago[AArch64][SME2] Add LLVM IR intrinsics for multi-indexed dots
David Sherwood [Wed, 25 Jan 2023 08:58:44 +0000 (08:58 +0000)]
[AArch64][SME2] Add LLVM IR intrinsics for multi-indexed dots

Adds intrinsics for the following SME2 instructions:

* sdot (multi-indexed, 2 and 4 vectors, 32-bit and 64-bit ZA)
* udot (multi-indexed, 2 and 4 vectors, 32-bit and 64-bit ZA)
* usdot (multi-indexed, 2 and 4 vectors)
* sudot (multi-indexed, 2 and 4 vectors)
* fdot (multi-indexed, 2 and 4 vectors)
* bfdot (multi-indexed, 2 and 4 vectors)

NOTE: These intrinsics are still in development and are subject to future changes.

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

19 months ago[Clang] Add builtin_nondeterministic_value
ManuelJBrito [Thu, 2 Feb 2023 17:42:31 +0000 (17:42 +0000)]
[Clang] Add builtin_nondeterministic_value

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

19 months ago[flang] use runRegionDCE instead of a custom DCE in cg-rewrite
Jean Perier [Fri, 3 Feb 2023 09:29:19 +0000 (10:29 +0100)]
[flang] use runRegionDCE instead of a custom DCE in cg-rewrite

The custom DCE in cg-rewrite is meant to get rid of fir.shape, fir.shift,
fir.shape_shift and fir.slice ops as well as their unused operands
before codegen (that does not lower those abstract operation to LLVM).

However, it turned out to be flowed in case some fir.shape operands were
unused outside of fir.shape and appeared several times as operands:
they were erased at the first appearance, causing the further attemp
to erase it to segfault (since the op IR storage was deallocated).

Instead of trying to fixing the custom DCE code, use mlir::runRegionDCE.

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

19 months ago[flang] Fix potential null scope when lowering dispatch table op
Valentin Clement [Fri, 3 Feb 2023 09:16:54 +0000 (10:16 +0100)]
[flang] Fix potential null scope when lowering dispatch table op

Similary to D140209, the scope might need to be retrieved
from the typeSymbol. The test code was crashing because the
scope passed to CollectBindings was initially null.

Reviewed By: jeanPerier

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

19 months ago[InstCombine] typo fix in the test xor-and-or.ll; NFC
chenglin.bi [Fri, 3 Feb 2023 09:15:47 +0000 (17:15 +0800)]
[InstCombine] typo fix in the test xor-and-or.ll; NFC

19 months ago[InstCombine] Fold pattern xor(and, or) to select
chenglin.bi [Fri, 3 Feb 2023 09:11:41 +0000 (17:11 +0800)]
[InstCombine] Fold pattern xor(and, or) to select

(A & B) ^ (A | C) --> A ? ~B : C

https://alive2.llvm.org/ce/z/KCBfXr
https://alive2.llvm.org/ce/z/Pm-zJN
https://alive2.llvm.org/ce/z/VT8uC2

Reviewed By: spatel

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

19 months ago[NFC] PHITransAddr refactoring - return translated value directly or nullptr on
Sergey Kachkov [Thu, 2 Feb 2023 12:52:34 +0000 (15:52 +0300)]
[NFC] PHITransAddr refactoring - return translated value directly or nullptr on
failure (instead of bool flag)

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

19 months agoRevert "[ORC] Drop Comdat when discarding IR symbol"
Jonas Hahnfeld [Fri, 3 Feb 2023 09:04:38 +0000 (10:04 +0100)]
Revert "[ORC] Drop Comdat when discarding IR symbol"

Failure on Windows:
LLVM ERROR: Associative COMDAT symbol 'c' does not exist.

This reverts commit 76b3f0b4d5a0b8c54147c4c73a30892bbca76467 while
I investigate the problem and a solution that still triggers the
original problem.

19 months ago[mlir] GreedyPatternRewriteDriver: Ignore scope when rewriting top-level ops
Matthias Springer [Fri, 3 Feb 2023 08:44:42 +0000 (09:44 +0100)]
[mlir] GreedyPatternRewriteDriver: Ignore scope when rewriting top-level ops

Top-level ModuleOps cannot be transformed with the GreedyPatternRewriteDriver since D141945 because they do not have an enclosing region that could be used as a scope. Make the scope optional inside GreedyPatternRewriteDriver, so that top-level ops can be processed when they are on the initial list of ops.

Note: This does not allow users to bypass the scoping mechanism by setting `config.scope = nullptr`.

Fixes #60462.

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

19 months ago[docs] Rewrite/improve the docs for LLVM_NATIVE_TOOL_DIR
Martin Storsjö [Tue, 31 Jan 2023 09:09:50 +0000 (11:09 +0200)]
[docs] Rewrite/improve the docs for LLVM_NATIVE_TOOL_DIR

Don't include it among the mandatory options; the automatically built
tools via a nested cmake build work fine these days
(in particular, since 93010544a813dfbfa64dd7cee68785f572f974d1 /
https://reviews.llvm.org/D126313).

Clarify the directory path-to-host-bin into something more verbose,
to avoid ambiguity with LLVM_HOST_TRIPLE.

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

19 months ago[docs] Prefer setting LLVM_HOST_TRIPLE instead of LLVM_DEFAULT_TARGET_TRIPLE and...
Martin Storsjö [Mon, 23 Jan 2023 12:13:40 +0000 (14:13 +0200)]
[docs] Prefer setting LLVM_HOST_TRIPLE instead of LLVM_DEFAULT_TARGET_TRIPLE and LLVM_TARGET_ARCH

Setting LLVM_HOST_TRIPLE propagates the information to a few more
places than if only setting LLVM_TARGET_ARCH and
LLVM_DEFAULT_TARGET_TRIPLE, while both of those settings get their
defaults implied from LLVM_HOST_TRIPLE if they're not overridden.

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

19 months ago[mlir][Bazel] Update bazel BUILD after 889a11783ec
Adrian Kuegel [Fri, 3 Feb 2023 08:42:34 +0000 (09:42 +0100)]
[mlir][Bazel] Update bazel BUILD after 889a11783ec

19 months ago[clang-format][doc] Fix a typo
Owen Pan [Fri, 3 Feb 2023 08:23:46 +0000 (00:23 -0800)]
[clang-format][doc] Fix a typo

19 months agoFix bazel dependency
Thomas Raoux [Fri, 3 Feb 2023 07:53:30 +0000 (07:53 +0000)]
Fix bazel dependency

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

19 months ago[mlir][linalg] Fix crash in vectorizer when expanding affine apply
Thomas Raoux [Fri, 3 Feb 2023 07:49:38 +0000 (07:49 +0000)]
[mlir][linalg] Fix crash in vectorizer when expanding affine apply

Fix the insert point when expanding affine apply and handle cases with
symbols. Also add missing precondition to dynamic shape vectorization.

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

19 months ago[ELF] Fix help message for --lto-pgo-warn-mismatch
Fangrui Song [Fri, 3 Feb 2023 08:04:50 +0000 (00:04 -0800)]
[ELF] Fix help message for --lto-pgo-warn-mismatch

19 months ago[mlir][llvm] Add structured loop metadata
Christian Ulmann [Fri, 3 Feb 2023 07:33:37 +0000 (08:33 +0100)]
[mlir][llvm] Add structured loop metadata

This commit introduces a structured representation of loop metadata to
the LLVM dialect. This attribute explicitly models all known `!llvm.loop`
metadata fields and groups them by introducing nested attributes for each
namespace.

The new attribute replaces the LoopOptionAttr that could only model a
limited subset of loop metadata.

Reviewed By: gysit

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

19 months ago[libc++][format] Fix a missing include in tests.
Konstantin Varlamov [Fri, 3 Feb 2023 07:54:22 +0000 (23:54 -0800)]
[libc++][format] Fix a missing include in tests.

19 months ago[ORC] Drop Comdat when discarding IR symbol
Jonas Hahnfeld [Tue, 24 Jan 2023 09:54:55 +0000 (10:54 +0100)]
[ORC] Drop Comdat when discarding IR symbol

According to the IR verifier, "Declaration[s] may not be in a Comdat!"

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

19 months ago[X86][FP16] Set Custom action for vector FROUND
Phoebe Wang [Fri, 3 Feb 2023 07:19:21 +0000 (15:19 +0800)]
[X86][FP16] Set Custom action for vector FROUND

Reviewed By: RKSimon

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

19 months ago[libc++] Make some tests in `math_nodiscard_extensions` Clang-only.
varconst [Thu, 2 Feb 2023 18:15:48 +0000 (10:15 -0800)]
[libc++] Make some tests in `math_nodiscard_extensions` Clang-only.

Clang implicitly adds the `[[gnu::const]]` attribute to many math
functions from the C standard library functions. Since this behavior is
Clang-specific, make sure the test only runs on Clang.

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

19 months ago[NFC] [Serialization] Add static assert for Num*Declbits
Chuanqi Xu [Fri, 3 Feb 2023 06:29:14 +0000 (14:29 +0800)]
[NFC] [Serialization] Add static assert for Num*Declbits

This re-commits part of c79635cce845. It is reverted since it contains
platform-inconsistent constant. Now the patch only contains constant
defined in DeclBase.h so it should be platform-independent. And this
should be still helpful.

Reviewed By: erichkeane

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

19 months ago[LoongArch] Override TargetLowering::hasAndNotCompare()
gonglingqin [Fri, 3 Feb 2023 01:37:17 +0000 (09:37 +0800)]
[LoongArch] Override TargetLowering::hasAndNotCompare()

Override hasAndNotCompare() to use more `ANDN` instead of using `AND`
and `NOT`.
This patch enables the following transforms:
(X & Y) == Y ---> (~X & Y) == 0
(X & Y) != Y ---> (~X & Y) != 0.

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

19 months ago[mlir] print-op-graph: StringMap=>map to stabilize iteration order
Fangrui Song [Fri, 3 Feb 2023 04:03:34 +0000 (20:03 -0800)]
[mlir] print-op-graph: StringMap=>map to stabilize iteration order

19 months ago[OpenMP] Guard the code if ITT is not used
Shilei Tian [Fri, 3 Feb 2023 03:54:25 +0000 (22:54 -0500)]
[OpenMP] Guard the code if ITT is not used

`check_loc` is not used if ITT is disabled or debug is off, causing a
compiler warning.

Reviewed By: jlpeyton

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

19 months agoAMDGPU: Use module flag to get code object version at IR level
Changpeng Fang [Fri, 3 Feb 2023 02:57:26 +0000 (18:57 -0800)]
AMDGPU: Use module flag to get code object version at IR level

Summary:
  This patch introduces a mechanism to check the code object version from the module flag, This avoids checking from command line.
In case the module flag is missing, we use the current default code object version supported in the compiler.

For tools whose inputs are not IR, we may need other approach (directive, for example) to check the code
object version, That will be in a separate patch later.

For LIT tests update, we directly add module flag if there is only a single code object version associated with all checks in one file.
In cause of multiple code object version in one file, we use the "sed" method to "clone" the checks to achieve the goal.

Reviewer: arsenm

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

19 months agoX86: Add some baseline tests for broken is.fpclass handling with DAZ
Matt Arsenault [Tue, 31 Jan 2023 18:21:17 +0000 (14:21 -0400)]
X86: Add some baseline tests for broken is.fpclass handling with DAZ

If DAZ is enabled, a test against fcZero is not equivalent to a compare
with 0.

19 months agoAMDGPU: Add additional tests for is.fpclass legalization
Matt Arsenault [Thu, 2 Feb 2023 13:59:08 +0000 (09:59 -0400)]
AMDGPU: Add additional tests for is.fpclass legalization

19 months agoAMDGPU: Regenerate test checks
Matt Arsenault [Thu, 2 Feb 2023 13:49:54 +0000 (09:49 -0400)]
AMDGPU: Regenerate test checks

Use right prefix order to get merging.

Also drop -verify-machineinstrs and add -amdgpu-enable-delay-alu=0

19 months agoAMDGPU: Factor out fneg fold predicate function
Matt Arsenault [Wed, 14 Dec 2022 22:58:56 +0000 (17:58 -0500)]
AMDGPU: Factor out fneg fold predicate function

19 months agoAMDGPU: Try to unfold fneg source when matching legacy fmin/fmax
Matt Arsenault [Thu, 15 Dec 2022 15:20:01 +0000 (10:20 -0500)]
AMDGPU: Try to unfold fneg source when matching legacy fmin/fmax

This is NFC as it stands, since other combines will effectively
prevent this from being reachable. This will avoid regressions in a
future change which tries to make better use of select source
modifiers.

Didn't bother with the GlobalISel part for now, since the baseline
combine doesn't seem to work on the existing test.

19 months ago[C++20] [Modules] Pop Expression Evaluation Context when we skip its body during...
Chuanqi Xu [Fri, 3 Feb 2023 02:27:02 +0000 (10:27 +0800)]
[C++20] [Modules] Pop Expression Evaluation Context when we skip its body during parsing

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

The root cause of issue 60275 is the imbalance of
PushExpressionEvaluationContext() and PopExpressionEvaluationContext().

See
https://github.com/llvm/llvm-project/blob/f1c4f927f7c15b5efdc3589c050fd0513bf6b303/clang/lib/Parse/Parser.cpp#L1396-L1437

We will PushExpressionEvaluationContext() in ActOnStartOfFunctionDef()
in line 1396 and we should pop it in ActOnFinishFunctionBody later.
However if we skip the function body in line 1402, the expression
evaluation context will not be popped. Then here is the issue report. I
fix the issue by inserting codes to pop the expression evaluation
context explicitly if the function body is skipped. Maybe this looks
like an ad-hoc fix. But if we want to fix this in a pretty way, we
should refactor the current framework for pushing and popping expression
evaluation contexts. Currently there are 23
PushExpressionEvaluationContext() callsities and 21
PopExpressionEvaluationContext() callsites in the code. And it seems not
easy to balance them well and fast. So I suggest to land this fix first.
At least it can prevent the crash.

Reviewed By: cor3ntin

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

19 months ago[PowerPC] add a peephole to remove redundant swap instructions after vector splats...
Ting Wang [Fri, 3 Feb 2023 01:52:52 +0000 (20:52 -0500)]
[PowerPC] add a peephole to remove redundant swap instructions after vector splats on P8

Vector store on P8 little endian will have swap instruction added before
the store in PPCISelLowring. If the vector is generated by splat, the
swap instruction can be eliminated.

Reviewed By: shchenz

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

19 months ago[RISCV] Permit tail call to an externally-defined function with weak linkage
LiaoChunyu [Fri, 3 Feb 2023 01:16:49 +0000 (09:16 +0800)]
[RISCV] Permit tail call to an externally-defined function with weak linkage

As described in D45395 `This has been modeled after ARM's tail call opt.`
ARM's abi seems to limit weak symbol.

I did not find the limitation for RISCV. (Please correct me if I am wrong)

gcc seems to use the tail-call opt: https://godbolt.org/z/bjWE68n5o

Reviewed By: MaskRay

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

19 months ago[DX] Speculative big endian fix
Chris Bieneman [Fri, 3 Feb 2023 01:25:28 +0000 (19:25 -0600)]
[DX] Speculative big endian fix

I think this will get it this time.