Revision tags: llvmorg-18.1.8, llvmorg-18.1.7, llvmorg-18.1.6, llvmorg-18.1.5 |
|
#
f6d431f2 |
| 24-Apr-2024 |
Xu Zhang <simonzgx@gmail.com> |
[CodeGen] Make the parameter TRI required in some functions. (#85968)
Fixes #82659
There are some functions, such as `findRegisterDefOperandIdx` and `findRegisterDefOperand`, that have too many
[CodeGen] Make the parameter TRI required in some functions. (#85968)
Fixes #82659
There are some functions, such as `findRegisterDefOperandIdx` and `findRegisterDefOperand`, that have too many default parameters. As a result, we have encountered some issues due to the lack of TRI parameters, as shown in issue #82411.
Following @RKSimon 's suggestion, this patch refactors 9 functions, including `{reads, kills, defines, modifies}Register`, `registerDefIsDead`, and `findRegister{UseOperandIdx, UseOperand, DefOperandIdx, DefOperand}`, adjusting the order of the TRI parameter and making it required. In addition, all the places that call these functions have also been updated correctly to ensure no additional impact.
After this, the caller of these functions should explicitly know whether to pass the `TargetRegisterInfo` or just a `nullptr`.
show more ...
|
Revision tags: 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 |
|
#
df08350d |
| 25-Jan-2024 |
Yeting Kuo <46629943+yetingk@users.noreply.github.com> |
[RISCV] Implement foward inserting save/restore FRM instructions. (#77744)
Previously, RISCVInsertReadWriteCSR inserted an FRM swap for any value
other than 7 and restored the original value right
[RISCV] Implement foward inserting save/restore FRM instructions. (#77744)
Previously, RISCVInsertReadWriteCSR inserted an FRM swap for any value
other than 7 and restored the original value right after the vector
instruction. This is inefficient if multiple vector instructions use the
same rounding mode if the next vector instruction uses a different
explicit rounding mode.
This patch implements a local optimization to solve the above problem.
We assume the starting rounding mode of the basic block is "dynamic."
When iterating through a basic block and encountering an instruction
whose rounding mode is not the same as the current rounding mode, we
change the current rounding mode and save the current rounding mode if
needed. And we may need to restore FRM when encountering function call,
inline asm and some uses of FRM.
The advanced version of this is to perform cross basic block analysis
for the starting rounding mode of each basic block.
show more ...
|
Revision tags: llvmorg-19-init |
|
#
4162a9bc |
| 08-Dec-2023 |
Craig Topper <craig.topper@sifive.com> |
[RISCV] Cleanup pass initialization.
Remove redundant initializations from pass constructors that were already being initialized by LLVMInitializeRISCVTarget().
|
Revision tags: llvmorg-17.0.6, llvmorg-17.0.5 |
|
#
014390d9 |
| 02-Nov-2023 |
Craig Topper <craig.topper@sifive.com> |
[RISCV] Implement cross basic block VXRM write insertion. (#70382)
This adds a new pass to insert VXRM writes for vector instructions. With
the goal of avoiding redundant writes.
The pass does 2
[RISCV] Implement cross basic block VXRM write insertion. (#70382)
This adds a new pass to insert VXRM writes for vector instructions. With
the goal of avoiding redundant writes.
The pass does 2 dataflow algorithms. The first is a forward data flow to
calculate where a VXRM value is available. The second is a backwards
dataflow to determine where a VXRM value is anticipated.
Finally, we use the results of these two dataflows to insert VXRM writes
where a value is anticipated, but not available.
The pass does not split critical edges so we aren't always able to
eliminate all redundancy.
The pass will only insert vxrm writes on paths that always require it.
show more ...
|
Revision tags: 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 |
|
#
b441fd60 |
| 21-Aug-2023 |
Craig Topper <craig.topper@sifive.com> |
[RISCV] Separate hasRoundModeOpNum into separate VXRM and FRM functions.
Preparation for developing a new rounding mode insertion algorithm that is going to be different between them since VXRM does
[RISCV] Separate hasRoundModeOpNum into separate VXRM and FRM functions.
Preparation for developing a new rounding mode insertion algorithm that is going to be different between them since VXRM doesn't need to be save/restored.
This also unifies the FRM handling in RISCVISelLowering.cpp between scalar and vector.
Fixes outdated comments in RISCVAsmPrinter and sorts the predicate function by the reverse order of the operands being skipped.
Reviewed By: eopXD
Differential Revision: https://reviews.llvm.org/D158326
show more ...
|
#
80ce7ce9 |
| 18-Aug-2023 |
Craig Topper <craig.topper@sifive.com> |
[RISCV] Mention frm in addition to vxrm in the comments for RISCVInsertReadWriteCSR. NFC
|
#
42dad521 |
| 16-Aug-2023 |
Craig Topper <craig.topper@sifive.com> |
[RISCV] Add RISCVII::getRoundModeOpNum to reduce code duplication. NFC
|
Revision tags: llvmorg-17.0.0-rc2, llvmorg-17.0.0-rc1, llvmorg-18-init |
|
#
76482078 |
| 15-Jun-2023 |
eopXD <yueh.ting.chen@gmail.com> |
[RISCV][POC] Model frm control for vfadd
Depends on D152879.
Specification PR: riscv-non-isa/rvv-intrinsic-doc#226
This patch adds variant of `vfadd` that models the rounding mode control. The add
[RISCV][POC] Model frm control for vfadd
Depends on D152879.
Specification PR: riscv-non-isa/rvv-intrinsic-doc#226
This patch adds variant of `vfadd` that models the rounding mode control. The added variant has suffix `_rm` appended to differentiate from the existing ones that does not alternate `frm` and uses whatever is inside.
The value `7` is used to indicate no rounding mode change. Reusing the semantic from the rounding mode encoding for scalar floating-point instructions.
Additional data member `HasFRMRoundModeOp` is added so we can append `_rm` suffix for the fadd variants that models rounding mode control.
Additional data member `IsRVVFixedPoint` is added so we can define pseudo instructions with rounding mode operand and distinguish the instructions between fixed-point and floating-point.
Reviewed By: craig.topper, kito-cheng
Differential Revision: https://reviews.llvm.org/D152996
show more ...
|
Revision tags: llvmorg-16.0.6, llvmorg-16.0.5 |
|
#
7c836512 |
| 23-May-2023 |
eopXD <yueh.ting.chen@gmail.com> |
[2/3][RISCV][POC] Model vxrm in LLVM intrinsics and machine instructions for RVV fixed-point instructions
Depends on D151395.
This is the 2nd patch of the patch-set. For the cover letter of the pat
[2/3][RISCV][POC] Model vxrm in LLVM intrinsics and machine instructions for RVV fixed-point instructions
Depends on D151395.
This is the 2nd patch of the patch-set. For the cover letter of the patch-set, please checkout D151395. This patch originates from D121376.
This commit models vxrm by adding an immediate operand into intrinsics and machine instructions of RVV fixed-point instruction `vaadd`, `vaaddu`, `vasub`, and `vasubu`. This commit only covers intrinsics of the four instructions, the proceeding patches of the patch-set will do the same to other RVV fixed-point instructions.
The current naiive approach is to have a write to vxrm inserted before every fixed-point instruction. This is done by the new added pass `RISCVInsertReadWriteCSR`. The reason to name the pass in a more general term is because we will also model rounding mode for the RVV floating- point instructions. The approach will be improved in the future, implementing partial redundancy elimination algorithms to it.
The original LLVM intrinsics and machine instructions, take `vaadd` as an example, does not model the rounding mode is not removed in this patch. That is, `int.riscv.vaadd.*` co-exists with `int.riscv.vaadd.rm.*` after this patch. The next patch will add C intrinsics of vaadd with an additional operand that models the control of the rounding mode, in this patch, `int.riscv.vaadd.rm.*` will replace `int.riscv.vaadd.*`.
Authored-by: ShihPo Hung <shihpo.hung@sifive.com> Co-Authored-by: eop Chen <eop.chen@sifive.com>
Reviewed By: craig.topper
Differential Revision: https://reviews.llvm.org/D151396
show more ...
|