diff mbox

[ARM] PR target/69135: Mark ARMv8 vcvt instructions as unconditional

Message ID 56990AA9.7010408@foss.arm.com
State New
Headers show

Commit Message

Kyrill Tkachov Jan. 15, 2016, 3:05 p.m. UTC
Hi all,

In this PR the ARMv8 vcvt instructions end up being conditionalised when they don't have a conditional form.
setting the predicable attribute to "no" is not enough. We need to set the "conds" attribute to unconditional as well.

Bootstrapped and tested on arm-none-linux-gnueabihf.
Ok for trunk and GCC 5?

Thanks,
Kyrill

2016-01-15  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>

     PR target/69135
     * config/arm/vfp.md (l<vrint_pattern><su_optab><mode>si2): Set "conds"
     attribute to unconditional.  Remove %? from output template.

2016-01-15  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>

     PR target/69135
     * gcc.target/arm/pr69135_1.c: New test.

Comments

Ramana Radhakrishnan Jan. 19, 2016, 2:21 p.m. UTC | #1
On Fri, Jan 15, 2016 at 3:05 PM, Kyrill Tkachov
<kyrylo.tkachov@foss.arm.com> wrote:
> Hi all,
>
> In this PR the ARMv8 vcvt instructions end up being conditionalised when
> they don't have a conditional form.
> setting the predicable attribute to "no" is not enough. We need to set the
> "conds" attribute to unconditional as well.
>
> Bootstrapped and tested on arm-none-linux-gnueabihf.
> Ok for trunk and GCC 5?
>

Ok and for all afflicted release branches. Please check 4.9 just in case.

Ramana

> Thanks,
> Kyrill
>
> 2016-01-15  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
>
>     PR target/69135
>     * config/arm/vfp.md (l<vrint_pattern><su_optab><mode>si2): Set "conds"
>     attribute to unconditional.  Remove %? from output template.
>
> 2016-01-15  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
>
>     PR target/69135
>     * gcc.target/arm/pr69135_1.c: New test.
Kyrill Tkachov Jan. 19, 2016, 3:16 p.m. UTC | #2
On 19/01/16 14:21, Ramana Radhakrishnan wrote:
> On Fri, Jan 15, 2016 at 3:05 PM, Kyrill Tkachov
> <kyrylo.tkachov@foss.arm.com> wrote:
>> Hi all,
>>
>> In this PR the ARMv8 vcvt instructions end up being conditionalised when
>> they don't have a conditional form.
>> setting the predicable attribute to "no" is not enough. We need to set the
>> "conds" attribute to unconditional as well.
>>
>> Bootstrapped and tested on arm-none-linux-gnueabihf.
>> Ok for trunk and GCC 5?
>>
> Ok and for all afflicted release branches. Please check 4.9 just in case.

Thanks,
This pattern was introduced for GCC 5, so 4.9 is not afflicted.
I did double-check.
Committed to trunk and GCC 5.

Kyrill

> Ramana
>
>> Thanks,
>> Kyrill
>>
>> 2016-01-15  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
>>
>>      PR target/69135
>>      * config/arm/vfp.md (l<vrint_pattern><su_optab><mode>si2): Set "conds"
>>      attribute to unconditional.  Remove %? from output template.
>>
>> 2016-01-15  Kyrylo Tkachov  <kyrylo.tkachov@arm.com>
>>
>>      PR target/69135
>>      * gcc.target/arm/pr69135_1.c: New test.
diff mbox

Patch

diff --git a/gcc/config/arm/vfp.md b/gcc/config/arm/vfp.md
index cf3b202d2565341745b0c3bd3bc4299e91e86c31..ac5f3b862b5a66227cfa20c36c9f780c743ed853 100644
--- a/gcc/config/arm/vfp.md
+++ b/gcc/config/arm/vfp.md
@@ -1334,8 +1334,9 @@  (define_insn "l<vrint_pattern><su_optab><mode>si2"
                         [(match_operand:SDF 1
                            "register_operand" "<F_constraint>")] VCVT)))]
   "TARGET_HARD_FLOAT && TARGET_FPU_ARMV8 <vfp_double_cond>"
-  "vcvt<vrint_variant>%?.<su>32.<V_if_elem>\\t%0, %<V_reg>1"
+  "vcvt<vrint_variant>.<su>32.<V_if_elem>\\t%0, %<V_reg>1"
   [(set_attr "predicable" "no")
+   (set_attr "conds" "unconditional")
    (set_attr "type" "f_cvtf2i")]
 )
 
diff --git a/gcc/testsuite/gcc.target/arm/pr69135_1.c b/gcc/testsuite/gcc.target/arm/pr69135_1.c
new file mode 100644
index 0000000000000000000000000000000000000000..6fb9e0681baed833bd530601bfb94d3d86c3e9f2
--- /dev/null
+++ b/gcc/testsuite/gcc.target/arm/pr69135_1.c
@@ -0,0 +1,44 @@ 
+/* { dg-do assemble } */
+/* { dg-require-effective-target arm_v8_vfp_ok } */
+/* { dg-require-effective-target arm_arch_v8a_ok } */
+/* { dg-options "-O2 -ffast-math" } */
+/* { dg-add-options arm_v8_vfp } */
+/* { dg-add-options arm_arch_v8a } */
+
+int global;
+
+void
+lceil_float (float x, int b)
+{
+  if (b) global = __builtin_lceilf (x);
+}
+
+void
+lceil_double (double x, int b)
+{
+  if (b) global = __builtin_lceil (x);
+}
+
+void
+lfloor_float (float x, int b)
+{
+  if (b) global =  __builtin_lfloorf (x);
+}
+
+void
+lfloor_double (double x, int b)
+{
+  if (b) global = __builtin_lfloor (x);
+}
+
+void
+lround_float (float x, int b)
+{
+  if (b) global = __builtin_lroundf (x);
+}
+
+void
+lround_double (double x, int b)
+{
+  if (b) global = __builtin_lround (x);
+}