diff mbox

[fortran,61/66] inline sum and product: Prevent regressions: Disable frontend optimizations.

Message ID 20111027233334.18581.98661@gimli.local
State New
Headers show

Commit Message

Mikael Morin Oct. 27, 2011, 11:33 p.m. UTC
Not exactly a regression, but frontend optimizations can make things worse
by forcing temporary generation.
This disables common function elimination and binary operator optimization
for inline intrinsics.
I hope I didn't miss anything else.
OK?
2011-10-19  Mikael Morin  <mikael@gcc.gnu.org>

	* frontend-passes.c (cfe_register_funcs): Return early in the case
	of an inline intrinsic function.
	(optimize_binop_array_assignment): Skip optimization in the case of
	an inline intrinsic function.
diff mbox

Patch

diff --git a/frontend-passes.c b/frontend-passes.c
index 5b1a644..a19f22d 100644
--- a/frontend-passes.c
+++ b/frontend-passes.c
@@ -203,8 +203,8 @@  cfe_register_funcs (gfc_expr **e, int *walk_subtrees ATTRIBUTE_UNUSED,
       /* Conversions are handled on the fly by the middle end,
 	 transpose during trans-* stages and TRANSFER by the middle end.  */
       if ((*e)->value.function.isym->id == GFC_ISYM_CONVERSION
-	  || (*e)->value.function.isym->id == GFC_ISYM_TRANSPOSE
-	  || (*e)->value.function.isym->id == GFC_ISYM_TRANSFER)
+	  || (*e)->value.function.isym->id == GFC_ISYM_TRANSFER
+	  || gfc_inline_intrinsic_function_p (*e))
 	return 0;
 
       /* Don't create an array temporary for elemental functions,
@@ -567,7 +567,8 @@  optimize_binop_array_assignment (gfc_code *c, gfc_expr **rhs, bool seen_op)
 	   && ! (e->value.function.isym
 		 && (e->value.function.isym->elemental
 		     || e->ts.type != c->expr1->ts.type
-		     || e->ts.kind != c->expr1->ts.kind)))
+		     || e->ts.kind != c->expr1->ts.kind))
+	   && ! gfc_inline_intrinsic_function_p (e))
     {
 
       gfc_code *n;