https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119644

            Bug ID: 119644
           Summary: __builtin_arm_set_fpscr ICE with -mgeneral-regs-only
                    on Arm targets
           Product: gcc
           Version: unknown
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: rtl-optimization
          Assignee: unassigned at gcc dot gnu.org
          Reporter: gcc-bugzilla at geoff dot wozniak.ca
  Target Milestone: ---

The following function built with current mainline code (commit
5b9fd65726afef37ed6a6e39f0ceb7f47160ba07), using the configuration given below
causes an ICE with an unrecognized insn.


% ~/src/gnu/gcc/configure --prefix ~/tmp/opt --target arm-none-eabi
--enable-languages=c

% cat t.c
unsigned int wrap (void)
{
    return __builtin_arm_get_fpscr ();
}

% arm-none-eabi-gcc -march=armv7-a -mfloat-abi=hard -mfpu=neon-vfpv4
-mgeneral-regs-only -S t.c

t.c: In function ‘wrap’:
t.c:4:1: error: unrecognizable insn:
    4 | }
      | ^
(insn 5 2 6 2 (set (reg:SI 116)
        (unspec_volatile:SI [
                (const_int 0 [0])
            ] VUNSPEC_GET_FPSCR)) "t.c":3:12 -1
     (nil))
during RTL pass: vregs
t.c:4:1: internal compiler error: in extract_insn, at recog.cc:2882
0x203fa3f internal_error(char const*, ...)
        /home/woz/src/gnu/gcc/gcc/diagnostic-global-context.cc:517
0x94a965 fancy_abort(char const*, int, char const*)
        /home/woz/src/gnu/gcc/gcc/diagnostic.cc:1749
0x7e51cb _fatal_insn(char const*, rtx_def const*, char const*, int, char
const*)
        /home/woz/src/gnu/gcc/gcc/rtl-error.cc:108
0x7e51e7 _fatal_insn_not_found(rtx_def const*, char const*, int, char const*)
        /home/woz/src/gnu/gcc/gcc/rtl-error.cc:116
0x7e3bc9 extract_insn(rtx_insn*)
        /home/woz/src/gnu/gcc/gcc/recog.cc:2882
0xca8610 instantiate_virtual_regs_in_insn
        /home/woz/src/gnu/gcc/gcc/function.cc:1612
0xca8610 instantiate_virtual_regs
        /home/woz/src/gnu/gcc/gcc/function.cc:1995
0xca8610 execute
        /home/woz/src/gnu/gcc/gcc/function.cc:2042
Please submit a full bug report, with preprocessed source.
Please include the complete backtrace with any bug report.
See <https://gcc.gnu.org/bugs/> for instructions.
Preprocessed source stored into /tmp/cc3qlQkr.out file, please attach this to
your bugreport.



Trying this on Compiler Explorer it goes back to version 9.2.1, which around
when the -mgeneral-regs-only option was introduced for Arm targets.  It fails
on every version since then.

https://godbolt.org/z/a9qP48zdx

The ICE happens when using a target with -mfloat-abi=hard and providing an FPU.
 I haven't tried all the combinations, mind you, but it happens on all the ones
I've tried.  It happens with __builtin_arm_set_fpscr as well.

Whether getting/setting the FPSCR with -mgeneral-regs-only is an error, I don't
know.  A case could be made either way since the MRC/MCR instructions don't
touch the FP registers.

Reply via email to