https://gcc.gnu.org/bugzilla/show_bug.cgi?id=91633
Bug ID: 91633 Summary: Why -funroll-loops affect code without loop. Product: gcc Version: 10.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: c Assignee: unassigned at gcc dot gnu.org Reporter: crazylht at gmail dot com CC: hjl.tools at gmail dot com, skpgkp2 at gmail dot com Target Milestone: --- Target: i386, x86-64 This testcase is cut from 538.exchange_r in SPEC2017. --- typedef struct pixel{ float red; float green; float blue; }pixel; typedef struct pixel2{ unsigned short red; unsigned short green; unsigned short blue; }pixel2; extern double* p; int foo (pixel* a, pixel2* b) { double ret = (a->red-b->red) * (a->red-b->red) + (a->green-b->green) * (a->green-b->green) + (a->blue-b->blue) * (a->blue-b->blue); if (ret <= *p) return 1; return 0; } --- It is supposed -funroll-loops wouldn't affect code generation, but currently it's not, refer to https://godbolt.org/z/6hvQC7. What i got in function process_options in toplev.c: ---- if (flag_rename_registers == AUTODETECT_VALUE) flag_rename_registers = flag_unroll_loops; ---- Also note pass rnreg will affect sched2.