This is the mail archive of the gcc-patches@gcc.gnu.org mailing list for the GCC project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [fortran patch] Don't use TREE_LISTs for storing arguments to intrinsic functions


I'll let Brooks give the final review, but I noted a problem with it because I'm working on a patch to gfc_conv_intrinsic_minmax() that builds on top of yours.

@@ -1381,13 +1415,18 @@ gfc_conv_intrinsic_minmax (gfc_se * se,
tree val;
tree thencase;
tree elsecase;
- tree arg;
tree type;
+ tree *args;
+ unsigned int num_args;
+ unsigned int i;
+
+ num_args = gfc_intrinsic_argument_list_length (expr);
+ args = alloca (sizeof (tree) * num_args);
- arg = gfc_conv_intrinsic_function_args (se, expr);
+ gfc_conv_intrinsic_function_args (se, expr, args, num_args);
type = gfc_typenode_for_spec (&expr->ts);
- limit = TREE_VALUE (arg);
+ limit = args[0];
if (TREE_TYPE (limit) != type)
limit = convert (type, limit);
/* Only evaluate the argument once. */
@@ -1396,9 +1435,9 @@ gfc_conv_intrinsic_minmax (gfc_se * se,
mvar = gfc_create_var (type, "M");
elsecase = build2_v (MODIFY_EXPR, mvar, limit);
- for (arg = TREE_CHAIN (arg); arg != NULL_TREE; arg = TREE_CHAIN (arg))
+ for (i = 0; i < num_args; i++)
{
- val = TREE_VALUE (arg);
+ val = args[i];
if (TREE_TYPE (val) != type)
val = convert (type, val);

I think the for-loop at then end of that hunk should start with i = 1. Otherwise, the generated code for MAX(a,b) start with comparing "a > a". Can you check that?


FX


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]