platform/upstream/llvm.git
13 months ago[profi][NFC] Get rid of afdo_detail::TypeMap
Amir Ayupov [Tue, 6 Jun 2023 20:41:43 +0000 (13:41 -0700)]
[profi][NFC] Get rid of afdo_detail::TypeMap

Parametrize SampleProfileInference and SampleProfileLoaderBaseImpl by function
type (Function/MachineFunction) instead of block type
(BasicBlock/MachineBasicBlock). Move out specializations to appropriate
locations.

This change makes it possible to use GraphTraits instead of a custom TypeMap and
make SampleProfileInference not dependent on LLVM types, paving the way for
generalizing SampleProfileInference interfaces to BOLT IR types
(BinaryFunction/BinaryBasicBlock) in stale profile matching (D144500).

Reviewed By: hoy

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

13 months ago[bazel] Port 44268271f61e46636619623d52013c3be3e272c0
Benjamin Kramer [Tue, 6 Jun 2023 20:47:30 +0000 (22:47 +0200)]
[bazel] Port 44268271f61e46636619623d52013c3be3e272c0

13 months ago[bazel] Port 1117b9a284aa6e4b1f3cbde31825605bd07a2384
Benjamin Kramer [Tue, 6 Jun 2023 20:47:17 +0000 (22:47 +0200)]
[bazel] Port 1117b9a284aa6e4b1f3cbde31825605bd07a2384

13 months ago[libc++] Disable int128_t and ship filesystem on MSVC by default
Louis Dionne [Thu, 29 Sep 2022 21:44:39 +0000 (17:44 -0400)]
[libc++] Disable int128_t and ship filesystem on MSVC by default

Back in 2020 [1], we went very close to enabling Filesystem on MSVC
by disabling int128_t, but decided to wait because MSVC support
for int128_t was supposed to come shortly after. Since it's not
there yet, I propose turning off int128_t support by default on MSVC.
This will make <filesystem> available by default on MSVC, and most
importantly will open the possibility for changing
LIBCXX_ENABLE_FILESYSTEM to mean "the system doesn't have support
for a filesystem" instead of simply "don't build the std::filesystem
library", which is what I'm really after with this change.

In a way, this is a resurection of D91139.

[1]: https://reviews.llvm.org/D91139#2429595

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

13 months ago[RISCV] Use PACK in RISCVMatInt for constants that have the same lower and upper...
Craig Topper [Tue, 6 Jun 2023 20:30:33 +0000 (13:30 -0700)]
[RISCV] Use PACK in RISCVMatInt for constants that have the same lower and upper 32 bits.

This requires Zbkb.

Reviewed By: reames

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

13 months ago[libc++] Use Lit annotations for all .gen.py tests
Louis Dionne [Wed, 31 May 2023 18:02:23 +0000 (11:02 -0700)]
[libc++] Use Lit annotations for all .gen.py tests

Instead of guarding header tests using #ifdefs inside the tests,
use Lit markup to mark all the tests as unsupported. This is simpler
but also provides better feedback about which tests are being run
when running the test suite.

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

13 months ago[RISCV] Add early out to generateInstSeq when the initial sequence is 1 or 2 instruct...
Craig Topper [Tue, 6 Jun 2023 20:23:17 +0000 (13:23 -0700)]
[RISCV] Add early out to generateInstSeq when the initial sequence is 1 or 2 instructions.

This avoids checking the size of the sequence repeatedly for each
special case. Especially on RV32 where none of the special cases
apply.

Reviewed By: reames

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

13 months ago[NFC][lld][COFF] Rename findFile* methods
Arthur Eubanks [Tue, 6 Jun 2023 18:11:52 +0000 (11:11 -0700)]
[NFC][lld][COFF] Rename findFile* methods

findFile returns null if we've already seen the file, make that clearer.

Reviewed By: mstorsjo

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

13 months ago[InstCombine] Remove deadcode in `(icmp SignTest(shl/shr X))`; NFC
Noah Goldstein [Tue, 6 Jun 2023 19:07:30 +0000 (14:07 -0500)]
[InstCombine] Remove deadcode in `(icmp SignTest(shl/shr X))`; NFC

This is dead as of: D145341

Reviewed By: nikic

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

13 months ago[KnownBits] Factor out and improve the lowbit computation for {u,s}div
Noah Goldstein [Tue, 6 Jun 2023 19:06:39 +0000 (14:06 -0500)]
[KnownBits] Factor out and improve the lowbit computation for {u,s}div

There are some new cases if the division is `exact`:
    1: If `TZ(LHS) == TZ(RHS)` then the result is always Odd
    2: If `TZ(LHS) > TZ(RHS)` then the `TZ(LHS)-TZ(RHS)` bits of the
       result are zero.
Proofs: https://alive2.llvm.org/ce/z/3rAZqF

As well, return zero in known poison cases to be consistent rather
than just working about the bits we are changing.

Reviewed By: nikic

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

13 months ago[KnownBits] Return `0` for poison {s,u}div inputs
Noah Goldstein [Thu, 25 May 2023 17:10:31 +0000 (12:10 -0500)]
[KnownBits] Return `0` for poison {s,u}div inputs

It seems consistent to always return zero for known poison rather than
varying the value. We do the same elsewhere.

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

13 months ago[KnownBits] Cleanup some misspelling / logic in {u,s}div
Noah Goldstein [Sun, 28 May 2023 16:20:44 +0000 (11:20 -0500)]
[KnownBits] Cleanup some misspelling / logic in {u,s}div

Chronically misspelled 'denominator' as 'denuminator' and a few other
cases.

On the logic side, no longer require `RHS` to be strictly positive in
`sdiv`. This in turn means we need to handle a possible zero `denom`
in the APInt division.

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

13 months ago[AArch64][SVE] Add one-use-check to EitherVSelectOrPassthruPatFrags
David Green [Tue, 6 Jun 2023 20:10:32 +0000 (21:10 +0100)]
[AArch64][SVE] Add one-use-check to EitherVSelectOrPassthruPatFrags

As pointed out in D149968 vselect predicate patterns could do with a one-use
check to prevent multiple operations being created. This updates the
EitherVSelectOrPassthruPatFrags pattern frags used in creating predicates
min/max.

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

13 months ago[ELF] Add PT_RISCV_ATTRIBUTES program header
Fangrui Song [Tue, 6 Jun 2023 20:06:21 +0000 (13:06 -0700)]
[ELF] Add PT_RISCV_ATTRIBUTES program header

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

Unlike AArch32, RISC-V defines PT_RISCV_ATTRIBUTES to include the
SHT_RISCV_ATTRIBUTES section. There is no real-world use case yet.

We place PT_RISCV_ATTRIBUTES after PT_GNU_STACK, similar to PT_ARM_EXIDX. GNU ld
places PT_RISCV_ATTRIBUTES earlier, but the placement should not matter.

Link: https://github.com/riscv-non-isa/riscv-elf-psabi-doc/pull/71
Reviewed By: asb

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

13 months ago[lldb] Remove __FUNCTION__ from log messages in lldbHost (NFC)
Jonas Devlieghere [Tue, 6 Jun 2023 19:25:41 +0000 (12:25 -0700)]
[lldb] Remove __FUNCTION__ from log messages in lldbHost (NFC)

LLDB's logging infrastructure supports prepending log messages with the
name of the file and function that generates the log (see help log
enable). Therefore it's unnecessary to include the current __FUNCTION__
in the log message itself. This patch removes __FUNCTION__ from log
messages in the Host library.

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

13 months ago[AMDGPU] Replace std::pair with VOPDCombineInfo in VOPD combine. NFC.
Stanislav Mekhanoshin [Tue, 6 Jun 2023 19:20:39 +0000 (12:20 -0700)]
[AMDGPU] Replace std::pair with VOPDCombineInfo in VOPD combine. NFC.

The future patch will carry additional info there.

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

13 months ago[GVN] Improve PRE on load instructions
Guozhi Wei [Tue, 6 Jun 2023 19:45:34 +0000 (19:45 +0000)]
[GVN] Improve PRE on load instructions

This patch implements the enhancement proposed by
https://github.com/llvm/llvm-project/issues/59312.

Suppose we have following code

   v0 = load %addr
   br %LoadBB

LoadBB:
   v1 = load %addr
   ...

PredBB:
   ...
   br %cond, label %LoadBB, label %SuccBB

SuccBB:
   v2 = load %addr
   ...

Instruction v1 in LoadBB is partially redundant, edge (PredBB, LoadBB) is a
critical edge. SuccBB is another successor of PredBB, it contains another load
v2 which is identical to v1. Current GVN splits the critical edge
(PredBB, LoadBB) and inserts a new load in it. A better method is move the load
of v2 into PredBB, then v1 can be changed to a PHI instruction.

If there are two or more similar predecessors, like the test case in the bug
entry, current GVN simply gives up because otherwise it needs to split multiple
critical edges. But we can move all loads in successor blocks into predecessors.

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

13 months ago[InstrProf] Fix warning about converting double to float
Ellis Hoag [Tue, 6 Jun 2023 19:29:03 +0000 (12:29 -0700)]
[InstrProf] Fix warning about converting double to float

In https://reviews.llvm.org/D147812 I introduced the class
`BalancedPartitioning` and it seemed to trigger a warning in flang

```
C:\Users\buildbot-worker\minipc-ryzen-win\flang-x86_64-windows\llvm-project\llvm\include\llvm/Support/BalancedPartitioning.h(89): warning C4305: 'initializing': truncation from 'double' to 'float'
```

For good measure, I converted all double literals to floats. This should
be a NFC.

13 months ago[libc][Docs] Add support for the printing functions
Joseph Huber [Tue, 6 Jun 2023 19:32:58 +0000 (14:32 -0500)]
[libc][Docs] Add support for the printing functions

13 months ago[mlir][sparse][gpu] add AoS COO support to cuSPARSE
Aart Bik [Tue, 6 Jun 2023 17:56:58 +0000 (10:56 -0700)]
[mlir][sparse][gpu] add AoS COO support to cuSPARSE

Even though this feature was deprecated in release 11.2,
any library before this version still supports the feature,
which is why we are making it available under a macro.

Reviewed By: K-Wu

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

13 months ago[libc] Replace use of `asm` in the GPU code with LIBC_INLINE_ASM
Joseph Huber [Tue, 6 Jun 2023 18:22:15 +0000 (13:22 -0500)]
[libc] Replace use of `asm` in the GPU code with LIBC_INLINE_ASM

We should more consistently use inline assembly using the LIBC wrappers.
It's much safer to mark all of these volatile as well.

Reviewed By: lntue

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

13 months ago[lldb] Support file and function names in LLDB_LOGF macro
Jonas Devlieghere [Tue, 6 Jun 2023 17:37:12 +0000 (10:37 -0700)]
[lldb] Support file and function names in LLDB_LOGF macro

LLDB's logging machinery supports prepending log messages with the name
of the file and function that generates the log. However, currently this
functionality is limited to the LLDB_LOG macro. I meant to do this as a
follow up to D65128 but never got around to it.

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

13 months ago[RISCV] Don't persist invalid feature state on .option arch error
Jessica Clarke [Tue, 6 Jun 2023 19:14:20 +0000 (20:14 +0100)]
[RISCV] Don't persist invalid feature state on .option arch error

Otherwise subsequent .option arch, +foo directives (but not -, since
those have their own separate validation) fail the parseFeatureBits
check, leading to cascading errors.

Reviewed By: luismarques, MaskRay

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

13 months ago[BOLT] stale profile matching [part 1 out of 2]
spupyrev [Thu, 16 Feb 2023 18:52:04 +0000 (10:52 -0800)]
[BOLT] stale profile matching [part 1 out of 2]

BOLT often has to deal with profiles collected on binaries built from several
revisions behind release. As a result, a certain percentage of functions is
considered stale and not optimized. This diff adds an ability to match profile
to functions that are not 100% binary identical, which increases the
optimization coverage and boosts the performance of applications.

The algorithm consists of two phases: matching and inference:
- At the matching phase, we try to "guess" as many block and jump counts from
  the stale profile as possible. To this end, the content of each basic block
  is hashed and stored in the (yaml) profile. When BOLT optimizes a binary,
  it computes block hashes and identifies the corresponding entries in the
  stale profile. It yields a partial profile for every CFG in the binary.
- At the inference phase, we employ a network flow-based algorithm (profi) to
  reconstruct "realistic" block and jump counts from the partial profile
  generated at the first stage. In practice, we don't always produce proper
  profile data but the majority (e.g., >90%) of CFGs get the correct counts.

This is a first part of the change; the next stacked diff extends the block hashing
and provides perf evaluation numbers.

Reviewed By: maksfb

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

13 months ago[clang][TypePrinter] Add option to skip over elaborated types
Eric Li [Tue, 2 May 2023 17:59:46 +0000 (13:59 -0400)]
[clang][TypePrinter] Add option to skip over elaborated types

Elaborated types are sugar that represent how the type was spelled in
the original source. When printing a type outside of that original
context, the qualifiers as saved in the elaborated type will be
incorrect. Additionally, their existence also inhibits the use of
`PrintingCallbacks::isScopeVisible` as a customization point.

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

13 months ago[Driver][test] Remove unneeded some REQUIRES:
Fangrui Song [Tue, 6 Jun 2023 19:01:22 +0000 (12:01 -0700)]
[Driver][test] Remove unneeded some REQUIRES:

to decrease the number of unsupported tests on other platforms.

13 months ago[InstrProf] Use BalancedPartitioning to order temporal profiling trace data
Ellis Hoag [Tue, 6 Jun 2023 18:43:36 +0000 (11:43 -0700)]
[InstrProf] Use BalancedPartitioning to order temporal profiling trace data

In [0] we described an algorithm called //BalancedPartitioning// (bp) to consume function traces [1] and compute a function order that reduces the number of page faults during startup.

This patch adds the `order` command to the `llvm-profdata` tool which uses bp to output a function order that can be passed to the linker via `--symbol-ordering-file=`.

Special thanks to Sergey Pupyrev and Julian Mestre for designing this balanced partitioning algorithm.

[0] https://discourse.llvm.org/t/rfc-temporal-profiling-extension-for-irpgo/68068
[1] https://reviews.llvm.org/D147287

Reviewed By: spupyrev

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

13 months ago[RISCV] Add special case to selectImm for constants that can be created with (ADD...
Craig Topper [Tue, 6 Jun 2023 18:59:12 +0000 (11:59 -0700)]
[RISCV] Add special case to selectImm for constants that can be created with (ADD (SLLI C, 32), C).

Where C is a simm32.

This costs an extra temporary register, but avoids a constant pool.

Reviewed By: reames

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

13 months ago[flang] Set "undefined" NEXTREC=n variable to 0 rather than random garbage
Peter Klausler [Tue, 6 Jun 2023 18:37:52 +0000 (11:37 -0700)]
[flang] Set "undefined" NEXTREC=n variable to 0 rather than random garbage

12.10.2.17 defines that a INQUIRE statement's NEXTREC=n output value
for a unit that is not connected for direct access becomes undefined,
but the current I/O runtime can fail in a confusing manner by trying
to return uninitialized stack garbage.

Reported on Slack by Tarun Prabhu as an intermittent failure in
the gfortran regression test inquire_pre.f90.

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

13 months ago[AArch64] Regenerate tests with missing immediate hex asm comments
Simon Pilgrim [Tue, 6 Jun 2023 18:41:29 +0000 (19:41 +0100)]
[AArch64] Regenerate tests with missing immediate hex asm comments

Reduces diff in a future commit

13 months ago[mlir][Toy] Remove unnecessary transpose from chapter 1 example
Andrey Portnoy [Tue, 6 Jun 2023 18:19:53 +0000 (11:19 -0700)]
[mlir][Toy] Remove unnecessary transpose from chapter 1 example

The call to 'multiply_transpose' in the initialization of the variable 'f' was
intended to have a shape mismatch. However the variable 'a' has shape <2, 3> and
the variable 'c' has shape <3, 2>, so the arguments 'transpose(a)' and 'c' have
in fact compatible shapes (<3, 2> both), the opposite of what is wanted here.
This commit removes the transpose so that arguments 'a' and 'c' have
incompatible shapes <2, 3> and <3, 2>, respectively.

Reviewed By: mehdi_amini

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

13 months ago[mlir] Convert quantized dialect bytecode to generated.
Jacques Pienaar [Tue, 6 Jun 2023 18:16:07 +0000 (11:16 -0700)]
[mlir] Convert quantized dialect bytecode to generated.

Serves as rather self-contained documentation for using the generator
from https://reviews.llvm.org/D144820.

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

13 months agoRe-apply "Revert "[DebugInfo] Add error checking around data extraction in DWARFAbbre...
Alex Langford [Tue, 6 Jun 2023 18:00:42 +0000 (11:00 -0700)]
Re-apply "Revert "[DebugInfo] Add error checking around data extraction in DWARFAbbreviationDeclaration::extract""

This reverts commit 11d61c079d4b4927efea42a38a27d4586887b764 to re-apply
6836a47b7e6b57927664ec6ec750ae37bb951129 with modifications.

Specifically, the errors in DWARFAbbreviationDeclaration::extract needed
to be moved as they are returned to ensure the right Error constructor
is selected.

13 months ago[lld][COFF] Don't handle an input file multiple times when retrying
Arthur Eubanks [Mon, 5 Jun 2023 21:32:55 +0000 (14:32 -0700)]
[lld][COFF] Don't handle an input file multiple times when retrying

Follow up to D151815.

Or else we properly handle the first instance of a file, then error out on the second instance of the same file.

Reviewed By: rnk

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

13 months agoRevert "[DebugInfo] Add error checking around data extraction in DWARFAbbreviationDec...
Alex Langford [Tue, 6 Jun 2023 17:58:51 +0000 (10:58 -0700)]
Revert "[DebugInfo] Add error checking around data extraction in DWARFAbbreviationDeclaration::extract"

This reverts commit 6836a47b7e6b57927664ec6ec750ae37bb951129.
This breaks some bots, need to investigate.

13 months ago[lldb/Commands] Fix disk completion from root directory
Med Ismail Bennani [Mon, 5 Jun 2023 20:19:44 +0000 (13:19 -0700)]
[lldb/Commands] Fix disk completion from root directory

This patch should fix path completion starting from the root directory.

To do so, this patch adds a special case when setting the search
directory when the completion buffer points to the root directory.

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

Signed-off-by: Med Ismail Bennani <ismail@bennani.ma>
13 months ago[lldb/crashlog] Expand crash report file path before parsing
Med Ismail Bennani [Fri, 2 Jun 2023 17:39:41 +0000 (10:39 -0700)]
[lldb/crashlog] Expand crash report file path before parsing

This patch should fix a crash in the opening a crash report that was
passed with a relative path.

This patch expands the crash report path before parsing it and raises a
`FileNotFoundError` exception if the file doesn't exist.

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

Signed-off-by: Med Ismail Bennani <ismail@bennani.ma>
13 months ago[lldb/Commands] Add support to auto-completion for user commands
Med Ismail Bennani [Tue, 6 Jun 2023 17:24:48 +0000 (10:24 -0700)]
[lldb/Commands] Add support to auto-completion for user commands

This patch should allow the user to set specific auto-completion type
for their custom commands.

To do so, we had to hoist the `CompletionType` enum so the user can
access it and add a new completion type flag to the CommandScriptAdd
Command Object.

So now, the user can specify which completion type will be used with
their custom command, when they register it.

This also makes the `crashlog` custom commands use disk-file completion
type, to browse through the user file system and load the report.

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

Signed-off-by: Med Ismail Bennani <ismail@bennani.ma>
13 months ago[lldb/Target] Add ability to set a label to targets
Med Ismail Bennani [Fri, 2 Jun 2023 08:34:27 +0000 (01:34 -0700)]
[lldb/Target] Add ability to set a label to targets

This patch add the ability for the user to set a label for a target.

This can be very useful when debugging targets with the same executables
in the same session.

Labels can be set either at the target creation in the command
interpreter or at any time using the SBAPI.

Target labels show up in the `target list` output, following the target
index, and they also allow the user to switch targets using them.

rdar://105016191

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

Signed-off-by: Med Ismail Bennani <ismail@bennani.ma>
13 months ago[libc] Remove operator T from cpp::expected.
Tue Ly [Tue, 6 Jun 2023 14:10:49 +0000 (10:10 -0400)]
[libc] Remove operator T from cpp::expected.

The libc's equivalent of std::expected has a non-standard and
non-explicit operator T - https://github.com/llvm/llvm-project/issues/62738

Reviewed By: sivachandra

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

13 months ago[DebugInfo] Add error checking around data extraction in DWARFAbbreviationDeclaration...
Alex Langford [Tue, 30 May 2023 21:35:05 +0000 (14:35 -0700)]
[DebugInfo] Add error checking around data extraction in DWARFAbbreviationDeclaration::extract

In trying to hoist errors further up this callstack, I discovered that
if the data in the debug_abbrev section is invalid entirely, the code
that parses the debug_abbrev section may do strange or unpredictable
things. The underlying issue is that DataExtractor will return a value
of 0 when it encounters an error in extracting a LEB128 value. It's thus
difficult to determine if there was an error just by looking at the
return value. This patch aims to bail at the first sight of an error in
the debug_abbrev parsing code.

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

13 months ago[Clang][Sema] Fix access of friend class in local class
Elizabeth Andrews [Mon, 5 Jun 2023 20:12:13 +0000 (13:12 -0700)]
[Clang][Sema] Fix access of friend class in local class

Clang currently emits an error when a friend of a local class
tries to access it's private data members. This patch fixes the bug.

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

13 months agoRevert rG98061013e01207444cfd3980 - [X86] X86FixupVectorConstantsPass - attempt to...
Simon Pilgrim [Tue, 6 Jun 2023 17:24:59 +0000 (18:24 +0100)]
Revert rG98061013e01207444cfd3980 - [X86] X86FixupVectorConstantsPass - attempt to replace full width fp vector constant loads with broadcasts on AVX+ targets

Reverting while we address an existing issue exposed by this (Issue #63108)

13 months ago[llvm] Small typo in the instruction comments of WithColor header
Dirk MG Seynhaeve [Tue, 6 Jun 2023 17:30:11 +0000 (10:30 -0700)]
[llvm] Small typo in the instruction comments of WithColor header

Fix a small but misleading/confusing typo in the comments (which shows
up in the doxygen documentation):

Black -> BLACK (the enumeration is case-sensitive).

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

13 months ago[flang][hlfir] Implemented addressing an element of a polymorphic array.
Slava Zakharin [Tue, 6 Jun 2023 16:40:00 +0000 (09:40 -0700)]
[flang][hlfir] Implemented addressing an element of a polymorphic array.

The changes convert hlfir.designate to fir.array_coor/fir.embox
to represent a subscripted element of a polymorphic array.
The type information is conveyed via the fir.embox's source_box.

Reviewed By: tblah

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

13 months ago[RISCV] Remove uses of RISCVII::hasMergeOp from RISCVDAGToDAGISel.cpp
Craig Topper [Tue, 6 Jun 2023 16:44:19 +0000 (09:44 -0700)]
[RISCV] Remove uses of RISCVII::hasMergeOp from RISCVDAGToDAGISel.cpp

This property was intended to indicate when RISCVAsmPrinter should
drop the tied source operand when converting to MCInst. Using it
in RISCVDAGToDAGISel distorts what it intended for.

This should remove some changes from D151850.

Reviewed By: frasercrmck, asb

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

13 months agoreland: [Demangle] make llvm::demangle take std::string_view rather than const std...
Nick Desaulniers [Mon, 5 Jun 2023 21:59:46 +0000 (14:59 -0700)]
reland: [Demangle] make llvm::demangle take std::string_view rather than const std::string&

As suggested by @erichkeane in
https://reviews.llvm.org/D141451#inline-1429549

There's potential for a lot more cleanups around these APIs. This is
just a start.

Callers need to be more careful about sub-expressions producing strings
that don't outlast the expression using `llvm::demangle`. Add a
release note.

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

13 months agoRevert rGab4b924832ce26c21b88d7f82fcf4992ea8906bb - [X86] X86FixupVectorConstantsPass...
Simon Pilgrim [Tue, 6 Jun 2023 17:07:33 +0000 (18:07 +0100)]
Revert rGab4b924832ce26c21b88d7f82fcf4992ea8906bb - [X86] X86FixupVectorConstantsPass - attempt to replace full width integer vector constant loads with broadcasts on AVX2+ targets

Reverting while we address an existing issue exposed by this (Issue #63108)

13 months ago[mlir][sparse] refine absent branch feeding into custom op
Aart Bik [Tue, 6 Jun 2023 03:53:49 +0000 (20:53 -0700)]
[mlir][sparse] refine absent branch feeding into custom op

Document better that unary/binary may only feed to the output
or the input of a custom reduction (not even a regular reduction
since it may have "no value"!). Also fixes a bug when present
branch is empty and feeds into custom reduction.

Reviewed By: Peiming

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

13 months ago[lld-macho]Ensure canonicalization happen even for "skipped" referent sections.
Vy Nguyen [Wed, 31 May 2023 18:22:07 +0000 (14:22 -0400)]
[lld-macho]Ensure canonicalization happen even for "skipped" referent sections.

Details:

See bug report:  https://github.com/llvm/llvm-project/issues/63039

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

13 months agoSilence a "not all control paths return a value" warning; NFC
Aaron Ballman [Tue, 6 Jun 2023 16:48:22 +0000 (12:48 -0400)]
Silence a "not all control paths return a value" warning; NFC

13 months ago[ADT] Fix DenseMapInfo<variant>::isEqual to delegate to DenseMapInfo, not ==
Sam McCall [Fri, 26 May 2023 12:59:54 +0000 (14:59 +0200)]
[ADT] Fix DenseMapInfo<variant>::isEqual to delegate to DenseMapInfo, not ==

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

13 months ago[ProfileData] Remove unused declaration getMemOPSizeRangeFromOption
Kazu Hirata [Tue, 6 Jun 2023 16:35:56 +0000 (09:35 -0700)]
[ProfileData] Remove unused declaration getMemOPSizeRangeFromOption

The corresponding function definition was removed by:

  commit 1ebee7adf8966ad9d2885c172a18104c94667061
  Author: Hiroshi Yamauchi <yamauchi@google.com>
  Date:   Fri Oct 2 13:00:40 2020 -0700

13 months ago[Flang][OpenMP] Fix unused variable warning for task depend
Prabhdeep Singh Soni [Tue, 6 Jun 2023 15:11:53 +0000 (11:11 -0400)]
[Flang][OpenMP] Fix unused variable warning for task depend

This patch fixes an unused variable warning that was caused by the task
depend patch.

Original Commit: 3373c8405c5e144567c2b25c28b54b4ac63b09b6

Original Differential Revision: https://reviews.llvm.org/D146766

13 months ago[CUDA][HIP] Externalize device var in anonymous namespace
Yaxun (Sam) Liu [Mon, 5 Jun 2023 14:19:38 +0000 (10:19 -0400)]
[CUDA][HIP] Externalize device var in anonymous namespace

Device variables in an anonymous namespace may be
referenced by host code, therefore they need to
be externalized in a similar way as a static device
variables or kernels in an anonymous namespace.

Fixes: https://github.com/ROCm-Developer-Tools/HIP/issues/3246

Reviewed by: Artem Belevich

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

13 months ago[Clang] Reject increment of bool value in unevaluated contexts after C++17
yronglin [Tue, 6 Jun 2023 15:57:57 +0000 (23:57 +0800)]
[Clang] Reject increment of bool value in unevaluated contexts after C++17

Clang now incorrectly allowed increment of bool in unevaluated contexts, we set `diagnostic::ext_increment_bool` to be SFINAEFailure to fix this issue.

```
template<class T> auto f(T t) -> decltype(++t);
auto f(...) -> void;
void g() {
  f(true);  // Clang wrongly makes this a hard error
}
```

```
template <class T>
concept can_increment = requires(T t) { ++t; };

template <class T> void f() {
  static_assert(requires(T t) { ++t; }); // Incorrectly allowed
}

int main() {
  f<bool>();

  static_assert(!can_increment<bool>); // Incorrectly fails

  bool b = false;
  ++b; // Correctly rejected
}
```
Fix issue: https://github.com/llvm/llvm-project/issues/47517

Reviewed By: erichkeane

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

13 months ago[gn build] Port 7a3b528e1b54
LLVM GN Syncbot [Tue, 6 Jun 2023 15:51:54 +0000 (15:51 +0000)]
[gn build] Port 7a3b528e1b54

13 months ago[gn build] Port 51131edf83e4
LLVM GN Syncbot [Tue, 6 Jun 2023 15:51:54 +0000 (15:51 +0000)]
[gn build] Port 51131edf83e4

13 months ago[libc++][PSTL] Implement std::replace{,_if,_copy,_copy_if}
Nikolas Klauser [Tue, 6 Jun 2023 15:43:22 +0000 (08:43 -0700)]
[libc++][PSTL] Implement std::replace{,_if,_copy,_copy_if}

Reviewed By: #libc, ldionne

Spies: ldionne, libcxx-commits

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

13 months ago[libc++][PSTL] Implement std::count{,_if}
Nikolas Klauser [Tue, 6 Jun 2023 15:42:40 +0000 (08:42 -0700)]
[libc++][PSTL] Implement std::count{,_if}

Reviewed By: ldionne, #libc

Spies: libcxx-commits

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

13 months ago[Triple] Add triple for UEFI
prabhukr [Tue, 6 Jun 2023 15:13:57 +0000 (08:13 -0700)]
[Triple] Add triple for UEFI

Target triple to support "x86_64-unknown-uefi"

Reviewed By: phosek

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

13 months ago[clang][test] Use a physical copy of FS
Mikhail Goncharov [Tue, 6 Jun 2023 15:35:37 +0000 (17:35 +0200)]
[clang][test] Use a physical copy of FS

(missing piece from https://reviews.llvm.org/D152265)
476e7c49ecb762df1d68273696b06c36feb0fd96

13 months ago[compiler-rt] Do not redefine builtins on Windows
Marco Elver [Tue, 6 Jun 2023 15:31:19 +0000 (17:31 +0200)]
[compiler-rt] Do not redefine builtins on Windows

Build bots are still failing, and getting it to work on Windows should
be done in a separate patch, should this even be technically feasible.

 | lld-link: error:
 | stage2_win_x64/obj/compiler-rt/lib/asan/asan_shared_library.asan_activation.obj:
 | memcpy should not refer to special section 0

13 months ago[SVE ACLE] Extend existing aarch64_sve_mul combines to also act on aarch64_sve_mul_u.
Jolanta Jensen [Fri, 2 Jun 2023 15:30:12 +0000 (15:30 +0000)]
[SVE ACLE] Extend existing aarch64_sve_mul combines to also act on aarch64_sve_mul_u.

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

13 months ago[LLDB][PDB] Fix age field in UUID in PDB file.
Zequan Wu [Mon, 5 Jun 2023 19:07:06 +0000 (15:07 -0400)]
[LLDB][PDB] Fix age field in UUID in PDB file.

There are two age fields in a PDB file. One from the PDB Stream and another one
from the DBI stream.

According to https://randomascii.wordpress.com/2011/11/11/source-indexing-is-underused-awesomeness/#comment-34328,
The age in DBI stream is used to against the binary's age. `Pdbstr.exe` is used
to only increment the age from PDB stream without changing the DBI age. I
also verified this by manually changing the DBI age of a PDB file and let
`windbg.exe` to load it. It shows the following logs before and after changing:

Before:
```
SYMSRV:  BYINDEX: 0xA
         c:\symbols*https://msdl.microsoft.com/download/symbols
         nlaapi.pdb
         D72AA69CD5ABE5D28C74FADB17DE3F8C1
SYMSRV:  PATH: c:\symbols\nlaapi.pdb\D72AA69CD5ABE5D28C74FADB17DE3F8C1\nlaapi.pdb
SYMSRV:  RESULT: 0x00000000
*** WARNING: Unable to verify checksum for NLAapi.dll
DBGHELP: NLAapi - public symbols
        c:\symbols\nlaapi.pdb\D72AA69CD5ABE5D28C74FADB17DE3F8C1\nlaapi.pdb
...
```

After:
```
SYMSRV:  BYINDEX: 0xA
         c:\symbols*https://msdl.microsoft.com/download/symbols
         nlaapi.pdb
         D72AA69CD5ABE5D28C74FADB17DE3F8C1
SYMSRV:  PATH: c:\symbols\nlaapi.pdb\D72AA69CD5ABE5D28C74FADB17DE3F8C1\nlaapi.pdb
SYMSRV:  RESULT: 0x00000000
DBGHELP: c:\symbols\nlaapi.pdb\D72AA69CD5ABE5D28C74FADB17DE3F8C1\nlaapi.pdb - mismatched pdb
SYMSRV:  BYINDEX: 0xB
         c:\symbols*https://chromium-browser-symsrv.commondatastorage.googleapis.com
         nlaapi.pdb
         D72AA69CD5ABE5D28C74FADB17DE3F8C1
SYMSRV:  PATH: c:\symbols\nlaapi.pdb\D72AA69CD5ABE5D28C74FADB17DE3F8C1\nlaapi.pdb
SYMSRV:  RESULT: 0x00000000
DBGHELP: c:\symbols\nlaapi.pdb\D72AA69CD5ABE5D28C74FADB17DE3F8C1\nlaapi.pdb - mismatched pdb
SYMSRV:  BYINDEX: 0xC
         c:\src\symbols*https://msdl.microsoft.com/download/symbols
         nlaapi.pdb
         D72AA69CD5ABE5D28C74FADB17DE3F8C1
SYMSRV:  PATH: c:\src\symbols\nlaapi.pdb\D72AA69CD5ABE5D28C74FADB17DE3F8C1\nlaapi.pdb
SYMSRV:  RESULT: 0x00000000
*** WARNING: Unable to verify checksum for NLAapi.dll
DBGHELP: NLAapi - public symbols
        c:\src\symbols\nlaapi.pdb\D72AA69CD5ABE5D28C74FADB17DE3F8C1\nlaapi.pdb
```

So, `windbg.exe` uses the DBI age to detect mismatched pdb, but it still loads
the pdb even if the age mismatched. Probably lldb should do the same and give
some warnings.

This fixes a bug that lldb can't load some windows system pdbs due to mismatched
uuid.

Reviewed By: rnk

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

13 months ago[libc++] Fixes transitive includes.
Mark de Wever [Tue, 6 Jun 2023 15:16:23 +0000 (17:16 +0200)]
[libc++] Fixes transitive includes.

13 months ago[lldb] fix dangling reference in `ClangHost.cpp`
paperchalice [Tue, 6 Jun 2023 15:10:10 +0000 (08:10 -0700)]
[lldb] fix dangling reference in `ClangHost.cpp`

The lifetime of clang_resource_path should be same as
kResourceDirSuffixes, because kResourceDirSuffixes doesn't own
clang_resource_path.

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

13 months ago[Clang] Convert some tests to opaque pointers (NFC)
Nikita Popov [Tue, 6 Jun 2023 13:24:09 +0000 (15:24 +0200)]
[Clang] Convert some tests to opaque pointers (NFC)

13 months ago[mlir][Vector] Fix a propagation bug with broadcast
Quentin Colombet [Mon, 5 Jun 2023 13:06:07 +0000 (15:06 +0200)]
[mlir][Vector] Fix a propagation bug with broadcast

In the vector distribute patterns, we used to move
`vector.broadcast`s out of `vector.warp_execute_on_lane0`s
irrespectively of how they were defined.

This could create broadcast operations with invalid semantic.
E.g.,
```
%r = warop ...[32] ... -> vector<1x2xf32> {
  %val = broadcast %in : vector<64xf32> to vetor<1x64xf32>
  vector.yield %val : vector<1x64xf32>
}
```
=>
```
%r = warop ...[32] ... -> vector<64xf32> {
  vector.yield %in : vector<64xf32>
}
// Broadcasting to a narrower type!
broadcast %r : vector<64xf32> to vector<1x2xf32>
```

The root issue is we are trying to broadcast something that is not the same
for each thread, so there is actually nothing to propagate here.

The fix checks that the broadcast we want to create actually makes sense.

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

13 months ago[analyzer][NFC] Pass the diagnostic message to the TrackConstraintBRVisitor
Endre Fulop [Thu, 29 Sep 2022 07:31:40 +0000 (09:31 +0200)]
[analyzer][NFC] Pass the diagnostic message to the TrackConstraintBRVisitor

The `TrackConstraintBRVisitor` should accept a message for the note
instead of creating one. It would let us inject domain-specific
knowledge in a non-intrusive way, leading to a more generic visitor.

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

13 months agoRevert "Reland [MergeICmps] Adapt to non-eq comparisons, bugfix"
Mikhail Goncharov [Tue, 6 Jun 2023 14:26:07 +0000 (16:26 +0200)]
Revert "Reland [MergeICmps] Adapt to non-eq comparisons, bugfix"

Causes miscompile. See https://reviews.llvm.org/D141188.

This reverts commit fb2c98a929aa65603e9d984307a41325e577e9d3

13 months ago[Flang][OpenMP] Support depend clause for task construct, excluding array sections
Prabhdeep Singh Soni [Thu, 23 Mar 2023 15:26:50 +0000 (11:26 -0400)]
[Flang][OpenMP] Support depend clause for task construct, excluding array sections

This patch adds support for the OpenMP 4.0 depend clause for the task
construct, excluding array sections, to Flang lowering from parse-tree
to MLIR.

Reviewed By: kiranchandramohan

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

13 months ago[compiler-rt] Avoid memintrinsic calls inserted by the compiler
Marco Elver [Tue, 30 May 2023 09:59:22 +0000 (11:59 +0200)]
[compiler-rt] Avoid memintrinsic calls inserted by the compiler

D135716 introduced -ftrivial-auto-var-init=pattern where supported.
Unfortunately this introduces unwanted memset() for large stack arrays,
as shown by the new tests added for asan and msan (tsan already had this
test).

In general, the problem of compiler-inserted memintrinsic calls
(memset/memcpy/memmove) is not new to compiler-rt, and has been a
problem before.

To avoid introducing unwanted memintrinsic calls, we redefine
memintrinsics as __sanitizer_internal_mem* at the assembly level for
most source files automatically (where sanitizer_common_internal_defs.h
is included).

In few cases, redefining a symbol in this way causes issues for
interceptors, namely the memintrinsic interceptor themselves. For such
source files we have to selectively disable the redefinition.

Other alternatives have been considered, but simply do not work well in
the context of compiler-rt:

1. Linker --wrap:  this does not work because --wrap only
   applies to the final link, and would not apply when building
   sanitizer static libraries.

2. Changing references to memset() via objcopy:  this may work,
   but due to the complexities of the build system, introducing
   such a post-processing step for the right object files (in
   particular object files defining memset cannot be touched)
   seems infeasible.

The chosen solution works well (as shown by the tests). Other libraries
have chosen the same solution where nothing else works (see e.g. glibc's
"symbol-hacks.h").

v4:
- Add interface attribute to __sanitizer_internal_mem* declarations as
  well, as otherwise some compilers (MSVC) will complain.
- Add SANITIZER_COMMON_NO_REDEFINE_BUILTINS to source files using
  C++STL, since this could lead to ODR violations (see added comment).

v3:
- Don't use ALIAS() to alias internal_mem*() functions to
  __sanitizer_internal_mem*() functions, but just define them as
  ALWAYS_INLINE functions instead. This will work on darwin and windows.

v2:
- Fix ubsan_minimal build where compiler decides to insert
  memset/memcpy: ubsan_minimal has work without RTSanitizerCommonLibc,
  therefore do not redefine the builtins.
- Fix definition of internal_mem* functions with compilers that want the
  aliased function to already be defined before.
- Fix definition of __sanitizer_internal_mem* functions with compilers
  more pedantic about attribute placement around extern "C".

Reviewed By: vitalybuka, dvyukov

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

13 months ago[RISCV] Rework .option arch target streamer interface
Jessica Clarke [Tue, 6 Jun 2023 13:54:43 +0000 (14:54 +0100)]
[RISCV] Rework .option arch target streamer interface

The current interface requires some rather ugly tracking of state due to
splitting up the calls for each argument. Instead, pack them all into a
single call by passing an ArrayRef. Also clean up the dodgy whitespace
emitted for the directive whilst here; there was a stray space between
the tab and .option, and there was a tab rather than a space after the
first comma for some strange reason.

Reviewed By: craig.topper

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

13 months ago[RISCV] Make .option arch parser less mind-bending
Jessica Clarke [Tue, 6 Jun 2023 13:54:40 +0000 (14:54 +0100)]
[RISCV] Make .option arch parser less mind-bending

Currently the early-return flow in the infinite loop makes it hard to
find the non-error termination points amongst the sea of errors. Rewrite
it with a more conventional control flow that has a clear loop guard (in
place of one of the early returns) and a break (in place of the other),
and with greater code reuse.

This has a small effect on the errors given for malformed input, as seen
in the affected test, and is probably more helpful as a result. Note
that we also bail early now if parseComma fails, as is standard.

Reviewed By: craig.topper

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

13 months ago[clang][test] Use a physical copy of FS
Kadir Cetinkaya [Tue, 6 Jun 2023 13:40:33 +0000 (15:40 +0200)]
[clang][test] Use a physical copy of FS

Make use of a physical copy, rather than real FS in unittests that
change working-directory to get rid of the side effect of changing cwd for the
whole process. It's triggering crashes depending on the test order.

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

13 months ago[GlobalISel][X86] Move G_SEXT_INREG legalization handling to beside the regular integ...
Simon Pilgrim [Tue, 6 Jun 2023 13:38:19 +0000 (14:38 +0100)]
[GlobalISel][X86] Move G_SEXT_INREG legalization handling to beside the regular integer extension legalizations

13 months ago[llvm-objcopy][ELF] Preserve sh_link to .symtab when applicable
Andrew Ng [Wed, 17 May 2023 18:20:59 +0000 (19:20 +0100)]
[llvm-objcopy][ELF] Preserve sh_link to .symtab when applicable

This change to llvm-objcopy preserves the ELF section sh_link to .symtab
so long as none of the symbol table indices have been changed.
Previously, any invocation of llvm-objcopy including a "no-op" would
clear any section sh_link to .symtab.

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

13 months ago[InstCombine] Add stats for number of iterations (NFC)
Nikita Popov [Tue, 6 Jun 2023 12:55:56 +0000 (14:55 +0200)]
[InstCombine] Add stats for number of iterations (NFC)

13 months ago[GlobalIsel][X86] Remove an unused variable
Jay Foad [Tue, 6 Jun 2023 13:10:07 +0000 (14:10 +0100)]
[GlobalIsel][X86] Remove an unused variable

13 months ago[AMDGPU] Remove extract_subvector patterns
Jay Foad [Thu, 4 May 2023 14:34:28 +0000 (15:34 +0100)]
[AMDGPU] Remove extract_subvector patterns

Removing them seems to slightly increase code quality as well as
simplifying both the tablegen and C++ parts of the code.

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

13 months ago[Clang] Allow omitting `typename` in befriended constructors parameters
Corentin Jabot [Tue, 6 Jun 2023 07:21:16 +0000 (09:21 +0200)]
[Clang] Allow omitting `typename` in befriended constructors parameters

Fixes #63119

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

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

13 months ago[AArch64][NFC] Normalise name of indexed forms of SQRDMLAH/SQRDMLSH
Ricardo Jesus [Fri, 2 Jun 2023 09:02:06 +0000 (09:02 +0000)]
[AArch64][NFC] Normalise name of indexed forms of SQRDMLAH/SQRDMLSH

Most indexed vector instructions are suffixed with v<N><TY>_indexed.

SQRDMLAH/SQRDMLSH are the exception, being suffixed with <TY>_indexed
instead, which can complicate matching them slightly.

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

13 months ago[NFC][COFF] Refine access specifiers for WinCOFFObjectWriter
Haohai Wen [Tue, 6 Jun 2023 13:01:19 +0000 (21:01 +0800)]
[NFC][COFF] Refine access specifiers for WinCOFFObjectWriter

Set public specifiers only for constructor and inherited methods from
MCObjectWriter and leave others as private. Also change the order of
MCObjectWriter methods' definition according to it's declaration order.

Reviewed By: skan

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

13 months agoSwitch from full to unreleased for a Clang 17 fix; NFC
Aaron Ballman [Tue, 6 Jun 2023 12:57:57 +0000 (08:57 -0400)]
Switch from full to unreleased for a Clang 17 fix; NFC

13 months ago[GlobalIsel][X86] Update legalization of G_FADD/G_FSUB/G_FMUL/G_FDIV + G_FC
Simon Pilgrim [Tue, 6 Jun 2023 12:47:22 +0000 (13:47 +0100)]
[GlobalIsel][X86] Update legalization of G_FADD/G_FSUB/G_FMUL/G_FDIV + G_FC

Replace the legacy legalizer versions

13 months ago[Clang] Limit FunctionTypeExtraBitfields::NumExceptionType to 16 bits.
Sander de Smalen [Mon, 5 Jun 2023 14:34:25 +0000 (14:34 +0000)]
[Clang] Limit FunctionTypeExtraBitfields::NumExceptionType to 16 bits.

In https://reviews.llvm.org/D127762#4102578 @erichkeane suggested to
limit size of this field to 16bits, such that the field that encodes the
SME attributes for a function fall within the alignment of the struct for
32bit platforms.

Standard implimits defines the minimum handlers per try block to 256,
which suggests that 16bits should be more than sufficient for most
programs. Erich also pointed out that exception specs are being
deprecated and are rarely used, so hopefully this change is safe to make.

Reviewed By: erichkeane

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

13 months agoRevert "[AMDGPU] New PAL metadata updates to ps_extra_lds_size and float_mode"
David Stuttard [Tue, 6 Jun 2023 12:02:28 +0000 (13:02 +0100)]
Revert "[AMDGPU] New PAL metadata updates to ps_extra_lds_size and float_mode"

This reverts commit 6d5a653dda628250b373ec89e0e11cdd27603c24.

13 months ago[AMDGPU] New PAL metadata updates to ps_extra_lds_size and float_mode
David Stuttard [Thu, 11 May 2023 13:09:38 +0000 (14:09 +0100)]
[AMDGPU] New PAL metadata updates to ps_extra_lds_size and float_mode

New metadata format contains full calculation of field contents for
ps_extra_lds_size (vs old format where the value in RSRC register is used by PAL
to calculate the value required).

Also stop updating float_mode and rely on front end settings for this field.

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

13 months ago[GlobalISel][X86] Add G_IMPLICIT_DEF / G_CONSTANT legalization handling
Simon Pilgrim [Tue, 6 Jun 2023 10:32:32 +0000 (11:32 +0100)]
[GlobalISel][X86] Add G_IMPLICIT_DEF / G_CONSTANT legalization handling

13 months agoFix unused variable warning. NFC.
Simon Pilgrim [Tue, 6 Jun 2023 09:54:32 +0000 (10:54 +0100)]
Fix unused variable warning. NFC.

13 months ago[ARM][Driver] Warn if -mhard-float is incompatible
Michael Platings [Mon, 22 May 2023 13:48:00 +0000 (14:48 +0100)]
[ARM][Driver] Warn if -mhard-float is incompatible

Mixing -mfloat-abi=hard with a CPU that doesn't have floating point
registers is an error in GCC:
  cc1: error: '-mfloat-abi=hard': selected processor lacks an FPU

Since there is code in the wild (including in clang tests) that relies
on Clang's current behaviour, emit a warning instead of an error.

Unlike the GCC error, the new warning refers to floating point
registers instead of an FPU. This is because -mfloat-abi=hard and
-march=armv8.1-m.main+mve+nofp are compatible - in that case floating
point registers are required, but an FPU is not required.

My initial thought was to use the floating point ABI calculated by
arm::getARMFloatABI() but in invalid cases which error for other
reasons the ABI is miscalculated and the warning would cause confusion.
Therefore only warn if the user specifies the float ABI explicitly.

Fixes part of https://github.com/llvm/llvm-project/issues/55755

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

13 months ago[GlobalIsel][X86] Legalize G_ANYEXT, G_SEXT, and G_ZEXT
Thorsten Schütt [Tue, 6 Jun 2023 10:19:36 +0000 (12:19 +0200)]
[GlobalIsel][X86] Legalize G_ANYEXT, G_SEXT, and G_ZEXT

Reviewed By: RKSimon

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

13 months agoRevert "[ARM][Driver] Warn if -mhard-float is incompatible"
Michael Platings [Tue, 6 Jun 2023 10:05:05 +0000 (11:05 +0100)]
Revert "[ARM][Driver] Warn if -mhard-float is incompatible"

An associated -W flag is needed.

This reverts commit 1d511e1864f142d08a491a89940d70c516a6c6a2.

13 months ago[mlir][transform] Use separate ops instead of PatternRegistry
Matthias Springer [Tue, 6 Jun 2023 09:19:59 +0000 (11:19 +0200)]
[mlir][transform] Use separate ops instead of PatternRegistry

* Remove `transform::PatternRegistry`.
* Add a new op for each currently registered pattern set.
* Change names of vector dialect pattern selector ops, so that they are consistent with the remaining code base.
* Remove redundant `transform.vector.extract_address_computations` op.

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

13 months ago[clang][analyzer] Add report of NULL stream to StreamChecker.
Balázs Kéri [Tue, 6 Jun 2023 09:12:20 +0000 (11:12 +0200)]
[clang][analyzer] Add report of NULL stream to StreamChecker.

The report of NULL stream was removed in commit 570bf97.
The old reason is not actual any more because the checker dependencies are changed.
It is not good to eliminate a failure state (where the stream is NULL) without
generating a bug report because other checkers are not able to find it later.
The checker did this with the NULL stream pointer, and because this checker
runs now before other checkers that can detect NULL pointers, the null pointer
bug was not found at all.

Reviewed By: steakhal

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

13 months ago[RISCV] Handle "o" inline asm memory constraint
wangpc [Tue, 6 Jun 2023 09:49:58 +0000 (17:49 +0800)]
[RISCV] Handle "o" inline asm memory constraint

This is the same as D100412.

We just found the same crash when we tried to compile some packages
like mariadb, php, etc.

For constraint "o", it means "A memory operand is allowed, but
only if the address is offsettable". So I think it can be handled
just like constraint "m" for RISCV target.

And we print verbose information when unsupported constraints occur.

Reviewed By: asb

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

13 months agoRevert "[VPlan] Mark recurrence recipes as not having side-effects."
Florian Hahn [Tue, 6 Jun 2023 09:35:25 +0000 (11:35 +0200)]
Revert "[VPlan] Mark recurrence recipes as not having side-effects."

This reverts commit 02369b75fdd7b5fc5d9b47f1b60587c225918511.

At the moment, live-outs used *only* for the resume values in the scalar
loop are not modeled in VPlan yet. This means first-order recurrence
recipes could be removed, when a scalar epilogue is required and the
only use of a FOR is outside the loop.

Keep treating recurrence recipes as having side-effects for now, to
avoid them being removed.

Fixes #62954.

13 months ago[mlir][transform] generate transform module on-the-fly
Alex Zinenko [Mon, 5 Jun 2023 18:42:15 +0000 (18:42 +0000)]
[mlir][transform] generate transform module on-the-fly

Add a TransformInterpreterPassBase capability to generate the (shared)
module containing the transform script during the pass initialization.
This is helpful to programmatically generate the script as opposed to
parsing it from the textual module.

Reviewed By: springerm

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

13 months ago[LV] Use force-vector-width for X86 recurrence test.
Florian Hahn [Tue, 6 Jun 2023 09:26:55 +0000 (11:26 +0200)]
[LV] Use force-vector-width for X86 recurrence test.

This makes sure that all tests that can be vectorized in the file are
vectorized.