michaelmaitland created this revision. michaelmaitland added reviewers: craig.topper, kito-cheng, reames. Herald added subscribers: jobnoorman, luke, VincentWu, vkmr, frasercrmck, evandro, luismarques, apazos, sameer.abuasal, s.egerton, Jim, benna, psnobl, jocewei, PkmX, the_o, brucehoult, MartinMosbeck, rogfer01, edward-jones, zzheng, jrtc27, shiva0217, niosHD, sabuasal, simoncook, johnrusso, rbar, asb, hiraditya, arichardson. Herald added a project: All. michaelmaitland requested review of this revision. Herald added subscribers: llvm-commits, cfe-commits, pcwang-thead, eopXD, MaskRay. Herald added projects: clang, LLVM.
Based on the following description from Andrew W. - Instructions not mentioned here behave the same as integer ALU ops - rev8 only executes in the late-A and late-B ALUs - shNadd[.uw] only execute on the early-B and late-B ALUs - clz[w], ctz[w], and orc.b and all rotates only execute in the late-B ALU - pcnt[w] looks exactly like integer multiply This patch does not account for early/late ALU in the model. It is coded based on the pipes only. Co-Authored-By: topperc <craig.top...@sifive.com> Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D149497 Files: clang/test/Driver/riscv-cpus.c llvm/lib/Target/RISCV/RISCVProcessors.td llvm/lib/Target/RISCV/RISCVSchedSiFive7.td Index: llvm/lib/Target/RISCV/RISCVSchedSiFive7.td =================================================================== --- llvm/lib/Target/RISCV/RISCVSchedSiFive7.td +++ llvm/lib/Target/RISCV/RISCVSchedSiFive7.td @@ -205,6 +205,35 @@ let ResourceCycles = [1, 15]; } +// Bitmanip +let Latency = 3 in { +// Rotates are in the late-B ALU. +def : WriteRes<WriteRotateImm, [SiFive7PipeB]>; +def : WriteRes<WriteRotateImm32, [SiFive7PipeB]>; +def : WriteRes<WriteRotateReg, [SiFive7PipeB]>; +def : WriteRes<WriteRotateReg32, [SiFive7PipeB]>; + +// clz[w]/ctz[w] are in the late-B ALU. +def : WriteRes<WriteCLZ, [SiFive7PipeB]>; +def : WriteRes<WriteCLZ32, [SiFive7PipeB]>; +def : WriteRes<WriteCTZ, [SiFive7PipeB]>; +def : WriteRes<WriteCTZ32, [SiFive7PipeB]>; + +// cpop[w] look exactly like multiply. +def : WriteRes<WriteCPOP, [SiFive7PipeB]>; +def : WriteRes<WriteCPOP32, [SiFive7PipeB]>; + +// orc.b is in the late-B ALU. +def : WriteRes<WriteORCB, [SiFive7PipeB]>; + +// rev8 is in the late-A and late-B ALUs. +def : WriteRes<WriteREV8, [SiFive7PipeAB]>; + +// shNadd[.uw] is on the early-B and late-B ALUs. +def : WriteRes<WriteSHXADD, [SiFive7PipeB]>; +def : WriteRes<WriteSHXADD32, [SiFive7PipeB]>; +} + // Memory def : WriteRes<WriteSTB, [SiFive7PipeA]>; def : WriteRes<WriteSTH, [SiFive7PipeA]>; @@ -859,10 +888,24 @@ // Others def : ReadAdvance<ReadVMask, 0>; +// Bitmanip +def : ReadAdvance<ReadRotateImm, 0>; +def : ReadAdvance<ReadRotateImm32, 0>; +def : ReadAdvance<ReadRotateReg, 0>; +def : ReadAdvance<ReadRotateReg32, 0>; +def : ReadAdvance<ReadCLZ, 0>; +def : ReadAdvance<ReadCLZ32, 0>; +def : ReadAdvance<ReadCTZ, 0>; +def : ReadAdvance<ReadCTZ32, 0>; +def : ReadAdvance<ReadCPOP, 0>; +def : ReadAdvance<ReadCPOP32, 0>; +def : ReadAdvance<ReadORCB, 0>; +def : ReadAdvance<ReadREV8, 0>; +def : ReadAdvance<ReadSHXADD, 0>; +def : ReadAdvance<ReadSHXADD32, 0>; + //===----------------------------------------------------------------------===// // Unsupported extensions -defm : UnsupportedSchedZba; -defm : UnsupportedSchedZbb; defm : UnsupportedSchedZbc; defm : UnsupportedSchedZbs; defm : UnsupportedSchedZbkb; Index: llvm/lib/Target/RISCV/RISCVProcessors.td =================================================================== --- llvm/lib/Target/RISCV/RISCVProcessors.td +++ llvm/lib/Target/RISCV/RISCVProcessors.td @@ -177,7 +177,9 @@ FeatureStdExtV, FeatureStdExtZvl512b, FeatureStdExtZfh, - FeatureStdExtZvfh], + FeatureStdExtZvfh, + FeatureStdExtZba, + FeatureStdExtZbb], [TuneSiFive7]>; def SYNTACORE_SCR1_BASE : RISCVProcessorModel<"syntacore-scr1-base", Index: clang/test/Driver/riscv-cpus.c =================================================================== --- clang/test/Driver/riscv-cpus.c +++ clang/test/Driver/riscv-cpus.c @@ -174,6 +174,7 @@ // MCPU-SIFIVE-X280-SAME: "-target-feature" "+c" "-target-feature" "+v" // MCPU-SIFIVE-X280-SAME: "-target-feature" "+zicsr" "-target-feature" "+zifencei" // MCPU-SIFIVE-X280-SAME: "-target-feature" "+zfh" +// MCPU-SIFIVE-X280-SAME: "-target-feature" "+zba" "-target-feature" "+zbb" // MCPU-SIFIVE-X280-SAME: "-target-feature" "+experimental-zvfh" // MCPU-SIFIVE-X280-SAME: "-target-feature" "+zvl128b" // MCPU-SIFIVE-X280-SAME: "-target-feature" "+zvl256b" "-target-feature" "+zvl32b"
Index: llvm/lib/Target/RISCV/RISCVSchedSiFive7.td =================================================================== --- llvm/lib/Target/RISCV/RISCVSchedSiFive7.td +++ llvm/lib/Target/RISCV/RISCVSchedSiFive7.td @@ -205,6 +205,35 @@ let ResourceCycles = [1, 15]; } +// Bitmanip +let Latency = 3 in { +// Rotates are in the late-B ALU. +def : WriteRes<WriteRotateImm, [SiFive7PipeB]>; +def : WriteRes<WriteRotateImm32, [SiFive7PipeB]>; +def : WriteRes<WriteRotateReg, [SiFive7PipeB]>; +def : WriteRes<WriteRotateReg32, [SiFive7PipeB]>; + +// clz[w]/ctz[w] are in the late-B ALU. +def : WriteRes<WriteCLZ, [SiFive7PipeB]>; +def : WriteRes<WriteCLZ32, [SiFive7PipeB]>; +def : WriteRes<WriteCTZ, [SiFive7PipeB]>; +def : WriteRes<WriteCTZ32, [SiFive7PipeB]>; + +// cpop[w] look exactly like multiply. +def : WriteRes<WriteCPOP, [SiFive7PipeB]>; +def : WriteRes<WriteCPOP32, [SiFive7PipeB]>; + +// orc.b is in the late-B ALU. +def : WriteRes<WriteORCB, [SiFive7PipeB]>; + +// rev8 is in the late-A and late-B ALUs. +def : WriteRes<WriteREV8, [SiFive7PipeAB]>; + +// shNadd[.uw] is on the early-B and late-B ALUs. +def : WriteRes<WriteSHXADD, [SiFive7PipeB]>; +def : WriteRes<WriteSHXADD32, [SiFive7PipeB]>; +} + // Memory def : WriteRes<WriteSTB, [SiFive7PipeA]>; def : WriteRes<WriteSTH, [SiFive7PipeA]>; @@ -859,10 +888,24 @@ // Others def : ReadAdvance<ReadVMask, 0>; +// Bitmanip +def : ReadAdvance<ReadRotateImm, 0>; +def : ReadAdvance<ReadRotateImm32, 0>; +def : ReadAdvance<ReadRotateReg, 0>; +def : ReadAdvance<ReadRotateReg32, 0>; +def : ReadAdvance<ReadCLZ, 0>; +def : ReadAdvance<ReadCLZ32, 0>; +def : ReadAdvance<ReadCTZ, 0>; +def : ReadAdvance<ReadCTZ32, 0>; +def : ReadAdvance<ReadCPOP, 0>; +def : ReadAdvance<ReadCPOP32, 0>; +def : ReadAdvance<ReadORCB, 0>; +def : ReadAdvance<ReadREV8, 0>; +def : ReadAdvance<ReadSHXADD, 0>; +def : ReadAdvance<ReadSHXADD32, 0>; + //===----------------------------------------------------------------------===// // Unsupported extensions -defm : UnsupportedSchedZba; -defm : UnsupportedSchedZbb; defm : UnsupportedSchedZbc; defm : UnsupportedSchedZbs; defm : UnsupportedSchedZbkb; Index: llvm/lib/Target/RISCV/RISCVProcessors.td =================================================================== --- llvm/lib/Target/RISCV/RISCVProcessors.td +++ llvm/lib/Target/RISCV/RISCVProcessors.td @@ -177,7 +177,9 @@ FeatureStdExtV, FeatureStdExtZvl512b, FeatureStdExtZfh, - FeatureStdExtZvfh], + FeatureStdExtZvfh, + FeatureStdExtZba, + FeatureStdExtZbb], [TuneSiFive7]>; def SYNTACORE_SCR1_BASE : RISCVProcessorModel<"syntacore-scr1-base", Index: clang/test/Driver/riscv-cpus.c =================================================================== --- clang/test/Driver/riscv-cpus.c +++ clang/test/Driver/riscv-cpus.c @@ -174,6 +174,7 @@ // MCPU-SIFIVE-X280-SAME: "-target-feature" "+c" "-target-feature" "+v" // MCPU-SIFIVE-X280-SAME: "-target-feature" "+zicsr" "-target-feature" "+zifencei" // MCPU-SIFIVE-X280-SAME: "-target-feature" "+zfh" +// MCPU-SIFIVE-X280-SAME: "-target-feature" "+zba" "-target-feature" "+zbb" // MCPU-SIFIVE-X280-SAME: "-target-feature" "+experimental-zvfh" // MCPU-SIFIVE-X280-SAME: "-target-feature" "+zvl128b" // MCPU-SIFIVE-X280-SAME: "-target-feature" "+zvl256b" "-target-feature" "+zvl32b"
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits