From: Kirill Yukhin Date: Thu, 14 Nov 2013 08:33:21 +0000 (+0000) Subject: re PR target/57491 ([ia64] internal compiler error: in ia64_split_tmode -O2, quadmath) X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=2430d1e2638aa4ae7576460ed87c2441009c8600;p=gcc.git re PR target/57491 ([ia64] internal compiler error: in ia64_split_tmode -O2, quadmath) PR target/57491 * config/ia64/ia64.c (ia64_split_tmode_move): Relax `dead' flag setting. From-SVN: r204777 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 598268ebc0b..1a591cb8437 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2013-11-14 Kirill Yukhin + + PR target/57491 + * config/ia64/ia64.c (ia64_split_tmode_move): Relax `dead' + flag setting. + 2013-11-14 Jakub Jelinek Uros Bizjak diff --git a/gcc/config/ia64/ia64.c b/gcc/config/ia64/ia64.c index 2b331873e24..a28575c0bf6 100644 --- a/gcc/config/ia64/ia64.c +++ b/gcc/config/ia64/ia64.c @@ -1529,12 +1529,19 @@ ia64_split_tmode_move (rtx operands[]) && reg_overlap_mentioned_p (operands[0], operands[1])) { rtx base = XEXP (operands[1], 0); + rtx first_write = gen_rtx_REG (DImode, REGNO (operands[0])); while (GET_CODE (base) != REG) base = XEXP (base, 0); if (REGNO (base) == REGNO (operands[0])) - reversed = true; - dead = true; + { + reversed = true; + first_write = gen_rtx_REG (DImode, REGNO (operands[0]) + 1); + } + + if (GET_CODE (operands[0]) == REG + && reg_overlap_mentioned_p (first_write, operands[1])) + dead = true; } /* Another reason to do the moves in reversed order is if the first element of the target register pair is also the second element of