On 30/09/14 05:21, Jeff Law wrote:
On 09/29/14 13:24, Jiong Wang wrote:
I don't think so. from the x86-64 bootstrap, there is no regression
on the number of functions shrink-wrapped. actually speaking,
previously only single mov dest, src handled, so the disallowing
USE/CLOBBER will not disallow shrink-wrap opportunity which was
allowed previously.
This is the key, of course. shrink-wrapping is very restrictive in its
ability to sink insns. The only forms it'll currently shrink are simple
moves. Arithmetic, logicals, etc are left alone. Thus disallowing
USE/CLOBBER does not impact the x86 port in any significant way.
yes, and we could get +1.22% (2567 compared with 2536) functions shrink-wrapped
after we sinking more insn except simple "mov dest, src" on x86-64 bootstrap.
and
I remember the similar percentage on glibc build.
while on aarch64, the overall functions shrink-wrapped increased +25% on some
programs. maybe we could gain the same on other RISC backend.
I do agree with Richard that it would be useful to see the insns that
are incorrectly sunk and the surrounding context.
insn 14 and 182 are sunk incorrectly. below is the details.
(insn 14 173 174 2 (parallel [
(set (reg:QI 37 r8 [orig:86 D.32480 ] [86])
(lshiftrt:QI (reg:QI 37 r8 [orig:86 D.32480 ] [86])
(const_int 2 [0x2])))
(clobber (reg:CC 17 flags))
]) /home/andi/lsrc/linux/block/blk-flush2.c:50 547 {*lshrqi3_1}
(expr_list:REG_EQUAL (lshiftrt:QI (mem:QI (plus:DI (reg/v/f:DI 43 r14
[orig:85 q ] [85])
(const_int 1612 [0x64c])) [20 *q_7+1612 S1 A32])
(const_int 2 [0x2]))
(nil)))
(insn 174 14 182 2 (set (reg:QI 44 r15 [orig:86 D.32480 ] [86])
(reg:QI 37 r8 [orig:86 D.32480 ] [86]))
/home/andi/lsrc/linux/block/blk-flush2.c:50 93 {*movqi_internal}
(nil))
(insn 182 174 16 2 (parallel [
(set (reg:SI 44 r15 [orig:86 D.32480 ] [86])
(and:SI (reg:SI 44 r15 [orig:86 D.32480 ] [86])
(const_int 1 [0x1])))
(clobber (reg:CC 17 flags))
]) /home/andi/lsrc/linux/block/blk-flush2.c:50 376 {*andsi_1}
(nil))
Jeff