[PATCH] middle-end: Simplify (sign_extend:HI (truncate:QI (ashiftrt:HI X 8)))
Jeff Law
law@redhat.com
Mon Aug 24 23:28:37 GMT 2020
On Sun, 2020-07-19 at 10:42 +0100, Roger Sayle wrote:
> The combination of several my recent nvptx patches has revealed an
> interesting RTL optimization opportunity. This patch to simplify-rtx.c
> simplifies (sign_extend:HI (truncate:QI (?shiftrt:HI x 8))) to just
> (ashiftrt:HI x 8), as the inner shift already sets the high bits
> appropriately. The equivalent zero_extend variant appears to already
> be implemented in simplify_unary_operation_1.
>
> During the compilation of one of the tests in the test suite, we
> manage the generate the redundant sequence of instructions:
>
> (insn 17 16 18 3 (set (reg:HI 35)
> (ashiftrt:HI (reg:HI 34 [ arg ])
> (const_int 8 [0x8]))) "v2si-cvt.c":14:8 94 {ashrhi3}
> (expr_list:REG_DEAD (reg:HI 34 [ arg ])
> (nil)))
> (insn 18 17 19 3 (set (reg:QI 36)
> (truncate:QI (reg:HI 35))) "v2si-cvt.c":14:8 28 {trunchiqi2}
> (expr_list:REG_DEAD (reg:HI 35)
> (nil)))
> (insn 19 18 20 3 (set (reg:HI 37)
> (sign_extend:HI (reg:QI 36))) "v2si-cvt.c":14:6 22 {extendqihi2}
> (expr_list:REG_DEAD (reg:QI 36)
> (nil)))
I can't recall the target, but I've seen similar sequences as well. Thanks for
digging into it.
Jeff
More information about the Gcc-patches
mailing list