platform/upstream/llvm.git
2 years ago[lldb] Fix 7b73de9ec2b19df040c919d3004dfbead9b6ac59
Walter Erquinigo [Tue, 10 May 2022 04:01:05 +0000 (21:01 -0700)]
[lldb] Fix 7b73de9ec2b19df040c919d3004dfbead9b6ac59

This commit causes
https://lab.llvm.org/buildbot/#/builders/17/builds/21743 to fail
seemingly because of bad handling of the PERF_ATTR_SIZE_VER5 symbol.

This patch tries to handle better the absence of this symbol.

2 years ago[IRSim] Remove early check from similarity matching such that commutative instruction...
Andrew Litteken [Sun, 1 May 2022 23:06:21 +0000 (18:06 -0500)]
[IRSim] Remove early check from similarity matching such that commutative instructions are checked correctly when using the same value.

When the first commutative instruction in a region using the same value in both positions was compared to a corresponding instruction with two different values, there was an early check that determined that since the values were new, it was true that these values acted in the same way structurally. If this was not contradicted later in the program, the regions were marked as similar. This removes that check, so that it is clear that the same value cannot be mapped to two different values.

Reviewer: paquette

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

2 years ago[mlir] Fix python bindings build on Windows in Debug
Stella Stamenova [Tue, 10 May 2022 02:46:47 +0000 (19:46 -0700)]
[mlir] Fix python bindings build on Windows in Debug

Currently, building mlir with the python bindings enabled on Windows in Debug is broken because pybind11, python and cmake don't like to play together. This change normalizes how the three interact, so that the builds can now run and succeed.

The main issue is that python and cmake both make assumptions about which libraries are needed in a Windows build based on the flavor.
- cmake assumes that a debug (or a debug-like) flavor of the build will always require pythonX_d.lib and provides no option/hint to tell it to use a different library. cmake does find both the debug and release versions, but then uses the debug library.
- python (specifically pyconfig.h and by extension python.h) hardcodes the dependency on pythonX_d.lib or pythonX.lib depending on whether `_DEBUG` is defined. This is NOT transparent - it does not show up anywhere in the build logs until the link step fails with `pythonX_d.lib is missing` (or `pythonX.lib is missing`)
- pybind11 tries to "fix" this by implementing a workaround - unless Py_DEBUG is defined, `_DEBUG` is explicitly undefined right before including python headers. This also requires some windows headers to be included differently, so while clever, this is a non-trivial workaround.

mlir itself includes the pybind11 headers (which contain the workaround) AS WELL AS python.h, essentially always requiring both pythonX.lib and pythonX_d.lib for linking. cmake explicitly only adds one or the other, so the build fails.

This change does a couple of things:
- In the cmake files, explicitly add the release version of the python library on Windows builds regardless of flavor. Since Py_DEBUG is not defined, pybind11 will always require release and it will be satisfied
- To satisfy python as well, this change removes any explicit inclusions of Python.h on Windows instead relying on the fact that pybind11 headers will bring in what is needed

There are a few additional things that we could do but I rejected as unnecessary at this time:
- define Py_DEBUG based on the CMAKE_BUILD_TYPE - this will *mostly* work, we'd have to think through multiconfig generators like VS, but it's possible. There doesn't seem to be a need to link against debug python at the moment, so I chose not to overcomplicate the build and always default to release
- similar to above, but define Py_DEBUG based on the CMAKE_BUILD_TYPE *as well as* the presence of the debug python library (`Python3_LIBRARY_DEBUG`). Similar to above, this seems unnecessary right now. I think it's slightly better than above because most people don't actually have the debug version of python installed, so this would prevent breaks in that case.
- similar to the two above, but add a cmake variable to control the logic
- implement the pybind11 workaround directly in mlir (specifically in Interop.h) so that Python.h can still be included directly. This seems prone to error and a pain to maintain in lock step with pybind11
- reorganize how the pybind11 headers are included and place at least one of them in Interop.h directly, so that the header has all of its dependencies included as was the original intention. I decided against this because it really doesn't need pybind11 logic and it's always included after pybind11 is, so we don't necessarily need the python includes

Reviewed By: stellaraccident

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

2 years ago[NFC] Modify the comment to reflect the changes in decoder
Sheng [Tue, 10 May 2022 02:30:39 +0000 (10:30 +0800)]
[NFC] Modify the comment to reflect the changes in decoder

2 years ago[clang][Driver] Add more tests for riscv
Ben Shi [Tue, 10 May 2022 02:16:45 +0000 (02:16 +0000)]
[clang][Driver] Add more tests for riscv

Reviewed By: benshi001

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

2 years ago[RISCV][NFC] Add 'rv32izvfh' invalid arch test
Ben Shi [Tue, 10 May 2022 02:15:13 +0000 (02:15 +0000)]
[RISCV][NFC] Add 'rv32izvfh' invalid arch test

Reviewed By: craig.topper

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

2 years ago[flang] Allow ENTRY function result symbol usage before the ENTRY
Peter Klausler [Wed, 4 May 2022 19:50:03 +0000 (12:50 -0700)]
[flang] Allow ENTRY function result symbol usage before the ENTRY

In a function, ENTRY E without an explicit RESULT() creates a
function result entity also named E that is storage associated with
the enclosing function's result.  f18 was emitting an incorrect error
message if that function result E was referenced without any
declaration prior to its ENTRY statement when it should have been
implicitly declared instead.

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

2 years ago[NFC] follow up code cleanup after D123837
Chuanqi Xu [Tue, 10 May 2022 02:00:35 +0000 (10:00 +0800)]
[NFC] follow up code cleanup after D123837

Reviewed By: iains

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

2 years ago[flang] Accept POINTER followed by INTERFACE
Peter Klausler [Wed, 4 May 2022 21:10:18 +0000 (14:10 -0700)]
[flang] Accept POINTER followed by INTERFACE

As is already supported for dummy procedures, we need to also accept
declarations of procedure pointers that consist of a POINTER attribute
statement followed by an INTERFACE block.  (The case of an INTERFACE
block followed by a POINTER statement already works.)

While cleaning this case up, adjust the utility predicate IsProcedurePointer()
to recognize it (namely a SubprogramDetails symbol with Attr::POINTER)
and delete IsProcName().  Extend tests, and add better comments to
symbol.h to document the two ways in which procedure pointers are
represented.

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

2 years ago[gn build] Port 059e03476cbb
LLVM GN Syncbot [Tue, 10 May 2022 01:06:44 +0000 (01:06 +0000)]
[gn build] Port 059e03476cbb

2 years agoAdd x86 to REQUIRES line in test as suggested in https://reviews.llvm.org/D124105.
Douglas Yung [Tue, 10 May 2022 01:00:53 +0000 (18:00 -0700)]
Add x86 to REQUIRES line in test as suggested in https://reviews.llvm.org/D124105.

2 years ago[mlgo] Support exposing more features than those supported by models
Mircea Trofin [Wed, 27 Apr 2022 21:19:14 +0000 (14:19 -0700)]
[mlgo] Support exposing more features than those supported by models

This allows the compiler to support more features than those supported by a
model. The only requirement (development mode only) is that the new
features must be appended at the end of the list of features requested
from the model. The support is transparent to compiler code: for
unsupported features, we provide a valid buffer to copy their values;
it's just that this buffer is disconnected from the model, so insofar
as the model is concerned (AOT or development mode), these features don't
exist. The buffers are allocated at setup - meaning, at steady state,
there is no extra allocation (maintaining the current invariant). These
buffers has 2 roles: one, keep the compiler code simple. Second, allow
logging their values in development mode. The latter allows retraining
a model supporting the larger feature set starting from traces produced
with the old model.

For release mode (AOT-ed models), this decouples compiler evolution from
model evolution, which we want in scenarios where the toolchain is
frequently rebuilt and redeployed: we can first deploy the new features,
and continue working with the older model, until a new model is made
available, which can then be picked up the next time the compiler is built.

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

2 years ago[flang] Reverse a reversed type compatibility check
Peter Klausler [Tue, 3 May 2022 20:57:14 +0000 (13:57 -0700)]
[flang] Reverse a reversed type compatibility check

The semantic test for an intrinsic assignment to a polymorphic
derived type entity from a type that is an extension of its base
type was reversed, so it would allow assignments that it shouldn't
and disallowed some that it should; and the test case for it
incorectly assumed that the invalid semantics were correct.
Fix the code and the test, and add a new test for the invalid
case (LHS type is an extension of the RHS type).

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

2 years ago[flang] Refine error checking in specification expressions
Peter Klausler [Tue, 3 May 2022 20:17:50 +0000 (13:17 -0700)]
[flang] Refine error checking in specification expressions

The rules in the Fortran standard for specification expressions
are full of special cases and exceptions, and semantics didn't get
them exactly right.  It is valid to refer to an INTENT(OUT) dummy
argument in a specification expression in the context of a
specification inquiry function like SIZE(); it is not valid to
reference an OPTIONAL dummy argument outside of the context of
PRESENT.  This patch makes the specification expression checker
a little context-sensitive about whether it's examining an actual
argument of a specification inquiry intrinsic function or not.

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

2 years ago[flang] Allow implicit declaration of DATA objects in inner procedures
Peter Klausler [Tue, 3 May 2022 18:24:10 +0000 (11:24 -0700)]
[flang] Allow implicit declaration of DATA objects in inner procedures

DATA statements in inner procedures were not treating undeclared objects
as implicitly declared variables if the DATA statement appeared in a
specification part; they were treated as host-associated symbols instead.
This was incorrect.  Fix DATA statement name resolution to always treat
DATA as if it had appeared in the executable part.

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

2 years ago[AMDGPU] Pre-commit test for D124981. NFC.
Carl Ritson [Tue, 10 May 2022 00:02:36 +0000 (09:02 +0900)]
[AMDGPU] Pre-commit test for D124981. NFC.

2 years ago[AMDGPU] Generate checks in llvm.amdgcn.softwqm.ll
Carl Ritson [Mon, 9 May 2022 23:52:31 +0000 (08:52 +0900)]
[AMDGPU] Generate checks in llvm.amdgcn.softwqm.ll

2 years ago[flang] Allow NULL() actual argument for optional dummy procedure
Peter Klausler [Tue, 3 May 2022 17:10:11 +0000 (10:10 -0700)]
[flang] Allow NULL() actual argument for optional dummy procedure

A disassociated procedure pointer is allowed to be passed as an absent
actual argument that corresponds to an optional dummy procedure,
but not NULL(); accept that case as well.

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

2 years ago[flang] Allow PDTs with LEN parameters in REDUCE()
Peter Klausler [Tue, 3 May 2022 16:54:29 +0000 (09:54 -0700)]
[flang] Allow PDTs with LEN parameters in REDUCE()

The type compatibility checks for the ARRAY= argument and the dummy
arguments and result of the OPERATION= argument to the REDUCE intrinsic
function need to allow for parameterized data types with LEN parameters.
(Their values are required to be identical but this is not a numbered
constraint requiring a compilation time check).

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

2 years ago[AArch64] Remove ADDC, ADDE, SUBC, SUBE support, use the CARRY ops instead
Amaury Séchet [Sat, 7 May 2022 00:25:03 +0000 (00:25 +0000)]
[AArch64] Remove ADDC, ADDE, SUBC, SUBE support, use the CARRY ops instead

This cleans up tech debt. Similar to D33390 .

Reviewed By: Kmeakin

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

2 years ago[flang] Correct actual/dummy procedure compatibility for ALLOCATABLE/POINTER functions
Peter Klausler [Tue, 3 May 2022 16:28:04 +0000 (09:28 -0700)]
[flang] Correct actual/dummy procedure compatibility for ALLOCATABLE/POINTER functions

Functions returning ALLOCATABLE or POINTER arrays have descriptor inquiries in
their results' shape expressions that won't compare equal.  These functions
need only be checked for compatible ranks (& of course other characteristics).

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

2 years ago[flang] Fix to UnwrapConvertedExpr()
Peter Klausler [Mon, 2 May 2022 23:56:20 +0000 (16:56 -0700)]
[flang] Fix to UnwrapConvertedExpr()

The utility UnwrapConvertedExpr() was failing to unwrap a
converted TypeParamInquiry operation when called from runtime
derived type description table construction, leading to an
abort in semantics.

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

2 years ago[polly] Fix type in function name. NFC.
Michael Kruse [Mon, 9 May 2022 23:19:18 +0000 (18:19 -0500)]
[polly] Fix type in function name. NFC.

2 years ago[flang] Ensure that structure constructors fold parameter references
Peter Klausler [Mon, 2 May 2022 20:55:29 +0000 (13:55 -0700)]
[flang] Ensure that structure constructors fold parameter references

Structure contructors for instances of parameterized derived types
must have their components' values folded in the context of the values
of the type parameters.

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

2 years agoAdd the ability to debug through an exec into ld
Greg Clayton [Mon, 9 May 2022 18:48:18 +0000 (11:48 -0700)]
Add the ability to debug through an exec into ld

A previous commit enabled LLDB to be able to debug a program launched via ld: https://reviews.llvm.org/D108061.

This commit adds the ability to debug a program launched via ld when it happens during an exec into the dynamic loader. There was an issue where after the exec we would locate the rendezvous structure right away but it didn't contain any valid values and we would try to set the dyanamic loader breakpoint at address zero. This patch fixes that and adds a test.

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

2 years ago[gn build] Port 7b73de9ec2b1
LLVM GN Syncbot [Mon, 9 May 2022 23:05:57 +0000 (23:05 +0000)]
[gn build] Port 7b73de9ec2b1

2 years ago[trace][intelpt] Support system-wide tracing [3] - Refactor IntelPTThreadTrace
Walter Erquinigo [Fri, 29 Apr 2022 00:11:57 +0000 (17:11 -0700)]
[trace][intelpt] Support system-wide tracing [3] - Refactor IntelPTThreadTrace

I'm refactoring IntelPTThreadTrace into IntelPTSingleBufferTrace so that it can
both single threads or single cores. In this diff I'm basically renaming the
class, moving it to its own file, and removing all the pieces that are not used
along with some basic cleanup.

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

2 years ago[trace][intelpt] Support system-wide tracing [2] - Add a dummy --per-core-tracing...
Walter Erquinigo [Thu, 28 Apr 2022 21:00:44 +0000 (14:00 -0700)]
[trace][intelpt] Support system-wide tracing [2] - Add a dummy --per-core-tracing option

This updates the documentation of the gdb-remote protocol, as well as the help messages, to include the new --per-core-tracing option.

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

2 years ago[mlir][doc] Move documentation of extensible dialects
Mathieu Fehr [Mon, 9 May 2022 22:37:13 +0000 (15:37 -0700)]
[mlir][doc] Move documentation of extensible dialects

Merge the documentation of the definition of extensible dialects
with the definition of dialects.

Reviewed By: rriddle

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

2 years ago[flang] Refine handling of short character actual arguments
Peter Klausler [Sat, 30 Apr 2022 16:14:07 +0000 (09:14 -0700)]
[flang] Refine handling of short character actual arguments

Actual arguments whose lengths are less than the expected length
of their corresponding dummy argument are errors; but this needs
to be refined.  Short actual arguments that are variables remain
errors, but those that are expressions can be (again) extended on
the right with blanks.

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

2 years ago[gn build] (manually) port a2f2dfde48ac (clang-fuzzer-dictionary)
Nico Weber [Mon, 9 May 2022 22:24:59 +0000 (18:24 -0400)]
[gn build] (manually) port a2f2dfde48ac (clang-fuzzer-dictionary)

2 years ago[mlir-LSP] Ensure existing documents are process synchronously
River Riddle [Tue, 3 May 2022 23:11:28 +0000 (16:11 -0700)]
[mlir-LSP] Ensure existing documents are process synchronously

This prevents races where we accidentally launched multiple servers.

2 years ago[flang] Correct folding of SPREAD() for higher ranks
Peter Klausler [Sat, 30 Apr 2022 15:32:50 +0000 (08:32 -0700)]
[flang] Correct folding of SPREAD() for higher ranks

The construction of the dimension order vector used to populate the
result array was incorrect, leading to a scrambled-looking result
for rank-3 and higher results.  Fix, and extend tests.

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

2 years ago[Inliner] Preserve !prof metadata when converting call to invoke.
Hongtao Yu [Mon, 9 May 2022 18:10:25 +0000 (11:10 -0700)]
[Inliner] Preserve !prof metadata when converting call to invoke.

When a callee function is inlined via an invoke instruction, every function call inside the callee, if not an invoke,  will be converted to an invoke after cloned to the caller body. I found that during the conversion the !prof metadata was dropped. This in turned caused a cloned indirect call not properly promoted in subsequent passes.

The particular scenario I was investigating was with AutoFDO and thinLTO. In prelink, no ICP was triggered (neither by the sample loader nor PGO ICP), no indirect call was promoted. This is because 1) the particular indirect call did not have inlined samples;  and 2) PGO ICP was intentionally disabled.  After inlining, the prof metadata was dropped. Then in postlink, PGO ICP jumped in but didn't do anything. Thus the opportunity was missed.

I'm making a simple fix to preserve !prof metadata when converting call to invoke.

Reviewed By: davidxl

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

2 years ago[flang] Operands of SIGN() need not have same kind
Peter Klausler [Fri, 29 Apr 2022 23:16:41 +0000 (16:16 -0700)]
[flang] Operands of SIGN() need not have same kind

The standard requires that the operands of the intrinsic function
SIGN() must have the same type (INTEGER or REAL), but they are not
required to have the same kind.

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

2 years ago[HWASan] deflake hwasan_symbolize test
Florian Mayer [Fri, 6 May 2022 23:13:58 +0000 (16:13 -0700)]
[HWASan] deflake hwasan_symbolize test

Also enable on X86_64.

The directory would change during the test execution. This should not
necessarily prevent us from indexing a directory (a user might
potentially do that if they specify a parent directory of the actual
symbols directory, and change unrelated files).

Reviewed By: eugenis

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

2 years ago[polly] Load NPM pass plugin for NPM test.
Michael Kruse [Mon, 9 May 2022 21:05:03 +0000 (16:05 -0500)]
[polly] Load NPM pass plugin for NPM test.

This fixes the polly-*-plugin buildbots.

2 years ago[flang] Fold intrinsic functions SPACING() and RRSPACING()
Peter Klausler [Fri, 29 Apr 2022 22:34:42 +0000 (15:34 -0700)]
[flang] Fold intrinsic functions SPACING() and RRSPACING()

The related real number system inquiry functions SPACING()
and RRSPACING() can be folded for constant arguments.
See 16.9.164 & 16.9.180 in Fortran 2018.

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

2 years agoRevert "[SLP]Further improvement of the cost model for scalars used in buildvectors."
Alexey Bataev [Mon, 9 May 2022 20:36:09 +0000 (13:36 -0700)]
Revert "[SLP]Further improvement of the cost model for scalars used in buildvectors."

This reverts commit 99f31acfce338417fea3c14983d6f8fedc8ed043 and several
others to fix detected crashes, reported in https://reviews.llvm.org/D115750

2 years ago[flang] Fold intrinsic inquiry functions SAME_TYPE_AS() and EXTENDS_TYPE_OF()
Peter Klausler [Fri, 29 Apr 2022 15:57:51 +0000 (08:57 -0700)]
[flang] Fold intrinsic inquiry functions SAME_TYPE_AS() and EXTENDS_TYPE_OF()

When the result can be known at compilation time, fold it.
Success depends on whether the operands are polymorphic.
When neither one is polymorphic, the result is known and can
be either .TRUE. or .FALSE.; when either one is polymorphic,
a .FALSE. result still can be discerned.

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

2 years ago[SLP]Adjust assertion check for scalars in several insertelements.
Alexey Bataev [Mon, 9 May 2022 20:06:30 +0000 (13:06 -0700)]
[SLP]Adjust assertion check for scalars in several insertelements.

If the same scalar is inserted several times into the same buildvector,
the mask index can be used already. In this case need to check, that
this scalar is already part of the vectorized buildvector.

2 years ago[flang][runtime] BACKSPACE after non-advancing I/O
Peter Klausler [Thu, 28 Apr 2022 23:54:40 +0000 (16:54 -0700)]
[flang][runtime] BACKSPACE after non-advancing I/O

A BACKSPACE statement on a unit after a READ or WRITE with ADVANCE="NO"
must reset the position to the beginning of the record, not to the
beginning of the previous one.

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

2 years ago[flang][runtime] (G0) for CHARACTER means (A), not (A0)
Peter Klausler [Thu, 28 Apr 2022 23:30:46 +0000 (16:30 -0700)]
[flang][runtime] (G0) for CHARACTER means (A), not (A0)

I'm emitting zero characters for (G0) formatting of CHARACTER values
instead of using their lengths to determine the output field width.

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

2 years ago[flang][runtime] Enforce restrictions on unlimited format repetition
Peter Klausler [Thu, 28 Apr 2022 21:23:31 +0000 (14:23 -0700)]
[flang][runtime] Enforce restrictions on unlimited format repetition

A repeated format item group with an unlimited ('*') repetition count
can appear only as the last item at the top level of a format; it can't
be nested in more parentheses and it can't be followed by anything
else.

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

2 years ago[flang][runtime] Don't pad CHARACTER input at end of record unless PAD='YES'
Peter Klausler [Wed, 27 Apr 2022 20:28:59 +0000 (13:28 -0700)]
[flang][runtime] Don't pad CHARACTER input at end of record unless PAD='YES'

When formatted CHARACTER input runs into the end of an input record,
the runtime usually fills the remainder of the variable with spaces,
but this should be conditional, and not done when PAD='NO'.

And while here, add some better comments to two members of connection.h
to make their non-obvious relationship more clear.

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

2 years ago[flang][runtime] Fix input of NAN(...) on non-fast path
Peter Klausler [Tue, 26 Apr 2022 23:49:29 +0000 (16:49 -0700)]
[flang][runtime] Fix input of NAN(...) on non-fast path

The closing parenthesis needs to be consumed when a NaN
with parenthesized (ignored) information is read on the
real input path that preprocesses input characters before
passing them to the decimal-to-binary converter.

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

2 years ago[mlir][nvvm] Add attribute to nvvm.cpAsyncOp to control l1 bypass
Thomas Raoux [Mon, 9 May 2022 15:46:28 +0000 (15:46 +0000)]
[mlir][nvvm] Add attribute to nvvm.cpAsyncOp to control l1 bypass

Add attribute to be able to generate the intrinsic version of async copy
generating a copy with l1 bypass. This correspond to
cp.async.cg.shared.global in ptx.

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

2 years agoRevert "Recommit "[VPlan] Remove uneeded needsVectorIV check.""
Florian Hahn [Mon, 9 May 2022 19:33:14 +0000 (20:33 +0100)]
Revert "Recommit "[VPlan] Remove uneeded needsVectorIV check.""

This reverts commit 8b48223447311af8b3022697dd58858e1ce6975f.

This triggers an assertion on a test case mentioned in D123720.
Revert while I investigate.

2 years ago[polly] Fix compiler warning. NFC.
Michael Kruse [Mon, 9 May 2022 18:59:49 +0000 (13:59 -0500)]
[polly] Fix compiler warning. NFC.

Fix the warning

   warning: 'polly::ScopViewer' has virtual functions but non-virtual destructor [-Wnon-virtual-dtor]

and for several other classes by inserting virtual destructors.

2 years ago[polly] migrate -polly-show to the new pass manager
Michael Kruse [Mon, 9 May 2022 18:38:20 +0000 (13:38 -0500)]
[polly] migrate -polly-show to the new pass manager

Reviewed By: Meinersbur

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

2 years ago[PassManager] Implement DOTGraphTraitsViewer under NPM
Michael Kruse [Mon, 9 May 2022 18:38:16 +0000 (13:38 -0500)]
[PassManager] Implement DOTGraphTraitsViewer under NPM

Rename the legacy `DOTGraphTraits{Module,}{Viewer,Printer}` to the corresponding `DOTGraphTraits...WrapperPass`, and implement a new `DOTGraphTraitsViewer` with new pass manager.

Reviewed By: Meinersbur

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

2 years agoModify DXILPrepare to emit no-op bitcasts
Chris Bieneman [Thu, 14 Apr 2022 18:41:57 +0000 (13:41 -0500)]
Modify DXILPrepare to emit no-op bitcasts

In supporting opaque pointers we need to re-materialize typed pointers
in bitcode emission. Because of how the value-enumerator pre-allocates
types and instructions we need to insert some no-op bitcasts in the
places that we'll need bitcasts for the pointer types.

Reviewed By: kuhar

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

2 years agoMake lsan TestCases more consistent
Clemens Wasser [Mon, 9 May 2022 17:58:53 +0000 (10:58 -0700)]
Make lsan TestCases more consistent

Inlining `LSAN_BASE` makes the lsan TestCases more consistent to the other sanitizer TestCases.
It is also needed on Windows: https://reviews.llvm.org/D115103

Reviewed By: vitalybuka

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

2 years ago[mlir] Fix build & test of mlir python bindings on Windows
Stella Stamenova [Mon, 9 May 2022 18:10:17 +0000 (11:10 -0700)]
[mlir] Fix build & test of mlir python bindings on Windows

There are a couple of issues with the python bindings on Windows:
- `create_symlink` requires special permissions on Windows - using `copy_if_different` instead allows the build to complete and then be usable
- the path to the `python_executable` is likely to contain spaces if python is installed in Program Files. llvm's python substitution adds extra quotes in order to account for this case, but mlir's own python substitution does not
- the location of the shared libraries is different on windows
- if the type is not specified for numpy arrays, they appear to be treated as strings

I've implemented the smallest possible changes for each of these in the patch, but I would actually prefer a slightly more comprehensive fix for the python_executable and the shared libraries.

For the python substitution, I think it makes sense to leverage the existing %python instead of adding %PYTHON and instead add a new variable for the case when preloading is needed. This would also make it clearer which tests are which and should be skipped on platforms where the preloading won't work.

For the shared libraries, I think it would make sense to pass the correct path and extension (possibly even the names) to the python script since these are known by lit and don't have to be hardcoded in the test at all.

Reviewed By: stellaraccident

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

2 years ago[lldb/test] Remove superfluous -std=c++11 from tests
Pavel Labath [Mon, 9 May 2022 18:04:14 +0000 (20:04 +0200)]
[lldb/test] Remove superfluous -std=c++11 from tests

We default to that anyway. It does not work on windows, and since
ac7747e, the flag actually takes effect.

2 years ago[lldb/test] Append CXXFLAGS_EXTRAS last in Makefile.rules
Pavel Labath [Mon, 9 May 2022 17:24:57 +0000 (19:24 +0200)]
[lldb/test] Append CXXFLAGS_EXTRAS last in Makefile.rules

This matches what we do with CFLAGS, and it started to matter
8abfa5119ad, which added some -std=-apending code.

2 years ago[CodeGen] Clarify the semantics of ADDCARRY/SUBCARRY
Kazu Hirata [Mon, 9 May 2022 17:17:00 +0000 (10:17 -0700)]
[CodeGen] Clarify the semantics of ADDCARRY/SUBCARRY

This patch clarifies the semantics of ADDCARRY/SUBCARRY, specifically
stating that both the incoming and outgoing carries are active high.

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

2 years ago[SystemZ] Fix argument type of tdc instruction.
Kai Nacke [Mon, 9 May 2022 13:53:28 +0000 (09:53 -0400)]
[SystemZ] Fix argument type of tdc instruction.

The DAG node for the Test Data Class is defined using i64 as the second parameter.
However, the code to lower is_fpclass uses `i32` as type. This only works because no
type check is generated in the DAG matcher.
This PR changes the type of the mask constant to `i64`.

Reviewed By: uweigand

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

2 years ago[opt] Error on `opt -O# --foo-pass`
Arthur Eubanks [Mon, 9 May 2022 00:22:11 +0000 (17:22 -0700)]
[opt] Error on `opt -O# --foo-pass`

Matches the error message we emit with `-opt -O# --passes=foo`.
Otherwise we crash later on.

Makes #55320 much less confusing.

Reviewed By: MaskRay

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

2 years ago[SLP]Try partial store vectorization if supported by target.
Alexey Bataev [Fri, 22 Apr 2022 18:14:41 +0000 (11:14 -0700)]
[SLP]Try partial store vectorization if supported by target.

We can try to vectorize number of stores less than MinVecRegSize
/ scalar_value_size, if it is allowed by target. Gives an extra
opportunity for the vectorization.

Fixes PR54985.

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

2 years ago[Docs] Added my office hours.
Anastasia Stulova [Mon, 9 May 2022 16:39:03 +0000 (17:39 +0100)]
[Docs] Added my office hours.

2 years ago[mlir] Refactoring dialect and test code to use parseCommaSeparatedList
Jakub Tucholski [Mon, 2 May 2022 17:55:36 +0000 (13:55 -0400)]
[mlir] Refactoring dialect and test code to use parseCommaSeparatedList

Issue #55173

Reviewed By: lattner, rriddle

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

2 years ago[clang-fuzzer] Add a tiny tool to generate a fuzzing dictionary for clang
Sam McCall [Sat, 7 May 2022 13:10:51 +0000 (15:10 +0200)]
[clang-fuzzer] Add a tiny tool to generate a fuzzing dictionary for clang

It should be useful clang-fuzzer itself, though my own motivation is
to use this in fuzzing clang-pseudo. (clang-tools-extra/pseudo/fuzzer).

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

2 years agoRevert ""Re-apply 4b6c2cd642 "Deferred Concept Instantiation Implementation"""""
Erich Keane [Mon, 9 May 2022 16:04:17 +0000 (09:04 -0700)]
Revert ""Re-apply 4b6c2cd642 "Deferred Concept Instantiation Implementation"""""

This reverts commit a425cac31e2e4cee8e14b7b9a99c8ba17c1ebb52.

There is another libc++ test, that this time causes us to hit an
assertion. Reverting, likely for a while this time.

2 years ago[riscv] Add a few more vsetvli insertion tests
Philip Reames [Mon, 9 May 2022 15:49:40 +0000 (08:49 -0700)]
[riscv] Add a few more vsetvli insertion tests

These are aimed at a possible miscompile spotted in the vmv.s.x/f mutation case, but it appears this is a latent bug.  Or at least, I haven't been able to construct a case with compatible policy flags via intrinsics.

2 years ago[RISCV] Remove two unmasked RVV patterns
Fraser Cormack [Mon, 9 May 2022 15:10:17 +0000 (16:10 +0100)]
[RISCV] Remove two unmasked RVV patterns

These can be selected to unmasked from masked instructions by the
post-process DAG step.

Reviewed By: craig.topper

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

2 years ago[mlir][linalg] Fix padding size calculation for Conv2d ops.
Jerry Wu [Mon, 9 May 2022 15:43:40 +0000 (08:43 -0700)]
[mlir][linalg] Fix padding size calculation for Conv2d ops.

This patch fixed the padding size calculation for Conv2d ops when the stride > 1. It contains the changes below:

- Use addBound to add constraint for AffineApplyOp in getUpperBoundForIndex. So the result value can be mapped and retrieved later.

- Fixed the bound from AffineMinOp by adding as a closed bound. Originally the bound was added as an open upper bound, which results in the incorrect bounds when we multiply the values. For example:

```
%0 = affine.min affine_map<()[s0] -> (4, -s0 + 11)>()[iv0]
%1 = affine.apply affine_map<()[s0] -> (s0 * 2)>()[%0]

If we add the affine.min as an open bound, addBound will internally transform it into the close bound "%0 <= 3". The following sliceBounds will derive the bound of %1 as "%1 <= 6" and return the open bound "%1 < 7", while the correct bound should be "%1 <= 8".
```

- In addition to addBound, I also changed sliceBounds to support returning closed upper bound, since for the size computation, we usually care about the closed bounds.

- Change the getUpperBoundForIndex to favor constant bounds when required. The sliceBounds will return a tighter but non-constant bounds, which can't be used for padding. The constantRequired option requires getUpperBoundForIndex to get the constant bounds when possible.

Reviewed By: hanchung

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

2 years ago[mlir] Add translation from tensor.reshape to memref.reshape
Ashay Rane [Mon, 9 May 2022 15:41:21 +0000 (17:41 +0200)]
[mlir] Add translation from tensor.reshape to memref.reshape

This patch augments the `tensor-bufferize` pass by adding a conversion
rule to translate ReshapeOp from the `tensor` dialect to the `memref`
dialect, in addition to adding a unit test to validate the translation.

Reviewed By: springerm

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

2 years ago[lldb/test] Fix TestCppIncompleteTypeMembers.py
Pavel Labath [Mon, 9 May 2022 15:10:57 +0000 (17:10 +0200)]
[lldb/test] Fix TestCppIncompleteTypeMembers.py

modify the Makefile.rules line which was interfering with the
target-specific variable values.

2 years ago[LLVM][sancov] Inclusive language: Add -ignorelist option
Zarko Todorovski [Mon, 9 May 2022 15:05:13 +0000 (11:05 -0400)]
[LLVM][sancov] Inclusive language: Add -ignorelist option

Adding the `-ignorelist` option that may eventually replace `-blacklist`.
With this patch `sancov` accepts both options.

Reviewed By: quinnp

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

2 years ago[ELF] Support -plugin-opt=stats-file=
Alex Richardson [Mon, 9 May 2022 14:51:02 +0000 (14:51 +0000)]
[ELF] Support -plugin-opt=stats-file=

This flag is added by clang::driver::tools::addLTOOptions() and was causing
errors for me when building the llvm-test-suite repository with LTO and
-DTEST_SUITE_COLLECT_STATS=ON. This replaces the --stats-file= option
added in 1c04b52b2594d403f739ed919ef420b1e47ae343 since the flag is only
used for LTO and should therefore be in the -plugin-opt= namespace.

Additionally, this commit fixes the `REQUIRES: asserts` that was added in
948d05324a150a5a24e93bad07c9090d5b8bd129: the feature was never defined in
the lld test suite so it effectively disabled the test.

Reviewed By: MaskRay, MTC

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

2 years ago[X86] insertps-combine.ll - show address math in checks
Simon Pilgrim [Mon, 9 May 2022 14:59:59 +0000 (15:59 +0100)]
[X86] insertps-combine.ll - show address math in checks

2 years ago[SLP]Fix a crash when preparing a mask for external scalars.
Alexey Bataev [Mon, 9 May 2022 14:31:33 +0000 (07:31 -0700)]
[SLP]Fix a crash when preparing a mask for external scalars.

Need to use actual index instead of the tree entry position, since the
insert index may be different than 0. It mean, that we vectorized part
of the buildvector starting from not initial insertelement instruction
beause of some reason.

2 years ago[SCEV] Fold umin_seq using known predicate
Nikita Popov [Mon, 9 May 2022 14:15:09 +0000 (16:15 +0200)]
[SCEV] Fold umin_seq using known predicate

Fold %x umin_seq %y to %x if %x ule %y. This also subsumes the
special handling for constant operands, as if %y is constant this
folds to umin via implied poison reasoning, and if %x is constant
then either %x is not zero and it folds to umin, or it is known
zero, in which case it is ule anything.

2 years ago[SCEV] Add more tests for umin_seq with known predicate (NFC)
Nikita Popov [Mon, 9 May 2022 14:17:16 +0000 (16:17 +0200)]
[SCEV] Add more tests for umin_seq with known predicate (NFC)

2 years agoEnum conversion warning when one signed and other unsigned.
Micah Weston [Mon, 9 May 2022 14:15:10 +0000 (10:15 -0400)]
Enum conversion warning when one signed and other unsigned.

Ensures an -Wenum-conversion warning happens when one of the enums is
signed and the other is unsigned. Also adds a test file to verify these
warnings.

This warning would not happen since the -Wsign-conversion would make a
diagnostic then return, never allowing the -Wenum-conversion checks.

For example:

C
enum PE { P = -1 };
enum NE { N };
enum NE conv(enum PE E) { return E; }
Before this would only create a diagnostic with -Wsign-conversion and
never on -Wenum-conversion. Now it will create a diagnostic for both
-Wsign-conversion and -Wenum-conversion.

I could change it to just warn on -Wenum-conversion as that was what I
initially did. Seeing PR35200 (or GitHub Issue 316268), I let both
diagnostics check so that the sign conversion could generate a warning.

2 years ago[clang] Recognize scope of thread local variables in CFGBuilder
Krzysztof Parzyszek [Mon, 9 May 2022 13:32:54 +0000 (06:32 -0700)]
[clang] Recognize scope of thread local variables in CFGBuilder

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

2 years ago[Frontend] when attaching a preamble, don't generate the long predefines buffer.
Sam McCall [Sat, 7 May 2022 22:50:10 +0000 (00:50 +0200)]
[Frontend] when attaching a preamble, don't generate the long predefines buffer.

We know we're going to overwrite it anyway.
It'd be a bit of work to coordinate not generating it at all, but setting this
flag avoids generating ~10k of the 13k string.

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

2 years ago[analyzer] Inline operator delete when MayInlineCXXAllocator is set.
Fred Tingaud [Mon, 9 May 2022 13:08:09 +0000 (15:08 +0200)]
[analyzer] Inline operator delete when MayInlineCXXAllocator is set.

This patch restores the symmetry between how operator new and operator delete
are handled by also inlining the content of operator delete when possible.

Patch by Fred Tingaud.

Reviewed By: martong

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

2 years ago[riscv, InsertVSETVLI] Rename InstrInfo to Require to more clearly indicate purpose...
Philip Reames [Mon, 9 May 2022 13:38:58 +0000 (06:38 -0700)]
[riscv, InsertVSETVLI] Rename InstrInfo to Require to more clearly indicate purpose [nfc]

2 years agoThread safety analysis: Handle compound assignment and ->* overloads
Aaron Puchert [Mon, 9 May 2022 13:34:09 +0000 (15:34 +0200)]
Thread safety analysis: Handle compound assignment and ->* overloads

Like regular assignment, compound assignment operators can be assumed to
write to their left-hand side operand. So we strengthen the requirements
there. (Previously only the default read access had been required.)

Just like operator->, operator->* can also be assumed to dereference the
left-hand side argument, so we require read access to the pointee. This
will generate new warnings if the left-hand side has a pt_guarded_by
attribute. This overload is rarely used, but it was trivial to add, so
why not. (Supporting the builtin operator requires changes to the TIL.)

Reviewed By: aaron.ballman

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

2 years ago[clangd] Skip (most) predefined macros when scanning for preamble patching.
Sam McCall [Sat, 7 May 2022 21:40:27 +0000 (23:40 +0200)]
[clangd] Skip (most) predefined macros when scanning for preamble patching.

This is unneccesary work.
With this change, we skip generating and lexing ~10k of predefines twice.

A dumb benchmark of building a preamble for an empty file in a loop shows:
 - before: 1.90ms/run
 - after: 1.36ms/run
So this should be worth 0.5ms for each AST build and code completion.

There can be a functional difference, but it's very minor.
If the preamble contains e.g. `#ifndef __llvm__ ... #endif` then before we would
not take it. After this change we will take the branch (single-file mode takes
all branches with unknown conditions) and so gather different directives.

However I think this is negligible:
 - this is already true of non-builtin macros (from included headers).
   We've had no complaints.
 - this affects the baseline and modified in the same way, so only makes a
   difference transiently when code guarded by such an #ifdef is being edited

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

2 years ago"Re-apply 4b6c2cd642 "Deferred Concept Instantiation Implementation""""
Erich Keane [Thu, 5 May 2022 15:35:13 +0000 (08:35 -0700)]
"Re-apply 4b6c2cd642 "Deferred Concept Instantiation Implementation""""

This includes a fix for the libc++ issue I ran across with friend
declarations not properly being identified as overloads.

This reverts commit 45c07db31cc76802a1a2e41bed1ce9c1b8198181.

2 years ago[flang] Fix windows bot after D125140
Jean Perier [Mon, 9 May 2022 13:23:46 +0000 (15:23 +0200)]
[flang] Fix windows bot after D125140

The ifdef is not required in the header, common::int128_t is always
defined. The function declaration must be available in lowering
regardless of the host int128_t support.

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

2 years ago[riscv] Fix state tracking bug on vsetvli (phi of vsetvli) peephole
Philip Reames [Mon, 9 May 2022 13:20:24 +0000 (06:20 -0700)]
[riscv] Fix state tracking bug on vsetvli (phi of vsetvli) peephole

This fixes the first of several cases where the state computed in phase 1 and 2 of the algorithm differs from the state computed during phase 3. Note that such differences can cause miscompiles by creating disagreements about contents of the VL and VTYPE registers at block boundaries.

In this particular case, we recognize that for the first vsetvli in a block, that if the AVL is a phi of GPR results from previous vsetvlis and the VTYPE field matches, we can avoid emitting a vsetvli as the register contents don't change. Unfortunately, the abstract state does change and that update was lost.

As noted in the test change, this can actually improve results by preserving information until later state transitions in the block. However, this minor codegen improvement is not the motivation for the patch. The motivation is to avoid cases a case where we break a key internal correctness invariant.

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

2 years ago[demangler] No need to space adjacent template closings
Nathan Sidwell [Mon, 28 Mar 2022 19:38:24 +0000 (12:38 -0700)]
[demangler] No need to space adjacent template closings

With the demangler parenthesizing 'a >> b' inside template parameters,
because C++11 parsing of >> there, we don't really need to add spaces
between adjacent template arg closing '>' chars.  In 2022, that just
looks odd.

Reviewed By: MaskRay

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

2 years ago[DAG] Use isAnyConstantBuildVector. NFC
David Green [Mon, 9 May 2022 13:13:03 +0000 (14:13 +0100)]
[DAG] Use isAnyConstantBuildVector. NFC

As suggested from 02f8519502447de, this uses the
isAnyConstantBuildVector method in lieu of separate
isBuildVectorOfConstantSDNodes calls. It should
otherwise be an NFC.

2 years ago[ScalarEvolution] Fold %x umin_seq %y if %x cannot be zero
Nikita Popov [Mon, 9 May 2022 13:01:27 +0000 (15:01 +0200)]
[ScalarEvolution] Fold %x umin_seq %y if %x cannot be zero

Fold %x umin_seq %y to %x umin %y if %x cannot be zero. They only
differ in semantics for %x==0.

More generally %x *_seq %y folds to %x * %y if %x cannot be the
saturation fold (though currently we only have umin_seq).

2 years ago[X86] Replace avx512f integer mul reduction builtins with generic builtin
Simon Pilgrim [Mon, 9 May 2022 13:10:17 +0000 (14:10 +0100)]
[X86] Replace avx512f integer mul reduction builtins with generic builtin

D117829 added the generic "__builtin_reduce_mul" which we can use to replace the x86 specific integer mul reduction builtins - internally these were mapping to the same intrinsic already so there are no test changes required.

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

2 years ago[ScalarEvolution] Add tests for umin_seq with non-zero operand (NFC)
Nikita Popov [Mon, 9 May 2022 13:02:41 +0000 (15:02 +0200)]
[ScalarEvolution] Add tests for umin_seq with non-zero operand (NFC)

2 years ago[AArch64][SVE] Improve codegen when extracting first lane of active lane mask
Rosie Sumpter [Mon, 9 May 2022 08:35:13 +0000 (09:35 +0100)]
[AArch64][SVE] Improve codegen when extracting first lane of active lane mask

When extracting the first lane of a predicate created using the
llvm.get.active.lane.mask intrinsic, it should give the same codegen as
when the predicate is created using the llvm.aarch64.sve.whilelo
intrinsic, since get.active.lane.mask is lowered to whilelo. This patch
ensures the codegen is the same by recognizing
llvm.get.active.lane.mask as a flag-setting operation in this case.

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

2 years ago[clangd] Rewrite TweakTesting helpers to avoid reparsing the same code. NFC
Sam McCall [Fri, 6 May 2022 17:51:59 +0000 (19:51 +0200)]
[clangd] Rewrite TweakTesting helpers to avoid reparsing the same code. NFC

Previously the EXPECT_AVAILABLE macros would rebuild the code at each marked
point, by expanding the cases textually.
There were often lots, and it's nice to have lots!

This reduces total unittest time by ~10% on my machine.
I did have to sacrifice a little apply() coverage in AddUsingTests (was calling
expandCases directly, which was otherwise unused), but we have
EXPECT_AVAILABLE tests covering that, I don't think there's real risk here.

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

2 years agoRecommit "[SimpleLoopUnswitch] Collect either logical ANDs/ORs but not both."
Florian Hahn [Mon, 9 May 2022 12:49:12 +0000 (13:49 +0100)]
Recommit "[SimpleLoopUnswitch] Collect either logical ANDs/ORs but not both."

This reverts commit 7211d5ce07830ebfa2cfc30818cd7155375f7e47.

This version fixes a crash that caused buildbot failures with the first
version.

2 years ago[SimpleLoopUnswitch] Add test case for crash with db7a87ed4fa7.
Florian Hahn [Mon, 9 May 2022 12:48:56 +0000 (13:48 +0100)]
[SimpleLoopUnswitch] Add test case for crash with db7a87ed4fa7.

2 years ago[clangd] Skip extra round-trip in parsing args in debug builds. NFC
Sam McCall [Sat, 7 May 2022 15:31:52 +0000 (17:31 +0200)]
[clangd] Skip extra round-trip in parsing args in debug builds. NFC

This is a clever cross-cutting sanity test for clang's arg parsing I suppose.
But clangd creates thousands of invocations, ~all with identical trivial
arguments, and problems with these would be caught by clang's tests.
This overhead accounts for 10% of total unittest time!

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

2 years ago[clangd] Disable predefined macros in tests. NFC
Sam McCall [Sat, 7 May 2022 17:02:29 +0000 (19:02 +0200)]
[clangd] Disable predefined macros in tests. NFC

These aren't needed. With them the generated predefines buffer is 13KB.
For every TestTU, we must:
 - generate the buffer (3 times: parsing preamble, scanning preamble, main file)
 - parse the buffer (again 3 times)
 - serialize all the macros it defines in the PCH
 - compress the buffer itself to write it into the PCH
 - decompress it from the PCH

Avoiding this reduces unit test time by ~25%.

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

2 years ago[NFC][LoopVectorize] Add SVE test for tail-folding combined with interleaving
David Sherwood [Thu, 5 May 2022 08:48:31 +0000 (09:48 +0100)]
[NFC][LoopVectorize] Add SVE test for tail-folding combined with interleaving

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

2 years ago[demangler] Buffer peeking needs buffer
Nathan Sidwell [Mon, 28 Mar 2022 19:38:48 +0000 (12:38 -0700)]
[demangler] Buffer peeking needs buffer

The output buffer has a 'back' member, which returns NUL when you try
it with an empty buffer.  But there are no use cases that need that
additional functionality.  This makes the 'back' member behave more
like STL containers' back members.  (It still returns a value, not a
reference.)

Reviewed By: dblaikie

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

2 years ago[Clang] Add integer mul reduction builtin
Simon Pilgrim [Mon, 9 May 2022 10:53:27 +0000 (11:53 +0100)]
[Clang] Add integer mul reduction builtin

Similar to the existing bitwise reduction builtins, this lowers to a llvm.vector.reduce.mul intrinsic call.

For other reductions, we've tried to share builtins for float/integer vectors, but the fmul reduction intrinsic also take a starting value argument and can either do unordered or serialized, but not reduction-trees as specified for the builtins. However we address fmul support this shouldn't affect the integer case.

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

2 years ago[clang-tidy][NFC] Replace many instances of std::string where a StringRef would suffice.
Nathan James [Mon, 9 May 2022 11:01:45 +0000 (12:01 +0100)]
[clang-tidy][NFC] Replace many instances of std::string where a StringRef would suffice.

There's many instances in clang tidy checks where owning strings are used when we already have a stable string from the options, so using a StringRef makes much more sense.

Reviewed By: aaron.ballman

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