From: rearnsha Date: Tue, 10 Sep 2013 16:55:44 +0000 (+0000) Subject: PR target/58361 X-Git-Url: http://git.sourceforge.jp/view?p=pf3gnuchains%2Fgcc-fork.git;a=commitdiff_plain;h=9d2d693191db459de1d9a2aa6dd998422759e6aa PR target/58361 * arm/vfp.md (combine_vcvt_f32_): Fix pattern to support conditional execution. (combine_vcvt_f64_): Likewise. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/branches/gcc-4_7-branch@202477 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 047f6ad8613..a148b16f77c 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,10 @@ +2013-09-10 Richard Earnshaw + + PR target/58361 + * arm/vfp.md (combine_vcvt_f32_): Fix pattern to + support conditional execution. + (combine_vcvt_f64_): Likewise. + 2013-09-01 Uros Bizjak Backport from mainline diff --git a/gcc/config/arm/vfp.md b/gcc/config/arm/vfp.md index 876f2e26142..d4465a2a2d7 100644 --- a/gcc/config/arm/vfp.md +++ b/gcc/config/arm/vfp.md @@ -1146,18 +1146,18 @@ (set_attr "type" "fcmpd")] ) -;; Fixed point to floating point conversions. +;; Fixed point to floating point conversions. (define_code_iterator FCVT [unsigned_float float]) (define_code_attr FCVTI32typename [(unsigned_float "u32") (float "s32")]) (define_insn "*combine_vcvt_f32_" [(set (match_operand:SF 0 "s_register_operand" "=t") (mult:SF (FCVT:SF (match_operand:SI 1 "s_register_operand" "0")) - (match_operand 2 + (match_operand 2 "const_double_vcvt_power_of_two_reciprocal" "Dt")))] "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP3 && !flag_rounding_math" - "vcvt.f32.\\t%0, %1, %v2" - [(set_attr "predicable" "no") + "vcvt%?.f32.\\t%0, %1, %v2" + [(set_attr "predicable" "yes") (set_attr "type" "f_cvt")] ) @@ -1166,15 +1166,16 @@ (define_insn "*combine_vcvt_f64_" [(set (match_operand:DF 0 "s_register_operand" "=x,x,w") (mult:DF (FCVT:DF (match_operand:SI 1 "s_register_operand" "r,t,r")) - (match_operand 2 + (match_operand 2 "const_double_vcvt_power_of_two_reciprocal" "Dt,Dt,Dt")))] - "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP3 && !flag_rounding_math + "TARGET_32BIT && TARGET_HARD_FLOAT && TARGET_VFP3 && !flag_rounding_math && !TARGET_VFP_SINGLE" "@ - vmov.f32\\t%0, %1\;vcvt.f64.\\t%P0, %P0, %v2 - vmov.f32\\t%0, %1\;vcvt.f64.\\t%P0, %P0, %v2 - vmov.f64\\t%P0, %1, %1\;vcvt.f64.\\t%P0, %P0, %v2" - [(set_attr "predicable" "no") + vmov%?.f32\\t%0, %1\;vcvt%?.f64.\\t%P0, %P0, %v2 + vmov%?.f32\\t%0, %1\;vcvt%?.f64.\\t%P0, %P0, %v2 + vmov%?.f64\\t%P0, %1, %1\;vcvt%?.f64.\\t%P0, %P0, %v2" + [(set_attr "predicable" "yes") + (set_attr "ce_count" "2") (set_attr "type" "f_cvt") (set_attr "length" "8")] )