From: Matthew Malcomson Date: Wed, 15 Apr 2020 11:24:39 +0000 (+0100) Subject: [Arm] Disallow arm_movdi when targetting MVE X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=d2f9e6ad0ce9e1e40821243fa9d01b7fdc42f32c;p=gcc.git [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 * config/arm/arm.md (arm_movdi): Disallow for MVE. --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 2d6c5c88b7d..82e0cd61b00 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +2020-04-15 Matthew Malcomson + + * config/arm/arm.md (arm_movdi): Disallow for MVE. + 2020-04-15 Richard Biener PR middle-end/94539 diff --git a/gcc/config/arm/arm.md b/gcc/config/arm/arm.md index 7bc55cce61b..a6a31f8f4ef 100644 --- a/gcc/config/arm/arm.md +++ b/gcc/config/arm/arm.md @@ -6233,6 +6233,7 @@ (match_operand:DI 1 "di_operand" "rDa,Db,Dc,mi,r"))] "TARGET_32BIT && !(TARGET_HARD_FLOAT) + && !(TARGET_HAVE_MVE || TARGET_HAVE_MVE_FLOAT) && !TARGET_IWMMXT && ( register_operand (operands[0], DImode) || register_operand (operands[1], DImode))"