446086 Commits

Author SHA1 Message Date
Iain Sandoe
bd7f4c561f [C++20][Modules] Elide unused guard variables in Itanium ABI module initializers.
For the Itanium ABI, we emit an initializer for each module.  This is responsible
for handling initialization of global vars.  Relates to P1874R1.

The initializer has a known mangling and is automatically called from any TU that
imports a module. Since, at present, the importer has no way to determine that an
imported module does not require an initializer, we generate the initializer for
all cases (even when it is empty).

Initializers must be run once, with the ordering guaranteed by the import graph
and this is ensured in the current code by addition of a guard variable.

In the case that a module has no requirement for global initializers, and also does
not import any other modules, we can elide the guard variable.

Differential Revision: https://reviews.llvm.org/D134589
2022-12-18 09:16:27 +00:00
Kazu Hirata
541ef3d61e Include <optional> instead of "llvm/ADT/Optional.h"
This is part of an effort to migrate from llvm::Optional to
std::optional:

https://discourse.llvm.org/t/deprecating-llvm-optional-x-hasvalue-getvalue-getvalueor/63716
2022-12-18 00:28:54 -08:00
Sameer Sahasrabuddhe
9c1b82599d [AAPointerInfo] handle multiple offsets in PHI
Previously reverted in 8b446ea2ba39e406bcf940ea35d6efb4bb9afe95

Reapplying because this commit is NOT DEPENDENT on the reverted commit
fc21f2d7bae2e0be630470cc7ca9323ed5859892, which broke the ASAN buildbot.
See https://reviews.llvm.org/rGfc21f2d7bae2e0be630470cc7ca9323ed5859892 for
more information.

The arguments to a PHI may represent a recurrence by eventually using the output
of the PHI itself. This is now handled by checking for cycles in the control
flow. If a PHI is not in a recurrence, it is now able to report multiple offsets
instead of conservatively reporting unknown.

Reviewed By: jdoerfert

Differential Revision: https://reviews.llvm.org/D138991
2022-12-18 10:51:20 +05:30
Vy Nguyen
7d4f70f8e5 Reland 3nd attempt: [lld-macho] Fix bug in reading cpuSubType field.
This reverts commit 09c5aab7f88178c1af92de0b00417416da9db6c1.

New changes:
Temporarily skip checking the output bundle's cpu/cpu-subtype
Suspected there's a bug in selecting targets which caused the produced bundle
to be arm64 bundle (even though it was specifically linked with -arch x86_64).

The current test that link succeeded should be sufficient, because
it would have failed with "unable to find matching tagets" prior to this patch.

Differential Revision: https://reviews.llvm.org/D139572
2022-12-17 23:35:50 -05:00
River Riddle
8bb8421b0d [mlir] Add an overload of parseOptionalAttribute for SymbolRefAttr
Avoids parsing other types of attributes when checking if there is
a SymbolRefAttr.
2022-12-17 19:54:44 -08:00
Johannes Doerfert
81f3deec19 [Attributor][FIX] Ensure to delete all AAs
Before we might have missed calling the destructor on an abstract
attribute if it was created outside the seeding or update phase.
All AAs are now in the AAMap and we can use it to delete them all.
2022-12-17 17:45:25 -08:00
Dinar Temirbulatov
7bce66edc6 [AArch64][SVE] Allow to lower WHILEop with constant operands to PTRUE
This allows it to fold WHILEop with constant operand to PTRUE instruction in
the case given range is fitted to predicate format. Also, this change
fixes the unsigned overflow error introduced in D137547 for WHILELO lowering.

Differential Revision: https://reviews.llvm.org/D139068
2022-12-18 01:27:03 +00:00
Peter Klausler
7db05ae14d [flang] Fix crash in name resolution
In an error recovery situation, the name resolution code for a
SELECT TYPE statement must check the presence of an optional
expression before calling GetType() upon it.

Differential Revision: https://reviews.llvm.org/D140153
2022-12-17 17:23:52 -08:00
Roman Lebedev
81b35aa69f
[NFC][llvm-exegesis] Extract runBenchmarkConfigurations() out of benchmarkMain()
`benchmarkMain()` is already bigger than it should be,
let's extract the important chunk before making it even larger.
2022-12-18 04:23:20 +03:00
Roman Lebedev
1dd4a6aac6
[NFC][llvm-exegesis] BenchmarkRunner: split runConfiguration() into getRunnableConfiguration() + runConfiguration()
We can run as many `getRunnableConfiguration()` in parallel as we want,
but `runConfiguration()` must be run *completely* standalone from everything.
This is a step towards enabling threading.
2022-12-18 04:23:20 +03:00
Roman Lebedev
a5de49755c
[NFC][llvm-exegesis] InstructionBenchmark: only allow move constructor
We don't ever legitimately need to copy it, so let's make that explicit
2022-12-18 04:23:20 +03:00
Fangrui Song
fbaf48be0f [lldb] Remove redundant .c_str() and .get() calls
Removing .c_str() has a semantics difference, but the use scenarios
likely do not matter as we don't have NUL in the strings.
2022-12-18 01:15:25 +00:00
Roman Lebedev
a340019113
[llvm-exegesis] Unbreak --benchmarks-file=<f>
I'm absolutely flabbergasted by this.
I was absolutely sure this worked.
But apparently not.

When outputting to the file, we'd write a single `InstructionBenchmark`
to it, and then close the file. And for the next `InstructionBenchmark`,
we'd reopen the file, truncating it in process,
and thus the first `InstructionBenchmark` would be gone...
2022-12-18 03:50:10 +03:00
Gregory Alfonso
d22f050e15 Remove redundant .c_str() and .get() calls
Reviewed By: MaskRay

Differential Revision: https://reviews.llvm.org/D139485
2022-12-18 00:33:53 +00:00
Khem Raj
ae3e228af7 cmake: Enable 64bit off_t on 32bit glibc systems
Pass -D_FILE_OFFSET_BITS=64 to compiler flags on 32bit glibc based
systems. This will make sure that 64bit versions of LFS functions are
used e.g. seek will behave same as lseek64. Also revert [1] partially
because this added a cmake test to detect lseek64 but then forgot to
pass the needed macro to actual compile, this test was incomplete too
since libc implementations like musl has 64bit off_t by default on 32bit
systems and does not bundle[2] -D_LARGEFILE64_SOURCE under -D_GNU_SOURCE
like glibc, which means the compile now fails on musl because the cmake
check passes but we do not have _LARGEFILE64_SOURCE defined. Using the
*64 function was transitional anyways so use -D_FILE_OFFSET_BITS=64
instead

[1] 8db7e5e4ee
[2] https://git.musl-libc.org/cgit/musl/commit/?id=25e6fee27f4a293728dd15b659170e7b9c7db9bc

Reviewed By: MaskRay

Differential Revision: https://reviews.llvm.org/D139752
2022-12-18 00:13:29 +00:00
Peter Klausler
4244cab23a [flang] Check constant arguments to bit manipulation intrinsics even if not foldable
When some arguments that specify bit positions, shift counts, and field sizes are
constant at compilation time, but other arguments are not constant, the compiler
should still validate the constant ones.  In the current sources, validation is
only performed for intrinsic references that can be folded to constants.

Differential Revision: https://reviews.llvm.org/D140152
2022-12-17 15:24:59 -08:00
Krzysztof Parzyszek
8f0df9f3bb [clang] Convert OptionalFileEntryRefDegradesToFileEntryPtr to std::optional 2022-12-17 15:24:14 -08:00
Markus Böck
1d43966bc3 [llvm][ADT] Allow returning std::nullopt in TypeSwitch
Returning `std::nullopt` from the case of a `TypeSwitch` yields broken results, by either falling through to another case, or falling of the switch entirely and hitting an assertion. This is simply due to the use of `operator=` of what is now `std::optional`, which has an overload specifically for `std::nullopt`, causing the internal optional, used for the `TypeSwitch` result to be reset, instead of a value being constructed from the `std::nullopt`.

The fix is to simply use the `emplace` method of `std::optional`, causing a value to always be constructed from the value returned by the case function.

Differential Revision: https://reviews.llvm.org/D140265
2022-12-18 00:02:03 +01:00
Fangrui Song
1792821c83 Optional: Deprecated value()
https://discourse.llvm.org/t/deprecating-llvm-optional-x-hasvalue-getvalue-getvalueor/63716/19

value() is a 15.0.0 API for std::optional migration.
std::optional::value() has undesired exception checking semantics and is
unavailable in older Xcode (see
_LIBCPP_AVAILABILITY_BAD_OPTIONAL_ACCESS). Deprecate value() to prevent
new in-tree uses which may accidentally cause build breakage for older
Xcode when contributors perform std::optional migrating.

Some downtream MLIR projects such as tensorflow/mlir-hlo, stablehlo use
value(), so we do not remove it now.
2022-12-17 22:43:03 +00:00
Fangrui Song
411512a7ce Optional: Avoid value() uses
prerequisite to deprecate the new API value() whose counterpart in
std::optional has undesired exception checking semantics and is
unavailable in older Xcode.
2022-12-17 22:30:35 +00:00
Fangrui Song
15a9a72ee6 [flang] llvm::Optional::value() => => operator*/operator->
std::optional::value() has undesired exception checking semantics and is
unavailable in older Xcode (see _LIBCPP_AVAILABILITY_BAD_OPTIONAL_ACCESS). The
call sites block std::optional migration.
2022-12-17 22:22:47 +00:00
Simon Pilgrim
bbf84fcf18 [X86] SandyBridge - fix ADC RMW uop count
These should consistently use the fused domain count, not the unfused domain

Confirmed with Agner + uops.info
2022-12-17 21:52:44 +00:00
Slava Zakharin
1a9dec0dda [flang] Fixed buildbot failured after D140236.
Removed unused functions searchFunctionInLibrary and getFuncOp.

Differential Revision: https://reviews.llvm.org/D140236
2022-12-17 13:09:08 -08:00
Peter Rong
b926e35724 precommit APSInt format for D140059
Signed-off-by: Peter Rong <PeterRong96@gmail.com>
2022-12-17 13:07:12 -08:00
Roman Lebedev
b482cbeb4e
[NFC][CMake] Fix AnalysisTests build after 07af0e2d3e8485ad6f84da1ad9851538b62d2942
The new code uses ModuleInliner, but does not link to the library
that provides it.
2022-12-17 23:53:36 +03:00
Simon Pilgrim
ed37234f9b [X86] Fix BMI uop/throughputs on znver1/znver2
Most BMI ops are 2uop and 0.5 throughput - interestingly TZCNTrm doesn't take an extra uop but the other instructions do

Confirmed by AMD SoG + Agner
2022-12-17 20:38:40 +00:00
Fangrui Song
f43886e7ba [lldb] llvm::Optional::value() && => operator*/operator->
std::optional::value() has undesired exception checking semantics and is
unavailable in older Xcode (see _LIBCPP_AVAILABILITY_BAD_OPTIONAL_ACCESS). The
call sites block std::optional migration.
2022-12-17 20:37:13 +00:00
Slava Zakharin
b6ef76a1ec [NFC][flang] Removed pgmath handling from lowering.
I kept the possibility to use pgmath in constant folding
just in case. We can remove it later, if it is proven to be redundant.

Differential Revision: https://reviews.llvm.org/D140236
2022-12-17 12:33:33 -08:00
Roman Lebedev
118b49a09b
[NFCI][llvm-exegesis] BenchmarkRunner::runConfiguration(): extract assembleSnippet() helper 2022-12-17 23:14:53 +03:00
Roman Lebedev
41dd767fee
[NFC][llvm-exegesis] BenchmarkRunner::runConfiguration(): deduplicate DumpObjectToDisk handling
Always assemble into buffer, that is then optionally dumped into file.
2022-12-17 23:14:53 +03:00
Roman Lebedev
0db620aa30
[NFC][llvm-exegesis] BenchmarkRunner::runConfiguration(): reformat 2022-12-17 23:14:53 +03:00
Roman Lebedev
17e202424c
[NFCI][llvm-exegesis] Extract 'Min' repetition handling from BenchmarkRunner into it's caller
If `BenchmarkRunner::runConfiguration()` deals with more than a single
repetitor, tasking will be less straight-forward to implement.
But i think dealing with that in it's callee is even more readable.
2022-12-17 23:14:52 +03:00
Fangrui Song
b57533d1d5 [clang-tools-extra] llvm::Optional::value => operator*/operator->
std::optional::value() has undesired exception checking semantics and is
unavailable in older Xcode (see _LIBCPP_AVAILABILITY_BAD_OPTIONAL_ACCESS). The
call sites block std::optional migration.
2022-12-17 20:03:01 +00:00
Fangrui Song
d1f4753475 [clang] llvm::Optional::value() && => operator*/operator->
std::optional::value() has undesired exception checking semantics and is
unavailable in older Xcode (see _LIBCPP_AVAILABILITY_BAD_OPTIONAL_ACCESS). The
call sites block std::optional migration.
2022-12-17 19:47:45 +00:00
Fangrui Song
76b1100372 [mlir] llvm::Optional::value() && => operator*/operator->
std::optional::value() has undesired exception checking semantics and is
unavailable in older Xcode (see _LIBCPP_AVAILABILITY_BAD_OPTIONAL_ACCESS). The
call sites block std::optional migration.
2022-12-17 19:23:50 +00:00
Fangrui Song
cbb0981388 [mlir] llvm::Optional::value => operator*/operator->
std::optional::value() has undesired exception checking semantics and is
unavailable in older Xcode (see _LIBCPP_AVAILABILITY_BAD_OPTIONAL_ACCESS). The
call sites block std::optional migration.
2022-12-17 19:07:38 +00:00
Peter Klausler
412f391ca4 [flang] Check for another case of ambiguous generic resolution
When specific procedures of a generic have dummy procedures,
underspecified actual procedures can match more than one specific
procedure.  This can happen with actual procedures that are
externals with implicit interfaces, including the completely
unspecified case of a PROCEDURE() or EXTERNAL that doesn't even
differentiate between a subroutine and a function.

Generic resolution can already handle cases of ambiguous resolution
due to the use of NULL() actual arguments with no MOLD= arguments
to define their types.  Extend the handling of ambiguous actual
arguments to include the case of underspecified actual procedures.

Differential Revision: https://reviews.llvm.org/D140151
2022-12-17 10:47:38 -08:00
ibricchi
07af0e2d3e Reapply "[InlineAdvisor] Allow loading advisors as plugins"
This reverts commit 8d22a63e2c8b4931113ca9d1ee8b17f7ff453e81.

Fix was missing dependency.
2022-12-17 10:35:14 -08:00
Peter Klausler
1457eb378a [flang] Check C854, C855, & C856 on PROTECTED entities
Check for things that are not allowed to bear the PROTECTED
attribute.

Differential Revision: https://reviews.llvm.org/D140150
2022-12-17 09:47:21 -08:00
Peter Klausler
fb792ebaf2 [flang] Apply definability checks in ALLOCATE/DEALLOCATE statements
The pointers and allocatables that appear in ALLOCATE and DEALLOCATE
statements need to be subject to the general definability checks so
that problems with e.g. PROTECTED objects can be caught.

(Also: regularize the capitalization of the DEALLOCATE error messages
while I'm in here so that they're consistent with the messages that
can come out for ALLOCATE.)

Differential Revision: https://reviews.llvm.org/D140149
2022-12-17 09:46:16 -08:00
Haojian Wu
1033289a3f Fix unused variable warnings in SIFrameLowering.cpp for release build, NFC 2022-12-17 18:24:44 +01:00
Haojian Wu
1651bc60ad Update the bazel's llvm-config.h.cmake file
Reflect the change 7d2c1150d31bb3692c81f6ecb0dbe61170e31212, fix the bazel test
breakage.
2022-12-17 18:17:30 +01:00
Peter Klausler
98eb7d0a8d [flang] Enforce C1529 as a warning, C919 as an error
Constraint C1529 requires that the base object of a type-bound procedure
reference be a scalar if the TBP has the NOPASS attribute.  Most
compilers do not enforce this constraint and it does not appear to
have any implementation justification, so emit portability warning.

On the other hand, we fail to enforce C919 for references to
procedure pointer components, whose base objects must of course
be scalars in order to avoid ambiguity and empty arrays, whether
NOPASS is present or not.

Differential Revision: https://reviews.llvm.org/D140148
2022-12-17 09:10:56 -08:00
Haojian Wu
4e74f2d8a6 Fix unused variable warning in release build, NFC. 2022-12-17 18:04:28 +01:00
Simon Pilgrim
2bc2bcb246 [X86] All the WriteBLS instructions take 2uops, not 1uop
Confirmed by AMD SoG + Agner + uops.info
2022-12-17 15:40:41 +00:00
Paul Walker
f53234cbfd [AggressiveInstCombine] Fix invalid TypeSize conversion when combining loads.
Much of foldLoadsRecursive relies on knowing the size of loaded
data, which is not possible for scalable vector types.  However,
the logic of combining two small loads into one bigger load does
not apply for vector types so rather than converting the algorithm
to use TypeSize I've simply added an early exit for vectors.

Fixes #59510

Differential Revision: https://reviews.llvm.org/D140106
2022-12-17 15:34:27 +00:00
Peter Klausler
815fddfa17 [flang] Impose DATA initialization size limit to avoid crashing
Impose a large but finite limit on the size of a variable being
initialized in a DATA statement to provide a readable error message
for artificial test cases that's better than a memory allocation
failure crash.

Differential Revision: https://reviews.llvm.org/D140146
2022-12-17 07:27:31 -08:00
Alessandro Arzilli
10539ec2cf [dsymutil] fix accidental 32bit truncation in patchFrameInfoForObject
patchFrameInfoForObject accidentally truncates FDE addresses
to the least significant 32bits, which causes the Go bug: https://github.com/golang/go/issues/25841.

Patch by Alessandro Arzilli

Differential Revision: https://reviews.llvm.org/D138763
2022-12-17 15:26:32 +01:00
Nico Weber
09c5aab7f8 Revert "Reland 2nd attempt: [lld-macho] Fix bug in reading cpuSubType field."
This reverts commit b08acee423935c16a1503335d78b84ccbbae4ef8.
Still breaks tests, see https://reviews.llvm.org/D139572#4003191
2022-12-17 09:25:42 -05:00
Roman Lebedev
5b1592b5c5
[NFC][llvm-exegesis] LLVMState: only store references to reg/op names
We know that the original reference from which we've built these maps
will persist, so we do not need to copy the names.
2022-12-17 17:10:48 +03:00