Message ID | 56990AA9.7010408@foss.arm.com |
---|---|
State | New |
Headers | show |
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.
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 --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); +}