503724 Commits

Author SHA1 Message Date
alx32
9fa7f401b2
[lld-macho] Category merger: handle addends when getting symbol at offset (#91238)
Currently the `tryFindDefinedOnIsec` takes in an `InputSection` and an
`offset` and is supposed to return the target symbol that is referenced
on that `InputSection` at the given offset.

However, it does not deal with the reloc `addend` and might return the
incorrect symbol.
Here we add support for handling the reloc's `addend`.
2024-07-02 14:11:13 -07:00
Tim Gymnich
2ee86a1ebb
[AArch64][GlobalISel] Improve non-SVE popcount for 32bit and 64 bit using udot (#96409)
Follow up for #95881

Use udot instead of a sequence of uaddlp instructions when summing up
lanes for popcount.
2024-07-02 22:01:58 +01:00
Joseph Huber
93e0ffa790
[lld] Add --lto-emit-asm and alias --plugin-opt=emit-llvm to it (#97469)
Summary:
The LTO pass currently supporting emitting LTO via the
`--plugin-opt=emit-llvm` option. However, there is a very similar option
called `--lto-emit-asm`. This patch just makes the usage more
consistent and more obvious that emitting LLVM-IR is supported.
2024-07-02 15:35:51 -05:00
Med Ismail Bennani
59f4267c8e
[lldb/docs] Add scripting extensions documentation to the website (#97262)
This patch adds the documentation for a subset of scripting extensions
such as scripted process, scripted thread, operating system threads &
scritped thread plans to the lldb website.

Signed-off-by: Med Ismail Bennani <ismail@bennani.ma>
2024-07-02 12:52:50 -07:00
Petr Hosek
3584a82333
[libc] Only use COMPILER_RESOURCE_DIR if available (#97465)
This avoids build error when COMPILER_RESOURCE_DIR is unset.
2024-07-02 12:48:48 -07:00
Petr Hosek
b8bbc57b68
[libc] Use -nostdlibinc in the full build mode (#97461)
This avoids accidentally including system headers.
2024-07-02 12:34:06 -07:00
Alexey Bataev
139508eb87 [SLP][NFC]Add a test with inefficient reordering of operands, NFC. 2024-07-02 12:04:34 -07:00
Craig Topper
717d839be4
[LangRef] Rename 'operand' to 'argument' in descriptions for masked load/store/gather/scatter. NFC (#97440)
Following up on the renaming started in #97437.
2024-07-02 11:59:16 -07:00
Craig Topper
e25da69c13
[LangRef] Rename 'operand' to 'argument' in descriptions of VP intrinsics. NFC (#97437)
Fixes inconsistencies noted in #97386 and #97387.

There are still more intrinsics that have the same issue. I might submit
more patches for those.
2024-07-02 11:59:00 -07:00
Mehdi Amini
28a11cc492
Revert "Fix block merging" (#97460)
Reverts llvm/llvm-project#96871

Bots are broken.
2024-07-02 20:57:16 +02:00
Kazu Hirata
b8eaa5bb10
[ProfileData] Remove the old version of getValueProfDataFromInst (#97374)
I've migrated uses of the old version of getValueProfDataFromInst to
the one that returns SmallVector<InstrProfValueData, 4>.  This patch
removes the old version.
2024-07-02 11:46:31 -07:00
Aaron Ballman
072e81db7a Revert "[Clang][Comments] Attach comments to decl even if preproc directives are in between (#88367)"
This reverts commit 9f04d75b2bd8ba83863db74ebe1a5c08cfc5815c.

There was post-commit feedback on the direction this PR took.
2024-07-02 14:45:52 -04:00
Florian Hahn
2f89d4a8c7
[SCEV] Split collecting and applying rewrite info from loop guards (NFC) (#97316)
Introduce a new LoopGuards class to track info from loop guards and split 
off collecting rewrite info to LoopGuards::collect. This allows users of 
applyLoopGuards to collect rewrite info once in cases where the same
loop guards are applied multiple times.

This is used to collect rewrite info once in howFarToZero, which saves a
bit of compile-time:
stage1-O3: -0.04%
stage1-ReleaseThinLTO: -0.02%
stage1-ReleaseLTO-g: -0.04%
stage2-O3: -0.02%

https://llvm-compile-time-tracker.com/compare.php?from=117b53ae38428ca66eaa886fb432e6f09db88fe4&to=4ffb7b2e1c99081ccebe6f236c48a0be2f64b6ff&stat=instructions:u

Notably this improves mafft by -0.9% with -O3, -0.11% with LTO and
-0.12% with stage2-O3.

PR: https://github.com/llvm/llvm-project/pull/97316
2024-07-02 19:32:28 +01:00
Joseph Huber
3c50cbfda4
[DeviceRTL] Make defined 'libc' functions weak in OpenMP (#97356)
Summary:
These functions provide special-case implementations internal to the
OpenMP device runtime. This can potentially conflict with the symbols
pulled in from the actual GPU `libc`. This patch makes these weak, so in
the case that the GPU libc functions exist they will be overridden. This
should not impact performance in the average case because the old
`-mlink-builtin-bitcode` version does internalization, deleting weak,
and the new LTO path will resolve to the strong reference and then
internalize it.
2024-07-02 13:23:53 -05:00
Sam Clegg
4d88837594
[lld][WebAssembly] Fix filename when reporting references to undefined symbols (#97444)
When an undefined symbol is referenced from more than one file we were
reporting all undefined symbols as originating from just one of them.

This came up while working on
https://github.com/WebAssembly/tool-conventions/issues/158 where
undefined symbols in one object file were being reported as coming from
another.
2024-07-02 11:23:41 -07:00
Sam Clegg
0fb3351524
[lld][WebAssembly] Fix for --import-table when combined with reference types (#97451)
When reference types are enabled clang will generate call_indirect
instructions that explicitly reference the global
`__indirect_function_table` symbol.

In this case the resulting global symbol was not being correctly marked
with explicit import name/module, resulting in the linker reporting
errors when it was referenced.

This issue was reported in
https://github.com/WebAssembly/tool-conventions/issues/158
2024-07-02 11:23:15 -07:00
Fangrui Song
5f1743cd07
[ELF] Infer EI_OSABI from object files
The first object file whose EI_OSABI is not ELFOSABI_NONE is selected.
This is useful for some OSes to identify themselves. This achieves
similar effects to BFD emulations `ld.lld -m *_fbsd` but is more
lightweight.

Pull Request: https://github.com/llvm/llvm-project/pull/97144
2024-07-02 11:00:42 -07:00
Fangrui Song
fdd3196553
[ELF] Make start/stop symbols retain associated discardable output sections
An empty output section specified in the `SECTIONS` command (e.g.
`empty : { *(empty) }`) may be discarded. Due to phase ordering, we
might define `__start_empty`/`__stop_empty` symbols with incorrect
section indexes (usually benign, but could go out of bounds and cause
`readelf -s` to print `BAD`).

```
finalizeSections
  addStartStopSymbols     // __start_empty is defined
  // __start_empty is added to .symtab
  sortSections
    adjustOutputSections  // `empty` is discarded
writeSections
  // __start_empty is Defined with an invalid section index
```

Loaders use `st_value` members of the start/stop symbols and expect no
"undefined symbol" linker error, but do not particularly care whether
the symbols are defined or undefined. Let's retain the associated empty
output section so that start/stop symbols will have correct section
indexes.

The approach allows us to remove `LinkerScript::isDiscarded`
(https://reviews.llvm.org/D114179). Also delete the
`findSection(".text")` special case from https://reviews.llvm.org/D46200,
which is unnecessary even before this patch (`elfHeader` would be fine
even with very large executables).

Note: we should be careful not to unnecessarily retain .ARM.exidx, which
would create an empty PT_ARM_EXIDX. ~40 tests would need to be updated.

---

An alternative is to discard the empty output section and keep the
start/stop symbols undefined. This approach needs more code and requires
`LinkerScript::isDiscarded` before we discard empty sections in
``adjustOutputSections`.

Pull Request: https://github.com/llvm/llvm-project/pull/96343
2024-07-02 10:58:24 -07:00
Matt Arsenault
e852725e5d Support: Fix typo in comment 2024-07-02 19:55:42 +02:00
Pete Steinfeld
bf5a2a99b1
[flang] Fix build problem caused by #96807 (#97450)
I had erroneously used a bitwise '&' with boolean operands which caused
a warning on the ARM build. This change fixes that.
2024-07-02 10:46:15 -07:00
Arthur Eubanks
ebdb6f4ef4
[MLInliner] Keep track of deleted functions (#97348)
As opposed to using Node::isDead(), which is no longer accurate after
#94815.

This is only used in diagnostics.
2024-07-02 10:41:26 -07:00
Michael Klemm
5e564d97e3
[Flang][runtime] Fix compilation errors introduced with PR #96652 (#97442) 2024-07-02 19:25:23 +02:00
Kevin Frei
60cd3eb880
Reduce llvm-gsymutil memory usage (#91023)
llvm-gsymutil eats a lot of RAM. On some large binaries, it causes OOM's on smaller hardware, consuming well over 64GB of RAM. This change frees line tables once we're done with them, and frees DWARFUnits's DIE's when we finish processing each DU, though they may get reconstituted if there are references from other DU's during processing. Once the conversion is complete, all DIE's are freed. The reduction in peak memory usage from these changes showed between 7-12% in my tests.

The double-checked locking around the creation & freeing of the data structures was tested on a 166 core system. I validated that it trivially malfunctioned without the locks (and with stupid reordering of the locks) and worked reliably with them.

---------

Co-authored-by: Kevin Frei <freik@meta.com>
2024-07-02 10:14:26 -07:00
Fangrui Song
e94a00c3b8 [MC] Use a stub ctor for MCAsmLayout
and replace MCAssembler::Layout with a bool.
This mostly completes "[MC] Start merging MCAsmLayout into MCAssembler".

Note: BOLT used a dummy `MCAsmLayout` to call `getSymbolOffset`, which
is technically not supported. There is some discussion in
https://reviews.llvm.org/D154604 .

The revert f80a4072ced41b52363c63df28fea9a649f7f89e is incorrect and
actually broke bots.
2024-07-02 10:10:31 -07:00
Philip Reames
7217201dd9 [RISCV] Add coverage of build vectors with rv32 + v + bitmanip
rv32+v allows cases with XLEN < ELEN, and since we're about to add
a bitmanip specific lowering, it's good to have coverage of this
corner case.
2024-07-02 10:09:37 -07:00
Craig Topper
87de49753d
[RISCV] Remove IgnoreUnknown from RISCVISAInfo::parseArchString. (#97372)
This isn't used in tree, and thus I don't know what the expectations for
its behavior really are. The original usage of this feature has been replaced
by parseNormalizedArchString.
2024-07-02 09:39:59 -07:00
Michael Klemm
7359edbc09
[Flang][runtime] Distinguish CPU time and elapsed time for cpu_time and system_clock (#96652)
The current implementation for `system_clock()` returns the CPU time
instead of elapsed wallclock time. This PR fixes the issue and makes
`system_clock()` correctly return elapsed time.
2024-07-02 18:37:33 +02:00
Craig Topper
e414bf9fff
[LangRef] Document the fourth operand for vp.cttz/ctlz. NFC (#97387) 2024-07-02 09:26:54 -07:00
Craig Topper
e3500ea488
[LangRef] Replace 'the argument' with 'the first argument' in llvm.abs description. NFC (#97386)
Make it more clear which argument we're referring to.

Similar for vp.abs.
2024-07-02 09:26:31 -07:00
Amir Ayupov
344228ebf4 [BOLT] Drop macro-fusion alignment (#97358)
9d0754ada5dbbc0c009bcc2f7824488419cc5530 dropped MC support required for
optimal macro-fusion alignment in BOLT. Remove the support in BOLT as
performance measurements with large binaries didn't show a significant
improvement.

Test Plan:
macro-fusion alignment was never upstreamed, so no upstream tests are
affected.
2024-07-02 09:20:41 -07:00
Simon Pilgrim
1f7d31e342 [AMDGPU] Regenerate srem.ll tests - more closely match the testing in sdiv.ll 2024-07-02 17:14:39 +01:00
Simon Pilgrim
13be6ee7da Fix MSVC discarded return value warnings. NFC.
"C4858 This function constructs an object wrapped by a smart pointer and has no other effects; it is not useful to call this function and discard the return value."
2024-07-02 17:14:39 +01:00
srcarroll
6820b08718
Refactor LoopFuseSiblingOp and support parallel fusion (#94391)
This patch refactors code related to `LoopFuseSiblingOp` transform in
attempt to reduce duplicate common code. The aim is to refactor as much
as possible to a functions on `LoopLikeOpInterface`s, but this is still
a work in progress. A full refactor will require more additions to the
`LoopLikeOpInterface`.

 In addition, `scf.parallel` fusion support has been added.
2024-07-02 11:12:51 -05:00
Giuseppe Rossini
6c3897d90e
Fix block merging (#96871)
With this PR I am trying to address:
https://github.com/llvm/llvm-project/issues/63230.

What changed:
- While merging identical blocks, don't add a block argument if it is
"identical" to another block argument. I.e., if the two block arguments
refer to the same `Value`. The operations operands in the block will
point to the argument we already inserted
- After merged the blocks, get rid of "unnecessary" arguments. I.e., if
all the predecessors pass the same block argument, there is no need to
pass it as an argument.
- This last simplification clashed with
`BufferDeallocationSimplification`. The reason, I think, is that the two
simplifications are clashing. I.e., `BufferDeallocationSimplification`
contains an analysis based on the block structure. If we simplify the
block structure (by merging and/or dropping block arguments) the
analysis is invalid . The solution I found is to do a more prudent
simplification when running that pass.

**Note**: many tests are still not passing. But I wanted to submit the
code before changing all the tests (and probably adding a couple), so
that we can agree in principle on the algorithm/design.
2024-07-02 17:12:33 +01:00
Vasileios Porpodas
123beb7926 [NFC][SandboxIR] Drop namespace:: prefix. 2024-07-02 09:07:38 -07:00
Davide Italiano
f80a4072ce Revert "[MC] Use a stub ctor for MCAsmLayout"
This reverts commit bbb50369a149d9a7d1f91efaaabf75c260a220c7.

This breaks BOLT.
2024-07-02 08:54:18 -07:00
Davide Italiano
ac0b48a0db Revert "MCAssembler::layout: remove the unused MCAsmLayout parameter"
This reverts commit 63ec52f867ada8d841dd872acf3d0cb62e2a99e8.
2024-07-02 08:54:05 -07:00
Davide Italiano
46f7929879 Revert "Remove llvm/MC/MCAsmLayout.h"
This reverts commit 122db8b2cb7fa43ce1d6dc17148080579fcfb55a.
2024-07-02 08:53:48 -07:00
Davide Italiano
48263bd7e7 Revert "[MC] Remove assert to work around BOLT"
This reverts commit c72cb2766cec0ac519a051780ae5aed42485e012.
The patch was not reviewed, and this assertion guards against incorrect
values for symbols if the linker decides to modify the layout as it
happens on some platforms. getSymbolOffset() is used for code size
estimation, among others.

Reverting for now, until we get proper code review and undersatnding of
the implications.
2024-07-02 08:41:24 -07:00
Pete Steinfeld
70969df73d
[flang] Improve warnings for invalid arguments when folding host runtime (#96807)
This is another attempt at a change that Jean made to Phabricator in
https://reviews.llvm.org/D116934. That attempt ran into problems with
building on Windows.

This change improves the messages that are produced when running into
invalid arguments during constant folding.

Note that the original attempt at implementing this contained additional
code in .../llvm-project/flang/test/Evaluate/folding04.f90:
```
  !WARN: warning: argument 'x' must be strictly positive
  real(8), parameter :: nan_r8_dlog1 = dlog(-0.1_8)
  TEST_ISNAN(nan_r8_dlog1)
```
For reasons I don't understand, this additional code caused the Windows
build to fail. So this new version of the update does not contain that
code.
2024-07-02 08:38:43 -07:00
Harald van Dijk
5ee53d417f
[libclc] Fix cross in-tree builds (#97392)
When performing cross in-tree builds, we need native versions of various
tools, we cannot assume the cross builds that are part of the current
build are executable. LLVM provides the setup_host_tool function to
handle this, either picking up versions of tools from
LLVM_NATIVE_TOOL_DIR, or implicitly building native versions as needed.
Use it for libclc too.

LLVM's setup_host_tool function assumes the project is LLVM, so this
also needs libclc's project() to be conditional on it being built
standalone. Luckily, the only change this needs is using
CMAKE_CURRENT_SOURCE_DIR instead of PROJECT_SOURCE_DIR.
2024-07-02 16:26:58 +01:00
Nikita Popov
abb5bd3732 [CVP] Add vector test cases (NFC) 2024-07-02 17:24:16 +02:00
Paul Kirth
b146a57f67
Reapply "[RISCV] Support RISCV Atomics ABI attributes (#84597)"
This patch adds support for the atomic_abi attribute, specifid in
https://github.com/riscv-non-isa/riscv-elf-psabi-doc/blob/master/riscv-elf.adoc#tag_riscv_atomic_abi-14-uleb128version.

This was previously reverted due to ld.bfd segfaulting w/ unknown riscv
attributes. Attribute emission is now guarded by a backend flag
`--riscv-abi-attributes`, which is off by default. Linker support in
LLD for attribute merging is now in a standalone patch.

Reviewers: kito-cheng, MaskRay, asb

Reviewed By: MaskRay

Pull Request: https://github.com/llvm/llvm-project/pull/90266
2024-07-02 08:23:03 -07:00
James Y Knight
cfbad45339
Add a regression test for recent regression in pair. (#97355)
PR #96165 broke code similar to this test, and was subsequently
reverted. Add a test-case, to ensure the problem won't reoccur.

This error is potentially related to issues #59292 and #59966.
2024-07-02 11:20:37 -04:00
Jay Foad
43b9888214
[AMDGPU] Use nan as the identity for atomicrmw fmax/fmin (#97411)
atomicrmw fmax/fmin perform the same operation as llvm.maxnum/minnum
which return the other operand if one operand is nan. This means that,
in the presence of nan arguments, +/- inf is not an identity for these
operations but nan is (at least if you don't care about nan payloads).
2024-07-02 15:45:36 +01:00
Nikita Popov
9f8f6ce53c [SROA] Avoid expensive isComplete() call (NFC)
https://github.com/llvm/llvm-project/pull/83381 introduced a call
to PHINode::isComplete() in Mem2Reg, which is O(n^2) in the number
of predecessors, resulting in pathological compile-time regressions
for cases with many predecessors.

Remove the isComplete() check and instead cache the attribute
lookup, to only perform it once per function. Actually setting
the FMF flag is cheap.
2024-07-02 16:41:56 +02:00
Aaron Ballman
a0ab0ca7a7 [C2y] Add diagnostics for alignof on an incomplete array
Clang implemented WG14 N3273 since Clang 3.5
2024-07-02 10:34:34 -04:00
Matt Arsenault
940ea5b8c5 AMDGPU: Add some exotic truncating store tests
PR#97010 is touching the legalize rules for 5 vector stores,
but not all of them so check some more cases to make sure they work.
2024-07-02 16:33:36 +02:00
LLVM GN Syncbot
dacdb8db01 [gn build] Port 410de0c8c831 2024-07-02 14:14:56 +00:00
Gheorghe-Teodor Bercea
f0567702aa
[OpenMP] Add missing export for dynamic tracking patch (#97419)
Add missing export for OpenMP non-offloading builds.
2024-07-02 10:09:27 -04:00