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

Reply via email to