-
Notifications
You must be signed in to change notification settings - Fork 11.1k
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] Make PostRAScheduler a target feature #68692
[RISCV] Make PostRAScheduler a target feature #68692
Conversation
This is what AArch64 has done in https://reviews.llvm.org/D20762. Tests are added in macro fusion tests, which uncover a bug that DAG mutations don't take effect.
@llvm/pr-subscribers-backend-risc-v Author: Wang Pengcheng (wangpc-pp) ChangesThis is what AArch64 has done in https://reviews.llvm.org/D20762\. Tests are added in macro fusion tests, which uncover a bug that Full diff: https://github.com/llvm/llvm-project/pull/68692.diff 3 Files Affected:
diff --git a/llvm/lib/Target/RISCV/RISCVFeatures.td b/llvm/lib/Target/RISCV/RISCVFeatures.td
index 3d3486b7fa89563..548579173f0ede4 100644
--- a/llvm/lib/Target/RISCV/RISCVFeatures.td
+++ b/llvm/lib/Target/RISCV/RISCVFeatures.td
@@ -902,6 +902,9 @@ def FeatureUnalignedVectorMem
"true", "Has reasonably performant unaligned vector "
"loads and stores">;
+def FeaturePostRAScheduler : SubtargetFeature<"use-postra-scheduler",
+ "UsePostRAScheduler", "true", "Schedule again after register allocation">;
+
def TuneNoOptimizedZeroStrideLoad
: SubtargetFeature<"no-optimized-zero-stride-load", "HasOptimizedZeroStrideLoad",
"false", "Hasn't optimized (perform fewer memory operations)"
diff --git a/llvm/lib/Target/RISCV/RISCVSubtarget.h b/llvm/lib/Target/RISCV/RISCVSubtarget.h
index 027d32d54160793..6b915e61c136086 100644
--- a/llvm/lib/Target/RISCV/RISCVSubtarget.h
+++ b/llvm/lib/Target/RISCV/RISCVSubtarget.h
@@ -107,6 +107,10 @@ class RISCVSubtarget : public RISCVGenSubtargetInfo {
}
bool enableMachineScheduler() const override { return true; }
+ bool enablePostRAScheduler() const override {
+ return getSchedModel().PostRAScheduler || UsePostRAScheduler;
+ }
+
Align getPrefFunctionAlignment() const {
return Align(TuneInfo->PrefFunctionAlignment);
}
diff --git a/llvm/test/CodeGen/RISCV/macro-fusion-lui-addi.ll b/llvm/test/CodeGen/RISCV/macro-fusion-lui-addi.ll
index 7de0fd050d65867..18d1449d0e2e837 100644
--- a/llvm/test/CodeGen/RISCV/macro-fusion-lui-addi.ll
+++ b/llvm/test/CodeGen/RISCV/macro-fusion-lui-addi.ll
@@ -3,6 +3,8 @@
;RUN: | FileCheck %s --check-prefix=NOFUSION
;RUN: llc < %s -mtriple=riscv64 -mattr=+f,+lui-addi-fusion -mcpu=sifive-u74 \
;RUN: -target-abi=lp64f | FileCheck %s --check-prefix=FUSION
+;RUN: llc < %s -mtriple=riscv64 -mattr=+f,+lui-addi-fusion,+use-postra-scheduler -mcpu=sifive-u74 \
+;RUN: -target-abi=lp64f | FileCheck %s --check-prefixes=FUSION-POSTRA
@.str = private constant [4 x i8] c"%f\0A\00", align 1
@@ -20,6 +22,13 @@ define void @foo(i32 signext %0, i32 signext %1) {
; FUSION-NEXT: lui a0, %hi(.L.str)
; FUSION-NEXT: addi a0, a0, %lo(.L.str)
; FUSION-NEXT: tail bar@plt
+;
+; FUSION-POSTRA-LABEL: foo:
+; FUSION-POSTRA: # %bb.0:
+; FUSION-POSTRA-NEXT: lui a0, %hi(.L.str)
+; FUSION-POSTRA-NEXT: fcvt.s.w fa0, a1
+; FUSION-POSTRA-NEXT: addi a0, a0, %lo(.L.str)
+; FUSION-POSTRA-NEXT: tail bar@plt
%3 = sitofp i32 %1 to float
tail call void @bar(ptr @.str, float %3)
ret void
@@ -40,5 +49,11 @@ define i32 @test_matint() {
; FUSION-NEXT: lui a0, 1
; FUSION-NEXT: addiw a0, a0, -2048
; FUSION-NEXT: ret
+;
+; FUSION-POSTRA-LABEL: test_matint:
+; FUSION-POSTRA: # %bb.0:
+; FUSION-POSTRA-NEXT: lui a0, 1
+; FUSION-POSTRA-NEXT: addiw a0, a0, -2048
+; FUSION-POSTRA-NEXT: ret
ret i32 2048
}
|
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.
This is what AArch64 has done in https://reviews.llvm.org/D20762.
Tests are added in macro fusion tests, which uncover a bug that
DAG mutations don't take effect.