On 04/05/17 11:40, Prakhar Bahuguna wrote:
> On 03/05/2017 11:30:13, Richard Earnshaw (lists) wrote:
>> On 20/04/17 10:54, Prakhar Bahuguna wrote:
>>> [ARM] PR71607: Fix ICE when loading constant
>>>
>>> gcc/ChangeLog:
>>>
>>> 2017-04-18  Andre Vieira  <andre.simoesdiasvie...@arm.com>
>>>         Prakhar Bahuguna  <prakhar.bahug...@arm.com>
>>>
>>>     PR target/71607
>>>     * config/arm/arm.md (use_literal_pool): Removes.
>>>     (64-bit immediate split): No longer takes cost into consideration
>>>     if 'arm_disable_literal_pool' is enabled.
>>>     * config/arm/arm.c (arm_tls_referenced_p): Add diagnostic if TLS is
>>>     used when arm_disable_literal_pool is enabled.
>>>     (arm_max_const_double_inline_cost): Remove use of
>>>     arm_disable_literal_pool.
>>>     (arm_reorg): Add return if arm_disable_literal_pool is enabled.
>>>     * config/arm/vfp.md (no_literal_pool_df_immediate): New.
>>>     (no_literal_pool_sf_immediate): New.
>>>
>>> testsuite/ChangeLog:
>>>
>>> 2017-04-18  Andre Vieira  <andre.simoesdiasvie...@arm.com>
>>>         Thomas Preud'homme  <thomas.preudho...@arm.com>
>>>         Prakhar Bahuguna  <prakhar.bahug...@arm.com>
>>>
>>>     PR target/71607
>>>     * gcc.target/arm/thumb2-slow-flash-data.c: Renamed 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.
>>>     * gcc.target/arm/thumb2-slow-flash-data-4.c: New.
>>>     * gcc.target/arm/thumb2-slow-flash-data-5.c: New.
>>>     * gcc.target/arm/tls-disable-literal-pool.c: New.
>>>
>>> Okay for stage1?
>>>
>>
>> This patch lacks a description of what's going on and why the change is
>> necessary (it should stand alone from the PR data).  It's clearly a
>> non-trivial change, so why have you adopted this approach?
>>
>> R.
>>
> 
> Hi,
> 
> This patch is based off an earlier patch that was applied to the
> embedded-6-branch, and I had neglected to include the full description, which
> is presented below:
> 
> 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.
> 
> Additionally, the use of thread-local storage is disabled if literal pools are
> disabled, as there are no relocations for TLS variables and incorrect code is
> generated as a result. The patch now emits a diagnostic in TLS-enabled
> toolchains if a TLS symbol is found when -mpure-code or -mslow-flash-data are
> enabled.
> 

Thanks, that helps a lot.

+       {
+         /* ARM currently does not provide relocations to encode TLS variables

ARM ELF does not define relocations ...

+  /* Make sure we do not attempt to create a literal pool even though
it should
+     no longer be necessary to create any.  */
+  if (arm_disable_literal_pool)
+    return ;
+

It would be safer to run through the code and then assert that fixups
aren't needed; though that would cost a little computation time.  I
think you could put such an assert at the start of push_minipool_fix.

OK with those changes.

R.

Reply via email to