platform/upstream/llvm.git
20 months ago[clang-format] Don't crash on malformed preprocessor conditions
sstwcw [Sun, 30 Oct 2022 02:18:58 +0000 (02:18 +0000)]
[clang-format] Don't crash on malformed preprocessor conditions

Previously the program would crash on this input:

```
#else
#if X
```

The problem was that in `parsePPElse`, `PPBranchLevel` would be
incremented when the first `#else` gets parsed, but `PPLevelBranchCount`
and `PPLevelBranchIndex` would not be updated together.

I found the problem when working on D135740.

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

20 months ago[flang] Abstract interfaces can't be designated or referenced
Peter Klausler [Thu, 13 Oct 2022 17:38:55 +0000 (10:38 -0700)]
[flang] Abstract interfaces can't be designated or referenced

Broaden the check for misuse of ABSTRACT procedure interfaces by
doing it in expression analysis rather than name resolution so that
cases like pointer assignment targets and actual arguments are also
diagnosed as errors.

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

20 months ago[flang] Stricter scrutiny of deferred type parameters (C702)
Peter Klausler [Wed, 12 Oct 2022 22:15:33 +0000 (15:15 -0700)]
[flang] Stricter scrutiny of deferred type parameters (C702)

Semantics checks C702, which disallows deferred type parameters for
any entity that is neither an allocatable nor a pointer, only during
name resolution of type declaration statements.  This check needs to
be broader, since Fortran entities can have their types specified in
other ways.  Rewrite the check and move it to the general declaration
checking pass.

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

20 months ago[flang] Catch C721 violations in defined interfaces
Peter Klausler [Wed, 12 Oct 2022 00:21:14 +0000 (17:21 -0700)]
[flang] Catch C721 violations in defined interfaces

Fortran's constraint C721 allows an assumed-length CHARACTER
entity to be declared in a very limited set of circumstances that
does not include an explicit external interface definition.

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

20 months ago[flang] Catch inconsistent function/subroutine usage of procedure pointer components
Peter Klausler [Tue, 11 Oct 2022 23:31:47 +0000 (16:31 -0700)]
[flang] Catch inconsistent function/subroutine usage of procedure pointer components

When a derived type has a procedure pointer component with no interface,
we can't do a lot of checking on its call sites, but we can at least require
that the same procedure pointer component be used consistently as either
a function or as a subroutine, but not both.

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

20 months ago[flang] Warn about overflow from folding complex ABS()
Peter Klausler [Tue, 11 Oct 2022 22:00:08 +0000 (15:00 -0700)]
[flang] Warn about overflow from folding complex ABS()

Emit a warning when the result of folding a call to
ABS() with a complex argument results in an overflow.

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

20 months ago[flang] Recode a line to dodge a clang warning
Peter Klausler [Sat, 29 Oct 2022 23:00:24 +0000 (16:00 -0700)]
[flang] Recode a line to dodge a clang warning

Rewrite a correct use of "&" -- conjunction without short-circuiting --
from a recent patch into multiple lines so that clang doesn't warn
about it.

20 months ago[llvm-objdump] Add --no-print-imm-hex to tests depending on it.
Daniel Thornburgh [Sat, 29 Oct 2022 03:04:08 +0000 (20:04 -0700)]
[llvm-objdump] Add --no-print-imm-hex to tests depending on it.

This prepares for an upcoming change to make --print-imm-hex the default
behavior of llvm-objdump. These tests were updated in a semi-automatic
fashion.

See D136972 for details.

20 months ago[test][AliasAnalysis] Add some baseline tests in preparation for getModRefInfoMask().
Patrick Walton [Fri, 28 Oct 2022 19:42:01 +0000 (12:42 -0700)]
[test][AliasAnalysis] Add some baseline tests in preparation for getModRefInfoMask().

This commit adds some tests in preparation for D136659, which allows alias
analysis to treat locally-invariant memory pointed to by readonly noalias
pointers the same as globally-invariant memory in some cases. The existing
behavior for these tests is marked as expected and will be changed when that
diff lands.

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

20 months ago[test] Remove readonly from some parameters that are written through in tests.
Patrick Walton [Thu, 27 Oct 2022 20:01:20 +0000 (13:01 -0700)]
[test] Remove readonly from some parameters that are written through in tests.

In D136659 I found a few tests that write through readonly parameters:

* Analysis/BasicAA/pr18573.ll: @foo1 writes through %arr.ptr, but declares it
readonly. I removed the readonly annotation.

* CodeGen/ARM/ParallelDSP/aliasing.ll: @restrict writes through the readonly
%arg3, @store_alias_arg3_illegal_1 writes through the readonly %arg3, and
@store_alias_arg3_illegal_2 writes through the readonly %arg3. I removed
readonly from all three. Also, I added some CHECK-LABEL directives to make it
harder for FileCheck output to be mixed up.

* Transforms/LoopVectorize/AArch64/sve-gather-scatter.ll:
@gather_nxv4i32_ind64_stride2 writes through the readonly %a. I removed the
readonly attribute.

* Transforms/LoopVectorize/interleaved-accesses.ll: @load_gap_reverse writes
through the readonly %P1 and %P2. Also, the corresponding C code in the comment
didn't match the test. I removed the readonly attribute from both parameters
and corrected the C code.

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

20 months ago[flang] Enforce constraint C911
Peter Klausler [Tue, 11 Oct 2022 19:45:05 +0000 (12:45 -0700)]
[flang] Enforce constraint C911

Diagnose attempts to use an non-polymorphic instance of an
abstract derived type.

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

20 months ago[flang] Speed up folding of LEN_TRIM()
Peter Klausler [Mon, 10 Oct 2022 21:42:16 +0000 (14:42 -0700)]
[flang] Speed up folding of LEN_TRIM()

LEN_TRIM's folding is currently based on VERIFY(), and it is kind of
slow for the very large CHARACTER arguments that can show up in artificial
test suites.  Rewrite in terms of single-character accesses.

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

20 months ago[flang] Improve error recovery for bad/missing construct END statements
Peter Klausler [Mon, 10 Oct 2022 20:47:12 +0000 (13:47 -0700)]
[flang] Improve error recovery for bad/missing construct END statements

When a multi-statement construct should end with a particular END statement
like "END SELECT", and that construct's END statement is missing or
unrecognizable, the error recovery productions should not misinterpret
a program unit END statement that follows and consume it as a misspelled
construct END statement. Doing so leads to cascading errors or a failed parse.

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

20 months ago[flang] Fix warning from clang 16 on recent patch
Peter Klausler [Sat, 29 Oct 2022 19:43:19 +0000 (12:43 -0700)]
[flang] Fix warning from clang 16 on recent patch

Add an explicit empty initializer to a new struct member definition
to silence warnings from clang 16 about missing initializers.

20 months ago[ORC] Mark late-claimed weak symbols as live in ObjectLinkingLayer.
Lang Hames [Sat, 29 Oct 2022 17:48:09 +0000 (17:48 +0000)]
[ORC] Mark late-claimed weak symbols as live in ObjectLinkingLayer.

ObjectLinkingLayer attempts to claim responsibility for weak definitions that
are present in LinkGraphs, but not present in the corresponding
MaterializationResponsibility object. Where such a claim is successful, the
symbol should be marked as live to prevent it from being dead stripped.

(For the curious: Such "late-breaking" definitions are introduced somewhere in
the materialization pipeline after the initial responsibility set is calculated.
The usual source is the complier or assembler. Examples of common late-breaking
definitions include personality pointers, e.g. "DW.ref.__gxx_personality_v0",
and named constant pool entries, e.g. __realXX..XX.)

The failure to mark these symbols live caused few problems in practice because
late-breaking definitions are usually anchored by existing live definitions
within the graph (e.g. DW.ref.__gxx_personality_v0 is transitively referenced by
functions via eh-frame records), and so they usually survived dead-stripping
anyway. This accidental persistence isn't a principled solution though, and it
fails altogether if a late-breaking definition is not otherwise referenced by
the graph, with the result that the now-claimed symbol is stripped triggering a
"Failed to materialize symbols" error in ORC. Marking such symbols live is the
correct solution.

No testcase, as it's difficult to construct a situation where a late-breaking
definition is inserted without being referenced outside the context of new
backend bringup or plugin-specific shenanigans.

See discussion in https://reviews.llvm.org/D133452 and
https://reviews.llvm.org/D136877.

20 months agoRevert "Handle errors in expansion of response files"
Serge Pavlov [Sat, 29 Oct 2022 18:58:47 +0000 (01:58 +0700)]
Revert "Handle errors in expansion of response files"

This reverts commit 17eb198de934eced784e16ec15e020a574ba07e1.
Reverted for investigation, because ClangDriverTests failed on some builders.

20 months ago[flang] Catch and diagnose attempts to misuse NULL()
Peter Klausler [Fri, 7 Oct 2022 23:52:37 +0000 (16:52 -0700)]
[flang] Catch and diagnose attempts to misuse NULL()

Some intrinsic functions can handle NULL() as an actual argument; most
can't.  Distinguish the two with a new ArgFlag facility in the intrinsic
procedure table.  Also transform some confusing Optionality codes that
were standing in for flags into ArgFlags.  Last, return false for a NULL()
pointer from the utility IsActuallyConstant(), ensuring that it can
still deal with a nested NULL() for components in structure constructors.

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

20 months ago[VPlan] Use onlyFirstLaneUsed in sinkScalarOperands.
Florian Hahn [Sat, 29 Oct 2022 18:45:19 +0000 (19:45 +0100)]
[VPlan] Use onlyFirstLaneUsed in sinkScalarOperands.

Replace custom code to check if only the first lane is used by generic
helper `onlyFirstLaneUsed`. This enables VPlan-based sinking in a few
additional cases and was suggested in D133760.

Reviewed By: Ayal

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

20 months ago[Hexagon] Report changes in HvxIdioms pass
Krzysztof Parzyszek [Sat, 29 Oct 2022 18:29:58 +0000 (11:29 -0700)]
[Hexagon] Report changes in HvxIdioms pass

It can produce some dead code, which is harmless in the end, but breaks
expensive checks when unreported. This should be fixed eventually, but
it's a low priority.

20 months ago[flang] Clarify cases where name resolution of generic shadowing can be overridden
Peter Klausler [Fri, 7 Oct 2022 19:58:43 +0000 (12:58 -0700)]
[flang] Clarify cases where name resolution of generic shadowing can be overridden

Fortran famously allows a generic interface definition to share a
scope with a procedure or derived type of the same name.  When that
shadowed name is accessed via host or USE association, but is also
defined by an interface in the generic, then name resolution needs
to fix up the representation of the shadowing so that the new interface
definition is seen as the shadowed symbol -- the host or USE associated
name is not material to the situation.  See the new test case for
particular examples.

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

20 months ago[Hexagon] Break up vectors into HVX-sized chunks in HvxIdioms
Krzysztof Parzyszek [Tue, 25 Oct 2022 21:23:34 +0000 (14:23 -0700)]
[Hexagon] Break up vectors into HVX-sized chunks in HvxIdioms

This will allow recognizing Q.31 multiplications on vectors that are
multiplies of HVX vectors. At the moment this comes at the expense of
Q.15 multiplications, which now are handled as 32-bit multiplications
with shifts.
In the longer term this will likely be replaced by a different scheme
of "legalizing" vectors, which is necessary for idiom recognition, at
least where using direct HVX instrinsics is desired.

20 months agoRecommit [AArch64] Optimize memcmp when the result is tested for [in]equality with 0
zhongyunde [Sat, 29 Oct 2022 18:03:44 +0000 (02:03 +0800)]
Recommit [AArch64] Optimize memcmp when the result is tested for [in]equality with 0

Fixes 1st issue of https://github.com/llvm/llvm-project/issues/58061
Fixes the crash of https://github.com/llvm/llvm-project/issues/58675

Reviewed By: dmgreen, efriedma
Differential Revision: https://reviews.llvm.org/D136244

20 months ago[Hexagon] Fix vector concatenation
Krzysztof Parzyszek [Tue, 25 Oct 2022 20:34:47 +0000 (13:34 -0700)]
[Hexagon] Fix vector concatenation

20 months ago[InstCombine] fold mul with incremented "shl 1" factor
Sanjay Patel [Sat, 29 Oct 2022 14:53:23 +0000 (10:53 -0400)]
[InstCombine] fold mul with incremented "shl 1" factor

X * ((1 << Z) + 1) --> (X << Z) + X

https://alive2.llvm.org/ce/z/P-7WK9

It's possible that we could do better with propagating
no-wrap, but this carries over the existing logic and
appears to be correct.

The naming differences on the existing folds are a result
of using getName() to set the final value via Builder.
That makes it easier to transfer no-wrap rather than the
gymnastics required from the raw create instruction APIs.

20 months ago[InstCombine] create helper function for mul patterns with 1<<X; NFC
Sanjay Patel [Sat, 29 Oct 2022 13:33:00 +0000 (09:33 -0400)]
[InstCombine] create helper function for mul patterns with 1<<X; NFC

There are at least 2 other potential patterns that could go here.

20 months ago[X86] Remove the WriteDPPSZ schedule pair
Simon Pilgrim [Sat, 29 Oct 2022 15:28:37 +0000 (16:28 +0100)]
[X86] Remove the WriteDPPSZ schedule pair

There's never been a 512-bit vdpps instruction (and the implementation is so convoluted there probably won't ever be)

20 months ago[X86] Remove 256-bit scheduler classes
Simon Pilgrim [Sat, 29 Oct 2022 15:23:41 +0000 (16:23 +0100)]
[X86] Remove 256-bit scheduler classes

SLM (silvermont) doesn't support any AVX instructions

20 months agoHandle errors in expansion of response files
Serge Pavlov [Fri, 14 Oct 2022 13:07:09 +0000 (20:07 +0700)]
Handle errors in expansion of response files

Previously an error raised during an expansion of response files (including
configuration files) was ignored and only the fact of its presence was
reported to the user with generic error messages. This made it difficult to
analyze problems. For example, if a configuration file tried to read an
inexistent file, the error message said that 'configuration file cannot
be found', which is wrong and misleading.

This change enhances handling errors in the expansion so that users
could get more informative error messages.

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

20 months ago[InstCombine] reduce code duplication in visitMul(); NFC
Sanjay Patel [Sat, 29 Oct 2022 12:55:37 +0000 (08:55 -0400)]
[InstCombine] reduce code duplication in visitMul(); NFC

20 months ago[InstCombine] add tests for mul with shl operand; NFC
Sanjay Patel [Fri, 28 Oct 2022 16:05:10 +0000 (12:05 -0400)]
[InstCombine] add tests for mul with shl operand; NFC

20 months ago[ARC] Regenerate ldst.ll
Simon Pilgrim [Sat, 29 Oct 2022 13:09:52 +0000 (14:09 +0100)]
[ARC] Regenerate ldst.ll

Reported by the (experimental) arc buildbot after D136042

20 months ago[mlir] Split parser fuzzer for bytecode & text
Jacques Pienaar [Sat, 29 Oct 2022 12:42:28 +0000 (05:42 -0700)]
[mlir] Split parser fuzzer for bytecode & text

Enable fuzzing these independently. Currently still not linking in
dialects beyond Builtin.

20 months ago[DAG] Enable combineShiftOfShiftedLogic folds after type legalization
Simon Pilgrim [Sat, 29 Oct 2022 11:29:58 +0000 (12:29 +0100)]
[DAG] Enable combineShiftOfShiftedLogic folds after type legalization

This was disabled to prevent regressions, which appear to be just occurring on AMDGPU (at least in our current lit tests), which I've addressed by adding AMDGPUTargetLowering::isDesirableToCommuteWithShift overrides.

Fixes #57872

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

20 months ago[lit] Deduplicate README and longdescription, and update it
Michał Górny [Sat, 29 Oct 2022 04:44:11 +0000 (06:44 +0200)]
[lit] Deduplicate README and longdescription, and update it

Since long_description is effectively the README that's displayed
on pypi project page, combine it with the existing README file and read
the file in `setup.py`.  This is a common practice among Python
projects, to the point of declarative-style setuptools configurations
providing a shorthand for it.

While at it, update the outdated information about LLVM Bugzilla for use
of GitHub issues.

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

20 months ago[X86] WriteFShuffle256 shuffles aren't microcoded in the llvm sense
Simon Pilgrim [Sat, 29 Oct 2022 11:03:38 +0000 (12:03 +0100)]
[X86] WriteFShuffle256 shuffles aren't microcoded in the llvm sense

znver1/2 might have poor throughput for crosslane shuffles but they don't consume 100 cycles of resources

I think there was a misunderstanding between the AMD definition of microcoding (more than 2-3 uops) and LLVM (here be dragons - impossible to approximately model the instruction)

This is more yak shaving to come from D103695 - this time working out why codegen involving broadcasts gives such weird numbers

20 months ago[X86] Ensure 256-bit inlane shuffles are set to 2 uops + half rate
Simon Pilgrim [Sat, 29 Oct 2022 10:52:12 +0000 (11:52 +0100)]
[X86] Ensure 256-bit inlane shuffles are set to 2 uops + half rate

znver1 double pumps regular 256-bit shuffles (crosslane shuffles are messier....)

Fixes yet another mismatch between the numbers coming out of the script from D103695 and the znver1 scheduler model

Confirmed with the AMD SoG, Agner + instlatx64

20 months ago[JITLink][RISCV] Add names for GOT/PLT relocations
Jonas Hahnfeld [Fri, 28 Oct 2022 21:05:27 +0000 (23:05 +0200)]
[JITLink][RISCV] Add names for GOT/PLT relocations

It is confusing to see "Unrecognized edge kind" in debugging output
for supported relocations; this was probably an oversight in commit
89f546f6ba which added the support.

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

20 months ago[LoongArch] Improve the "out of range" error information reported by `adjustFixupValue`
Xiaodong Liu [Thu, 27 Oct 2022 09:42:54 +0000 (17:42 +0800)]
[LoongArch] Improve the "out of range" error information reported by `adjustFixupValue`

There are three reduplicate error messages for different conditions. I
add meaningful information to make them more informative.

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

20 months ago[docs] clang.rst: gnu++14 => gnu++17
Fangrui Song [Sat, 29 Oct 2022 07:15:24 +0000 (00:15 -0700)]
[docs] clang.rst: gnu++14 => gnu++17

20 months ago[gn build] Port 30ea3fcc4c69
LLVM GN Syncbot [Sat, 29 Oct 2022 06:45:02 +0000 (06:45 +0000)]
[gn build] Port 30ea3fcc4c69

20 months ago[clang-format][NFC] Move BracesRemover tests out of FormatTest.cpp
owenca [Thu, 27 Oct 2022 09:53:23 +0000 (02:53 -0700)]
[clang-format][NFC] Move BracesRemover tests out of FormatTest.cpp

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

20 months agoRevert "Revert "[scudo] Fix the calculating of memory group usage""
Chia-hung Duan [Fri, 28 Oct 2022 22:17:06 +0000 (22:17 +0000)]
Revert "Revert "[scudo] Fix the calculating of memory group usage""

This reverts commit 69fe7abb393ba7d6ee9c8ff1429316845b5bad37.

Fixed the arguments order while calling batchGroupBase()

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

20 months ago[clang][NFC] sync comments from declaration of InitializePreprocessor
YingChi Long [Sat, 29 Oct 2022 06:20:19 +0000 (14:20 +0800)]
[clang][NFC] sync comments from declaration of InitializePreprocessor

20 months ago[libc] Fix the return value of fread and fwrite.
Siva Chandra Reddy [Sat, 29 Oct 2022 05:41:17 +0000 (05:41 +0000)]
[libc] Fix the return value of fread and fwrite.

They were previously returning the number of bytes read. They should
instead be returning the number of objects read.

20 months ago[mlir] Fix the bazel error after c853d69ab9778fece61b0bf63a71609f437a483d
Haojian Wu [Sat, 29 Oct 2022 06:00:29 +0000 (08:00 +0200)]
[mlir] Fix the bazel error after c853d69ab9778fece61b0bf63a71609f437a483d

20 months agoARM: Fix stack warning test
Matt Arsenault [Sat, 29 Oct 2022 05:28:23 +0000 (22:28 -0700)]
ARM: Fix stack warning test

20 months agoclang: Improve errors for DiagnosticInfoResourceLimit
Matt Arsenault [Thu, 27 Oct 2022 23:28:46 +0000 (16:28 -0700)]
clang: Improve errors for DiagnosticInfoResourceLimit

Print source location info and demangle the name, compared
to the default behavior.

Several observations:

1. Specially handling this seems to give source locations
without enabling debug info, and also gives columns compared
to the backend diagnostic.

2. We're duplicating diagnostic effort in DiagnosticInfo
and clang. This feels wrong, but clang can demangle and I guess
have better debug info available? Should clang really have any of this
code? For the purposes of this diagnostic, the important piece
is just reading the source location out of the llvm::Function.

3. lld is not duplicating the same effort as clang with LTO, and
just directly printing the DiagnosticInfo as-is. e.g.

  $ clang -fgpu-rdc
lld: error: local memory (480000) exceeds limit (65536) in function '_Z12use_huge_ldsIiEvv'
lld: error: local memory (960000) exceeds limit (65536) in function '_Z12use_huge_ldsIdEvv'

  $ clang -fno-gpu-rdc
backend-resource-limit-diagnostics.hip:8:17: error: local memory (480000) exceeds limit (65536) in 'void use_huge_lds<int>()'
__global__ void use_huge_lds() {
                ^
backend-resource-limit-diagnostics.hip:8:17: error: local memory (960000) exceeds limit (65536) in 'void use_huge_lds<double>()'
2 errors generated when compiling for gfx90a.

4. Backend errors are not observed with -save-temps and -fno-gpu-rdc or -flto,
and the compile incorrectly succeeds.

5. The backend version prints error: <location info>; clang prints <location info>: error:

6. -emit-codegen-only is totally broken for AMDGPU. MC
gets a null target streamer. I do not understand why this
is a thing. This just creates a horrible edge case.
Just work around this by emitting actual code instead of blocking
this patch.

20 months agoDiagnosticInfo: Report function location for resource limits
Matt Arsenault [Thu, 27 Oct 2022 23:29:26 +0000 (16:29 -0700)]
DiagnosticInfo: Report function location for resource limits

We have some odd redundancy where clang specially handles
the stack size case. If clang prints it, the source location is first
followed by "warning". The backend diagnostic, as printed by other tools
puts "warning" first.

20 months agollvm-reduce: Fix typo
Matt Arsenault [Sat, 29 Oct 2022 02:01:09 +0000 (19:01 -0700)]
llvm-reduce: Fix typo

20 months ago[Frontend] -MP: remove blank lines
Fangrui Song [Sat, 29 Oct 2022 03:46:27 +0000 (20:46 -0700)]
[Frontend] -MP: remove blank lines

GCC 10 removed blank lines for phony targets during a refactoring.
The blank lines seems unuseful, so let's follow suit.

20 months ago[Frontend] Fix -MP when main file is <stdin>
Fangrui Song [Sat, 29 Oct 2022 03:35:29 +0000 (20:35 -0700)]
[Frontend] Fix -MP when main file is <stdin>

rC220726 had a bug: `echo "<cstdlib>" | clang -M -MP -x c++ - 2>/dev/null`
(used by glibc/configure.ac find_cxx_header) omitted a `cstdlib:` line. Instead
of filtering out `<stdin>` in `Dependencies`, retain it (so that the number of
entries does not change whether or not main file is `<stdin>`) and filter the
`PhonyTarget` output.

20 months ago[mlir][sparse] Cleaning up function names in test
wren romano [Thu, 27 Oct 2022 23:25:41 +0000 (16:25 -0700)]
[mlir][sparse] Cleaning up function names in test

The old "dumpAndRelease" names are no longer valid since the "release" part is handled separately now.

Reviewed By: Peiming

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

20 months ago[mlir][sparse] run canonicalization pass after DenseOpBufferize.
Peiming Liu [Fri, 28 Oct 2022 20:45:06 +0000 (20:45 +0000)]
[mlir][sparse] run canonicalization pass after DenseOpBufferize.

As pointed out by Matthias: "DenseBufferizationPass should be run right after TensorCopyInsertionPass. (Running it after bufferizing the sparse IR is also OK.) The reason for this is that whether copies are needed for not depends on the structure of the program (SSA use-def chains). In particular, running the canonicalizer in-between is problematic because it could introduce new RaW conflicts"

Reviewed By: aartbik

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

20 months agoFix MLIR build after D136931
Slava Zakharin [Sat, 29 Oct 2022 00:50:11 +0000 (17:50 -0700)]
Fix MLIR build after D136931

ld.lld: error: undefined symbol: mlir::extractFromI64ArrayAttr(mlir::Attribute)
>>> referenced by NVVMToLLVMIRTranslation.cpp:142
  (/llvm-project/mlir/lib/Target/LLVMIR/Dialect/NVVM/NVVMToLLVMIRTranslation.cpp:142)
>>> referenced by NVVMToLLVMIRTranslation.cpp:152
  (/llvm-project/mlir/lib/Target/LLVMIR/Dialect/NVVM/NVVMToLLVMIRTranslation.cpp:152)

20 months agollvm-reduce: Fix producing invalid reductions with landingpads
Matt Arsenault [Thu, 20 Oct 2022 05:11:18 +0000 (22:11 -0700)]
llvm-reduce: Fix producing invalid reductions with landingpads

It's not valid to simply branch to a landingpad block, so it
needs to be removed.

Also stop trying to scan forward to find a block that can be merged.
The predecessor merge rules are more complex than this. This also
would need to have considered landingpads. Just do the minimum
to delete the block, and let the simplify-cfg reduction handle
the branch chain cleanups.

20 months agollvm-reduce: Fix block reduction with unreachable blocks
Matt Arsenault [Tue, 4 Oct 2022 05:06:09 +0000 (22:06 -0700)]
llvm-reduce: Fix block reduction with unreachable blocks

Previously this would produce many invalid reductions with
"Instruction does not dominate uses" verifier errors.

This fixes issues in cases where the incoming IR
has unreachable blocks, and the resulting reduction
introduced new reachable blocks.

Have basic-blocks skip functions that have unreachable
blocks, Introduce a separate reduction which only
deletes unreachable blocks. Cleanup any newly unreachable
blocks after trimming out the requested deletions.

Includes a variety of meta-reduced tests for llvm-reduce
itself with -abort-on-invalid-reduction that were failing
on different iterations of this patch.

Bugpoint's implementation is much simpler (but currently I don't
understand how it avoids disconnecting interesting blocks from the CFG).

20 months agollvm-reduce: Don't turn switches into returns
Matt Arsenault [Wed, 19 Oct 2022 20:10:41 +0000 (13:10 -0700)]
llvm-reduce: Don't turn switches into returns

Re-use one of the existing successors as the new default.
This helps with a future patch to fix handling of unreachable
blocks.

20 months ago[clang][test] Require x86 target in a couple new tests
Ben Langmuir [Fri, 28 Oct 2022 23:59:38 +0000 (16:59 -0700)]
[clang][test] Require x86 target in a couple new tests

Attempt to fix test failures on bots that don't configure x86 target.

20 months agoclang: Add required target to test
Matt Arsenault [Fri, 28 Oct 2022 23:49:32 +0000 (16:49 -0700)]
clang: Add required target to test

20 months ago[llvm-tblgen] NFC: Simplify DecoderEmitter.
James Y Knight [Fri, 28 Oct 2022 22:38:49 +0000 (18:38 -0400)]
[llvm-tblgen] NFC: Simplify DecoderEmitter.

Currently the DecoderEmitter constructor takes a bunch of string
parameters containing bits of code to interpolate.

However, there's only two ways it can be called. The one used for most
targets which doesn't handle the SoftFail DecoderStatus (not a
problem, because they don't use SoftFail). The other mode, which is
used for ARM/AArch64, does handle SoftFail, but requires an externally
defined helper function in those targets.

This is unnecessary complication; remove the parameters, and unify
onto a single version which does support SoftFail, defining the helper
itself.

20 months ago[mlir][sparse] Fold invariant op only when it has only one use.
Peiming Liu [Fri, 28 Oct 2022 21:42:45 +0000 (21:42 +0000)]
[mlir][sparse] Fold invariant op only when it has only one use.

Reviewed By: aartbik

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

20 months agollvm-reduce: Stop checking workitem is interesting before each pass
Matt Arsenault [Mon, 24 Oct 2022 18:05:06 +0000 (11:05 -0700)]
llvm-reduce: Stop checking workitem is interesting before each pass

Each delta pass run should have guaranteed the output is still
interesting, so it should be pointless to recheck this each
iteration. I have many issues that take multiple minutes
to reproduce, so this ends up being a huge waste of time.

Also, remove broken line counting. This never worked, since
getLines was failing to open the temporary file which was just
deleted.

20 months agoAMDGPU: Register a null MC streamer for -emit-codegen-only
Matt Arsenault [Fri, 28 Oct 2022 18:49:15 +0000 (11:49 -0700)]
AMDGPU: Register a null MC streamer for -emit-codegen-only

For some reason null is a valid MC target, used from clang with
-emit-codegen-only. Previously the target streamer was null,
which was inconsistently null checked resulting in crashes
if using amdhsa.

20 months agoRevert "[AArch64] Optimize memcmp when the result is tested for [in]equality with 0"
Paul Kirth [Fri, 28 Oct 2022 21:57:23 +0000 (21:57 +0000)]
Revert "[AArch64] Optimize memcmp when the result is tested for [in]equality with 0"

This reverts commit 01ff511593d1a4920fa3c1d450ad2077661e0bdc.

It triggers an assertion failure in SelectionDAG.cpp

see https://github.com/llvm/llvm-project/issues/58675 for details.

20 months ago[lldb] Support simplified template names
Arthur Eubanks [Thu, 4 Aug 2022 00:09:40 +0000 (17:09 -0700)]
[lldb] Support simplified template names

See https://discourse.llvm.org/t/dwarf-using-simplified-template-names/58417 for background on simplified template names.

lldb doesn't work with simplified template names because it uses DW_AT_name which doesn't contain template parameters under simplified template names.

Two major changes are required to make lldb work with simplified template names.

1) When building clang ASTs for struct-like dies, we use the name as a cache key. To distinguish between different instantiations of a template class, we need to add in the template parameters.

2) When looking up types, if the requested type name contains '<' and we didn't initially find any types from the index searching the name, strip the template parameters and search the index, then filter out results with non-matching template parameters. This takes advantage of the clang AST's ability to print full names rather than doing it by ourself.

An alternative is to fix up the names in the index to contain the fully qualified name, but that doesn't respect .debug_names.

Reviewed By: labath

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

20 months ago[Driver] Use addOptInFlag/addOptOutFlag. NFC
Fangrui Song [Fri, 28 Oct 2022 23:15:14 +0000 (16:15 -0700)]
[Driver] Use addOptInFlag/addOptOutFlag. NFC

20 months ago[mlir][arm][sve] fix broken integration tests
Aart Bik [Fri, 28 Oct 2022 23:02:33 +0000 (16:02 -0700)]
[mlir][arm][sve] fix broken integration tests

Reviewed By: Peiming

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

20 months agoMove getenv for AS_SECURE_LOG_FILE to clang
Ben Langmuir [Thu, 27 Oct 2022 23:52:15 +0000 (16:52 -0700)]
Move getenv for AS_SECURE_LOG_FILE to clang

Avoid calling getenv in the MC layer and let the clang driver do it so
that it is reflected in the command-line as an -mllvm option.

rdar://101558354

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

20 months ago[mlir][sparse] build proper insertion chain
Aart Bik [Fri, 28 Oct 2022 18:14:58 +0000 (11:14 -0700)]
[mlir][sparse] build proper insertion chain

The alloc->insert/compress->load chain needs to be
properly represented with an SSA chain now in loops
and if statements to properly reflect the modifying
behavior (runtime support lib is forgiving on breaking
this, but the new codegen is not).

Reviewed By: Peiming

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

20 months ago[Driver] Fix -fdebug-default-version= -Wunused-command-line-argument after D136707
Fangrui Song [Fri, 28 Oct 2022 22:37:46 +0000 (15:37 -0700)]
[Driver] Fix -fdebug-default-version= -Wunused-command-line-argument after D136707

-fdebug-default-version= is designed to suppress -Wunused-command-line-argument
warnings even without a -g option.

20 months agoRevert "[AArch64]SME2 Outer Product and Accumulate instructions"
Nathan Chancellor [Fri, 28 Oct 2022 22:24:13 +0000 (15:24 -0700)]
Revert "[AArch64]SME2 Outer Product and Accumulate instructions"

This reverts commit 4df36f168763af725ba5bc852a4321afd0f769c4.

This change does not pass check-llvm.

20 months agoFollow-up to Itanium ABI POD patchnotes
David Blaikie [Fri, 28 Oct 2022 22:29:50 +0000 (22:29 +0000)]
Follow-up to Itanium ABI POD patchnotes

20 months ago[HIP] add float to fp16 convert functions
Yaxun (Sam) Liu [Fri, 28 Oct 2022 20:45:52 +0000 (16:45 -0400)]
[HIP] add float to fp16 convert functions

Reviewed by: Brian Sumner, Artem Belevich

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

20 months agoRevert "[scudo] Fix the calculating of memory group usage"
Chia-hung Duan [Fri, 28 Oct 2022 22:15:50 +0000 (22:15 +0000)]
Revert "[scudo] Fix the calculating of memory group usage"

This reverts commit 6130d67f70ad2e063b4407b6ee31c7db19464fee.

20 months ago[lldb] Explicitly open file to write with utf-8 encoding in crashlog.py
Augusto Noronha [Wed, 26 Oct 2022 21:53:19 +0000 (14:53 -0700)]
[lldb] Explicitly open file to write with utf-8 encoding in crashlog.py

The python "open" function will use the default encoding for the
locale (the result of "locale.getpreferredencoding()"). Explicitly set
the locale to utf-8 when opening the crashlog for writing, as there may
be non-ascii symbols in there (for example, Swift uses "τ" to indicate
generic parameters).

rdar://101402755

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

20 months ago[mlir][sve] Canonicalise MLIR_RUN_ARM_SVE_TESTS
Andrzej Warzynski [Fri, 28 Oct 2022 18:17:06 +0000 (18:17 +0000)]
[mlir][sve] Canonicalise MLIR_RUN_ARM_SVE_TESTS

Similarly to other CMake variables used to configure LIT tests, this
patch makes sure that MLIR_RUN_ARM_SVE_TESTS is canonicalised. The
corresponding LIT configuration is updated accordingly.

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

20 months ago[scudo] Fix the calculating of memory group usage
Chia-hung Duan [Thu, 27 Oct 2022 22:47:03 +0000 (22:47 +0000)]
[scudo] Fix the calculating of memory group usage

In SizeClassAllocator64, the boundary of a memory group may not align to
the region begin. Which means the begin addr of a memory group may
smaller than region begin. This leads to wrong judgement of memory group
usage.

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

20 months ago[scudo] Lazy initialize the PageMap while page releasing
Chia-hung Duan [Thu, 27 Oct 2022 17:51:56 +0000 (17:51 +0000)]
[scudo] Lazy initialize the PageMap while page releasing

We allocate the page map before knowing if there're groups can be
released. This may result in many redundant map()/unmap() operations if
there's no page to release.

Make the page map be lazy initialized.

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

20 months ago[OpenMP][libomp] Add hidden helper affinity
Jonathan Peyton [Mon, 3 Oct 2022 20:14:40 +0000 (15:14 -0500)]
[OpenMP][libomp] Add hidden helper affinity

Add new hidden helper affinity via the environment variable,
KMP_HIDDEN_HELPER_AFFINITY, which allows users to assign thread
affinity to hidden helper threads using the same syntax as
KMP_AFFINITY. OMP_PLACES/OMP_PROC_BIND have no interaction with
KMP_HIDDEN_HELPER_AFFINITY.

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

20 months ago[OpenMP][libomp] Make affinity warnings parameterized
Jonathan Peyton [Mon, 3 Oct 2022 20:12:08 +0000 (15:12 -0500)]
[OpenMP][libomp] Make affinity warnings parameterized

Separate change for the warnings to depend on the relevant affinity
settings verbose and warnings settings.

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

20 months ago[OpenMP][libomp] Parameterize affinity functions
Jonathan Peyton [Mon, 1 Aug 2022 22:03:27 +0000 (17:03 -0500)]
[OpenMP][libomp] Parameterize affinity functions

This patch parameterizes the affinity initialization code to allow multiple
affinity settings. Almost all global affinity settings are consolidated
and put into a structure kmp_affinity_t. This is in anticipation of the
addition of hidden helper affinity which will have the same syntax and
semantics as KMP_AFFINITY only for the hidden helper team.

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

20 months ago[mlir][scf] Enhance sizes computation in tileUsingSCFForOp.
Hanhan Wang [Fri, 28 Oct 2022 20:02:40 +0000 (13:02 -0700)]
[mlir][scf] Enhance sizes computation in tileUsingSCFForOp.

The boundary is always 1 if the tile size is 1.

Reviewed By: mravishankar

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

20 months ago[mlir][linalg] Add missing region when building TransposeOp
Benjamin Kramer [Fri, 28 Oct 2022 19:17:42 +0000 (21:17 +0200)]
[mlir][linalg] Add missing region when building TransposeOp

This fixes a regression from ad89eb5b1fccf002eb59dfbab0fdb515ea3e65b7

20 months ago[RISCV] Merge WriteLDW and WriteLDWU schedule classes.
Craig Topper [Fri, 28 Oct 2022 17:49:27 +0000 (10:49 -0700)]
[RISCV] Merge WriteLDW and WriteLDWU schedule classes.

We don't distinquish signed vs unsigned for B and H loads.

Maybe this split was because LDWU isn't in RV32I? I don't think
that distinction matters to the scheduler. If your processor
only supports RV32I then having LWU in the SchedClass doesn't matter.
If your target supports RV64I, then LW and LWU are likely the same.

20 months agoUpdate the status of some C2x features
Aaron Ballman [Fri, 28 Oct 2022 18:42:33 +0000 (14:42 -0400)]
Update the status of some C2x features

Only N2670 had testable changes in it, the rest can be trivially
assumed to be implemented as the changes are editorial.

20 months ago[libc] add locale free strcoll
Michael Jones [Wed, 26 Oct 2022 23:12:49 +0000 (16:12 -0700)]
[libc] add locale free strcoll

The strcoll function is intended to compare strings based on their
ordering in the current locale. Since the locale facilities have not yet
been added, a simple implementation that is the same as strcmp has been
added as a placeholder.

Reviewed By: sivachandra

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

20 months ago[libc][obvious] fix scanf parser test
Michael Jones [Fri, 28 Oct 2022 18:00:14 +0000 (11:00 -0700)]
[libc][obvious] fix scanf parser test

One of the expected values wasn't being initialized correctly.

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

20 months ago[libc] add scanf parser and core utilities
Michael Jones [Wed, 19 Oct 2022 20:28:15 +0000 (13:28 -0700)]
[libc] add scanf parser and core utilities

This is the first piece of scanf. It's very similar in design to printf,
and so much of the code is copied from that. There were potential issues
with conflicting macros so I've also renamed the "ASSERT_FORMAT_EQ"
macro for printf to "ASSERT_PFORMAT_EQ".

Reviewed By: sivachandra

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

20 months ago[libc] add features to bitset
Michael Jones [Thu, 27 Oct 2022 20:29:55 +0000 (13:29 -0700)]
[libc] add features to bitset

This patch adds the flip, set_range, and operator== functions to bitset.
These will be used in scanf.

Reviewed By: sivachandra

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

20 months ago[polly][test] Remove -polly-target from tests
Arthur Eubanks [Fri, 28 Oct 2022 17:38:12 +0000 (10:38 -0700)]
[polly][test] Remove -polly-target from tests

This flag was removed in D136621.

20 months ago[HIP] add fmax/fmin for fp16
Yaxun (Sam) Liu [Thu, 27 Oct 2022 16:40:35 +0000 (12:40 -0400)]
[HIP] add fmax/fmin for fp16

Reviewed by: Artem Belevich

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

20 months agoRevert "[LegacyPM] Remove pipeline extension mechanism"
Arthur Eubanks [Fri, 28 Oct 2022 17:26:58 +0000 (10:26 -0700)]
Revert "[LegacyPM] Remove pipeline extension mechanism"

This reverts commit 4ea6ffb7e8edcea7f2cfb22acc907640a9ba44b9.

Breaks various backends.

20 months ago[polly] Format RegisterPasses.cpp
Arthur Eubanks [Fri, 28 Oct 2022 17:25:23 +0000 (10:25 -0700)]
[polly] Format RegisterPasses.cpp

20 months ago[Concepts] Fix an assert when trying to form a recovery expr on a
Erich Keane [Fri, 28 Oct 2022 17:02:04 +0000 (10:02 -0700)]
[Concepts] Fix an assert when trying to form a recovery expr on a
concept

When we failed the lookup of the function, we tried to form a
RecoveryExpr that caused us to recursively re-check the same constraint,
which caused us to try to double-insert the satisfaction into the cache.

This patch makes us just return the inner-cached version instead. We DO
end up double-evaluating thanks to the recovery-expr, but there isn't a
good way around that.

20 months ago[clang] Remove no-op -fexperimental-new-pass-manager/-fno-legacy-pass-manager flags
Arthur Eubanks [Wed, 26 Oct 2022 18:33:02 +0000 (11:33 -0700)]
[clang] Remove no-op -fexperimental-new-pass-manager/-fno-legacy-pass-manager flags

These have been no-op for a while and keeping them around may be confusing.

Reviewed By: MaskRay

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

20 months ago[RISCV] Optimize i64 insertelt on RV32.
Craig Topper [Fri, 28 Oct 2022 17:16:57 +0000 (10:16 -0700)]
[RISCV] Optimize i64 insertelt on RV32.

We can use tail undisturbed vslide1down to insert into the vector.

This should make D136640 unneeded.

Reviewed By: reames

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

20 months ago[LegacyPM] Remove pipeline extension mechanism
Arthur Eubanks [Mon, 24 Oct 2022 17:21:39 +0000 (10:21 -0700)]
[LegacyPM] Remove pipeline extension mechanism

Part of gradually removing the legacy PM optimization pipeline.

Reviewed By: MaskRay

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

20 months ago[polly] Remove legacy pass manager hooks
Arthur Eubanks [Mon, 24 Oct 2022 17:12:32 +0000 (10:12 -0700)]
[polly] Remove legacy pass manager hooks

And some options that only throw errors with the new PM.

Reviewed By: Meinersbur

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

20 months ago[AArch64]SME2 Outer Product and Accumulate instructions
Caroline Concatto [Thu, 27 Oct 2022 14:49:36 +0000 (15:49 +0100)]
[AArch64]SME2 Outer Product and Accumulate instructions

This patch adds the assembly/disassembly for the following instructions:
  BMOPA: Bitwise exclusive NOR population count outer product and accumulate.
  BMOPS: Bitwise exclusive NOR population count outer product and subtract.

  SMOPA (2-way): Signed integer sum of outer products and accumulate.
  SMOPS (2-way): Signed integer sum of outer products and subtract.

  UMOPA (2-way): Unsigned integer sum of outer products and accumulate.
  UMOPS (2-way): Signed integer sum of outer products and accumulate.
The reference can be found here:

https://developer.arm.com/documentation/ddi0602/2022-09

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

20 months agoAdd test coverage for WG14 N2322
Aaron Ballman [Fri, 28 Oct 2022 16:45:56 +0000 (12:45 -0400)]
Add test coverage for WG14 N2322

The changes in this paper add a new recommended practice. I had
originally marked Clang as supporting this paper because we're not
obligated to follow a recommended practice. However, in retrospect, it
seems more useful to document whether we implement the recommendation
or not. This adds a test for those changes.