[Bug tree-optimization/105314] New: ifcvt regression in noce_try_store_flag_mask
christophm30 at gmail dot com
gcc-bugzilla@gcc.gnu.org
Tue Apr 19 20:19:09 GMT 2022
https://gcc.gnu.org/bugzilla/show_bug.cgi?id=105314
Bug ID: 105314
Summary: ifcvt regression in noce_try_store_flag_mask
Product: gcc
Version: 12.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: tree-optimization
Assignee: unassigned at gcc dot gnu.org
Reporter: christophm30 at gmail dot com
Target Milestone: ---
The function noce_try_store_flag_mask() in ifcvt.cc converts
"if (test) x = 0;" to "x &= -(test == 0);" (if costs permit that).
Commit 3a7ba8fd (which was introduced a month ago to fix PR104960) triggers a
regression so that the if-conversion can't be performed anymore.
On RISC-V this manifests as follows:
"""
long func(long a, long b, long c)
{
if (c)
a = 0;
return a;
}
"""
Old code:
0000000000000000 <func>:
0: 00163613 seqz a2,a2
4: 40c00633 neg a2,a2
8: 8d71 and a0,a0,a2
a: 8082 ret
New (branching) code:
0000000000000000 <func>:
0: c211 beqz a2,4 <.L1>
2: 4501 li a0,0
0000000000000004 <.L1>:
4: 8082 ret
Looking through the test suite, I could only find the file
"gcc.target/arm/ifcvt-size-check.c" which should be affected by this regression
as well. However, I haven't tested that.
More information about the Gcc-bugs
mailing list