diff --git a/llvm/lib/Target/RISCV/RISCVInstrInfoZb.td b/llvm/lib/Target/RISCV/RISCVInstrInfoZb.td index 6604c8be2ddba..50ecd8b8da998 100644 --- a/llvm/lib/Target/RISCV/RISCVInstrInfoZb.td +++ b/llvm/lib/Target/RISCV/RISCVInstrInfoZb.td @@ -374,8 +374,10 @@ def BEXTI : RVBShift_ri<0b01001, 0b101, OPC_OP_IMM, "bexti">, // the draft bit manipulation specification they were included in. However, we // use the mnemonics given to them in the ratified Zbkx extension. let Predicates = [HasStdExtZbkx] in { -def XPERM4 : ALU_rr<0b0010100, 0b010, "xperm4">, Sched<[]>; -def XPERM8 : ALU_rr<0b0010100, 0b100, "xperm8">, Sched<[]>; +def XPERM4 : ALU_rr<0b0010100, 0b010, "xperm4">, + Sched<[WriteXPERM, ReadXPERM, ReadXPERM]>; +def XPERM8 : ALU_rr<0b0010100, 0b100, "xperm8">, + Sched<[WriteXPERM, ReadXPERM, ReadXPERM]>; } // Predicates = [HasStdExtZbkx] let Predicates = [HasStdExtZbb] in { @@ -464,13 +466,13 @@ def ORC_B : RVBUnary<0b0010100, 0b00111, 0b101, OPC_OP_IMM, "orc.b">, let Predicates = [HasStdExtZbkb] in def BREV8 : RVBUnary<0b0110100, 0b00111, 0b101, OPC_OP_IMM, "brev8">, - Sched<[]>; + Sched<[WriteBREV8, ReadBREV8]>; let Predicates = [HasStdExtZbkb, IsRV32] in { def ZIP_RV32 : RVBUnary<0b0000100, 0b01111, 0b001, OPC_OP_IMM, "zip">, - Sched<[]>; + Sched<[WriteZIP, ReadZIP]>; def UNZIP_RV32 : RVBUnary<0b0000100, 0b01111, 0b101, OPC_OP_IMM, "unzip">, - Sched<[]>; + Sched<[WriteZIP, ReadZIP]>; } // Predicates = [HasStdExtZbkb, IsRV32] diff --git a/llvm/lib/Target/RISCV/RISCVSchedRocket.td b/llvm/lib/Target/RISCV/RISCVSchedRocket.td index f39f7c71c23f9..4bfd352edca3d 100644 --- a/llvm/lib/Target/RISCV/RISCVSchedRocket.td +++ b/llvm/lib/Target/RISCV/RISCVSchedRocket.td @@ -244,5 +244,6 @@ defm : UnsupportedSchedZbb; defm : UnsupportedSchedZbc; defm : UnsupportedSchedZbs; defm : UnsupportedSchedZbkb; +defm : UnsupportedSchedZbkx; defm : UnsupportedSchedZfh; } diff --git a/llvm/lib/Target/RISCV/RISCVSchedSiFive7.td b/llvm/lib/Target/RISCV/RISCVSchedSiFive7.td index 86d77e68b3c11..32e2b1f6d1e4e 100644 --- a/llvm/lib/Target/RISCV/RISCVSchedSiFive7.td +++ b/llvm/lib/Target/RISCV/RISCVSchedSiFive7.td @@ -231,5 +231,6 @@ defm : UnsupportedSchedZbb; defm : UnsupportedSchedZbc; defm : UnsupportedSchedZbs; defm : UnsupportedSchedZbkb; +defm : UnsupportedSchedZbkx; defm : UnsupportedSchedZfh; } diff --git a/llvm/lib/Target/RISCV/RISCVScheduleB.td b/llvm/lib/Target/RISCV/RISCVScheduleB.td index b0947500fecc6..324216df03805 100644 --- a/llvm/lib/Target/RISCV/RISCVScheduleB.td +++ b/llvm/lib/Target/RISCV/RISCVScheduleB.td @@ -34,10 +34,13 @@ def WriteSingleBit : SchedWrite; // BCLR/BSET/BINV/BEXT def WriteSingleBitImm: SchedWrite; // BCLRI/BSETI/BINVI/BEXTI // Zbkb extension +def WriteBREV8 : SchedWrite; // brev8 def WritePACK : SchedWrite; // pack/packh def WritePACK32 : SchedWrite; // packw -def WritePACKU : SchedWrite; // packu -def WritePACKU32 : SchedWrite; // packuw +def WriteZIP : SchedWrite; // zip/unzip + +// Zbkx extension +def WriteXPERM : SchedWrite; // xperm4/xperm8 /// Define scheduler resources associated with use operands. @@ -67,10 +70,13 @@ def ReadSingleBit : SchedRead; // BCLR/BSET/BINV/BEXT def ReadSingleBitImm: SchedRead; // BCLRI/BSETI/BINVI/BEXTI // Zbkb extension +def ReadBREV8 : SchedRead; // brev8 def ReadPACK : SchedRead; // pack/packh def ReadPACK32 : SchedRead; // packw -def ReadPACKU : SchedRead; // packu -def ReadPACKU32 : SchedRead; // packuw +def ReadZIP : SchedRead; // zip/unzip + +// Zbkx extension +def ReadXPERM : SchedRead; // xperm4/xperm8 /// Define default scheduler resources for B. @@ -134,14 +140,22 @@ def : ReadAdvance; multiclass UnsupportedSchedZbkb { let Unsupported = true in { +def : WriteRes; def : WriteRes; def : WriteRes; -def : WriteRes; -def : WriteRes; +def : WriteRes; +def : ReadAdvance; def : ReadAdvance; def : ReadAdvance; -def : ReadAdvance; -def : ReadAdvance; +def : ReadAdvance; +} +} + +multiclass UnsupportedSchedZbkx { +let Unsupported = true in { +def : WriteRes; + +def : ReadAdvance; } }