On Thu, Oct 6, 2016 at 2:57 PM, Andre Vieira (lists) <andre.simoesdiasvie...@arm.com> wrote: > Hello, > > This patch tackles the issue reported in PR71607. This patch takes a > different approach for disabling the creation of literal pools. Instead > of disabling the patterns that would normally transform the rtl into > actual literal pools, it disables the creation of this literal pool rtl > by making the target hook TARGET_CANNOT_FORCE_CONST_MEM return true if > arm_disable_literal_pool is true. I added patterns to split floating > point constants for both SF and DFmode. A pattern to handle the > addressing of label_refs had to be included as well since all > "memory_operand" patterns are disabled when > TARGET_CANNOT_FORCE_CONST_MEM returns true. Also the pattern for > splitting 32-bit immediates had to be changed, it was not accepting > unsigned 32-bit unsigned integers with the MSB set. I believe > const_int_operand expects the mode of the operand to be set to VOIDmode > and not SImode. I have only changed it in the patterns that were > affecting this code, though I suggest looking into changing it in the > rest of the ARM backend. > > I added more test cases. No regressions for arm-none-eabi with > Cortex-M0, Cortex-M3 and Cortex-M7. > > Is this OK for trunk?
Including -mslow-flash-data in your multilib flags ? If no regressions with that ok . regards Ramana > > Cheers, > Andre > > gcc/ChangeLog: > > 2016-10-06 Andre Vieira <andre.simoesdiasvie...@arm.com> > > PR target/71607 > * config/arm/arm.md (use_literal_pool): Remove. > (64-bit immediate split): No longer take cost into consideration > if 'arm_disable_literal_pool' is enabled. > (32-bit const split): Remove SImode from constant, which was > not allowing large unsigned integers to be split. > * config/arm/arm.c (thumb2_legitimate_address_p): Remove handling > of 'arm_disable_literal_pool' here. > (arm_max_const_double_inline_cost): Likewise. > (arm_cannot_force_const_mem): Return false for > 'arm_disable_literal_pool'. > (thumb2_legitimate_address_p): Remove check involving > 'arm_disable_literal_pool' > that is no longer relevant. > (arm_legitimate_constant_p): Ignore the outcome of > 'arm_cannot_force_const_mem' > if 'arm_disable_literal_pool' is enabled. > * config/arm/vfp.md (no_literal_pool_df_immediate): New. > (no_literal_pool_sf_immediate): New. > * config/arm/thumb2.md (*thumb2_movsi_labelref_insn): New. > > gcc/testsuite/ChangeLog: > > 2016-10-06 Andre Vieira <andre.simoesdiasvie...@arm.com> > Thomas Preud'homme <thomas.preudho...@arm.com> > > PR target/71607 > * gcc.target/arm/thumb2-slow-flash-data.c: Rename to ... > * gcc.target/arm/thumb2-slow-flash-data-1.c: ... this. > * gcc.target/arm/thumb2-slow-flash-data-2.c: New. > * gcc.target/arm/thumb2-slow-flash-data-3.c: New. > >