https://gcc.gnu.org/bugzilla/show_bug.cgi?id=71607
Bug ID: 71607 Summary: [ARM] ice due to forbidden enabled attribute dependency on instruction operands Product: gcc Version: 7.0 Status: UNCONFIRMED Severity: normal Priority: P3 Component: target Assignee: unassigned at gcc dot gnu.org Reporter: mickael.guene at st dot com Target Milestone: --- Created attachment 38738 --> https://gcc.gnu.org/bugzilla/attachment.cgi?id=38738&action=edit reduce test case that ice There is a rule in the 'gcc internals' document that states that 'enabled' attribute must not depend on the current insn operands. But unfortunately such a dependency exists due to 'use_literal_pool' attribute dependency on operands[1] and 'use_literal_pool' usage in 'enabled' attribute definition (see arm.md). This leads to ice on check_bool_attrs() assertion in recog.c that exactly checks that 'enabled', 'preferred_for_size' or 'preferred_for_speed' are static properties of the subtarget (as stated in gcc internals document and in check_bool_attrs() comment). Find attached a test case that triggers this ice. >> arm-none-eabi-gcc -c simple.c -mslow-flash-data -O0 -mfloat-abi=hard >> -march=armv7-m -mthumb -mfpu=vfpv3 will trigger an ice whereas >> arm-none-eabi-gcc -c simple.c -mno-slow-flash-data -O0 -mfloat-abi=hard >> -march=armv7-m -mthumb -mfpu=vfpv3 will not. Mickael