diff options
author | Kelvin Nilsen <kelvin@gcc.gnu.org> | 2016-07-19 13:22:49 +0000 |
---|---|---|
committer | Kelvin Nilsen <kelvin@gcc.gnu.org> | 2016-07-19 13:22:49 +0000 |
commit | b0e1c0536a8ae7a4011a04c8c782e597dda4e15d (patch) | |
tree | 6ed60930a5563ec8302ee6878933d0b28a1e00f1 | |
parent | 9137b85bc3855266bbbc2d2c28379c33142bee49 (diff) |
fixed scalar-extract- exp and sig and scalar-insert-exp -2
git-svn-id: https://gcc.gnu.org/svn/gcc/branches/ibm/rfc-2464-bounce2@238472 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r-- | gcc/config/rs6000/rs6000-c.c | 56 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-2.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-2.c | 2 |
3 files changed, 29 insertions, 31 deletions
diff --git a/gcc/config/rs6000/rs6000-c.c b/gcc/config/rs6000/rs6000-c.c index 99e75d614cd..672d2bcbf33 100644 --- a/gcc/config/rs6000/rs6000-c.c +++ b/gcc/config/rs6000/rs6000-c.c @@ -31,7 +31,7 @@ #include "c-family/c-pragma.h" #include "langhooks.h" #include "c/c-tree.h" -#define KELVIN_DEBUG +#undef KELVIN_DEBUG #ifdef KELVIN_DEBUG #include "print-tree.h" #endif @@ -4810,6 +4810,7 @@ altivec_resolve_overloaded_builtin (location_t loc, tree fndecl, tree types[3], args[3]; const struct altivec_builtin_types *desc; unsigned int n; + bool unsupported_builtin; if (!rs6000_overloaded_builtin_p (fcode)) return NULL_TREE; @@ -5593,6 +5594,7 @@ assignment for unaligned loads and stores"); return build_int_cst (NULL_TREE, TYPE_VECTOR_SUBPARTS (types[0])); } + unsupported_builtin = false; for (desc = altivec_overloaded_builtins; desc->code && desc->code != fcode; desc++) continue; @@ -5600,12 +5602,12 @@ assignment for unaligned loads and stores"); /* For arguments after the last, we have RS6000_BTI_NOT_OPAQUE in the opX fields. */ #ifdef KELVIN_DEBUG - fprintf (stderr, "P9V_BUILTIN_VSEEDP is %d, P9V_BUILTIN_VEC_VSEEDP is %d\n", - P9V_BUILTIN_VSEEDP, P9V_BUILTIN_VEC_VSEEDP); + fprintf (stderr, "P9V_BUILTIN_VSIEDP is %d, P9V_BUILTIN_VEC_VSIEDP is %d\n", + P9V_BUILTIN_VSIEDP, P9V_BUILTIN_VEC_VSIEDP); #endif for (; desc->code == fcode; desc++) -#ifdef KELVIN_DEBUG { +#ifdef KELVIN_DEBUG fprintf (stderr, "in loop, desc->code is: %d, ->overloaded_code: %d\n", desc->code, desc->overloaded_code); @@ -5630,34 +5632,30 @@ assignment for unaligned loads and stores"); fprintf (stderr, "type compatible? %d\n", rs6000_builtin_type_compatible (types[2], desc->op3)); } +#endif if ((desc->op1 == RS6000_BTI_NOT_OPAQUE - || rs6000_builtin_type_compatible (types[0], desc->op1)) - && (desc->op2 == RS6000_BTI_NOT_OPAQUE - || rs6000_builtin_type_compatible (types[1], desc->op2)) - && (desc->op3 == RS6000_BTI_NOT_OPAQUE - || rs6000_builtin_type_compatible (types[2], desc->op3)) - && rs6000_builtin_decls[desc->overloaded_code] != NULL_TREE) - return altivec_build_resolved_builtin (args, n, desc); + || rs6000_builtin_type_compatible (types[0], desc->op1)) + && (desc->op2 == RS6000_BTI_NOT_OPAQUE + || rs6000_builtin_type_compatible (types[1], desc->op2)) + && (desc->op3 == RS6000_BTI_NOT_OPAQUE + || rs6000_builtin_type_compatible (types[2], desc->op3))) + { + if (rs6000_builtin_decls[desc->overloaded_code] != NULL_TREE) + return altivec_build_resolved_builtin (args, n, desc); + else + { + unsupported_builtin = true; + } + } } -#else - if ((desc->op1 == RS6000_BTI_NOT_OPAQUE - || rs6000_builtin_type_compatible (types[0], desc->op1)) - && (desc->op2 == RS6000_BTI_NOT_OPAQUE - || rs6000_builtin_type_compatible (types[1], desc->op2)) - && (desc->op3 == RS6000_BTI_NOT_OPAQUE - || rs6000_builtin_type_compatible (types[2], desc->op3)) - && rs6000_builtin_decls[desc->overloaded_code] != - NULL_TREE) - return altivec_build_resolved_builtin (args, n, desc); -#endif - if (rs6000_builtin_decls[desc->overloaded_code] == NULL_TREE) - { - const char *name = rs6000_overloaded_builtin_name (fcode); - error ("Builtin function %s not supported in this compiler configuration", - name); - return error_mark_node; - } + if (unsupported_builtin) + { + const char *name = rs6000_overloaded_builtin_name (fcode); + error ("Builtin function %s not supported in this compiler configuration", + name); + return error_mark_node; + } bad: { diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-2.c b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-2.c index 0b425db2f0d..4d3cb9e885a 100644 --- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-2.c +++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-exp-2.c @@ -15,7 +15,7 @@ unsigned int get_exponent (double *p) { double source = *p; - return scalar_extract_exp (source); /* { dg-error "Builtin function __builtin_vec_scalar_extract_exp notsupported in this compiler configuration" } */ + return scalar_extract_exp (source); /* { dg-error "Builtin function __builtin_vec_scalar_extract_exp not supported in this compiler configuration" } */ } diff --git a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-2.c b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-2.c index 53383b89af9..ffcd669a32d 100644 --- a/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-2.c +++ b/gcc/testsuite/gcc.target/powerpc/bfp/scalar-extract-sig-2.c @@ -12,5 +12,5 @@ unsigned long long int get_significand (double *p) { double source = *p; - return __builtin_vec_scalar_extract_sig (source); /* { dg-error "Builtin function __builtin_vec_scalar_extract_sig notsupported in this compiler configuration" } */ + return __builtin_vec_scalar_extract_sig (source); /* { dg-error "Builtin function __builtin_vec_scalar_extract_sig not supported in this compiler configuration" } */ } |