mirror of
git://gcc.gnu.org/git/gcc.git
synced 2025-04-17 05:10:28 +08:00
middle-end: Improve RTL expansion in expand_mul_overflow,
This patch improves the RTL that the middle-end generates for testing signed overflow following a widening multiplication. During this expansion the middle-end generates a truncation which can get used multiple times. Placing this intermediate value in a pseudo register reduces the amount of code generated on platforms where this truncation requires an explicit instruction. 2020-07-11 Roger Sayle <roger@nextmovesoftware.com> gcc/ChangeLog: * internal-fn.c (expand_mul_overflow): When checking for signed overflow from a widening multiplication, we access the truncated lowpart RES twice, so keep this value in a pseudo register.
This commit is contained in:
parent
90efb2512d
commit
2b4bbc1707
@ -1629,6 +1629,9 @@ expand_mul_overflow (location_t loc, tree lhs, tree arg0, tree arg1,
|
||||
profile_probability::very_likely ());
|
||||
else
|
||||
{
|
||||
/* RES is used more than once, place it in a pseudo. */
|
||||
res = force_reg (mode, res);
|
||||
|
||||
rtx signbit = expand_shift (RSHIFT_EXPR, mode, res, prec - 1,
|
||||
NULL_RTX, 0);
|
||||
/* RES is low half of the double width result, HIPART
|
||||
|
Loading…
x
Reference in New Issue
Block a user