Commit 48784b00 by Kelvin Nilsen

rs6000-protos.h (rs6000_builtin_is_supported_p): New prototype.

gcc/ChangeLog:

2018-04-13  Kelvin Nilsen  <kelvin@gcc.gnu.org>

	* config/rs6000/rs6000-protos.h (rs6000_builtin_is_supported_p):
	New prototype.
	* config/rs6000/rs6000-c.c (altivec_resolve_overloaded_builtin):
	Add note to error message to explain internal mapping of overloaded
	built-in function name to non-overloaded built-in function name.
	* config/rs6000/rs6000.c (rs6000_builtin_is_supported_p): New
	function.

gcc/testsuite/ChangeLog:

2018-04-13  Kelvin Nilsen  <kelvin@gcc.gnu.org>

	* gcc.target/powerpc/bfp/scalar-extract-sig-5.c: Simplify to
	prevent cascading of errors and change expected error message.
	* gcc.target/powerpc/bfp/scalar-test-neg-4.c: Restrict this test
	to 64-bit targets.
	* gcc.target/powerpc/bfp/scalar-test-data-class-8.c: Likewise.
	* gcc.target/powerpc/bfp/scalar-test-data-class-9.c: Likewise.
	* gcc.target/powerpc/bfp/scalar-test-data-class-10.c: Likewise.
	* gcc.target/powerpc/bfp/scalar-insert-exp-11.c: Change expected
	error message.
	* gcc.target/powerpc/bfp/scalar-extract-exp-5.c: Likewise.

From-SVN: r259442
parent 63d6cbd1
2018-04-17 Kelvin Nilsen <kelvin@gcc.gnu.org>
* config/rs6000/rs6000-protos.h (rs6000_builtin_is_supported_p):
New prototype.
* config/rs6000/rs6000-c.c (altivec_resolve_overloaded_builtin):
Add note to error message to explain internal mapping of overloaded
built-in function name to non-overloaded built-in function name.
* config/rs6000/rs6000.c (rs6000_builtin_is_supported_p): New
function.
2018-04-17 Michael Meissner <meissner@linux.vnet.ibm.com>
PR target/85424
......
......@@ -6894,6 +6894,8 @@ altivec_resolve_overloaded_builtin (location_t loc, tree fndecl,
{
bool unsupported_builtin = false;
enum rs6000_builtins overloaded_code;
tree result = NULL;
for (desc = altivec_overloaded_builtins;
desc->code && desc->code != fcode; desc++)
continue;
......@@ -6906,7 +6908,6 @@ altivec_resolve_overloaded_builtin (location_t loc, tree fndecl,
discrimination between the desired forms of the function. */
if (fcode == P6_OV_BUILTIN_CMPB)
{
int overloaded_code;
machine_mode arg1_mode = TYPE_MODE (types[0]);
machine_mode arg2_mode = TYPE_MODE (types[1]);
......@@ -6941,14 +6942,20 @@ altivec_resolve_overloaded_builtin (location_t loc, tree fndecl,
&& rs6000_builtin_type_compatible (types[1], desc->op2))
{
if (rs6000_builtin_decls[desc->overloaded_code] != NULL_TREE)
return altivec_build_resolved_builtin (args, n, desc);
{
result = altivec_build_resolved_builtin (args, n, desc);
/* overloaded_code is set above */
if (!rs6000_builtin_is_supported_p (overloaded_code))
unsupported_builtin = true;
else
return result;
}
else
unsupported_builtin = true;
}
}
else if (fcode == P9V_BUILTIN_VEC_VSIEDP)
{
int overloaded_code;
machine_mode arg1_mode = TYPE_MODE (types[0]);
if (nargs != 2)
......@@ -6983,12 +6990,20 @@ altivec_resolve_overloaded_builtin (location_t loc, tree fndecl,
while (desc->code && desc->code == fcode
&& desc->overloaded_code != overloaded_code)
desc++;
if (desc->code && (desc->code == fcode)
&& rs6000_builtin_type_compatible (types[0], desc->op1)
&& rs6000_builtin_type_compatible (types[1], desc->op2))
{
if (rs6000_builtin_decls[desc->overloaded_code] != NULL_TREE)
return altivec_build_resolved_builtin (args, n, desc);
{
result = altivec_build_resolved_builtin (args, n, desc);
/* overloaded_code is set above. */
if (!rs6000_builtin_is_supported_p (overloaded_code))
unsupported_builtin = true;
else
return result;
}
else
unsupported_builtin = true;
}
......@@ -7007,7 +7022,18 @@ altivec_resolve_overloaded_builtin (location_t loc, tree fndecl,
|| 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);
{
result = altivec_build_resolved_builtin (args, n, desc);
if (!rs6000_builtin_is_supported_p (desc->overloaded_code))
{
/* Allow loop to continue in case a different
definition is supported. */
overloaded_code = desc->overloaded_code;
unsupported_builtin = true;
}
else
return result;
}
else
unsupported_builtin = true;
}
......@@ -7017,9 +7043,23 @@ altivec_resolve_overloaded_builtin (location_t loc, tree fndecl,
if (unsupported_builtin)
{
const char *name = rs6000_overloaded_builtin_name (fcode);
error ("builtin function %qs not supported in this compiler "
"configuration", name);
return error_mark_node;
if (result != NULL)
{
const char *internal_name
= rs6000_overloaded_builtin_name (overloaded_code);
/* An error message making reference to the name of the
non-overloaded function has already been issued. Add
clarification of the previous message. */
rich_location richloc (line_table, input_location);
inform (&richloc, "builtin %qs requires builtin %qs",
name, internal_name);
}
else
error ("builtin function %qs not supported in this compiler "
"configuration", name);
/* If an error-representing result tree was returned from
altivec_build_resolved_builtin above, use it. */
return (result != NULL) ? result : error_mark_node;
}
}
bad:
......
......@@ -212,6 +212,7 @@ extern void rs6000_sibcall_aix (rtx, rtx, rtx, rtx);
extern void rs6000_aix_asm_output_dwarf_table_ref (char *);
extern void get_ppc476_thunk_name (char name[32]);
extern bool rs6000_overloaded_builtin_p (enum rs6000_builtins);
extern bool rs6000_builtin_is_supported_p (enum rs6000_builtins);
extern const char *rs6000_overloaded_builtin_name (enum rs6000_builtins);
extern int rs6000_store_data_bypass_p (rtx_insn *, rtx_insn *);
extern HOST_WIDE_INT rs6000_builtin_mask_calculate (void);
......
......@@ -15905,6 +15905,18 @@ paired_expand_predicate_builtin (enum insn_code icode, tree exp, rtx target)
return target;
}
/* Check whether a builtin function is supported in this target
configuration. */
bool
rs6000_builtin_is_supported_p (enum rs6000_builtins fncode)
{
HOST_WIDE_INT fnmask = rs6000_builtin_info[fncode].mask;
if ((fnmask & rs6000_builtin_mask) != fnmask)
return false;
else
return true;
}
/* Raise an error message for a builtin function that is called without the
appropriate target options being set. */
2018-04-13 Kelvin Nilsen <kelvin@gcc.gnu.org>
* gcc.target/powerpc/bfp/scalar-extract-sig-5.c: Simplify to
prevent cascading of errors and change expected error message.
* gcc.target/powerpc/bfp/scalar-test-neg-4.c: Restrict this test
to 64-bit targets.
* gcc.target/powerpc/bfp/scalar-test-data-class-8.c: Likewise.
* gcc.target/powerpc/bfp/scalar-test-data-class-9.c: Likewise.
* gcc.target/powerpc/bfp/scalar-test-data-class-10.c: Likewise.
* gcc.target/powerpc/bfp/scalar-insert-exp-11.c: Change expected
error message.
* gcc.target/powerpc/bfp/scalar-extract-exp-5.c: Likewise.
2018-04-17 Jakub Jelinek <jakub@redhat.com>
PR target/85430
......
......@@ -15,7 +15,7 @@ get_exponent (__ieee128 *p)
{
__ieee128 source = *p;
return scalar_extract_exp (source); /* { dg-error "builtin function '__builtin_vec_scalar_extract_exp' not supported in this compiler configuration" } */
return scalar_extract_exp (source); /* { dg-error "requires ISA 3.0 IEEE 128-bit floating point" } */
}
......@@ -8,10 +8,10 @@
error because the builtin requires 64 bits. */
#include <altivec.h>
unsigned __int128 /* { dg-error "'__int128' is not supported on this target" } */
unsigned long long int
get_significand (__ieee128 *p)
{
__ieee128 source = *p;
return __builtin_vec_scalar_extract_sig (source); /* { dg-error "builtin function '__builtin_vec_scalar_extract_sig' not supported in this compiler configuration" } */
return (long long int) __builtin_vec_scalar_extract_sig (source); /* { dg-error "requires ISA 3.0 IEEE 128-bit floating point" } */
}
......@@ -17,5 +17,5 @@ insert_exponent (__ieee128 *significand_p,
__ieee128 significand = *significand_p;
unsigned long long int exponent = *exponent_p;
return scalar_insert_exp (significand, exponent); /* { dg-error "builtin function '__builtin_vec_scalar_insert_exp' not supported in this compiler configuration" } */
return scalar_insert_exp (significand, exponent); /* { dg-error "requires ISA 3.0 IEEE 128-bit floating point" } */
}
/* { dg-do compile { target { powerpc*-*-* } } } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */
/* Require 64-bit target to select expected error message below. 32-bit
target produces different error message. */
/* { dg-require-effective-target lp64 } */
/* { dg-require-effective-target powerpc_p9vector_ok } */
/* { dg-options "-mcpu=power9" } */
......
/* { dg-do compile { target { powerpc*-*-* } } } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */
/* { dg-require-effective-target lp64 } */
/* { dg-require-effective-target powerpc_p9vector_ok } */
/* { dg-options "-mcpu=power9" } */
......@@ -11,6 +12,8 @@ test_data_class (__ieee128 *p)
{
__ieee128 source = *p;
/* IEEE 128-bit floating point operations are only supported
on 64-bit targets. */
return scalar_test_data_class (source, 3);
}
......
/* { dg-do compile { target { powerpc*-*-* } } } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */
/* { dg-require-effective-target lp64 } */
/* { dg-require-effective-target powerpc_p9vector_ok } */
/* { dg-options "-mcpu=power9" } */
......@@ -11,6 +12,8 @@ test_data_class (__ieee128 *p)
{
__ieee128 source = *p;
/* IEEE 128-bit floating point operations are only supported
on 64-bit targets. */
return scalar_test_data_class (source, 256); /* { dg-error "argument 2 must be a 7-bit unsigned literal" } */
}
/* { dg-do compile { target { powerpc*-*-* } } } */
/* { dg-skip-if "do not override -mcpu" { powerpc*-*-* } { "-mcpu=*" } { "-mcpu=power9" } } */
/* { dg-require-effective-target lp64 } */
/* { dg-require-effective-target powerpc_p9vector_ok } */
/* { dg-options "-mcpu=power9" } */
......@@ -11,6 +12,8 @@ test_neg (__ieee128 *p)
{
__ieee128 source = *p;
/* IEEE 128-bit floating point operations are only supported
on 64-bit targets. */
return scalar_test_neg (source);
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment