On 10/10/2023 10:11 AM, Jeff Law wrote:


On 10/9/23 15:02, Edwin Lu wrote:
Now that every insn is guaranteed a type, we want to ensure the types are
handled by the existing scheduling descriptions.

There are 2 approaches I see:
1. Create a new pipeline intended to eventually abort (sifive-7.md)
2. Add the types to an existing pipeline (generic.md)

Which approach do we want to go with? If there is a different approach we
want to take instead, please let me know as well.

Additionally, should types associated with specific extensions
(vector, crypto, etc) have specific pipelines dedicated to them?

    * config/riscv/generic.md: update pipeline
    * config/riscv/sifive-7.md (sifive_7): update pipeline
    (sifive_7_other):
I'd largely expect that we look at an unhandled type and first look to see if its properties roughly fit into an existing define_insn_unit.  If so, just add it to the existing unit.  Otherwise we end up needing to create another unit.

The main types that were added that are not associated with any extension would be "trap" type and the "cbo" (cache block operation) type. I have added these types to an existing pipeline in the generic.md file.

For the vector extension, I don't believe the existing pipelines would support those operations. Should I create the pipelines for now?

What would be really interesting would be to see if we can get the scheduler to indicate that it's trying to schedule an insn that doesn't have a reservation.    ie, our backend tells us if we have an insn with no type, the next step is to see if we have a type with no units/reservations.


Jeff

Do you happen to have any idea on how to do this or if there are any existing mechanisms I should look at? I have been searching around the docs to see if there was any way to tell which pipeline (if any) an instruction is using when it is not included under a reservation without any luck.

Edwin

Reply via email to