https://gcc.gnu.org/bugzilla/show_bug.cgi?id=122519
Bug ID: 122519
Summary: Extra cset with movcc expansion due to ccmp depending
on ter
Product: gcc
Version: 16.0
Status: UNCONFIRMED
Keywords: missed-optimization
Severity: enhancement
Priority: P3
Component: middle-end
Assignee: unassigned at gcc dot gnu.org
Reporter: pinskia at gcc dot gnu.org
Target Milestone: ---
Target: aarch64
```
int __GIMPLE extra_cset (int a, int b, int c, int d)
{
int t;
bool bb;
bool bb1;
bb = a == 3;
bb1 = b == 100;
bb = bb & bb1;
t = bb ? c : d;
return t;
}
int __GIMPLE ccmpok (int a, int b, int c, int d)
{
int t;
bool bb;
bool bb2;
bool bb1;
bb2 = a == 3;
bb1 = b == 100;
bb = bb2 & bb1;
t = bb ? c : d;
return t;
}
```
With `-O1 -fgimple`
These 2 functions should produce the same code but since ccmp depends on ter
and ter in the extra_cset decides not to combine in the bb assignment, we get
an extra cset.
To fix this, we need to recognize ccmp outside of expand and not depend on TER.