7639 Commits

Author SHA1 Message Date
quic-areg
61ea63baaf
[Hexagon] Add support for decoding PLT symbols (#123425)
Describes PLT entries for hexagon.
2025-01-29 15:37:23 -06:00
Michael Maitland
5a4945fa4d
[RISCV][SIFIVE] Fix latencies for vector integer arithmetic long latency (#124855)
These instructions go through a longer latency pipeline of 8.
2025-01-29 09:42:51 -05:00
David Blaikie
ce96c26cd6
Revert "[llvm][DebugInfo] Attach object-pointer to DISubprogram declarations (#122742)" (#124853)
This introduces a substantial (5-10%) regression in .debug_info size, so
we're discussing alternatives in #122742 and #124790.

This reverts commit 7c729418d721147bf1f2b257afd30f84721888ad.
2025-01-29 15:11:33 +01:00
Craig Topper
ea9993a9a3
[RISCV] Add P550 scheduler model. (#124639)
P550 falls between P450 and P650. It has 1 additional FEX pipe over
P450. Mul and cpop latency are 3 instead of 2.

I've set the MicroOpBufferSize to 96 instead of 56 based on the ROB size
measurement from
https://chipsandcheese.com/p/inside-sifives-p550-microarchitecture I
believe we set this value too low for P450 and P650 and should update
them in a separate PR.
2025-01-27 22:40:05 -08:00
Ramkumar Ramachandra
3a4376b8f9
LAA: handle 0 return from getPtrStride correctly (#124539)
getPtrStride returns 0 when the PtrScev is loop-invariant, and this is
not an erroneous value: it returns std::nullopt to communicate that it
was not able to find a valid pointer stride. In analyzeLoop, we call
getPtrStride with a value_or(0) conflating the zero return value with
std::nullopt. Fix this, handling loop-invariant loads correctly.
2025-01-27 14:21:14 +00:00
Fangrui Song
6805d7e8aa [test] Convert remove-note.test from \r\n to \n after #118739 2025-01-26 22:28:31 -08:00
Eric Astor
a94226f9e6
[llvm-ml] Remove unsafe getCurrentSegmentOnly() call (#123355)
This call was made unsafe recently, but was not fixed in
db48f1a1764023f8efeb055e343b967d1eb37d19 (the commit that fixed the
parallel code in AsmParser.cpp).

Fixes #123189
2025-01-24 10:30:10 -05:00
Lou
970094d50b
[llvm-opt-report] Show scalable vectorization factors (#123367)
Scalable vectorization factors are printed as "vscale x VF" where VF is
the known minimum number of elements, a integer. Currently,
llvm-opt-report always expects a integer (like for vectorization with
fixed-sized vectors), and does not display any vectorization factor in
the output (just 'V', but without a number).

This patch adds support for scalable vectorization factors and prints
them as "VNx<VF>", so for example "VNx4". The "Nx" is used to
differentiate between fixed-sized and scalable factors, and is
consistent with the way LLVM mangles scalable vectors in other places.
2025-01-24 15:08:14 +01:00
Aaditya
11b0401926
[AMDGPU] Restore SP from saved-FP or saved-BP (#124007)
Currently, the AMDGPU backend bumps the Stack Pointer 
by fixed size offsets in the prolog of device functions, and 
restores it by the same amount in the epilog.
Prolog:
sp += frameSize

Epilog:
sp -= frameSize

If a function has dynamic stack realignment,
Prolog:
sp += frameSize + max_alignment

Epilog:
sp -= frameSize + max_alignment

These calculations are not optimal in case of dynamic 
stack realignment, and completely fail in case of 
dynamic stack readjustment.
This patch uses the saved Frame Pointer to restore SP. 
Prolog:
fp = sp
sp += frameSize

Epilog:
sp = fp

In case of dynamic stack realignment, SP is restored from 
the saved Base Pointer. 
Prolog:
fp = sp + (max_alignment - 1)
fp = fp & (-max_alignment)
bp = sp
sp += frameSize + max_alignment

Epilog:
sp = bp

(Note: The presence of BP has been enforced in case of any 
dynamic stack realignment.)

---------

Co-authored-by: Pravin Jagtap <Pravin.Jagtap@amd.com>
Co-authored-by: Matt Arsenault <arsenm2@gmail.com>
2025-01-24 19:13:40 +05:30
Igor Kudrin
10772807ab Reapply "[llvm-objcopy][ELF] Add an option to remove notes (#118739)"
This fixes "unused-local-typedef" warnings in 9324e6a7a5.

This adds an option `--remove-note=[name/]type` to selectively delete
notes in ELF files, where `type` is the numeric value of the note type
and `name` is the name of the originator. The name can be omitted, in
which case all notes of the specified type will be removed. For now,
only `SHT_NOTE` sections that are not associated with segments are
handled. The implementation can be extended later as needed.

RFC: https://discourse.llvm.org/t/rfc-llvm-objcopy-feature-for-editing-notes/83491
2025-01-23 15:22:04 -08:00
Igor Kudrin
621e5cd820 Revert "[llvm-objcopy][ELF] Add an option to remove notes (#118739)"
This reverts commit 9324e6a7a5c5adc5b5c38c3e3cbecd7e1e98876a.
2025-01-23 14:57:29 -08:00
Igor Kudrin
9324e6a7a5
[llvm-objcopy][ELF] Add an option to remove notes (#118739)
This adds an option `--remove-note=[name/]type` to selectively delete
notes in ELF files, where `type` is the numeric value of the note type
and `name` is the name of the originator. The name can be omitted, in
which case all notes of the specified type will be removed. For now,
only `SHT_NOTE` sections that are not associated with segments are
handled. The implementation can be extended later as needed.


RFC: https://discourse.llvm.org/t/rfc-llvm-objcopy-feature-for-editing-notes/83491
2025-01-23 14:27:40 -08:00
Ellis Hoag
d87441a242
[llvm-profdata] Fix detailed summary format on Windows (#124169)
The detailed summary format was changed in
https://github.com/llvm/llvm-project/pull/105915 which broke
`llvm/test/tools/llvm-profdata/general.proftext` (XFAILed in
https://github.com/llvm/llvm-project/pull/124165). Apparently the
behavior of `%lu` is different between Linux and Windows, so I reverted
back to using `<<` style formats.
2025-01-23 13:46:26 -08:00
Vitaly Buka
c4ca87ee78
[yaml2obj] Don't use uninitialized Type (#123274)
Alternative to #123137

With -DMACHINE=EM_NONE, machine specific
sections, like SHT_ARM_EXIDX, will fall to parse
and set `Type`.

This triggers msan on
```
yaml2obj llvm-project/llvm/test/tools/yaml2obj/ELF/mips-abi-flags.yaml -DMACHINE=EM_NONE
```
2025-01-23 12:22:16 -08:00
Ellis Hoag
0290693165
[llvm-profdata] XFAIL broken test on windows (#124165)
XFAIL `llvm/test/tools/llvm-profdata/general.proftext` after it was
accidentally broken by
https://github.com/llvm/llvm-project/pull/105915/. I will follow up to
get this fixed.
2025-01-23 10:02:38 -08:00
Vitaly Buka
66e49e38ae
[YAML] Don't validate Fill::Size after error (#123280)
Size is required, so we don't know if it's in
uninitialized state after the previous error.

Triggers msan on llvm/test/tools/yaml2obj/ELF/custom-fill.yaml NOSIZE
test.

We have `Fill` Section with Pattern, but no size. Before the fix it
produced error:
```
YAML:169:5: error: missing required key 'Size'
  - Type:    Fill
    ^
YAML:169:5: error: "Size" can't be 0 when "Pattern" is not empty
  - Type:    Fill
```

The same applies to `MachOYAML::Section` fields `content` and `size`.
However `MachOYAML::Section` matches size first, so on error,
content is not set anyway. Added error checking just in case.
2025-01-23 09:52:34 -08:00
Ellis Hoag
a2453097e3
[llvm-profdata] Add block percent to detailed summary (#105915) 2025-01-23 09:30:23 -08:00
Simon Pilgrim
90e9895a93
[X86] Handle BSF/BSR "zero-input pass through" behaviour (#123623)
Intel docs have been updated to be similar to AMD and now describe
BSF/BSR as not changing the destination register if the input value was
zero, which allows us to support CTTZ/CTLZ zero-input cases by setting
the destination to support a NumBits result (BSR is a bit messy as it
has to be XOR'd to create a CTLZ result). VIA/Zhaoxin x86_64 CPUs have also
been confirmed to match this behaviour.

This patch adjusts the X86ISD::BSF/BSR nodes to take a "pass through"
argument for zero-input cases, by default this is set to UNDEF to match
existing behaviour, but it can be set to a suitable value if supported.

There are still some limits to this - its only supported for x86_64
capable processors (and I've only enabled it for x86_64 codegen), and
Intel CPUs sometimes zero the upper 32-bits of a pass through register
when used for BSR32/BSF32 with a zero source value (i.e. the whole
64bits may not get passed through).

Fixes #122004
2025-01-23 12:59:59 +00:00
Aiden Grossman
7575072273 [llvm-exegesis] Disable exhaustive tests on Windows
When looking at the slowest lit tests, I'm seeing these four tests take
two to eight minutes. Test coverage on Linux should be sufficient for
the functionality on top of it not really being useful on Windows at
all.

This was observed when hacking on the new premerge in a windows VM.
2025-01-23 04:08:31 +00:00
Pengcheng Wang
9d676e2cb6
[MCA] Use MCInstrAnalysis to analyse call/return instructions (#123882)
The flag set in `MCInstrDesc` is not accurate and we should use
the result of `MCInstrAnalysis`.
2025-01-22 19:10:28 +08:00
Wang Pengcheng
d03fab1be3 [RISCV] Add precommit test for #123882
Add MCA test for jump instructions.
2025-01-22 19:08:39 +08:00
Martin Storsjö
c912e98e8e
[llvm-lib] Don't rewrite paths for members in non-thin archives (#123416)
This matches what MS lib.exe does (and llvm-ar too); when adding files
to an archive, MS lib.exe stores the file name as it was given on the
command line, whereas llvm-lib rewrote it into a relative path name,
relative to the archive location. Such a rewrite makes sense for thin
archives, but not for regular archives. (MS lib.exe doesn't support
producing thin archives; that's an LLVM extension - see the
thin-relative.test testcase.)

The behaviour to rewrite these paths was added in
451c2ef199e9c5163007ac32e2d426fbfb37e664; it is unclear why it was
chosen to do the rewriting for non-thin archives as well. This quirk is
even pointed out in a code comment - but neither the code review at
https://reviews.llvm.org/D57842 nor the linked bug report at
https://crbug.com/41440160 mentions why this is done for all archives,
not only thin ones.

Therefore, assume that this only was done out of convenience, and change
llvm-lib to not adjust the paths for non-thin archives.

Normally, the actual member names doesn't matter for non-thin archives;
however for short import libraries, where each member is named e.g.
"foo.dll", the names do matter. If using llvm-lib to merge two import
libraries (as a non-thin library), preserve the original names rather
than making the member names relative.
2025-01-21 23:56:56 +02:00
alx32
bfafbe3a5c
[llvm-gsymutil] Fix flaky test (#123814)
The `macho-gsym-merged-callsites-dsym.yaml` test was failing with
expensive checks on. This is because we still can't reliably associate
line table information to functions until
https://github.com/llvm/llvm-project/pull/123391 is merged.

Example failure:
https://lab.llvm.org/buildbot/#/builders/16/builds/12374
2025-01-21 13:14:43 -08:00
alx32
4a1c33d34c
[llvm-gsymutil] Add support for merged functions lookup differentiation (#122409)
This update introduces the ability to filter merged functions during
lookups based on regex patterns derived from call site information in a
previous call to `llvm-gsymutil`. The regex patterns, extracted from
call sites, can then be passed to subsequent calls using the
`--merged-functions-filter` option along with `--merged-functions` and
`--address` (or `--addresses-from-stdin`). This allows for precise
filtering of functions during lookups, giving accurate results for call
stacks that contain merged functions.
2025-01-21 09:24:55 -08:00
zhijian lin
b92cc78060
[llvm-objdump] Print out xcoff load section of xcoff object file with option private-headers (#121226)
[llvm-objdump] Print out xcoff load section of xcoff object file with
option private-headers
2025-01-20 09:35:01 -05:00
Michael Buch
7c729418d7
[llvm][DebugInfo] Attach object-pointer to DISubprogram declarations (#122742)
Currently Clang only attaches `DW_AT_object_pointer` to
`DW_TAG_subprogram` definitions. LLDB constructs C++ method types from
their `DW_TAG_subprogram` declaration, which is also the point at which
it needs to determine whether a method is static or not. LLDB's
heuristic for this could be very simple if we emitted
`DW_AT_object_pointer` on declarations. But since we don't, LLDB has to
guess whether an argument is an implicit object parameter based on the
DW_AT_name and DW_AT_type.

To simplify LLDB's job (and to eventually support C++23's explicit
object parameters), this patch adds the `DIFlagObjectPointer` to
`DISubprogram` declarations.

For reference, GCC attaches the object-pointer DIE to both the
definition and declaration: https://godbolt.org/z/3TWjTfWon

Fixes https://github.com/llvm/llvm-project/issues/120973
2025-01-17 15:27:48 +00:00
Mircea Trofin
c70f246251
[ctxprof] add toYAML conversion to llvm-ctxprof-utils (#123131)
Also modified test file to match "toYaml" formatting.
2025-01-15 16:53:43 -08:00
Min Hsu
72225ca27f Revert "Reland: "[Exegesis] Add the ability to dry-run the measurement phase (#121991)" (#122775)"
This reverts commit a39aaf35d3858a5542f532e399482c2bb0259dac and
63d3bd6d0caf8185aba49540fe2f67512fdf3a98.

Due to test failures on MacOSX.
2025-01-14 14:18:58 -08:00
Min Hsu
63d3bd6d0c [Exegesis] Fix test failures from #122775 on MacOSX and Fuchsia
I'm making this test to run only when exegesis-can-execute-x86_64.
2025-01-14 10:43:58 -08:00
David Green
ce7c8815a1 [AArch64] Add mayStore to more store instructions
As in #121565 we need to mark all stores as mayStore, hasSideEffects is not
enough to prevent moving loads past the instructions. And marking the
instructions as mayStore is a sensible thing to do on its own.
2025-01-14 11:14:45 +00:00
Daniel Paoliello
2201164477
[llvm] Win x64 Unwind V2 2/n: Support dumping UOP_Epilog (#110338)
Adds support to objdump and readobj for reading the `UOP_Epilog` entries
of Windows x64 unwind v2.

`UOP_Epilog` has a weird format:

The first `UOP_Epilog` in the unwind data is the "header":
* The least-significant bit of `OpInfo` is the "At End" flag, which
signifies that there is an epilog at the very end of the associated
function.
* `CodeOffset` is the length each epilog described by the current unwind
information (all epilogs have the same length).

Any subsequent `UOP_Epilog` represents another epilog for the current
function, where `OpInfo` and `CodeOffset` are combined to a 12-bit value
which is the offset of the beginning of the epilog from the end of the
current function. If the offset is 0, then this entry is actually
padding and can be ignored.
2025-01-13 16:53:42 -08:00
Min-Yih Hsu
a39aaf35d3
Reland: "[Exegesis] Add the ability to dry-run the measurement phase (#121991)" (#122775)
This relands f8f8598fd886cddfd374fa43eb6d7d37d301b576

Follow up on #122371:
The problem here is a little subtle: when we dry-run the measurement
phase, we create a LLJIT instance without actually executing the
snippets. The key is, LLJIT has its own TargetMachine which uses triple
designated by LLVM_TARGET_ARCH (which is default to host). On a machine
that does not support Exegesis, the LLJIT would fail to create its
TargetMachine because llvm-exegesis don't even register the host's
target!

Putting this test into any of the target-specific folder won't help,
because it's about the host. And personally I don't really want to use
`exegesis-can-execute-<arch>` for generic tests like this -- it's too
strict as we don't actually need to execute the snippet.

My solution here is creating another test feature which is added only
when LLVM_TARGET_ARCH is supported by llvm-exegesis. This feature is
something in between `<arch>-registered-target` and
`exegesis-can-execute-<arch>`.
2025-01-13 13:42:59 -08:00
David Green
a10ce71ac4 [ARM] Add mayStore to more store instructions
As in #121565 we need to mark all stores as mayStore, hasSideEffects is not
enough to prevent moving loads past the instructions. And marking the
instructions as mayStore is a sensible thing to do on its own.
2025-01-13 21:40:10 +00:00
Ryan Mansfield
65566281ed
[llvm-objdump] Remove leading whitespace for PT_GNU_PROPERTY. (#121591)
This fixes the misaligned display of addresses for this p_type.

Previous:

```
   STACK off    0x0000000000000000 vaddr 0x0000000000000000 paddr 0x0000000000000000 align 2**64
         filesz 0x0000000000000000 memsz 0x0000000000000000 flags rw-
   PROPERTY off    0x0000000000000358 vaddr 0x0000000000000358 paddr 0x0000000000000358 align 2**3
         filesz 0x0000000000000020 memsz 0x0000000000000020 flags r--
    NOTE off    0x0000000000000334 vaddr 0x0000000000000334 paddr 0x0000000000000334 align 2**2
         filesz 0x0000000000000020 memsz 0x0000000000000020 flags r--
```

After:


```
   STACK off    0x0000000000000000 vaddr 0x0000000000000000 paddr 0x0000000000000000 align 2**64
         filesz 0x0000000000000000 memsz 0x0000000000000000 flags rw-
PROPERTY off    0x0000000000000358 vaddr 0x0000000000000358 paddr 0x0000000000000358 align 2**3
         filesz 0x0000000000000020 memsz 0x0000000000000020 flags r--
    NOTE off    0x0000000000000334 vaddr 0x0000000000000334 paddr 0x0000000000000334 align 2**2
         filesz 0x0000000000000020 memsz 0x0000000000000020 flags r--
```
2025-01-13 14:15:24 +00:00
eleviant
d047dbd95e
Add function merger to be run during LTO link with gold plugin (#121343)
Patch adds 'merge-functions' plugin option for this purpose.
2025-01-12 17:31:45 +01:00
eleviant
26b4a0ac7e
Add 'unifiedlto' option to gold plugin (#121336)
Option allows using full LTO when linking bitcode files compiled with
unified LTO pipeline.
2025-01-12 16:18:26 +01:00
Mircea Trofin
6329355860
[ctxprof] Move test serialization to yaml (#122545)
We have a textual representation of contextual profiles for test scenarios, mainly. This patch moves that to YAML instead of JSON. YAML is more succinct and readable (some of the .ll tests should be illustrative). In addition, JSON is parse-able by the YAML reader.

A subsequent patch will address deserialization.

(thanks, @kazutakahirata, for showing me how to use the llvm YAML reader/writer APIs, which I incorrectly thought to be more low-level than the JSON ones!)
2025-01-10 18:04:25 -08:00
alx32
ba704d5956
[llvm-gsymutil] Address merged-funcs test non-determinism (#122308)
When creating a gSYM, `llvm-gsymutil` operates by default in
multi-threaded mode. If merged functions are present, determinism cannot
be guaranteed if parallel processing is enabled.

So, for our merged functions tests, we disable multi-threading during
gSYM creation.
2025-01-09 15:01:06 -08:00
Min-Yih Hsu
d01ae56774
Revert "[Exegesis] Add the ability to dry-run the measurement phase (… (#122371)
…#121991)"

This reverts commit f8f8598fd886cddfd374fa43eb6d7d37d301b576.

This breaks ARMv7 and s390x buildbot with the following message:
```
llvm-exegesis error: No available targets are compatible with triple "armv8l-unknown-linux-gnueabihf"
FileCheck error: '<stdin>' is empty.
FileCheck command line:  /home/tcwg-buildbot/worker/clang-armv7-2stage/stage2/bin/FileCheck /home/tcwg-buildbot/worker/clang-armv7-2stage/llvm/llvm/test/tools/llvm-exegesis/dry-run-measurement.test
```
2025-01-09 12:59:57 -08:00
Min-Yih Hsu
f8f8598fd8
[Exegesis] Add the ability to dry-run the measurement phase (#121991)
With the new benchmark phase, `dry-run-measurement`, llvm-exegesis can
run everything except the actual snippet execution. It is useful when we
want to test some parts of the code between the `assemble-measured-code`
and `measure` phase without actually running on native platforms.
2025-01-09 09:25:51 -08:00
Sarah Spall
ae6a7809b7
[HLSL] [DirectX] translate llvm fast math flags to llvm 3.7 fast math flags (#122025)
Translate modern LLVM fast math flags to LLVM 3.7 equivalent in DXIL
bitcode. Mostly use patch from #120630
Closes #120630
2025-01-08 10:09:44 -08:00
Daniel Rodríguez Troitiño
1a830aa1fe
[ObjCopy] Respect requirements of LC_ENCRYPTION_INFO commands (#120995)
LLD (and other Mach-O linkers) when preparing an encryptable binary make
space to leave all the load commands in an non-encrypted page (see [1])

When using objcopy of a small encryptable binary, the code was not
respecting this fact, and the encryptable segments were not kept beyond
the first page. This was obvious for small or empty binaries.

The changes introduced here keep track if a `LC_ENCRYPTION_INFO` or
`LC_ENCRYPTION_INFO_64` has been seen, and in such case, it adds a full
page of offset in order to leave the load commands in its own page
(similar to what LLD is doing).

[1]:
d8e7929312/lld/MachO/SyntheticSections.cpp (L90-L93)
2025-01-08 08:49:03 -08:00
Jessica Del
d07762e474
[UpdateTestChecks][NFC] - Fix typos (#121964)
substition -> substitution
in-betweem -> in-between
2025-01-08 14:24:39 +01:00
Hans Wennborg
51d7605df9 Fix macho-merged-funcs-dwarf.yaml test on Windows 2025-01-08 13:44:23 +01:00
Min-Yih Hsu
90d79ca4c7
[RISCV] Update the latencies of MUL and CPOP in SiFive P400 scheduling model (#122007)
According to llvm-exegesis, they should have around 2 cycles of latency
on P400 cores.
2025-01-07 15:01:05 -08:00
Min-Yih Hsu
b22551373c [RISCV] Add missing SiFive P400 scheduling model test for divisions. NFC
Add the missing scheduling model test for scalar divisions.

NFC.
2025-01-07 14:46:01 -08:00
Lei Wang
6c3c90b5a8
[CSSPGO]Add a flag to limit unsymbolized context depth (#121531)
Adding a new flag(`--csprof-max-unsymbolized-context-depth`) to only
limit unsymbolized context depth. Currently,`--csprof-max-context-depth`
applies to both symbolized and unsymbolized profile context, there are
scenarios where `--csprof-max-context-depth` may not be flexible enough,
e.g. if we want to limit the context but still keep all the inlinings
from the leaf frame, we could set the value
csprof-max-unsymbolized-context-depth >= 1.
2025-01-07 10:29:52 -08:00
Antonio Frighetto
446a426436 [ARM] Record store with pre/post-indexed addressing as mayStore
A miscompilation issue observed during machine sinking has been
addressed with improved handling.

Fixes: https://github.com/llvm/llvm-project/issues/121299.
2025-01-07 09:39:05 +01:00
Simon Wallis
32d761bbec
[AArch64][machine-scheduler][Neoverse-N2] fdiv is blocking (#119206)
For Neoverse-N2, mark FP divide and square root instructions as blocking
their pipeline until complete.

This matches the way that blocking integer divide instructions are
marked.

From the Software Optimization Guide, section 3.14 Notes:
1. FP divide and square root operations are performed using an iterative
algorithm and block subsequent similar operations to the same pipeline
until complete.

---------

Co-authored-by: Cullen Rhodes <cullen.rhodes@arm.com>
2025-01-06 21:57:15 +00:00
alx32
3f1a391b5e
[llvm-gsymutil] Fix broken tests (#121837)
Recently https://github.com/llvm/llvm-project/pull/120991 broke a couple
of tests.
Also `macho-merged-funcs-dwarf.yaml` was already flaky due to some
non-determinism issues.

Fixing the previous code to not break tests and modifying
`macho-merged-funcs-dwarf.yaml` to fix the non-determinism (which will
be resolved later).
2025-01-06 13:31:37 -08:00