From: Richard Sandiford Date: Tue, 5 Dec 2017 14:40:37 +0000 (+0000) Subject: [AArch64] Fix some define_insn_and_split conditions X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=6acc594827256e256815741aef5102ca6838fa5b;p=gcc.git [AArch64] Fix some define_insn_and_split conditions The split conditions for aarch64_simd_bsldi_internal and aarch64_simd_bsldi_alt were: "&& GP_REGNUM_P (REGNO (operands[0]))" But since they (deliberately) can be split before reload, the operand matched by register_operand can be a SUBREG rather than a REG. This triggered a boostrap failure building libgcc with rtl checking enabled. While checking other define_insn_and_splits for the same thing, I noticed a couple of SIMD ones were missing the leading "&&", meaning that they would trigger even without TARGET_SIMD. That shouldn't matter in practice, since combine should never end up generating matching rtl, but... 2017-12-05 Richard Sandiford gcc/ * config/aarch64/aarch64-simd.md (aarch64_simd_bsldi_internal) (aarch64_simd_bsldi_alt): Check REG_P before GP_REGNUM_P. (aarch64_cmdi, aarch64_cmtstdi): Add leading "&&" to split condition. From-SVN: r255423 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9097671c09a..87d2b12c7a7 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2017-12-05 Richard Sandiford + + * config/aarch64/aarch64-simd.md (aarch64_simd_bsldi_internal) + (aarch64_simd_bsldi_alt): Check REG_P before GP_REGNUM_P. + (aarch64_cmdi, aarch64_cmtstdi): Add leading "&&" to + split condition. + 2017-12-05 Max Filippov * config/xtensa/xtensa.c (xtensa_asan_shadow_offset): New diff --git a/gcc/config/aarch64/aarch64-simd.md b/gcc/config/aarch64/aarch64-simd.md index 02f0ff0dd2d..ae71af83343 100644 --- a/gcc/config/aarch64/aarch64-simd.md +++ b/gcc/config/aarch64/aarch64-simd.md @@ -2484,7 +2484,7 @@ bit\\t%0.8b, %2.8b, %1.8b bif\\t%0.8b, %3.8b, %1.8b #" - "&& GP_REGNUM_P (REGNO (operands[0]))" + "&& REG_P (operands[0]) && GP_REGNUM_P (REGNO (operands[0]))" [(match_dup 1) (match_dup 1) (match_dup 2) (match_dup 3)] { /* Split back to individual operations. If we're before reload, and @@ -2526,7 +2526,7 @@ bit\\t%0.8b, %3.8b, %1.8b bif\\t%0.8b, %2.8b, %1.8b #" - "&& GP_REGNUM_P (REGNO (operands[0]))" + "&& REG_P (operands[0]) && GP_REGNUM_P (REGNO (operands[0]))" [(match_dup 0) (match_dup 1) (match_dup 2) (match_dup 3)] { /* Split back to individual operations. If we're before reload, and @@ -4453,7 +4453,7 @@ (clobber (reg:CC CC_REGNUM))] "TARGET_SIMD" "#" - "reload_completed" + "&& reload_completed" [(set (match_operand:DI 0 "register_operand") (neg:DI (COMPARISONS:DI @@ -4516,7 +4516,7 @@ (clobber (reg:CC CC_REGNUM))] "TARGET_SIMD" "#" - "reload_completed" + "&& reload_completed" [(set (match_operand:DI 0 "register_operand") (neg:DI (UCOMPARISONS:DI @@ -4587,7 +4587,7 @@ (clobber (reg:CC CC_REGNUM))] "TARGET_SIMD" "#" - "reload_completed" + "&& reload_completed" [(set (match_operand:DI 0 "register_operand") (neg:DI (ne:DI