On Wed, Jul 18, 2012 at 2:19 AM, Deepti Sharma
<deepti.gccretarget@xxxxxxxxx> wrote:
>
> I am facing one issue with pipeline stalls. My compiler generates below
> assembly:
> MOVE AR2, _rec2
> MOVE AR0, _rec1
> MOVE R3, (AR2)+ //Writes to R3
> MOVE (AR0)+, R3 //Reads from R3; Stall Created
> MOV AR1, AR0
> MOV AR0, AR2
> MOVE R2, (AR0)+ //
> MOVE (AR1)+, R2 // stall
> MOVE R1, (AR0)+ //
> MOVE (AR1)+, R1 // stall
> MOVE R0, (AR0,0)
> MOVE (AR1,0), R0 //stall
...
> ;; ======================================================
> ;; -- basic block 2 from 7 to 20 -- before reload
> ;; ======================================================
>
> ;; 0--> 7 r62=`r1'
> ;; 1--> 8 r63=`r2' :UNIT3
> ;; 2--> 11 [r62++]=[r63++] :UNIT1|UNIT2
> ;; 3--> 12 r65=r62 :UNIT4
> ;; 4--> 13 r64=r63 :UNIT4
> ;; 5--> 14 [r65++]=[r64++] :UNIT1|UNIT2
> ;; 6--> 17 [r65++]=[r64++] :UNIT1|UNIT2
> ;; 7--> 20 [r65]=[r64] :UNIT1|UNIT2
>
> Any pointers for this issue will be helpful.
I don't understand how insns like [r65++]=[r64++] correspond to the
assembler instruction sequence you show above. Do you have a
define_split in there that only happens after reload is complete?
Perhaps you need to be looking at the scheduler dump after reload,
which is to say the one from -fschedule-insns2.
Ian
[Linux C Programming]
[Linux Kernel]
[eCos]
[Fedora Development]
[Fedora Announce]
[Autoconf]
[The DWARVES Debugging Tools]
[Yosemite Campsites]
[Yosemite News]
[Linux GCC]