https://gcc.gnu.org/bugzilla/show_bug.cgi?id=111768
Bug ID: 111768 Summary: Bootstrap failure with -march=native on Intel Alder Lake CPUs because of differing cache sizes Product: gcc Version: 14.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: bootstrap Assignee: unassigned at gcc dot gnu.org Reporter: sjames at gcc dot gnu.org Target Milestone: --- Please bare with me on this one. We've had a bunch of reports downstream of bootstrap failures on Intel Alder Lake CPUs with -march=native: * https://bugs.gentoo.org/904426 * https://bugs.gentoo.org/908523 * https://bugs.gentoo.org/915389 (this has a bit more detail) Alder Lake has a big.little architecture. We end up with: ``` $ diffoscope ./stage2-x86_64-pc-linux-gnu/32/libgcc/eqhf2.o ./stage3-x86_64-pc-linux-gnu/32/libgcc/eqhf2.o ``` [...] │ - [ 33] GNU C17 13.2.1 20230826 -march=alderlake -mmmx -mpopcnt -msse -msse3 -mssse3 -msse4.1 -msse4.2 -mavx -mavx2 -mno-sse4a -mno-fma4 -mno-xop -mfma -mno-avx512f -mbmi -mbmi2 -maes -mpclmul -mno-avx512vl -mno-avx512bw -mno-avx512dq -mno-avx512cd -mno-avx512er -mno-avx512pf -mno-avx512vbmi -mno-avx512ifma -mno-avx5124vnniw -mno-avx5124fmaps -mno-avx512vpopcntdq -mno-avx512vbmi2 -mgfni -mvpclmulqdq -mno-avx512vnni -mno-avx512bitalg -mno-avx512bf16 -mno-avx512vp2intersect -mno-3dnow -madx -mabm -mno-cldemote -mclflushopt -mclwb -mno-clzero -mcx16 -mno-enqcmd -mf16c -mfsgsbase -mfxsr -mno-hle -msahf -mno-lwp -mlzcnt -mmovbe -mmovdir64b -mmovdiri -mno-mwaitx -mpconfig -mpku -mno-prefetchwt1 -mprfchw -mptwrite -mrdpid -mrdrnd -mrdseed -mno-rtm -mserialize -mno-sgx -msha -mshstk -mno-tbm -mno-tsxldtrk -mvaes -mwaitpkg -mno-wbnoinvd -mxsave -mxsavec -mxsaveopt -mxsaves -mno-amx-tile -mno-amx-int8 -mno-amx-bf16 -mno-uintr -mhreset -mno-kl -mno-widekl -mavxvnni -mno-avx512fp16 -mno-avxifma -mno-avxvnniint8 -mno-avxneconvert -mno-cmpccxadd -mno-amx-fp16 -mno-prefetchi -mno-raoint -mno-amx-complex --param=l1-cache-size=48 --param=l1-cache-line-size=64 --param=l2-cache-size=24576 -mtune=alderlake -m32 -mlong-double-80 -msse2 -g -g -g -O2 -O3 -O2 -O2 -O3 -fbuilding-libgcc -fno-stack-protector -fno-stack-clash-protection -fpic -fvisibility=hidden │ - [ 578] _Float16 │ - [ 581] _FP_UNPACK_RAW_1_flo │ - [ 596] long long unsigned int │ - [ 5ad] sign │ - [ 5b2] _fcw │ + [ 33] _Float16 │ + [ 3c] _FP_UNPACK_RAW_1_flo │ + [ 51] long long unsigned int │ + [ 68] sign │ + [ 6d] _fcw │ + [ 72] GNU C17 13.2.1 20230826 -march=alderlake -mmmx -mpopcnt -msse -msse3 -mssse3 -msse4.1 -msse4.2 -mavx -mavx2 -mno-sse4a -mno-fma4 -mno-xop -mfma -mno-avx512f -mbmi -mbmi2 -maes -mpclmul -mno-avx512vl -mno-avx512bw -mno-avx512dq -mno-avx512cd -mno-avx512er -mno-avx512pf -mno-avx512vbmi -mno-avx512ifma -mno-avx5124vnniw -mno-avx5124fmaps -mno-avx512vpopcntdq -mno-avx512vbmi2 -mgfni -mvpclmulqdq -mno-avx512vnni -mno-avx512bitalg -mno-avx512bf16 -mno-avx512vp2intersect -mno-3dnow -madx -mabm -mno-cldemote -mclflushopt -mclwb -mno-clzero -mcx16 -mno-enqcmd -mf16c -mfsgsbase -mfxsr -mno-hle -msahf -mno-lwp -mlzcnt -mmovbe -mmovdir64b -mmovdiri -mno-mwaitx -mpconfig -mpku -mno-prefetchwt1 -mprfchw -mptwrite -mrdpid -mrdrnd -mrdseed -mno-rtm -mserialize -mno-sgx -msha -mshstk -mno-tbm -mno-tsxldtrk -mvaes -mwaitpkg -mno-wbnoinvd -mxsave -mxsavec -mxsaveopt -mxsaves -mno-amx-tile -mno-amx-int8 -mno-amx-bf16 -mno-uintr -mhreset -mno-kl -mno-widekl -mavxvnni -mno-avx512fp16 -mno-avxifma -mno-avxvnniint8 -mno-avxneconvert -mno-cmpccxadd -mno-amx-fp16 -mno-prefetchi -mno-raoint -mno-amx-complex --param=l1-cache-size=32 --param=l1-cache-line-size=64 --param=l2-cache-size=24576 -mtune=alderlake -m32 -mlong-double-80 -msse2 -g -g -g -O2 -O3 -O2 -O2 -O3 -fbuilding-libgcc -fno-stack-protector -fno-stack-clash-protection -fpic -fvisibility=hidden [...] ``` $ wdiff /tmp/a /tmp/b <d> DW_AT_producer : (strp) (offset: [-0x33):-] {+0x72):+} GNU C17 13.2.1 20230826 -march=alderlake -mmmx -mpopcnt -msse -msse3 -mssse3 -msse4.1 -msse4.2 -mavx -mavx2 -mno-sse4a -mno-fma4 -mno-xop -mfma -mno-avx512f -mbmi -mbmi2 -maes -mpclmul -mno-avx512vl -mno-avx512bw -mno-avx512dq -mno-avx512cd -mno-avx512er -mno-avx512pf -mno-avx512vbmi -mno-avx512ifma -mno-avx5124vnniw -mno-avx5124fmaps -mno-avx512vpopcntdq -mno-avx512vbmi2 -mgfni -mvpclmulqdq -mno-avx512vnni -mno-avx512bitalg -mno-avx512bf16 -mno-avx512vp2intersect -mno-3dnow -madx -mabm -mno-cldemote -mclflushopt -mclwb -mno-clzero -mcx16 -mno-enqcmd -mf16c -mfsgsbase -mfxsr -mno-hle -msahf -mno-lwp -mlzcnt -mmovbe -mmovdir64b -mmovdiri -mno-mwaitx -mpconfig -mpku -mno-prefetchwt1 -mprfchw -mptwrite -mrdpid -mrdrnd -mrdseed -mno-rtm -mserialize -mno-sgx -msha -mshstk -mno-tbm -mno-tsxldtrk -mvaes -mwaitpkg -mno-wbnoinvd -mxsave -mxsavec -mxsaveopt -mxsaves -mno-amx-tile -mno-amx-int8 -mno-amx-bf16 -mno-uintr -mhreset -mno-kl -mno-widekl -mavxvnni -mno-avx512fp16 -mno-avxifma -mno-avxvnniint8 -mno-avxneconvert -mno-cmpccxadd -mno-amx-fp16 -mno-prefetchi -mno-raoint -mno-amx-complex [---param=l1-cache-size=48-] {+--param=l1-cache-size=32+} --param=l1-cache-line-size=64 --param=l2-cache-size=24576 -mtune=alderlake -m32 -mlong-double-80 -msse2 -g -g -g -O2 -O3 -O2 -O2 -O3 -fbuilding-libgcc -fno-stack-protector -fno-stack-clash-protection -fpic -fvisibility=hidden We have two differences: * the offset (let's ignore that) * l1 cache size: [---param=l1-cache-size=48-] {+--param=l1-cache-size=32+} All affected users have been able to workaround it by just using a constant expansion of -march=native, and users who have run the expansion repeatedly to check the results see occasional =32 popping up.