diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoZb.td b/llvm/lib/Target/RISCV/RISCVInstrInfoZb.td --- a/llvm/lib/Target/RISCV/RISCVInstrInfoZb.td +++ b/llvm/lib/Target/RISCV/RISCVInstrInfoZb.td @@ -472,7 +472,8 @@ } // Predicates = [HasStdExtZbm, IsRV64] let Predicates = [HasStdExtZbf] in -def BFP : ALU_rr<0b0100100, 0b111, "bfp">, Sched<[]>; +def BFP : ALU_rr<0b0100100, 0b111, "bfp">, + Sched<[WriteBFP, ReadBFP, ReadBFP]>; let Predicates = [HasStdExtZbp] in { def SHFLI : RVBShfl_ri<0b0000100, 0b001, OPC_OP_IMM, "shfli">, Sched<[]>; @@ -553,7 +554,8 @@ } // Predicates = [HasStdExtZbp, IsRV64] let Predicates = [HasStdExtZbf, IsRV64] in -def BFPW : ALUW_rr<0b0100100, 0b111, "bfpw">, Sched<[]>; +def BFPW : ALUW_rr<0b0100100, 0b111, "bfpw">, + Sched<[WriteBFP32, ReadBFP32, ReadBFP32]>; let Predicates = [HasStdExtZbbOrZbp, IsRV32] in { let hasSideEffects = 0, mayLoad = 0, mayStore = 0 in diff --git a/llvm/lib/Target/RISCV/RISCVSchedRocket.td b/llvm/lib/Target/RISCV/RISCVSchedRocket.td --- a/llvm/lib/Target/RISCV/RISCVSchedRocket.td +++ b/llvm/lib/Target/RISCV/RISCVSchedRocket.td @@ -237,5 +237,6 @@ defm : UnsupportedSchedV; defm : UnsupportedSchedZba; defm : UnsupportedSchedZbb; +defm : UnsupportedSchedZbf; defm : UnsupportedSchedZfh; } diff --git a/llvm/lib/Target/RISCV/RISCVSchedSiFive7.td b/llvm/lib/Target/RISCV/RISCVSchedSiFive7.td --- a/llvm/lib/Target/RISCV/RISCVSchedSiFive7.td +++ b/llvm/lib/Target/RISCV/RISCVSchedSiFive7.td @@ -224,5 +224,6 @@ defm : UnsupportedSchedV; defm : UnsupportedSchedZba; defm : UnsupportedSchedZbb; +defm : UnsupportedSchedZbf; defm : UnsupportedSchedZfh; } diff --git a/llvm/lib/Target/RISCV/RISCVScheduleB.td b/llvm/lib/Target/RISCV/RISCVScheduleB.td --- a/llvm/lib/Target/RISCV/RISCVScheduleB.td +++ b/llvm/lib/Target/RISCV/RISCVScheduleB.td @@ -26,6 +26,10 @@ def WriteREV8 : SchedWrite; def WriteORCB : SchedWrite; +// Zbf extension +def WriteBFP : SchedWrite; // BFP +def WriteBFP32 : SchedWrite; // BFPW + /// Define scheduler resources associated with use operands. // Zba extension @@ -46,6 +50,10 @@ def ReadREV8 : SchedRead; def ReadORCB : SchedRead; +// Zbf extension +def ReadBFP : SchedRead; // BFP +def ReadBFP32 : SchedRead; // BFPW + /// Define default scheduler resources for B. multiclass UnsupportedSchedZba { @@ -87,3 +95,13 @@ def : ReadAdvance; } } + +multiclass UnsupportedSchedZbf { +let Unsupported = true in { +def : WriteRes; +def : WriteRes; + +def : ReadAdvance; +def : ReadAdvance; +} +}