Nicolai Hähnle [Thu, 20 Oct 2022 09:33:49 +0000 (11:33 +0200)]
update_test_checks.py: allow use with custom tools
We have a downstream project with a command-line utility that operates
pretty much exactly like `opt`. So it would make sense for us to
maintain tests with update_test_checks.py with our custom tool
substituted for `opt`, as this change allows.
Differential Revision: https://reviews.llvm.org/D136329
OCHyams [Wed, 26 Oct 2022 16:15:02 +0000 (17:15 +0100)]
Account for memory locations in DIExpression::createFragmentExpression
createFragmentExpression rejects expressions containing certain ops, like
DW_OP_plus, that may cause the expression to compute a value that can't be
split.
Teach createFragmentExpression that the value loaded from an address computed
using those ops is safe to split.
Update a unittest to account for and test this change.
Reviewed By: StephenTozer
Differential Revision: https://reviews.llvm.org/D136243
Alex Brachet [Thu, 27 Oct 2022 06:47:24 +0000 (06:47 +0000)]
Revert "[libc] Implement getopt"
This reverts commit
a678f86351c30a7d57197ffefab4e6e44e61a857.
Alex Brachet [Thu, 27 Oct 2022 06:23:33 +0000 (06:23 +0000)]
[libc] Implement getopt
Differential Revision: https://reviews.llvm.org/D133487
Siva Chandra [Thu, 27 Oct 2022 05:52:53 +0000 (22:52 -0700)]
[libc] Cleanup stale documentation.
Ian Anderson [Thu, 6 Oct 2022 00:15:02 +0000 (17:15 -0700)]
[libunwind] Add module maps for libunwind
Add module maps for the libunwind headers. unwind_arm_ehabi.h and unwind_itanium.h aren't covered because they don't get installed on all platforms.
Reviewed By: #libunwind, MaskRay
Differential Revision: https://reviews.llvm.org/D135345
wangpc [Thu, 27 Oct 2022 05:35:48 +0000 (13:35 +0800)]
[RISCV][NFC] Remove ISel of SPLAT_VECTOR
Since we have converted SPLAT_VECTOR to VMV_V_X_VL
or VFMV_V_F_VL in RISCVDAGToDAGISel::PreprocessISelDAG().
Reviewed By: craig.topper
Differential Revision: https://reviews.llvm.org/D136814
Sameer Sahasrabuddhe [Thu, 27 Oct 2022 05:15:29 +0000 (10:45 +0530)]
[NFC] [AAPointerInfo] OffsetAndSize is no longer an std::pair
The struct OffsetAndSize is a simple tuple of two int64_t. Treating it as a
derived class of std::pair has no special benefit, but it makes the code
verbose since we need get/set functions that avoid using "first" and "second" in
client code. Eliminating the std::pair makes this more readable.
Reviewed By: jdoerfert
Differential Revision: https://reviews.llvm.org/D136745
Jordan Rupprecht [Thu, 27 Oct 2022 05:24:49 +0000 (22:24 -0700)]
[Bazel][llvm-debuginfo-analyzer] Add deps for DebugInfoLogicalView after
4f06d46f465c
Luca Di Sera [Thu, 27 Oct 2022 04:42:35 +0000 (06:42 +0200)]
Add clang_CXXMethod_isCopyAssignmentOperator to libclang
The new method is a wrapper of `CXXMethodDecl::isCopyAssignmentOperator` and
can be used to recognized copy-assignment operators in libclang.
An export for the method, together with its documentation, was added to
"clang/include/clang-c/Index.h" with an implementation provided in
"clang/tools/libclang/CIndex.cpp". The implementation was based on
similar `clang_CXXMethod.*` implementations, following the same
structure but calling `CXXMethodDecl::isCopyAssignmentOperator` for its
main logic.
The new symbol was further added to "clang/tools/libclang/libclang.map"
to be exported, under the LLVM16 tag.
"clang/tools/c-index-test/c-index-test.c" was modified to print a
specific tag, "(copy-assignment operator)", for cursors that are
recognized by `clang_CXXMethod_isCopyAssignmentOperator`.
A new regression test file,
"clang/test/Index/copy-assignment-operator.cpp", was added to ensure
that the correct constructs were recognized or not by the new function.
The "clang/test/Index/get-cursor.cpp" regression test file was updated
as it was affected by the new "(copy-assignment operator)" tag.
A binding for the new function was added to libclang's python's
bindings, in "clang/bindings/python/clang/cindex.py", adding a new
method for `Cursor`, `is_copy_assignment_operator_method`.
The current release note, `clang/docs/ReleaseNotes.rst`, was modified to
report the new addition under the "libclang" section.
Reviewed By: aaron.ballman
Differential Revision: https://reviews.llvm.org/D136604
Siva Chandra Reddy [Thu, 27 Oct 2022 00:22:20 +0000 (17:22 -0700)]
[libc] Add a doc about the libc overlay mode.
Reviewed By: jeffbailey
Differential Revision: https://reviews.llvm.org/D136810
Carlos Alberto Enciso [Wed, 26 Oct 2022 18:42:20 +0000 (19:42 +0100)]
[llvm-debuginfo-analyzer] (08/09) - ELF Reader
llvm-debuginfo-analyzer is a command line tool that processes debug
info contained in a binary file and produces a debug information
format agnostic “Logical View”, which is a high-level semantic
representation of the debug info, independent of the low-level
format.
The code has been divided into the following patches:
1) Interval tree
2) Driver and documentation
3) Logical elements
4) Locations and ranges
5) Select elements
6) Warning and internal options
7) Compare elements
8) ELF Reader
9) CodeView Reader
Full details:
https://discourse.llvm.org/t/llvm-dev-rfc-llvm-dva-debug-information-visual-analyzer/62570
This patch:
This is a high level summary of the changes in this patch.
ELF Reader
- Support for ELF/DWARF.
LVBinaryReader, LVELFReader
Reviewed By: psamolysov, probinson
Differential Revision: https://reviews.llvm.org/D125783
Matheus Izvekov [Sun, 23 Oct 2022 09:37:20 +0000 (11:37 +0200)]
[clang] Instantiate concepts with sugared template arguments
Since we don't unique specializations for concepts, we can just instantiate
them with the sugared template arguments, at negligible cost.
If we don't track their specializations, we can't resugar them later
anyway, and that would be more expensive than just instantiating them
sugared in the first place since it would require an additional pass.
Signed-off-by: Matheus Izvekov <mizvekov@gmail.com>
Differential Revision: https://reviews.llvm.org/D136566
Matheus Izvekov [Sun, 23 Oct 2022 14:57:12 +0000 (16:57 +0200)]
[clang] Instantiate alias templates with sugar
This makes use of the changes introduced in D134604, in order to
instantiate alias templates witn a final sugared substitution.
This comes at no additional relevant cost.
Since we don't track / unique them in specializations, we wouldn't be
able to resugar them later anyway.
Signed-off-by: Matheus Izvekov <mizvekov@gmail.com>
Differential Revision: https://reviews.llvm.org/D136565
Matheus Izvekov [Sun, 23 Oct 2022 11:41:57 +0000 (13:41 +0200)]
[clang] Instantiate NTTPs and template default arguments with sugar
This makes use of the changes introduced in D134604, in order to
instantiate non-type template parameters and default template arguments
with a final sugared substitution.
This comes at no additional relevant cost.
Since we don't track / unique them in specializations, we wouldn't be
able to resugar them later anyway.
Signed-off-by: Matheus Izvekov <mizvekov@gmail.com>
Differential Revision: https://reviews.llvm.org/D136564
Matheus Izvekov [Sun, 25 Sep 2022 15:18:39 +0000 (17:18 +0200)]
[clang] Implement sugared substitution changes to infrastructure
Implements the changes required to perform substitution with
non-canonical template arguments, and to 'finalize' them
by not placing 'Subst' nodes.
A finalized substitution means we won't resugar them later,
because these templates themselves were eagerly substituted
with the intended arguments at the point of use. We may still
resugar other templates used within those, though.
This patch does not actually implement any uses of this
functionality, those will be added in subsequent patches,
so expect no changes to existing tests.
Signed-off-by: Matheus Izvekov <mizvekov@gmail.com>
Differential Revision: https://reviews.llvm.org/D134604
wlei [Mon, 24 Oct 2022 17:48:50 +0000 (10:48 -0700)]
[SampleFDO] Compute and report profile staleness metrics
When a profile is stale and profile mismatch could happen, the mismatched samples are discarded, so we'd like to compute the mismatch metrics to quantify how stale the profile is, which will suggest user to refresh the profile if the number is high.
Two sets of metrics are introduced here:
- (Num_of_mismatched_funchash/Total_profiled_funchash), (Samples_of_mismached_func_hash / Samples_of_profiled_function) : Here it leverages the FunctionSamples's checksums attribute which is a feature of pseudo probe. When the source code CFG changes, the function checksums will be different, later sample loader will discard the whole functions' samples, this metrics can show the percentage of samples are discarded due to this.
- (Num_of_mismatched_callsite/Total_profiled_callsite), (Samples_of_mismached_callsite / Samples_of_profiled_callsite) : This shows how many mismatching for the callsite location as callsite location mismatch will affect the inlining which is highly correlated with the performance. It goes through all the callsite location in the IR and profile, use the call target name to match, report the num of samples in the profile that doesn't match a IR callsite.
This is implemented in a new class(SampleProfileMatcher) and under a switch("--report-profile-staleness"), we plan to extend it with a fuzzy profile matching feature in the future.
Reviewed By: hoy, wenlei, davidxl
Differential Revision: https://reviews.llvm.org/D136627
Matheus Izvekov [Sun, 23 Oct 2022 11:38:39 +0000 (13:38 +0200)]
[clang] Perform sugared substitution of builtin templates
Since these are much like template type aliases, where we don't
track a specialization for them and just substitute them eagerly,
we can't resugar them anyway, and there is no relevant cost in just
performing a finalizing sugared substitution.
Signed-off-by: Matheus Izvekov <mizvekov@gmail.com>
Differential Revision: https://reviews.llvm.org/D136563
Matheus Izvekov [Mon, 5 Sep 2022 19:57:37 +0000 (21:57 +0200)]
[clang] Changes to produce sugared converted template arguments
Makes CheckTemplateArgumentList and the template deduction functions
produce a sugared converted argument list in addition to the canonical one.
This is mostly NFC except that we hook this up to a few diagnostics in
SemaOverload.
The infrastructure here will be used in subsequent patches
where we perform a finalized sugared substitution for entities
which we do not unique per specializations on canonical arguments,
and later on will be used for template specialization resugaring.
Signed-off-by: Matheus Izvekov <mizvekov@gmail.com>
Differential Revision: https://reviews.llvm.org/D133874
Richard Smith [Sun, 11 Oct 2020 22:57:52 +0000 (15:57 -0700)]
[clang] Include the type of a pointer or reference non-type template parameter in its notion of template argument identity.
We already did this for all the other kinds of non-type template
argument.
Note: Based on earlier reverted patch from zygoloid.
Differential Revision: https://reviews.llvm.org/D136803
Mahesh Ravishankar [Thu, 27 Oct 2022 03:12:40 +0000 (03:12 +0000)]
[mlir][Tensor] Change `createDimValues` to return a list of `OpFoldResult`s.
Reviewed By: nicolasvasilache, hanchung, ThomasRaoux
Differential Revision: https://reviews.llvm.org/D136733
Wanyi Ye [Thu, 27 Oct 2022 02:49:03 +0000 (19:49 -0700)]
Revert "[lldb-vscode] Send Statistics Dump in terminated event"
This reverts commit
c8a26f8c6de30dbd814546f02e4c89a4fcb2b4ef.
Returning full statistics result in "terminated" (DAP) event could result in delay in the UI when debugging from VSCode.
If the program run to exit and debug session terminates. The DAP event order will be: exited event --> terminateCommands --> terminated event --> disconnect request --> disconnect response.
The debugging UI in VSCode corresponds to "disconnect" request/response. If the terminated event is taking long to process, the IDE won't quit debugging UI until it's done.
For big binary (tested example has 29 GB of debug info), it can cause ~15s delay in terminated event itself. And the UI could take ~20s to reflect.
This may cause confusion in debug sessions. We should persuit a more lightweight return or other solution to return such info.
chenglin.bi [Thu, 27 Oct 2022 02:04:57 +0000 (10:04 +0800)]
[AArch64] Adjust operand sequence for Add+Sub to combine more inline shift
((X >> C) - Y) + Z --> (Z - Y) + (X >> C)
Fix AArch part: #55714
Reviewed By: dmgreen
Differential Revision: https://reviews.llvm.org/D136158
Paul Kirth [Fri, 21 Oct 2022 18:22:03 +0000 (18:22 +0000)]
[CodeGen] Improve large stack frame diagnostic
Add statistics about how much memory is used, in variables, spills, and
unsafestack.
Issue #58168 describes some of the difficulty diagnosing stack size issues
identified by -Wframe-larger-than. D135488 addresses some of those issues by
giving developers a method to view the stack layout and thereby understand
where and how stack memory is used.
However, that solution requires an additional pass, when a short summary about
how the compiler has allocated stack memory can inform developers about where
they should investigate. When they need the complete context, D135488 can
provide them with a more comprehensive set of diagnostics.
Reviewed By: nickdesaulniers
Differential Revision: https://reviews.llvm.org/D136484
Roman Lebedev [Thu, 27 Oct 2022 00:08:19 +0000 (03:08 +0300)]
[NFC][PhaseOrdering] Add new test for SROA misplacement
Katherine Rasmussen [Tue, 25 Oct 2022 23:26:59 +0000 (16:26 -0700)]
[flang] Add atomic_fetch_and to list of intrinsics
Add the atomic subroutine, atomic_fetch_and, to the list of
intrinsic subroutines, add its last dummy argument to a check
for coindexed-object, and update test.
Reviewed By: jeanPerier
Differential Revision: https://reviews.llvm.org/D136720
Dan McGregor [Wed, 26 Oct 2022 23:52:32 +0000 (16:52 -0700)]
[Driver] Allow target override containing . in executable name
The gcc compatible driver has support for overriding the default
target based on the driver's executable name, for instance
x86_64-pc-linux-gnu-clang will set the default target to
x86_64-pc-linux-gnu.
Previously, this failed when the target contained a minor version, for
example x86_64-pc-freebsd13.1, so instead of finding the file's
stem, use the whole file name, but strip off any '.exe' from the tail.
Reviewed By: MaskRay
Differential Revision: https://reviews.llvm.org/D135284
Jonas Devlieghere [Wed, 26 Oct 2022 23:38:09 +0000 (16:38 -0700)]
[dwarfdump] Fix bogus incompatible tag warning
Because DW_TAG_LLVM_ptrauth_type is not marked as a type, dwarfdump
currently emits a spurious error: DIE has DW_AT_type with incompatible
tag DW_TAG_LLVM_ptrauth_type. This patch fixes that and adds a test.
Mehdi Amini [Wed, 26 Oct 2022 23:22:44 +0000 (23:22 +0000)]
Fix MLIR Build with some version of GCC
mlir/lib/Conversion/ArithToLLVM/ArithToLLVM.cpp:67:30: error: use 'template' keyword to treat 'dyn_cast_or_null' as a dependent template name
.dyn_cast_or_null<arith::FastMathFlagsAttr>();
^
template
Michael Kruse [Wed, 26 Oct 2022 22:24:43 +0000 (17:24 -0500)]
[Polly] Add support for -polly-enable-mse with NPM.
The MaximalStaticExpansionPass was already ported to the NPM in
02f640672e2875c4e7578366bb2e22582548d7c1. Allow adding it to the default
NPM pass builder pipeline using -polly-enable-mse.
Michael Kruse [Wed, 26 Oct 2022 21:50:50 +0000 (16:50 -0500)]
[Polly] Add support for -polly-export with NPM.
The JSONExporter pass was already ported to the NPM, the pass builder
jsut had to add it to the pass pipeline when requested.
David Blaikie [Fri, 28 Jan 2022 22:22:21 +0000 (14:22 -0800)]
Add a warning for not packing non-POD members in packed structs
Differential Revision: https://reviews.llvm.org/D118511
Steven Wu [Wed, 26 Oct 2022 22:13:00 +0000 (15:13 -0700)]
[LTO] Fix lto_module_create_in_codegen_context return value on error
According to the documentation, lto_module_create_in_codegen_context
should return NULL on error but currently it is accidentally return
error_code. Since this is a bug fix and it seems to be a one-off bug
that only affects this API, there is no need to bump API version.
rdar://
101505192
Reviewed By: pete
Differential Revision: https://reviews.llvm.org/D136769
Tue Ly [Wed, 26 Oct 2022 02:10:32 +0000 (22:10 -0400)]
[libc] Add a testing macro for MPFR matchers skipping `explainError` calls.
Adding `EXPECT_MPFR_MATCH_ROUNDING_SILENTLY` macro that does not call
`explainError` when the tests fail. This is useful to check the passing or
failing rates, such as hitting percentages of fast passes in math
implementations.
Reviewed By: michaelrj, sivachandra
Differential Revision: https://reviews.llvm.org/D136731
David Blaikie [Sat, 5 Feb 2022 04:06:13 +0000 (20:06 -0800)]
Extend the C++03 definition of POD to include defaulted functions
The AST/conditionally-trivial-smfs tests look a bit questionable, but
are consistent with GCC's POD-ness, at least as far as packing is
concerned: https://godbolt.org/z/36nqPMbKM
(questionable because it looks like the type would be non-copyable, so
how could it be pod? But the calling convention/pass by value seems to
work correctly (local testing verifies that this behavior is preserved
even with this patch: https://godbolt.org/z/3Pa89zsv6 ))
Differential Revision: https://reviews.llvm.org/D119051
Emilio Cota [Wed, 26 Oct 2022 21:45:25 +0000 (17:45 -0400)]
[bazel][mlir][arith] build fixes for arith fastmath flags
David Blaikie [Wed, 26 Oct 2022 21:37:25 +0000 (21:37 +0000)]
[ADT] Add deduction guide for llvm::Optional
Added to address some uses of implicit CTAD added in clang recently.
Craig Topper [Wed, 26 Oct 2022 21:23:51 +0000 (14:23 -0700)]
[RISCV] Inline scalar ceil/floor/trunc/rint/round/roundeven.
This avoids the call overhead as well as the the save/restore of
fflags and the snan handling in the libm function.
The save/restore of fflags and snan handling are needed to be
correct for -ftrapping-math. I think we can ignore them in the
default environment.
The inline sequence will generate an invalid exception for nan
and an inexact exception if fractional bits are discarded.
I've used a custom inserter to explicitly create the control flow
around the float->int->float conversion.
We can probably avoid the final fsgnj after the conversion for
no signed zeros FMF, but I'll leave that for future work.
Note the comparison constant is slightly different than glibc uses.
They use 1<<53 for double, I'm using 1<<52. I believe either are valid.
Numbers >= 1<<52 can't have any fractional bits. It's ok to do the
float->int->float conversion on numbers between 1<<53 and 1<<52 since
they will all fit in 64. We only have a problem if the double can't fit
in i64
Reviewed By: reames
Differential Revision: https://reviews.llvm.org/D136508
Quentin Colombet [Fri, 14 Oct 2022 21:00:55 +0000 (21:00 +0000)]
[mlir][MemRefToLLVM] Lower extract_strided_metadata
The `extract_strided_metadata` operation literally breaks down a memory
descriptor into its different components.
Teach the MemRefToLLVM conversion framework this fact.
Differential Revision: https://reviews.llvm.org/D136304
Nick Desaulniers [Wed, 26 Oct 2022 21:24:08 +0000 (14:24 -0700)]
git clang-format HEAD~
for
commit
ad78ce44bb47 ("[clang][Toolchains][Gnu] pass -gdwarf-* through to
assembler")
Sanjay Patel [Wed, 26 Oct 2022 18:34:42 +0000 (14:34 -0400)]
[InstCombine] add tests for demanded bits of sub; NFC
Craig Topper [Wed, 26 Oct 2022 19:09:39 +0000 (12:09 -0700)]
[RISCV] Add tests for fixed vector sshl_sat/ushl_sat. NFC
Siva Chandra [Wed, 26 Oct 2022 21:02:52 +0000 (14:02 -0700)]
[libc] Enable more entrypoints on aarch64.
Guozhi Wei [Wed, 26 Oct 2022 20:57:49 +0000 (20:57 +0000)]
[dexter-tests] Add attribute optnone to main function
The test case optnone-simple-functions.cpp is expected to be compiled
unoptimized even under -O2 because of attribute optnone. But this attribute is
missed for main function, and caused the fail in
https://lab.llvm.org/buildbot/#/builders/217/builds/14046 when it triggered
optimizations. This patch fixes that by adding attribute optnone to main
function.
Differential Revision: https://reviews.llvm.org/D136778
Sami Tolvanen [Mon, 19 Sep 2022 23:06:18 +0000 (23:06 +0000)]
[Clang][Sema] Add -Wcast-function-type-strict
Clang supports indirect call Control-Flow Integrity (CFI) sanitizers
(e.g. -fsanitize=cfi-icall), which enforce an exact type match between
a function pointer and the target function. Unfortunately, Clang
doesn't provide diagnostics that would help developers avoid function
type casts that lead to runtime CFI failures. -Wcast-function-type,
while helpful, only warns about ABI incompatibility, which isn't
sufficient with CFI.
Add -Wcast-function-type-strict, which checks for a strict type
compatibility in function type casts and helps warn about casts that
can potentially lead to CFI failures.
Reviewed By: nickdesaulniers, aaron.ballman
Differential Revision: https://reviews.llvm.org/D134831
Jonas Devlieghere [Wed, 26 Oct 2022 20:06:22 +0000 (13:06 -0700)]
[dexter] Temporary disable optnone-simple-functions
D136396 broke optnone-simple-functions. Temporary disabling the test to
unblock the bot until the Sony folks can have a look.
https://green.lab.llvm.org/green/view/LLDB/job/lldb-cmake/47878/
Félix Cloutier [Wed, 26 Oct 2022 19:53:14 +0000 (12:53 -0700)]
Revert "[NFC] Make format() more amenable to format attributes"
This reverts commit
fb1e90ef07fec0d64a05c0b6d41117a5ea3e8344.
Ben Langmuir [Tue, 25 Oct 2022 22:12:24 +0000 (15:12 -0700)]
[clang] Move getenv call for SOURCE_DATE_EPOCH out of frontend NFC
Move the check for SOURCE_DATE_EPOCH to the driver and use a cc1 option
to pass it to the frontend. This avoids hidden state in the cc1
invocation and makes this env variable behave more like other env
variables that clang handles in the driver.
Differential Revision: https://reviews.llvm.org/D136717
Johannes Doerfert [Wed, 26 Oct 2022 19:31:33 +0000 (12:31 -0700)]
[OpenMP][FIX] Adjust to clang tests after D136740
Nico Weber [Wed, 26 Oct 2022 19:30:10 +0000 (15:30 -0400)]
[gn build] port
cb0eb9d8dd5 (lldb test libc++ refs)
raghavmedicherla [Wed, 26 Oct 2022 19:08:10 +0000 (15:08 -0400)]
[NFC][Offload Bundler] Formatting clang offloadbundler source file.
Differential Revision: https://reviews.llvm.org/D136715
Félix Cloutier [Fri, 9 Sep 2022 21:08:19 +0000 (14:08 -0700)]
[NFC] Make format() more amenable to format attributes
This change modifies the implementation of the format() function
so that vendor forks committed to building with compilers that
support __attribute__((format)) on non-variadic functions can
check the format() function with it.
Reviewed By: ahatanak
Differential Revision: https://reviews.llvm.org/D132413
rdar://
84571523
Jordan Rupprecht [Wed, 26 Oct 2022 19:07:22 +0000 (12:07 -0700)]
[test] Fix LLDB tests with just-built libcxx when using a target directory.
In certain configurations, libc++ headers all exist in the same directory, and libc++ binaries exist in the same directory as lldb libs. When `LLVM_ENABLE_PER_TARGET_RUNTIME_DIR` is enabled (*and* the host is not Apple, which is why I assume this wasn't caught by others?), this is not the case: most headers will exist in the usual `include/c++/v1` directory, but `__config_site` exists in `include/$TRIPLE/c++/v1`. Likewise, the libc++.so binary exists in `lib/$TRIPLE/`, not `lib/` (where LLDB libraries reside).
This also adds the just-built-libcxx functionality to the lldb-dotest tool.
The `LIBCXX_` cmake config is borrowed from `libcxx/CMakeLists.txt`. I could not figure out a way to share the cmake config; ideally we would reuse the same config instead of copy/paste.
Reviewed By: JDevlieghere, fdeazeve
Differential Revision: https://reviews.llvm.org/D133973
Jeremy Furtek [Wed, 26 Oct 2022 18:07:20 +0000 (11:07 -0700)]
[mlir][arith] Initial support for fastmath flag attributes in the Arithmetic dialect (v2)
This diff adds initial (partial) support for "fastmath" attributes for floating
point operations in the arithmetic dialect. The "fastmath" attributes are
implemented using a default-valued bit enum. The defined flags currently mirror
the fastmath flags in the LLVM dialect (and in LLVM itself). Extending the
set of flags (if necessary) is left as a future task.
In this diff:
- Definition of FastMathAttr as a custom attribute in the Arithmetic dialect
that inherits from the EnumAttr class.
- Definition of ArithFastMathInterface, which is an interface that is
implemented by operations that have an arith::fastmath attribute.
- Declaration of a default-valued fastmath attribute for unary and (some) binary
floating point operations in the Arithmetic dialect.
- Conversion code to lower arithmetic fastmath flags to LLVM fastmath flags
NOT in this diff (but planned or currently in progress):
- Documentation of flag meanings
- Addition of FastMathAttr attributes to other dialects that might lower to the
Arithmetic dialect (e.g. Math and Complex)
- Folding/rewrite implementations that are enabled by fastmath flags
- Specification of fastmath values from Python bindings (pending other in-
progress diffs)
Reviewed By: mehdi_amini, vzakhari
Differential Revision: https://reviews.llvm.org/D126305
Jakob Johnson [Mon, 24 Oct 2022 14:01:40 +0000 (07:01 -0700)]
[trace][intelpt] Fix multi CPU decoding TSC assertion error
Occasionally the assertion that enforces increasing TSC values in `DecodedThread::NotifyTsc`
would get tripped during large multi CPU trace decoding.
The root cause of this issue was an assumption that all the data of a
PSB will fit within the start,end TSC of the "owning"
`ThreadContinuousExecution`. After investigating, this is not the case
because PSBs can have multiple TSCs.
This diff works around this issue by introducing a TSC upper bound for
each `PSBBlockDecoder`. This fixes the assertion failure by simply
"dropping" the remaining data of PSB whenever the TSC upper bound is
exceeded during decoding.
Future work will do a larger refactor of the multi CPU decoding to
remove the dependencies on this incorrect assumption so that PSB blocks
that span multiple `ThreadContinuousExecutions` are correctly handled.
correctly
Test Plan:
Differential Revision: https://reviews.llvm.org/D136610
Katherine Rasmussen [Wed, 19 Oct 2022 16:16:28 +0000 (10:16 -0600)]
[flang] Add semantics tests for lock-stmt
Add three tests for lock-stmt. The first includes
standard-conforming statements, the second includes
non-standard-conforming statements because of errors where
something unexpected occurs, such as a missing lock-variable,
and the third includes non-standard-conforming statements
because of semantic errors, such as type or rank mismatches.
Reviewed By: rouson
Differential Revision: https://reviews.llvm.org/D136628
Michael Jones [Tue, 25 Oct 2022 17:10:00 +0000 (10:10 -0700)]
[libc] tighten strtofloat cutoffs
When a number for strtofloat has an exponent that's too big or small, it
doesn't need to be calculated precisely since it is guaranteed to be
either INF or 0.0. This tightens those cutoffs to improve performance.
Reviewed By: sivachandra
Differential Revision: https://reviews.llvm.org/D136699
Chia-hung Duan [Wed, 26 Oct 2022 00:26:14 +0000 (00:26 +0000)]
[scudo] Fix size of MaxNumCachedHint Trusty Config
Also add a test for TrustyConfig to ensure it'll be awared of any scudo
configuration change.
Differential Revision: https://reviews.llvm.org/D136732
Slava Zakharin [Thu, 20 Oct 2022 20:46:49 +0000 (13:46 -0700)]
[flang][runtime] New APIs for copyin/copyout of non-contiguous objects.
The intention is to use these APIs for copyin/copyout of subprogram
arguments at the call sites. Currently, Flang generates loop nests
to do this, and in some corner cases this results in very long
compilation times due to LLVM loop optimizations.
For example, Flang produces 25245 loops for 521.wrf/module_dm.f90.
If we extract the copyin/copyout loops into runtime, Flang will only
produce 207 loops, and the compilation time may reduce by 47x.
Given that the copyin/copyout loop nests can not be fused with other
loop nests, extracting them into runtime functions should not reduce
performance if the runtime optimizes the leading contiguous dimension
copies.
The implementation will come in separate patches.
Differential Revision: https://reviews.llvm.org/D136378
James Y Knight [Mon, 19 Sep 2022 20:17:18 +0000 (16:17 -0400)]
[MIPS] Fix useDeprecatedPositionallyEncodedOperands errors.
This is a follow-on to https://reviews.llvm.org/D134073.
The number of MIPS16 changes here is a bit surprising. Many of the
fields with mismatched names were NOT previously choosing the correct
argument positionally, but instead doing something completely wrong
(e.g. it would encode a register where an immediate was expected).
But, machine-code generation for MIPS16 has never actually functioned.
It's also fully untested, thus, the MIPS16 changes, despite changing
behavior, breaks (and fixes) zero tests. This change does not fix
MIPS16 output, but it ought to be at least incrementally less broken.
Outside MIPS16, I believe the only functional change is to the 'ginvi'
instruction: it was previously encoding garbage into a field which was
specified to be '00'. Fortunately, it was covered by tests -- and the
tests were testing the incorrect behavior. So, fixed.
Differential Revision: https://reviews.llvm.org/D134220
James Y Knight [Mon, 13 Jun 2022 04:14:03 +0000 (04:14 +0000)]
[Sparc] Fix useDeprecatedPositionallyEncodedOperands errors.
This is a follow-on to https://reviews.llvm.org/D134073.
It renames a few fields to have consistent names, as well as renaming
operands to match the field names.
Behavior is unchanged by this cleanup. (The only generated code change
is for the disassembler for LDSTUB/LDSTUBA, but in both old and new
versions, it fails to add enough operands, and thus triggers a runtime
abort. I will address that bug in a future commit.)
Differential Revision: https://reviews.llvm.org/D134201
James Y Knight [Mon, 26 Sep 2022 21:56:07 +0000 (17:56 -0400)]
Update "Writing a Backend" doc to use named operand matching.
This brings it in line with recommended practice after the
introduction of sub-operand naming in
a538d1f13a13, and the
deprecation of positional argument matching in
5351878ba196.
Sanjay Patel [Wed, 26 Oct 2022 16:31:57 +0000 (12:31 -0400)]
[InstCombine] add tests for demanded bits of sub; NFC
Sanjay Patel [Wed, 26 Oct 2022 15:53:49 +0000 (11:53 -0400)]
[SDAG] avoid vector extract/insert around binop
scalar-to-vector (scalar binop (extractelt V, Idx), C) --> shuffle (vector binop V, C'), {Idx, -1, -1...}
We generally try to avoid ad-hoc vectorization in SDAG,
but the motivating case from issue #39482 escapes our
normal vectorization folds in IR. It seems like it should
always be a win to transform this pattern in cases where
we have the same vector type for input and output and the
target supports the vector operation. That avoids
transfers from vector to scalar and back.
In the x86 shift examples, we create the scalar-to-vector
node during legalization. I'm not sure if there's a more
general way to create the pattern for testing. (If so, I
could add tests for other targets.)
Differential Revision: https://reviews.llvm.org/D136713
Matt Arsenault [Wed, 26 Oct 2022 15:37:56 +0000 (08:37 -0700)]
ConstantFold: Reduce code duplication for checking commuted compare
Fangrui Song [Wed, 26 Oct 2022 17:58:21 +0000 (10:58 -0700)]
[Driver] Avoid unsafe Twine local variable after D136707
Aaron Ballman [Wed, 26 Oct 2022 17:53:13 +0000 (13:53 -0400)]
Add tests for C11 DRs and update the status page
This gets a start on testing how we're doing for C11 DRs
Jamie Schmeiser [Wed, 26 Oct 2022 17:50:11 +0000 (13:50 -0400)]
[NFC] Introduce range based singleton searches for loop queries.
Summary:
Several loop queries look for a singleton by finding all instances and then
returning whether there is 1 instance or not. This can be improved by
stopping the search after 2 have been found. Introduce generic range
based singleton searches that stop after finding a second value
and use them for these loop queries.
There is no intended functional change other than improved compile-time
efficiency.
Author: Jamie Schmeiser <schmeise@ca.ibm.com>
Reviewed By: Meinersbur (Michael Kruse)
Differential Revision: https://reviews.llvm.org/D136261
Nick Desaulniers [Wed, 26 Oct 2022 17:39:08 +0000 (10:39 -0700)]
[clang][Toolchains][Gnu] pass -gdwarf-* through to assembler
We've been working around this for a long time in the Linux kernel; we
bend over backwards to continue to support CC=clang (w/
-fno-integrated-as) for architectures where clang can't yet be used to
assemble the kernel's assembler sources. Supporting debug info for the
combination of CC=clang w/ GNU binutils as "GAS" has been painful.
Fix this in clang so that we can work towards dropping complexity in the
Linux kernel's build system, Kbuild, for supporting this combination of
tools.
GAS added support for -gdwarf-{3|4|5} in 2020 2.35 release via
commit
31bf18645d98 ("Add support for --dwarf-[3|4|5] to assembler command line.")
Refactor code to share logic between integrated-as and non-integrated-as
for determining the implicit default. This change will now always
explicitly pass a -gdwarf-* flag to the GNU assembler when -g is
specified.
Reviewed By: MaskRay
Differential Revision: https://reviews.llvm.org/D136707
Johannes Rudolf Doerfert [Wed, 26 Oct 2022 05:50:12 +0000 (22:50 -0700)]
[OpenMP][FIX] Do not add custom state machine eagerly in LTO runs
If we run LTO optimization we migth end up introducing a custom state machine
and later transforming the region into SPMD. This is a problem. While a follow
up will introduce a check for the SPMD conversion, this already prevents the
eager custom state machine generation. Only if the kernel init function is
defined, rather then declared, we will emit a custom state machine. SPMD-zation
can happen eagerly though. Tests are adjusted via a weak definition. The LTO
test was added to verify this works as expected.
Differential Revision: https://reviews.llvm.org/D136740
Nico Weber [Fri, 14 Oct 2022 19:24:27 +0000 (15:24 -0400)]
[lldb] Fix a -Wdeprecated-declarations warning
Fixes:
../../lldb/source/Symbol/LocateSymbolFileMacOSX.cpp:633:26:
warning: 'CFPropertyListCreateFromXMLData' is deprecated:
first deprecated in macOS 10.10 -
Use CFPropertyListCreateWithData instead.
[-Wdeprecated-declarations]
(CFDictionaryRef)::CFPropertyListCreateFromXMLData(
^
Hopefully no behavior change.
Differential Revision: https://reviews.llvm.org/D135983
Nico Weber [Tue, 25 Oct 2022 17:22:23 +0000 (13:22 -0400)]
clang: Add a cmake toggle to disable libclang's libxml2 dependency
By default, libclang will still depend on libxml2 according to
LLVM_ENABLE_LIBXML2, but with this it's possible to make libclang
not depend on libxml2 even though LLVM does.
The motivation is that libclang uses a bigger API surface of libxml2
than LLVM, and we're statically linking a very minimal build of
libxml2 in our LLVM/clang distribution.
Differential Revision: https://reviews.llvm.org/D136700
Kiran Chandramohan [Wed, 26 Oct 2022 17:05:34 +0000 (17:05 +0000)]
[Flang] Add MLIRComplexToLLVM, MLIRComplexToStandard in link libs
Reviewed By: vzakhari
Differential Revision: https://reviews.llvm.org/D136773
Alex Brachet [Wed, 26 Oct 2022 17:13:05 +0000 (17:13 +0000)]
Reland "[PGO] Make emitted symbols hidden"
This was reverted because it was breaking when targeting Darwin which
tried to export these symbols which are now hidden. It should be safe
to just stop attempting to export these symbols in the clang driver,
though Apple folks will need to change their TAPI allow list described
in the commit where these symbols were originally exported
https://github.com/llvm/llvm-project/commit/
f5380185623be243ba0f1b18d4bd594ac5cc7163
Then reverted again because it broke tests on MacOS, they should be
fixed now.
Bug: https://github.com/llvm/llvm-project/issues/58265
Differential Revision: https://reviews.llvm.org/D135340
Piyou Chen [Wed, 26 Oct 2022 16:32:43 +0000 (09:32 -0700)]
[RISCV] add svinval extension
1. Add the svinval extension support
2. Add the svinval Predicates for its instruction
Note: the svinval instructions defined in https://reviews.llvm.org/D117654
Reviewed By: reames
Differential Revision: https://reviews.llvm.org/D136571
Craig Topper [Wed, 26 Oct 2022 16:26:58 +0000 (09:26 -0700)]
[RISCV] Use vslide1down for i64 insertelt on RV32.
Instead of using vslide1up, use vslide1down and build the other
direction. This avoids the overlap constraint early clobber of
vslide1up.
Reviewed By: reames
Differential Revision: https://reviews.llvm.org/D136735
Yashwant Singh [Wed, 26 Oct 2022 16:33:19 +0000 (22:03 +0530)]
[AMDGPU][test] precommiting tests for D136663
More tests for si-peephole-sdwa pass
Momchil Velikov [Wed, 26 Oct 2022 16:25:18 +0000 (17:25 +0100)]
[FuncSpec] Add a testcase for the treatment of constant and unused arguments
Increase test coverage - check that functions are not specialised on
constant or unused arguments.
Reviewed By: SjoerdMeijer
Differential Revision: https://reviews.llvm.org/D136184
bixia1 [Wed, 26 Oct 2022 15:42:44 +0000 (08:42 -0700)]
[mlir][sparse] Extend sparse_tensor.push_back to allow push_back a value n times.
Reviewed By: aartbik, Peiming
Differential Revision: https://reviews.llvm.org/D136653
Michael Maitland [Fri, 16 Sep 2022 19:44:37 +0000 (12:44 -0700)]
[TableGen] Add log bang operator
This patch adds base 2 logarithm that returns integer result. I initially wanted to name it `!log2`,
but numbers are not permitted in the name. The documentation makes sure to clarify that it is
base 2 since it is not explicit in the operator name.
Differential Revision: https://reviews.llvm.org/D134068
Mark de Wever [Tue, 25 Oct 2022 18:42:10 +0000 (20:42 +0200)]
[libc++][test] Don't use _LIBCPP macros.
This was discovered by @ldionne.
Reviewed By: #libc, ldionne
Differential Revision: https://reviews.llvm.org/D136709
Gabor Marton [Wed, 26 Oct 2022 15:27:16 +0000 (17:27 +0200)]
[clang][dataflow] Remove unused 'Analysis' field from 'TerminatorVisitor'
This is to silence the warning: private field 'Analysis' is not used
Kristóf Umann [Wed, 5 Oct 2022 16:11:12 +0000 (18:11 +0200)]
[analyzer] Initialize regions returned by CXXNew to undefined
Discourse mail:
https://discourse.llvm.org/t/analyzer-why-do-we-suck-at-modeling-c-dynamic-memory/65667
malloc() returns a piece of uninitialized dynamic memory. We were (almost)
always able to model this behaviour. Its C++ counterpart, operator new is a
lot more complex, because it allows for initialization, the most complicated of which is the usage of constructors.
We gradually became better in modeling constructors, but for some reason, most
likely for reasons lost in history, we never actually modeled the case when the
memory returned by operator new was just simply uninitialized. This patch
(attempts) to fix this tiny little error.
Differential Revision: https://reviews.llvm.org/D135375
Sanjay Patel [Wed, 26 Oct 2022 15:01:18 +0000 (11:01 -0400)]
[SDAG] add helper for opcodes that are not speculatable
This is not quite NFC because one of the users should
now avoid the DIVREM opcodes too, but I'm not sure
how to test that.
I used the same name as an analysis function in IR
in case we want to expand this to include other
operations.
Another potential use is proposed in D136713.
Sanjay Patel [Tue, 25 Oct 2022 19:02:53 +0000 (15:02 -0400)]
[x86] add tests for extract + insert of vector shift amount; NFC
Johannes Doerfert [Wed, 26 Oct 2022 15:14:54 +0000 (08:14 -0700)]
[Docs][NFC] Update my office hour information
jackalcooper [Wed, 26 Oct 2022 15:01:07 +0000 (11:01 -0400)]
[mlir][spirv] Flip createConvertGPUToSPIRVPass mapMemorySpace default
Some down-stream libraries only have access to CAPI, setting
default value of mapMemorySpace to true will help them convert IR
to SPIR-V.
Reviewed By: antiagainst
Differential Revision: https://reviews.llvm.org/D136739
Wael Yehia [Wed, 26 Oct 2022 14:32:19 +0000 (10:32 -0400)]
Add a testcase for D136192.
Differential Revision: https://reviews.llvm.org/D136192
Gabor Marton [Fri, 14 Oct 2022 14:10:21 +0000 (16:10 +0200)]
[analyzer][StdLibraryFunctionsChecker] Add NoteTags for applied arg
constraints
In this patch I add a new NoteTag for each applied argument constraint.
This way, any other checker that reports a bug - where the applied
constraint is relevant - will display the corresponding note. With this
change we provide more information for the users to understand some
bug reports easier.
Differential Revision: https://reviews.llvm.org/D101526
Reviewed By: NoQ
Balázs Kéri [Wed, 26 Oct 2022 13:53:53 +0000 (15:53 +0200)]
[clang][ASTImporter] Remove use of ParentMapContext.
Function 'isAncestorDeclContextOf' was using 'ParentMapContext' for
looking up parent of statement nodes. There may be cases (bugs?) with
ParentMapContext when parents of specific statements are not found.
This leads to 'ASTImporter' infinite import loops when function
'hasAutoReturnTypeDeclaredInside' returns false incorrectly.
A real case was found but could not be reproduced with test code.
Use of 'ParentMapContext' is now removed and changed to a more safe
(currently) method by searching for declarations in statements
and find parent of these declarations. The new code was tested on
a number of projects and no related crash was found.
Reviewed By: martong
Differential Revision: https://reviews.llvm.org/D136684
Sam McCall [Wed, 26 Oct 2022 01:03:08 +0000 (03:03 +0200)]
[Lex] Stop allocating/deallocating MacroInfo on a linked list. NFC
This list was originally used for to make sure MacroInfo's clever memory
management got called (
1f1e4bdbf7815c), but that was
simplified in
73a29662b9bf640a and
1f1e4bdbf7815c, and there's nothing left.
Differential Revision: https://reviews.llvm.org/D136725
Anton Sidorenko [Tue, 18 Oct 2022 13:35:19 +0000 (16:35 +0300)]
[UpdateTestChecks] Sync flags in update_mir_test_checks.py with MIFlags
Some instructions are not matched by update_mir_test_checks.py because MIFlags and
regex in the script are not synchronized.
Differential Revision: https://reviews.llvm.org/D136170
LLVM GN Syncbot [Wed, 26 Oct 2022 13:25:32 +0000 (13:25 +0000)]
[gn build] Port
bb72d0dde29e
Gabor Marton [Mon, 12 Sep 2022 13:44:53 +0000 (15:44 +0200)]
[clang][dataflow] Implement transferBranch
This patch introduces `transferBranch`, which Applies the analysis
transfer function for a given edge from a CFG block of a conditional
statement.
RFC:
https://discourse.llvm.org/t/rfc-clang-dataflow-signanalysis-edgetransfer-branchtransfer/65220
Differential Revision: https://reviews.llvm.org/D133698
LLVM GN Syncbot [Wed, 26 Oct 2022 13:20:22 +0000 (13:20 +0000)]
[gn build] Port
93ce23adb548
Gabor Marton [Tue, 25 Oct 2022 08:57:39 +0000 (10:57 +0200)]
[clang][dataflow] Add initial sign analysis
This patch adds an initial implementation for sign analysis, with the
following lattice (T: top, N: negative, Z: zero, P: positive, B: bottom):
T
/ | \
N Z P
\ | /
B
The lattice is implemented with `BoolValue` properties attached to other
`Value`s.
Differential Revision: https://reviews.llvm.org/D136668
Momchil Velikov [Wed, 26 Oct 2022 12:49:18 +0000 (13:49 +0100)]
Revert "[FuncSpec] Fix specialisation based on literals"
This reverts commit
a8b0f580170089fcd555ade5565ceff0ec60f609 because
of "reverse-iteration" buildbot failure.
Momchil Velikov [Wed, 26 Oct 2022 12:48:35 +0000 (13:48 +0100)]
Revert "[FuncSpec][NFC] Refactor finding specialisation opportunities"
This reverts commit
a8853924bd3c50deebfbf993c037257ccf9805f4 due to dependency
on
a8b0f5801700
Anton Sidorenko [Thu, 20 Oct 2022 13:29:14 +0000 (16:29 +0300)]
[UpdateTestChecks] Precommit test for D136170
David Truby [Mon, 24 Oct 2022 12:42:29 +0000 (12:42 +0000)]
[flang] Use mlir complex dialect for supported operations
This patch lowers the complex operations supported by the MLIR complex
dialect to those operations rather than libm. When the math runtime flag
is set to precise, libm lowering is used instead.
Differential Revision: https://reviews.llvm.org/D135882