Commit Graph

14292 Commits

Author SHA1 Message Date
Guillaume Chatelet
bb37cab8a5 [llvm-exegesis][NFC] Update benchmark phase naming to match documentation 2023-01-06 13:40:46 +00:00
Roman Lebedev
866c587af3 [NFC][exegesis] SnippetGenerator::generateConfigurations(): don't forget to reserve() 2023-01-05 21:39:04 +03:00
Roman Lebedev
b5b79e51b4 [NFC][exegesis] BenchmarkCodeStreamer: use existing RegNameToRegNo map 2023-01-05 20:11:56 +03:00
serge-sans-paille
80d49ffe4f By-pass some ArrayRef deduction guide
clang-11 doesn't fully support them and requires an explicit
instantiation in some situation. This is fixed in (at least) clang-14
2023-01-05 17:23:41 +01:00
Matt Arsenault
a50cec5bf9 llvm-reduce: Don't delete instructions in global variable reduction
For some reason the global variable reduction was trying to delete
use instructions. This broke the verifier if the user was a terminator,
since the block now no longer has one. It doesn't make sense for this
reduction to delete the users, so just stop doing that.
2023-01-05 10:26:02 -05:00
Roman Lebedev
e0ad2af691 [exegesis] "Skip codegen" dry-run mode
While "skip measurements mode" is super useful for test coverage,
i've come to discover it's trade-offs. It still calls back-end
to actually codegen the target assembly, and that is what is taking
80%+ of the time regardless of whether or not we skip the measurements.

On the other hand, just being able to see that exegesis can come up
with a snippet to measure something, is already very useful,
and takes maybe a second for a all-opcode sweep.

Reviewed By: gchatelet

Differential Revision: https://reviews.llvm.org/D140702
2023-01-05 17:47:17 +03:00
serge-sans-paille
38818b60c5 Move from llvm::makeArrayRef to ArrayRef deduction guides - llvm/ part
Use deduction guides instead of helper functions.

The only non-automatic changes have been:

1. ArrayRef(some_uint8_pointer, 0) needs to be changed into ArrayRef(some_uint8_pointer, (size_t)0) to avoid an ambiguous call with ArrayRef((uint8_t*), (uint8_t*))
2. CVSymbol sym(makeArrayRef(symStorage)); needed to be rewritten as CVSymbol sym{ArrayRef(symStorage)}; otherwise the compiler is confused and thinks we have a (bad) function prototype. There was a few similar situation across the codebase.
3. ADL doesn't seem to work the same for deduction-guides and functions, so at some point the llvm namespace must be explicitly stated.
4. The "reference mode" of makeArrayRef(ArrayRef<T> &) that acts as no-op is not supported (a constructor cannot achieve that).

Per reviewers' comment, some useless makeArrayRef have been removed in the process.

This is a follow-up to https://reviews.llvm.org/D140896 that introduced
the deduction guides.

Differential Revision: https://reviews.llvm.org/D140955
2023-01-05 14:11:08 +01:00
Roland McGrath
9bb2ec2e23 llvm-objdump: Fix --build-id documentation string
The argument is hex digits, so <dir> doesn't make a lot of sense.

Reviewed By: phosek

Differential Revision: https://reviews.llvm.org/D141009
2023-01-04 11:54:57 -08:00
Roman Lebedev
6a67b633b9 [exegesis] Analysis: filtering for benchmark results
By default, all benchmark results are analysed, but sometimes it may be useful
to only look at those that to not involve memory, or vice versa. This option
allows to either keep all benchmarks, or filter out (ignore) either all the
ones that do involve memory (involve instructions that may read or write to
memory), or the opposite, to only keep such benchmarks.

Personally, so far i have found the benchmarks that do involve memory
to have dubious results. But the ones that do not involve memory,
are generally actionable. So i would like to have a toggle to declutter results.

Reviewed By: courbet

Differential Revision: https://reviews.llvm.org/D140734
2023-01-04 21:16:11 +03:00
Matt Arsenault
a455c91601 llvm-reduce: Add reduction for invokes
Main thing I was unsure about was to whether try to delete the now
dead landing blocks, or leave that for the unreachable block reduction.

Personality function is not reduced, but that should be a separate
reduction on the function.

Fixes #58815
2023-01-03 17:03:44 -05:00
Matt Arsenault
f4cb935ce8 llvm-reduce: Fix invalid reductions for exceptions, tokens and swifterror
Copies the same special cases that bugpoint uses. Technically the
token condition is stricter than what the verifier enforces.

Part 1 of #58815
2023-01-03 17:03:20 -05:00
Matt Arsenault
0008afc632 llvm-reduce: Remove leftover comment 2023-01-03 17:00:35 -05:00
Matt Arsenault
9c8b89f580 llvm-reduce: Refine missing argument behavior
We required the test and input arguments for --print-delta-passes
which is unhelpful. Also, start printing the help output if no
arguments were supplied.

It looks like there's more sophisticated ways to accomplish this with
the opt library, but it was less work to manually emit these errors.
2023-01-03 16:01:36 -05:00
Matt Arsenault
d5b7514c3d llvm-reduce: Don't remove strictfp
The verifier should fail if constrained intrinsics are used in
functions with strictfp, but that patch hasn't been pushed yet.

Ideally we would be able to analyze the function body to see if any
constrained intrinsics were used, but we seem to be missing a utility
function to check for any constrained ops.
2023-01-03 15:57:58 -05:00
Matt Arsenault
7cd0fd6f51 llvm-reduce: Avoid invalid attribute reduction on optnone functions
We have this ridiculous restriction that optnone requires noinline,
so the pair needs to be removed if we want to remove noinline.
2023-01-03 15:48:14 -05:00
Matt Arsenault
5f6bf752d9 llvm-reduce: Reduce individual operands of named metadata
The current reduction tries all or nothing elimination of named
metadata. I noticed in one case where one of the module flags was
necessary, but it left the rest. Reduce the individual operands of
named metadata nodes that are known to behave like lists. Be
conservative since some named metadata may have more specific verifier
requirements for the operands.
2023-01-03 11:48:00 -05:00
Matt Arsenault
e60b0d2a22 llvm-reduce: Reduce prologue data
Identical to the prefix data handling, and also had broken cloning.
2023-01-03 11:07:02 -05:00
Matt Arsenault
4afb10d572 llvm-reduce: Reduce prefix data
Also fixes broken cloning.
2023-01-03 11:03:43 -05:00
Matt Arsenault
47e44c0c2e llvm-reduce: Add reduction for function personalities
Fixes second piece of #58815
2023-01-03 11:02:34 -05:00
Matt Arsenault
89ada6c51f llvm-reduce: Avoid push_back for constant array 2023-01-03 10:13:17 -05:00
Matt Arsenault
875ecca762 llvm-reduce: Remove unused class 2023-01-03 10:13:17 -05:00
Samuel Parker
615333bc09 [TypePromotion] NewPM support.
Differential Revision: https://reviews.llvm.org/D140893
2023-01-03 15:09:29 +00:00
Samuel Parker
d1390aa045 [NFC] Formatting
Format opt PassNameExact vector to make diffs, that remove strings,
cleaner.
2023-01-03 15:05:19 +00:00
Matt Arsenault
40903bad46 llvm-reduce: Fix missing newline after error message
Fixes missing test coverage for the failed to execute case. However,
this test fails to verify the newline is printed. I can't figure out
how to get FileCheck to match the trailing newline.
2023-01-03 09:09:17 -05:00
Qfrost
239babe31d llvm-readobj COFFDumper print PEHeader CheckSum
Differential Revision:https://reviews.llvm.org/D140555
2022-12-31 11:48:58 +08:00
Gulfem Savrun Yeniceri
1ae7d83803 [profile] Add binary ids into indexed profiles
This patch adds support for including binary ids in an indexed profile.
It adds a new field into the header that points to the offset of the
binary id section. The binary id section consists of a size of the
section, and a list of binary ids (if they are present) that consist
of two parts: length and data.

This patch guarantees that indexed profile is backwards compatible
after adding binary ids.

Differential Revision: https://reviews.llvm.org/D135929
2022-12-29 18:46:56 +00:00
Roman Lebedev
498704d511 [NFC][exegesis] By default, don't dump objects to disk
It's a strictly-developer feature, which is useless most of the time.

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

Reviewed By: RKSimon, gchatelet

Differential Revision: https://reviews.llvm.org/D140700
2022-12-28 16:56:54 +03:00
serge-sans-paille
d9ab3e82f3 [clang] Use a StringRef instead of a raw char pointer to store builtin and call information
This avoids recomputing string length that is already known at compile time.

It has a slight impact on preprocessing / compile time, see

https://llvm-compile-time-tracker.com/compare.php?from=3f36d2d579d8b0e8824d9dd99bfa79f456858f88&to=e49640c507ddc6615b5e503144301c8e41f8f434&stat=instructions:u

This a recommit of e953ae5bbc and the subsequent fixes caa713559b and 06b90e2e9c.

The above patchset caused some version of GCC to take eons to compile clang/lib/Basic/Targets/AArch64.cpp, as spotted in aa171833ab.
The fix is to make BuiltinInfo tables a compilation unit static variable, instead of a private static variable.

Differential Revision: https://reviews.llvm.org/D139881
2022-12-27 09:55:19 +01:00
Andrei Safronov
310f7652f7 [Xtensa 2/10] Add Xtensa ELF definitions
Add file with Xtensa ELF relocations. Add Xtensa support to ELF.h,
ELFObject.h and ELFYAML.cpp. Add simple test of Xtensa ELF representation in YAML.

Differential Revision: https://reviews.llvm.org/D64827
2022-12-26 13:30:51 +01:00
Vitaly Buka
aa171833ab Revert "[clang] Use a StringRef instead of a raw char pointer to store builtin and call information"
Revert "Fix lldb option handling since e953ae5bbc (part 2)"
Revert "Fix lldb option handling since e953ae5bbc313fd0cc980ce021d487e5b5199ea4"

GCC build hangs on this bot https://lab.llvm.org/buildbot/#/builders/37/builds/19104
compiling CMakeFiles/obj.clangBasic.dir/Targets/AArch64.cpp.d

The bot uses GNU 11.3.0, but I can reproduce locally with gcc (Debian 12.2.0-3) 12.2.0.

This reverts commit caa713559b.
This reverts commit 06b90e2e9c.
This reverts commit e953ae5bbc.
2022-12-25 23:12:47 -08:00
serge-sans-paille
e953ae5bbc [clang] Use a StringRef instead of a raw char pointer to store builtin and call information
This avoids recomputing string length that is already known at compile
time.

It has a slight impact on preprocessing / compile time, see

https://llvm-compile-time-tracker.com/compare.php?from=3f36d2d579d8b0e8824d9dd99bfa79f456858f88&to=e49640c507ddc6615b5e503144301c8e41f8f434&stat=instructions:u

This is a recommit of 719d98dfa8 that into
account a GGC issue (probably
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92181) when dealing with
intiailizer_list and constant expressions.

Workaround this by avoiding initializer list, at the expense of a
temporary plain old array.

Differential Revision: https://reviews.llvm.org/D139881
2022-12-24 10:25:06 +01:00
serge-sans-paille
07d9ab9aa5 Revert "[clang] Use a StringRef instead of a raw char pointer to store builtin and call information"
There are still remaining issues with GCC 12, see for instance

https://lab.llvm.org/buildbot/#/builders/93/builds/12669

This reverts commit 5ce4e92264.
2022-12-23 13:29:21 +01:00
serge-sans-paille
5ce4e92264 [clang] Use a StringRef instead of a raw char pointer to store builtin and call information
This avoids recomputing string length that is already known at compile
time.

It has a slight impact on preprocessing / compile time, see

https://llvm-compile-time-tracker.com/compare.php?from=3f36d2d579d8b0e8824d9dd99bfa79f456858f88&to=e49640c507ddc6615b5e503144301c8e41f8f434&stat=instructions:u

This is a recommit of 719d98dfa8 with a
change to llvm/utils/TableGen/OptParserEmitter.cpp to cope with GCC bug
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108158

Differential Revision: https://reviews.llvm.org/D139881
2022-12-23 12:48:17 +01:00
serge-sans-paille
b7065a31b5 Revert "[clang] Use a StringRef instead of a raw char pointer to store builtin and call information"
Failing builds: https://lab.llvm.org/buildbot#builders/9/builds/19030
This is GCC specific and has been reported upstream: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108158

This reverts commit 719d98dfa8.
2022-12-23 11:36:56 +01:00
serge-sans-paille
719d98dfa8 [clang] Use a StringRef instead of a raw char pointer to store builtin and call information
This avoids recomputing string length that is already known at compile
time.

It has a slight impact on preprocessing / compile time, see

https://llvm-compile-time-tracker.com/compare.php?from=3f36d2d579d8b0e8824d9dd99bfa79f456858f88&to=e49640c507ddc6615b5e503144301c8e41f8f434&stat=instructions:u

Differential Revision: https://reviews.llvm.org/D139881
2022-12-23 10:31:47 +01:00
Roman Lebedev
b2abbd1d0e [llvm-extract] Don't forget to link to Analysis component
```
[ 50% 1/2][ 50% 00:01 + 00:01] Linking CXX executable bin/llvm-extract
FAILED: bin/llvm-extract
: && /usr/bin/clang++-15 -O3 -g -ggdb -march=native -UNDEBUG -gsplit-dwarf -gz -fPIC -fno-semantic-interposition -fvisibility-inlines-hidden -Werror=date-time -Werror=unguarded-availability-new -Wall -Wextra -Wno-unused-parameter -Wwrite-strings -Wcast-qual -Wmissing-field-initializers -pedantic -Wno-long-long -Wc++98-compat-extra-semi -Wimplicit-fallthrough -Wcovered-switch-default -Wno-noexcept-type -Wnon-virtual-dtor -Wdelete-non-virtual-dtor -Wsuggest-override -Wstring-conversion -Wmisleading-indentation -Wctad-maybe-unsupported -fdiagnostics-color -ffunction-sections -fdata-sections -O3 -g -ggdb -march=native -UNDEBUG -gsplit-dwarf -gz -Wl,--gdb-index -Wl,--color-diagnostics     -Wl,--gc-sections tools/llvm-extract/CMakeFiles/llvm-extract.dir/llvm-extract.cpp.o -o bin/llvm-extract  -Wl,-rpath,"\$ORIGIN/../lib"  lib/libLLVMPasses.so.16git  lib/libLLVMIRPrinter.so.16git  lib/libLLVMipo.so.16git  lib/libLLVMBitWriter.so.16git  lib/libLLVMIRReader.so.16git  lib/libLLVMCore.so.16git  lib/libLLVMSupport.so.16git  -Wl,-rpath-link,/builddirs/llvm-project/build-Clang15/lib && :
ld: error: undefined symbol: llvm::AnalysisManager<llvm::Loop, llvm::LoopStandardAnalysisResults&>::AnalysisManager()
>>> referenced by llvm-extract.cpp:326 (/repositories/llvm-project/llvm/tools/llvm-extract/llvm-extract.cpp:326)
>>>               tools/llvm-extract/CMakeFiles/llvm-extract.dir/llvm-extract.cpp.o:(main)
>>> referenced by llvm-extract.cpp:373 (/repositories/llvm-project/llvm/tools/llvm-extract/llvm-extract.cpp:373)
>>>               tools/llvm-extract/CMakeFiles/llvm-extract.dir/llvm-extract.cpp.o:(main)
>>> referenced by llvm-extract.cpp:394 (/repositories/llvm-project/llvm/tools/llvm-extract/llvm-extract.cpp:394)
>>>               tools/llvm-extract/CMakeFiles/llvm-extract.dir/llvm-extract.cpp.o:(main)

ld: error: undefined symbol: llvm::AnalysisManager<llvm::LazyCallGraph::SCC, llvm::LazyCallGraph&>::AnalysisManager()
>>> referenced by llvm-extract.cpp:328 (/repositories/llvm-project/llvm/tools/llvm-extract/llvm-extract.cpp:328)
>>>               tools/llvm-extract/CMakeFiles/llvm-extract.dir/llvm-extract.cpp.o:(main)
>>> referenced by llvm-extract.cpp:375 (/repositories/llvm-project/llvm/tools/llvm-extract/llvm-extract.cpp:375)
>>>               tools/llvm-extract/CMakeFiles/llvm-extract.dir/llvm-extract.cpp.o:(main)
>>> referenced by llvm-extract.cpp:396 (/repositories/llvm-project/llvm/tools/llvm-extract/llvm-extract.cpp:396)
>>>               tools/llvm-extract/CMakeFiles/llvm-extract.dir/llvm-extract.cpp.o:(main)
clang: error: linker command failed with exit code 1 (use -v to see invocation)
ninja: build stopped: subcommand failed.
```
2022-12-21 05:16:50 +03:00
Roman Lebedev
03aa6b9197 [NFC][llvm-exegesis] Ensure that target options show up in --help
Fixes https://github.com/llvm/llvm-project/issues/59377
2022-12-21 03:38:30 +03:00
Matt Arsenault
95abdeba61 llvm-reduce: Disable crash reports, symbolization and core dumps
These are going to waste a lot of time and produce clutter when we're
bulk introducing crashes. Add a flag to disable this behavior in case
this matters to a reproducer.
2022-12-20 19:01:26 -05:00
Roman Lebedev
a5b56313dd [llvm-exegesis] AliasingConfigurations: pay attention to forbidden registers
When trying to measure latency of certain opcodes, e.g.
`./bin/llvm-exegesis --opcode-name=BT32ri8 --mode=latency --repetition-mode=loop  --benchmarks-file=- --max-configs-per-opcode=65536`,
we'd pick such an aliasing instruction, and such an aliasing registers,
that would alias with forbidden registers.

And in particular with loop counter in `loop` repetition mode,
which made the measurements never finish.
This does not address all such cases, only the most obvious one.

The added test case fails without the patch.

Fixes https://github.com/llvm/llvm-project/issues/59441
2022-12-21 02:01:14 +03:00
Arthur Eubanks
d43314748c [llvm-extract] Add missing IRPrinter dependency 2022-12-20 13:17:18 -08:00
Arthur Eubanks
2118b9d39b [llvm-extract] Use new pass manager instead of legacy pass manager
Removes some legacy passes specific to llvm-extract
2022-12-20 12:57:35 -08:00
Matt Arsenault
49f80a5d34 llvm-reduce: Fix build
Fix build after e49f8eef41
2022-12-20 13:03:07 -05:00
Roman Lebedev
e49f8eef41 [NFC][llvm-reduce] Do show -ir-passes in help
It's a bit non-useful when llvm-reduce runs a pass,
a testcase for a crash in which is being reduced in the first place :)
2022-12-20 20:42:25 +03:00
Joshua Cranmer
e6b02214c6 [IR] Add a target extension type to LLVM.
Target-extension types represent types that need to be preserved through
optimization, but otherwise are not introspectable by target-independent
optimizations. This patch doesn't add any uses of these types by an existing
backend, it only provides basic infrastructure such that these types would work
correctly.

Reviewed By: nikic, barannikov88

Differential Revision: https://reviews.llvm.org/D135202
2022-12-20 11:02:11 -05:00
Archibald Elliott
f09cf34d00 [Support] Move TargetParsers to new component
This is a fairly large changeset, but it can be broken into a few
pieces:
- `llvm/Support/*TargetParser*` are all moved from the LLVM Support
  component into a new LLVM Component called "TargetParser". This
  potentially enables using tablegen to maintain this information, as
  is shown in https://reviews.llvm.org/D137517. This cannot currently
  be done, as llvm-tblgen relies on LLVM's Support component.
- This also moves two files from Support which use and depend on
  information in the TargetParser:
  - `llvm/Support/Host.{h,cpp}` which contains functions for inspecting
    the current Host machine for info about it, primarily to support
    getting the host triple, but also for `-mcpu=native` support in e.g.
    Clang. This is fairly tightly intertwined with the information in
    `X86TargetParser.h`, so keeping them in the same component makes
    sense.
  - `llvm/ADT/Triple.h` and `llvm/Support/Triple.cpp`, which contains
    the target triple parser and representation. This is very intertwined
    with the Arm target parser, because the arm architecture version
    appears in canonical triples on arm platforms.
- I moved the relevant unittests to their own directory.

And so, we end up with a single component that has all the information
about the following, which to me seems like a unified component:
- Triples that LLVM Knows about
- Architecture names and CPUs that LLVM knows about
- CPU detection logic for LLVM

Given this, I have also moved `RISCVISAInfo.h` into this component, as
it seems to me to be part of that same set of functionality.

If you get link errors in your components after this patch, you likely
need to add TargetParser into LLVM_LINK_COMPONENTS in CMake.

Differential Revision: https://reviews.llvm.org/D137838
2022-12-20 11:05:50 +00:00
Archibald Elliott
142aa1bdd1 [Support] Move Target/CPU Printing out of CommandLine
This change is rather more invasive than intended. The main intention
here is to make CommandLine.cpp not rely on llvm/Support/Host.h. Right
now, this reliance is only in 3 superficial places:
- Choosing how to expand response files (in two places)
- Printing the default triple and current CPU in `--version` output.

The built in version system has a method for adding "extra version
printers", commonly used by several tools (such as llc) to report the
registered targets in the built version of LLVM. It was reasonably easy
to move the logic for printing the default triple and current CPU into
a similar function, and register it with any relevant binaries.

The incompatible change here is that now, even if
LLVM_VERSION_PRINTER_SHOW_HOST_TARGET_INFO is defined, most binaries
will no longer print out the default target triple and cpu when provided
with `--version`, for instance llvm-as and llvm-dis. This breakage is
intended, but the changes in this patch keep printing the default target
and detected in `llc` and `opt` as these were remarked as important
binaries in the LLVM install.

The change to expanding response files may also be controversial, but I
believe that these macros should correspond exactly to the host triple
introspection used before.

Differential Revision: https://reviews.llvm.org/D137837
2022-12-20 09:56:14 +00:00
Steven Wu
3a5426f572 Revert "LTO: always parse modules in opaque pointer mode."
This reverts commit 8ba9a52187.
2022-12-19 16:02:43 -08:00
Lang Hames
bf6d7ca987 [ORC] Add JITDylib argument to ResourceManager notify-removing/transferring ops.
In some cases it's helpful to group trackers by JITDylib. E.g. Platform classes
may want to track initializer symbols with a `JITDylib -> Tracker -> [ Symbol ]`
map. This makes it easy to collect all symbols for the JITDylib, while still
allowing efficient removal of a single tracker. Passing the JITDylib as an
argument to ResourceManager::notifyRemovingResources and
ResourceManager::notifyTransferringResources supports such use-cases.
2022-12-19 14:56:08 -08:00
Roman Lebedev
8c3a835990 [NFC][llvm-exegesis] Try to fix GCC7 build
https://lab.llvm.org/staging/#/builders/235/builds/1121
2022-12-19 18:10:18 +03:00
Roman Lebedev
e9972a7113 [NFC][llvm-exegesis] Try to fix GCC7 build
https://lab.llvm.org/staging/#/builders/235/builds/1090
2022-12-19 17:15:27 +03:00