]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
re PR target/58361 (Wrong floating point code generated for ARM target)
authorRichard Earnshaw <rearnsha@arm.com>
Tue, 10 Sep 2013 16:55:44 +0000 (16:55 +0000)
committerRichard Earnshaw <rearnsha@gcc.gnu.org>
Tue, 10 Sep 2013 16:55:44 +0000 (16:55 +0000)
PR target/58361
* arm/vfp.md (combine_vcvt_f32_<FCVTI32typename>): Fix pattern to
support conditional execution.
(combine_vcvt_f64_<FCVTI32typename>): Likewise.

From-SVN: r202477

gcc/ChangeLog
gcc/config/arm/vfp.md

index 047f6ad8613bc4fb7b1874a3940884c9d0434f09..a148b16f77c6e1a4f8786d74ad65e2b0ae8866a9 100644 (file)
@@ -1,3 +1,10 @@
+2013-09-10  Richard Earnshaw  <rearnsha@arm.com>
+
+       PR target/58361
+       * arm/vfp.md (combine_vcvt_f32_<FCVTI32typename>): Fix pattern to
+       support conditional execution.
+       (combine_vcvt_f64_<FCVTI32typename>): Likewise.
+
 2013-09-01  Uros Bizjak  <ubizjak@gmail.com>
 
        Backport from mainline
index 876f2e261428daac466db10541743e48168a8497..d4465a2a2d7e8ee93a362e3975fd73b11df1775c 100644 (file)
    (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_<FCVTI32typename>"
   [(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.<FCVTI32typename>\\t%0, %1, %v2"
- [(set_attr "predicable" "no")
+  "vcvt%?.f32.<FCVTI32typename>\\t%0, %1, %v2"
+ [(set_attr "predicable" "yes")
   (set_attr "type" "f_cvt")]
 )
 
 (define_insn "*combine_vcvt_f64_<FCVTI32typename>"
   [(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.<FCVTI32typename>\\t%P0, %P0, %v2
-  vmov.f32\\t%0, %1\;vcvt.f64.<FCVTI32typename>\\t%P0, %P0, %v2
-  vmov.f64\\t%P0, %1, %1\;vcvt.f64.<FCVTI32typename>\\t%P0, %P0, %v2"
- [(set_attr "predicable" "no")
+  vmov%?.f32\\t%0, %1\;vcvt%?.f64.<FCVTI32typename>\\t%P0, %P0, %v2
+  vmov%?.f32\\t%0, %1\;vcvt%?.f64.<FCVTI32typename>\\t%P0, %P0, %v2
+  vmov%?.f64\\t%P0, %1, %1\;vcvt%?.f64.<FCVTI32typename>\\t%P0, %P0, %v2"
+ [(set_attr "predicable" "yes")
+  (set_attr "ce_count" "2")
   (set_attr "type" "f_cvt")
   (set_attr "length" "8")]
 )