platform/upstream/llvm.git
20 months agoFix missing C++ mode comment
Matt Arsenault [Sat, 29 Oct 2022 00:17:00 +0000 (17:17 -0700)]
Fix missing C++ mode comment

20 months agollvm-reduce: Report file opening errors
Matt Arsenault [Mon, 24 Oct 2022 16:08:54 +0000 (09:08 -0700)]
llvm-reduce: Report file opening errors

This was also trying to write the bitcode to the failed file
on failure, which asserts. Also, consistently use
ToolOutputFile, instead of one path manually removing
the temp file.

20 months agoAtomicExpand: Don't create unused instructions for some atomicrmw
Matt Arsenault [Thu, 29 Sep 2022 20:21:49 +0000 (16:21 -0400)]
AtomicExpand: Don't create unused instructions for some atomicrmw

This wasn't used by every atomicrmw expansion.

20 months agoHexagon: Register null TargetStreamer
Matt Arsenault [Sat, 29 Oct 2022 19:34:03 +0000 (12:34 -0700)]
Hexagon: Register null TargetStreamer

Unlike just about every target, I don't
see an obvious null dereference this fixes.

20 months agoHexagon: Add missing C++ mode comment
Matt Arsenault [Sat, 29 Oct 2022 19:34:42 +0000 (12:34 -0700)]
Hexagon: Add missing C++ mode comment

20 months agoNVPTX: Register null target streamer
Matt Arsenault [Sat, 29 Oct 2022 19:38:55 +0000 (12:38 -0700)]
NVPTX: Register null target streamer

20 months agoX86: Implement null target streamer
Matt Arsenault [Fri, 28 Oct 2022 20:42:37 +0000 (13:42 -0700)]
X86: Implement null target streamer

There should no need for null checks in the AsmPrinter

20 months agoAArch64: Register null MCTargetStreamer
Matt Arsenault [Fri, 28 Oct 2022 17:32:15 +0000 (10:32 -0700)]
AArch64: Register null MCTargetStreamer

Fixes crashes with clang -emit-codegen-only

20 months agoRevert "[InstCombine] fold mul with decremented "shl -1" factor"
Florian Mayer [Tue, 1 Nov 2022 00:39:05 +0000 (17:39 -0700)]
Revert "[InstCombine] fold mul with decremented "shl -1" factor"

This reverts commit bc886e9b587b9d009f49b12eaaa9ebc1c71905a1.

Broke MSAN bootstrap buildbots with Assertion `RangeAfterCopy % ExtraScale == 0 && "Extra instruction requires immediate to be aligned"' failed.

20 months ago[NFC] use has_value instead of hasValue
Florian Mayer [Mon, 31 Oct 2022 23:34:17 +0000 (16:34 -0700)]
[NFC] use has_value instead of hasValue

20 months ago[gn build] Port 627465cf9fa7
LLVM GN Syncbot [Mon, 31 Oct 2022 23:37:46 +0000 (23:37 +0000)]
[gn build] Port 627465cf9fa7

20 months ago[libc++][PMR] Deprecate the implementation in std::experimental
Nikolas Klauser [Wed, 19 Oct 2022 09:06:12 +0000 (11:06 +0200)]
[libc++][PMR] Deprecate the implementation in std::experimental

This commit deprecates <experimental/memory_resource> since we now ship the non-experimental
version of it. Per the libc++ policy [1], we are deprecating the experimental feature in
upcoming LLVM 16 and will remove it entirely in LLVM 18.

[1]: https://libcxx.llvm.org/DesignDocs/ExperimentalFeatures.html#id4

Reviewed By: ldionne, #libc

Spies: EricWF, libcxx-commits

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

20 months ago[libc++][PMR] Move the pmr::memory_resource destructor into the dylib
Nikolas Klauser [Tue, 18 Oct 2022 19:40:49 +0000 (21:40 +0200)]
[libc++][PMR] Move the pmr::memory_resource destructor into the dylib

This avoids emitting the VTable of `pmr::memory_resource` in every TU.

Reviewed By: ldionne

Spies: EricWF, nemanjai, libcxx-commits

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

20 months ago[libc++][PMR] Mark completed papers and issues as such
Nikolas Klauser [Tue, 18 Oct 2022 19:33:32 +0000 (21:33 +0200)]
[libc++][PMR] Mark completed papers and issues as such

Reviewed By: ldionne, #libc

Spies: krytarowski, Quuxplusone, tschuett, libcxx-commits

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

20 months ago[libc++][PMR] Add attributes
Nikolas Klauser [Tue, 18 Oct 2022 18:40:13 +0000 (20:40 +0200)]
[libc++][PMR] Add attributes

This allows the compiler to do more optimizations.

Reviewed By: ldionne, #libc

Spies: libcxx-commits, krytarowski

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

20 months ago[libc++] Move preferred_name declarations into the forward declaring headers and...
Nikolas Klauser [Wed, 12 Oct 2022 23:03:58 +0000 (01:03 +0200)]
[libc++] Move preferred_name declarations into the forward declaring headers and add pmr preferred names

We currently define the preferred names in multiple places. `basic_string` and `basic_string_view` also have a lot of aliases, which makes the declarations quite long. So let's only add the preferred names in forward-declaring headers to make the implementation more readable and have all the preferred names in one place.

Reviewed By: ldionne

Spies: EricWF, krytarowski, libcxx-commits

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

20 months ago[SPIRV] support the enqueue_kernel builtin function
Ilia Diachkov [Sat, 29 Oct 2022 00:07:02 +0000 (03:07 +0300)]
[SPIRV] support the enqueue_kernel builtin function

The patch adds support of the enqueue_kernel builtin function.
It is implemented in the same way as in the SPIRV translator.
2 LIT tests are added to show the improvement.

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

20 months ago[Bazel] Add llvm:Support to Bazel deps of SPIRVCommonConversion
Anlun Xu [Mon, 31 Oct 2022 22:26:58 +0000 (15:26 -0700)]
[Bazel] Add llvm:Support to Bazel deps of SPIRVCommonConversion

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

20 months ago[JumpThreading] Put a limit on the PHI nodes when duplicating a BB.
Usman Nadeem [Mon, 31 Oct 2022 22:08:11 +0000 (15:08 -0700)]
[JumpThreading] Put a limit on the PHI nodes when duplicating a BB.

Do not duplicate a BB if it has a lot of PHI nodes.
If a threadable chain is too long then the number of duplicated PHI nodes
can add up, leading to a substantial increase in compile time when rewriting
the SSA.

Fixes https://github.com/llvm/llvm-project/issues/58203
Differential Revision: https://reviews.llvm.org/D136716

The threshold of 76 in this patch is reasonably high and reduces the compile
time of cldwat2m_macro.f90 in SPEC2017/cam4 from 80+min to <2min.

Change-Id: I153c89a8e0d89b206a5193dc1b908c67e320717e

20 months ago[RISCV] Fix crash a vector add has a 4x sext and zext operand.
Craig Topper [Mon, 31 Oct 2022 19:37:51 +0000 (12:37 -0700)]
[RISCV] Fix crash a vector add has a 4x sext and zext operand.

We can narrow one of the extends and keep the other original by
using a vwaddu.wv or vwadd.wv.

We were previously forgetting to keep the original operand and
instead took the source of its extend. This resulted in a type
mismatch that later failed with an impossible physical register copy.

To fix this I've refactored some code to maintain information about
whether the source needs to be extended at all for longer so we could
use it in materialize.

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

20 months ago[libc++] Add test for checking progress on P0533R9
Evgeny Shulgin [Sat, 22 Oct 2022 20:17:56 +0000 (20:17 +0000)]
[libc++] Add test for checking progress on P0533R9

This test checks progress on P0533R9 (https://wg21.link/p0533r9).
Whenever a desired function becomes constexpr, the programmer won't forget
to switch `ASSERT_NOT_CONSTEXPR_CXX23` to `ASSERT_CONSTEXPR_CXX23` and
eventually to change the paper's implementation status. The test also works
as a reference list of unimplemented functions.

Reviewed By: philnik, #libc

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

20 months ago[gn build] Port 84ea6b6f78df
LLVM GN Syncbot [Mon, 31 Oct 2022 21:45:27 +0000 (21:45 +0000)]
[gn build] Port 84ea6b6f78df

20 months ago[gn build] Port 0d01300aacf6
LLVM GN Syncbot [Mon, 31 Oct 2022 21:45:26 +0000 (21:45 +0000)]
[gn build] Port 0d01300aacf6

20 months ago[lldb] Emit diagnostic events in the diagnostic dump
Jonas Devlieghere [Mon, 31 Oct 2022 17:16:32 +0000 (10:16 -0700)]
[lldb] Emit diagnostic events in the diagnostic dump

Connect the diagnostic events with the diagnostic infrastructure.

 - Emit existing diagnostic events (warnings and errors) to the
   diagnostic log.
 - Introduce a new diagnostic event (info) that's used exclusively for
   diagnostic logging and does not get broadcast.

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

20 months ago[lldb] Add a "diagnostics dump" command
Jonas Devlieghere [Mon, 31 Oct 2022 17:11:12 +0000 (10:11 -0700)]
[lldb] Add a "diagnostics dump" command

Add a "diagnostics dump" command to, as the name implies, dump the
diagnostics to disk. The goal of this command is to let the user
generate the diagnostics in case of an issue that doesn't cause the
debugger to crash.

This command is also critical for testing, where we don't want to cause
a crash to emit the diagnostics.

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

20 months ago[lldb] Add diagnostics
Jonas Devlieghere [Fri, 28 Oct 2022 21:26:11 +0000 (14:26 -0700)]
[lldb] Add diagnostics

Around this time last year, I said on the mailing list [1] that I wanted
to to transform the reproducers into something that resembles a
sysdiagnose on Apple platforms: a collection of files containing a
variety of information to help diagnose bugs or troubleshoot issues.

This patch adds that framework. Based on lessons learned from the
reproducers, I've intentionally tried to keep it small and simple.
Different parts of LLDB can register callbacks (this is necessary for
layering purposes) that will get called when the diagnostics should be
generated.

[1] https://lists.llvm.org/pipermail/lldb-dev/2021-September/017045.html

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

20 months ago[InstCombine] adjust branch on logical-and fold
Sanjay Patel [Mon, 31 Oct 2022 21:32:34 +0000 (17:32 -0400)]
[InstCombine] adjust branch on logical-and fold

The transform was just added with:
115d2f69a515cd756fa51
...but as noted in post-commit feedback, it was
confusingly coded. Now, we create the final
expected canonicalized form directly and put
an extra use check on the match, so we should
not ever end up with more instructions.

20 months ago[InstCombine] add test for branch on logical-and; NFC
Sanjay Patel [Mon, 31 Oct 2022 21:29:03 +0000 (17:29 -0400)]
[InstCombine] add test for branch on logical-and; NFC

More coverage for the change 115d2f69a515cd756fa51 as
suggested in post-commit feedback.

Given that the transform is canonicalized with another
'not' op, we should adjust the use checks and create
that form directly.

20 months ago[Hexagon] Add LLVM codegen testcases for V6_[add|sub]carryo intrinsics
Krzysztof Parzyszek [Mon, 31 Oct 2022 21:06:39 +0000 (14:06 -0700)]
[Hexagon] Add LLVM codegen testcases for V6_[add|sub]carryo intrinsics

20 months ago[libc][math] Add place-holder implementation for pow function.
Tue Ly [Mon, 31 Oct 2022 20:04:41 +0000 (16:04 -0400)]
[libc][math] Add place-holder implementation for pow function.

Add place-holder implementation for pow function to unblock libc demo
examples.

Reviewed By: michaelrj

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

20 months ago[libc][math] Add place-holder implementation for asin to unblock demo examples.
Tue Ly [Mon, 31 Oct 2022 19:42:00 +0000 (15:42 -0400)]
[libc][math] Add place-holder implementation for asin to unblock demo examples.

Add a place-holder implementation for asin to unblock libc demo
examples.

Reviewed By: michaelrj

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

20 months ago[flang] Rework line of code to dodge clang 16 warning
Peter Klausler [Mon, 31 Oct 2022 21:17:02 +0000 (14:17 -0700)]
[flang] Rework line of code to dodge clang 16 warning

Recode a non-short-circuiting conjunction of two Boolean function calls
into separate statements to avoid a warning from clang 16.

20 months ago[mlir][arith][spirv] Hard fail in `-convert-arith-to-spirv`
Jakub Kuderski [Mon, 31 Oct 2022 21:00:45 +0000 (17:00 -0400)]
[mlir][arith][spirv] Hard fail in `-convert-arith-to-spirv`

Turn legalization failures into hard failures to make sure that we do
not miss conversion pattern application failures.

Add a message on type conversion failure.

Move unsupported cases into a separate test file.

Reviewed By: antiagainst

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

20 months ago[wasm-ld] Allow importing/exporting the output module's memory with arbitrary names
Dan Gohman [Tue, 4 Oct 2022 19:50:10 +0000 (12:50 -0700)]
[wasm-ld] Allow importing/exporting the output module's memory with arbitrary names

This adds an `--export-memory` option to wasm-ld which allows passing
a name to give to the exported memory, and extends `--import-memory` to
allow passing a <module>,<name> pair specifying where the memory should
be imported from.

This is based on https://reviews.llvm.org/D131376, with the main
difference being that it only supports exporting memory by one name.

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

20 months ago[InstCombine] Precommit test for D136582; NFC
chenglin.bi [Mon, 31 Oct 2022 20:45:59 +0000 (04:45 +0800)]
[InstCombine] Precommit test for D136582; NFC

20 months ago[Hexagon] Add builtins and intrinsics for V6_v[add|sub]carryo
Krzysztof Parzyszek [Mon, 31 Oct 2022 19:28:25 +0000 (12:28 -0700)]
[Hexagon] Add builtins and intrinsics for V6_v[add|sub]carryo

20 months ago[InstCombine] Allow simplify demanded transformations on scalable vectors
Philip Reames [Mon, 31 Oct 2022 20:34:28 +0000 (13:34 -0700)]
[InstCombine] Allow simplify demanded transformations on scalable vectors

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

20 months ago[lit] Fix typo in REQUIRES clause
Paul Robinson [Mon, 31 Oct 2022 20:14:56 +0000 (13:14 -0700)]
[lit] Fix typo in REQUIRES clause

20 months ago[AliasAnalysis] Introduce getModRefInfoMask() as a generalization of pointsToConstant...
Patrick Walton [Mon, 24 Oct 2022 22:31:35 +0000 (15:31 -0700)]
[AliasAnalysis] Introduce getModRefInfoMask() as a generalization of pointsToConstantMemory().

The pointsToConstantMemory() method returns true only if the memory pointed to
by the memory location is globally invariant. However, the LLVM memory model
also has the semantic notion of *locally-invariant*: memory that is known to be
invariant for the life of the SSA value representing that pointer. The most
common example of this is a pointer argument that is marked readonly noalias,
which the Rust compiler frequently emits.

It'd be desirable for LLVM to treat locally-invariant memory the same way as
globally-invariant memory when it's safe to do so. This patch implements that,
by introducing the concept of a *ModRefInfo mask*. A ModRefInfo mask is a bound
on the Mod/Ref behavior of an instruction that writes to a memory location,
based on the knowledge that the memory is globally-constant memory (in which
case the mask is NoModRef) or locally-constant memory (in which case the mask
is Ref). ModRefInfo values for an instruction can be combined with the
ModRefInfo mask by simply using the & operator. Where appropriate, this patch
has modified uses of pointsToConstantMemory() to instead examine the mask.

The most notable optimization change I noticed with this patch is that now
redundant loads from readonly noalias pointers can be eliminated across calls,
even when the pointer is captured. Internally, before this patch,
AliasAnalysis was assigning Ref to reads from constant memory; now AA can
assign NoModRef, which is a tighter bound.

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

20 months ago[lit] Remove undefined keyword from a Driver test
Paul Robinson [Mon, 31 Oct 2022 19:58:53 +0000 (12:58 -0700)]
[lit] Remove undefined keyword from a Driver test

`clang-driver` hasn't been a valid keyword for a long time.
The test fails when the keyword is removed, so added XFAIL: *
to reflect the true status of the test (XFAIL not UNSUPPORTED)
and filed issue #58711 to get it fixed.

20 months ago[InstCombine] canonicalize branch with logical-and-not condition
Sanjay Patel [Mon, 31 Oct 2022 19:49:03 +0000 (15:49 -0400)]
[InstCombine] canonicalize branch with logical-and-not condition

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

In the motivating case from issue #58313,
this allows forming a duplicate 'not' op
which then gets CSE'd and simplifyCFG'd
and combined into the expected 'xor'.

20 months ago[InstCombine] add tests for branch on logical and/or; NFC
Sanjay Patel [Mon, 31 Oct 2022 18:00:05 +0000 (14:00 -0400)]
[InstCombine] add tests for branch on logical and/or; NFC

20 months ago[test] Add coverage for sign bits and known non-zero for scalable vectors
Philip Reames [Mon, 31 Oct 2022 18:54:37 +0000 (11:54 -0700)]
[test] Add coverage for sign bits and known non-zero for scalable vectors

20 months ago[flang] Fix pointer definition semantic checking via refactoring
Peter Klausler [Mon, 17 Oct 2022 19:51:00 +0000 (12:51 -0700)]
[flang] Fix pointer definition semantic checking via refactoring

The infrastructure in semantics that is used to check that the
left-hand sides of normal assignment statements are really definable
variables was not being used to check whether the LHSs of pointer assignments
are modifiable, and so most cases of unmodifiable pointers are left
undiagnosed.  Rework the semantics checking for pointer assignments,
NULLIFY statements, pointer dummy arguments, &c. so that cases of
unmodifiable pointers are properly caught.  This has been done
by extracting all the various definability checking code that has
been implemented for different contexts in Fortran into one new
facility.

The new consolidated definability checking code returns messages
meant to be attached as "because: " explanations to context-dependent
errors like "left-hand side of assignment is not definable".
These new error message texts and their attached explanations
affect many existing tests, which have been updated.  The testing
infrastructure was extended by another patch to properly compare
warnings and explanatory messages, which had been ignored until
recently.

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

20 months ago[mlir][scf] Add scf-to-cf lowering for `scf.index_switch`
Jeff Niu [Thu, 27 Oct 2022 20:43:41 +0000 (13:43 -0700)]
[mlir][scf] Add scf-to-cf lowering for `scf.index_switch`

This patch adds lowering from `scf.index_switch` to `cf.switch.

Reviewed By: rriddle

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

20 months ago[test] Refresh an autogened test to pickup naming change
Philip Reames [Mon, 31 Oct 2022 18:36:14 +0000 (11:36 -0700)]
[test] Refresh an autogened test to pickup naming change

20 months agoRevert "[clang] ASTImporter: Fix importing of va_list types and declarations"
Matheus Izvekov [Mon, 31 Oct 2022 18:34:23 +0000 (19:34 +0100)]
Revert "[clang] ASTImporter: Fix importing of va_list types and declarations"

This reverts commit 5f820c0f55cd9d4f4520cc92eae0a1c4afe05a54.

Apparently it breaks aarch64 buildbots.
https://lab.llvm.org/buildbot#builders/188/builds/21591

20 months ago[flang] Be more precise about CHARACTER known length discrepancies
Peter Klausler [Thu, 13 Oct 2022 22:22:55 +0000 (15:22 -0700)]
[flang] Be more precise about CHARACTER known length discrepancies

Many intrinsic functions in Fortran require that two or more of their
arguments have types that agree in the values of all of their type
parameters, while others only require the same type category and kind
type parameters but not lengths, including the important case of
CHARACTER.  The intrinsic procedure tables need to be adjusted in
some cases so that discrepancies in character lengths that are known
at compilation time can be diagnosed as errors where they should be,
as in for example MOVE_ALLOC().

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

20 months agoAddress post commit style comment from 087bb0f
Philip Reames [Mon, 31 Oct 2022 18:15:48 +0000 (11:15 -0700)]
Address post commit style comment from 087bb0f

20 months ago[lit] Remove undefined keyword from an MCJIT test
Paul Robinson [Mon, 31 Oct 2022 17:51:29 +0000 (10:51 -0700)]
[lit] Remove undefined keyword from an MCJIT test

Changed 'XFAIL: mcjit-ia32' to 'XFAIL: i686 && windows' because the
'mcjit-ia32 feature isn't defined anywhere, or used anywhere else.

I found this as part of other work to clean up lit keywords, so
I figured I would go ahead and fix it.  Verified by hacking my
lit.site.cfg.py so host_triple = target_triple = "i686-pc-windows-msvc"
and the test correctly reported XFAIL, while "i686-pc-linux" passes.

20 months agoRevert "[lit] Define keyword used by MCJIT test"
Paul Robinson [Mon, 31 Oct 2022 17:44:49 +0000 (10:44 -0700)]
Revert "[lit] Define keyword used by MCJIT test"

This reverts commit 6d859266803e2a9060c4e8770f92cc2c7bd05a3b.

Causing an XPASS on 32-bit Gentoo, as reported by mgorny.

20 months ago[utils] Remove ancient scripts using llvm-config --src-root
Fangrui Song [Mon, 31 Oct 2022 17:45:00 +0000 (10:45 -0700)]
[utils] Remove ancient scripts using llvm-config --src-root

The last effective changes for the 4 scripts were more than 10 years ago.
They do grep and lines of code counting which have mature modern replacements
(rg, tokei, etc).

Reviewed By: mgorny

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

20 months ago[X86][Driver] Remove stale FIXME. NFC
Craig Topper [Mon, 31 Oct 2022 17:32:22 +0000 (10:32 -0700)]
[X86][Driver] Remove stale FIXME. NFC

We use getHostCPUFeatures in x86::getX86TargetFeatures so I think
this FIXME is taken care of already.

Reviewed By: RKSimon

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

20 months ago[flang] Always diagnose incompatible function results when associating function pointers
Peter Klausler [Wed, 12 Oct 2022 19:59:48 +0000 (12:59 -0700)]
[flang] Always diagnose incompatible function results when associating function pointers

There are some exceptional cases where the compiler permits association of
procedure pointers or dummy arguments with slightly incompatible procedure
targets, but they should not override any incompatibilty of function
result types.

(Includes a second fix to resolve the original motivating test failure, in
which a COMPLEX intrinsic function was getting its result kind divided by
two due to an implicit C++ conversion of the kind to a "*kind" parse tree
node, and those legacy "COMPLEX*size" type designators' values are twice
the type kind value.)

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

20 months ago[OpenMP] [OMPT] [2/8] Implemented a connector for communication of OMPT callbacks...
Dhruva Chakrabarti [Fri, 17 Jun 2022 23:05:39 +0000 (16:05 -0700)]
[OpenMP] [OMPT] [2/8] Implemented a connector for communication of OMPT callbacks between libraries.

This is part of a set of patches implementing OMPT target callback support and has been split out of the originally submitted https://reviews.llvm.org/D113728. The overall design can be found in https://rice.app.box.com/s/pf3gix2hs4d4o1aatwir1set05xmjljc

The purpose of this patch is to provide a way to register tool-provided callbacks into libomp when libomptarget is loaded.

Introduced a cmake variable LIBOMPTARGET_OMPT_SUPPORT that can be used to control OMPT target support. It follows host OMPT support, controlled by LIBOMP_HAVE_OMPT_SUPPORT.

Added a connector that can be used to communicate between OMPT implementations in libomp and libomptarget or libomptarget and a plugin.

Added a global constructor in libomptarget that uses the connector to force registration of tool-provided callbacks in libomp. A pair of init and fini functions are provided to libomp as part of the connect process which will be used to register the tool-provided callbacks in libomptarget.

Depends on D123429

Patch from John Mellor-Crummey <johnmc@rice.edu>
(With contributions from Dhruva Chakrabarti <Dhruva.Chakrabarti@amd.com>)

Reviewed By: dreachem

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

20 months ago[X86] Enable EVEX GFNI instructions without avx512bw.
Craig Topper [Mon, 31 Oct 2022 17:04:36 +0000 (10:04 -0700)]
[X86] Enable EVEX GFNI instructions without avx512bw.

We only really need avx512bw for masking 256 or 512 bit GFNI
instructions due to the need for v32i1 or v64i1.

I wanted to enable 128-bit intrinsics with avx512vl, but the
__builtin_ia32_selectb_128 used in the header file requires avx512bw.
The codegen test for the same is also not using a masked instruction
because vselect with v16i1 mask and v16i8 is not legal so is expanded
before isel. To fix these issues we need a mask specific builtin and a
mask specific ISD opcode.

Fixes PR58687.

Reviewed By: pengfei

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

20 months ago[flang] Add atomic_and to list of intrinsics
Katherine Rasmussen [Fri, 28 Oct 2022 00:55:18 +0000 (17:55 -0700)]
[flang] Add atomic_and to list of intrinsics

Add the atomic subroutine, atomic_and, to the list of
intrinsic subroutines, add its last dummy argument to a check
for coindexed-object, and update test.

Reviewed By: PeteSteinfeld

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

20 months ago[clang] Instantiate alias templates with sugar
Matheus Izvekov [Sun, 23 Oct 2022 14:57:12 +0000 (16:57 +0200)]
[clang] Instantiate alias templates with sugar

This makes use of the changes introduced in D134604, in order to
instantiate alias templates witn a final sugared substitution.

This comes at no additional relevant cost.
Since we don't track / unique them in specializations, we wouldn't be
able to resugar them later anyway.

Signed-off-by: Matheus Izvekov <mizvekov@gmail.com>
Differential Revision: https://reviews.llvm.org/D136565

20 months ago[clang] Instantiate NTTPs and template default arguments with sugar
Matheus Izvekov [Sun, 23 Oct 2022 11:41:57 +0000 (13:41 +0200)]
[clang] Instantiate NTTPs and template default arguments with sugar

This makes use of the changes introduced in D134604, in order to
instantiate non-type template parameters and default template arguments
with a final sugared substitution.

This comes at no additional relevant cost.
Since we don't track / unique them in specializations, we wouldn't be
able to resugar them later anyway.

Signed-off-by: Matheus Izvekov <mizvekov@gmail.com>
Differential Revision: https://reviews.llvm.org/D136564

20 months ago[clang] ASTImporter: Fix importing of va_list types and declarations
Matheus Izvekov [Sat, 29 Oct 2022 18:36:31 +0000 (20:36 +0200)]
[clang] ASTImporter: Fix importing of va_list types and declarations

This fixes a problem where __va_list_tag was not correctly imported,
possibly leading to multiple definitions with different types.

This adds __va_list_tag to it's proper scope, so that the ASTImporter
can find it.

Signed-off-by: Matheus Izvekov <mizvekov@gmail.com>
Differential Revision: https://reviews.llvm.org/D136886

20 months ago[clang] Fix handling of unexpanded packs in template argument expressions.
Matheus Izvekov [Fri, 28 Oct 2022 20:22:39 +0000 (22:22 +0200)]
[clang] Fix handling of unexpanded packs in template argument expressions.

Closes #58679.

Signed-off-by: Matheus Izvekov <mizvekov@gmail.com>
Differential Revision: https://reviews.llvm.org/D136977

20 months ago[clang] Improve error recovery for pack expansion of expressions
Matheus Izvekov [Fri, 28 Oct 2022 16:23:02 +0000 (18:23 +0200)]
[clang] Improve error recovery for pack expansion of expressions

Closes #58673.

Signed-off-by: Matheus Izvekov <mizvekov@gmail.com>
Differential Revision: https://reviews.llvm.org/D136962

20 months ago[libc] Implement getopt
Alex Brachet [Mon, 31 Oct 2022 16:55:53 +0000 (16:55 +0000)]
[libc] Implement getopt

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

20 months ago[SLP]Fix a crash in the analysis of the compatible cmp operands.
Alexey Bataev [Mon, 31 Oct 2022 15:54:49 +0000 (08:54 -0700)]
[SLP]Fix a crash in the analysis of the compatible cmp operands.

We can skip the analysis of the operands opcodes, can compare directly
them in some cases.

20 months ago[AAPointerInfo] check for Unknown offsets in callee
Sameer Sahasrabuddhe [Mon, 31 Oct 2022 16:45:56 +0000 (22:15 +0530)]
[AAPointerInfo] check for Unknown offsets in callee

When translating offset info from the callee at a call site, first check if the
offset is Unknown. Any offset in the caller should be added only if the callee
offset is valid.

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

20 months ago[gn build] Port aee2a35ac4ab
LLVM GN Syncbot [Mon, 31 Oct 2022 15:53:48 +0000 (15:53 +0000)]
[gn build] Port aee2a35ac4ab

20 months ago[LoopFuse] Ensure loops are in loop simplified form under new PM
Mengxuan Cai [Mon, 31 Oct 2022 15:45:44 +0000 (11:45 -0400)]
[LoopFuse] Ensure loops are in loop simplified form under new PM

Loop Fusion (Function Pass) requires loops in simplified form. With
legacy-pm, loop-simplify pass is added as a dependency for loop-fusion.
But the new pass manager does not always ensure this format. This patch
tries to invoke simplifyLoop() on loops that are not in simplified form
only for new PM.

Reviewed By: aeubanks

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

20 months ago[X86] Add AVX-NE-CONVERT instructions.
Freddy Ye [Mon, 31 Oct 2022 15:01:31 +0000 (23:01 +0800)]
[X86] Add AVX-NE-CONVERT instructions.

For more details about these instructions, please refer to the latest ISE document: https://www.intel.com/content/www/us/en/develop/download/intel-architecture-instruction-set-extensions-programming-reference.html

Reviewed By: pengfei

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

20 months ago[JITLink][AArch46] Update aarch64 pointer jump stub sequence, add utilities.
Lang Hames [Mon, 31 Oct 2022 05:14:30 +0000 (22:14 -0700)]
[JITLink][AArch46] Update aarch64 pointer jump stub sequence, add utilities.

Updates the aarch64 pointer jump stub sequence to:

ADRP x16, <ptr>@page21
LDR  x16, [x16, <ptr>@pageoff12]
BR   x16

from:

LDR  x16, <ptr>@ldrimm19
BR   x16

The old sequence can only reference pointers within +/-1Mb, which may not be
enough for large object files. The new sequence can reach pointers within
+/-4Gb. (A future pre-fixup-pass could apply range-based optimizations to
turn this into an ldr-br-nop sequence.)

Also adds createPointerJumpStubBlock and createAnonymousPointerJumpStub
utilities along the same lines as their x86-64 counterparts.

The PLTTableManager is updated to use the new utility functions.

20 months ago[flang] Fix code generation for polymorphic deallocation
Valentin Clement [Mon, 31 Oct 2022 15:33:45 +0000 (16:33 +0100)]
[flang] Fix code generation for polymorphic deallocation

This patch fix issues found during call to deallocate.
fir.class can be handled the same way as fir.box in fir.store operation
code generation. In MutableBox::createNewFirBox, the fir.class is
also already a boxed entity.

Reviewed By: PeteSteinfeld

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

20 months ago[Support] Do not run test on AIX
Serge Pavlov [Mon, 31 Oct 2022 12:09:32 +0000 (19:09 +0700)]
[Support] Do not run test on AIX

A part of the unit test CommandLineTest/BadResponseFile, added in
the commit fd3d7a9f8cbb (Handle errors in expansion of response files)
fails on AIX. The test checks if an error is issued when `file` in
`@file` is a path to directory. This change excludes that check on
AIX platform.

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

20 months ago[mlir][sparse] Implement the rewrite for sparse_tensor.push_back a value n times.
bixia1 [Fri, 28 Oct 2022 17:26:54 +0000 (10:26 -0700)]
[mlir][sparse] Implement the rewrite for sparse_tensor.push_back a value n times.

Reviewed By: aartbik

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

20 months ago[OpenMP] [OMPIRBuilder] Create a new datatype to hold the unique target region info
Jan Sjodin [Fri, 28 Oct 2022 17:54:59 +0000 (13:54 -0400)]
[OpenMP] [OMPIRBuilder] Create a new datatype to hold the unique target region info

Re-apply of: 3d0e9edd8e53fb72e85084f4170513159212839a
Reverted in: 0cb65b0a585c8b3d4a8a2aefe994a8fc907934f8

A function parameter was using the wrong type 'llvm::TargetRegion' instead of
'const llvm:: TargetRegion&', which caused the error in the address sanitizer.
The correct type is now used.

This patch puts the individual target region information attributes into a
struct so that the nested mappings are not needed and passing the information
around is simplified.

Reviewed By: jdoerfert, mikerice

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

20 months ago[libomptarget] Fix a race condition in checkDeviceAndCtors
Lechen Yu [Mon, 31 Oct 2022 14:36:58 +0000 (15:36 +0100)]
[libomptarget] Fix a race condition in checkDeviceAndCtors

When multiple threads invoke checkDeviceAndCtors, both of them may read true
from the shared variable Device.HasPendingGlobals, and then invoke initLibrary
redundantly. Therefore only protecting the access to Device.HasPendingGlobals
is not sufficient to guarantee that initLibrary is invoked just once.

To fix this race condition, we move the invocation of initLibrary into the
critical section, and remove the same lock inside initLibrary.

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

20 months ago[flang][NFC] move constant lowering into its own unit
Jean Perier [Mon, 31 Oct 2022 14:32:29 +0000 (15:32 +0100)]
[flang][NFC] move constant lowering into its own unit

This patch moves intrinsic evaluate::Constant<T> lowering into its own
unit outside of ScalarExpr and genarr lowering so that it can
be used by the new lowering without any changes.

DerivedType lowering cannot be shared at that stage because it is too
correlated with the current lowering (requires structure constructor
and designator lowering).

The code had to be refactored quite a bit so that it could be carved
out, but the only "functional" change is that the length of character
arrays lowered by genarr is now `index` instead of `i64` (see test change).
One non-functional benefit of the change is that `toEvExpr` is not
needed anymore and some compile time copies of big constant arrays
that it was causing are removed (see old calls in previous genarr code),
although I am not sure any compile time speed-ups are visible here.

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

20 months ago[lldb][Test] Fix TestFrameFormatNameWithArgs.test on Linux
Michael Buch [Mon, 31 Oct 2022 14:11:18 +0000 (14:11 +0000)]
[lldb][Test] Fix TestFrameFormatNameWithArgs.test on Linux

Be less strict about the `std::` namespace string. Depending
on platform it may contain an inline namespace, e.g., `__1`.

20 months ago[mlir][doc] Update op optional-group asm format doc
rkayaith [Fri, 28 Oct 2022 21:17:54 +0000 (17:17 -0400)]
[mlir][doc] Update op optional-group asm format doc

Update docs to describe the behaviour when a default-valued attribute is
used as an optional-group's anchor after D134993.

Reviewed By: Mogball

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

20 months ago[include-cleaner] Add a data-structure to capture IWYU pragmas.
Haojian Wu [Tue, 18 Oct 2022 20:25:46 +0000 (22:25 +0200)]
[include-cleaner] Add a data-structure to capture IWYU pragmas.

PragmaIncludes captures the pragma-based header-mapping information, it is used
in the "Location => Header" step to determine the final spelling header for a
symbol (rather than the header directive).

The structure is by design to be used inside the include-cleaner library
and clangd.

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

20 months agoRevert "[llvm] [cmake] Set EXCLUDE_FROM_ALL on gtest and TestingSupport"
Michał Górny [Mon, 31 Oct 2022 14:20:48 +0000 (15:20 +0100)]
Revert "[llvm] [cmake] Set EXCLUDE_FROM_ALL on gtest and TestingSupport"

This reverts commit 64959325eb470489ca5757b9bd6eef97b402a0da.  It broke
the flang-aarch64-out-of-tree buildbot.

20 months ago[LLDB][AArch64] Add SME2 to disassembler test
David Spickett [Mon, 31 Oct 2022 11:35:54 +0000 (11:35 +0000)]
[LLDB][AArch64] Add SME2 to disassembler test

+all includes it since 5d67b051e29c2bde42a5004634296b88542c096a.

20 months ago[BasicBlockUtils] Add a new way for CreateControlFlowHub()
Brendon Cahoon [Sun, 9 Oct 2022 22:34:57 +0000 (17:34 -0500)]
[BasicBlockUtils] Add a new way for CreateControlFlowHub()

The existing way of creating the predicate in the guard blocks uses
a boolean value per outgoing block. This increases the number of live
booleans as the number of outgoing blocks increases. The new way added
in this change is to store one integer to represent the outgoing block
we want to branch to, then at each guard block, an integer equality
check is performed to decide which a specific outgoing block is taken.

Using an integer reduces the number of live values and decreases
register pressure especially in cases where there are a large number
of outgoing blocks. The integer based approach is used when the
number of outgoing blocks crosses a threshold, which is currently set
to 32.

Patch by Ruiling Song.

Differential review: https://reviews.llvm.org/D127831

20 months ago[llvm] [cmake] Set EXCLUDE_FROM_ALL on gtest and TestingSupport
Michał Górny [Sun, 30 Oct 2022 06:37:15 +0000 (07:37 +0100)]
[llvm] [cmake] Set EXCLUDE_FROM_ALL on gtest and TestingSupport

Exclude building googletest and LLVMTestingSupport libraries from
the `all` target.  If unittests are being built, these libraries will
be built as a dependency anyway.  If they are not being built, building
them makes little sense as they are not installed or used otherwise.

This will also make standalone builds of other projects easier, as it
makes it possible to include these directories without having to cover
them with additional conditions to prevent them from being built
unconditionally.

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

20 months ago[ObjCARC] Regenerate test checks (NFC)
Nikita Popov [Mon, 31 Oct 2022 13:52:05 +0000 (14:52 +0100)]
[ObjCARC] Regenerate test checks (NFC)

20 months ago[flang][NFC] Deallocation of polymorphoc entities are done with the runtime call
Valentin Clement [Mon, 31 Oct 2022 13:51:44 +0000 (14:51 +0100)]
[flang][NFC] Deallocation of polymorphoc entities are done with the runtime call

The runtime function `AllocatableDeallocate/PointerDeallocate` is reponsible to
deallocate and finalize it. This patch just adds tests to make sure the correct
runtime function is called.

Reviewed By: PeteSteinfeld

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

20 months ago[clangd] Run semantic highligting in clangd check.
Haojian Wu [Mon, 31 Oct 2022 09:04:27 +0000 (10:04 +0100)]
[clangd] Run semantic highligting in clangd check.

Allowing us to test this feature (context: a recent crash in
semantic highlighting.)

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

20 months ago[AArch64][SVE2] Add the SVE2.1 shift-and-narrow instructions
David Sherwood [Wed, 19 Oct 2022 15:21:08 +0000 (15:21 +0000)]
[AArch64][SVE2] Add the SVE2.1 shift-and-narrow instructions

This patch adds the assembly/disassembly for the following instructions:

sqrshrn  : Signed saturating rounding shift right narrow by immediate and interleave
sqrshrun : Signed saturating rounding shift right unsigned narrow by immediate and interleave
uqrshrn  : Unsigned saturating rounding shift right narrow by immediate and interleave

The reference can be found here:
https://developer.arm.com/documentation/ddi0602/2022-09

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

20 months agoNFC: restructure code for CreateControlFlowHub()
Brendon Cahoon [Sun, 9 Oct 2022 22:07:20 +0000 (17:07 -0500)]
NFC: restructure code for CreateControlFlowHub()

Differential review: https://reviews.llvm.org/D127830

20 months ago[NFC] Use isa<...> to replace isa<>||isa<> in clang/Serialization
Chuanqi Xu [Mon, 31 Oct 2022 13:15:04 +0000 (21:15 +0800)]
[NFC] Use isa<...> to replace isa<>||isa<>  in clang/Serialization

Now isa supports the variant args, which could simplify the codes
further. This patch simplify the uses in clang/Serialization

20 months ago[InstCombine] fold mul with decremented "shl -1" factor
Sanjay Patel [Mon, 31 Oct 2022 12:54:18 +0000 (08:54 -0400)]
[InstCombine] fold mul with decremented "shl -1" factor

This is a sibling to:
6064e92b0a84
...but we canonicalize the shl+add to shl+xor,
so the pattern is different than I expected:
https://alive2.llvm.org/ce/z/8CX16e

I have not found any patterns that are safe
to propagate no-wrap, so that is not included
here.

20 months ago[InstCombine] add tests for mul with shl; NFC
Sanjay Patel [Mon, 31 Oct 2022 12:41:25 +0000 (08:41 -0400)]
[InstCombine] add tests for mul with shl; NFC

20 months ago[AArch64] Include SME2 in +all
David Green [Mon, 31 Oct 2022 13:04:32 +0000 (13:04 +0000)]
[AArch64] Include SME2 in +all

The sme2 predicate was as AssemblerPredicate, not
AssemblerPredicateWithAll like all the other features, meaning it wasn't
included in +all. This fixes that inconsistency, allowing the
instructions to be decoded by default.

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

20 months ago[X86] combineConcatVectorOps - fold concat(GF2P8AFFINEQB(x,y,c),GF2P8AFFINEQB(z,w...
Simon Pilgrim [Mon, 31 Oct 2022 12:27:47 +0000 (12:27 +0000)]
[X86] combineConcatVectorOps - fold concat(GF2P8AFFINEQB(x,y,c),GF2P8AFFINEQB(z,w,c)) -> GF2P8AFFINEQB(concat(x,z),concat(y,w),c)

Pulled out of D137026

20 months ago[lldb][CPlusPlus] Implement CPlusPlusLanguage::GetFunctionDisplayName
Michael Buch [Thu, 27 Oct 2022 10:10:28 +0000 (11:10 +0100)]
[lldb][CPlusPlus] Implement CPlusPlusLanguage::GetFunctionDisplayName

This patch implements the `GetFunctionDisplayName` API which gets
used by the frame-formatting code to decide how to print a
function name.

Currently this API trivially returns `false`, so we try to parse
the demangled function base-name by hand. We try find the closing
parenthesis by doing a forward scan through the demangled name. However,
for arguments that contain parenthesis (e.g., function pointers)
this would leave garbage in the frame function name.

By re-using the `CPlusPlusLanguage` parser for this we offload the
need to parse function names to a component that knows how to do this
already.

We leave the existing parsing code in `FormatEntity` since it's used
in cases where a language-plugin is not available (and is not
necessarily C++ specific).

**Example**

For following function:
```
int foo(std::function<int(void)> const& func) { return 1; }
```

Before patch:
```
frame #0: 0x000000010000151c a.out`foo(func= Function = bar() )> const&) at sample.cpp:11:49
```

After patch:
```
frame #0: 0x000000010000151c a.out`foo(func= Function = bar() ) at sample.cpp:11:49
```

**Testing**

* Added shell test

20 months ago[lldb][CPlusPlus] Introduce CPlusPlusLanguage::MethodName::GetReturnType
Michael Buch [Thu, 27 Oct 2022 10:09:22 +0000 (11:09 +0100)]
[lldb][CPlusPlus] Introduce CPlusPlusLanguage::MethodName::GetReturnType

This patch adds a way to extract the return type out
of the `CPlusPlusNameParser`. This will be useful
for cases where we want a function's basename *and* the
return type but not the function arguments; this is
currently not possible (the parser either gives us the
full name or just the basename). Since the parser knows
how to handle return types already we should just expose
this to users that need it.

**Testing**

* Added unit-tests

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

20 months ago[lldb][FormatEntity][NFC] Move function argument parsing code into separate functions
Michael Buch [Wed, 26 Oct 2022 16:13:00 +0000 (17:13 +0100)]
[lldb][FormatEntity][NFC] Move function argument parsing code into separate functions

Hopefully makes the code more readable and allows
us to re-use argument pretty-printing code from
the `CPlusPlusLanguage` plugin in a follow-up commit.

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

20 months agoAdd explicit cast to fix MSVC error: "'return': cannot convert from 'int (__cdecl...
Simon Pilgrim [Mon, 31 Oct 2022 12:01:06 +0000 (12:01 +0000)]
Add explicit cast to fix MSVC error: "'return': cannot convert from 'int (__cdecl *)(int)' to '`anonymous-namespace'::Plus1FunctionRef::FuncT'"

20 months ago[flang] Add -ffp-contract option processing
Tom Eccles [Mon, 31 Oct 2022 11:30:32 +0000 (11:30 +0000)]
[flang] Add -ffp-contract option processing

Only add the option processing and store the result. No attributes are
added to FIR yet.

Only the "off" and "fast" options are supported. "fast-honor-pragmas" is not applicable because we do not implement `#pragma clang fp contract()` in Fortran [1]. "on" is not supported because it is unclear how to fuse only within individual statements. gfortran also does not implement "on": treating it as an "off".

Currently the default value is "off" to preserve existing behavior. gfortran uses "fast" by default and that may be the right thing for flang-new after further discussion in the future, but that can be changed separately. gfortran's documentation is available [[ https://gcc.gnu.org/onlinedocs/gcc/Optimize-Options.html | here ]].

[1] https://clang.llvm.org/docs/LanguageExtensions.html#extensions-to-specify-floating-point-flags

Reviewed By: vzakhari, awarzynski

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

20 months ago[AArch64][SME] Make all SME intrinsics use 32bit immediates.
Sander de Smalen [Fri, 28 Oct 2022 13:26:39 +0000 (13:26 +0000)]
[AArch64][SME] Make all SME intrinsics use 32bit immediates.

This aligns with what was done for SVE, which consistently uses 32bit
immediates at the LLVM IR level.

Additionally, this change forces the intrinsic operands to be immediates
using ImmArg<>, which subsequently requires the codegenerator to match
TargetConstants instead of Constants.

Reviewed By: paulwalker-arm

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

20 months ago[clang][Interp] Reorder field destruction to avoid use after dtor
Benjamin Kramer [Mon, 31 Oct 2022 11:20:10 +0000 (12:20 +0100)]
[clang][Interp] Reorder field destruction to avoid use after dtor

Found by msan -fsanitize-memory-use-after-dtor.

==8259==WARNING: MemorySanitizer: use-of-uninitialized-value
    #0 0x55dbec54d2b8 in dtorRecord(clang::interp::Block*, char*, clang::interp::Descriptor*) clang/lib/AST/Interp/Descriptor.cpp:150:22
    #1 0x55dbec54bfcf in dtorArrayDesc(clang::interp::Block*, char*, clang::interp::Descriptor*) clang/lib/AST/Interp/Descriptor.cpp:97:7
    #2 0x55dbec508578 in invokeDtor clang/lib/AST/Interp/InterpBlock.h:79:7
    #3 0x55dbec508578 in clang::interp::Program::~Program() clang/lib/AST/Interp/Program.h:55:19
    #4 0x55dbec50657a in operator() third_party/crosstool/v18/stable/toolchain/bin/../include/c++/v1/__memory/unique_ptr.h:55:5
    #5 0x55dbec50657a in std::__msan::unique_ptr<clang::interp::Program, std::__msan::default_delete<clang::interp::Program>>::~unique_ptr() third_party/crosstool/v18/stable/toolchain/bin/../include/c++/v1/__memory/unique_ptr.h:261:7
    #6 0x55dbec5035a1 in clang::interp::Context::~Context() clang/lib/AST/Interp/Context.cpp:27:22
    #7 0x55dbebec1daa in operator() third_party/crosstool/v18/stable/toolchain/bin/../include/c++/v1/__memory/unique_ptr.h:55:5
    #8 0x55dbebec1daa in std::__msan::unique_ptr<clang::interp::Context, std::__msan::default_delete<clang::interp::Context>>::~unique_ptr() third_party/crosstool/v18/stable/toolchain/bin/../include/c++/v1/__memory/unique_ptr.h:261:7
    #9 0x55dbebe285f9 in clang::ASTContext::~ASTContext() clang/lib/AST/ASTContext.cpp:1038:40
    #10 0x55dbe941ff13 in llvm::RefCountedBase<clang::ASTContext>::Release() const llvm/include/llvm/ADT/IntrusiveRefCntPtr.h:101:7
    #11 0x55dbe94353ef in release llvm/include/llvm/ADT/IntrusiveRefCntPtr.h:159:38
    #12 0x55dbe94353ef in release llvm/include/llvm/ADT/IntrusiveRefCntPtr.h:224:7
    #13 0x55dbe94353ef in ~IntrusiveRefCntPtr llvm/include/llvm/ADT/IntrusiveRefCntPtr.h:191:27
    #14 0x55dbe94353ef in clang::CompilerInstance::setASTContext(clang::ASTContext*) clang/lib/Frontend/CompilerInstance.cpp:178:3
    #15 0x55dbe95ad0ad in clang::FrontendAction::EndSourceFile() clang/lib/Frontend/FrontendAction.cpp:1100:8
    #16 0x55dbe9445fcf in clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) clang/lib/Frontend/CompilerInstance.cpp:1047:11
    #17 0x55dbe6b3afef in clang::ExecuteCompilerInvocation(clang::CompilerInstance*) clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp:266:25
    #18 0x55dbe6b13288 in cc1_main(llvm::ArrayRef<char const*>, char const*, void*) clang/tools/driver/cc1_main.cpp:250:15
    #19 0x55dbe6b0095f in ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&) clang/tools/driver/driver.cpp:319:12
    #20 0x55dbe6aff41c in clang_main(int, char**) clang/tools/driver/driver.cpp:395:12
    #21 0x7f9be07fa632 in __libc_start_main
    #22 0x55dbe6a702e9 in _start

  Member fields were destroyed
    #0 0x55dbe6a7da5d in __sanitizer_dtor_callback_fields compiler-rt/lib/msan/msan_interceptors.cpp:949:5
    #1 0x55dbec5094ac in ~SmallVectorImpl llvm/include/llvm/ADT/SmallVector.h:479:7
    #2 0x55dbec5094ac in ~SmallVectorImpl llvm/include/llvm/ADT/SmallVector.h:612:3
    #3 0x55dbec5094ac in llvm::SmallVector<clang::interp::Record::Base, 8u>::~SmallVector() llvm/include/llvm/ADT/SmallVector.h:1207:3
    #4 0x55dbec508e79 in clang::interp::Record::~Record() clang/lib/AST/Interp/Record.h:24:7
    #5 0x55dbec508612 in clang::interp::Program::~Program() clang/lib/AST/Interp/Program.h:49:26
    #6 0x55dbec50657a in operator() third_party/crosstool/v18/stable/toolchain/bin/../include/c++/v1/__memory/unique_ptr.h:55:5
    #7 0x55dbec50657a in std::__msan::unique_ptr<clang::interp::Program, std::__msan::default_delete<clang::interp::Program>>::~unique_ptr() third_party/crosstool/v18/stable/toolchain/bin/../include/c++/v1/__memory/unique_ptr.h:261:7
    #8 0x55dbec5035a1 in clang::interp::Context::~Context() clang/lib/AST/Interp/Context.cpp:27:22
    #9 0x55dbebec1daa in operator() third_party/crosstool/v18/stable/toolchain/bin/../include/c++/v1/__memory/unique_ptr.h:55:5
    #10 0x55dbebec1daa in std::__msan::unique_ptr<clang::interp::Context, std::__msan::default_delete<clang::interp::Context>>::~unique_ptr() third_party/crosstool/v18/stable/toolchain/bin/../include/c++/v1/__memory/unique_ptr.h:261:7
    #11 0x55dbebe285f9 in clang::ASTContext::~ASTContext() clang/lib/AST/ASTContext.cpp:1038:40
    #12 0x55dbe941ff13 in llvm::RefCountedBase<clang::ASTContext>::Release() const llvm/include/llvm/ADT/IntrusiveRefCntPtr.h:101:7
    #13 0x55dbe94353ef in release llvm/include/llvm/ADT/IntrusiveRefCntPtr.h:159:38
    #14 0x55dbe94353ef in release llvm/include/llvm/ADT/IntrusiveRefCntPtr.h:224:7
    #15 0x55dbe94353ef in ~IntrusiveRefCntPtr llvm/include/llvm/ADT/IntrusiveRefCntPtr.h:191:27
    #16 0x55dbe94353ef in clang::CompilerInstance::setASTContext(clang::ASTContext*) clang/lib/Frontend/CompilerInstance.cpp:178:3
    #17 0x55dbe95ad0ad in clang::FrontendAction::EndSourceFile() clang/lib/Frontend/FrontendAction.cpp:1100:8
    #18 0x55dbe9445fcf in clang::CompilerInstance::ExecuteAction(clang::FrontendAction&) clang/lib/Frontend/CompilerInstance.cpp:1047:11
    #19 0x55dbe6b3afef in clang::ExecuteCompilerInvocation(clang::CompilerInstance*) clang/lib/FrontendTool/ExecuteCompilerInvocation.cpp:266:25
    #20 0x55dbe6b13288 in cc1_main(llvm::ArrayRef<char const*>, char const*, void*) clang/tools/driver/cc1_main.cpp:250:15
    #21 0x55dbe6b0095f in ExecuteCC1Tool(llvm::SmallVectorImpl<char const*>&) clang/tools/driver/driver.cpp:319:12
    #22 0x55dbe6aff41c in clang_main(int, char**) clang/tools/driver/driver.cpp:395:12
    #23 0x7f9be07fa632 in __libc_start_main
    #24 0x55dbe6a702e9 in _start

20 months ago[AArch64-SVE]: Force generating code compatible to streaming mode.
Hassnaa Hamdi [Mon, 24 Oct 2022 09:45:00 +0000 (09:45 +0000)]
[AArch64-SVE]: Force generating code compatible to streaming mode.

When streaming mode is enabled, lower some operations and disable some code paths;
to force generateing code compatible to streaming mode.
Add streaming-mode flag for new sve-fixed-length testing files:
build_vector.ll
concat.ll
extract-subvector.ll
extract-vector-elt.ll
int-shifts.ll
loads.ll
shuffle.ll
stores.ll

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