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