Revision tags: llvmorg-21-init, llvmorg-19.1.7, llvmorg-19.1.6 |
|
#
a7dafea3 |
| 17-Dec-2024 |
Benjamin Maxwell <benjamin.maxwell@arm.com> |
[SDAG] Allow folding stack slots into sincos/frexp in more cases (#118117)
This adds a new helper `canFoldStoreIntoLibCallOutputPointers()` to check that it is safe to fold a store into a node that
[SDAG] Allow folding stack slots into sincos/frexp in more cases (#118117)
This adds a new helper `canFoldStoreIntoLibCallOutputPointers()` to check that it is safe to fold a store into a node that will expand to a library call that takes output pointers. This requires checking for two (independent) properties:
1. The store is not within a CALLSEQ_START..CALLSEQ_END pair * If it is, the expansion would lead to nested call sequences (which is invalid) 2. The node does not appear as a predecessor to the store * If it does, attempting to merge the store into the call would result in a cycle in the DAG
These two properties are checked as part of the same traversal in `canFoldStoreIntoLibCallOutputPointers()`
show more ...
|
Revision tags: llvmorg-19.1.5, llvmorg-19.1.4 |
|
#
9122c523 |
| 15-Nov-2024 |
Pengcheng Wang <wangpengcheng.pp@bytedance.com> |
[RISCV] Enable bidirectional scheduling and tracking register pressure (#115445)
This is based on other targets like PPC/AArch64 and some experiments.
This PR will only enable bidirectional schedu
[RISCV] Enable bidirectional scheduling and tracking register pressure (#115445)
This is based on other targets like PPC/AArch64 and some experiments.
This PR will only enable bidirectional scheduling and tracking register pressure.
Disclaimer: I haven't tested it on many cores, maybe we should make some options being features. I believe downstreams must have tried this before, so feedbacks are welcome.
show more ...
|
#
014455a5 |
| 12-Nov-2024 |
Benjamin Maxwell <benjamin.maxwell@arm.com> |
[SDAG] Limit sincos/frexp stack slot folding to stores chained to entry (#115906)
When the chain is not the entry node there is a risk the stores are
within a (CALLSEQ_START, CALLSEQ_END), which wh
[SDAG] Limit sincos/frexp stack slot folding to stores chained to entry (#115906)
When the chain is not the entry node there is a risk the stores are
within a (CALLSEQ_START, CALLSEQ_END), which when the node is expanded
will lead to nested call sequences.
It should be possible to check for this and allow more cases, but for
now, let's limit this to cases where it's definitely safe.
Fixes #115323
show more ...
|
#
ea6b8fa4 |
| 06-Nov-2024 |
Benjamin Maxwell <benjamin.maxwell@arm.com> |
[SDAG] Merge multiple-result libcall expansion into DAG.expandMultipleResultFPLibCall() (#114792)
This merges the logic for expanding both FFREXP and FSINCOS into one
method `DAG.expandMultipleResu
[SDAG] Merge multiple-result libcall expansion into DAG.expandMultipleResultFPLibCall() (#114792)
This merges the logic for expanding both FFREXP and FSINCOS into one
method `DAG.expandMultipleResultFPLibCall()`. This reduces duplication
and also allows FFREXP to benefit from the stack slot elimination
implemented for FSINCOS. This method will also be used in future to
implement more multiple-result intrinsics (such as modf and sincospi).
show more ...
|
Revision tags: llvmorg-19.1.3, llvmorg-19.1.2 |
|
#
2967e5f8 |
| 11-Oct-2024 |
Alex Bradbury <asb@igalia.com> |
[RISCV] Enable store clustering by default (#73796)
Builds on #73789, enabling store clustering by default using the same
heuristic.
|
#
bc91f3cd |
| 02-Oct-2024 |
Craig Topper <craig.topper@sifive.com> |
[RISCV] Add 32 bit GPR sub-register for Zfinx. (#108336)
This patches adds a 32 bit register class for use with Zfinx instructions. This makes them more similar to F instructions and allows us to on
[RISCV] Add 32 bit GPR sub-register for Zfinx. (#108336)
This patches adds a 32 bit register class for use with Zfinx instructions. This makes them more similar to F instructions and allows us to only spill 32 bits.
I've added CodeGenOnly instructions for load/store using GPRF32 as that gave better results than insert_subreg/extract_subreg.
Function arguments use this new GPRF32 register class for f32 arguments with Zfinx. Eliminating the need to use RISCVISD::FMV* nodes.
This is similar to #107446 which adds a 16 bit register class.
show more ...
|
#
14c4f28e |
| 01-Oct-2024 |
Alex Bradbury <asb@igalia.com> |
[RISCV] Enable load clustering by default (#73789)
We believe this is neutral or slightly better in the majority of cases.
|
Revision tags: llvmorg-19.1.1, llvmorg-19.1.0, llvmorg-19.1.0-rc4, llvmorg-19.1.0-rc3, llvmorg-19.1.0-rc2, llvmorg-19.1.0-rc1, llvmorg-20-init, llvmorg-18.1.8, llvmorg-18.1.7, llvmorg-18.1.6, llvmorg-18.1.5, llvmorg-18.1.4, llvmorg-18.1.3, llvmorg-18.1.2, llvmorg-18.1.1, llvmorg-18.1.0, llvmorg-18.1.0-rc4, llvmorg-18.1.0-rc3, llvmorg-18.1.0-rc2, llvmorg-18.1.0-rc1, llvmorg-19-init |
|
#
eabaee0c |
| 07-Jan-2024 |
Fangrui Song <i@maskray.me> |
[RISCV] Omit "@plt" in assembly output "call foo@plt" (#72467)
R_RISCV_CALL/R_RISCV_CALL_PLT distinction is not necessary and R_RISCV_CALL has been deprecated. Since https://reviews.llvm.org/D132530
[RISCV] Omit "@plt" in assembly output "call foo@plt" (#72467)
R_RISCV_CALL/R_RISCV_CALL_PLT distinction is not necessary and R_RISCV_CALL has been deprecated. Since https://reviews.llvm.org/D132530 `call foo` assembles to R_RISCV_CALL_PLT. The `@plt` suffix is not useful and can be removed now (matching AArch64 and PowerPC).
GNU assembler assembles `call foo` to RISCV_CALL_PLT since 2022-09 (70f35d72ef04cd23771875c1661c9975044a749c).
Without this patch, unconditionally changing MO_CALL to MO_PLT could create `jump .L1@plt, a0`, which is invalid in LLVM integrated assembler and GNU assembler.
show more ...
|
#
03edfe61 |
| 07-Dec-2023 |
Harald van Dijk <harald@gigawatt.nl> |
Implement SoftPromoteHalf for FFREXP. (#74076)
`llvm/test/CodeGen/RISCV/llvm.frexp.ll` and
`llvm/test/CodeGen/X86/llvm.frexp.ll` contain a number of disabled tests
for unimplemented functionality.
Implement SoftPromoteHalf for FFREXP. (#74076)
`llvm/test/CodeGen/RISCV/llvm.frexp.ll` and
`llvm/test/CodeGen/X86/llvm.frexp.ll` contain a number of disabled tests
for unimplemented functionality. This implements one missing part of it.
show more ...
|
Revision tags: llvmorg-17.0.6, llvmorg-17.0.5, llvmorg-17.0.4, llvmorg-17.0.3, llvmorg-17.0.2, llvmorg-17.0.1, llvmorg-17.0.0, llvmorg-17.0.0-rc4, llvmorg-17.0.0-rc3, llvmorg-17.0.0-rc2, llvmorg-17.0.0-rc1, llvmorg-18-init |
|
#
619c6c0e |
| 06-Jul-2023 |
Alex Bradbury <asb@igalia.com> |
[RISCV][test] Add RV32I and RV64I RUN lines to llvm.frexp.ll
Thanks to D154555, these intrinsics no longer crash when used with a soft float ABI.
|
#
e8ed6e35 |
| 05-Jul-2023 |
Matt Arsenault <Matthew.Arsenault@amd.com> |
DAG: Implement soften float for ffrexp
Fixes #63661
https://reviews.llvm.org/D154555
|
#
2ae71f54 |
| 05-Jul-2023 |
Alex Bradbury <asb@igalia.com> |
[RISCV][test] Add commented out f128 test for llvm.frexp.ll
This represents the crash reported in <https://github.com/llvm/llvm-project/issues/63661>
|
#
7de4c6f8 |
| 05-Jul-2023 |
Alex Bradbury <asb@igalia.com> |
[RISCV][test] Add test coverage for llvm.frexp.*.* intrinsics
Reapply - the issue was that the `< %s` was missing in the RUN lines, which didn't impact update_llc_test_checks but of course caused is
[RISCV][test] Add test coverage for llvm.frexp.*.* intrinsics
Reapply - the issue was that the `< %s` was missing in the RUN lines, which didn't impact update_llc_test_checks but of course caused issues for lit.
The test file is copied from X86 (which is also mostly shared with Arm, PowerPC) rather than integrated into float-intrinsics.ll and double-intrinsics.ll.
There's currently a compiler crash for the soft float cases (expect this is the issue in <https://github.com/llvm/llvm-project/issues/63661>) which will be a addressed with a follow-on patch posted for review.
show more ...
|
#
4b8162fe |
| 05-Jul-2023 |
Alex Bradbury <asb@igalia.com> |
[RISCV][test] Add test coverage for llvm.frexp.*.* intrinsics
The test file is copied from X86 (which is also mostly shared with Arm, PowerPC) rather than integrated into float-intrinsics.ll and dou
[RISCV][test] Add test coverage for llvm.frexp.*.* intrinsics
The test file is copied from X86 (which is also mostly shared with Arm, PowerPC) rather than integrated into float-intrinsics.ll and double-intrinsics.ll.
There's currently a compiler crash for the soft float cases (expect this is the issue in <https://github.com/llvm/llvm-project/issues/63661>) which will be a addressed with a follow-on patch posted for review.
show more ...
|