This is the mail archive of the
gcc@gcc.gnu.org
mailing list for the GCC project.
Re: Doubt about filling delay slot
On Thu, Apr 3, 2008 at 7:35 PM, Ian Lance Taylor <iant@google.com> wrote:
> "Mohamed Shafi" <shafitvm@gmail.com> writes:
>
>
> > Say the target has two delay slots for call instructions.
> > So we can have something like this
> > (define_attr "slottable" "no,yes,has_slot" (const_string "yes"))
> >
> > (define_delay (eq_attr "slottable" "has_slot")
> > [(eq_attr "slottable" "yes") (nil) (nil)
> > (eq_attr "slottable" "yes") (nil) (nil)])
> >
> > So in define_insn for call i can have
> > (set_attr "slottable" "has_slot")
> >
> >
> > Now imagine that i have 3 patterns : Pattern A with two instructions
> > in its template, Pattern B and Pattern C with only one instruction in
> > its template.
> > When it comes to filling the call instruction delay slot if slot 1 is
> > filled with Pattern A then there is no need to fill slot 2. But if its
> > filled with Pattern C or Pattern B, then slot 2 should be filled with
> > Pattern B or Pattern C, but not Pattern A.
> > Will i be able to do this in the back-end?
>
> Ah, OK. It's easy enough to say that you can't put pattern A in slot
> 2. But there is no way to say that if pattern A is in slot 1, then
> slot 2 is not available.
>
Ok i guess you are saying that this is not possible.
But then this should be something that all the targets should deal
with. How are they doing it?
May be i can set the attribute "slottable" as 'no' for patterns with 3
or more instructions and in DBR_OUTPUT_SEQEND or in
TARGET_MACHINE_DEPENDENT_REORG check the delay slots and reorder the
instructions if the slots are filled with 3 instructions ?
Are there any other solutions?
Regards,
Shafi
PS : Why is this not implemented? This seems like a standard
requirement for the delay slots