platform/upstream/llvm.git
17 months agoReapply "InstSimplify: Use isKnownNeverInfOrNaN"
Matt Arsenault [Mon, 22 May 2023 09:42:58 +0000 (10:42 +0100)]
Reapply "InstSimplify: Use isKnownNeverInfOrNaN"

This reverts commit f55224735ed39af16bccd7ff67b734fd758db6fc.

17 months agoAMDGPU: Expand casted f16 fmed3 pattern to fmin/fmax on gfx8
Matt Arsenault [Sun, 7 May 2023 10:13:28 +0000 (11:13 +0100)]
AMDGPU: Expand casted f16 fmed3 pattern to fmin/fmax on gfx8

If we have legal f16 instructions but no f16 med3, we can save
one instruction by expanding out the min/max sequence compared
to casting to f32 and casting back.

17 months ago[flang][hlfir] Hoist forall bounds computation when possible
Jean Perier [Tue, 23 May 2023 07:17:36 +0000 (09:17 +0200)]
[flang][hlfir] Hoist forall bounds computation when possible

When inner forall bound computations do not depend on previous
forall indices, they can be hoisted.
This is possible because:
 - bound computation are required to be pure (so evaluating them only
   once is possible).
 - If the bound computation depends on a value previously assigned, the
   forall scheduling analysis created different run for it: the
   assignment impacting the bounds value is not part of the current loop
   nest.

The reason this optimization is done at that point and not as part of
generic loop hoisting optimization is that having the all the loop
bound computation hoisted will allow allocating simple temporary
storages. The number of iteration can be pre-computed and used as the
extent for the temporary.

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

17 months ago[Sema] `setInvalidDecl` for error deduction declaration
Congcong Cai [Tue, 23 May 2023 07:07:03 +0000 (09:07 +0200)]
[Sema] `setInvalidDecl` for error deduction declaration

Fixed: https://github.com/llvm/llvm-project/issues/62408
`setInvalidDecl` for invalid `CXXDeductionGuideDecl` to
avoid crashes during semantic analysis.

Reviewed By: aaron.ballman

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

17 months ago[AMDGPU] Reintroduce CC exception for non-inlined functions in Promote Alloca limits
pvanhout [Mon, 15 May 2023 09:23:09 +0000 (11:23 +0200)]
[AMDGPU] Reintroduce CC exception for non-inlined functions in Promote Alloca limits

This is basically a partial revert of https://reviews.llvm.org/D145586 ( fd1d60873fdc )

D145586 was originally introduced to help with SWDEV-363662, and it did, but
it also caused a 25% drop in performance in
some MIOpen benchmarks where, it seems,
functions are inlined more conservatively.

This patch restores the pre-D145586 behavior
for PromoteAlloca: functions with a non-entry CC
have a 32 VGPRs threshold, but only if the function
is not marked with "alwaysinline".

A good number of AMDGPU code makes uses of
the AMDGPUAlwaysInline pass anyway, so in our
backend "alwaysinline" seems very common.

This change does not affect SWDEV-363662 (the motivating issue for introducing D145586).

Fixes SWDEV-399519

Reviewed By: rampitec, #amdgpu

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

17 months ago[mlir] Apply ClangTidy performance finding (NFC)
Adrian Kuegel [Tue, 23 May 2023 06:52:53 +0000 (08:52 +0200)]
[mlir] Apply ClangTidy performance finding (NFC)

17 months ago[NFC] [C++20] [Modules] Add a test
Chuanqi Xu [Tue, 23 May 2023 06:31:05 +0000 (14:31 +0800)]
[NFC] [C++20] [Modules] Add a test

Add a test from https://github.com/llvm/llvm-project/issues/59999. It is
always good to have more tests.

17 months ago[RISCV][NFC] Simplify code.
Jianjian GUAN [Tue, 23 May 2023 03:44:08 +0000 (11:44 +0800)]
[RISCV][NFC] Simplify code.

Reduce scope of if-else statements.

Reviewed By: craig.topper

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

17 months ago[NFC] Add clang python reformat SHA to .git-blame-ignore-revs
Tobias Hieta [Tue, 23 May 2023 06:31:02 +0000 (08:31 +0200)]
[NFC] Add clang python reformat SHA to .git-blame-ignore-revs

17 months ago[NFC][Py Reformat] Reformat python files in clang and clang-tools-extra
Tobias Hieta [Wed, 17 May 2023 08:56:49 +0000 (10:56 +0200)]
[NFC][Py Reformat] Reformat python files in clang and clang-tools-extra

This is an ongoing series of commits that are reformatting our
Python code.

Reformatting is done with `black`.

If you end up having problems merging this commit because you
have made changes to a python file, the best way to handle that
is to run git checkout --ours <yourfile> and then reformat it
with black.

If you run into any problems, post to discourse about it and
we will try to help.

RFC Thread below:

https://discourse.llvm.org/t/rfc-document-and-standardize-python-code-style

Reviewed By: MatzeB

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

17 months ago[libc] Fix typos in documentation
Kazu Hirata [Tue, 23 May 2023 06:27:59 +0000 (23:27 -0700)]
[libc] Fix typos in documentation

17 months ago[libc] Fix typos in documentation
Kazu Hirata [Tue, 23 May 2023 06:25:16 +0000 (23:25 -0700)]
[libc] Fix typos in documentation

17 months ago[C++20] [Modules] Don't ignore -fmodule-file when we compile pcm files
Chuanqi Xu [Tue, 23 May 2023 05:26:16 +0000 (13:26 +0800)]
[C++20] [Modules] Don't ignore -fmodule-file when we compile pcm files

Close https://github.com/llvm/llvm-project/issues/62843.

Previously when we compile .pcm files into .o files, the
`-fmodule-file=<module-name>=<module-path>` option is ignored. This is
conflicted with our consensus in
https://github.com/llvm/llvm-project/issues/62707.

17 months ago[BPF] Remove unused declaration probeJmpExt
Kazu Hirata [Tue, 23 May 2023 06:19:58 +0000 (23:19 -0700)]
[BPF] Remove unused declaration probeJmpExt

The declaration was added without a corresponding function definition
by:

  commit dc1dbf6ef320175acbdc1206da4b0a176b304449
  Author: Yonghong Song <yhs@fb.com>
  Date:   Wed Aug 23 04:25:57 2017 +0000

17 months ago[lldb] Fix racing issue when loading inlined symbols from crash report
Med Ismail Bennani [Tue, 23 May 2023 05:13:23 +0000 (22:13 -0700)]
[lldb] Fix racing issue when loading inlined symbols from crash report

Following abba5de72466, some tests started failing on green-dragon:

https://green.lab.llvm.org/green/job/lldb-cmake/55460/console

Looking at the backtrace, there seems to be a racing issue when deleting
the temporary directory containing all the JSON object files:

```
Traceback (most recent call last):
  File "/Users/buildslave/jenkins/workspace/lldb-cmake/lldb-build/lib/python3.10/site-packages/lldb/macosx/crashlog.py", line 1115, in __call__
    SymbolicateCrashLogs(debugger, shlex.split(command), result)
  File "/Users/buildslave/jenkins/workspace/lldb-cmake/lldb-build/lib/python3.10/site-packages/lldb/macosx/crashlog.py", line 1457, in SymbolicateCrashLogs
    SymbolicateCrashLog(crash_log, options)
  File "/Users/buildslave/jenkins/workspace/lldb-cmake/lldb-build/lib/python3.10/site-packages/lldb/macosx/crashlog.py", line 1158, in SymbolicateCrashLog
    with tempfile.TemporaryDirectory() as obj_dir:
  File "/usr/local/opt/python@3.10/Frameworks/Python.framework/Versions/3.10/lib/python3.10/tempfile.py", line 869, in __exit__
    self.cleanup()
  File "/usr/local/opt/python@3.10/Frameworks/Python.framework/Versions/3.10/lib/python3.10/tempfile.py", line 873, in cleanup
    self._rmtree(self.name, ignore_errors=self._ignore_cleanup_errors)
  File "/usr/local/opt/python@3.10/Frameworks/Python.framework/Versions/3.10/lib/python3.10/tempfile.py", line 855, in _rmtree
    _shutil.rmtree(name, onerror=onerror)
  File "/usr/local/opt/python@3.10/Frameworks/Python.framework/Versions/3.10/lib/python3.10/shutil.py", line 731, in rmtree
    onerror(os.rmdir, path, sys.exc_info())
  File "/usr/local/opt/python@3.10/Frameworks/Python.framework/Versions/3.10/lib/python3.10/shutil.py", line 729, in rmtree
    os.rmdir(path)
OSError: [Errno 66] Directory not empty: '/var/folders/09/r4vw4v8n5kb67jl66zvlbljw0000gn/T/tmp6qfifxk7'
```

This patch should fix that issue since it won't delete the object file
directory until we're sure that the modules adding tasks completed.

Signed-off-by: Med Ismail Bennani <ismail@bennani.ma>
17 months ago[ThinLTO] Make the cache key independent of the module identifier paths
Argyrios Kyrtzidis [Mon, 22 May 2023 22:16:20 +0000 (15:16 -0700)]
[ThinLTO] Make the cache key independent of the module identifier paths

Otherwise there are cache misses just from changing the name of a path, even though the input modules did not change.

rdar://109672225

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

17 months ago[test] precommit tests for D141188
Zhongyunde [Tue, 23 May 2023 03:30:26 +0000 (11:30 +0800)]
[test] precommit tests for D141188

17 months agoThis is a retry of https://reviews.llvm.org/D114583, which was backed
Galen Elias [Tue, 23 May 2023 03:11:17 +0000 (20:11 -0700)]
This is a retry of https://reviews.llvm.org/D114583, which was backed
out for regressions.

Clang Format is detecting a nested scope followed by another open brace
as a braced initializer list due to incorrectly thinking it's matching a
braced initializer at the end of a constructor initializer list which is
followed by the body open brace.

Unfortunately, UnwrappedLineParser isn't doing a very detailed parse, so
it's not super straightforward to distinguish these cases given the
current structure of calculateBraceTypes. My current hypothesis is that
these can be disambiguated by looking at the token preceding the
l_brace, as initializer list parameters will be preceded by an
identifier, but a scope block generally will not (barring the MACRO
wildcard).

To this end, I am adding tracking of the previous token to the LBraceStack
to help scope this particular case.

TokenAnnotatorTests cherry picked from https://reviews.llvm.org/D150452.

Fixes #33891.
Fixes #52911.

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

17 months ago[libc] Add an option to make `libc` only build the `libc-hdrgen` tool
Joseph Huber [Mon, 22 May 2023 21:00:41 +0000 (16:00 -0500)]
[libc] Add an option to make `libc` only build the `libc-hdrgen` tool

The `libc-hdergen` tool is required for cross-builds, however some cases
can cause issues when configuring this build. This patch adds an
ovveride option `LIBC_HDRGEN_ONLY` to allow us to retain the old
(incorrect) behaviour where `libc` would not build with any other
runtimes enabled.

Reviewed By: sivachandra

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

17 months ago[NFC] [C++20] [Modules] Refactor Sema::isModuleUnitOfCurrentTU into
Chuanqi Xu [Wed, 10 May 2023 03:54:04 +0000 (11:54 +0800)]
[NFC] [C++20] [Modules] Refactor Sema::isModuleUnitOfCurrentTU into
Decl::isInAnotherModuleUnit

Refactor `Sema::isModuleUnitOfCurrentTU` to `Decl::isInAnotherModuleUnit`
to make code simpler a little bit. Note that although this patch
introduces a FIXME, this is an existing issue and this patch just tries
to describe it explicitly.

17 months ago[RISCV] Add more cost model tests for fixed vector casts. NFC
Craig Topper [Tue, 23 May 2023 02:51:42 +0000 (19:51 -0700)]
[RISCV] Add more cost model tests for fixed vector casts. NFC

This covers a full mix of legal and illegal types. I've reduce
the fixed vector length from 128 to 256.

Reviewed By: fakepaper56

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

17 months agoRevert "[CodeGen] Fix incorrect usage of MCPhysReg for diff list elements"
Sergei Barannikov [Tue, 23 May 2023 02:11:38 +0000 (05:11 +0300)]
Revert "[CodeGen] Fix incorrect usage of MCPhysReg for diff list elements"

This reverts commit fa2827f0796c08e36b0b157fc526dd59cd6368e3.

Causes build bot failres:
https://lab.llvm.org/buildbot/#/builders/38/builds/12037

17 months ago[mlir][sparse] (NFC) Reordering extraClassDeclaration for STEA
wren romano [Mon, 22 May 2023 23:07:48 +0000 (16:07 -0700)]
[mlir][sparse] (NFC) Reordering extraClassDeclaration for STEA

Reviewed By: aartbik

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

17 months ago[CodeGen] Fix incorrect usage of MCPhysReg for diff list elements
Sergei Barannikov [Sat, 20 May 2023 18:30:02 +0000 (21:30 +0300)]
[CodeGen] Fix incorrect usage of MCPhysReg for diff list elements

The lists contain differences between register numbers, not the register
numbers themselves. Since a difference can also be negative, this also
changes its type to signed.

Changing the type to signed exposed a "bug". For AMDGPU, which has many
registers, the first element of a sequence could be as big as ~45k.
The value does not fit into int16_t, but fits into uint16_t. The bug
didn't show up because of unsigned wrapping and truncation of the Val
field in the advance() method.

To fix the issue, I changed the way regunit difflists are encoded. The
4-bit 'scale' field of MCRegisterDesc::RegUnit was replaced by 12-bit
number of the first regunit, and the first element of each of the lists
was removed. The higher 20 bits of RegUnit field contain the initial
offset into DiffLists array.
AMDGPU has 1'409 regunits (2^12 = 4'096), and the biggest offset is
80'041 (2^20 = 1'048'576). That is, there is enough room.

Changing the encoding method also resulted in a smaller array size, the
numbers are below (I omitted targets with less than 100 elements).

```
AMDGPU   | 80052 | 78741 |  -1,6%
RISCV    |  6498 |  6297 |  -3,1%
ARM      |  4181 |  3966 |  -5,1%
AArch64  |  2770 |  2592 |  -6,4%
PPC      |  1578 |  1441 |  -8,7%
Hexagon  |   994 |   740 | -25,6%
R600     |   508 |   398 | -21,7%
VE       |   471 |   459 |  -2,5%
Sparc    |   381 |   363 |  -4,7%
X86      |   326 |   208 | -36,2%
Mips     |   253 |   200 | -20,9%
SystemZ  |   186 |   162 | -12,9%
```

Reviewed By: foad, arsenm

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

17 months ago[lldb][test] Fix -Wsign-compare in GDBRemoteCommunicationClientTest.cpp (NFC)
Jie Fu [Tue, 23 May 2023 01:09:07 +0000 (09:09 +0800)]
[lldb][test] Fix -Wsign-compare in GDBRemoteCommunicationClientTest.cpp (NFC)

/data/llvm-project/third-party/unittest/googletest/include/gtest/gtest.h:1526:11: error: comparison of integers of different signs: 'const int' and 'const unsigned long' [-Werror,-Wsign-compare]
  if (lhs == rhs) {
      ~~~ ^  ~~~
/data/llvm-project/third-party/unittest/googletest/include/gtest/gtest.h:1553:12: note: in instantiation of function template specialization 'testing::internal::CmpHelperEQ<int, unsigned long>' requested here
    return CmpHelperEQ(lhs_expression, rhs_expression, lhs, rhs);
           ^
/data/llvm-project/lldb/unittests/Process/gdb-remote/GDBRemoteCommunicationClientTest.cpp:303:3: note: in instantiation of function template specialization 'testing::internal::EqHelper::Compare<int, unsigned long, nullptr>' requested here
  ASSERT_EQ(10, num_packets);
  ^
/data/llvm-project/third-party/unittest/googletest/include/gtest/gtest.h:2056:32: note: expanded from macro 'ASSERT_EQ'
                               ^
/data/llvm-project/third-party/unittest/googletest/include/gtest/gtest.h:2040:54: note: expanded from macro 'GTEST_ASSERT_EQ'
  ASSERT_PRED_FORMAT2(::testing::internal::EqHelper::Compare, val1, val2)
                                                     ^
1 error generated.

17 months ago[gn build] Port ca1b9943e1e4
LLVM GN Syncbot [Tue, 23 May 2023 00:36:57 +0000 (00:36 +0000)]
[gn build] Port ca1b9943e1e4

17 months ago[gn build] Port 8313507a7c3f
LLVM GN Syncbot [Tue, 23 May 2023 00:36:57 +0000 (00:36 +0000)]
[gn build] Port 8313507a7c3f

17 months ago[gn] port 98e342dca2372 (RISCV MCA)
Nico Weber [Tue, 23 May 2023 00:32:06 +0000 (20:32 -0400)]
[gn] port 98e342dca2372 (RISCV MCA)

17 months ago[llvm-mca] Print InstructionInfoView using Instrument information.
Michael Maitland [Fri, 12 May 2023 16:56:43 +0000 (09:56 -0700)]
[llvm-mca] Print InstructionInfoView using Instrument information.

Previous reports calculated the overall report using Instrument
information but did not print out per-instruction data using
Instrument information. This patch fixes that.

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

17 months ago[lldb/crashlog] Remove tempfile prefix from inlined symbol object file
Med Ismail Bennani [Mon, 22 May 2023 22:51:43 +0000 (15:51 -0700)]
[lldb/crashlog] Remove tempfile prefix from inlined symbol object file

This patch changes the way we generate the ObjectFileJSON files
containing the inlined symbols from the crash report to remove the
tempfile prefix from the object file name.

To do so, instead of creating a new tempfile for each module, we create a
temporary directory that contains each module object file with the same
name as the module.

This makes the backtraces only contain the module name without the
temfile prefix which makes it look like a regular stackframe.

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

Signed-off-by: Med Ismail Bennani <ismail@bennani.ma>
17 months ago[lldb] Move PassthroughScriptedProcess to `lldb.scripted_process` module
Med Ismail Bennani [Sun, 21 May 2023 07:58:02 +0000 (00:58 -0700)]
[lldb] Move PassthroughScriptedProcess to `lldb.scripted_process` module

This patch moves the `PassthroughScriptedProcess` & `PassthroughScriptedThread`
classes from the `interactive_scripted_process.py` test implementation
to the `lldb.scripted_process` python module.

This class is very versatile so it makes more sense to ship it with the
python module to make it easier for our adopters to derive their class
from it instead of copying it.

During the "migration", I've also noticed some bugs in the
`PassthroughScriptedThread` creation and update, so I also fixed that as
part of this patch.

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

Signed-off-by: Med Ismail Bennani <ismail@bennani.ma>
17 months ago[lldb] Add "Trace" stop reason in Scripted Thread
Med Ismail Bennani [Sun, 21 May 2023 07:55:50 +0000 (00:55 -0700)]
[lldb] Add "Trace" stop reason in Scripted Thread

This patch adds support to eStopReasonTrace to Scripted Threads.

This is necessary when using a Scrited Process with a Scripted Thread
Plan to report a special thread stop reason to the thread plan.

rdar://109425542

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

Signed-off-by: Med Ismail Bennani <ismail@bennani.ma>
17 months ago[lldb] Fix process LLDB_LOG typo (nfci)
Med Ismail Bennani [Wed, 17 May 2023 08:38:14 +0000 (01:38 -0700)]
[lldb] Fix process LLDB_LOG typo (nfci)

This patch fixes the log commands by replacing the LLDB_LOG macro by the
LLDB_LOGF macro. This is necessary in order to format argument with printf.

Signed-off-by: Med Ismail Bennani <ismail@bennani.ma>
17 months ago[lldb] Add support for negative integer to {SB,}StructuredData
Med Ismail Bennani [Mon, 22 May 2023 20:52:09 +0000 (13:52 -0700)]
[lldb] Add support for negative integer to {SB,}StructuredData

This patch refactors the `StructuredData::Integer` class to make it
templated, makes it private and adds 2 public specialization for both
`int64_t` & `uint64_t` with a public type aliases, respectively
`SignedInteger` & `UnsignedInteger`.

It adds new getter for signed and unsigned interger values to the
`StructuredData::Object` base class and changes the implementation of
`StructuredData::Array::GetItemAtIndexAsInteger` and
`StructuredData::Dictionary::GetValueForKeyAsInteger` to support signed
and unsigned integers.

This patch also adds 2 new `Get{Signed,Unsigned}IntegerValue` to the
`SBStructuredData` class and marks `GetIntegerValue` as deprecated.

Finally, this patch audits all the caller of `StructuredData::Integer`
or `StructuredData::GetIntegerValue` to use the proper type as well the
various tests that uses `SBStructuredData.GetIntegerValue`.

rdar://105575764

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

Signed-off-by: Med Ismail Bennani <ismail@bennani.ma>
17 months ago[NFC] Surface the validation of FunctionPropertiesAnalysis
Mircea Trofin [Wed, 17 May 2023 22:59:18 +0000 (15:59 -0700)]
[NFC] Surface the validation of FunctionPropertiesAnalysis

Avoids relying on `assert` for some of the validation.

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

17 months ago[test] Add C++ ext_vector_type tests
Cassie Jones [Mon, 22 May 2023 22:09:37 +0000 (15:09 -0700)]
[test] Add C++ ext_vector_type tests

Add initial tests for the behavior of ext_vector_type vectors for
vector vs scalar ops in C++. Their behavior doesn't agree with the behavior in
C and what the behavior seems like it should be, these are baseline tests before
implementing those changes.

Reviewed By: fhahn

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

17 months ago[DebugInfo][NFCI] Add unittest for DWARFAbbreviationDeclarationSet
Alex Langford [Fri, 19 May 2023 21:47:20 +0000 (14:47 -0700)]
[DebugInfo][NFCI] Add unittest for DWARFAbbreviationDeclarationSet

The classes relevant to DWARFDebugAbbrev do not have any unittests
verifying their behavior. Seeing as there is not much error handling
around these classes right now, I want to add some testing as I plan on
making changes to these classes in the near future.

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

17 months ago[libc] Add -fno-exceptions and -fno-rtti to integration test build.
Siva Chandra Reddy [Mon, 22 May 2023 21:49:37 +0000 (21:49 +0000)]
[libc] Add -fno-exceptions and -fno-rtti to integration test build.

Also adjust pthread_create_test to accomodate large page sizes. Both
these changes should now fix the full build builders.

Reviewed By: michaelrj

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

17 months ago[test] Add more ext_vector_type tests for C
Cassie Jones [Mon, 22 May 2023 22:06:56 +0000 (15:06 -0700)]
[test] Add more ext_vector_type tests for C

Test that all builtin operators type check successfully with one vector
operand and one scalar operand.

Reviewed By: fhahn

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

17 months ago[flang][preprocessing] Allow keyword macro to rename a function-like macro
Peter Klausler [Mon, 22 May 2023 20:56:32 +0000 (13:56 -0700)]
[flang][preprocessing] Allow keyword macro to rename a function-like macro

 #define FOO(x) ((x)+1)
 #define BAR FOO
 print *, BAR(1)

should work as one would expect.

Fixes https://github.com/llvm/llvm-project/issues/47162.

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

17 months ago[llvm-vscode] update dependencies
Yuanfang Chen [Mon, 22 May 2023 21:34:01 +0000 (14:34 -0700)]
[llvm-vscode] update dependencies

17 months agoAdd some missing [[noreturn]] attributes
Noah Goldstein [Mon, 22 May 2023 20:43:37 +0000 (15:43 -0500)]
Add some missing [[noreturn]] attributes

Missing in header for `pthread_exit` and `exit`.

Missing in spec file for `pthread_exit`.

Reviewed By: sivachandra

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

17 months agoCleanup code in `thread_exit`
Noah Goldstein [Mon, 22 May 2023 20:43:26 +0000 (15:43 -0500)]
Cleanup code in `thread_exit`

1) Avoid proper function calls and referencing local variables after
the stack has been deallocated. A proper function call/return or local
variable reference that may have spilled will cause invalid memory
reads after the stack has been deallocated.

2) Mark the function as [[noreturn]] and place
`__builtin_unreachable()` after the `SYS_exit` syscalls.

Reviewed By: sivachandra

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

17 months agoSupport custom attributes in pthread_create
Noah Goldstein [Thu, 20 Apr 2023 20:05:04 +0000 (15:05 -0500)]
Support custom attributes in pthread_create

Only functional for stack growsdown (same as before), but custom
`stack`, `stacksize`, `guardsize`, and `detachstate` all should be
working.

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

17 months ago[SLP]Fix PR62665: compiler crash when trying to access non-existing mask
Alexey Bataev [Mon, 22 May 2023 20:12:45 +0000 (13:12 -0700)]
[SLP]Fix PR62665: compiler crash when trying to access non-existing mask
element.

Need to check at first if the SubMask element is PoisonMaskElem to avoid
compiler crash.

17 months agoReland^2 "[BOLT] Parallelize legacy profile merging"
Yi Kong [Fri, 19 May 2023 21:56:46 +0000 (14:56 -0700)]
Reland^2 "[BOLT] Parallelize legacy profile merging"

Resovled the issue that when number of tasks is fewer than cores, we end
up creating as many threads as the number of cores, making the
performance worse than the single thread version.

17 months ago[RISCV] Increase scalar integer divide latency for SiFive7.
Craig Topper [Mon, 22 May 2023 20:37:34 +0000 (13:37 -0700)]
[RISCV] Increase scalar integer divide latency for SiFive7.

The scalar divider produces 1 bit per cycle so the worst case
latency is the input width plus a couple cycles.

Reviewed By: michaelmaitland

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

17 months ago[JITLink][ELF][ppc64] Add skeleton ppc64 support and ELF/ppc64 JITLink backend.
Lang Hames [Thu, 13 Apr 2023 18:43:37 +0000 (18:43 +0000)]
[JITLink][ELF][ppc64] Add skeleton ppc64 support and ELF/ppc64 JITLink backend.

This patch introduces a skeleton JITLink ppc64 support header and ELF/ppc64
backend. No relocations are supported in this initial version, but given a
program requiring no relocations (e.g. one that just returns a constant value
from main) the new backend is able to construct a LinkGraph from a ppc64 ELF
relocatable object, and the llvm-jitlink tool is able to execute it.

This commit should also serve as a good example of how to introduce a JITLink
backend for a new architecture.

Reviewed By: sgraenitz, v.g.vassilev, vchuravy, nemanjai, jain98, MaskRay

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

17 months agoRevert "[PostOrderIterator] Store end iterator (NFC)"
Adrian Prantl [Mon, 22 May 2023 19:52:13 +0000 (12:52 -0700)]
Revert "[PostOrderIterator] Store end iterator (NFC)"

This reverts commit 50f0ee8fbfc1f597ae7d2d49e0996c4338e5652f.

This breaks the bots.

https://green.lab.llvm.org/green/view/LLDB/job/lldb-cmake/lastFailedBuild/consoleFull#-1141050806a1ca8a51-895e-46c6-af87-ce24fa4cd561

17 months ago[RISCV] Fix some errors in the vector part of the scheduler model for SiFive7.
Craig Topper [Mon, 22 May 2023 19:46:25 +0000 (12:46 -0700)]
[RISCV] Fix some errors in the vector part of the scheduler model for SiFive7.

-FP compare latency was too high.
-Compare instructions need to increase latency to assume no chaining
to later instructions.

vmv.x.s, vmv.s.x, vfmv.f.s, and vfmv.s.f aren't 8 cycles. From the
the perspective of the vector pipeline they are only 4 cycles. Though
vector to scalar has a much higher latency from the perspective
of the scalar pipeline. Will need to adjust in the future.

Reviewed By: michaelmaitland

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

17 months agoRevert "[flang] Handle array constants of any rank"
Leandro Lupori [Mon, 22 May 2023 19:06:46 +0000 (16:06 -0300)]
Revert "[flang] Handle array constants of any rank"

This reverts commit e26e68a4905cc13064987c9b19fa153b54035d36.

This broke gfortran test-suite, test regression/intrinsic_pack_3.f90.

17 months ago[CMake] Set compatibility policy for lists in LLVM-Config.cmake.
Marcelo Juchem [Mon, 22 May 2023 19:05:41 +0000 (20:05 +0100)]
[CMake] Set compatibility policy for lists in LLVM-Config.cmake.

Fixes "dependent projects fail to build with cmake 3.25 and llvm 16-rc4".

When building [latest `iovisor/bcc`](https://github.com/iovisor/bcc/commit/1ea0390725391e76256af6a4d0eb857816e6290f), `cmake` complains about a change in the behavior of operator `IN_LIST`:
```console
CMake Warning (dev) at /usr/local/lib/cmake/llvm/LLVM-Config.cmake:230 (if):
  Policy CMP0057 is not set: Support new IN_LIST if() operator.  Run "cmake
  --help-policy CMP0057" for policy details.  Use the cmake_policy command to
  set the policy and suppress this warning.

  IN_LIST will be interpreted as an operator when the policy is set to NEW.
  Since the policy is not set the OLD behavior will be used.
Call Stack (most recent call first):
  cmake/clang_libs.cmake:32 (llvm_map_components_to_libnames)
  src/cc/CMakeLists.txt:132 (include)
This warning is for project developers.  Use -Wno-dev to suppress it.

CMake Error at /usr/local/lib/cmake/llvm/LLVM-Config.cmake:230 (if):
  if given arguments:

    "engine" "IN_LIST" "link_components"

  Unknown arguments specified
Call Stack (most recent call first):
  cmake/clang_libs.cmake:32 (llvm_map_components_to_libnames)
  src/cc/CMakeLists.txt:132 (include)
```

This patch addresses this issue by setting the aforementioned policy in `LLVM-Config.cmake`.

Reviewed By: mgorny, thesamesam

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

Closes: https://github.com/llvm/llvm-project/issues/61436

17 months ago[flang] Better error handling and testing of generics with homonymous specifics or...
Peter Klausler [Thu, 18 May 2023 17:32:14 +0000 (10:32 -0700)]
[flang] Better error handling and testing of generics with homonymous specifics or derived types

Fortran allows a generic procedure interface to have the same name as a derived
type in the same scope or the same name as one of its specific procedures.
(It can't have both since a derived type and specific procedure can't have the
same name in a scope.)

Some popular compilers allow generic interfaces with distinct accessible homonymous
specific procedures to be merged by USE association.  Thsi compiler does not,
and for good reason: it leads to ambiguity in cases where a procedure name appears
outside a reference, such as in a PROCEDURE declaration statement as the procedure's
interface, the target of a procedure pointer assignment statement, or as an
actual argument.

This patch cleans up the code that handles these cases, improves some error
messages, and adds more tests.

Resolves https://github.com/llvm/llvm-project/issues/60228.

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

17 months ago[flang] More precise CONTIGUOUS checking
Peter Klausler [Mon, 22 May 2023 16:47:38 +0000 (09:47 -0700)]
[flang] More precise CONTIGUOUS checking

A recent fix to avoid bogus errors with the CONTIGUOUS attribute caused
declaration checking to miss errors with applications of CONTIGUOUS to
names that are not variables.  Restore those error messages, and
add tests to ensure that the original problem remains fixed while
the recent regressions have been resolved.

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

17 months ago[clang][ExprConstant] fix __builtin_object_size for flexible array members
Nick Desaulniers [Mon, 22 May 2023 18:38:19 +0000 (11:38 -0700)]
[clang][ExprConstant] fix __builtin_object_size for flexible array members

As reported by @kees, GCC treats __builtin_object_size of structures
containing flexible array members (aka arrays with incomplete type) not
just as the sizeof the underlying type, but additionally the size of the
members in a designated initializer list.

Fixes: https://github.com/llvm/llvm-project/issues/62789

Reviewed By: erichkeane

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

17 months ago[MLIR][python bindings] Expose TypeIDs in python
max [Mon, 22 May 2023 16:12:53 +0000 (11:12 -0500)]
[MLIR][python bindings] Expose TypeIDs in python

This diff adds python bindings for `MlirTypeID`. It paves the way for returning accurately typed `Type`s from python APIs (see D150927) and then further along building type "conscious" `Value` APIs (see D150413).

Reviewed By: ftynse

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

17 months ago[NVPTX] generalize hasPTX/hasSM predicates. NFC.
Artem Belevich [Fri, 19 May 2023 20:19:27 +0000 (13:19 -0700)]
[NVPTX] generalize hasPTX/hasSM predicates. NFC.

Replaces hasSMxy/hasPTXxy with hasSM<xy>/hasPTX<xy> so we can use them as needed
without having to hardcode each version explicitly.

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

17 months ago[libc] Use MPFR for strtofloat fuzzing
Michael Jones [Mon, 15 May 2023 18:17:31 +0000 (11:17 -0700)]
[libc] Use MPFR for strtofloat fuzzing

The previous string to float tests didn't check correctness, but due to
the atof differential test proving unreliable the strtofloat fuzz test
has been changed to use MPFR for correctness checking. Some minor bugs
have been found and fixed as well.

Reviewed By: lntue

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

17 months ago[lldb-vscode] Make tests not wait for 'launch' process events if launch fails.
Jorge Gorbe Moya [Fri, 12 May 2023 18:42:40 +0000 (11:42 -0700)]
[lldb-vscode] Make tests not wait for 'launch' process events if launch fails.

After https://reviews.llvm.org/D147831, lldb-vscode doesn't send a
process event after launch/attach in case of failure. I believe this is
the right interpretation of the spec, because the description of the
event says:

> The event indicates that the debugger has begun debugging a new
> process.

and we haven't started debugging a process if there's no process because
we failed to launch it. This is also supported by the fact that
`request_launch` in vscode.py doesn't wait for the event if passed
`expectFailure=True`. However, this doesn't take into account
*unexpected* launch failures. In that case, `request_launch` will hang
indefinitely waiting for the process event.

This patch changes it so we'll only wait for these events if
`request["success"]` is true, independently of whether any failure was
expected or not.

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

17 months ago[flang][hlfir] Support rank mismatch with IGNORE_TKR(R).
Slava Zakharin [Mon, 22 May 2023 17:08:29 +0000 (10:08 -0700)]
[flang][hlfir] Support rank mismatch with IGNORE_TKR(R).

Reboxing of the actual argument according to the type of the dummy
argument has to be aware of the potential rank mismatch, when
IGNORE_TKR(R) is used. This change only adds support for the mismatching
rank when the dummy argument has unlimited polymorphic type.

Reviewed By: jeanPerier

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

17 months ago[Driver] -fsanitize=function: unsupport wasm after D148573
Fangrui Song [Mon, 22 May 2023 17:40:04 +0000 (10:40 -0700)]
[Driver] -fsanitize=function: unsupport wasm after D148573

D148573 made x86-specific -fsanitize=function available to all targets,
but wasm doesn't allow placing data words before the function label,
so unsupport wasm.

17 months ago[RISCV][llvm-mca] Add mca tests for riscv lmul instruments
Michael Maitland [Thu, 27 Apr 2023 01:19:46 +0000 (18:19 -0700)]
[RISCV][llvm-mca] Add mca tests for riscv lmul instruments

Add llvm-mca tests for RISCV LMUL instruments to show that llvm-mca RISCV LMUL
instruments work.

This commit was previously reverted in 847789d45712. It is now being
recommitted since the memory leak has been fixed in 4d2a1d7dd8f4.

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

17 months ago[llvm-mca][RISCV] Fix llvm-mca RISCVInstrument memory leak
Michael Maitland [Wed, 17 May 2023 20:48:18 +0000 (13:48 -0700)]
[llvm-mca][RISCV] Fix llvm-mca RISCVInstrument memory leak

There was a memory leak that presented itself once the llvm-mca
tests were committed. This leak was not checked for by the pre-commit
tests. This change changes the shared_ptr to a unique_ptr to avoid
this problem.

We will know that this fix works once committed since I don't know
whether it is possible to force a lit test to use LSan. I spent the
day trying to build llvm with LSan enabled without much luck. If
anyone knows how to build llvm with LSan for the lit-tests, I am
happy to give it another try locally.

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

17 months ago[SCCP] Fix -Wunused-lambda-capture
Fangrui Song [Mon, 22 May 2023 17:29:04 +0000 (10:29 -0700)]
[SCCP] Fix -Wunused-lambda-capture

17 months ago[lldb][NFCI] Change return type of Language::GetInstanceVariableName
Alex Langford [Tue, 16 May 2023 19:41:33 +0000 (12:41 -0700)]
[lldb][NFCI] Change return type of Language::GetInstanceVariableName

I don't think this needs to be a ConstString.

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

17 months ago-fsanitize=function: support C
Fangrui Song [Mon, 22 May 2023 17:11:30 +0000 (10:11 -0700)]
-fsanitize=function: support C

With D148785, -fsanitize=function no longer uses C++ RTTI objects and therefore
can support C. The rationale for reporting errors is C11 6.5.2.2p9:

> If the function is defined with a type that is not compatible with the type (of the expression) pointed to by the expression that denotes the called function, the behavior is undefined.

The mangled types approach we use does not exactly match the C type
compatibility (see `f(callee1)` below).
This is probably fine as the rules are unlikely leveraged in practice. In
addition, the call is warned by -Wincompatible-function-pointer-types-strict.

```
void callee0(int (*a)[]) {}
void callee1(int (*a)[1]) {}
void f(void (*fp)(int (*)[])) { fp(0); }
int main() {
  int a[1];
  f(callee0);
  f(callee1); // compatible but flagged by -fsanitize=function, -fsanitize=kcfi, and -Wincompatible-function-pointer-types-strict
}
```

Skip indirect call sites of a function type without a prototype to avoid deal
with C11 6.5.2.2p6. -fsanitize=kcfi skips such calls as well.

Reviewed By: #sanitizers, vitalybuka

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

17 months ago[bazel] Remove terminfo dependency
Aaron Siddhartha Mondal [Mon, 22 May 2023 16:59:46 +0000 (18:59 +0200)]
[bazel] Remove terminfo dependency

The only enabling configuration of this is irreproducible. Since
terminfo doesn't provide essential functionality, remove it so that all
external dependencies now follow the same config_setting pattern.

This should be an NFC for most setups and all CI setups.

Reviewed By: phosek, MaskRay

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

17 months ago[mlir][flang][openacc] Use new private representation for acc.loop
Valentin Clement [Mon, 22 May 2023 16:52:25 +0000 (09:52 -0700)]
[mlir][flang][openacc] Use new private representation for acc.loop

Update acc.loop private operands list to use the new design
introduced in D150622.

Depends on D150975

Reviewed By: razvanlupusoru

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

17 months ago[flang][openacc] Add initial support to lower private clause to the new design
Valentin Clement [Mon, 22 May 2023 16:51:47 +0000 (09:51 -0700)]
[flang][openacc] Add initial support to lower private clause to the new design

This patch adds the initial infrastructure to lower the private clause to the
new design introduced in D150622. The init region is not implemented yet
and currently only yield the input argument (semantic is then similar with the previous
design currently). Implementation will come in a follow up patch to keep patch.

This patch also re-enable test commented out for `acc serial`, `acc serial loop`,
`acc parallel` and `acc parallel loop` with private clause.

Depends on D150972, D150973

Reviewed By: razvanlupusoru, jeanPerier

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

17 months ago[flang] Add getTypeAsString function to create symbols
Valentin Clement [Mon, 22 May 2023 16:50:54 +0000 (09:50 -0700)]
[flang] Add getTypeAsString function to create symbols

This patch adds a common function to get a string representation
of a FIR type. This will be useful to generate couple of
operations like the acc.private.recipe, acc.firstprivate.recipe
and the acc.reduction.recipe

Reviewed By: razvanlupusoru

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

17 months ago[mlir][openacc] Use new private representation in acc.serial
Valentin Clement [Mon, 22 May 2023 16:49:48 +0000 (09:49 -0700)]
[mlir][openacc] Use new private representation in acc.serial

Update acc.serial private operands list to use the new design
introduced in D150622.

Test in flang/test/Lower/OpenACC/acc-parallel.f90 and
flang/test/Lower/OpenACC/acc-parallel-loop.f90 are temporarly
disabled and will be enabled with updated lowering in the next
patch.

Depends on D150971

Reviewed By: razvanlupusoru

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

17 months ago[FuncSpec] Replace LoopInfo with BlockFrequencyInfo.
Alexandros Lamprineas [Thu, 11 May 2023 12:44:40 +0000 (13:44 +0100)]
[FuncSpec] Replace LoopInfo with BlockFrequencyInfo.

Using AvgLoopIters on any loop is too imprecise making the cost model
favor users inside loop nests regardless of the actual tripcount.

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

17 months ago[mlir][openacc] Use new private representation in acc.parallel
Valentin Clement [Mon, 22 May 2023 16:49:07 +0000 (09:49 -0700)]
[mlir][openacc] Use new private representation in acc.parallel

Update acc.parallel private operands list to use the new design
introduced in D150622.

Test in flang/test/Lower/OpenACC/acc-parallel.f90 and
flang/test/Lower/OpenACC/acc-parallel-loop.f90 are temporarly
disabled and will be enabled with updated lowering in the follow-up
patch.

Reviewed By: razvanlupusoru

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

17 months ago[MLIR][python bindings] Add more basic AttrBuilder for _ops_gen.py files
pengchao.hu [Mon, 22 May 2023 16:35:33 +0000 (18:35 +0200)]
[MLIR][python bindings] Add more basic AttrBuilder for _ops_gen.py files

Add more attribute builders, such as "F32Attr", "F64Attr" and "F64ArrayAttr", which are useful to create operations by python bindings. For example, tosa.clamp in _tosa_ops_gen.py need 'F32Attr'.

Reviewed By: ftynse

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

17 months ago[libc++] Fix ignore_format.txt list
Nikolas Klauser [Mon, 22 May 2023 16:05:40 +0000 (09:05 -0700)]
[libc++] Fix ignore_format.txt list

For some reason the expected ignore_format.txt changed. This patch fixes it in trunk, but the problem is being investigated.

Reviewed By: #libc, Mordante

Spies: Mordante, libcxx-commits, arichardson

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

17 months ago[RISCV] Add missing zfh extensions to fixed vector load/store tests
Luke Lau [Mon, 22 May 2023 16:32:57 +0000 (17:32 +0100)]
[RISCV] Add missing zfh extensions to fixed vector load/store tests

17 months ago[mlir][sparse] fix document format
Peiming Liu [Mon, 22 May 2023 16:00:55 +0000 (16:00 +0000)]
[mlir][sparse] fix document format

Reviewed By: ftynse

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

17 months ago[mlir][memref] Fix num elements in lowering of memref.alloca op to LLVM
Fabian Mora [Mon, 22 May 2023 16:21:28 +0000 (16:21 +0000)]
[mlir][memref] Fix num elements in lowering of memref.alloca op to LLVM

Fixes a mistake in the lowering of memref.alloca to llvm.alloca, as llvm.alloca uses the number of elements to allocate in the stack and not the size in bytes.

Reference:
LLVM IR: https://llvm.org/docs/LangRef.html#alloca-instruction
LLVM MLIR: https://mlir.llvm.org/docs/Dialects/LLVM/#llvmalloca-mlirllvmallocaop

Reviewed By: ftynse

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

17 months ago[clang][AST] TextNodeDumper should not evaluate the initializer of constexpr variable...
Takuya Shimizu [Mon, 22 May 2023 15:29:20 +0000 (00:29 +0900)]
[clang][AST] TextNodeDumper should not evaluate the initializer of constexpr variable declaration when it has a dependent type

`TextNodeDumper` enabed through `-ast-dump` flag should not evlauate the initializer when it visits a constexpr `VarDecl` node if it has a dependent type.

I found a crashing case fixed by this change and added it as a test case.
`template <typename T> constexpr T call_init(0);`
Link: https://godbolt.org/z/3bG9Pjj5E
This is a fix for the regression caused by D146358

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

17 months ago[clang] Fix label (de-)serialization in ASM statements.
Viktoriia Bakalova [Mon, 22 May 2023 10:10:49 +0000 (10:10 +0000)]
[clang] Fix label (de-)serialization in ASM statements.

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

17 months agoRevert "Reapply D146987 "[Assignment Tracking] Enable by default""
Fangrui Song [Mon, 22 May 2023 15:53:15 +0000 (08:53 -0700)]
Revert "Reapply D146987 "[Assignment Tracking] Enable by default""

This reverts commit 8dec295af0352fccb5825dc08e4ec21cb9ffe010.

See https://github.com/llvm/llvm-project/issues/62838

17 months ago[docs] Fix typo after D151098
Fangrui Song [Mon, 22 May 2023 15:47:13 +0000 (08:47 -0700)]
[docs] Fix typo after D151098

17 months agoAMDGPU: Fix assertion on assorted canonicalize vector types
Matt Arsenault [Mon, 22 May 2023 11:40:38 +0000 (12:40 +0100)]
AMDGPU: Fix assertion on assorted canonicalize vector types

This assert should have the same set of vector types as the binary
and ternary case (although this assert is kind of pointless, the code
should work for any vector type as-is).

Fixes part of issue #32650.

17 months ago[AMDGPU] Fix lowering of @llvm.amdgcn.set.inactive(imm, poison)
Jay Foad [Mon, 22 May 2023 14:40:57 +0000 (15:40 +0100)]
[AMDGPU] Fix lowering of @llvm.amdgcn.set.inactive(imm, poison)

If the second argument of V_SET_INACTIVE is undef/poison,
SIWholeQuadMode lowered it to a COPY from the first argument, but that
caused invalid MIR if the first argument was an immediate rather than a
register.

Fix this by lowering to a V_MOV instruction instead of a COPY.

Fixes https://github.com/llvm/llvm-project/issues/62862

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

17 months ago[Clang][Docs] Add help test to `-march` and `-mcpu` to suggest `-mcpu=help`
Joseph Huber [Mon, 22 May 2023 13:57:54 +0000 (08:57 -0500)]
[Clang][Docs] Add help test to `-march` and `-mcpu` to suggest `-mcpu=help`

Currently there is no documentation for these flags, users might find it
confusing to know which values are permitted. This change simply adds
documentation to suggest using `-mcpu=help` to list the availible target
names.

Reviewed By: aaron.ballman

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

17 months ago[bazel] Port 231a6959025b3101942701b214c64762b55222c6
Benjamin Kramer [Mon, 22 May 2023 15:11:25 +0000 (17:11 +0200)]
[bazel] Port 231a6959025b3101942701b214c64762b55222c6

17 months ago[llvm-profdata] Fix test on Windows
Michael Platings [Mon, 22 May 2023 14:56:29 +0000 (15:56 +0100)]
[llvm-profdata] Fix test on Windows

Output on Windows is "llvm-profdata.exe"

17 months agoAdd missing header for uint64_t
Paulo Matos [Mon, 22 May 2023 14:32:28 +0000 (16:32 +0200)]
Add missing header for uint64_t

LLVM fails to build in some environments with EXPENSIVE_CHECKS
due to the use of uint64_t without including cstdint.

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

17 months ago[InstCombine] Insert a bitcast to enable merging similar store insts
Anshil Gandhi [Fri, 19 May 2023 16:32:12 +0000 (10:32 -0600)]
[InstCombine] Insert a bitcast to enable merging similar store insts

Given two Store instructions with equivalent pointer operands,
they could be merged into their common successor basic block if
the value operand of one is bitcasted to match the type of the
other.

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

17 months ago[SME2/SVE2p1] Extend llvm.aarch64.sve.convert.to/from.svbool to accept target("aarch6...
Sander de Smalen [Mon, 22 May 2023 13:52:18 +0000 (13:52 +0000)]
[SME2/SVE2p1] Extend llvm.aarch64.sve.convert.to/from.svbool to accept target("aarch64.svcount")

The convert intrinsics can be used to implement existing operations on svcount_t
when the actual bits/content of the predicate register doesn't matter (such
as PSEL, which copies the full contents of the first source register to the
destination register).

Reviewed By: CarolineConcatto, david-arm

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

17 months ago[SME2/SVE2p1] Change psel intrinsic such that the result/first operand are not overlo...
Sander de Smalen [Mon, 22 May 2023 13:52:06 +0000 (13:52 +0000)]
[SME2/SVE2p1] Change psel intrinsic such that the result/first operand are not overloaded.

All the bits of the first operand are copied to the destination register,
if the tested bit (in the second source operand) is active. This means we
copy over all vscale x 16 x i1's of the first operand. There is no need to
overload that type.

Reviewed By: david-arm

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

17 months ago[AArch64][SME2/SVE2p1] Add predicate-as-counter intrinsics for ld1/ldnt1/st1/stnt1
Sander de Smalen [Mon, 22 May 2023 13:37:34 +0000 (13:37 +0000)]
[AArch64][SME2/SVE2p1] Add predicate-as-counter intrinsics for ld1/ldnt1/st1/stnt1

These intrinsics are used to implement multi-vector load/store intrinsics that loads
or stores a tuple of 2 or 4 values, based on a predicate-as-counter operand, e.g.

  __attribute__((arm_streaming))
  svuint8x2_t svld1[_u8]_x2(svcount_t png, const uint8_t *rn);

  __attribute__((arm_streaming))
  void svst1[_u8_x2](svcount_t png, uint8_t *rn, svuint8x2_t zt);

As described in https://github.com/ARM-software/acle/pull/217

Reviewed By: CarolineConcatto

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

17 months ago[AArch64][SME2/SVE2p1] Add predicate-as-counter intrinsics for sel
Sander de Smalen [Mon, 22 May 2023 13:37:19 +0000 (13:37 +0000)]
[AArch64][SME2/SVE2p1] Add predicate-as-counter intrinsics for sel

These intrinsics are used to implement the sel intrinsics that selects
a tuple of 2 or 4 values based on a predicate-as-counter operand, e.g.

  __attribute__((arm_streaming))
  svuint8x2_t svsel[_u8_x2](svcount_t png, svuint8x2_t zn, svuint8x2_t zm);

  __attribute__((arm_streaming))
  svuint8x4_t svsel[_u8_x4](svcount_t png, svuint8x4_t zn, svuint8x4_t zm);

As described in https://github.com/ARM-software/acle/pull/217

Reviewed By: CarolineConcatto

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

17 months ago[PostOrderIterator] Store end iterator (NFC)
Nikita Popov [Mon, 22 May 2023 13:04:18 +0000 (15:04 +0200)]
[PostOrderIterator] Store end iterator (NFC)

Store the end iterator on the VisitStack, instead of recomputing
it every time, as doing so is not free.

17 months ago[llvm-profdata] Accept --version argument
Michael Platings [Mon, 22 May 2023 13:43:25 +0000 (14:43 +0100)]
[llvm-profdata] Accept --version argument

The `llvm-profdata --version` output now looks like:

  llvm-profdata
  LLVM (http://llvm.org/):
    LLVM version 17.0.0git
    Optimized build with assertions.

This makes llvm-profdata more consistent with other tools.

Reviewed By: simon_tatham

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

17 months ago[RISCV][test] Finish removing unneeded (implied) 'f' from Zvfbfwma, Zvfbfmin attribut...
Alex Bradbury [Mon, 22 May 2023 13:38:05 +0000 (14:38 +0100)]
[RISCV][test] Finish removing unneeded (implied) 'f' from Zvfbfwma, Zvfbfmin attribute tests

Missed a hunk in a6e2b1ee49f553a06e22729d90e0a2738caf052e.

17 months ago[RISCV][test] Remove unneeded (implied) 'f' from Zvfbfwma, Zvfbfmin attribute tests
Alex Bradbury [Mon, 22 May 2023 13:33:38 +0000 (14:33 +0100)]
[RISCV][test] Remove unneeded (implied) 'f' from Zvfbfwma, Zvfbfmin attribute tests

This means the test properly checks that RISCVISAInfo includes the
implication for the F extension (directly, or indirectly through
zve32f).

17 months ago[clang] Fix crash on attempt to initialize union with flexible array member
Mariya Podchishchaeva [Mon, 22 May 2023 13:08:57 +0000 (09:08 -0400)]
[clang] Fix crash on attempt to initialize union with flexible array member

Due to missing check on union, there was a null expression
added to init list that caused crash later.

Fixes https://github.com/llvm/llvm-project/issues/61746

Reviewed By: aaron.ballman, shafik

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

17 months ago[RISCV][test][NFC] Trim unneeded +f/+d from -mattr in bfloat16 extension tests
Alex Bradbury [Mon, 22 May 2023 13:21:28 +0000 (14:21 +0100)]
[RISCV][test][NFC] Trim unneeded +f/+d from -mattr in bfloat16 extension tests

17 months ago[SCEV] Replace NumTripCountsComputed stat with NumExitCountsComputed
Dmitry Makogon [Wed, 3 May 2023 07:19:57 +0000 (14:19 +0700)]
[SCEV] Replace NumTripCountsComputed stat with NumExitCountsComputed

This fixes assertion crash in https://github.com/llvm/llvm-project/issues/62380.

In the beginning of ScalarEvolution::getBackedgeTakenInfo
we make sure that BackedgeTakenCounts contains an entry
for the given loop.
Then we call computeBackedgeTakenCount which computes the result,
and in the end we insert it in the map like so:

  return BackedgeTakenCounts.find(L)->second = std::move(Result);

So we expect that the entry for L still exists in the cache.
However, it can get deleted. When it has computed the result,
getBackedgeTakenInfo clears all the cached SCEVs that use the AddRecs in the loop.

In the crashing example, getBackedgeTakenInfo first gets called on an inner loop,
and during this call it gets called again on its parent loop.
This recursion happens after the call to computeBackedgeTakenCount.
And it happens so that some SCEV from the BTI of the child loop uses
an AddRec of the parent loop. So when we successfully compute BTI
for the parent loop, we erase already computed result for the child one.

The recursion happens in some debug only code that
updates statistics. The algorithm itself is non-recursive.
Namely the recursive call happens in BackedgeTakenInfo::getExact function
and its return value is only used to compare it against SCEVCouldNotCompute.

As suggested by nikic I replaced the NumTripCountsComputed and NumTripCountsNotComputed
with NumExitCountsComputed and NumExitCountsNotComputed respectively.
They are updated during computations made for single exits. It relieves us of the need
to compute exact exit count for the loop just to update the named
statistic and thus the recursion cannot happen anymore.

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