tree-optimization/93964 - adjust ISL code generation for pointer params

Pointers eventually need intermediate conversions in code generation.
Allowing them is much easier than fending them off since niter
and scev expansion easily drag those in.

2020-02-04  Richard Biener  <rguenther@suse.de>

	PR tree-optimization/93964
	* graphite-isl-ast-to-gimple.c
	(gcc_expression_from_isl_ast_expr_id): Add intermediate
	conversion for pointer to integer converts.
	* graphite-scop-detection.c (assign_parameter_index_in_region):
	Relax assert.

	* gcc.dg/graphite/pr93964.c: New testcase.
This commit is contained in:
Richard Biener 2020-03-04 10:40:32 +01:00
parent c7ec2f9ff6
commit dca54007eb
5 changed files with 36 additions and 1 deletions

View file

@ -1,3 +1,12 @@
2020-02-04 Richard Biener <rguenther@suse.de>
PR tree-optimization/93964
* graphite-isl-ast-to-gimple.c
(gcc_expression_from_isl_ast_expr_id): Add intermediate
conversion for pointer to integer converts.
* graphite-scop-detection.c (assign_parameter_index_in_region):
Relax assert.
2020-03-04 Martin Liska <mliska@suse.cz>
PR c/93886

View file

@ -265,6 +265,9 @@ gcc_expression_from_isl_ast_expr_id (tree type,
tree t = res->second;
if (useless_type_conversion_p (type, TREE_TYPE (t)))
return t;
if (POINTER_TYPE_P (TREE_TYPE (t))
&& !POINTER_TYPE_P (type) && !ptrofftype_p (type))
t = fold_convert (sizetype, t);
return fold_convert (type, t);
}

View file

@ -1102,7 +1102,6 @@ static void
assign_parameter_index_in_region (tree name, sese_info_p region)
{
gcc_assert (TREE_CODE (name) == SSA_NAME
&& INTEGRAL_TYPE_P (TREE_TYPE (name))
&& ! defined_in_sese_p (name, region->region));
int i;
tree p;

View file

@ -1,3 +1,8 @@
2020-02-04 Richard Biener <rguenther@suse.de>
PR tree-optimization/93964
* gcc.dg/graphite/pr93964.c: New testcase.
2020-03-04 Jakub Jelinek <jakub@redhat.com>
PR tree-optimization/94001

View file

@ -0,0 +1,19 @@
/* { dg-do compile } */
/* { dg-options "-O -floop-nest-optimize" } */
int *
eo (void);
void
g4 (int *nt)
{
int dh, t2 = (__INTPTR_TYPE__)eo ();
for (dh = 0; dh < 2; ++dh)
{
int m7;
for (m7 = 0; m7 < t2; ++m7)
nt[m7] = 0;
}
}