From 724d7c55344659d3a83d80037719281ce4cdf8f8 Mon Sep 17 00:00:00 2001 From: Eric Botcazou Date: Sun, 17 Jun 2007 13:17:10 +0200 Subject: [PATCH] sparc.c (sparc_vis_init_builtins): Retrieve the return mode from the builtin itself. * config/sparc/sparc.c (sparc_vis_init_builtins): Retrieve the return mode from the builtin itself. (sparc_fold_builtin): Fix cast of zero constant. From-SVN: r125768 --- gcc/ChangeLog | 6 +++++ gcc/config/sparc/sparc.c | 26 +++++++++++---------- gcc/testsuite/ChangeLog | 12 ++++++++++ gcc/testsuite/gcc.target/sparc/align.c | 3 +-- gcc/testsuite/gcc.target/sparc/combined-2.c | 4 ++-- gcc/testsuite/gcc.target/sparc/fexpand.c | 2 +- gcc/testsuite/gcc.target/sparc/fnot.c | 8 +++---- gcc/testsuite/gcc.target/sparc/fpack16.c | 2 +- gcc/testsuite/gcc.target/sparc/fpmerge.c | 4 ++-- gcc/testsuite/gcc.target/sparc/fpmul.c | 4 ++-- gcc/testsuite/gcc.target/sparc/noresult.c | 1 - gcc/testsuite/gcc.target/sparc/pdist.c | 3 +-- 12 files changed, 46 insertions(+), 29 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1994bf99d42..30406dd62de 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,9 @@ +2007-06-17 Eric Botcazou + + * config/sparc/sparc.c (sparc_vis_init_builtins): Retrieve the + return mode from the builtin itself. + (sparc_fold_builtin): Fix cast of zero constant. + 2007-06-16 Uros Bizjak * targhooks.c (default_builtin_reciprocal): New default target hook. diff --git a/gcc/config/sparc/sparc.c b/gcc/config/sparc/sparc.c index 85b41cbbcf2..0c9989e3b63 100644 --- a/gcc/config/sparc/sparc.c +++ b/gcc/config/sparc/sparc.c @@ -8031,8 +8031,10 @@ sparc_vis_init_builtins (void) Expand builtin functions for sparc intrinsics. */ static rtx -sparc_expand_builtin (tree exp, rtx target, rtx subtarget ATTRIBUTE_UNUSED, - enum machine_mode tmode, int ignore ATTRIBUTE_UNUSED) +sparc_expand_builtin (tree exp, rtx target, + rtx subtarget ATTRIBUTE_UNUSED, + enum machine_mode tmode ATTRIBUTE_UNUSED, + int ignore ATTRIBUTE_UNUSED) { tree arg; call_expr_arg_iterator iter; @@ -8042,14 +8044,13 @@ sparc_expand_builtin (tree exp, rtx target, rtx subtarget ATTRIBUTE_UNUSED, enum machine_mode mode[4]; int arg_count = 0; - mode[arg_count] = tmode; - - if (target == 0 - || GET_MODE (target) != tmode - || ! (*insn_data[icode].operand[0].predicate) (target, tmode)) - op[arg_count] = gen_reg_rtx (tmode); + mode[0] = insn_data[icode].operand[0].mode; + if (!target + || GET_MODE (target) != mode[0] + || ! (*insn_data[icode].operand[0].predicate) (target, mode[0])) + op[0] = gen_reg_rtx (mode[0]); else - op[arg_count] = target; + op[0] = target; FOR_EACH_CALL_EXPR_ARG (arg, iter, exp) { @@ -8162,11 +8163,11 @@ sparc_fold_builtin (tree fndecl, tree arglist, bool ignore) { tree arg0, arg1, arg2; tree rtype = TREE_TYPE (TREE_TYPE (fndecl)); - - if (ignore && DECL_FUNCTION_CODE (fndecl) != CODE_FOR_alignaddrsi_vis + if (ignore + && DECL_FUNCTION_CODE (fndecl) != CODE_FOR_alignaddrsi_vis && DECL_FUNCTION_CODE (fndecl) != CODE_FOR_alignaddrdi_vis) - return build_int_cst (rtype, 0); + return fold_convert (rtype, integer_zero_node); switch (DECL_FUNCTION_CODE (fndecl)) { @@ -8280,6 +8281,7 @@ sparc_fold_builtin (tree fndecl, tree arglist, bool ignore) default: break; } + return NULL_TREE; } diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 83864348f78..2a69e6ae4ea 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,15 @@ +2007-06-17 Eric Botcazou + + * gcc.target/sparc/align.c: Use 'unsigned char' as element type. + * gcc.target/sparc/combined-2.c: Likewise. + * gcc.target/sparc/fexpand.c : Likewise. + * gcc.target/sparc/fnot.c: Likewise. Fix a couple of prototypes. + * gcc.target/sparc/fpack16.c : Likewise. + * gcc.target/sparc/fpmerge.c : Likewise. + * gcc.target/sparc/fpmul.c : Likewise. + * gcc.target/sparc/noresult.c : Likewise. + * gcc.target/sparc/pdist.c: Likewise. + 2007-06-16 Uros Bizjak PR middle-end/31723 diff --git a/gcc/testsuite/gcc.target/sparc/align.c b/gcc/testsuite/gcc.target/sparc/align.c index d9cc162e828..804ca9397f3 100644 --- a/gcc/testsuite/gcc.target/sparc/align.c +++ b/gcc/testsuite/gcc.target/sparc/align.c @@ -1,10 +1,9 @@ /* { dg-do compile } */ /* { dg-options "-mcpu=ultrasparc -mvis" } */ - typedef long long int64_t; typedef int vec32 __attribute__((vector_size(8))); typedef short vec16 __attribute__((vector_size(8))); -typedef char vec8 __attribute__((vector_size(8))); +typedef unsigned char vec8 __attribute__((vector_size(8))); vec16 foo1 (vec16 a, vec16 b) { return __builtin_vis_faligndatav4hi (a, b); diff --git a/gcc/testsuite/gcc.target/sparc/combined-2.c b/gcc/testsuite/gcc.target/sparc/combined-2.c index 016e4fa6a6c..c4b70a55a2d 100644 --- a/gcc/testsuite/gcc.target/sparc/combined-2.c +++ b/gcc/testsuite/gcc.target/sparc/combined-2.c @@ -1,7 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-O2 -mcpu=ultrasparc -mvis" } */ -typedef char pixel __attribute__((vector_size(4))); -typedef char vec8 __attribute__((vector_size(8))); +typedef unsigned char pixel __attribute__((vector_size(4))); +typedef unsigned char vec8 __attribute__((vector_size(8))); typedef short vec16 __attribute__((vector_size(8))); vec16 foo (pixel a, pixel b) { diff --git a/gcc/testsuite/gcc.target/sparc/fexpand.c b/gcc/testsuite/gcc.target/sparc/fexpand.c index 2483f4f7235..21aeafff0b1 100644 --- a/gcc/testsuite/gcc.target/sparc/fexpand.c +++ b/gcc/testsuite/gcc.target/sparc/fexpand.c @@ -1,7 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-mcpu=ultrasparc -mvis" } */ typedef short vec16 __attribute__((vector_size(8))); -typedef char vec8 __attribute__((vector_size(4))); +typedef unsigned char vec8 __attribute__((vector_size(4))); vec16 foo (vec8 a) { return __builtin_vis_fexpand (a); diff --git a/gcc/testsuite/gcc.target/sparc/fnot.c b/gcc/testsuite/gcc.target/sparc/fnot.c index e6f98d412a6..dceee52f7da 100644 --- a/gcc/testsuite/gcc.target/sparc/fnot.c +++ b/gcc/testsuite/gcc.target/sparc/fnot.c @@ -1,8 +1,8 @@ /* { dg-do compile } */ /* { dg-options "-O -mcpu=ultrasparc -mvis" } */ -typedef char vec8 __attribute__((vector_size(8))); +typedef unsigned char vec8 __attribute__((vector_size(8))); typedef short vec16 __attribute__((vector_size(8))); -typedef int vec32 __attribute__((vector_size(8))); +typedef int vec32 __attribute__((vector_size(8))); extern vec8 foo1_8(void); extern void foo2_8(vec8); @@ -21,7 +21,7 @@ vec8 fun8_2(vec8 a) #endif extern vec16 foo1_16(void); -extern void foo2_16(vec8); +extern void foo2_16(vec16); vec16 fun16(void) @@ -38,7 +38,7 @@ vec16 fun16_2(vec16 a) #endif extern vec32 foo1_32(void); -extern void foo2_32(vec8); +extern void foo2_32(vec32); vec32 fun32(void) { diff --git a/gcc/testsuite/gcc.target/sparc/fpack16.c b/gcc/testsuite/gcc.target/sparc/fpack16.c index 2f7aac56171..79e0c4c1577 100644 --- a/gcc/testsuite/gcc.target/sparc/fpack16.c +++ b/gcc/testsuite/gcc.target/sparc/fpack16.c @@ -1,7 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-mcpu=ultrasparc -mvis" } */ typedef short vec16 __attribute__((vector_size(8))); -typedef char vec8 __attribute__((vector_size(4))); +typedef unsigned char vec8 __attribute__((vector_size(4))); vec8 foo (vec16 a) { return __builtin_vis_fpack16 (a); diff --git a/gcc/testsuite/gcc.target/sparc/fpmerge.c b/gcc/testsuite/gcc.target/sparc/fpmerge.c index 013795cc6d7..4d6a9c02382 100644 --- a/gcc/testsuite/gcc.target/sparc/fpmerge.c +++ b/gcc/testsuite/gcc.target/sparc/fpmerge.c @@ -1,7 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-mcpu=ultrasparc -mvis" } */ -typedef char pixel __attribute__((vector_size(8))); -typedef char vec8 __attribute__((vector_size(4))); +typedef unsigned char pixel __attribute__((vector_size(8))); +typedef unsigned char vec8 __attribute__((vector_size(4))); pixel foo (vec8 a, vec8 b) { return __builtin_vis_fpmerge (a, b); diff --git a/gcc/testsuite/gcc.target/sparc/fpmul.c b/gcc/testsuite/gcc.target/sparc/fpmul.c index 991cc75d661..71b3b17ac57 100644 --- a/gcc/testsuite/gcc.target/sparc/fpmul.c +++ b/gcc/testsuite/gcc.target/sparc/fpmul.c @@ -2,9 +2,9 @@ /* { dg-options "-mcpu=ultrasparc -mvis" } */ typedef int vec32 __attribute__((vector_size(8))); typedef short vec16 __attribute__((vector_size(8))); -typedef char pixel __attribute__((vector_size(4))); +typedef unsigned char pixel __attribute__((vector_size(4))); typedef short pixel16 __attribute__((vector_size(4))); -typedef char vec8 __attribute__((vector_size(8))); +typedef unsigned char vec8 __attribute__((vector_size(8))); vec16 foo1 (pixel a, vec16 b) { return __builtin_vis_fmul8x16 (a, b); diff --git a/gcc/testsuite/gcc.target/sparc/noresult.c b/gcc/testsuite/gcc.target/sparc/noresult.c index f32805d3547..1be7458d2be 100644 --- a/gcc/testsuite/gcc.target/sparc/noresult.c +++ b/gcc/testsuite/gcc.target/sparc/noresult.c @@ -1,7 +1,6 @@ /* { dg-do compile } */ /* { dg-options "-mcpu=ultrasparc -mvis" } */ typedef short vec16 __attribute__((vector_size(8))); -typedef char vec8 __attribute__((vector_size(4))); void foo (vec16 a) { __builtin_vis_fpack16 (a); diff --git a/gcc/testsuite/gcc.target/sparc/pdist.c b/gcc/testsuite/gcc.target/sparc/pdist.c index 48ca0dbf139..6ecc20aa178 100644 --- a/gcc/testsuite/gcc.target/sparc/pdist.c +++ b/gcc/testsuite/gcc.target/sparc/pdist.c @@ -1,8 +1,7 @@ /* { dg-do compile } */ /* { dg-options "-mcpu=ultrasparc -mvis" } */ - typedef long long int64_t; -typedef char vec8 __attribute__((vector_size(8))); +typedef unsigned char vec8 __attribute__((vector_size(8))); int64_t foo (vec8 a, vec8 b) { int64_t d = 0; -- 2.30.2