Commit d2f9e6ad by Matthew Malcomson

[Arm] Disallow arm_movdi when targetting MVE

Without disabling this, the pattern can try and move DImode values
between floating point registers and general registers.
The constraints on this pattern can't handle that, and reload goes into
an infinite loop.

This was the cause of a testsuite failure in cde_v_1_mve.c, which is now
gone.

A DImode move for MVE now uses the `movdi_vfp` pattern, which is the same
pattern used for such a move when MVE is not available but the target has
TARGET_HARD_FLOAT.

Testing done:
    Bootstrapped and regtested on arm-none-linux-gnueabihf
    regtested on arm-none-eabi

gcc/ChangeLog:

2020-04-15  Matthew Malcomson  <matthew.malcomson@arm.com>

	* config/arm/arm.md (arm_movdi): Disallow for MVE.
parent 5b2f76e3
2020-04-15 Matthew Malcomson <matthew.malcomson@arm.com>
* config/arm/arm.md (arm_movdi): Disallow for MVE.
2020-04-15 Richard Biener <rguenther@suse.de> 2020-04-15 Richard Biener <rguenther@suse.de>
PR middle-end/94539 PR middle-end/94539
......
...@@ -6233,6 +6233,7 @@ ...@@ -6233,6 +6233,7 @@
(match_operand:DI 1 "di_operand" "rDa,Db,Dc,mi,r"))] (match_operand:DI 1 "di_operand" "rDa,Db,Dc,mi,r"))]
"TARGET_32BIT "TARGET_32BIT
&& !(TARGET_HARD_FLOAT) && !(TARGET_HARD_FLOAT)
&& !(TARGET_HAVE_MVE || TARGET_HAVE_MVE_FLOAT)
&& !TARGET_IWMMXT && !TARGET_IWMMXT
&& ( register_operand (operands[0], DImode) && ( register_operand (operands[0], DImode)
|| register_operand (operands[1], DImode))" || register_operand (operands[1], DImode))"
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment