platform/upstream/llvm.git
22 months agoApply clang-tidy fixes for performance-unnecessary-value-param in Utils.cpp (NFC)
Mehdi Amini [Mon, 29 Aug 2022 11:09:54 +0000 (11:09 +0000)]
Apply clang-tidy fixes for performance-unnecessary-value-param in Utils.cpp (NFC)

22 months ago[Clang] Introduce -fexperimental-sanitize-metadata=
Marco Elver [Tue, 6 Sep 2022 13:49:39 +0000 (15:49 +0200)]
[Clang] Introduce -fexperimental-sanitize-metadata=

Introduces the frontend flag -fexperimental-sanitize-metadata=, which
enables SanitizerBinaryMetadata instrumentation.

The first intended user of the binary metadata emitted will be a variant
of GWP-TSan [1]. The plan is to open source a stable and production
quality version of GWP-TSan. The development of which, however, requires
upstream compiler support.

[1] https://llvm.org/devmtg/2020-09/slides/Morehouse-GWP-Tsan.pdf

Until the tool has been open sourced, we mark this kind of
instrumentation as "experimental", and reserve the option to change
binary format, remove features, and similar.

Reviewed By: vitalybuka, MaskRay

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

22 months ago[SanitizerBinaryMetadata] Introduce SanitizerBinaryMetadata instrumentation pass
Marco Elver [Tue, 6 Sep 2022 13:49:33 +0000 (15:49 +0200)]
[SanitizerBinaryMetadata] Introduce SanitizerBinaryMetadata instrumentation pass

Introduces the SanitizerBinaryMetadata instrumentation pass which uses
the new MD_pcsections metadata kinds to instrument certain types of
instructions and functions required for breakpoint-based sanitizers.

The first intended user of the binary metadata emitted will be a variant
of GWP-TSan [1]. GWP-TSan will require information about atomic
accesses; to unambiguously determine if an access is atomic or not, we
also require "covered" information which code has been compiled with
SanitizerBinaryMetadata instrumentation enabled.

[1] https://llvm.org/devmtg/2020-09/slides/Morehouse-GWP-Tsan.pdf

Reviewed By: dvyukov

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

22 months ago[Libomptarget] Remove leftover ELF header from x86 plugin
Joseph Huber [Wed, 7 Sep 2022 18:40:54 +0000 (13:40 -0500)]
[Libomptarget] Remove leftover ELF header from x86 plugin

Summary:
We removed the linking support for `gelf.h` in a previous patch. This
header was incorrectly leftover causing build problems on some systems.

22 months ago[RISCV] Remove space before colon in error message.
Craig Topper [Wed, 7 Sep 2022 18:30:03 +0000 (11:30 -0700)]
[RISCV] Remove space before colon in error message.

22 months ago[lld-macho] Hardlink -object_path_lto files to cache when possible
Leonard Grey [Fri, 2 Sep 2022 17:50:01 +0000 (13:50 -0400)]
[lld-macho] Hardlink -object_path_lto files to cache when possible

This is a follow-up to https://reviews.llvm.org/D131624 (specifically to https://reviews.llvm.org/D131624#3716584)

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

22 months ago[libc++] Fixes CI.
Mark de Wever [Wed, 7 Sep 2022 17:56:52 +0000 (19:56 +0200)]
[libc++] Fixes CI.

It seems merging the changes in transitive macros and recent commits
conflicted.

22 months ago[mlir][sparse] Refactoring: remove dependence on tuple type when lowering sparse...
Peiming Liu [Wed, 7 Sep 2022 00:49:44 +0000 (00:49 +0000)]
[mlir][sparse] Refactoring: remove dependence on tuple type when lowering sparse tensors.

Reviewed By: aartbik

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

22 months ago[Libomptarget] Replace libelf with LLVM's Elf libraries
Joseph Huber [Fri, 5 Aug 2022 18:32:42 +0000 (14:32 -0400)]
[Libomptarget] Replace libelf with LLVM's Elf libraries

This patch replaces the dependency on `libelf` with LLVM's ELF support.
With this patch the user no-longer needs to have `libelf` on their
system to build and configure OpenMP offloading. The replacement is
mostly mechanical, with the exception of the hash table support which
was added in D131309.

Depends on D131309

Reviewed By: JonChesterfield, saiislam

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

22 months ago[Libomptarget] Add utility functions for loading an ELF symbol by name
Joseph Huber [Sat, 3 Sep 2022 16:38:26 +0000 (11:38 -0500)]
[Libomptarget] Add utility functions for loading an ELF symbol by name

The `SHT_HASH` sections in an ELF are used to look up a symbol in the
symbol table using a symbol's name. This is done by obtaining the
`SHT_HASH` section and using its `sh_link` attribute to access the
associated symbol table, from which we can access the string table
containing the associated name. We can then search for the symbol using
the hash of the name and the buckets and chains in the hash table
itself

This patch adds utility functions that allow us to look up a symbol in
an ELF file by name. It will first attempt to look through the hash
tables, and then search the section tables manually if failed. This
allows us to pull out constants necessary for setting up offloading
without first loading the object.

Reviewed By: JonChesterfield

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

22 months ago[AArch64] Add tests for using tbl for fp conversions.
Florian Hahn [Wed, 7 Sep 2022 17:35:29 +0000 (18:35 +0100)]
[AArch64] Add tests for using tbl for fp conversions.

22 months ago[RISCV] Remove unnecessary word from error message.
Craig Topper [Wed, 7 Sep 2022 17:29:58 +0000 (10:29 -0700)]
[RISCV] Remove unnecessary word from error message.

22 months ago[Lex/DependencyDirectivesScanner] Keep track of the presence of tokens between the...
Argyrios Kyrtzidis [Mon, 5 Sep 2022 21:28:32 +0000 (14:28 -0700)]
[Lex/DependencyDirectivesScanner] Keep track of the presence of tokens between the last scanned directive and EOF

Directive `dependency_directives_scan::tokens_present_before_eof` is introduced to indicate there were tokens present before
the last scanned dependency directive and EOF.
This is useful to ensure we correctly identify the macro guards when lexing using the dependency directives.

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

22 months ago[amdgpu] Always, instead of mostly, remove unused LDS symbols
Jon Chesterfield [Wed, 7 Sep 2022 17:28:14 +0000 (18:28 +0100)]
[amdgpu] Always, instead of mostly, remove unused LDS symbols

Currently LDS variables are removed by the lower module pass
if they have a use which is caught by the replace with struct control flow.
This makes tests brittle to changes to that control flow which induces
noise when trying to improve lowering. Some tests already check that
variables are removed, while others checked that they are not removed.

LDS variables are not (currently) externally accessible, and if that
changes the machinery which makes them externally accessible will look
like a use. This change therefore breaks no applications.

Reviewed By: rampitec

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

22 months ago[mlir][sparse] minor zero test refactoring in rewriting
Aart Bik [Tue, 6 Sep 2022 23:09:17 +0000 (16:09 -0700)]
[mlir][sparse] minor zero test refactoring in rewriting

Reviewed By: bixia

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

22 months ago[mlir][sparse] fix python indentation in test
Aart Bik [Tue, 6 Sep 2022 23:57:19 +0000 (16:57 -0700)]
[mlir][sparse] fix python indentation in test

Reviewed By: bixia

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

22 months ago[gn build] Port e5d2d3eafbb3
LLVM GN Syncbot [Wed, 7 Sep 2022 16:59:10 +0000 (16:59 +0000)]
[gn build] Port e5d2d3eafbb3

22 months ago[libc++][locale] Removes an transitive include.
Mark de Wever [Wed, 7 Sep 2022 16:52:41 +0000 (18:52 +0200)]
[libc++][locale] Removes an transitive include.

Removes <cstdarg> transitive include from <locale> in C++23.

Reviewed By: #libc, ldionne

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

22 months ago[AArch64] Add additional tests for tbl expansion.
Florian Hahn [Wed, 7 Sep 2022 16:47:59 +0000 (17:47 +0100)]
[AArch64] Add additional tests for tbl expansion.

Add test coverage to make sure tbl expansion isn't used when optimizing
for size or when the zext is only executed conditionally in a loop.

22 months agoAvoid __builtin_assume_aligned crash when the 1st arg is array type
yronglin [Wed, 7 Sep 2022 16:46:20 +0000 (12:46 -0400)]
Avoid __builtin_assume_aligned crash when the 1st arg is array type

Avoid __builtin_assume_aligned crash when the 1st arg is array type (or
string literal).

Fixes Issue #57169

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

22 months ago[libc++][chrono] Implements formatter day.
Mark de Wever [Sun, 20 Mar 2022 12:40:02 +0000 (13:40 +0100)]
[libc++][chrono] Implements formatter day.

This implements the enabled specializaton
template<class charT> struct formatter<chrono::day, charT>;

and
template<class charT, class traits>
    basic_ostream<charT, traits>&
      operator<<(basic_ostream<charT, traits>& os, const day& d);

Implements:
- LWG 3241 chrono-spec grammar ambiguity in §[time.format]

Partially implements:
- P1361 Integration of chrono with text formatting

Reviewed By: #libc, ldionne

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

22 months ago[libc++][format] Updates feature-test macros.
Mark de Wever [Sun, 4 Sep 2022 11:56:36 +0000 (13:56 +0200)]
[libc++][format] Updates feature-test macros.

During the discussion on the SG-10 mailinglist regarding the format
feature-test macros voted in during the last plenary it turns out libc++
can't mark the format feature-test macro as implemented.

According to
  https://isocpp.org/std/standing-documents/sd-6-sg10-feature-test-recommendations#__cpp_lib_format
the not yet implemented paper
  P1361R2 Integration of chrono with text formatting
affects the feature test macro.

Note that P1361R2 doesn't mention the feature-test macro nor is there an
LWG-issue to address the issue. The reporter of the issue didn't recall
where this requirement exactly has been decided.

Reviewed By: ldionne, #libc

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

22 months ago[RISCV][MC] Add minimal support for Ztso extension
Philip Reames [Wed, 7 Sep 2022 15:45:50 +0000 (08:45 -0700)]
[RISCV][MC] Add minimal support for Ztso extension

This is a minimalist implementation which simply adds the extension (in the experimental namespace since its not ratified), and wires up the setting of the required ELF header flag. Future changes will include codegen changes to exploit the stronger memory model.

This is intended to implement v0.1 of the proposed specification which can be found in Chapter 25 of https://github.com/riscv/riscv-isa-manual/releases/download/draft-20220723-10eea63/riscv-spec.pdf.

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

22 months ago[SCCP] convert signed div/rem to unsigned for non-negative operands, 2nd try
Sanjay Patel [Wed, 7 Sep 2022 15:44:27 +0000 (11:44 -0400)]
[SCCP] convert signed div/rem to unsigned for non-negative operands, 2nd try

The original commit ( fe1f3cfc2669 ) was reverted because it could
crash / assert when trying to fold a value that was replaced
by a constant. In that case, there might not be an entry for the
constant in the solver yet.

This version adds a check for that possibility along with tests to
exercise that pattern (they used to crash).

Original commit message:
This extends the transform added with D81756 to handle div/rem opcodes.
For example:
https://alive2.llvm.org/ce/z/cX6za6

This replicates part of what CVP already does, but the motivating example
from issue #57472 demonstrates a phase ordering problem - we convert
branches to select before CVP runs and miss the transform.

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

22 months ago[mlir] Use std::size instead of llvm::array_lengthof
Joe Loser [Wed, 7 Sep 2022 00:01:39 +0000 (18:01 -0600)]
[mlir] Use std::size instead of llvm::array_lengthof

LLVM contains a helpful function for getting the size of a C-style
array: `llvm::array_lengthof`. This is useful prior to C++17, but not as
helpful for C++17 or later: `std::size` already has support for C-style
arrays.

Change call sites to use `std::size` instead.

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

22 months ago[clangd] Add Macro Expansion to Hover
Qingyuan Zheng [Wed, 7 Sep 2022 15:44:32 +0000 (17:44 +0200)]
[clangd] Add Macro Expansion to Hover

This patch adds macro expansion preview to hover info. Basically, the refactor infrastructure for expanding macro is used for this purpose. The following steps are added to getHoverContents for macros:
1. calling AST.getTokens().expansionStartingAt(...) to get expanded tokens
2. calling reformat(...) to format expanded tokens

Some opinions are wanted:
1. Should we present macro expansion before definition in the hover card?
2. Should we truncate/ignore macro expansion if it's too long? For performance and presentation reason, it might not be a good idea to expand pages worth of tokens in hover card. If so, what's the preferred threshold?

Also, some limitation applies:
1. Expansion isn't available in macro definition/arguments as the refactor code action isn't either.

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

22 months agoRemoving myself from the CODE_OWNERS.TXT file as I am no longer working
Eric Schweitz [Wed, 7 Sep 2022 15:40:55 +0000 (08:40 -0700)]
Removing myself from the CODE_OWNERS.TXT file as I am no longer working
on the flang project. Ownership reverts to Steve Scalpone for now.

22 months ago[clangd] Fix hover crashing on integral or enumeral casts
Georg Kotheimer [Mon, 5 Sep 2022 09:14:27 +0000 (11:14 +0200)]
[clangd] Fix hover crashing on integral or enumeral casts

When pretty printing the value of an expression, we cannot infer from
the type of the expression the type of the constant that the expression
evaluates to, as the expression might contain a type cast.

22 months ago[clangd] Improve Selection testcase, pin to C++17
Sam McCall [Wed, 7 Sep 2022 14:00:21 +0000 (16:00 +0200)]
[clangd] Improve Selection testcase, pin to C++17

17 vs 14 have different ASTs, this causes D131465 to have to touch this test.
While here, make sure we're being clear about *which* nodes we're matching.

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

22 months ago[Sema] Move Diags.isIgnored() checks off hot paths, it's not free. NFC
Sam McCall [Wed, 13 Jul 2022 19:11:44 +0000 (21:11 +0200)]
[Sema] Move Diags.isIgnored() checks off hot paths, it's not free. NFC

This speeds up clangd's buildAST() (i.e. parsing with a preamble) by 5% on
clangd/AST.cpp, by avoiding filling up the diagnostic state map with entries for
all the files where templates are being instantiated from.

(I would assume it has a similar effect on PCH and modules compiles).

This approach is obviously pretty fragile, and we should find ways to make
isIgnored() cheaper instead. But these changes in particular don't seem to make
the code worse in any case.

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

22 months agoOne-shot-bufferize: allow non-tensor arguments in scg.while/for.
Johannes Reifferscheid [Wed, 7 Sep 2022 12:35:50 +0000 (14:35 +0200)]
One-shot-bufferize: allow non-tensor arguments in scg.while/for.

Currently, one-shot-bufferize crashes as soon as there's
a mixture of tensor and non-tensor arguments. This seems
to happen for no good reason.

Reviewed By: springerm

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

22 months ago[mlir][complex] Canonicalization for complex.sub adding same numbers
Kai Sasaki [Wed, 7 Sep 2022 12:55:28 +0000 (14:55 +0200)]
[mlir][complex] Canonicalization for complex.sub adding same numbers

Canonicalization for complex.sub adding same numbers. This canonicalization supports the case like complex.sub(complex.add(a, b), b) -> a.

Reviewed By: pifon2a

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

22 months ago[mlir][Math] Fix RoundEven constant folder.
jacquesguan [Wed, 7 Sep 2022 12:45:57 +0000 (12:45 +0000)]
[mlir][Math] Fix RoundEven constant folder.

Use roundToIntegral instead roundeven of libm to avoid window build failed.

Reviewed By: mehdi_amini

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

22 months ago[InstCombine] fold add+negate through select into sub
Sanjay Patel [Wed, 7 Sep 2022 11:53:38 +0000 (07:53 -0400)]
[InstCombine] fold add+negate through select into sub

This transform came up as a potential DAGCombine in D133282,
so I wanted to see how it escaped in IR too.

We do general folds in InstCombiner::SimplifySelectsFeedingBinaryOp()
by checking if either arm of a select simplifies when the trailing
binop is threaded into the select.

So as long as one side simplifies, it's a good fold to combine a
negate and add into 1 subtract.

This is an example with a zero arm in the select:
https://alive2.llvm.org/ce/z/Hgu_Tj

And this models the tests with a cancelling 'not' op:
https://alive2.llvm.org/ce/z/BuzVV_

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

22 months ago[InstCombine] add tests for SimplifySelectsFeedingBinaryOp(); NFC
Sanjay Patel [Tue, 6 Sep 2022 17:24:27 +0000 (13:24 -0400)]
[InstCombine] add tests for SimplifySelectsFeedingBinaryOp(); NFC

22 months agoSink/hoist memory instructions between loop fusion candidates
Aaron Kogon [Wed, 7 Sep 2022 11:42:00 +0000 (07:42 -0400)]
Sink/hoist memory instructions between loop fusion candidates

Currently, instructions in the preheader of the second of two fusion
candidates are sunk and hoisted whenever possible, to try to allow the
loops to fuse. Memory instructions are skipped, and are never sunk or
hoisted. This change adds memory instructions for sinking/hoisting
consideration.

This change uses DependenceAnalysis to check if a mem inst in the
preheader of FC1 depends on an instruction in FC0's header, across
which it will be hoisted, or FC1's header, across which it will be
sunk. We reject cases where the dependency is a data hazard.

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

22 months ago[mlir] Change CombiningKind in Vector dialect to EnumAttr.
Oleg Shyshkov [Wed, 7 Sep 2022 11:33:02 +0000 (13:33 +0200)]
[mlir] Change CombiningKind in Vector dialect to EnumAttr.

CombiningKind was implemented before EnumAttr, so it reimplements the same behaviour with the custom code. Except for a few places, EnumAttr is a drop-in replacement.

Reviewed By: nicolasvasilache, pifon2a

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

22 months ago[MCA] Correctly check pipeline availability for partially overlapping resource groups.
Andrea Di Biagio [Wed, 7 Sep 2022 10:27:22 +0000 (11:27 +0100)]
[MCA] Correctly check pipeline availability for partially overlapping resource groups.

This patch mostly reverts commit 70b37f4c03c which fixed PR50725.

In case of explicit consumption of multiple partially overlapping group
resources, the ResourceManager was not correctly checking pipeline
esources availability.

The fix for PR50725 only partially addressed a few instances of that issue.
This is a more general (although, technically slower) fix for that same issue.

It also fixes Issue #57548

Thanks to Haohai Wen for the small reproducible.

22 months ago[clangd] Support renaming virtual methods
Tom Praschan [Wed, 7 Sep 2022 10:03:55 +0000 (12:03 +0200)]
[clangd] Support renaming virtual methods

Fixes https://github.com/clangd/clangd/issues/706

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

22 months ago[CostModel][X86] Merge getTypeBasedIntrinsicInstrCost into getIntrinsicInstrCost
Simon Pilgrim [Wed, 7 Sep 2022 10:27:40 +0000 (11:27 +0100)]
[CostModel][X86] Merge getTypeBasedIntrinsicInstrCost into getIntrinsicInstrCost

For the few non type based intrinsic cases we can just check for !isTypeBasedOnly() to access the args directly.

I don't think we have a need to keep getTypeBasedIntrinsicInstrCost in BasicTTIImpl.h any more and can do a similar merge there as well - but it's a messier refactor and will take a while.

22 months ago[AMDGPU][MC][GFX11][NFC] Update disassembler tests for VOP3 instructions
Dmitry Preobrazhensky [Wed, 7 Sep 2022 10:55:27 +0000 (13:55 +0300)]
[AMDGPU][MC][GFX11][NFC] Update disassembler tests for VOP3 instructions

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

22 months ago[AMDGPU][MC][GFX11][NFC] Update disassembler tests for VOP3.DPP8 instructions
Dmitry Preobrazhensky [Wed, 7 Sep 2022 10:51:31 +0000 (13:51 +0300)]
[AMDGPU][MC][GFX11][NFC] Update disassembler tests for VOP3.DPP8 instructions

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

22 months ago[AMDGPU][MC][GFX11][NFC] Update disassembler tests for VOP3.DPP16 instructions
Dmitry Preobrazhensky [Wed, 7 Sep 2022 10:46:38 +0000 (13:46 +0300)]
[AMDGPU][MC][GFX11][NFC] Update disassembler tests for VOP3.DPP16 instructions

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

22 months ago[Bitcode] Fix constexpr autoupgrade for arrays and structs
Nikita Popov [Wed, 7 Sep 2022 10:46:32 +0000 (12:46 +0200)]
[Bitcode] Fix constexpr autoupgrade for arrays and structs

While vectors use insertelement, structs and arrays should use
insertvalue.

22 months ago[AMDGPU][MC][GFX11][NFC] Update assembler tests for VOPD instructions
Dmitry Preobrazhensky [Wed, 7 Sep 2022 10:41:44 +0000 (13:41 +0300)]
[AMDGPU][MC][GFX11][NFC] Update assembler tests for VOPD instructions

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

22 months ago[Bitcode] Convert constexpr-to-instr.ll to use bitcode input (NFC)
Nikita Popov [Wed, 7 Sep 2022 10:28:26 +0000 (12:28 +0200)]
[Bitcode] Convert constexpr-to-instr.ll to use bitcode input (NFC)

We can't use an IR input once the relevant constant expressions
are no longer supported. Use a bitcode file instead, which will
be auto-upgraded (the whole point of this code...)

22 months ago[AMDGPU] Add an operand folding test case from D114232
Jay Foad [Wed, 7 Sep 2022 10:16:40 +0000 (11:16 +0100)]
[AMDGPU] Add an operand folding test case from D114232

22 months ago[AMDGPU] Refactor SIFoldOperands. NFC.
Jay Foad [Wed, 7 Sep 2022 09:49:50 +0000 (10:49 +0100)]
[AMDGPU] Refactor SIFoldOperands. NFC.

Refactor static functions into class methods so they have access to TII, MRI
etc.

22 months ago[ConstantFold] Avoid unary ConstantExpr::get()
Nikita Popov [Wed, 7 Sep 2022 09:40:30 +0000 (11:40 +0200)]
[ConstantFold] Avoid unary ConstantExpr::get()

Call ConstantFoldUnaryInstruction() instead, to only produce a
result if it folds.

22 months agoApply clang-tidy fixes for performance-for-range-copy in TileUsingInterface.cpp ...
Mehdi Amini [Mon, 29 Aug 2022 11:08:54 +0000 (11:08 +0000)]
Apply clang-tidy fixes for performance-for-range-copy in TileUsingInterface.cpp (NFC)

22 months agoApply clang-tidy fixes for llvm-qualified-auto in Bufferize.cpp (NFC)
Mehdi Amini [Mon, 29 Aug 2022 11:06:51 +0000 (11:06 +0000)]
Apply clang-tidy fixes for llvm-qualified-auto in Bufferize.cpp (NFC)

22 months ago[AsmPrinter] Emit PCs into requested PCSections
Marco Elver [Tue, 6 Sep 2022 13:49:28 +0000 (15:49 +0200)]
[AsmPrinter] Emit PCs into requested PCSections

Interpret MD_pcsections in AsmPrinter emitting the requested metadata to
the associated sections. Functions and normal instructions are handled.

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

22 months ago[GlobalISel] Propagate PCSections metadata to MachineInstr
Marco Elver [Tue, 6 Sep 2022 13:49:23 +0000 (15:49 +0200)]
[GlobalISel] Propagate PCSections metadata to MachineInstr

Propagate (most) PC sections metadata to MachineInstr when GlobalISel is
doing instruction selection.

This change results in support for architectures using GlobalISel (such
as -O0 with AArch64). Not all instructions may be supported yet, and
requires further target-specific handling (such as done for AArch64
pseudo-atomics). Expanding supported instructions is planned on a
case-by-case basis and new use cases for PC sections metadata.

Reviewed By: vitalybuka

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

22 months ago[AtomicExpandPass] Always copy pcsections Metadata to expanded atomics
Marco Elver [Tue, 6 Sep 2022 13:49:18 +0000 (15:49 +0200)]
[AtomicExpandPass] Always copy pcsections Metadata to expanded atomics

When expanding IR atomics to target-specific atomics, copy all
!pcsections Metadata to expanded atomics automatically.

Reviewed By: vitalybuka

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

22 months ago[FastISel] Propagate PCSections metadata to MachineInstr
Marco Elver [Tue, 6 Sep 2022 13:49:13 +0000 (15:49 +0200)]
[FastISel] Propagate PCSections metadata to MachineInstr

Propagate PC sections metadata to MachineInstr when FastISel is doing
instruction selection.

Reviewed By: vitalybuka

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

22 months ago[ConstantExpr] Don't create fneg expressions
Nikita Popov [Wed, 7 Sep 2022 08:56:36 +0000 (10:56 +0200)]
[ConstantExpr] Don't create fneg expressions

Don't create fneg expressions unless explicitly requested by IR or
bitcode.

22 months ago[MachineInstrBuilder] Introduce MIMetadata to simplify metadata propagation
Marco Elver [Tue, 6 Sep 2022 13:49:08 +0000 (15:49 +0200)]
[MachineInstrBuilder] Introduce MIMetadata to simplify metadata propagation

In many places DebugLoc and PCSections metadata are just copied along to
propagate them through MachineInstrs. Simplify doing so by bundling them
up in a MIMetadata class that replaces the DebugLoc argument to most
BuildMI() variants.

The DebugLoc-only constructors allow implicit construction, so that
existing usage of `BuildMI(.., DL, ..)` works as before, and the rest of
the codebase using BuildMI() does not require changes.

NFC.

Reviewed By: vitalybuka

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

22 months ago[SelectionDAG] Propagate PCSections through SDNodes
Marco Elver [Tue, 6 Sep 2022 13:49:03 +0000 (15:49 +0200)]
[SelectionDAG] Propagate PCSections through SDNodes

Add a new entry to SDNodeExtraInfo to propagate PCSections through
SelectionDAG.

Reviewed By: vitalybuka

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

22 months ago[AMDGPU] Simplify mad/mac patterns. NFC.
Jay Foad [Mon, 5 Sep 2022 14:11:15 +0000 (15:11 +0100)]
[AMDGPU] Simplify mad/mac patterns. NFC.

Simplify instruction selection patterns for mad/mac:
- Use any_fmad consistently to make it clear that all patterns treat
  fmad and AMDGPUfmad_ftz identically.
- For mad, put the patterns on the instruction definitions. For mac the
  patterns are still out-of-line because we want to set AddedComplexity
  and to have special handling of the source modifiers.

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

22 months ago[TableGen] Document sequence with stride
Jay Foad [Mon, 5 Sep 2022 12:20:11 +0000 (13:20 +0100)]
[TableGen] Document sequence with stride

Document (in comments) the optional fourth "stride" argument to the
sequence operator, which was added in svn r157416.

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

22 months ago[AMDGPU] Add a comment for a missing fold
Jay Foad [Wed, 7 Sep 2022 08:56:55 +0000 (09:56 +0100)]
[AMDGPU] Add a comment for a missing fold

22 months ago[Reassociate] Avoid ConstantExpr::getFNeg() (NFCI)
Nikita Popov [Wed, 7 Sep 2022 08:46:58 +0000 (10:46 +0200)]
[Reassociate] Avoid ConstantExpr::getFNeg() (NFCI)

Use ConstantFoldUnaryOpOperand() instead. Also make the code below
robust against non-instruction users, just in case it doesn't fold.

22 months ago[mlir] Remove `materializeOpFoldResult` functions.
Alexander Belyaev [Wed, 7 Sep 2022 08:10:48 +0000 (10:10 +0200)]
[mlir] Remove `materializeOpFoldResult` functions.

We can use `getValueOrCreateConstantIndexOp` instead.

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

22 months ago[AArch64] add tests for non-power2 int types; NFC
chenglin.bi [Wed, 7 Sep 2022 08:07:26 +0000 (16:07 +0800)]
[AArch64] add tests for non-power2 int types; NFC

22 months ago[clang][doc] Do not keep a copy of ClangCommandLineReference.rst in tree
serge-sans-paille [Tue, 6 Sep 2022 12:22:40 +0000 (14:22 +0200)]
[clang][doc] Do not keep a copy of ClangCommandLineReference.rst in tree

This file is auto-generated, it's a bit confusing for the maintainers to have it
in tree while it shouldn't be modified *and* already have a rule to be
generated.

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

22 months ago[MLIR] NFC. Introduce mlir::hasEffect and refactor usages dialect util
Uday Bondhugula [Wed, 7 Sep 2022 04:39:47 +0000 (10:09 +0530)]
[MLIR] NFC. Introduce mlir::hasEffect and refactor usages dialect util

Introduce mlir::hasEffect and refactor existing usage to use utility.
NFC.

Reviewed By: rriddle, mehdi_amini

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

22 months ago[CSKY] Fix the compiling error about missing Log2 function with Log2_64
Zi Xuan Wu (Zeson) [Wed, 7 Sep 2022 06:40:01 +0000 (14:40 +0800)]
[CSKY] Fix the compiling error about missing Log2 function with Log2_64

22 months ago[X86][NFC] Refine load/store reg to StackSlot for extensibility
Xiang1 Zhang [Wed, 31 Aug 2022 03:16:09 +0000 (11:16 +0800)]
[X86][NFC] Refine load/store reg to StackSlot for extensibility

Reviewed By: LuoYuanke

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

22 months ago[LLD][COFF] Fix writing a map file when range extension thunks are inserted
Jan Ole Hüser [Wed, 7 Sep 2022 06:17:10 +0000 (09:17 +0300)]
[LLD][COFF] Fix writing a map file when range extension thunks are inserted

Bug: An assertion fails:

    Assertion failed: isa<To>(Val) && "cast<Ty>() argument of incompatible type!",
    file C:\Users\<user>\prog\llvm\llvm-git-lld-bug\llvm\include\llvm/Support/Casting.h, line 578

Bug is triggered, if

    - a map file is requested with /MAP, and
    - Architecture is ARMv7, Thumb, and
    - a relative jump (branch instruction) is greater than 16 MiB (2^24)

The reason for the Bug is:

    - a Thunk is created for the jump
    - a Symbol for the Thunk is created
        - of type `DefinedSynthetic`
        - in file `Writer.cpp`
        - in function `getThunk`
    - the Symbol has no name
    - when creating the map file, the name of the Symbol is queried
    - the function `Symbol::computeName` of the base class `Symbol`
      casts the `this` pointer to type `DefinedCOFF` (a derived type),
      but the acutal type is `DefinedSynthetic`
    - The in the llvm::cast an assertion fails

Changes:

- Modify regression test to trigger this bug
- Give the symbol pointing to the thunk a name, to fix the bug
- Add assertion, that only DefinedCOFF symbols are allowed to have an
  empty name, when the constructor of the base class Symbol is executed

Reviewed By: rnk

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

22 months ago[compiler-rt] [test] Handle missing ld.gold gracefully
Michał Górny [Tue, 6 Sep 2022 13:40:10 +0000 (15:40 +0200)]
[compiler-rt] [test] Handle missing ld.gold gracefully

Fix the is_binutils_lto_supported() function to handle missing
executables gracefully.  Currently, the function does not catch
exceptions from subprocess.Popen() and therefore causes lit to crash
if config.gold_executable does not specify a valid executable:

```
lit: /usr/lib/python3.11/site-packages/lit/TestingConfig.py:136: fatal: unable to parse config file '/tmp/portage/sys-libs/compiler-rt-
15.0.0/work/compiler-rt/test/lit.common.cfg.py', traceback: Traceback (most recent call last):
  File "/usr/lib/python3.11/site-packages/lit/TestingConfig.py", line 125, in load_from_path
    exec(compile(data, path, 'exec'), cfg_globals, None)
  File "/tmp/portage/sys-libs/compiler-rt-15.0.0/work/compiler-rt/test/lit.common.cfg.py", line 561, in <module>
    if is_binutils_lto_supported():
       ^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/tmp/portage/sys-libs/compiler-rt-15.0.0/work/compiler-rt/test/lit.common.cfg.py", line 543, in is_binutils_lto_supported
    ld_cmd = subprocess.Popen([exe, '--help'], stdout=subprocess.PIPE, env={'LANG': 'C'})
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/lib/python3.11/subprocess.py", line 1022, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "/usr/lib/python3.11/subprocess.py", line 1899, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'GOLD_EXECUTABLE-NOTFOUND'
```

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

22 months ago[NFC][sancov] Rename ModuleSanitizerCoveragePass
Vitaly Buka [Wed, 7 Sep 2022 03:55:39 +0000 (20:55 -0700)]
[NFC][sancov] Rename ModuleSanitizerCoveragePass

22 months ago[NFC][msan] Rename ModuleMemorySanitizerPass
Vitaly Buka [Tue, 6 Sep 2022 05:30:23 +0000 (22:30 -0700)]
[NFC][msan] Rename ModuleMemorySanitizerPass

22 months ago[mlir][Math] Add constant folder for RoundEvenOp.
jacquesguan [Tue, 6 Sep 2022 09:11:20 +0000 (17:11 +0800)]
[mlir][Math] Add constant folder for RoundEvenOp.

This patch uses roundeven/roundevenf of libm to fold RoundEvenOp of constant.

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

22 months ago[cmake] do not set execution permission to regular files.
Sinan Lin [Mon, 5 Sep 2022 14:00:00 +0000 (22:00 +0800)]
[cmake] do not set execution permission to regular files.

some regular files(e.g. files have no shebang and no execute
bit in source dir) are wrongly assigned an execution permission,
such as scanview.css and ear.c from libscanbuild, which is
unnecessary and introduces warnings in some envs.

Reviewed By: MaskRay, phosek

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

22 months ago[mlir][Math] Add constant folder for CosOp.
jacquesguan [Fri, 5 Aug 2022 03:03:20 +0000 (11:03 +0800)]
[mlir][Math] Add constant folder for CosOp.

This patch adds constant folder for CosOp which only supports single and double precision floating-point.

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

22 months ago[NFC] [Frontend] Correct the use of 'auto' in SemaCoroutine and CGCoroutine
Chuanqi Xu [Wed, 7 Sep 2022 02:35:54 +0000 (10:35 +0800)]
[NFC] [Frontend] Correct the use of 'auto' in SemaCoroutine and CGCoroutine

We should only use 'auto' in case we can know the type from the right
hand side of the expression. Also we need keep '*' around if the type is
a pointer actually. Few uses of 'auto' in SemaCoroutine.cpp and
CGCoroutine.cpp violates the rule. This commit tries to fix it.

22 months ago[CodeGen] Limit building time in CodeGenPrepare for huge function
Xiang1 Zhang [Tue, 30 Aug 2022 05:58:35 +0000 (13:58 +0800)]
[CodeGen] Limit building time in CodeGenPrepare for huge function

Details:

Currently CodeGenPrepare is very time consuming in handling big functions.

Old Algorithm :
It iterate each BB in function, and go on handle very instructions in BB.
Due to some instruction optimizations may affect the BBs' dominate tree.
The old logic will re-iterate and try optimize for each BB.

Suppose we have a big function with 20000 BBs, If we handled the last BB
with fine tuning the dominate tree. We need totally re-iterate and try optimize
the 20000 BBs from the beginning.

The Complex is near N!

And we really encounter somes big tests (> 20000 BBs) that cost more than 30
mins in this pass. (Debug version compiler will cost 2 hours here)

What this patch do for huge function ?
It mainly changes the iteration way for optimization.

1 We do optimizeBlock for each BB (that is same with old way).
And, in the meaning time, If BB is changed/updated in the optimization, it will
be put into FreshBBs (try do optimizeBlock again).
The new created BB at previous iteration will also put into FreshBBs.

2 For the BBs which not updated at previous iteration, we directly skip it.
Strictly speaking, here may miss some opportunity, but the probability is very
small.

3 For Instructions in single BB, we do optimizeInst for each instruction.
If optimizeInst change the instruction dominator in this BB, rather than break
and go back to optimize the first BB (the old way), we directly iterate
instructions (to do optimizeInst) in this updated BB again (the new way).

What this patch do for small/normal (not huge) function ?
It is same with the Old Algorithm. (NFC)

Reviewed By: LuoYuanke

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

22 months ago[test] Fix typo in setting the wrong Context test field
Jordan Rupprecht [Wed, 7 Sep 2022 01:59:03 +0000 (18:59 -0700)]
[test] Fix typo in setting the wrong Context test field

This manifests as an msan error because we check the value of `es`, but it's actually uninitialized because we mistakenly set `ss` twice.

22 months ago[CUDA] Actually fix the test correctly this time
Joseph Huber [Wed, 7 Sep 2022 01:31:27 +0000 (20:31 -0500)]
[CUDA] Actually fix the test correctly this time

22 months ago[CUDA] Fix test failing when using the new driver
Joseph Huber [Wed, 7 Sep 2022 01:14:20 +0000 (20:14 -0500)]
[CUDA] Fix test failing when using the new driver

Summary:
Previously the new driver crashed when using `-fsyntax-only` which
required a work-around in one of the test files. This was not properly
updated when it was fixed for the new driver. This patch fixes the test
and also adjusts a missing boolean check.

22 months ago[Clang] Fix the new driver crashing when using '-fsyntax-only'
Joseph Huber [Thu, 1 Sep 2022 22:04:49 +0000 (17:04 -0500)]
[Clang] Fix the new driver crashing when using '-fsyntax-only'

The new driver currently crashses when attempting to use the
'-fsyntax-only' option. This is because the option causes all output to
be given the `TY_Nothing' type which should signal the end of the
pipeline. The new driver was not treating this correctly and attempting
to use empty input. This patch fixes the handling so we do not attempt
to continue when the input is nothing.

One concession is that we must now check when generating the arguments
for Clang if the input is of 'TY_Nothing'. This is because the new
driver will only create code if the device code is a dependency on the
host, creating the output without the dependency would require a
complete rewrite of the logic as we do not maintain any state between
calls to 'BuildOffloadingActions' so I believe this is the most
straightforward method.

Reviewed By: tra

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

22 months ago[mlir][tosa] Support non-batch dynamic dims for tosa.rescale to linalg
natashaknk [Wed, 7 Sep 2022 00:13:12 +0000 (17:13 -0700)]
[mlir][tosa] Support non-batch dynamic dims for tosa.rescale to linalg

Reviewed By: rsuderman

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

22 months agoEnforce module decl-use restrictions and private header restrictions in textual headers
Richard Smith [Wed, 7 Sep 2022 00:10:55 +0000 (17:10 -0700)]
Enforce module decl-use restrictions and private header restrictions in textual headers

Per the documentation, these restrictions were intended to apply to textual headers but previously this didn't work because we decided there was no requesting module when the `#include` was in a textual header.

A `-cc1` flag is provided to restore the old behavior for transitionary purposes.

Reviewed By: aaron.ballman

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

22 months ago[HWASan] Show memory rather than tag addresses in tag dump
Florian Mayer [Tue, 6 Sep 2022 22:18:28 +0000 (15:18 -0700)]
[HWASan] Show memory rather than tag addresses in tag dump

Reviewed By: eugenis

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

22 months ago[test] Remove PowerPC/aix-xcoff-exported-nondefault.ll
Fangrui Song [Tue, 6 Sep 2022 23:48:16 +0000 (16:48 -0700)]
[test] Remove PowerPC/aix-xcoff-exported-nondefault.ll

This is not asserted by IR verifier.

22 months ago[RISCV] Use llvm::none_of to replace a loop. NFC
Craig Topper [Tue, 6 Sep 2022 23:03:45 +0000 (16:03 -0700)]
[RISCV] Use llvm::none_of to replace a loop. NFC

22 months ago[SimpleLoopUnswitch] Skip non-trivial unswitching of cold functions
Ruobing Han [Sun, 4 Sep 2022 16:56:25 +0000 (12:56 -0400)]
[SimpleLoopUnswitch] Skip non-trivial unswitching of cold functions

In the current main branch, all cold loops will not be applied non-trivial unswitch. As reported in D129599, skipping these cold loops will incur regression in SPEC benchmark.
Thus, instead of skipping cold loops, now only skipping loops in cold functions.

Reviewed By: alexgatea, aeubanks

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

22 months ago[mlir] Flip default value of emitAccessorPrefix to kEmitAccessorPrefix_Prefixed
River Riddle [Fri, 2 Sep 2022 02:31:31 +0000 (19:31 -0700)]
[mlir] Flip default value of emitAccessorPrefix to kEmitAccessorPrefix_Prefixed

Most dialects have already flipped to prefixed, and the intention to switch
has been telegraphed for a while.

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

22 months ago[test][hwasan] Update test for D132622
Vitaly Buka [Tue, 6 Sep 2022 22:42:13 +0000 (15:42 -0700)]
[test][hwasan] Update test for D132622

22 months ago[pipelines] OptimizerEarlyEPCallbacks for ThinLTO prelink
Vitaly Buka [Tue, 6 Sep 2022 03:31:43 +0000 (20:31 -0700)]
[pipelines] OptimizerEarlyEPCallbacks for ThinLTO prelink

Similar to OptimizerLastEPCallbacks workaround
added D96320.

Probably NFC as-is, I don't see anything hooked with this callbacks yet,
but I we are looking to move sanitizers.

Reviewed By: aeubanks, MaskRay

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

22 months ago[mlir][tosa] Fix dynamic shape inference in conv2d
Anastasia Stulova [Tue, 6 Sep 2022 22:07:29 +0000 (15:07 -0700)]
[mlir][tosa] Fix dynamic shape inference in conv2d

The comment in the code correctly states the equation for the shape inference as follows:

```
H = ((IH+pad_top+pad_bottom-(dilation_y*(KH-1)+1))/stride_y)+1
```

However the final operation is generated as `-` instead of `+`. I believe `+`
is indeed correct. For example if we have an image with dimension 6 and kernel
of dimension 3 (assuming padding is 0 and stride and dilation are both 1) we
are expecting 4 elements in the output (computed for image elements `(0, 1, 2)
x kernel`, `(1, 2, 3) x kernel`, `(2, 3, 4) x kernel` and `(3, 4, 5) x kernel`.
However currently only 2 elements are produced in the output.

Reviewed By: NatashaKnk

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

22 months ago[mlir][tensor] Fix a typo in the example code for UnrankedTensorType
Peiming Liu [Tue, 6 Sep 2022 22:25:41 +0000 (22:25 +0000)]
[mlir][tensor] Fix a typo in the example code for UnrankedTensorType

The syntax for unrank tensor type is defined as  tensor-type ::= `tensor` `<` `*` `x` type `>`, the example code missed the `x` in between.

Reviewed By: aartbik

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

22 months ago[Verifier] Allow dllexport protected after D133267
Fangrui Song [Tue, 6 Sep 2022 22:28:29 +0000 (15:28 -0700)]
[Verifier] Allow dllexport protected after D133267

I have noticed that this combo makes sense (D133266) but rejected it for
simplicity. It turns out to be used by PlayStation, so let's allow it.

22 months ago[NFC][asan] Rename ModuleAddressSanitizerPass
Vitaly Buka [Tue, 6 Sep 2022 05:37:45 +0000 (22:37 -0700)]
[NFC][asan] Rename ModuleAddressSanitizerPass

22 months ago[msan] Convert Msan to ModulePass
Vitaly Buka [Tue, 6 Sep 2022 04:28:02 +0000 (21:28 -0700)]
[msan] Convert Msan to ModulePass

MemorySanitizerPass function pass violatied requirement 4 of function
pass to do not insert globals. Msan nees to insert globals for origin
tracking, and paramereters tracking.

https://llvm.org/docs/WritingAnLLVMPass.html#the-functionpass-class

Reviewed By: kstoimenov, fmayer

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

22 months ago[mlir:vscode] Add support for loading big bytecode files
River Riddle [Sat, 3 Sep 2022 01:52:43 +0000 (18:52 -0700)]
[mlir:vscode] Add support for loading big bytecode files

VSCode doesn't let our extension manage files >50mb. This commit
adds a proper diagnostic in this case, and also gives the user an option
to open as a temporary .mlir file instead.

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

22 months ago[ThinLTOBitcodeWriter] Mark pass as required
Arthur Eubanks [Tue, 6 Sep 2022 21:35:14 +0000 (14:35 -0700)]
[ThinLTOBitcodeWriter] Mark pass as required

Or else with -opt-bisect-limit we don't write ThinLTO bitcode.

Reviewed By: asbirlea

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

22 months ago[RISCV] Add '32bit' feature to rv32 only builtins.
Craig Topper [Tue, 6 Sep 2022 21:45:17 +0000 (14:45 -0700)]
[RISCV] Add '32bit' feature to rv32 only builtins.

The backend now has a 32bit feature as part of the recent mtune
patch. We can now use that make our rv32-only builtin error checking
work the same way as rv64-only errors.

Reviewed By: kito-cheng

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

22 months ago[mlir] Allow passing AsmState when printing Attributes and Types
River Riddle [Sat, 3 Sep 2022 04:23:47 +0000 (21:23 -0700)]
[mlir] Allow passing AsmState when printing Attributes and Types

This allows for extracting assembly information when printing an attribute
or type, such as the dialect resources referenced. This functionality is used in
a followup that adds resource support to the bytecode. This change also results
in a nice cleanup of AsmPrinter now that we don't need to awkwardly workaround
optional AsmStates.

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

22 months ago[mlir] Improve BitEnumAttr, update documentation
Krzysztof Drewniak [Tue, 6 Sep 2022 20:25:20 +0000 (20:25 +0000)]
[mlir] Improve BitEnumAttr, update documentation

- Add new operators to BitEnumAttr, mainly not (which only inverts
bits that can be valid bits for the attribute) and xor
- Add new bit enum utility functions: bitEnumClear(bits, bit) and
bitEnumSet(bits, bit, value=true) as they've come up in code I've been
writing that makes use of such enums
- Add rudimentary tests for the enum generator
- Update the OpDefinition documentation to make it contain a correct
example and to have it account for the changes mentioned above.

Reviewed By: antiagainst

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