[Bug testsuite/80546] [7/8 Regression] FAIL: gcc.target/powerpc/bool3-p[78].c scan-assembler-not
jakub at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Thu Mar 1 17:59:00 GMT 2018
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=80546
--- Comment #8 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
void ptr4 (__int128_t *p)
{
__int128_t a = p[1];
__int128_t b;
__asm__ ("# gpr reg %0" : "+r" (a));
b = ~a;
__asm__ ("# gpr reg %0" : "+r" (b));
p[0] = b;
}
void ptr5 (__int128_t *p)
{
__int128_t a = p[1];
__int128_t b;
__asm__ ("# gpr reg %0" : "+r" (a));
b = ~a;
__asm__ ("# gpr reg %0" : "+r" (b), "+r" (a));
p[0] = b;
}
For ptr4 which has:
(insn 10 9 17 2 (set (reg/v:TI 122 [ b ])
(not:TI (reg:TI 125 [ a ]))) "bool3.h":39 493 {*one_cmplti3_internal}
(expr_list:REG_DEAD (reg:TI 125 [ a ])
(nil)))
(insn 17 10 12 2 (set (reg:TI 126 [ b ])
(reg/v:TI 122 [ b ])) "bool3.h":40 1197 {*vsx_movti_64bit}
(expr_list:REG_DEAD (reg/v:TI 122 [ b ])
(nil)))
and therefore it is quite likely pseudo 122 and 126 can be the same register
IRA considers it with the patch cheap, but it does so also for ptr5 with:
(insn 10 9 19 2 (set (reg/v:TI 122 [ b ])
(not:TI (reg:TI 125 [ a ]))) "bool3.h":49 493 {*one_cmplti3_internal}
(nil))
(insn 19 10 18 2 (set (reg:TI 127 [ a ])
(reg:TI 125 [ a ])) "bool3.h":50 1197 {*vsx_movti_64bit}
(expr_list:REG_DEAD (reg:TI 125 [ a ])
(nil)))
(insn 18 19 13 2 (set (reg:TI 126 [ b ])
(reg/v:TI 122 [ b ])) "bool3.h":50 1197 {*vsx_movti_64bit}
(expr_list:REG_DEAD (reg/v:TI 122 [ b ])
(nil)))
where it is more expensive.
More information about the Gcc-bugs
mailing list