> > 2) Why doesn't the GIMPLE pass match on the GIMPLE code produced by > the Fortran version? > > I have created an example where the GIMPLE trees of the two match > exactly % some attributes > > on the expressions. > > Fortran (and other frontends besides C-family) do not get their builtins from > builtins.def but need to provide their own version. See > fortran/mathbuiltins.def. >
Ah! Thanks you! I had not realized this at all. It works perfectly in GIMPLE now. > > > > The rule seems to be matching early in the GIMPLE phase and not the > generic, fair enough as long as it works. > > Btw, why are you interested in GENERIC matching at all here? > It was the road I ended up down when I was trying to debug the matches. I couldn't Quite understand from the code why the GIMPLE one was rejecting the substitution but The GENERIC one was simple enough to do. So I went with that. > { > tree fndecl = builtin_decl_implicit (as_builtin_fn (fn)); > if (!fndecl) > return NULL_TREE; > return build_call_expr_loc_array (loc, fndecl, n, argarray); > > but subject to the same implicit rule as GIMPLE (but handled more > conservatively as I outlined above). Ah, my confusion comes from not really knowing the difference between builtin_decl_implicit (as_builtin_fn (fn)); and internal_fn_p (fn) well enough. > > Yes, the FEs likely do not expect internal FNs around in the IL at random > places. > > So first of all I suggest to not try matching on GENERIC (or at least not > spend > too much energy in making it work there). > Yes I'll drop the GENERIC one. I had thought I needed it for Fortran but that isn't the case. Thanks for the help! Regards, Tamar