.sched2
dump (можно получить через -fsched-verbose=1
или -fdump-rtl-all
или -fdump-rtl-all-all
) содержит необходимую информацию.Например, для gcc 4.6.0 с -Ofast -march=native -mtune=native
):
обратите внимание на правую часть: c2_decoder # - запланированный декодер Core2;c2_p # - количество используемых портов.
;; ======================================================
;; -- basic block 4 from 65 to 79 -- after reload
;; ======================================================
;; 0--> 78 {sp=bp+0x4;bp=[bp];clobber [scratc:c2_decoder0,(c2_p2+(c2_p0|c2_p1)),c2_p0|c2_p1
;; 0--> 65 xmm0=xmm4 :c2_decodern,c2_p0|c2_p1|c2_p5
;; 0--> 36 dx=0x10624dd3 :c2_decodern,c2_p0|c2_p1|c2_p5
;; 1--> 31 xmm0=xmm0 0>>0x40 :c2_decodern,c2_p1
;; 2--> 32 xmm4=xmm4+xmm0 :c2_decodern,c2_p0|c2_p5
;; 3--> 67 xmm0=xmm4 :c2_decodern,c2_p0|c2_p1|c2_p5
;; 4--> 33 xmm0=xmm0 0>>0x20 :c2_decodern,c2_p1
;; 5--> 34 xmm4=xmm4+xmm0 :c2_decodern,c2_p0|c2_p5
;; 6--> 72 cx=xmm4 :c2_decodern,c2_p0|c2_p1|c2_p5
;; 7--> 69 ax=cx :c2_decodern,c2_p0|c2_p1|c2_p5
;; 8--> 37 {dx=trn(sxn(ax)*sxn(dx) 0>>0x20);c:c2_decodern,c2_p1
;; 8--> 70 ax=cx :c2_decodern,c2_p0|c2_p1|c2_p5
;; 9--> 39 {ax=ax>>0x1f;clobber flags;} :c2_decodern,c2_p0|c2_p5
;; 11--> 38 {dx=dx>>0x4;clobber flags;} :c2_decodern,c2_p0|c2_p5
;; 12--> 40 {dx=dx-ax;clobber flags;} :c2_decodern,c2_p0|c2_p1|c2_p5
;; 13--> 41 {dx=dx*0xfa;clobber flags;} :c2_decodern,c2_p1
;; 16--> 42 {cx=cx-dx;clobber flags;} :c2_decodern,c2_p0|c2_p1|c2_p5
;; 17--> 47 ax=cx :c2_decodern,c2_p0|c2_p1|c2_p5
;; 17--> 50 use ax :nothing
;; 18--> 79 return :c2_decoder0
;; Ready list (final):
;; total time = 18