-
Notifications
You must be signed in to change notification settings - Fork 14.3k
[RISCV] Do not check PostRAScheduler in enablePostRAScheduler #92781
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
[RISCV] Do not check PostRAScheduler in enablePostRAScheduler #92781
Conversation
@llvm/pr-subscribers-backend-risc-v Author: Michael Maitland (michaelmaitland) ChangesOn RISC-V, there are a few ways to control whether the PostMachineScheduler is enabled. If
I argue that the RISC-V backend should not use
There are no upstream subtargets that use the scheduler model Full diff: https://github.com/llvm/llvm-project/pull/92781.diff 1 Files Affected:
diff --git a/llvm/lib/Target/RISCV/RISCVSubtarget.h b/llvm/lib/Target/RISCV/RISCVSubtarget.h
index c880c9e921e0e..347c1bc3c278f 100644
--- a/llvm/lib/Target/RISCV/RISCVSubtarget.h
+++ b/llvm/lib/Target/RISCV/RISCVSubtarget.h
@@ -121,9 +121,7 @@ class RISCVSubtarget : public RISCVGenSubtargetInfo {
}
bool enableMachineScheduler() const override { return true; }
- bool enablePostRAScheduler() const override {
- return getSchedModel().PostRAScheduler || UsePostRAScheduler;
- }
+ bool enablePostRAScheduler() const override { return UsePostRAScheduler; }
Align getPrefFunctionAlignment() const {
return Align(TuneInfo->PrefFunctionAlignment);
|
Do we need to add FeaturePostRAScheduler to SiFive7, SiFiveP400, and SiFive600 in RISCVProcessors.td? |
No targets use these default implementations which would use the field from the scheduler for the PostRA MachineScheduler?
|
I didn't see this. I rephrase to targets that override |
I think it's messy now as we have two ways to enable PostRAScheduler. For AArch64, which has overrided llvm-project/llvm/lib/Target/AArch64/AArch64SchedA510.td Lines 17 to 29 in 6658e1a
I think it worths unifying the way for RISCV, and I do prefer the feature way (I think you have spoken my mind :-)). We should add a release note, add some comments and so on to emphasize that the setting of SchedMachineModel 's PostRAScheduler won't do any difference and we should add UsePostRAScheduler to Processor definitions if we want to enable it.
|
136e43b
to
bc4b7f5
Compare
Don't SiFiveP400, SiFiveP600, and SiFive7 all have |
This patch is failing 2 tests LLVM :: CodeGen/RISCV/machine-combiner.ll LLVM :: CodeGen/RISCV/short-forward-branch-opt.ll |
I am dumb and looked for |
On RISC-V, there are a few ways to control whether the PostMachineScheduler is enabled. If `-enable-post-misched` is passed or passed with a value of true, then the PostMachineScheduler is enabled. If it is passed with a value of false then the PostMachineScheduler is disabled. If the option is not passed at all, then `TargetSubtargetInfo::enablePostRAMachineScheduler` decides whether the pass should be enabled or not. `RISCVSubtarget::enablePostRAMachineScheduler` currently checks if the active scheduler model sets `PostRAScheduler`. If it is set to true by the scheduler model, then the pass is enabled. If it is not set to true by the scheduler model, then the value of `UsePostRAScheduler` subtarget feature is used. I argue that the RISC-V backend should not use `PostRAScheduler` field of the scheduler model to control whether the PostMachineScheduler is enabled for the following reasons: 1. No other targets use this value to control whether PostMachineScheduler is enabled. They only use it to check whether the legacy PostRASchedulerList scheduelr is enabled. 2. We can add the `UsePostRAScheduler` feature to the processor definition in RISCVProcessors.td to tie a processor to whether the pass should be enabled by default. This makes the feature and the sched model field redundant. 3. Since these options are redundant, we should prefer the feature, since we can set `+` and `-` on the feature, but the value of the scheduler cannot be controled on the command line. 4. Keeping both options allows us to set the feature and the scheduler model value to conflicting values. Although the scheduler model value will win out, it feels awkward to allow it. There are no upstream subtargets that use the scheduler model `PostRAScheduler` field. If this patch lands, all downstream subtargets should replace `PostRAScheduler` with the `UsePostRAScheduler` feature in RISCVProcessors.td to acheive the desired functionality.
d3523d9
to
33084bb
Compare
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
LGTM.
On RISC-V, there are a few ways to control whether the PostMachineScheduler is enabled. If
-enable-post-misched
is passed or passed with a value of true, then the PostMachineScheduler is enabled. If it is passed with a value of false then the PostMachineScheduler is disabled. If the option is not passed at all, thenRISCVSubtarget::enablePostRAMachineScheduler
decides whether the pass should be enabled or not.TargetSubtargetInfo::enablePostRAScheduler
andTargetSubtargetInfo::enablePostRAMachineScheduler
who check the SchedModel value are not called by RISC-V backend.RISCVSubtarget::enablePostRAMachineScheduler
currently checks if the active scheduler model setsPostRAScheduler
. If it is set to true by the scheduler model, then the pass is enabled. If it is not set to true by the scheduler model, then the value ofUsePostRAScheduler
subtarget feature is used.I argue that the RISC-V backend should not use
PostRAScheduler
field of the scheduler model to control whether the PostMachineScheduler is enabled for the following reasons:No other targets use this value to control whether PostMachineScheduler is enabled. They only use it to check whether the legacy PostRASchedulerList scheduler is enabled.
We can add the
UsePostRAScheduler
feature to the processor definition in RISCVProcessors.td to tie a processor to whether the pass should be enabled by default. This makes the feature and the sched model field redundant.Since these options are redundant, we should prefer the feature, since we can set
+
and-
on the feature, but the value of the scheduler cannot be controlled on the command line.Keeping both options allows us to set the feature and the scheduler model value to conflicting values. Although the scheduler model value will win out, it feels awkward to allow it.