https://gcc.gnu.org/bugzilla/show_bug.cgi?id=108599
Jakub Jelinek <jakub at gcc dot gnu.org> changed:
What |Removed |Added
----------------------------------------------------------------------------
Target Milestone|--- |12.3
Status|UNCONFIRMED |NEW
Ever confirmed|0 |1
Last reconfirmed| |2023-01-30
Summary|Incorrect code generation |[12/13 Regression]
|newer intel architectures |Incorrect code generation
|for gcc 12 and 13 |newer intel architectures
CC| |jakub at gcc dot gnu.org
--- Comment #3 from Jakub Jelinek <jakub at gcc dot gnu.org> ---
With just -O3 -march=haswell on following test it started with
r13-4124-g156f523f9582f1e6bcce27ece03f2776960408c8
With -O2 -march=haswell -mtune=skylake-avx512 started with
r12-4240-g2b8453c401b699ed93c085d0413ab4b5030bcdb8
Finally with -O3 -march=haswell -mtune=skylake-avx512 with
r12-2666-g29f0e955c97da002b5adb4e8c9dfd2ea9709e207
__attribute__((noipa, noreturn)) void
bar (const char *, const char *, unsigned int, const char *) noexcept
{
__builtin_abort ();
}
# define assert(expr) \
(static_cast <bool> (expr) \
? void (0) \
: bar (#expr, __FILE__, __LINE__, __PRETTY_FUNCTION__))
typedef decltype (sizeof 0) size_t;
struct Stats
{
size_t _used;
size_t _hold;
size_t _dead;
size_t _extra_used;
Stats () : _used(0), _hold(0), _dead(0), _extra_used(0) {}
Stats used (size_t val) { _used += val; return *this; }
Stats hold (size_t val) { _hold += val; return *this; }
};
void
foo (size_t exp_used, size_t exp_hold, size_t exp_dead,
size_t exp_extra_used, const Stats stats)
{
assert (exp_used == stats._used);
assert (exp_hold == stats._hold);
assert (exp_dead == stats._dead);
assert (exp_extra_used == stats._extra_used);
}
int
main ()
{
foo (16, 0, 0, 0, Stats ().used (16).hold (0));
foo (16, 16, 0, 0, Stats ().used (16).hold (16));
}