platform/upstream/llvm.git
18 months ago[AArch64] NFC: Align addTypeForStreamingSVE and addTypeForFixedLengthSVE
Sander de Smalen [Mon, 9 Jan 2023 09:26:20 +0000 (09:26 +0000)]
[AArch64] NFC: Align addTypeForStreamingSVE and addTypeForFixedLengthSVE

This patch is NFC and just moves things around so their implementation is very similar.

18 months ago[bazel] Updates for https://github.com/llvm/llvm-project/commit/496f9a7d8d4b61b6f5dfa...
Dmitri Gribenko [Mon, 9 Jan 2023 09:27:15 +0000 (10:27 +0100)]
[bazel] Updates for https://github.com/llvm/llvm-project/commit/496f9a7d8d4b61b6f5dfa21e2614043a2b27cf67

18 months ago[bazel] Update the mpfr URL to a stable one
Dmitri Gribenko [Mon, 9 Jan 2023 09:26:25 +0000 (10:26 +0100)]
[bazel] Update the mpfr URL to a stable one

mpfr has released a new version, and now the old tar.gz URL does not
work anymore. Update the URL to a stable one.

18 months ago[mlir:LLVM] Rudimentary inlining support for LLVM load store.
Johannes de Fine Licht [Mon, 9 Jan 2023 09:28:10 +0000 (10:28 +0100)]
[mlir:LLVM] Rudimentary inlining support for LLVM load store.

Conservatively only allow inlining for loads and stores that don't carry
any attributes that require handling while inlining. This can later be
relaxed when proper handling is introduced.

Reviewed By: Dinistro, gysit

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

18 months ago[mlir][llvm] Add branch weights to call and invoke
Christian Ulmann [Mon, 9 Jan 2023 09:14:21 +0000 (10:14 +0100)]
[mlir][llvm] Add branch weights to call and invoke

This commit introduces branch weight attributes to the LLVM::CallOp and
LLVM::InvokeOp and adds both import and export of them.

Reviewed By: gysit

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

18 months ago[NFC] Missing whitespace in SSAUpdaterBulk debug output.
Thomas Symalla [Mon, 9 Jan 2023 09:11:08 +0000 (10:11 +0100)]
[NFC] Missing whitespace in SSAUpdaterBulk debug output.

Adds a whitespace in a debug message before printing out a
value in the SSAUpdaterBulk.
Without this, debugging can end up a bit cumbersome.

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

18 months ago[JumpThreading] Preserve profile metadata during select unfolding
Max Kazantsev [Mon, 9 Jan 2023 09:04:00 +0000 (16:04 +0700)]
[JumpThreading] Preserve profile metadata during select unfolding

Jump threading can replace select and unconditional branch with
conditional branch, but when doing so loses profile information.

This destructive transform can eventually lead to a performance
degradation due to folding of branches in
shouldFoldCondBranchesToCommonDestination as branch probabilities
are no longer known.

Patch by Roman Paukner!

Differential Revision: https://reviews.llvm.org/D138132
Reviewed By: mkazantsev

18 months ago[gn build] Port 59b029238af2
LLVM GN Syncbot [Mon, 9 Jan 2023 09:00:23 +0000 (09:00 +0000)]
[gn build] Port 59b029238af2

18 months ago[DebugInfo] Produce variadic DBG_INSTR_REFs from ISel
Stephen Tozer [Tue, 3 Jan 2023 18:13:31 +0000 (18:13 +0000)]
[DebugInfo] Produce variadic DBG_INSTR_REFs from ISel

This patch modifies SelectionDAG and FastISel to produce DBG_INSTR_REFs with
variadic expressions, and produce DBG_INSTR_REFs for debug values with variadic
location expressions. The former essentially means just prepending
DW_OP_LLVM_arg, 0 to the existing expression. The latter is achieved in
MachineFunction::finalizeDebugInstrRefs and InstrEmitter::EmitDbgInstrRef.

Reviewed By: jmorse, Orlando

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

18 months ago[clang][analyzer] Remove report of null stream from StreamChecker.
Balázs Kéri [Mon, 9 Jan 2023 08:16:18 +0000 (09:16 +0100)]
[clang][analyzer] Remove report of null stream from StreamChecker.

The case of NULL stream passed to stream functions was reported by StreamChecker.
The same condition is checked already by StdLibraryFunctionsChecker and it is
enough to check at one place. The StreamChecker stops now analysis if a passed NULL
stream is encountered but generates no report.
This change removes a dependency between StdCLibraryFunctionArgs checker and
StreamChecker. There is now no more specific message reported by StreamChecker,
the previous weak-dependency is not needed. And StreamChecker can be used
without StdCLibraryFunctions checker or its ModelPOSIX option.

Reviewed By: Szelethus

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

18 months ago[reland][NFC] Vastly simplifies TypeSize
Guillaume Chatelet [Fri, 6 Jan 2023 16:33:56 +0000 (16:33 +0000)]
[reland][NFC] Vastly simplifies TypeSize

Simplifies the implementation of `TypeSize` while retaining its interface.
There is no need for abstract concepts like `LinearPolyBase`, `UnivariateLinearPolyBase` or `LinearPolySize`.

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

18 months ago[AArch64][SelectionDAG] Eliminates redundant zero-extension for 32-bit popcount
zhongyunde [Mon, 9 Jan 2023 08:04:49 +0000 (16:04 +0800)]
[AArch64][SelectionDAG] Eliminates redundant zero-extension for 32-bit popcount

Fix https://github.com/llvm/llvm-project/issues/59597.
mov w8, w0 + fmov d0, x8 ==> fmov s0, w0

Reviewed By: dmgreen, efriedma

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

18 months ago[TableGen][SourceMgr] Correctly append filename to include directories
Markus Böck [Sun, 8 Jan 2023 21:20:36 +0000 (22:20 +0100)]
[TableGen][SourceMgr] Correctly append filename to include directories

The current implementation unconditionally appends the system path separator with the filename to the include directory. This is not correct in edge cases however, such as when specifying `/` as include directory (on Unix systems) or just `\` on Windows.
This patch fixes that by using `sys::path::append`, which already has the required logic to correctly implement this.

While this is technically only a change in the `SourceMgr` class, I think the main user of that class, and the include mechanism, is TableGen.
No test attached because no behavioral difference is observable without trying to access the root directory of the users filesystem.

The motivation for this change is a rather funny story, as this actually fixes a performance problem when running `check-mlir` on Windows.
Some tests for `mlir-pdll-lsp-server` lead to adding `\` as include directory in TableGen (which is a valid absolute path on Windows!). Due to the unconditional append, the created filepath would then be of the form `\\<dir>\...` which is also a valid path on Windows, but is a network path. On my machine it'd then attempt to access the network and find a machine with the name `<dir>` and the file there. This call would take several seconds, leading to some tests in `mlir-pdll-lsp-server` taking 2 minutes on my machine.

Running `check-mlir` after this patch reduces the runtime on my machine from 161 seconds to 6 seconds.

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

18 months ago[NFC] Add missing 'static' notion in createReplacement
Max Kazantsev [Mon, 9 Jan 2023 06:50:07 +0000 (13:50 +0700)]
[NFC] Add missing 'static' notion in createReplacement

18 months ago[Inline Spiller] Extend the snippet by statepoint uses
Serguei Katkov [Thu, 20 Oct 2022 05:05:33 +0000 (12:05 +0700)]
[Inline Spiller] Extend the snippet by statepoint uses

Snippet is a tiny live interval which has copy or fill like def
and copy or spill like use at the end (any of them might abcent).

Snippet has only one use/def inside interval and interval is located
in one basic block.

When inline spiller spills some reg around uses it also forces the
spilling of connected snippets those which got by splitting the
same original reg and its def is a full copy of our reg or its
last use is a full copy to our reg.

The definition of snippet is extended to allow not only one use/def
but more. However all other uses are statepoint instructions which will
fold fill into its operand. That way we do not introduce new fills/spills.

Reviewed By: qcolombet, dantrushin
Differential Revision: https://reviews.llvm.org/D138093

18 months ago[MLIR] NFC. Fix DEBUG_TYPE for AffineOps.cpp
Uday Bondhugula [Mon, 9 Jan 2023 05:40:44 +0000 (11:10 +0530)]
[MLIR] NFC. Fix DEBUG_TYPE for AffineOps.cpp

Fix DEBUG_TYPE for AffineOps.cpp. NFC.

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

18 months ago[RISCV][CostModel] Add half type support for the cost model of sqrt/fabs
liqinweng [Mon, 9 Jan 2023 04:56:10 +0000 (12:56 +0800)]
[RISCV][CostModel] Add half type support for the cost model of sqrt/fabs

1. Refactor for costs of sqrt/fabs
2. Add half type support for the cost model of sqrt/fabs

Reviewed By: craig.topper

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

18 months agolldCOFF: Fix warnings for D110450 [-Wunused-private-field]
NAKAMURA Takumi [Mon, 9 Jan 2023 03:15:19 +0000 (12:15 +0900)]
lldCOFF: Fix warnings for D110450 [-Wunused-private-field]

18 months ago[NFC] Fix the test failure in 08f957808e5f7e44b11d in armv8
Chuanqi Xu [Mon, 9 Jan 2023 03:23:30 +0000 (11:23 +0800)]
[NFC] Fix the test failure in  08f957808e5f7e44b11d in armv8

The test in 08f957808e5f7e44b11d may fail in armv8 since the signature
of the constructor may be different. This patch tries to fix it.

18 months ago[RISCV][CostModel] Add cost model for integer abs
liqinweng [Mon, 9 Jan 2023 03:38:24 +0000 (11:38 +0800)]
[RISCV][CostModel] Add cost model for integer abs

Reviewed By: craig.topper

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

18 months ago[C++20] [Modules] Don't generate global ctors/dtors for variables which are available...
Chuanqi Xu [Mon, 9 Jan 2023 02:43:35 +0000 (10:43 +0800)]
[C++20] [Modules] Don't generate global ctors/dtors for variables which are available externally

Closes https://github.com/llvm/llvm-project/issues/59765.

Currently we will generate the global ctor/dtor for variables in
importing modules. It will cause multiple initialization/destructions.
It makes no sense. This patch tries to not generate global ctor/dtor for
variables which are available externally. Note that the variables in
header units and clang modules won't be available externally by default.

Reviewed By: iains

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

18 months ago[C++20] [Modules] Make placement allocation functions always visible
Chuanqi Xu [Mon, 9 Jan 2023 02:39:35 +0000 (10:39 +0800)]
[C++20] [Modules] Make placement allocation functions always visible

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

This is actually a workaround for the issue. See the comments and the
test for example. The proper fix should make the placement allocation
functions acceptable based on the context. But it is harder and more
complex on the one side. On the other side, such workaround won't be too
bad in practice since users rarely call the placement allocation
functions directly.

So personally I prefer to address such problems in the simpler way.

Reviewed By: royjacobson

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

18 months ago[InstCombine] Fold logic-and/logic-or by distributive laws part2
chenglin.bi [Mon, 9 Jan 2023 02:21:05 +0000 (10:21 +0800)]
[InstCombine] Fold logic-and/logic-or by distributive laws part2

Follow up https://reviews.llvm.org/D139408, support `and/or+select` patterns
X && Z || Y && Z --> (X || Y) && Z
https://alive2.llvm.org/ce/z/EMCkBG
https://alive2.llvm.org/ce/z/Q-YRvr
https://alive2.llvm.org/ce/z/SFkVQc
https://alive2.llvm.org/ce/z/S9MCuJ
https://alive2.llvm.org/ce/z/KZ7zzz

(X || Z) && (Y || Z) --> (X && Y) || Z
https://alive2.llvm.org/ce/z/Ggpa8-
https://alive2.llvm.org/ce/z/nhQRLY
https://alive2.llvm.org/ce/z/zpmEnq
https://alive2.llvm.org/ce/z/7omsrf
https://alive2.llvm.org/ce/z/CWBzBp

Reviewed By: spatel

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

18 months ago[CodeGen] Fix a warning
Kazu Hirata [Mon, 9 Jan 2023 00:31:45 +0000 (16:31 -0800)]
[CodeGen] Fix a warning

This patch fixes:

  llvm/lib/CodeGen/AssignmentTrackingAnalysis.cpp:1220:13: error:
  unused function 'locStr' [-Werror,-Wunused-function]

18 months ago[libc++] Add _LIBCPP_HIDE_FROM_ABI to __constexpr_logb and __constexpr_scalbn
Nikolas Klauser [Mon, 9 Jan 2023 00:16:34 +0000 (01:16 +0100)]
[libc++] Add _LIBCPP_HIDE_FROM_ABI to __constexpr_logb and __constexpr_scalbn

18 months ago[LLD] Remove global state in lld/COFF
Amy Huang [Thu, 14 Jul 2022 19:53:32 +0000 (15:53 -0400)]
[LLD] Remove global state in lld/COFF

Remove globals from the lldCOFF library, by moving globals into a context class.
This patch mostly moves the config object into COFFLinkerContext.

See https://lists.llvm.org/pipermail/llvm-dev/2021-June/151184.html for
context about removing globals from LLD.

Reviewed By: aganea

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

18 months ago[libc++][test] zip_view test cleanups
Casey Carter [Sun, 8 Jan 2023 07:12:21 +0000 (23:12 -0800)]
[libc++][test] zip_view test cleanups

* The reference type of `common_input_iterator<const int*>` can't be `int&`, because an lvalue of type `const int` _can't_ bind to an `int&`. Fix by changing the return type of `operator*` to `decltype(auto)` to make it fully generic.
* `range.zip/iterator/compare.pass.cpp` verifies that the iterators of a `zip_view` don't support `<=>` when the underlying iterators do not; this is not true after LWG-3692.
* libc++ doesn't yet implement P2165R4 "Compatibility between tuple, pair and tuple-like objects", so the tests expect `zip_view` to use `pair` in places where the working draft requires `tuple`.

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

18 months ago[AVR] Support .reloc directive
Fangrui Song [Sun, 8 Jan 2023 23:27:21 +0000 (23:27 +0000)]
[AVR] Support .reloc directive

Reviewed By: benshi001

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

18 months ago[libc][Obvious] Temporarily disable log10_test for further investigation.
Tue Ly [Sun, 8 Jan 2023 23:21:30 +0000 (18:21 -0500)]
[libc][Obvious] Temporarily disable log10_test for further investigation.

18 months ago[libc][Obvious] Remove constexpr fomr exact_mult in double_double.h
Tue Ly [Sun, 8 Jan 2023 22:52:46 +0000 (17:52 -0500)]
[libc][Obvious] Remove constexpr fomr exact_mult in double_double.h

18 months ago[libc][math] Implement log10 function correctly rounded for all rounding modes
Tue Ly [Sun, 8 Jan 2023 22:19:13 +0000 (17:19 -0500)]
[libc][math] Implement log10 function correctly rounded for all rounding modes

Implement double precision log10 function correctly rounded for all
rounding modes.  This implementation currently needs FMA instructions for
correctness.

Use 2 passes:
Fast pass:
- 1 step range reduction with a lookup table of `2^7 = 128` elements to reduce the ranges to `[-2^-7, 2^-7]`.
- Use a degree-7 minimax polynomial generated by Sollya, evaluated using a mixed of double-double and double precisions.
- Apply Ziv's test for accuracy.
Accurate pass:
- Apply 5 more range reduction steps to reduce the ranges further to [-2^-27, 2^-27].
- Use a degree-4 minimax polynomial generated by Sollya, evaluated using 192-bit precisions.
- By the result of Lefevre (add quote), this is more than enough for correct rounding to all rounding modes.

In progress: Adding detail documentations about the algorithm.

Depend on: https://reviews.llvm.org/D136799

Reviewed By: zimmermann6

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

18 months ago[AAUnderlyingObjects] Introduce an AA for getting underlying objects of a pointer
Shilei Tian [Sun, 8 Jan 2023 21:45:42 +0000 (16:45 -0500)]
[AAUnderlyingObjects] Introduce an AA for getting underlying objects of a pointer

This patch introduces a new AA `AAUnderlyingObjects`. It is basically like a wrapper
AA of the function `AA::getAssumedUnderlyingObjects`, but it can recursively do
query if the underlying object is an indirect access, such as a phi node or a select
instruction.

Reviewed By: jdoerfert

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

18 months ago[mlir][analysis] Add an analysis for preserving symbol tables
Jeff Niu [Thu, 8 Dec 2022 20:22:40 +0000 (12:22 -0800)]
[mlir][analysis] Add an analysis for preserving symbol tables

This patch adds a `SymbolTableAnalysis` that can be used with the
analysis manager. It contains a symbol table collection. This analysis
allows symbol tables to be preserved across passes so that they do not
need to be recomputed. The analysis assumes it remains valid because
most transformations automatically keep symbol tables up-to-date using
its `insert` and `erase` methods.

Reviewed By: rriddle

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

18 months ago[AArch64][compiler-rt] Option to build compiler-rt without FMV support.
Pavel Iliin [Fri, 30 Dec 2022 13:34:45 +0000 (13:34 +0000)]
[AArch64][compiler-rt] Option to build compiler-rt without FMV support.

This commit adds compiler-rt cmake option COMPILER_RT_DISABLE_AARCH64_FMV
which, when enabled, doesn't include function multiversioning features
initilization code in 'builtins' build.

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

18 months ago[X86] Add shuffle test coverage for Issue #59860
Simon Pilgrim [Sun, 8 Jan 2023 19:05:54 +0000 (19:05 +0000)]
[X86] Add shuffle test coverage for Issue #59860

18 months ago[AVR] Optimize 32-bit shifts: optimize REG_SEQUENCE
Ayke van Laethem [Tue, 6 Dec 2022 13:47:31 +0000 (14:47 +0100)]
[AVR] Optimize 32-bit shifts: optimize REG_SEQUENCE

This pseudo-instruction stores two small (8-bit) registers into one wide
(16-bit) register. But apparently the order matters a lot to the
register allocator.
This patch changes the order of inserting the registers to optimize for
the best register allocation in the tests of shift32.ll. It might be
detrimental in other cases, but keeping the registers in the same
physical register seems like it would be a common case.

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

18 months ago[AVR] Optimize 32-bit shifts: reverse shift + move
Ayke van Laethem [Tue, 6 Dec 2022 13:39:37 +0000 (14:39 +0100)]
[AVR] Optimize 32-bit shifts: reverse shift + move

This optimization turns shifts of almost a multiple of 8 into a shift
into the opposite direction. Unfortunately it doesn't compose well with
the other optimizations (I've tried) so it's separate from them.

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

18 months ago[AVR] Optimize 32-bit shifts: shift by 4 bits
Ayke van Laethem [Tue, 6 Dec 2022 13:26:01 +0000 (14:26 +0100)]
[AVR] Optimize 32-bit shifts: shift by 4 bits

This uses a complicated shift sequence that avr-gcc also uses, but
extended to work over any number of bytes and in both directions
(logical shift left and logical shift right). Unfortunately it can't be
used for an arithmetic shift right: I've tried to come up with a
sequence but couldn't.

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

18 months ago[AVR] Optimize 32-bit shift: move bytes around
Ayke van Laethem [Tue, 6 Dec 2022 12:58:08 +0000 (13:58 +0100)]
[AVR] Optimize 32-bit shift: move bytes around

This patch optimizes 32-bit constant shifts by renaming registers. This
is very effective as the compiler would otherwise need to do a lot of
single bit shift instructions. Instead, the registers are renamed at the
SSA level which means the register allocator will insert the necessary
mov instructions.

Unfortunately, the register allocator will insert some unnecessary movs
with the current code. This will be fixed in a later patch.

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

18 months ago[AVR] Custom lower 32-bit shift instructions
Ayke van Laethem [Tue, 6 Dec 2022 12:43:23 +0000 (13:43 +0100)]
[AVR] Custom lower 32-bit shift instructions

32-bit shift instructions were previously expanded using the default
SelectionDAG expander, which meant it used 16-bit constant shifts and
ORed them together. This works, but is far from optimal.

I've optimized 32-bit shifts on AVR using a custom inserter. This is
done using three new pseudo-instructions that take the upper and lower
bits of the value in two separate 16-bit registers and outputs two
16-bit registers.

This is the first commit in a series. When completed, shift instructions
will take around 31% less instructions on average for constant 32-bit
shifts, and is in all cases equal or better than the old behavior. It
also tends to match or outperform avr-gcc: the only cases where avr-gcc
does better is when it uses a loop to shift, or when the LLVM register
allocator inserts some unnecessary movs. But it even outperforms avr-gcc
in some cases where avr-gcc does not use a loop.

As a side effect, non-constant 32-bit shifts also become more efficient.

For some real-world differences: the build of compiler-rt I use in
TinyGo becomes 2.7% smaller and the build of picolibc I use becomes 0.9%
smaller. I think picolibc is a better representation of real-world code,
but even a ~1% reduction in code size is really significant.

The current patch just lays the groundwork. The result is actually a
regression in code size. Later patches will use this as a basis to
optimize these shift instructions.

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

18 months ago[gn] port b712aef5b37e
Nico Weber [Sun, 8 Jan 2023 18:24:53 +0000 (13:24 -0500)]
[gn] port b712aef5b37e

18 months ago[gn build] Port 86aac87fe4b5
Nico Weber [Sun, 8 Jan 2023 18:22:18 +0000 (13:22 -0500)]
[gn build] Port 86aac87fe4b5

18 months ago[SelectionDAG][AVR] Add support for lrint and lround intrinsics
Ayke van Laethem [Sun, 1 Jan 2023 18:05:35 +0000 (19:05 +0100)]
[SelectionDAG][AVR] Add support for lrint and lround intrinsics

Integer legalization already supported splitting the output integer of
llround and llrint, but did not support this for lround and lrint yet.
This is not a problem for 32-bit architectures, but for 8/16-bit
architectures like AVR it results in a crash like this:

    ExpandIntegerResult #0: t7: i32 = lround t6

    LLVM ERROR: Do not know how to expand the result of this operator!

This patch simply add lrint/lround to the list of ISD opcodes to expand.

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

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

18 months ago[AVR] correctly declare __do_copy_data and __do_clear_bss
Ayke van Laethem [Mon, 2 Jan 2023 00:21:19 +0000 (01:21 +0100)]
[AVR] correctly declare __do_copy_data and __do_clear_bss

These two symbols are declared in object files to indicate whether .data
needs to be copied from flash or .bss needs to be cleared. They are
supported on avr-gcc and reduce firmware size a bit, which is especially
important on very small chips.

I checked the behavior of avr-gcc and matched it as well as possible.
From my investigation, it seems to work as follows:

__do_copy_data is set when the compiler finds a data symbol:
  * without a section name
  * with a section name starting with ".data" or ".gnu.linkonce.d"
  * with a section name starting with ".rodata" or ".gnu.linkonce.r" and
    flash and RAM are in the same address space

__do_clear_bss is set when the compiler finds a data symbol:
  * without a section name
  * with a section name that starts with .bss

Simply checking whether the calculated section name starts with ".data",
".rodata" or ".bss" should result in the same behavior.

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

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

18 months ago[X86][Disassembler][NFCI] Read bytes with support::endian::read
Benjamin Kramer [Sun, 8 Jan 2023 17:19:01 +0000 (18:19 +0100)]
[X86][Disassembler][NFCI] Read bytes with support::endian::read

18 months ago[InstCombine] fold not-shift of signbit to icmp+zext, part 2
Sanjay Patel [Sun, 8 Jan 2023 16:36:21 +0000 (11:36 -0500)]
[InstCombine] fold not-shift of signbit to icmp+zext, part 2

Follow-up to:
6c39a3aae1dc

That converted a pattern with ashr directly to icmp+zext, and
this updates the pattern that we used to convert to.

This canonicalizes to icmp for better analysis in the minimum case
and shortens patterns where the source type is not the same as dest type:
https://alive2.llvm.org/ce/z/tpXJ64
https://alive2.llvm.org/ce/z/dQ405O

This requires an adjustment to an icmp transform to avoid infinite looping.

18 months ago[OpenMP] Migrate OpenMPOffloadMappingFlags from Clang CodeGen to OMPConstants
Akash Banerjee [Sun, 8 Jan 2023 16:45:12 +0000 (16:45 +0000)]
[OpenMP] Migrate OpenMPOffloadMappingFlags from Clang CodeGen to OMPConstants

This patch moves the OpenMPOffloadMappingFlags enum definiition from Clang codegen to OMPConstants.h

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

18 months ago[NFCI][Offload Bundler] Replace hand-rolled endian conversion with llvm::support
Benjamin Kramer [Sun, 8 Jan 2023 16:32:54 +0000 (17:32 +0100)]
[NFCI][Offload Bundler] Replace hand-rolled endian conversion with llvm::support

18 months ago[NFC] Hide implementation details in anonymous namespaces
Benjamin Kramer [Sun, 8 Jan 2023 16:25:29 +0000 (17:25 +0100)]
[NFC] Hide implementation details in anonymous namespaces

18 months ago[libc++] Granularize <bit> and remove <__bits>
Nikolas Klauser [Tue, 27 Dec 2022 01:31:38 +0000 (02:31 +0100)]
[libc++] Granularize <bit> and remove <__bits>

Reviewed By: Mordante, #libc

Spies: libcxx-commits

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

18 months ago[VPlan] Keep entries in worklist in sinkScalarOperands.
Florian Hahn [Sun, 8 Jan 2023 15:52:00 +0000 (15:52 +0000)]
[VPlan] Keep entries in worklist in sinkScalarOperands.

Not removing the entries ensures that duplicates are avoided,
reducing the number of iterations.

18 months ago[libc++][CI] Fixes robust against ADL for C++03.
Mark de Wever [Wed, 28 Dec 2022 19:02:01 +0000 (20:02 +0100)]
[libc++][CI] Fixes robust against ADL for C++03.

This was disabled in D139545.

Reviewed By: philnik, #libc

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

18 months ago[clang-tidy][NFC] Remove unused User argument in misc-misleading-bidirectional check
Carlos Galvez [Fri, 6 Jan 2023 11:02:33 +0000 (11:02 +0000)]
[clang-tidy][NFC] Remove unused User argument in misc-misleading-bidirectional check

It's not used anywhere.

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

18 months ago[clangd] Fix an inlay-hint crash on a null deduced type.
Haojian Wu [Sat, 7 Jan 2023 21:59:50 +0000 (22:59 +0100)]
[clangd] Fix an inlay-hint crash on a null deduced type.

18 months ago[libc++] [C++20] [P0415] Constexpr for std::complex.
Marek Kurdej [Thu, 15 Dec 2022 01:19:59 +0000 (02:19 +0100)]
[libc++] [C++20] [P0415] Constexpr for std::complex.

This patch adds constexpr to <complex> header: operators, member operators, and member functions (real, imag, norm, conj).

https://eel.is/c++draft/complex.numbers
https://wg21.link/p0415

Reviewed By: ldionne, #libc

Spies: philnik, danilaml, Quuxplusone, wmaxey, arichardson, libcxx-commits

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

18 months ago[SVE] Fix incorrect VT usage when lowering fixed length vector divides.
Paul Walker [Tue, 20 Dec 2022 01:39:31 +0000 (01:39 +0000)]
[SVE] Fix incorrect VT usage when lowering fixed length vector divides.

Ensure the negation required when lowering negative power-of-two
divides uses the scalable vector container type with the fixed
length result extracted from it.

Fixes: #59647

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

18 months ago[C++20][Modules] Do not allow non-inline external definitions in header units.
Iain Sandoe [Sat, 17 Dec 2022 15:33:07 +0000 (15:33 +0000)]
[C++20][Modules] Do not allow non-inline external definitions in header units.

[module.import/6] last sentence:
A header unit shall not contain a definition of a non-inline function or
variable whose name has external linkage.

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

18 months agoApply clang-tidy fixes for llvm-qualified-auto in ModuleImport.cpp (NFC)
Mehdi Amini [Sat, 7 Jan 2023 01:07:20 +0000 (01:07 +0000)]
Apply clang-tidy fixes for llvm-qualified-auto in ModuleImport.cpp (NFC)

18 months agoApply clang-tidy fixes for readability-simplify-boolean-expr in Vectorization.cpp...
Mehdi Amini [Fri, 6 Jan 2023 22:49:44 +0000 (22:49 +0000)]
Apply clang-tidy fixes for readability-simplify-boolean-expr in Vectorization.cpp (NFC)

18 months agolibc++: bring back the unsigned in the return type in wcstoull_l
Sylvestre Ledru [Sat, 7 Jan 2023 23:32:42 +0000 (00:32 +0100)]
libc++: bring back the unsigned in the return type in wcstoull_l

got remove here:
https://github.com/llvm/llvm-project/commit/67b0b02ec9f2bbc57bf8f0550828d97f460ac11f#diff-e41832b8aa26da45585a57c5111531f2e1d07e91a67c4f8bf1cd6d566ae45a2bR42

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

18 months agoImplement CWG2631
Corentin Jabot [Sun, 23 Oct 2022 15:32:58 +0000 (17:32 +0200)]
Implement CWG2631

Implement https://cplusplus.github.io/CWG/issues/2631.html.

Immediate calls in default arguments and defaults members
are not evaluated.

Instead, we evaluate them when constructing a
`CXXDefaultArgExpr`/`BuildCXXDefaultInitExpr`.

The immediate calls are executed by doing a
transform on the initializing expression.

Note that lambdas are not considering subexpressions so
we do not need to transform them.

As a result of this patch, unused default member
initializers are not considered odr-used, and
errors about members binding to local variables
in an outer scope only surface at the point
where a constructor is defined.

Reviewed By: aaron.ballman, #clang-language-wg, rupprecht

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

18 months ago[InstCombine] Combine (zext a) mul (zext b) to llvm.umul.with.overflow only if mul...
luxufan [Sun, 8 Jan 2023 06:27:43 +0000 (14:27 +0800)]
[InstCombine] Combine (zext a) mul (zext b) to llvm.umul.with.overflow only if mul has NUW flag

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

Reviewed By: nikic

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

18 months agoflang] Remove remaining uses of llvm::Optional (NFC)
Kazu Hirata [Sun, 8 Jan 2023 06:32:38 +0000 (22:32 -0800)]
flang] Remove remaining uses of llvm::Optional (NFC)

This patch removes the unused "using" declaration and removes #include
"llvm/ADT/Optional.h".

This is part of an effort to migrate from llvm::Optional to
std::optional:

https://discourse.llvm.org/t/deprecating-llvm-optional-x-hasvalue-getvalue-getvalueor/63716

18 months ago[flang] Use std::optional instead of llvm::Optional (NFC)
Kazu Hirata [Sun, 8 Jan 2023 06:26:48 +0000 (22:26 -0800)]
[flang] Use std::optional instead of llvm::Optional (NFC)

This patch replaces (llvm::|)Optional< with std::optional<.  I'll post
a separate patch to remove #include "llvm/ADT/Optional.h".

This is part of an effort to migrate from llvm::Optional to
std::optional:

https://discourse.llvm.org/t/deprecating-llvm-optional-x-hasvalue-getvalue-getvalueor/63716

18 months ago[flang] Add #include <optional> (NFC)
Kazu Hirata [Sun, 8 Jan 2023 04:55:47 +0000 (20:55 -0800)]
[flang] Add #include <optional> (NFC)

This patch adds #include <optional> to those files containing
llvm::Optional<...> or Optional<...>.

I'll post a separate patch to actually replace llvm::Optional with
std::optional.

This is part of an effort to migrate from llvm::Optional to
std::optional:

https://discourse.llvm.org/t/deprecating-llvm-optional-x-hasvalue-getvalue-getvalueor/63716

18 months ago[clang-tools-extra] Remove remaining uses of llvm::Optional (NFC)
Kazu Hirata [Sun, 8 Jan 2023 04:34:53 +0000 (20:34 -0800)]
[clang-tools-extra] Remove remaining uses of llvm::Optional (NFC)

This patch removes the unused "using" declaration and removes #include
"llvm/ADT/Optional.h".

This is part of an effort to migrate from llvm::Optional to
std::optional:

https://discourse.llvm.org/t/deprecating-llvm-optional-x-hasvalue-getvalue-getvalueor/63716

18 months ago[clang-tools-extra] Use std::optional instead of llvm::Optional (NFC)
Kazu Hirata [Sun, 8 Jan 2023 04:19:42 +0000 (20:19 -0800)]
[clang-tools-extra] Use std::optional instead of llvm::Optional (NFC)

This patch replaces (llvm::|)Optional< with std::optional<.  I'll post
a separate patch to clean up the "using" declarations, #include
"llvm/ADT/Optional.h", etc.

This is part of an effort to migrate from llvm::Optional to
std::optional:

https://discourse.llvm.org/t/deprecating-llvm-optional-x-hasvalue-getvalue-getvalueor/63716

18 months ago[clang-tools-extra] Add #include <optional> (NFC)
Kazu Hirata [Sun, 8 Jan 2023 04:02:20 +0000 (20:02 -0800)]
[clang-tools-extra] Add #include <optional> (NFC)

This patch adds #include <optional> to those files containing
llvm::Optional<...> or Optional<...>.

I'll post a separate patch to actually replace llvm::Optional with
std::optional.

This is part of an effort to migrate from llvm::Optional to
std::optional:

https://discourse.llvm.org/t/deprecating-llvm-optional-x-hasvalue-getvalue-getvalueor/63716

18 months agoRevert "AMDGPU: Invert handling of enqueued block detection"
Matt Arsenault [Sun, 8 Jan 2023 02:39:04 +0000 (21:39 -0500)]
Revert "AMDGPU: Invert handling of enqueued block detection"

This reverts commit 47288cc977fa31c44cc92b4e65044a5b75c2597e.

The runtime is having trouble with this at -O0 when the inputs are
always enabled.

18 months ago[lldb] Remove remaining uses of llvm::Optional (NFC)
Kazu Hirata [Sat, 7 Jan 2023 22:36:35 +0000 (14:36 -0800)]
[lldb] Remove remaining uses of llvm::Optional (NFC)

This patch removes the unused "using" declarations, updates comments,
and removes #include "llvm/ADT/Optional.h".

This is part of an effort to migrate from llvm::Optional to
std::optional:

https://discourse.llvm.org/t/deprecating-llvm-optional-x-hasvalue-getvalue-getvalueor/63716

18 months ago[lldb] Use std::optional instead of llvm::Optional (NFC)
Kazu Hirata [Sat, 7 Jan 2023 22:18:35 +0000 (14:18 -0800)]
[lldb] Use std::optional instead of llvm::Optional (NFC)

This patch replaces (llvm::|)Optional< with std::optional<.  I'll post
a separate patch to clean up the "using" declarations, #include
"llvm/ADT/Optional.h", etc.

This is part of an effort to migrate from llvm::Optional to
std::optional:

https://discourse.llvm.org/t/deprecating-llvm-optional-x-hasvalue-getvalue-getvalueor/63716

18 months ago[lldb] Add #include <optional> (NFC)
Kazu Hirata [Sat, 7 Jan 2023 21:43:00 +0000 (13:43 -0800)]
[lldb] Add #include <optional> (NFC)

This patch adds #include <optional> to those files containing
llvm::Optional<...> or Optional<...>.

I'll post a separate patch to actually replace llvm::Optional with
std::optional.

This is part of an effort to migrate from llvm::Optional to
std::optional:

https://discourse.llvm.org/t/deprecating-llvm-optional-x-hasvalue-getvalue-getvalueor/63716

18 months agoclang/AMDGPU: Force disable block enqueue arguments for HIP
Matt Arsenault [Sat, 7 Jan 2023 18:06:52 +0000 (13:06 -0500)]
clang/AMDGPU: Force disable block enqueue arguments for HIP

This is a dirty, dirty hack to workaround bot failures at
-O0. Currently these fields are only used by OpenCL features and
evidently the HIP runtime isn't expecting to see them in HIP
programs. The code objects should be language agnostic, so just force
optimize these out until the runtime is fixed.

18 months ago[llvm-driver] Mark some tests unsupported
Alex Brachet [Sat, 7 Jan 2023 17:45:26 +0000 (17:45 +0000)]
[llvm-driver] Mark some tests unsupported

These tests rely on making symlinks to unkown tool names which will
fail when in the llvm-driver build.

18 months ago[lldb] clang-format PathMappingList.cpp
Kazu Hirata [Sat, 7 Jan 2023 17:38:44 +0000 (09:38 -0800)]
[lldb] clang-format PathMappingList.cpp

This patch clang-formats AppendPathComponents in PathMappingList.cpp.

Without this patch, clang-format would indent the body of the
following function by four spaces.

18 months ago[BPF] generate btf_decl_tag records for params of extern functions
Eduard Zingerman [Sat, 7 Jan 2023 17:29:02 +0000 (09:29 -0800)]
[BPF] generate btf_decl_tag records for params of extern functions

After frontend changes in the following commit:
"BPF: preserve btf_decl_tag for parameters of extern functions"
same mechanics could be used to get the list of function parameters
and associated btf_decl_tag entries for both extern and non-extern
functions.

This commit extracts this mechanics as a separate auxiliary function
BTFDebug::processDISubprogram(). The function is called for both
extern and non-extern functions in order to generated corresponding
BTF_DECL_TAG records.

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

18 months ago[AVR] Fix incorrect decoding of RJMP and RCALL
Ben Shi [Sat, 7 Jan 2023 06:33:24 +0000 (14:33 +0800)]
[AVR] Fix incorrect decoding of RJMP and RCALL

This patch fixes the inaccurate decoding of the offset operand of
the RCALL & RJMP instructions.

Reviewed By: aykevl, MaskRay

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

18 months ago[SPIR-V] Map IR function pointers to registers in ModuleAnalysis
Michal Paszkowski [Sat, 7 Jan 2023 14:25:53 +0000 (15:25 +0100)]
[SPIR-V] Map IR function pointers to registers in ModuleAnalysis

SPIRVModuleAnalysis collects module and external function registers
(usually result of OpFunction) for use when emitting OpFunctionCall.
This patch makes the mapping between the functions and registers using
pointers (instead of name strings) to ensure anonymous functions and
calls can be resolved properly.

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

18 months ago[ARM][AArch64] Add tests for And/Or into CSel fold. NFC
David Green [Sat, 7 Jan 2023 14:08:29 +0000 (14:08 +0000)]
[ARM][AArch64] Add tests for And/Or into CSel fold. NFC

18 months ago[libc++] remove weird empty line
Backl1ght [Sat, 7 Jan 2023 09:19:16 +0000 (17:19 +0800)]
[libc++] remove weird empty line

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

18 months ago[LoongArch] Reorder code and inline variable in lowerGlobalTLSAddress for clarity...
wanglei [Sat, 7 Jan 2023 07:22:47 +0000 (15:22 +0800)]
[LoongArch] Reorder code and inline variable in lowerGlobalTLSAddress for clarity. NFC

18 months ago[BPF] preserve btf_decl_tag for parameters of extern functions
Eduard Zingerman [Sat, 7 Jan 2023 06:45:09 +0000 (22:45 -0800)]
[BPF] preserve btf_decl_tag for parameters of extern functions

Generate DILocalVariable entries for parameters of extern functions,
the "annotations" field of DILocalVariable is used to link
"btf_decl_tag" annotation with the parameter.

Do this only for BPF backend as there are no other users for this
information. Final DWARF is valid as "Appendix A" is very much lax in
what is allowed as attributes for "DW_TAG_formal_parameter":

    DWARF does not in general require that a given debugging information
    entry contain a particular attribute or set of attributes. Instead,
    a DWARF producer is free to generate any, all, or none of the
    attributes ... other attributes ... may also appear in a given
    debugging information entry.

DWARF Debugging Information Format Version 5,
Appendix A: Attributes by Tag Value (Informative)
Page 251, Line 3.

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

18 months ago[BPF] Triple::isBPF() utility method
Eduard Zingerman [Sat, 7 Jan 2023 06:35:25 +0000 (22:35 -0800)]
[BPF] Triple::isBPF() utility method

Adds a utility method llvm::Triple::isBPF() aggregating Triple::bpfel
and Triple::bpfeb architectures. Similar to other predicates in this class.

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

18 months ago[LoongArch] Move illegal ImmArg tests to llvm/test/Verifier
gonglingqin [Sat, 7 Jan 2023 02:38:41 +0000 (10:38 +0800)]
[LoongArch] Move illegal ImmArg tests to llvm/test/Verifier

This patch also fixes incorrect function declarations in test cases
and remove -disable-verify from the test case.

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

18 months ago[libc++][test][NFC] revert indentation damage
Casey Carter [Fri, 6 Jan 2023 21:29:43 +0000 (13:29 -0800)]
[libc++][test][NFC] revert indentation damage

... from d65e66abb3bd4535e1900c0c7901c0f6254acf34.

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

18 months ago[Clang] Fix warning on unused varaible
Joseph Huber [Sat, 7 Jan 2023 03:14:05 +0000 (21:14 -0600)]
[Clang] Fix warning on unused varaible

Summary:
Don't check the flag this way, it leads to unused variables. Fix.

18 months ago[AVR] Fix some ambiguous cases in AsmParser
Ben Shi [Fri, 30 Dec 2022 12:07:16 +0000 (20:07 +0800)]
[AVR] Fix some ambiguous cases in AsmParser

Some specific operands in specific instructions should be treated
as variables/symbols/labels, other than registers.

This patch fixes those ambiguous cases, such as "lds r25, r24",
which means loading the value inside symbol 'r24' into register 'r25'.

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

Reviewed by: aykevl

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

18 months agoAMDGPU: Use getTypeAllocSize
Matt Arsenault [Fri, 6 Jan 2023 23:34:04 +0000 (18:34 -0500)]
AMDGPU: Use getTypeAllocSize

18 months agoAMDGPU: Use more accurate IR type for block handle
Matt Arsenault [Fri, 23 Dec 2022 20:52:41 +0000 (15:52 -0500)]
AMDGPU: Use more accurate IR type for block handle

The device library uses this as a struct with a pointer sized integer
and 2 ints.

18 months agoAMDGPU: Add more opencl printf tests
Matt Arsenault [Fri, 6 Jan 2023 22:34:02 +0000 (17:34 -0500)]
AMDGPU: Add more opencl printf tests

18 months agoAMDGPU: Invert handling of enqueued block detection
Matt Arsenault [Fri, 23 Dec 2022 21:18:43 +0000 (16:18 -0500)]
AMDGPU: Invert handling of enqueued block detection

Invert the sense of the attribute and let the attributor figure this
out like everything else. If needed we can have the not-OpenCL
languages set amdgpu-no-default-queue and amdgpu-no-completion-action
up front so they never have to pay the cost.

There are also so many of these now, the offset use API should
probably consider all of them at once. Maybe they should merge into
one attribute with used fields. Having separate functions for each
field in AMDGPUBaseInfo is also not the greatest API (might as well
fix this when the patch to get the object version from the module
lands).

18 months agoAMDGPU: Fix enqueue block lowering for opaque pointers
Matt Arsenault [Fri, 23 Dec 2022 20:39:55 +0000 (15:39 -0500)]
AMDGPU: Fix enqueue block lowering for opaque pointers

This was looking for a specific constant cast of the function, when
the type doesn't matter. Doesn't bother trying to handle typed
pointers, it will just assert.

Things probably don't work completely correctly if the block kernel
address is captured somewhere else, but that wouldn't work before
either. The uses should really be loads out of the handle, and the
handle initializer should contain the kernel address.

18 months agoAMDGPU: Convert enqueue-kernel.ll to opaque pointers
Matt Arsenault [Fri, 23 Dec 2022 22:14:06 +0000 (17:14 -0500)]
AMDGPU: Convert enqueue-kernel.ll to opaque pointers

This demonstrates the pass is broken with them, the follow up change
will fix it.

18 months ago[Clang] Fix mispelled option passed to the linker wrapper
Joseph Huber [Sat, 7 Jan 2023 02:02:23 +0000 (20:02 -0600)]
[Clang] Fix mispelled option passed to the linker wrapper

Summary:
This option was spelled wrong and caused errors if used in combination
with the linking job. Fix it.

18 months ago[OpenMP] Introduce '-f[no-]openmp-target-jit' flag to control JIT for offloading
Joseph Huber [Fri, 6 Jan 2023 21:22:12 +0000 (15:22 -0600)]
[OpenMP] Introduce '-f[no-]openmp-target-jit' flag to control JIT for offloading

JIT support for OpenMP offloading was introduced in D139287. This patch
adds a simple flag that enables this mode. It simply requires enabling
`-foffload-lto` mode and `--embed-bitcode` in the linker wrapper. This
option implies LTO if it is not enabled.

Reviewed By: jdoerfert

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

18 months ago[SLP][NFC]Fix compile build by declaring ArrayRef, NFC.
Alexey Bataev [Sat, 7 Jan 2023 01:01:48 +0000 (17:01 -0800)]
[SLP][NFC]Fix compile build by declaring ArrayRef, NFC.

Fix compiler build reported in https://lab.llvm.org/buildbot#builders/243/builds/218

18 months ago[SLP][NFC]Remove unused variables, NFC.
Alexey Bataev [Sat, 7 Jan 2023 00:55:54 +0000 (16:55 -0800)]
[SLP][NFC]Remove unused variables, NFC.

18 months ago[SLP]Fix incorrect reordering of clustered scalars.
Alexey Bataev [Fri, 6 Jan 2023 19:07:22 +0000 (11:07 -0800)]
[SLP]Fix incorrect reordering of clustered scalars.

The new mask represents the order, not the mask itself. At first, need
to treat as the order, convert to mask and only after that reorder
gathered scalars to build correct clustered order.

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

18 months ago[libc] Add a separate install target for the libc static archives.
Siva Chandra Reddy [Fri, 6 Jan 2023 08:21:49 +0000 (08:21 +0000)]
[libc] Add a separate install target for the libc static archives.

Also, skip installing startup objects for baremetal targets for now.

Reviewed By: michaelrj

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

18 months ago[mlir][spirv] Add folder for LogicalNotEqual
Thomas Raoux [Fri, 6 Jan 2023 23:03:12 +0000 (23:03 +0000)]
[mlir][spirv] Add folder for LogicalNotEqual

Add a folder for LogicalNotEqual when rhs is false. This pattern shows
up after lowering to SPIRV.

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