https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118688
Bug ID: 118688
Summary: patch splitting should happen when it is known only
path is hot
Product: gcc
Version: 15.0
Status: UNCONFIRMED
Keywords: missed-optimization
Severity: normal
Priority: P3
Component: tree-optimization
Assignee: pinskia at gcc dot gnu.org
Reporter: pinskia at gcc dot gnu.org
CC: dhruvc at nvidia dot com, pinskia at gcc dot gnu.org
Target Milestone: ---
Target: aarch64
Take:
```
#define iterations 100000
#define LEN_1D 32000
#define LEN_2D 256
#define ARRAY_ALIGNMENT 64
#include <sys/time.h>
struct args_t
{
struct timeval t1;
struct timeval t2;
void *__restrict__ arg_info;
};
typedef float real_t;
__attribute__ ((aligned (ARRAY_ALIGNMENT))) real_t a[LEN_1D], b[LEN_1D],
c[LEN_1D], d[LEN_1D], e[LEN_1D], aa[LEN_2D][LEN_2D];
void
s258 (struct args_t *func_args)
{
real_t s;
for (int nl = 0; nl < iterations; nl++)
{
s = 0.;
for (int i = 0; i < LEN_2D; ++i)
{
if (a[i] > 0.)
{
[[likely]];
s = d[i] * d[i];
}
b[i] = s * c[i] + d[i];
e[i] = (s + (real_t) 1.) * aa[0][i];
}
}
}
```
poor_ifcvt_pred should not be taken into account in the above case and GCC
should split the path as we know one path is hotter than the other. This will
fix what was noticed in PR 118505 with PGO enabled :).