https://gcc.gnu.org/bugzilla/show_bug.cgi?id=99127
Martin Liška <marxin at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |NEW CC| |marxin at gcc dot gnu.org Ever confirmed|0 |1 Last reconfirmed| |2021-02-17 --- Comment #2 from Martin Liška <marxin at gcc dot gnu.org> --- Confirmed on the current master. There's a reduced test-case: $ cat pr99127.i int c_pow_r_1, c_pow_r_0, c_pow_phase; void c_pow() { c_pow_r_0 = __builtin_cos(c_pow_phase); c_pow_r_1 = __builtin_sin(c_pow_phase); } It's related to sincos optimization we do: -fdump-tree-optimized=/dev/stdout: sincostmp_10 = __builtin_cexpi (_2); _3 = REALPART_EXPR <sincostmp_10>; _4 = (int) _3; c_pow_r_0 = _4; _5 = IMAGPART_EXPR <sincostmp_10>; Unfortunately, we don't have an option which can be used to disable the optimization: gcc/tree-ssa-math-opts.c:2252: /* opt_pass methods: */ virtual bool gate (function *) { /* We no longer require either sincos or cexp, since powi expansion piggybacks on this pass. */ return optimize; }