platform/upstream/llvm.git
2 years ago[NFC] Fix order of initialization in MCTargetOptions
Andrew Savonichev [Tue, 26 Apr 2022 19:05:32 +0000 (22:05 +0300)]
[NFC] Fix order of initialization in MCTargetOptions

This patch fixes a compiler warning after D121299:

field 'MCUseDwarfDirectory' will be initialized after field
'MCIncrementalLinkerCompatible'

2 years ago[EarlyCSE] Add tests demonstrating missed opportunitites
Artur Pilipenko [Tue, 26 Apr 2022 18:58:08 +0000 (11:58 -0700)]
[EarlyCSE] Add tests demonstrating missed opportunitites

Add tests demonstrating missed opportunitites around
invariant.start intrinsic.

NFC.

2 years ago[NVPTX] Disable DWARF .file directory for PTX
Andrew Savonichev [Tue, 26 Apr 2022 15:45:09 +0000 (18:45 +0300)]
[NVPTX] Disable DWARF .file directory for PTX

Default behavior for .file directory was changed in D105856, but
ptxas (CUDA 11.5 release) refuses to parse it:

    $ llc -march=nvptx64 llvm/test/DebugInfo/NVPTX/debug-file-loc.ll
    $ ptxas debug-file-loc.s
    ptxas debug-file-loc.s, line 42; fatal   : Parsing error near
    '"foo.h"': syntax error

Added a new field to MCAsmInfo to control default value of
UseDwarfDirectory. This value is used if -dwarf-directory command line
option is not specified.

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

2 years ago[InstCombine] try to fold icmp with mismatched extended operands
Sanjay Patel [Tue, 26 Apr 2022 18:22:16 +0000 (14:22 -0400)]
[InstCombine] try to fold icmp with mismatched extended operands

If a value is known to be non-negative and zexted,
that's the same thing as sexted.

So for the purpose of looking past the casts with
an icmp, treat it as if it was a sext:
https://alive2.llvm.org/ce/z/_BDsGV

This is necessary, but not enough to solve the
motivating problem:
https://github.com/llvm/llvm-project/issues/55013

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

2 years agoRevert "[SLP][TTI] Refactoring of `getShuffleCost` `Args` to work like `getArithmetic...
Vasileios Porpodas [Tue, 26 Apr 2022 18:24:48 +0000 (11:24 -0700)]
Revert "[SLP][TTI] Refactoring of `getShuffleCost` `Args` to work like `getArithmeticInstrCost`"

This reverts commit 55ce296d6f217fd0defed2592ff7b74b79b2c1f0.

2 years ago[InstCombine] fold freeze of partial undef/poison vector constants
Sanjay Patel [Tue, 26 Apr 2022 17:59:32 +0000 (13:59 -0400)]
[InstCombine] fold freeze of partial undef/poison vector constants

We can always replace the undef elements in a vector constant
with regular constants to get rid of the freeze:
https://alive2.llvm.org/ce/z/nfRb4F

The select diffs show that we might do better by adjusting the
logic for a frozen select condition. We may also want to refine
the vector constant replacement to consider forming a splat.

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

2 years ago[RISCV] Add more out of range immediate tests to rv64zbp-invalid.s. NFC
Craig Topper [Tue, 26 Apr 2022 18:02:34 +0000 (11:02 -0700)]
[RISCV] Add more out of range immediate tests to rv64zbp-invalid.s. NFC

This tests the Zbp instructions that change immediate range between
riscv32 and riscv64. We were only testing them for riscv32 before.

2 years ago[SLP][TTI] Refactoring of `getShuffleCost` `Args` to work like `getArithmeticInstrCost`
Vasileios Porpodas [Thu, 21 Apr 2022 17:39:08 +0000 (10:39 -0700)]
[SLP][TTI] Refactoring of `getShuffleCost` `Args` to work like `getArithmeticInstrCost`

Before this patch `Args` was used to pass a broadcat's arguments by SLP.
This patch changes this. `Args` is now used for passing the operands of
the shuffle.

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

2 years agoAttributes: add a new `allocptr` attribute
Augie Fackler [Thu, 24 Feb 2022 15:40:20 +0000 (10:40 -0500)]
Attributes: add a new `allocptr` attribute

This continues the push away from hard-coded knowledge about functions
towards attributes. We'll use this to annotate free(), realloc() and
cousins and obviate the hard-coded list of free functions.

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

2 years ago[RISCV] Add out of range immediate tests for shifts and rotates on rv64.
Craig Topper [Tue, 26 Apr 2022 17:42:58 +0000 (10:42 -0700)]
[RISCV] Add out of range immediate tests for shifts and rotates on rv64.

We were only testing the shared instruction mnemonics in rv32 tests.

Reviewed By: reames

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

2 years ago[flang] Fix crash from PDT component init in module file
Peter Klausler [Mon, 25 Apr 2022 23:00:01 +0000 (16:00 -0700)]
[flang] Fix crash from PDT component init in module file

Semantics now needs to preserve the parse trees from module files,
in case they contain parameterized derived type definitions with
component initializers that may require re-analysis during PDT
instantiation.  Save them in the SemanticsContext.

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

2 years ago[AMDGPU] Precommit a test case for D124450
Jay Foad [Tue, 26 Apr 2022 16:01:02 +0000 (17:01 +0100)]
[AMDGPU] Precommit a test case for D124450

2 years ago[gn build] Port 7b81192d462b
LLVM GN Syncbot [Tue, 26 Apr 2022 17:42:25 +0000 (17:42 +0000)]
[gn build] Port 7b81192d462b

2 years agoIntroduce new symbol on-demand for debug info
Jeffrey Tan [Wed, 20 Apr 2022 14:30:53 +0000 (07:30 -0700)]
Introduce new symbol on-demand for debug info

This diff introduces a new symbol on-demand which skips
loading a module's debug info unless explicitly asked on
demand. This provides significant performance improvement
for application with dynamic linking mode which has large
number of modules.
The feature can be turned on with:
"settings set symbols.load-on-demand true"

The feature works by creating a new SymbolFileOnDemand class for
each module which wraps the actual SymbolFIle subclass as member
variable. By default, most virtual methods on SymbolFileOnDemand are
skipped so that it looks like there is no debug info for that module.
But once the module's debug info is explicitly requested to
be enabled (in the conditions mentioned below) SymbolFileOnDemand
will allow all methods to pass through and forward to the actual SymbolFile
which would hydrate module's debug info on-demand.

In an internal benchmark, we are seeing more than 95% improvement
for a 3000 modules application.

Currently we are providing several ways to on demand hydrate
a module's debug info:
* Source line breakpoint: matching in supported files
* Stack trace: resolving symbol context for an address
* Symbolic breakpoint: symbol table match guided promotion
* Global variable: symbol table match guided promotion

In all above situations the module's debug info will be on-demand
parsed and indexed.

Some follow-ups for this feature:
* Add a command that allows users to load debug info explicitly while using a
  new or existing command when this feature is enabled
* Add settings for "never load any of these executables in Symbols On Demand"
  that takes a list of globs
* Add settings for "always load the the debug info for executables in Symbols
  On Demand" that takes a list of globs
* Add a new column in "image list" that shows up by default when Symbols On
  Demand is enable to show the status for each shlib like "not enabled for
  this", "debug info off" and "debug info on" (with a single character to
  short string, not the ones I just typed)

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

2 years ago[AArch64][NFC] Deleted llvm/test/Analysis/CostModel/AArch64/splat-load.ll test
Vasileios Porpodas [Tue, 26 Apr 2022 14:33:42 +0000 (07:33 -0700)]
[AArch64][NFC] Deleted llvm/test/Analysis/CostModel/AArch64/splat-load.ll test

This test is no longer necessary as it is a subset of:
llvm/test/Analysis/CostModel/AArch64/shuffle-load.ll

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

2 years agollvm-reduce: Simplify virtual register cloning
Matt Arsenault [Sat, 16 Apr 2022 23:42:23 +0000 (19:42 -0400)]
llvm-reduce: Simplify virtual register cloning

Just clone all the virtual registers instead of looking for def
operands. This preserves the register values used, simplifying the
rest of the code. This avoids needing to expose the register map to
target code.

2 years agollvm-reduce: Preserve frame index values when cloning function
Matt Arsenault [Sat, 16 Apr 2022 21:17:41 +0000 (17:17 -0400)]
llvm-reduce: Preserve frame index values when cloning function

Previously the specific values used for fixed frame indexes was in
reverse order in the cloned function from the original, and a map was
used to adjust all frame indexes to the potentially new values. Insert
the fixed objects in reverse to avoid this. This simplifies other
code, since now we don't need to track down all frame indexes. This
will allow targets that store frame indexes in MachineFunctionInfo to
simply copy the values.

Note this isn't directly observable in the test since the resulting
MIR print/parse can shuffle the IDs around (in particular the final
serialization implicitly strips out dead objects).

2 years agoSupport non identity layout map for reshape ops in MemRefToLLVM lowering
Yi Zhang [Tue, 19 Apr 2022 00:50:30 +0000 (20:50 -0400)]
Support non identity layout map for reshape ops in MemRefToLLVM lowering

This change borrows the ideas from `computeExpanded/CollapsedLayoutMap`
and computes the dynamic strides at runtime for the memref descriptors.

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

2 years ago[flang] Get ppc64le build bot back up
Peter Klausler [Tue, 26 Apr 2022 00:36:05 +0000 (17:36 -0700)]
[flang] Get ppc64le build bot back up

A recent change assumed that the native C++ "long double" maps to
a Fortran data type; but this turns out to not be true for ppc64le,
which uses "double-double" for "long double".

This is a quick patch to get the ppc64le flang build bot back up.
A better fix that either uses HostTypeExists<> or replaces "long double"
with "ieee128_t" (or some other solution) is expected to follow soon.

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

2 years agoConsistently use the same apostrophe in these docs.
Tanya Lattner [Tue, 26 Apr 2022 16:29:44 +0000 (09:29 -0700)]
Consistently use the same apostrophe in these docs.

2 years ago[NFC][RISCV][CodeGen] Use ArrayRef in TargetLowering functions
Shao-Ce SUN [Tue, 26 Apr 2022 15:36:42 +0000 (23:36 +0800)]
[NFC][RISCV][CodeGen] Use ArrayRef in TargetLowering functions

Based on D123467.

Reviewed By: reames

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

2 years ago[NFC][libc++] Fixes some tests on Linux.
Mark de Wever [Sat, 23 Apr 2022 16:19:58 +0000 (18:19 +0200)]
[NFC][libc++] Fixes some tests on Linux.

The tests are adapted to the output produced on Linux.

Reviewed By: #libc, philnik, ldionne

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

2 years ago[InstCombine] Add extra use tests for GEP of GEP fold (NFC)
Nikita Popov [Tue, 26 Apr 2022 15:36:39 +0000 (17:36 +0200)]
[InstCombine] Add extra use tests for GEP of GEP fold (NFC)

2 years ago[TableGen] Dump RC.AllocationPriority with -register-info-debug
Jay Foad [Tue, 26 Apr 2022 15:29:06 +0000 (16:29 +0100)]
[TableGen] Dump RC.AllocationPriority with -register-info-debug

2 years ago[SPIRV][NFC] Remove unused variable
Chris Bieneman [Tue, 26 Apr 2022 14:58:16 +0000 (09:58 -0500)]
[SPIRV][NFC] Remove unused variable

This removes an unused local variable that was causing a warning to be
emitted.

2 years ago[SystemZ] Fix C++ ABI for passing args of structs containing zero width bitfield.
Jonas Paulsson [Thu, 24 Mar 2022 11:41:34 +0000 (12:41 +0100)]
[SystemZ] Fix C++ ABI for passing args of structs containing zero width bitfield.

A struct like { float a; int :0; } should per the SystemZ ABI be passed in a
GPR, but to match a bug in GCC it has been passed in an FPR (see 759449c).

GCC has now corrected the C++ ABI for this case, and this patch for clang
follows suit.

Reviewed By: Ulrich Weigand

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

2 years ago[InstCombine] Add tests for GEP of GEP with opaque pointers (NFC)
Nikita Popov [Tue, 26 Apr 2022 15:04:25 +0000 (17:04 +0200)]
[InstCombine] Add tests for GEP of GEP with opaque pointers (NFC)

Test cases with element type mismatch, some of which can still
be combined.

2 years ago[SPIRV][NFC] Fix warnings for switch cases
Chris Bieneman [Tue, 26 Apr 2022 14:46:50 +0000 (09:46 -0500)]
[SPIRV][NFC] Fix warnings for switch cases

Switch statements that cover all cases should not have a `default`
case. When a switch covers all cases and includes a `default` case,
clang emits a diagnostic. Omitting the `default` case allows the
compiler to instead emit a diagnostic on unhandled enum values.

This change removes default cases from all the places that they
shouldn't be, and adds a missing enum case for one switch statement
that wasn't covering all values.

2 years ago[SPIRV][NFC] Fix warning on class/struct mismatch
Chris Bieneman [Tue, 26 Apr 2022 14:46:07 +0000 (09:46 -0500)]
[SPIRV][NFC] Fix warning on class/struct mismatch

Clang issues a warning on class/struct mismatch because the MSVC ABI
varries for classes and structs.

2 years ago[OpenMP] Fix incorrect path taken when searching for LLD for offloading
Joseph Huber [Tue, 26 Apr 2022 14:49:31 +0000 (10:49 -0400)]
[OpenMP] Fix incorrect path taken when searching for LLD for offloading

Summary:
A previous patch updated the path searching in the linker wrapper. I
made an error and caused `lld`, which is necessary to link AMDGPU
images, to not be found on some systems. This patch fixes this by
correctly searching that linker-wrapper's binary path first again.

2 years agoReapply D124184, [DebugInfo][InstrRef] Add a size operand to DBG_PHI
Jeremy Morse [Tue, 26 Apr 2022 10:08:05 +0000 (11:08 +0100)]
Reapply D124184, [DebugInfo][InstrRef] Add a size operand to DBG_PHI

This was reverted twice, in 987cd7c3ed75b and 13815e8cbf8d4. The latter
stemed from not accounting for rare register classes in a pre-allocated
array, and the former from an array not being completely initialized,
leading to asan complaining.

2 years ago[LoopPeel][NFCI] Simplify the code to calculate peel count for PGO
Igor Kudrin [Tue, 26 Apr 2022 14:44:24 +0000 (18:44 +0400)]
[LoopPeel][NFCI] Simplify the code to calculate peel count for PGO

This reorganizes the code as a preparation for D123865:

 * Use more descriptive names for variables
 * Simplify a condition by use an already calculated value
   for `MaxPeelCount`
 * Remove a duplicate log entry
 * Report basic values for loop costs

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

2 years ago[LoopPeel][NFC] Exit early if there is no room for peeling
Igor Kudrin [Tue, 26 Apr 2022 14:43:56 +0000 (18:43 +0400)]
[LoopPeel][NFC] Exit early if there is no room for peeling

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

2 years ago[HIP] Fix diag msg about sanitizer
Yaxun (Sam) Liu [Mon, 25 Apr 2022 15:34:08 +0000 (11:34 -0400)]
[HIP] Fix diag msg about sanitizer

Fix the misleading diag msg as the option is ignored for a particular
offload arch only.

Reviewed by: Artem Belevich

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

2 years ago[NVPTX][tests] add "XFAIL: nvptx" for some tests
Igor Chebykin [Tue, 26 Apr 2022 14:23:17 +0000 (17:23 +0300)]
[NVPTX][tests] add "XFAIL: nvptx" for some tests

Some tests failed for NVPTX target, but it seems that NVPTX will be
fixed and the tests will pass. So, just mark the tests as XFAIL

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

2 years ago[NVPTX][tests] Do not run the tests which are not supported by nvptx
Igor Chebykin [Tue, 26 Apr 2022 14:15:50 +0000 (17:15 +0300)]
[NVPTX][tests] Do not run the tests which are not supported by nvptx

Some generic tests are not supported by the nvptx now.  Moreover, they
are no plans to fix the tested features in nvptx. So, suggest to mark
them as UNSUPPORTED

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

2 years ago[clang-format][docs] Fix incorrect 'clang-format 9' option marker
Krystian Kuzniarek [Thu, 7 Apr 2022 11:11:02 +0000 (13:11 +0200)]
[clang-format][docs] Fix incorrect 'clang-format 9' option marker

Introduced by 23a5090c6, this style option marker indicated
'clang-format 9', though its respective option was available in
an earlier release.

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

2 years ago[PS5] Correctly test for analyzer defaults
Paul Robinson [Tue, 26 Apr 2022 14:14:27 +0000 (07:14 -0700)]
[PS5] Correctly test for analyzer defaults

Commit 5c90eca added some analyzer option checking, but a typo meant
it was redundantly checking PS4 and not adding checking for PS5.
With the test corrected, it identified the necessary driver updates,
added in this commit.

2 years ago[Index] [clangd] Support for concept declarations and requires expressions
Ilya Biryukov [Tue, 26 Apr 2022 13:38:28 +0000 (13:38 +0000)]
[Index] [clangd] Support for concept declarations and requires expressions

Add support for concepts and requires expression in the clang index.
Genarate USRs for concepts.

Also change how `RecursiveASTVisitor` handles return type requirement in
requires expressions. The new code unpacks the synthetic template parameter
list used for storing the actual expression. This simplifies
implementation of the indexing. No code seems to depend on the original
traversal anyway and the synthesized template parameter list is easily
accessible from inside the requires expression if needed.

Add tests in the clangd codebase.

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

Reviewed By: sammccall

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

2 years agoFix test from 5ff992 to work with win 32 bit, fix a typo.
Erich Keane [Tue, 26 Apr 2022 12:50:33 +0000 (05:50 -0700)]
Fix test from 5ff992 to work with win 32 bit, fix a typo.

See the discussion on D123319.  Default calling convention on Windows32
bit is to have 'this-call' for member functions, so add a wildcard to
take care of that.

Also, one of the FileCheck 'match' flags was incorrect, so fix that too.

2 years ago[ConstraintElimination] Check if const. is small enough before using it
Florian Hahn [Tue, 26 Apr 2022 12:16:02 +0000 (13:16 +0100)]
[ConstraintElimination] Check if const. is small enough before using it

Check if the value of a ConstantInt is small enough to be used for
solving before calling getSExtValue.

Fixes #55085

2 years ago[llvm][Inline] Remove PriorityInlineOrder in SCC inliner
Liqiang Tao [Tue, 26 Apr 2022 12:16:37 +0000 (20:16 +0800)]
[llvm][Inline] Remove PriorityInlineOrder in SCC inliner

Since the size of most of SCC's is 1, the PriorityInlineOrder would not change the inline
order in SCC inliner.

Reviewed By: kazu

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

2 years ago[mlir] Fix -Wunused-private-field in the Transform dialect
Alex Zinenko [Tue, 26 Apr 2022 11:57:03 +0000 (13:57 +0200)]
[mlir] Fix -Wunused-private-field in the Transform dialect

Classes derived from TransformState::Extension may need access to the
parent state.

2 years ago[IPSCCP] Support unfeasible default dests for switch.
Florian Hahn [Tue, 26 Apr 2022 11:41:41 +0000 (12:41 +0100)]
[IPSCCP] Support unfeasible default dests for switch.

At the moment, unfeasible default destinations are not handled properly
in removeNonFeasibleEdges. So far, only unfeasible cases are removed,
but later code expects unreachable blocks to have no predecessors.

This is causing the crash reported in PR49573.

If the default destination is unfeasible it won't be executed. Create
a new unreachable block on demand and use that as default
destination.

Note that at the moment this only is relevant for cases where
resolvedUndefsIn marks the first case as executable. Regular switch
handling has a FIXME/TODO to support determining whether the default
case is feasible or not.

Fixes #48917.

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

2 years ago[demangler] Simplify OutputBuffer initialization
Nathan Sidwell [Mon, 28 Feb 2022 18:13:44 +0000 (10:13 -0800)]
[demangler] Simplify OutputBuffer initialization

Every non-testcase use of OutputBuffer contains code to allocate an
initial buffer (using either 128 or 1024 as initial guesses). There's
now no need to do that, given recent changes to the buffer extension
heuristics -- it allocates a 1k(ish) buffer on first need.

Just pass in a buffer (if any) to the constructor.  Thus the
OutputBuffer's ownership of the buffer starts at its own lifetime
start. We can reduce the lifetime of this object in several cases.

That new constructor takes a 'size_t *' for the size argument, as all
uses with a non-null buffer are passing through a malloc'd buffer from
their own caller in this manner.

The buffer reset member function is never used, and is deleted.

The original buffer initialization code would return a failure code if
that first malloc failed.  Existing code either ignored that, called
std::terminate with a FIXME, or returned an error code.

But that's not foolproof anyway, as a subsequent buffer extension
failure ends up calling std::terminate. I am working on addressing
that unfortunate failure mode in a manner more consistent with the C++
ABI design.

Reviewed By: dblaikie

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

2 years ago[mlir] Add a title to the Transform Dialect doc
Alex Zinenko [Tue, 26 Apr 2022 11:04:41 +0000 (13:04 +0200)]
[mlir] Add a title to the Transform Dialect doc

2 years ago[llvm-objcopy][NFC] rename variable.
Alexey Lapshin [Tue, 26 Apr 2022 09:45:28 +0000 (12:45 +0300)]
[llvm-objcopy][NFC] rename variable.

2 years ago[compiler-rt] Use C_STANDARD instead of custom logic for adding -std=c11
Martin Storsjö [Thu, 24 Mar 2022 11:17:28 +0000 (13:17 +0200)]
[compiler-rt] Use C_STANDARD instead of custom logic for adding -std=c11

Apply this in add_compiler_rt_runtime instead of manually adding it
to the individual projects. This applies the option on more
parts of compiler-rt than before, but should ideally not make any
difference assuming the other runtimes that lacked the option
also were C11 compatible.

Not marking this as required, to match the existing behaviour (where
`-std=c11` was added only if supported by the compiler).

This was suggested during the review of D110005.

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

2 years ago[gn build] Port 854c33946fd4
LLVM GN Syncbot [Tue, 26 Apr 2022 09:06:40 +0000 (09:06 +0000)]
[gn build] Port 854c33946fd4

2 years ago[RS4GC] Prune inputs of BDV if they are BDV themselves
Dmitry Makogon [Fri, 15 Apr 2022 07:59:40 +0000 (14:59 +0700)]
[RS4GC] Prune inputs of BDV if they are BDV themselves

Don't check whether an input of BDV can be pruned if the input
is the BDV itself. BDV is present in the states map, so in case
the input is the BDV itself, we'd return false. So explicitly check this case.

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

2 years ago[llvm-gsymutil][NFC] refactor AddressRange&AddresRanges structures.
Alexey Lapshin [Fri, 22 Apr 2022 09:58:13 +0000 (12:58 +0300)]
[llvm-gsymutil][NFC] refactor AddressRange&AddresRanges structures.

llvm-gsymutil has an implementation of AddressRange and AddressRanges
classes. That implementation might be reused in other parts of llvm.
This patch moves AddressRange and AddressRanges classes into llvm/ADT.

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

2 years ago[pseudo] NFC, fix some code-style naming violations.
Haojian Wu [Tue, 26 Apr 2022 08:35:53 +0000 (10:35 +0200)]
[pseudo] NFC, fix some code-style naming violations.

2 years ago[Clang] Use std::move in GlobalModuleIndex::readIndex. NFC
Jun Zhang [Sat, 9 Apr 2022 02:42:25 +0000 (10:42 +0800)]
[Clang] Use std::move in GlobalModuleIndex::readIndex. NFC

BitstreamCursors are heavy-weight objects that should not be passed by value.

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

2 years ago[X86] Add use condition for combineSetCCMOVMSK
Xiang1 Zhang [Fri, 22 Apr 2022 06:59:53 +0000 (14:59 +0800)]
[X86] Add use condition for combineSetCCMOVMSK

Reviewed by RKSimon, LuoYuanke

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

2 years ago[clang] Fix a constant evaluator crash on a NULL-type expr.
Haojian Wu [Mon, 25 Apr 2022 13:42:35 +0000 (15:42 +0200)]
[clang] Fix a constant evaluator crash on a NULL-type expr.

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

2 years ago[AMDGPU] Vector register spill test cleanup (NFC)
Christudasan Devadasan [Tue, 26 Apr 2022 06:45:08 +0000 (12:15 +0530)]
[AMDGPU] Vector register spill test cleanup (NFC)

The vector register spills have no dependency with
SILowerSGPRSpills pass anymore. The entire handling
has been moved to PrologEpilogInserter with D55301.

2 years ago[libc] Add stdio entrypoints to aarch64 fullbuild.
Siva Chandra [Tue, 26 Apr 2022 07:25:12 +0000 (00:25 -0700)]
[libc] Add stdio entrypoints to aarch64 fullbuild.

2 years ago[libc][Obvious] Add deps of fopencookie_test only if it is enabled.
Siva Chandra [Tue, 26 Apr 2022 07:09:35 +0000 (00:09 -0700)]
[libc][Obvious] Add deps of fopencookie_test only if it is enabled.

2 years ago[X86][AMX] Report error when shapes are not pre-defined.
Luo, Yuanke [Sun, 24 Apr 2022 08:31:43 +0000 (16:31 +0800)]
[X86][AMX] Report error when shapes are not pre-defined.

Instead of report fatal error, this patch emit error message and exit
when shapes are not pre-defined. This would cause the compiling fail but
not crash.

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

2 years ago[libc++] Remove <functional> includes
Nikolas Klauser [Sat, 23 Apr 2022 08:07:24 +0000 (10:07 +0200)]
[libc++] Remove <functional> includes

Reviewed By: var-const, #libc, ldionne

Spies: #libc_vendors, ldionne, libcxx-commits, miyuki

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

2 years ago[analyzer] Fix ValistChecker false-positive involving symbolic pointers
Balazs Benics [Tue, 26 Apr 2022 06:49:05 +0000 (08:49 +0200)]
[analyzer] Fix ValistChecker false-positive involving symbolic pointers

In the following example:

  int va_list_get_int(va_list *va) {
    return va_arg(*va, int); // FP
  }

The `*va` expression will be something like `Element{SymRegion{va}, 0, va_list}`.
We use `ElementRegions` for representing the result of the dereference.
In this case, the `IsSymbolic` was set to `false` in the
`getVAListAsRegion()`.

Hence, before checking if the memregion is a SymRegion, we should take
the base of that region.

Analogously to the previous example, one can craft other cases:

  struct MyVaList {
    va_list l;
  };
  int va_list_get_int(struct MyVaList va) {
    return va_arg(va.l, int); // FP
  }

But it would also work if the `va_list` would be in the base or derived
part of a class. `ObjCIvarRegions` are likely also susceptible.
I'm not explicitly demonstrating these cases.

PS: Check the `MemRegion::getBaseRegion()` definition.

Fixes #55009

Reviewed By: xazax.hun

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

2 years agoIntrinsic for checking floating point class
Serge Pavlov [Sun, 10 Oct 2021 15:46:58 +0000 (22:46 +0700)]
Intrinsic for checking floating point class

This change introduces a new intrinsic, `llvm.is.fpclass`, which checks
if the provided floating-point number belongs to any of the the specified
value classes. The intrinsic implements the checks made by C standard
library functions `isnan`, `isinf`, `isfinite`, `isnormal`, `issubnormal`,
`issignaling` and corresponding IEEE-754 operations.

The primary motivation for this intrinsic is the support of strict FP
mode. In this mode using compare instructions or other FP operations is
not possible, because if the value is a signaling NaN, floating-point
exception `Invalid` is raised, but the aforementioned functions must
never raise exceptions.

Currently there are two solutions for this problem, both are
implemented partially. One of them is using integer operations to
implement the check. It was implemented in https://reviews.llvm.org/D95948
for `isnan`. It solves the problem of exceptions, but offers one
solution for all targets, although some can do the check in more
efficient way.

The other, implemented in https://reviews.llvm.org/D96568, introduced a
hook 'clang::TargetCodeGenInfo::testFPKind', which injects a target
specific code into IR to implement `isnan` and some other functions. It is
convenient for targets that have dedicated instruction to determine FP data
class. However using target-specific intrinsic complicates analysis and can
prevent some optimizations.

A special intrinsic for value class checks allows representing data class
tests with enough flexibility. During IR transformations it represents the
check in target-independent way and saves it from undesired transformations.
In the instruction selector it allows efficient lowering depending on the
used target and mode.

This implementation is an extended variant of `llvm.isnan` introduced
in https://reviews.llvm.org/D104854. It is limited to minimal intrinsic
support. Target-specific treatment will be implemented in separate
patches.

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

2 years agoProvide the complete response and reporting Code of Conduct documentation. Remove...
Tanya Lattner [Tue, 26 Apr 2022 05:32:56 +0000 (22:32 -0700)]
Provide the complete response and reporting Code of Conduct documentation. Remove the word draft from all documents, add information about the CoC committee expectations and add a place for transparency reports.

This patch provides the response and reporting guides for Code of Conduct reports. It also removes the word draft from all the documents,
adds information about the CoC committee, and a place to put transparency reports. A post will also be made on Discourse to provide more details about the history of the code of conduct, this patch, and next steps. Please see that post for full details. I will put a link below once I have it.

Reviewed By: aaron.ballman, hubert.reinterpretcast

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

2 years ago[NFC][trace] simplify the instruction dumper
Walter Erquinigo [Wed, 20 Apr 2022 04:57:31 +0000 (21:57 -0700)]
[NFC][trace] simplify the instruction dumper

TraceInstructionDumper::DumpInstructions was becoming too big, so I'm
refactoring it into smaller functions. I also made some static methods proper
instance methods to simplify calls. Other minor improvements are also done.

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

2 years ago[RISCV][SelectionDAG] Support VP_ADD/VP_MUL/VP_SUB mask operations
Lian Wang [Thu, 21 Apr 2022 03:17:31 +0000 (03:17 +0000)]
[RISCV][SelectionDAG] Support VP_ADD/VP_MUL/VP_SUB mask operations

Reviewed By: craig.topper

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

2 years ago[trace][intel pt] Support events
Walter Erquinigo [Mon, 18 Apr 2022 16:28:10 +0000 (09:28 -0700)]
[trace][intel pt] Support events

A trace might contain events traced during the target's execution. For
example, a thread might be paused for some period of time due to context
switches or breakpoints, which actually force a context switch. Not only
that, a trace might be paused because the CPU decides to trace only a
specific part of the target, like the address filtering provided by
intel pt, which will cause pause events. Besides this case, other kinds
of events might exist.

This patch adds the method `TraceCursor::GetEvents()`` that returns the
list of events that happened right before the instruction being pointed
at by the cursor. Some refactors were done to make this change simpler.

Besides this new API, the instruction dumper now supports the -e flag
which shows pause events, like in the following example, where pauses
happened due to breakpoints.

```
thread #1: tid = 2717361
  a.out`main + 20 at main.cpp:27:20
    0: 0x00000000004023d9    leaq   -0x1200(%rbp), %rax
  [paused]
    1: 0x00000000004023e0    movq   %rax, %rdi
  [paused]
    2: 0x00000000004023e3    callq  0x403a62                  ; std::vector<int, std::allocator<int> >::vector at stl_vector.h:391:7
  a.out`std::vector<int, std::allocator<int> >::vector() at stl_vector.h:391:7
    3: 0x0000000000403a62    pushq  %rbp
    4: 0x0000000000403a63    movq   %rsp, %rbp
```

The `dump info` command has also been updated and now it shows the
number of instructions that have associated events.

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

2 years ago[gn build] Port b1fa5ac3ba34
LLVM GN Syncbot [Tue, 26 Apr 2022 01:46:12 +0000 (01:46 +0000)]
[gn build] Port b1fa5ac3ba34

2 years ago[mlgo] Factor out TensorSpec
Mircea Trofin [Mon, 25 Apr 2022 20:49:27 +0000 (13:49 -0700)]
[mlgo] Factor out TensorSpec

This is a simple datatype with a few JSON utilities, and is independent
of the underlying executor. The main motivation is to allow taking a
dependency on it on the AOT side, and allow us build a correctly-sized
buffer in the cases when the requested feature isn't supported by the
model. This, in turn, allows us to grow the feature set supported by the
compiler in a backward-compatible way; and also collect traces exposing
the new features, but starting off the older model, and continue
training from those new traces.

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

2 years agoRefactor protected virtual functions from SymbolFile into new SymbolFileCommon class.
Jeffrey Tan [Wed, 20 Apr 2022 14:30:53 +0000 (07:30 -0700)]
Refactor protected virtual functions from SymbolFile into new SymbolFileCommon class.

This is a preparatory patch for https://reviews.llvm.org/D121631.
It refactors protected virtual members of SymbolFile
into a new SymbolFileCommon class per suggestion in:
https://reviews.llvm.org/D121631

This will avoid the friendship declaration in that patch.

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

2 years agoNFC. Add missing DXILPointerTyID case
Chris Bieneman [Tue, 26 Apr 2022 01:07:56 +0000 (20:07 -0500)]
NFC. Add missing DXILPointerTyID case

This resolves -Werror hexigon build failures.

2 years agoDon't replace Undef with null value for Constants Differential Revision:https://revie...
YASHASVI KHATAVKAR [Tue, 26 Apr 2022 00:46:14 +0000 (20:46 -0400)]
Don't replace Undef with null value for Constants Differential Revision:https://reviews.llvm.org/D124098

2 years ago[CMake] Update cache file for Win to ARM Linux cross toolchain builders. NFC.
Vladimir Vereschaka [Tue, 26 Apr 2022 00:44:35 +0000 (17:44 -0700)]
[CMake] Update cache file for Win to ARM Linux cross toolchain builders. NFC.

Use default test configuration file for the libunwind tests.

2 years ago[libunwind] Update the test configuration files to support the remote execution.
Vladimir Vereschaka [Tue, 26 Apr 2022 00:33:03 +0000 (17:33 -0700)]
[libunwind] Update the test configuration files to support the remote execution.

These changes allow remote execution for the libunwind library tests.

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

2 years ago[gn build] Kind of port e6f44a3cd273 (DirectXTests)
Nico Weber [Tue, 26 Apr 2022 00:25:39 +0000 (20:25 -0400)]
[gn build] Kind of port e6f44a3cd273 (DirectXTests)

2 years ago[test][clangd] Use StringRef instead of std::string
Vitaly Buka [Mon, 25 Apr 2022 23:35:58 +0000 (16:35 -0700)]
[test][clangd] Use StringRef instead of std::string

runWithAST stores the first parameters as StringRef, so we can't
use temporarily std::string from parameter ID.

2 years ago[lldb] Update online help text (consistency, typo)
Will Hawkins [Mon, 25 Apr 2022 23:29:07 +0000 (16:29 -0700)]
[lldb] Update online help text (consistency, typo)

Update the online help text for breakpoint set to be
consistent with respect to the spelling of Objective-C
and fix a few space-related typos.

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

2 years ago[RISCV] Pre-commit test for D122769. NFC
Craig Topper [Mon, 25 Apr 2022 18:03:19 +0000 (11:03 -0700)]
[RISCV] Pre-commit test for D122769. NFC

2 years ago[LLDB][NativePDB] Fix incorrect file index of inlinees introduced by f00cd23caed5f920...
Zequan Wu [Mon, 25 Apr 2022 23:06:52 +0000 (16:06 -0700)]
[LLDB][NativePDB] Fix incorrect file index of inlinees introduced by f00cd23caed5f920495bcae2055f4c478d8383d6

2 years ago[NFC] Cleanup code to get back in synch for upstreaming.
Eric Schweitz [Mon, 25 Apr 2022 19:13:54 +0000 (12:13 -0700)]
[NFC] Cleanup code to get back in synch for upstreaming.

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

2 years agoAdd PointerType analysis for DirectX backend
Chris Bieneman [Thu, 14 Apr 2022 18:40:26 +0000 (13:40 -0500)]
Add PointerType analysis for DirectX backend

As implemented this patch assumes that Typed pointer support remains in
the llvm::PointerType class, however this could be modified to use a
different subclass of llvm::Type that could be disallowed from use in
other contexts.

This does not rely on inserting typed pointers into the Module, it just
uses the llvm::PointerType class to track and unique types.

Fixes #54918

Reviewed By: kuhar

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

2 years agoRevert "Reapply D124184, [DebugInfo][InstrRef] Add a size operand to DBG_PHI"
Jeremy Morse [Mon, 25 Apr 2022 22:30:15 +0000 (23:30 +0100)]
Revert "Reapply D124184, [DebugInfo][InstrRef] Add a size operand to DBG_PHI"

This reverts commit 5db925023169f8a19419e68153682d1e518f8392.

Further to the early revert, the sanitizers have found something wrong with
this.

2 years agoAdd missing comparison operators to SmallVector
Frederik Gossen [Mon, 25 Apr 2022 21:44:53 +0000 (17:44 -0400)]
Add missing comparison operators to SmallVector

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

2 years ago[libc++] Avoid lifetime UB in __thread_local_data()
Vitaly Buka [Fri, 1 Apr 2022 04:58:44 +0000 (21:58 -0700)]
[libc++] Avoid lifetime UB in __thread_local_data()

Detected on many lld tests with -fsanitize-memory-use-after-dtor.
Also https://lab.llvm.org/buildbot/#/builders/sanitizer-x86_64-linux-fast after D122869 will report a lot of them.

Threads may outlive static variables. Even if ~__thread_specific_ptr() does nothing, lifetime of members ends with ~ and accessing the value is UB https://eel.is/c++draft/basic.life#1

```
==9214==WARNING: MemorySanitizer: use-of-uninitialized-value
    #0 0x557e1cec4539 in __libcpp_tls_set ../include/c++/v1/__threading_support:428:12
    #1 0x557e1cec4539 in set_pointer ../include/c++/v1/thread:196:5
    #2 0x557e1cec4539 in void* std::__msan::__thread_proxy<
      std::__msan::tuple<...>, llvm::parallel::detail::(anonymous namespace)::ThreadPoolExecutor::ThreadPoolExecutor(llvm::ThreadPoolStrategy)::'lambda'()::operator()() const::'lambda'()> >(void*) ../include/c++/v1/thread:285:27

  Memory was marked as uninitialized
    #0 0x557e10a0759d in __sanitizer_dtor_callback compiler-rt/lib/msan/msan_interceptors.cpp:940:5
    #1 0x557e1d8c478d in std::__msan::__thread_specific_ptr<std::__msan::__thread_struct>::~__thread_specific_ptr() libcxx/include/thread:188:1
    #2 0x557e10a07dc0 in MSanCxaAtExitWrapper(void*) compiler-rt/lib/msan/msan_interceptors.cpp:1151:3
```

The test needs D123979 or  -fsanitize-memory-param-retval enabled by default.

Reviewed By: ldionne, #libc

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

2 years ago[libcxx][NFC] Inclusive language: remove use of sanity check
Quinn Pham [Fri, 22 Apr 2022 21:21:02 +0000 (16:21 -0500)]
[libcxx][NFC] Inclusive language: remove use of sanity check

from libcxx/test/std/input.output/string.streams/stringbuf/stringbuf.virtuals/

[NFC] As part of using inclusive language within the llvm project, this
patch rewords comments to remove sanity check.

Reviewed By: #libc, philnik

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

2 years ago[NVPTX] Support float <-> 2 x half bitcasts
Jakub Chlanda [Mon, 25 Apr 2022 21:22:22 +0000 (14:22 -0700)]
[NVPTX] Support float <-> 2 x half bitcasts

Make sure NVPTX backend can handle bitcasting between `float` and `<2 x half>` types.

This was discovered through: https://github.com/intel/llvm/issues/5969
I'm not suggesting that such bitcasts make much sense, but it feels like the compiler should not hard crash on them.

Reviewed By: tra

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

2 years agoChange NVPTX/f16x2-instructions.ll to use unix EOL. NFC
Artem Belevich [Mon, 25 Apr 2022 21:28:30 +0000 (14:28 -0700)]
Change NVPTX/f16x2-instructions.ll to use unix EOL. NFC

2 years ago[InstCombine] add tests for icmp with extended operands; NFC
Sanjay Patel [Mon, 25 Apr 2022 19:49:30 +0000 (15:49 -0400)]
[InstCombine] add tests for icmp with extended operands; NFC

2 years ago[InstCombine] use isKnownNonNegative to reduce code duplication; NFC
Sanjay Patel [Mon, 25 Apr 2022 17:15:55 +0000 (13:15 -0400)]
[InstCombine] use isKnownNonNegative to reduce code duplication; NFC

We may be able to make the ValueTracking wrapper smarter
in the future (for example, analyze a simple recurrence),
so this will automatically benefit if that happens.

2 years ago[compiler-rt][NFC] Inclusive language: remove use of sanity check/test
Quinn Pham [Fri, 22 Apr 2022 21:15:24 +0000 (16:15 -0500)]
[compiler-rt][NFC] Inclusive language: remove use of sanity check/test

from compiler-rt/lib/tsan

[NFC] As part of using inclusive language within the llvm project, this
patch rewords comments to remove sanity check and sanity test.

Reviewed By: dvyukov

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

2 years agoRegAllocGreedy: Allow last chance recolor to retry overlapping tuples
Matt Arsenault [Fri, 1 Apr 2022 13:59:05 +0000 (09:59 -0400)]
RegAllocGreedy: Allow last chance recolor to retry overlapping tuples

Last chance recoloring didn't try recoloring a done register with the
same class since it believed there was no point. This doesn't
necessarily apply if the members in that class overlap. Allow the
recoloring to proceed if the assigned interfering physical register
overlaps with the candidate register.

This avoids an allocation failure with overlapping tuples. This
testcase could be handled better, and I don't believe should reach
last chance recoloring. The failure only manifests with the mutually
unsatisfiable register hints to overlapping tuples. The earlier
assignment decisions probably should have figured out that using these
hints was a bad idea.

2 years ago[clang][NFC] Inclusive language: remove use of Whitelist in clang/lib/Analysis/
Quinn Pham [Fri, 22 Apr 2022 21:26:13 +0000 (16:26 -0500)]
[clang][NFC] Inclusive language: remove use of Whitelist in clang/lib/Analysis/

[NFC] As part of using inclusive language within the llvm project, this patch
rewords a comment to replace Whitelist with Allowlist in
`RetainSummaryManager.cpp`.

Reviewed By: aaron.ballman

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

2 years ago[mlir] Allow data flow analysis of non-control flow branch arguments
Krzysztof Drewniak [Tue, 19 Apr 2022 17:10:31 +0000 (17:10 +0000)]
[mlir] Allow data flow analysis of non-control flow branch arguments

This commit adds the visitNonControlFlowArguments method to
DataFlowAnalysis, allowing analyses to provide lattice values for the
arguments to a RegionSuccessor block that aren't directly tied to an
op's inputs. For example, integer range interface can use this method
to infer bounds for the step values in loops.

This method has a default implementation that keeps the old behavior
of assigning a pessimistic fixedpoint state to all such arguments.

Reviewed By: Mogball, rriddle

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

2 years ago[libunwind] [CMake] Remove leftover no-op cmake variable setting. NFC.
Martin Storsjö [Mon, 25 Apr 2022 08:02:36 +0000 (11:02 +0300)]
[libunwind] [CMake] Remove leftover no-op cmake variable setting. NFC.

The setting and restoring of this variable became unused in
3ee0cec88effc88285732c8bec2a8f0e4e37c0b1 / D112155.

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

2 years ago[libunwind] Fix build warnings in Unwind-EHABI.cpp. NFC.
Martin Storsjö [Mon, 25 Apr 2022 10:00:13 +0000 (13:00 +0300)]
[libunwind] Fix build warnings in Unwind-EHABI.cpp. NFC.

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

2 years ago[flang][runtime] Fix total MAXLOC/MINLOC for non-integer data
Peter Klausler [Wed, 20 Apr 2022 22:58:43 +0000 (15:58 -0700)]
[flang][runtime] Fix total MAXLOC/MINLOC for non-integer data

A template argument was hard-coded as the Integer type category
rather than properly forwarding the type category of the data for
type-specific instantiations of total (no DIM=) MAXLOC and MINLOC.
This broke total MAXLOC and MINLOC reductions for real and character
data.

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

2 years ago[PS5] Driver test for analyzer defaults
Paul Robinson [Mon, 25 Apr 2022 19:41:37 +0000 (12:41 -0700)]
[PS5] Driver test for analyzer defaults

2 years ago[flang] Add semantic checks for intrinsic function REDUCE()
Peter Klausler [Tue, 19 Apr 2022 20:49:06 +0000 (13:49 -0700)]
[flang] Add semantic checks for intrinsic function REDUCE()

Support REDUCE's special semantic requirements in intrinsic
procedure semantics.

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

2 years ago[lit] Keep stdout/stderr when using GoogleTest format
Yuanfang Chen [Sun, 24 Apr 2022 02:30:00 +0000 (19:30 -0700)]
[lit] Keep stdout/stderr when using GoogleTest format

When a unit test crashes or timeout, print the shard's stdout and
stderr. When a unit test fails, attaches the test's output to the LIT
output to help debugging.

While at it, concatenating shard's environment variables using space
instead of newline to make the reproducer script user friendly.

Based on D123797. (Thanks to @lenary)

2 years ago[SLP] Steer for the best chance in tryToVectorize() when rooting with binary ops.
Valery N Dmitriev [Mon, 25 Apr 2022 19:25:33 +0000 (12:25 -0700)]
[SLP] Steer for the best chance in tryToVectorize() when rooting with binary ops.

tryToVectorize() method implements one of searching paths for vectorizable tree roots in SLP vectorizer,
specifically for binary and comparison operations. Order of making probes for various scalar pairs
was defined by its implementation: the instruction operands, then climb over one operand if
the instruction is its sole user and then perform same actions for another operand if previous
attempts failed. Problem with this approach is that among these options we can have more than a
single vectorizable tree candidate and it is not necessarily the one that encountered first.
Trying to build vectorizable tree for each possible combination for just evaluation is expensive.
But we already have lookahead heuristics mechanism which we use for finding best pick among
operands of commutative instructions. It calculates cumulative score for candidates in two
consecutive lanes. This patch introduces use of the heuristics for choosing the best pair among
several combinations. We only try one that looks as most promising for vectorization.
Additional benefit is that we reduce total number of vectorization trees built for probes
because we skip those looking non-profitable early.

Reviewed By: Alexey Bataev (ABataev), Vasileios Porpodas (vporpo)
Differential Revision: https://reviews.llvm.org/D124309

2 years ago[Serialization] Remove dead TYPE_FUNCTION_PROTO abbreviation. NFC
Sam McCall [Mon, 25 Apr 2022 19:16:31 +0000 (21:16 +0200)]
[Serialization] Remove dead TYPE_FUNCTION_PROTO abbreviation. NFC

It was added in 01b2cb47 but never used.