https://gcc.gnu.org/bugzilla/show_bug.cgi?id=69038
Bug ID: 69038 Summary: sparc64 compilation fails with error: unable to find a register to spill in class 'FP_REGS' Product: gcc Version: 5.3.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: other Assignee: unassigned at gcc dot gnu.org Reporter: thomas.petazz...@free-electrons.com Target Milestone: --- Created attachment 37123 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=37123&action=edit Preprocessed source file When building the libvips library with sparc64 gcc 5.3.0, the build fails with: nohalo.cpp: In function 'void vips_interpolate_nohalo_interpolate(VipsInterpolate*, void*, VipsRegion*, double, double)': nohalo.cpp:1571:1: error: unable to find a register to spill in class 'FP_REGS' } ^ nohalo.cpp:1571:1: error: this is the insn: (insn 555 554 3791 8 (set (reg:DF 32 %f0) (float:DF (reg:SI 1852 [ MEM[base: p_139, index: _138, offset: 0B]+-3 ]))) nohalo.cpp:1463 155 {floatsidf2} (expr_list:REG_DEAD (reg:SI 1852 [ MEM[base: p_139, index: _138, offset: 0B]+-3 ]) (nil))) This build failure happens at -O1, -O2, -Os, but not at -O0: test@build:~/buildroot/output/build/libvips-7.42.2/libvips/resample$ /home/test/buildroot/output/host/usr/bin/sparc64-buildroot-linux-gnu-g++ -c -O0 .libs/nohalo.c test@build:~/buildroot/output/build/libvips-7.42.2/libvips/resample$ /home/test/buildroot/output/host/usr/bin/sparc64-buildroot-linux-gnu-g++ -c -O1 .libs/nohalo.c nohalo.cpp: In function 'void vips_interpolate_nohalo_interpolate(VipsInterpolate*, void*, VipsRegion*, double, double)': nohalo.cpp:1571:1: error: unable to find a register to spill in class 'FP_REGS' } ^ nohalo.cpp:1571:1: error: this is the insn: (insn 721 720 722 8 (set (reg:DF 32 %f0) (float:DF (reg:SI 2281 [ MEM[base: p_139, index: _138, offset: 0B]+-3 ]))) nohalo.cpp:1463 155 {floatsidf2} (expr_list:REG_DEAD (reg:SI 2281 [ MEM[base: p_139, index: _138, offset: 0B]+-3 ]) (nil))) nohalo.cpp:1571: confused by earlier errors, bailing out test@build:~/buildroot/output/build/libvips-7.42.2/libvips/resample$ /home/test/buildroot/output/host/usr/bin/sparc64-buildroot-linux-gnu-g++ -c -O2 .libs/nohalo.c nohalo.cpp: In function 'void vips_interpolate_nohalo_interpolate(VipsInterpolate*, void*, VipsRegion*, double, double)': nohalo.cpp:1571:1: error: unable to find a register to spill in class 'FP_REGS' } ^ nohalo.cpp:1571:1: error: this is the insn: (insn 837 773 775 8 (set (reg:DF 32 %f0) (float:DF (reg:SI 2333 [ MEM[base: p_139, index: _5583, offset: 0B]+-3 ]))) nohalo.cpp:1463 155 {floatsidf2} (expr_list:REG_DEAD (reg:SI 2333 [ MEM[base: p_139, index: _5583, offset: 0B]+-3 ]) (nil))) nohalo.cpp:1571: confused by earlier errors, bailing out test@build:~/buildroot/output/build/libvips-7.42.2/libvips/resample$ /home/test/buildroot/output/host/usr/bin/sparc64-buildroot-linux-gnu-g++ -c -Os .libs/nohalo.c nohalo.cpp: In function 'void vips_interpolate_nohalo_interpolate(VipsInterpolate*, void*, VipsRegion*, double, double)': nohalo.cpp:1571:1: error: unable to find a register to spill in class 'FP_REGS' } ^ nohalo.cpp:1571:1: error: this is the insn: (insn 555 554 3791 8 (set (reg:DF 32 %f0) (float:DF (reg:SI 1852 [ MEM[base: p_139, index: _138, offset: 0B]+-3 ]))) nohalo.cpp:1463 155 {floatsidf2} (expr_list:REG_DEAD (reg:SI 1852 [ MEM[base: p_139, index: _138, offset: 0B]+-3 ]) (nil))) nohalo.cpp:1571: confused by earlier errors, bailing out In attachment, the pre-processed source file that allows to reproduce the issue.