From: Carl Love Date: Thu, 16 Feb 2017 20:59:20 +0000 (+0000) Subject: backport: re PR target/79545 (gcc[5/6]: RS6000, xvcvuxdsp and xvcvsxdsp RTL defines... X-Git-Tag: releases/gcc-5.5.0~517 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=c305387772b680aa10be4ef64eda403abedf3860;p=thirdparty%2Fgcc.git backport: re PR target/79545 (gcc[5/6]: RS6000, xvcvuxdsp and xvcvsxdsp RTL defines have wrong type) gcc/ChangeLog: 2017-02-16 Carl Love Backport from mainline commit r245460 on 2017-02-14 PR 79545 * config/rs6000/rs6000.c: Add case statement entry to make the xvcvuxdsp built-in argument unsigned. * config/rs6000/vsx.md: Fix the source and return operand types so they match the instruction definitions from the ISA document. Fix typo in the instruction generation for the (define_insn "vsx_xvcvuxdsp" statement. gcc/testsuite/ChangeLog: 2017-01-16 Carl Love Backport from mainline commit r245460 on 2017-02-14 PR 79545 * gcc.target/powerpc/vsx-builtin-3.c: Add missing test case for the xvcvsxdsp and xvcvuxdsp instructions. From-SVN: r245518 --- diff --git a/gcc/ChangeLog b/gcc/ChangeLog index c7452e1b3cc7..fae537683761 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,15 @@ +2017-02-16 Carl Love + + Backport from mainline commit r245460 on 2017-02-14 + + PR 79545 + * config/rs6000/rs6000.c: Add case statement entry to make the xvcvuxdsp + built-in argument unsigned. + * config/rs6000/vsx.md: Fix the source and return operand types so they + match the instruction definitions from the ISA document. Fix typo + in the instruction generation for the (define_insn "vsx_xvcvuxdsp" + statement. + 2017-02-14 Martin Liska Backport from mainline diff --git a/gcc/config/rs6000/rs6000.c b/gcc/config/rs6000/rs6000.c index 5bba64e9c07d..234d277637b2 100644 --- a/gcc/config/rs6000/rs6000.c +++ b/gcc/config/rs6000/rs6000.c @@ -15628,6 +15628,7 @@ builtin_function_type (machine_mode mode_ret, machine_mode mode_arg0, break; /* unsigned args, signed return. */ + case VSX_BUILTIN_XVCVUXDSP: case VSX_BUILTIN_XVCVUXDDP_UNS: case ALTIVEC_BUILTIN_UNSFLOAT_V4SI_V4SF: h.uns_p[1] = 1; diff --git a/gcc/config/rs6000/vsx.md b/gcc/config/rs6000/vsx.md index a689c2b71e70..efbd3ecccb8e 100644 --- a/gcc/config/rs6000/vsx.md +++ b/gcc/config/rs6000/vsx.md @@ -1501,19 +1501,19 @@ [(set_attr "type" "vecdouble")]) (define_insn "vsx_xvcvsxdsp" - [(set (match_operand:V4SI 0 "vsx_register_operand" "=wd,?wa") - (unspec:V4SI [(match_operand:V2DF 1 "vsx_register_operand" "wf,wa")] + [(set (match_operand:V4SF 0 "vsx_register_operand" "=wd,?wa") + (unspec:V4SF [(match_operand:V2DI 1 "vsx_register_operand" "wf,wa")] UNSPEC_VSX_CVSXDSP))] "VECTOR_UNIT_VSX_P (V2DFmode)" "xvcvsxdsp %x0,%x1" [(set_attr "type" "vecfloat")]) (define_insn "vsx_xvcvuxdsp" - [(set (match_operand:V4SI 0 "vsx_register_operand" "=wd,?wa") - (unspec:V4SI [(match_operand:V2DF 1 "vsx_register_operand" "wf,wa")] + [(set (match_operand:V4SF 0 "vsx_register_operand" "=wd,?wa") + (unspec:V4SF [(match_operand:V2DI 1 "vsx_register_operand" "wf,wa")] UNSPEC_VSX_CVUXDSP))] "VECTOR_UNIT_VSX_P (V2DFmode)" - "xvcvuxwdp %x0,%x1" + "xvcvuxdsp %x0,%x1" [(set_attr "type" "vecdouble")]) ;; Convert from 32-bit to 64-bit types diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 8eb2ec6301b6..580c2f6459bd 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,11 @@ +2017-01-16 Carl Love + + Backport from mainline commit r245460 on 2017-02-14 + + PR 79545 + * gcc.target/powerpc/vsx-builtin-3.c: Add missing test case for the + xvcvsxdsp and xvcvuxdsp instructions. + 2017-02-06 Carl Love * gcc.target/powerpc/builtins-3-p8.c: Add new testfile for missing vec_packs built-in tests. diff --git a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-3.c b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-3.c index f337c1c745bf..ff5296c87e23 100644 --- a/gcc/testsuite/gcc.target/powerpc/vsx-builtin-3.c +++ b/gcc/testsuite/gcc.target/powerpc/vsx-builtin-3.c @@ -35,6 +35,8 @@ /* { dg-final { scan-assembler "xvcmpgesp" } } */ /* { dg-final { scan-assembler "xxsldwi" } } */ /* { dg-final { scan-assembler-not "call" } } */ +/* { dg-final { scan-assembler "xvcvsxdsp" } } */ +/* { dg-final { scan-assembler "xvcvuxdsp" } } */ extern __vector int si[][4]; extern __vector short ss[][4]; @@ -50,7 +52,9 @@ extern __vector __pixel p[][4]; #ifdef __VSX__ extern __vector double d[][4]; extern __vector long sl[][4]; +extern __vector long long sll[][4]; extern __vector unsigned long ul[][4]; +extern __vector unsigned long long ull[][4]; extern __vector __bool long bl[][4]; #endif @@ -211,3 +215,22 @@ int do_xxsldwi (void) d[i][0] = __builtin_vsx_xxsldwi (d[i][1], d[i][2], 3); i++; return i; } + +int do_xvcvsxdsp (void) +{ + int i = 0; + + f[i][0] = __builtin_vsx_xvcvsxdsp (sll[i][1]); i++; + + return i; +} + +int do_xvcvuxdsp (void) +{ + int i = 0; + + f[i][0] = __builtin_vsx_xvcvuxdsp (ull[i][1]); i++; + + return i; +} +