platform/upstream/llvm.git
19 months ago[libc][math] Implement full multiplication and quick_mul_hi for UInt class.
Tue Ly [Wed, 23 Nov 2022 04:39:17 +0000 (23:39 -0500)]
[libc][math] Implement full multiplication and quick_mul_hi for UInt class.

Implement full multiplication `UInt<A> * UInt<B> -> UInt<A + B>` and
`quick_mul_hi` that returns the higher half of the product `UInt<A> * UInt<A>`.
These 2 functions will be used for dyadic floating point class.

Reviewed By: sivachandra

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

19 months agoLeave DW_OP_addr addresses as load addresses in DWARFExpression
Jason Molenda [Fri, 2 Dec 2022 22:39:41 +0000 (14:39 -0800)]
Leave DW_OP_addr addresses as load addresses in DWARFExpression

DWARFExpression::Evaluate will convert DW_OP_addr addresses in
a DWARF expression into load addresses on the expression stack
when there is a StackFrame in the ExecutionContext, this from
a change in 2018 in https://reviews.llvm.org/D46362.  At the
time this was handling a case that came up in swift programs,
and is no longer necessary.  I generalized this conversion to
a load address when a Target is available in
https://reviews.llvm.org/D137682 to make a test case possible;
this change broke a use case that Ted reported.

This change removes my test case, and removes this conversion
of a DW_OP_addr into a load address in some instances.

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

19 months ago[libc] Skip tests that depend on undefined targets
Joseph Huber [Fri, 2 Dec 2022 19:30:35 +0000 (13:30 -0600)]
[libc] Skip tests that depend on undefined targets

When we search through the dependencies for a test we somtimes query
`get_target_property` on a target that has not been defined. This is the
case for targets that have minimal entrypoints defined such as the WIP
GPU target. This patch changes all tests whose dependencies are
undefined to be skipped entirely.

Reviewed By: sivachandra, lntue, michaelrj

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

19 months ago[flang] Disallow NULL() as an expression where it cannot appear
Peter Klausler [Thu, 3 Nov 2022 23:17:00 +0000 (16:17 -0700)]
[flang] Disallow NULL() as an expression where it cannot appear

A NULL() pointer is generally not a valid expression (as opposed to
a variable) apart from some initialization contexts and some actual
arguments.

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

19 months agoReland "[clang][deps] During scanning don't emit warnings-as-errors that are ignored...
Volodymyr Sapsai [Fri, 2 Dec 2022 22:30:41 +0000 (14:30 -0800)]
Reland "[clang][deps] During scanning don't emit warnings-as-errors that are ignored with diagnostic pragmas."

This reverts commit 2f8ac1804827026b44f429dce02730da18a73c50.

After committing a fix for previous buildbot failures in D138970,
re-landing the original change.

19 months ago[ModuleInliner] Add MLPriority
Kazu Hirata [Fri, 2 Dec 2022 22:25:13 +0000 (14:25 -0800)]
[ModuleInliner] Add MLPriority

This patch adds MLPriority as the first step toward the ML-based
function inlining with the module inliner.

For now, MLPriority is completely identical to CostPriority.

Once this patch lands, I'm planning to:

- integrate NoInferenceModelRunner,

- memoize the priority computation so that the priority remains the
  same for given values of metrics even with the noise injected during
  training, and

- port/take more features into account.

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

19 months agoFix some test files with executable permissions
Matt Arsenault [Fri, 2 Dec 2022 21:45:18 +0000 (16:45 -0500)]
Fix some test files with executable permissions

19 months ago[flang] Change error to portability warning
Peter Klausler [Wed, 2 Nov 2022 22:32:17 +0000 (15:32 -0700)]
[flang] Change error to portability warning

The standard does *not* require that a real or imaginary part of a complex
literal constant be a scalar if it is a named constant.  Downgrade a
recently installed check to a portability warning, and document it.

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

19 months ago[mlir][docs] Group the docs for defining dialect components
River Riddle [Mon, 7 Nov 2022 23:35:43 +0000 (15:35 -0800)]
[mlir][docs] Group the docs for defining dialect components

This moves the documentation for defining dialects, attributes/types,
and operations into a new `DefiningDialects` folder. This helps to
keep the documentation grouped together, making it easier to find
related documentation.

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

19 months ago[Inline] Add a basic test for the module inliner
Kazu Hirata [Fri, 2 Dec 2022 21:37:57 +0000 (13:37 -0800)]
[Inline] Add a basic test for the module inliner

The new test ensures that the module inliner works with all currently
supported priority modes.

Different priority modes result in no difference in terms of the
output for these simple cases, so this is more of a "better than
nothing" test.

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

19 months ago[mlir] Remove support for non-prefixed accessors
River Riddle [Wed, 26 Oct 2022 01:29:53 +0000 (18:29 -0700)]
[mlir] Remove support for non-prefixed accessors

This finishes off a year long pursuit to LLVMify the generated
operation accessors, prefixing them with get/set. Support for
any other accessor naming is fully removed after this commit.

https://discourse.llvm.org/t/psa-raw-accessors-are-being-removed/65629

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

19 months ago[Hexagon] Remove most Optionals in favor of std::optional
Krzysztof Parzyszek [Fri, 2 Dec 2022 21:30:14 +0000 (13:30 -0800)]
[Hexagon] Remove most Optionals in favor of std::optional

19 months ago[ModuleInliner] Initialize variables (NFC)
Kazu Hirata [Fri, 2 Dec 2022 21:31:13 +0000 (13:31 -0800)]
[ModuleInliner] Initialize variables (NFC)

This patch initializes all class variables in InlineOrder.cpp for
safety just in case we miss them in constructors.  Currently, all
these variables are properly initialized in their respective
constructors.

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

19 months ago[mlir] Factor more common utils to IndexingUtils
Hanhan Wang [Fri, 2 Dec 2022 01:04:09 +0000 (17:04 -0800)]
[mlir] Factor more common utils to IndexingUtils

Reviewed By: mravishankar

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

19 months agoAArch64/GlobalISel: Convert tests to opaque pointers
Matt Arsenault [Fri, 2 Dec 2022 20:45:38 +0000 (15:45 -0500)]
AArch64/GlobalISel: Convert tests to opaque pointers

inttoptr_add.ll had a mangled bitcast constantexpr.
translate-gep.ll: Restored a 0 GEP

19 months agoGlobalISel: Replace bitcast test pointer usage
Matt Arsenault [Fri, 2 Dec 2022 20:46:37 +0000 (15:46 -0500)]
GlobalISel: Replace bitcast test pointer usage

This won't be meaningful with opaque pointers (I guess we could leave
a ptr to ptr bitcast, or allow same sized address space bitcasts).

19 months agoAArch64/GlobalISel: Regenerate test checks
Matt Arsenault [Fri, 2 Dec 2022 20:39:59 +0000 (15:39 -0500)]
AArch64/GlobalISel: Regenerate test checks

Try to shrink the diff in the opaque pointer conversion. Had to work
around some update_mir_test_checks bugs. It seems to struggle when the
successor list is empty around the blank line checks it inserts.

19 months ago[flang] Don't emit spurious error for polymorphic actual argument in PURE
Peter Klausler [Wed, 2 Nov 2022 18:11:23 +0000 (11:11 -0700)]
[flang] Don't emit spurious error for polymorphic actual argument in PURE

Definability checking is unconditionally flagging the use of a polymorphic
variable as an actual argument for a procedure reference in a PURE subprogram
unless the corresponding dummy is INTENT(IN).  This isn't necessary, since
an INTENT(OUT) polymorphic dummy is already caught as an error in the definition
of the callee, which must also be PURE; and an INTENT(IN OUT) or intent-free
dummy is allowed to be passed a polymorphic actual in a PURE context, with
any attempt to deallocate it being caught in the callee.

So add a flag to the definability checker to disable the "polymorphic
definition in PURE context" check when using it to check actual arguments.

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

19 months ago[flang][examples] Fix usage of EnumToString()
Peter Klausler [Fri, 2 Dec 2022 21:14:49 +0000 (13:14 -0800)]
[flang][examples] Fix usage of EnumToString()

EnumToString() now returns a string_view; usage in
  examples/FlangOmpReport/FlangOmpReportVisitor.cpp
needs to be updated.  Pushing without review to get
flang build bots back up.

19 months ago[clang][deps] Fix test failures on AIX
Jan Svoboda [Fri, 2 Dec 2022 21:09:50 +0000 (13:09 -0800)]
[clang][deps] Fix test failures on AIX

19 months agoRevert "[mlir][tensor] Fold rank-reducing extract_slice with inverse expand_shape"
Matthias Springer [Fri, 2 Dec 2022 20:22:20 +0000 (21:22 +0100)]
Revert "[mlir][tensor] Fold rank-reducing extract_slice with inverse expand_shape"

This reverts commit a076f57a1a6b6d775aa4f11ac678d1c43ab33fb1.

19 months agoRevert "[mlir][tensor] Fold rank-reducing insert_slice with inverse collapse_shape"
Matthias Springer [Fri, 2 Dec 2022 20:22:04 +0000 (21:22 +0100)]
Revert "[mlir][tensor] Fold rank-reducing insert_slice with inverse collapse_shape"

This reverts commit 1522a3b7b34b41cf0b17678e4a8687797f44a3f0.

19 months agoGlobalIFunc: Make allowed constant expressions stricter
Matt Arsenault [Thu, 24 Nov 2022 02:23:47 +0000 (21:23 -0500)]
GlobalIFunc: Make allowed constant expressions stricter

This was allowing getelementptr with offsets, which doesn't make
sense. My initial attempt to use stripPointerCasts broke a few tests
involving aliases; add a new targeted verifier test for aliases.

This also provides the fix from D138537 for free, and also adds
support for addrspacecast (D138538) for free. Merge the tests in from
those.

I'm not really sure why findBaseObject exists; it seems redundant with
stripPointerCasts* (I'm also not really sure why getelementptrs are
allowed off of functions).

19 months agoSROA: Simplify addrspacecasted allocas with volatile accesses
Matt Arsenault [Sat, 15 Jun 2019 19:25:28 +0000 (15:25 -0400)]
SROA: Simplify addrspacecasted allocas with volatile accesses

If the alloca is accessed through an addrspacecasted pointer, allow
the normal changes on the alloca. Cast back to the original use
address space instead of the new alloca's natural address space.

19 months agoSanitizers: Convert SanitizerBinaryMetadata tests to opaque pointers
Matt Arsenault [Sun, 27 Nov 2022 21:01:51 +0000 (16:01 -0500)]
Sanitizers: Convert SanitizerBinaryMetadata tests to opaque pointers

19 months agoSymbolRewriter: Convert test to opaque pointers
Matt Arsenault [Sun, 27 Nov 2022 18:49:08 +0000 (13:49 -0500)]
SymbolRewriter: Convert test to opaque pointers

19 months agoGlobalSplit: Convert tests to opaque pointers
Matt Arsenault [Sun, 27 Nov 2022 00:21:01 +0000 (19:21 -0500)]
GlobalSplit: Convert tests to opaque pointers

19 months ago[libc++][NFC] Fix typo in comment
Louis Dionne [Fri, 2 Dec 2022 20:20:15 +0000 (12:20 -0800)]
[libc++][NFC] Fix typo in comment

19 months ago[flang] Restore C702 check for ProcEntity symbols
Peter Klausler [Wed, 2 Nov 2022 16:59:10 +0000 (09:59 -0700)]
[flang] Restore C702 check for ProcEntity symbols

A recent change moved some checking code from name resolution into
declaration checking, and inadvertently disabled C702 checking for
procedure entities.  Fix.

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

19 months ago[clang][Driver] Don't overwrite `DiagnosticsEngine::IgnoreAllWarnings`, rely on ...
Volodymyr Sapsai [Wed, 30 Nov 2022 01:49:40 +0000 (17:49 -0800)]
[clang][Driver] Don't overwrite `DiagnosticsEngine::IgnoreAllWarnings`, rely on `DiagnosticOptions::IgnoreWarnings` value.

Driver overwrites `DiagnosticsEngine::IgnoreAllWarnings` based on `-w` flag
without taking into account `DiagnosticOptions::IgnoreWarnings` that is
propagated to `DiagnosticsEngine` in `ProcessWarningOptions` (called from
`CompilerInstance::createDiagnostics`). It makes it hard to manipulate
`DiagnosticOptions` directly and pushes towards string-based API.

Most of in-tree tools use `DiagnosticOptions` already, so migrate
`clang_parseTranslationUnit_Impl` to use it too. Don't parse `-w`
directly but rely on
```
def w : Flag<["-"], "w">, HelpText<"Suppress all warnings">, Flags<[CC1Option]>,
  MarshallingInfoFlag<DiagnosticOpts<"IgnoreWarnings">>;
```

Allows to reland D138252.

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

19 months ago[RISCV] Fold low 12 bits into instruction during frame index elimination
Philip Reames [Fri, 2 Dec 2022 19:45:53 +0000 (11:45 -0800)]
[RISCV] Fold low 12 bits into instruction during frame index elimination

Fold the low 12 bits of an immediate offset into the offset field of the using instruction. That using instruction will be a load, store, or addi which performs an add of a signed 12-bit immediate as part of it's operation. Splitting out the low bits allows the high bits to be generated via a single LUI instead of needing an LUI/ADDI pair.

The codegen effect of this is mostly converting cases where "split addi" kicks in to using LUI + a folded offset. There are a couple of straight dynamic instruction count wins, and using a canonical LUI is probably better than a chain of SP adds if the dynamic instruction count is equal.

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

19 months agoTargetTransformInfo: convert Optional to std::optional
Krzysztof Parzyszek [Fri, 2 Dec 2022 17:35:05 +0000 (09:35 -0800)]
TargetTransformInfo: convert Optional to std::optional

Recommit: added missing "#include <cstdint>".

19 months agoDon't revisit the subexpressions of PseudoObjectExpr when building a
Akira Hatanaka [Fri, 2 Dec 2022 19:41:09 +0000 (11:41 -0800)]
Don't revisit the subexpressions of PseudoObjectExpr when building a
ParentMap

The assertion that is removed in this patch was failing when ObjC dot
notation expressions appear in both sides of an assignment (see the test
case in arc-repeated-weak.mm). Visit the PseudoObjectExpr once when the
syntactic expression is visited and return without visiting the
subexpressions when it's visited again when the semantic expressions are
visited.

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

19 months agoRevert "TargetTransformInfo: convert Optional to std::optional"
Krzysztof Parzyszek [Fri, 2 Dec 2022 19:33:24 +0000 (11:33 -0800)]
Revert "TargetTransformInfo: convert Optional to std::optional"

This reverts commit b83711248cb12639e7ef7303cfbb4452b4067e85.

Some buildbots are failing.

19 months agoMake -fsanitize=scudo use scudo_standalone. Delete check-scudo.
Mitch Phillips [Thu, 1 Dec 2022 23:35:04 +0000 (15:35 -0800)]
Make -fsanitize=scudo use scudo_standalone. Delete check-scudo.

Leaves the implementation and tests files in-place for right now, but
deletes the ability to build the old sanitizer-common based scudo. This
has been on life-support for a long time, and the newer scudo_standalone
is much better supported and maintained.

Also patches up some GWP-ASan wording, primarily related to the fact
that -fsanitize=scudo now is scudo_standalone, and therefore the way to
reference the GWP-ASan options through the environment variable has
changed.

Future follow-up patches will delete the original scudo, and migrate all
its tests over to be part of the scudo_standalone test suite.

Reviewed By: vitalybuka

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

19 months agoTargetTransformInfo: convert Optional to std::optional
Krzysztof Parzyszek [Fri, 2 Dec 2022 17:35:05 +0000 (09:35 -0800)]
TargetTransformInfo: convert Optional to std::optional

19 months ago[mlir][sparse] LICM for SparseTensorReader::readCOO
wren romano [Fri, 2 Dec 2022 02:29:22 +0000 (18:29 -0800)]
[mlir][sparse] LICM for SparseTensorReader::readCOO

This commit performs two related changes.  First we adjust `readCOOValue` to take the `IsPattern` bool as a template parameter rather than a function argument.  Second we factor `readCOOLoop` out from `readCOO`, and template it on `IsPattern` and `IsSymmetric`.  Together this moves all the assertions and header-dependent conditionals out of the main for-loop of `readCOO`.  The only remaining conditional is in the `IsSymmetric=true` variant: checking whether the element is on the diagonal or not (which cannot be lifted out of the loop).

Depends On D138363

Reviewed By: aartbik

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

19 months ago[flang] Check discrepancies between local & available global subprograms
Peter Klausler [Thu, 1 Dec 2022 00:11:20 +0000 (16:11 -0800)]
[flang] Check discrepancies between local & available global subprograms

When a scope declares the name and perhaps some characteristics of
an external subprogram using any of the many means that Fortran supplies
for doing such a thing, and that external subprogram's definition is
available, check the local declaration against the external definition.
In particular, if the global definition's interface cannot be called
by means of an implicit interface, ensure that references are via an
explicit and compatible interface.

Further, extend call site checking so that when a local declaration
exists for a known global symbol and the arguments are valid for that
local declaration, the arguments are checked against the global's
interface, just are is already done when no local declaration exists.

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

19 months ago[mlir][sparse] Breaking up openSparseTensor to better support non-permutations
wren romano [Fri, 2 Dec 2022 02:18:33 +0000 (18:18 -0800)]
[mlir][sparse] Breaking up openSparseTensor to better support non-permutations

This commit updates how the `SparseTensorConversion` pass handles `NewOp`.  It breaks up the underlying `openSparseTensor` function into two parts (`SparseTensorReader::create` and `SparseTensorReader::readSparseTensor`) so that the pass can inject code for constructing `lvlSizes` between those two parts.  Migrating the construction of `lvlSizes` out of the runtime and into the pass is a necessary first step toward fully supporting non-permutations.  (The alternative would be for the pass to generate a `FuncOp` for performing the construction and then passing that to the runtime; which doesn't seem to have any benefits over the design of this commit.)  And since the pass now generates the code to call these two functions, this change also removes the `Action::kFromFile` value from the enum used by `_mlir_ciface_newSparseTensor`.

Reviewed By: aartbik

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

19 months ago[AsmPrinter] .addrsig_sym: remove isTransitiveUsedByMetadataOnly
Fangrui Song [Fri, 2 Dec 2022 19:05:43 +0000 (19:05 +0000)]
[AsmPrinter] .addrsig_sym: remove isTransitiveUsedByMetadataOnly

With D135642 ignoring unregistered symbols, isTransitiveUsedByMetadataOnly added
by D101512 is no longer needed (the operation is potentially slow). There is a
`.addrsig_sym` directive for an only-used-by-metadata symbol but it does not
emit an entry.

Reviewed By: rnk

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

19 months ago[Driver] -p: change from unused warning to error for most targets
Fangrui Song [Fri, 2 Dec 2022 18:57:48 +0000 (18:57 +0000)]
[Driver] -p: change from unused warning to error for most targets

AIX and OpenBSD seem to use -p. For most targets (at least FreeBSD and Linux),
-p is legacy (GCC freebsd has a warning). We don't want the uses to grow, so
making -p an alias for -pg is not recommended. I think the uses are small.

Reviewed By: mgorny

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

19 months ago[PGO][indirect-call-promotion] Add extra parameter check for musttail callsite
Rong Xu [Fri, 2 Dec 2022 18:22:07 +0000 (10:22 -0800)]
[PGO][indirect-call-promotion] Add extra parameter check for musttail callsite

Indirect-call-promtion for musttail callsite needs stricter type check
with parameter. This patch adds the needed extra parameter type check.

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

19 months agoReapply "[clang][modules][deps] Including module maps are affecting"
Jan Svoboda [Fri, 2 Dec 2022 18:45:20 +0000 (10:45 -0800)]
Reapply "[clang][modules][deps] Including module maps are affecting"

This reverts commit f0ce827c6972009c5052f8447c6aadf4e4be6113.
This reapplies commit 83973cf157f7850eb133a4bbfa0f8b7958bad215.
The new test now should pass on Windows thanks to commit 4d6483e91bb8f4147ff4001e6a11e373d5198e1c.

19 months ago[lldb/unittests/CMakeLists.txt] Remove extra compiler flag `-include gtest_common...
Argyrios Kyrtzidis [Thu, 1 Dec 2022 00:12:35 +0000 (16:12 -0800)]
[lldb/unittests/CMakeLists.txt] Remove extra compiler flag `-include gtest_common.h`, NFC

This doesn't seem to be necessary anymore so remove it to be more consistent with rest of the LLVM projects
that don't use prefix headers.

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

19 months ago[flang] Accommodate unknowable CHARACTER length in evaluate::ArrayConstructor<>
Peter Klausler [Mon, 24 Oct 2022 17:14:03 +0000 (10:14 -0700)]
[flang] Accommodate unknowable CHARACTER length in evaluate::ArrayConstructor<>

The internal representation for array constructors in expressions during semantic
analysis needs to be able to accommodate circumstances (e.g. TRIM(), substrings)
in which the length of the elements in the array is either unknown or cannot be
represented as a context-free integer expression.

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

19 months agoReapply "[clang][modules][deps] Parent module maps are affecting"
Jan Svoboda [Fri, 2 Dec 2022 18:26:23 +0000 (10:26 -0800)]
Reapply "[clang][modules][deps] Parent module maps are affecting"

This reverts commit 67f34054d6ea8e40fd10cb74441d5ccab004c75b.
This reapplies commit f99e5a9106f08ad92a22c3b114d2052e5c502924.
This improves commit 8ab388e158528d9af5eb0376ef698b243d946f19 that unsucessfully attempted to forward-fix Windows test failure.

19 months ago[lldb] Fix the `dwarf` log descriptions
Argyrios Kyrtzidis [Thu, 1 Dec 2022 00:36:00 +0000 (16:36 -0800)]
[lldb] Fix the `dwarf` log descriptions

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

19 months ago[InstCombine] Precommit tests for D139076; NFC
chenglin.bi [Fri, 2 Dec 2022 18:01:47 +0000 (02:01 +0800)]
[InstCombine] Precommit tests for D139076; NFC

19 months ago[flang] Restore ENUM_CLASS() to be compilation-time code
Peter Klausler [Fri, 11 Nov 2022 01:29:29 +0000 (17:29 -0800)]
[flang] Restore ENUM_CLASS() to be compilation-time code

Rework some recent changes to the ENUM_CLASS() macro so that
all of the construction of enumerator-to-name string mapping
data structures is again performed at compilation time.

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

19 months ago[lit][AIX] Convert clang tests to use 'target={{.*}}-aix{{.*}}'
Paul Robinson [Fri, 4 Nov 2022 15:36:00 +0000 (08:36 -0700)]
[lit][AIX] Convert clang tests to use 'target={{.*}}-aix{{.*}}'

Part of the project to eliminate special handling for triples in lit
expressions.

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

19 months ago[lit][AIX] Convert llvm tests to use 'target={{.*}}-aix{{.*}}'
Paul Robinson [Fri, 4 Nov 2022 15:35:11 +0000 (08:35 -0700)]
[lit][AIX] Convert llvm tests to use 'target={{.*}}-aix{{.*}}'

Part of the project to eliminate special handling for triples in lit
expressions.

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

19 months ago[Flang][Driver] Handle target CPU and features
Usman Nadeem [Wed, 30 Nov 2022 21:15:43 +0000 (13:15 -0800)]
[Flang][Driver] Handle target CPU and features

This patch:

- Adds target-feature and target-cpu to FC1Options.
- Moves getTargetFeatures() from Clang.cpp to CommonArgs.cpp.
- Processes target cpu and features in the flang driver. Right now
  features are only added for AArch64/x86 because I only did basic
  testing on them but it should generally work for others as well.
  Option handling is similar to clang.
- Adds appropriate structures in TargetOptions and passes them to
  the target machine.

What's missing:

- Adding the CPU info and the features as attributes in the LLVM IR
  module.
- Processing target specific flags, e.g. SVE vector bits for AArch64,
  ABI etc.

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

Change-Id: Ib081a74ea98617674845518a5d2754edba596418

19 months agoLink with missing libs to fix broken shared unittest build
Jun Zhang [Fri, 2 Dec 2022 17:10:13 +0000 (01:10 +0800)]
Link with missing libs to fix broken shared unittest build

Oops, I think we should link with this as well.

Signed-off-by: Jun Zhang <jun@junz.org>
19 months ago[flang] fix unused-but-set-parameter warning in ConvertExprToHLFIR.cpp
Jean Perier [Fri, 2 Dec 2022 16:57:01 +0000 (17:57 +0100)]
[flang] fix unused-but-set-parameter warning in ConvertExprToHLFIR.cpp

Some named value operands are not used yet (TODOs). Some compilers
complain about it. Remove names of unused parameters.

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

19 months ago[mlir][Linalg] NFC - Purge OpBuilder uses in favor of RewriterBase in places unrelate...
Nicolas Vasilache [Sun, 13 Nov 2022 23:20:44 +0000 (15:20 -0800)]
[mlir][Linalg] NFC - Purge OpBuilder uses in favor of RewriterBase in places unrelated to op definitions

RewriterBase is the proper builder to use so one can listen to IR modifications (i.e. not just creation).

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

19 months agoLink with missing libs to fix broken shared build
Jun Zhang [Fri, 2 Dec 2022 15:34:59 +0000 (23:34 +0800)]
Link with missing libs to fix broken shared build

Signed-off-by: Jun Zhang <jun@junz.org>
Differential Revision: https://reviews.llvm.org/D139202

19 months ago[lldb] fix license header in TraceHTR.h
Pietro Albini [Thu, 17 Nov 2022 14:32:38 +0000 (15:32 +0100)]
[lldb] fix license header in TraceHTR.h

It seems like the license header got mangled somehow, joining multiple
lines together and splitting some lines across multiple ones. That is
causing errors in a license checker I'm using (called REUSE).

This commit restores the license header to the format used by the rest
of the files in the project.

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

19 months ago[bazel] Add a missing dependency after 786cbb09ed
Benjamin Kramer [Fri, 2 Dec 2022 15:56:05 +0000 (16:56 +0100)]
[bazel] Add a missing dependency after 786cbb09ed

19 months agoRe-apply "[mlir][MemRefToLLVM] Remove the code for lowering subview"
Quentin Colombet [Fri, 2 Dec 2022 14:41:29 +0000 (14:41 +0000)]
Re-apply "[mlir][MemRefToLLVM] Remove the code for lowering subview"

This reverts commit d0650d108929985760d536d59e9927838dccc9b8.

Original commit message:
Subviews are supposed to be expanded before we hit the lowering
code.
The expansion is done with the pass called
expand-strided-metadata.

Add a test that demonstrate how these passes can be linked up to achieve
the desired lowering.

This patch is NFC in spirit but not in practice because `subview` gets
lowered into `reinterpret_cast(extract_strided_metadata, <some math>)`
which lowers in two memref descriptors (one for `reinterpert_cast` and
one for `extract_strided_metadata`), which creates some noise of the
form: `extractvalue(unrealized_cast(extractvalue[0]))[0]` that is
currently not simplified within MLIR but that is really just noop in
that case.

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

19 months ago[flang] Lower conversions to HLFIR
Jean Perier [Fri, 2 Dec 2022 15:19:30 +0000 (16:19 +0100)]
[flang] Lower conversions to HLFIR

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

19 months ago[SDAG] bail out of mergeTruncStores() if there's any other use in the chain
Sanjay Patel [Fri, 2 Dec 2022 14:18:11 +0000 (09:18 -0500)]
[SDAG] bail out of mergeTruncStores() if there's any other use in the chain

This fixes the miscompile in issue #58883.

The test demonstrates that we gave up on store merging in that example.

This change should be strictly safe (just adds another clause
to avoid the transform), and it does not prohibit any existing
valid optimizations based on regression tests. I want to believe
that it's also a sufficient fix (possibly overkill), but I'm not
sure how to prove that.

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

19 months ago[AMDGPU] Scheduler: Don't revert the schedule if the register pressure isn't changed...
Valery Pykhtin [Mon, 17 Oct 2022 11:30:45 +0000 (13:30 +0200)]
[AMDGPU] Scheduler: Don't revert the schedule if the register pressure isn't changed for a region

This one-linear fix improves compilation time for about ~40% on ASAN enabled code.

Reviewed By: arsenm

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

19 months ago[flang] Perform assignment to polymorphic allocatable with runtime call
Valentin Clement [Fri, 2 Dec 2022 14:51:01 +0000 (15:51 +0100)]
[flang] Perform assignment to polymorphic allocatable with runtime call

Lower assignment to polymorphic allocatable to the `Assign` runtime
call.

Reviewed By: jeanPerier

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

19 months ago[mlir][bufferization] Make `TensorCopyInsertionPass` a test pass
Matthias Springer [Fri, 2 Dec 2022 10:46:14 +0000 (11:46 +0100)]
[mlir][bufferization] Make `TensorCopyInsertionPass` a test pass

TensorCopyInsertion should not have been exposed as a pass. This was a flaw in the original design. It is a preparation step for bufferization and certain transforms (that would otherwise be legal) are illegal between TensorCopyInsertion and actual rewrite to MemRef ops. Therefore, even if broken down as two separate steps internally, they should be exposed as a single pass.

This change affects the sparse compiler, which uses `TensorCopyInsertionPass`. A new `SparsificationAndBufferizationPass` is added to replace all passes in the sparse tensor pipeline from `TensorCopyInsertionPass` until the actual bufferization (rewrite to memref/non-tensor). It is generally unsafe to run arbitrary passes in-between, in particular passes that hoist tensor ops out of loops or change SSA use-def chains along tensor ops.

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

19 months ago[DSE] Use precise loc for memcpy_chk during overwrite checks.
Florian Hahn [Fri, 2 Dec 2022 14:34:34 +0000 (14:34 +0000)]
[DSE] Use precise loc for memcpy_chk during overwrite checks.

Extends the logic from D115167 to memcpy_chk.

Depends on D115167

Reviewed By: asbirlea

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

19 months ago[Instcombine] Code refactors for foldSelectOpOp; NFC
chenglin.bi [Fri, 2 Dec 2022 14:26:20 +0000 (22:26 +0800)]
[Instcombine] Code refactors for foldSelectOpOp; NFC

Reuse the code about find common operator.

Reviewed By: RKSimon

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

19 months agoRevert "[mlir][MemRefToLLVM] Remove the code for lowering subview"
Quentin Colombet [Fri, 2 Dec 2022 14:19:37 +0000 (14:19 +0000)]
Revert "[mlir][MemRefToLLVM] Remove the code for lowering subview"

This reverts commit c8e15afa4caf74f0d8281ca3e44674f1f6c1bc52.

This breaks some integration tests, see
https://lab.llvm.org/buildbot/#/builders/220/builds/10446

I have to update a bunch of RUN lines in the tests to use the new
lowering scheme. Nothing complicated but let's keep the build clean
while I'm fixing that.

19 months agoRevert "[AMDGPU] Speedup GCNDownwardRPTracker::advanceBeforeNext"
Jay Foad [Fri, 2 Dec 2022 14:07:11 +0000 (14:07 +0000)]
Revert "[AMDGPU] Speedup GCNDownwardRPTracker::advanceBeforeNext"

This reverts commit 2d09bec169277fb5a341249afacff532c7511756.

It was causing assertion failures in some out-of-tree tests.

19 months agoAttributes: convert Optional to std::optional
Krzysztof Parzyszek [Fri, 2 Dec 2022 03:50:39 +0000 (21:50 -0600)]
Attributes: convert Optional to std::optional

19 months agoRevert "[lldb][Target] Flush the scratch TypeSystem when owning lldb_private::Module...
Michael Buch [Fri, 2 Dec 2022 14:12:41 +0000 (14:12 +0000)]
Revert "[lldb][Target] Flush the scratch TypeSystem when owning lldb_private::Module gets unloaded"

This reverts commit 4df11394a10b3b15d2fb9bde8b831cf68785aa45.

19 months agoRevert "Revert "[MLIR] Introduce constraint attributes for DenseArrayAttr""
Lorenzo Chelini [Fri, 2 Dec 2022 13:50:23 +0000 (14:50 +0100)]
Revert "Revert "[MLIR] Introduce constraint attributes for DenseArrayAttr""

This reverts commit 4e6dab98e0cb60c635656a818062887d97c3ef5f.

Re-apply: D138988 after fixing error on windows. Remove test for boolean
attributes as it does not make sense to apply these constraints on
boolean array.

19 months ago[flang] add missing unreachable in D139179
Jean Perier [Fri, 2 Dec 2022 13:46:22 +0000 (05:46 -0800)]
[flang] add missing unreachable in D139179

Fix bot failure https://lab.llvm.org/buildbot/#/builders/160/builds/13647
caused by https://reviews.llvm.org/D139179.

Even if the switch is fully covering, adding an unreachable after is
required to cover all path since the switch argument could be a broken
value that does not belong to the enum.

19 months ago[flang] Lower unary operation to HLFIR
Jean Perier [Fri, 2 Dec 2022 13:22:25 +0000 (14:22 +0100)]
[flang] Lower unary operation to HLFIR

Lower not, negate, and complex component to HLFIR.
Parentheses is the only remaining operation, but needs some
care/thinking to properly deal with character/derived variables.

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

19 months ago[flang] Make SetLength TODO explicit in HLFIR
Jean Perier [Fri, 2 Dec 2022 13:21:06 +0000 (14:21 +0100)]
[flang] Make SetLength TODO explicit in HLFIR

evaluate::SetLength is the last intrinsic binary operation
that needs to be lowered to HLFIR. It will require an hlfir.set_length
op or hlfir.as_expr to convert the result to an expression. Add a TODO
for now.

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

19 months ago[flang] Lower complex constructor to HLFIR
Jean Perier [Fri, 2 Dec 2022 13:20:06 +0000 (14:20 +0100)]
[flang] Lower complex constructor to HLFIR

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

19 months ago[flang] Lower logical operations to HLFIR
Jean Perier [Fri, 2 Dec 2022 13:19:05 +0000 (14:19 +0100)]
[flang] Lower logical operations to HLFIR

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

19 months ago[flang] Lower relational to HLFIR
Jean Perier [Fri, 2 Dec 2022 13:17:55 +0000 (14:17 +0100)]
[flang] Lower relational to HLFIR

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

19 months agoRevert "Enhance stack protector for calling no return function"
Florian Hahn [Fri, 2 Dec 2022 12:58:46 +0000 (12:58 +0000)]
Revert "Enhance stack protector for calling no return function"

This reverts commit 416e8c6ad529c57f21f46c6f52ded96d3ed239fb.

This commit causes a test failure with expensive checks due to a DT
verification failure. Revert to bring bot back to green:

https://green.lab.llvm.org/green/job/clang-stage1-cmake-RA-expensive/24249/testReport/junit/LLVM/CodeGen_X86/stack_protector_no_return_ll/

+ /Users/buildslave/jenkins/workspace/clang-stage1-cmake-RA-expensive/clang-build/bin/llc /Users/buildslave/jenkins/workspace/clang-stage1-cmake-RA-expensive/llvm-project/llvm/test/CodeGen/X86/stack-protector-no-return.ll -mtriple=x86_64-unknown-linux-gnu -o -
+ /Users/buildslave/jenkins/workspace/clang-stage1-cmake-RA-expensive/clang-build/bin/FileCheck /Users/buildslave/jenkins/workspace/clang-stage1-cmake-RA-expensive/llvm-project/llvm/test/CodeGen/X86/stack-protector-no-return.ll
DominatorTree is different than a freshly computed one!
Current:
=============================--------------------------------
Inorder Dominator Tree: DFSNumbers invalid: 0 slow queries.
  [1] %entry {4294967295,4294967295} [0]
    [2] %unreachable {4294967295,4294967295} [1]
    [2] %lpad {4294967295,4294967295} [1]
      [3] %invoke.cont {4294967295,4294967295} [2]
        [4] %invoke.cont2 {4294967295,4294967295} [3]
        [4] %SP_return3 {4294967295,4294967295} [3]
        [4] %CallStackCheckFailBlk2 {4294967295,4294967295} [3]
      [3] %lpad1 {4294967295,4294967295} [2]
        [4] %eh.resume {4294967295,4294967295} [3]
          [5] %SP_return6 {4294967295,4294967295} [4]
          [5] %CallStackCheckFailBlk5 {4294967295,4294967295} [4]
        [4] %terminate.lpad {4294967295,4294967295} [3]
          [5] %SP_return9 {4294967295,4294967295} [4]
          [5] %CallStackCheckFailBlk8 {4294967295,4294967295} [4]
    [2] %SP_return {4294967295,4294967295} [1]
    [2] %CallStackCheckFailBlk {4294967295,4294967295} [1]
Roots: %entry

19 months ago[lld][Alignment][NFC] Use Align instead of log2 of alignment in Wasm Sections
Guillaume Chatelet [Fri, 2 Dec 2022 10:08:08 +0000 (10:08 +0000)]
[lld][Alignment][NFC] Use Align instead of log2 of alignment in Wasm Sections

I intend to slowly upgrade all alignments to the Align type in lld as well.
Some places talk about alignment in Bytes while other specify them as Log2(Bytes).
Let's make sure all of this is coherent.

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

19 months ago[Alignment][NFC] Use Align in StringTableBuilder ctor
Guillaume Chatelet [Fri, 2 Dec 2022 12:42:43 +0000 (12:42 +0000)]
[Alignment][NFC] Use Align in StringTableBuilder ctor

19 months ago[include-cleaner] clang-include-cleaner can print/apply edits
Sam McCall [Wed, 30 Nov 2022 14:59:23 +0000 (15:59 +0100)]
[include-cleaner] clang-include-cleaner can print/apply edits

This adds command-line flags to the tool:
+ -print: prints changed source code
+ -print=changes: prints headers added/removed
+ -edit: rewrites code in place
+ -insert=0/-remove=0: disables additions/deletions for the above

These are supported by a couple of new functions dumped into Analysis:
analyze() sits on top of walkUsed and makes used/unused decisions for
Includes. fixIncludes() applies those results to source code.

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

19 months ago[Alignment][NFC] Use Align within StringTableBuilder
Guillaume Chatelet [Fri, 2 Dec 2022 12:10:06 +0000 (12:10 +0000)]
[Alignment][NFC] Use Align within StringTableBuilder

19 months ago[DSE] Use precise loc for memset_chk during overwrite checks
Florian Hahn [Fri, 2 Dec 2022 11:28:22 +0000 (11:28 +0000)]
[DSE] Use precise loc for memset_chk during overwrite checks

memset_chk may not write the number of bytes specified by the third
argument, if it is larger than the destination size (specified as 4th
argument).

Reviewed By: asbirlea

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

19 months ago[AArch64] use CNT for ISD::popcnt and ISD::parity if available
Ties Stuij [Thu, 1 Dec 2022 16:37:50 +0000 (16:37 +0000)]
[AArch64] use CNT for ISD::popcnt and ISD::parity if available

These are the two places where we explicitly want to use cnt in
SelectionDAG when feature CSSC is available: ISD::popcnt and ISD::parity

For both, we need to make sure we're emitting optimized code for i32 (and
lower), i64 and i128. The most optimal way is of course using the GPR CNT
instruction. If we don't have CSSC, but we do have neon, we'll use floating
point CNT. If all fails, we'll fall back on the general GPR popcnt and parity
implementations.

spec:
https://developer.arm.com/documentation/ddi0602/2022-09/Base-Instructions/CNT--Count-bits-

Reviewed By: lenary

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

19 months ago[NFC] clang-format AArch64TargetParser
Tomas Matheson [Fri, 2 Dec 2022 10:56:34 +0000 (10:56 +0000)]
[NFC] clang-format AArch64TargetParser

19 months ago[lldb][Target] Flush the scratch TypeSystem when owning lldb_private::Module gets...
Michael Buch [Fri, 25 Nov 2022 14:45:09 +0000 (14:45 +0000)]
[lldb][Target] Flush the scratch TypeSystem when owning lldb_private::Module gets unloaded

**Summary**

This patch addresses #59128, where LLDB would crash when evaluating
importing a type that has been imported before into the same target.
The proposed solution is to clear the scratch AST (and associated
persistent variables, `ClangASTImporter`, etc.) whenever a module that
could've owned one of the stale `TypeSystem`s gets unloaded/destroyed.

Details:
1. The first time we evaluate the expression we import the decl for Foo into the Targets scratch AST
   context (lives in m_scratch_type_system_map). During this process we also create a ClangASTImporter
   that lives in the ClangPersistentVariables::m_ast_importer_sp. This importer has decl tracking
   structures which reference the source AST that the decl got imported from. This importer also gets
   re-used for all calls to DeportType (which we use to copy the final decl into the Targets scratch AST).
2. Rebuilding the executable triggers a tear-down of the Module that was backing the ASTContext that
   we originally got the Foo decl from (which lived in the Module::m_type_system_map). However, the Target’s scratch AST lives on.
3. Re-running the same expression will now create a new ASTImporterDelegate where the destination TranslationUnitDecl is
   the same as the one from step (1).
4. When importing the new Foo decl we first try to find it in the destination DeclContext, which happens to be
   the scratch destination TranslationUnitDecl. The `Foo` decl exists in this context since we copied it into
   the scratch AST in the first run. The ASTImporter then queries LLDB for the origin of that decl. Using the
   same persistent variable ClangASTImporter we claim the decl has an origin in the AST context that got torn
   down with the Module. This faulty origin leads to a use-after-free.

**Testing**

- Added API test

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

19 months ago[lldb][Module][NFC] Add ModuleList::AnyOf
Michael Buch [Thu, 1 Dec 2022 09:24:32 +0000 (09:24 +0000)]
[lldb][Module][NFC] Add ModuleList::AnyOf

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

19 months ago[lldb][Module] Document ModuleList::ForEach and assert nullness
Michael Buch [Thu, 1 Dec 2022 08:59:03 +0000 (08:59 +0000)]
[lldb][Module] Document ModuleList::ForEach and assert nullness

Currently all callsites already assume the pointer is non-null.
This patch just asserts this assumption.

This is practically enforced by `ModuleList::Append`
which won't add `nullptr`s to `m_modules`.

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

19 months ago[RISCV] Add correct predicate over FMV instructions
Konstantin Vladimirov [Fri, 2 Dec 2022 07:49:45 +0000 (10:49 +0300)]
[RISCV] Add correct predicate over FMV instructions

Restricts FMV usage for subtargets without 'f' extension.

Reviewed By: craig.topper

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

19 months agoRevert "[Windows SEH]: HARDWARE EXCEPTION HANDLING (MSVC -EHa) - Part 2"
tentzen [Fri, 2 Dec 2022 10:42:43 +0000 (02:42 -0800)]
Revert "[Windows SEH]: HARDWARE EXCEPTION HANDLING (MSVC -EHa) - Part 2"

This reverts commit 1a949c871ab4a6b6d792849d3e8c0fa6958d27f5.

19 months ago[mlir][MemRefToLLVM] Remove the code for lowering subview
Quentin Colombet [Sat, 15 Oct 2022 00:25:56 +0000 (00:25 +0000)]
[mlir][MemRefToLLVM] Remove the code for lowering subview

Subviews are supposed to be expanded before we hit the lowering
code.
The expansion is done with the pass called
expand-strided-metadata.

Add a test that demonstrate how these passes can be linked up to achieve
the desired lowering.

This patch is NFC in spirit but not in practice because `subview` gets
lowered into `reinterpret_cast(extract_strided_metadata, <some math>)`
which lowers in two memref descriptors (one for `reinterpert_cast` and
one for `extract_strided_metadata`), which creates some noise of the
form: `extractvalue(unrealized_cast(extractvalue[0]))[0]` that is
currently not simplified within MLIR but that is really just noop in
that case.

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

19 months ago[mlir][tensor] Fold rank-reducing insert_slice with inverse collapse_shape
Matthias Springer [Fri, 2 Dec 2022 09:40:29 +0000 (10:40 +0100)]
[mlir][tensor] Fold rank-reducing insert_slice with inverse collapse_shape

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

19 months ago[mlir][tensor] Fold rank-reducing extract_slice with inverse expand_shape
Matthias Springer [Fri, 2 Dec 2022 09:40:03 +0000 (10:40 +0100)]
[mlir][tensor] Fold rank-reducing extract_slice with inverse expand_shape

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

19 months ago[mlir][Index] Add pretty result names for ConstantOp and BoolConstantOp
River Riddle [Fri, 2 Dec 2022 08:22:10 +0000 (00:22 -0800)]
[mlir][Index] Add pretty result names for ConstantOp and BoolConstantOp

ConstantOp uses `%idx<value>` and BoolConstantOp uses true/false, which
is similar to the printing for arith::ConstantOp.

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

19 months ago[NFC] Update Transforms/LoopVectorize/RISCV/select-cmp-reduction.ll.
Mel Chen [Fri, 2 Dec 2022 08:03:42 +0000 (00:03 -0800)]
[NFC] Update Transforms/LoopVectorize/RISCV/select-cmp-reduction.ll.

19 months ago[flang] Enable character type guard in select type
Valentin Clement [Fri, 2 Dec 2022 08:52:06 +0000 (09:52 +0100)]
[flang] Enable character type guard in select type

SELECT TYPE lower and conversion was not handling
`character` type guard. This add support for it.

Reviewed By: jeanPerier

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

19 months ago[clang] Remove unused bookmark in CWG360 test (NFC)
Vlad Serebrennikov [Fri, 2 Dec 2022 08:52:19 +0000 (11:52 +0300)]
[clang] Remove unused bookmark in CWG360 test (NFC)

19 months ago[clang][docs] Correct floating point option explanations
KAWASHIMA Takahiro [Wed, 16 Nov 2022 10:54:32 +0000 (19:54 +0900)]
[clang][docs] Correct floating point option explanations

Explanations for options of floating point are updated to match
the `RenderFloatingPointOptions` function in
`clang/lib/Driver/ToolChains/Clang.cpp`.

Missing explanations are also added.

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

19 months ago[TypeSwitch] Use perfect forwarding in the cast functions
River Riddle [Fri, 2 Dec 2022 08:19:28 +0000 (00:19 -0800)]
[TypeSwitch] Use perfect forwarding in the cast functions

This allows for properly supporting TypeSwitch on reference
types which do not support copying/do not want copying.

19 months ago[mlir] Allow access to the underlying diagnostic
River Riddle [Fri, 2 Dec 2022 07:22:22 +0000 (23:22 -0800)]
[mlir] Allow access to the underlying diagnostic

This allows for more interesting manipulation of an
inflight diagnostic.