[Bug target/67459] New: [SH]=?UTF-8?Q?=C2=A0addc?=/subc/negc set of T reg rtx seem wrong
olegendo at gcc dot gnu.org
gcc-bugzilla@gcc.gnu.org
Sat Sep 5 08:58:00 GMT 2015
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67459
Bug ID: 67459
Summary: [SH] addc/subc/negc set of T reg rtx seem wrong
Product: gcc
Version: unknown
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: target
Assignee: unassigned at gcc dot gnu.org
Reporter: olegendo at gcc dot gnu.org
Target Milestone: ---
Target: sh*-*-*
The following should be verified.
Currently there is no problem because nothing in GCC understands or uses the
exact T reg values. However, clrt/sett optimization might want to do that in
the future, for which correct set rtxes are needed in the insns.
addc:
(set (reg:SI T_REG)
(ltu:SI (plus:SI (match_dup 1) (match_dup 2)) (match_dup 1)))]
The insn operation description says (comparisons are unsigned):
if (R[n] > R[n] + R[m])
T = 1;
else if (R[n] + R[m] > R[n] + R[m] + T)
T = 1;
else
T = 0;
which could probably be simplified a bit.
subc:
(set (reg:SI T_REG)
(gtu:SI (minus:SI (minus:SI (match_dup 1) (match_dup 2))
(reg:SI T_REG))
(match_dup 1)))]
The insn operation description says (comparisons are unsigned):
if (R[n] < R[n] - R[m])
T = 1;
else if (R[n] - R[m] < R[n] - R[m] - T)
T = 1;
else
T = 0;
negc:
(set (reg:SI T_REG)
(ne:SI (ior:SI (reg:SI T_REG) (match_dup 1))
(const_int 0)))]
The insn operation description says:
if (0 < 0 - R[m])
T = 1;
else if (0 - R[m] - T < R[n])
T = 1;
else
T = 0;
More information about the Gcc-bugs
mailing list