(j3.2006) Fw: a question on MERGE and expression evaluation

Bill Long longb
Fri Nov 19 11:11:54 EST 2010

On 11/18/10 8:14 PM, Van Snyder wrote:

> I definitely don't want to start with MERGE, because I'd like someday to
> see it explicitly require lazy evaluation (which is presently allowed
> but not required), at least in the scalar-mask case.  Either that or get
> conditional expressions (with lazy evaluation of either the consequent
> or anti-consequent, depending upon the predicate).
> Right now, the standard doesn't require evaluating all of MERGE's
> arguments, but it also doesn't prohibit evaluating the one that ends up
> not being used.  That makes MERGE less useful than it could be as a
> substitute for conditional expressions.  For example, you can't count on

On the other hand, it makes MERGE very useful for generating code for 
the new fad in processors - GPU's.  They have hardware for masked 
assignments, but are very poor at handling branches.   Requiring lazy 
evaluation would make MERGE essentially useless in that context.  And we 
would suddenly see proposals for a new intrinsic that behaved exactly as 
the current MERGE.  If we want an intrinsic that requires lazy 
evaluation, THAT one should be the new one.  With notes by the text book 
writers to not use it in vectorizable code segments.

>    x = merge(y,0,present(y))
> working.
> Jim's customer wants to count on
>    merge(1.0/a,0,a/=0.0)
> not working when a == 0.  Why would you want that not to work?  I would

In the modern IEEE world, this does work. 1./0. -> Infinity and is 
perfectly well defined. It might set a flag bit somewhere, but almost no 
one ever checks those bits.


> much prefer that it be guaranteed to work, rather than that it work or
> not work at the compiler's whim.
>> Cheers,
> _______________________________________________
> J3 mailing list
> J3 at j3-fortran.org
> http://j3-fortran.org/mailman/listinfo/j3

Bill Long                                           longb at cray.com
Fortran Technical Support    &                 voice: 651-605-9024
Bioinformatics Software Development            fax:   651-605-9142
Cray Inc./Cray Plaza, Suite 210/380 Jackson St./St. Paul, MN 55101

More information about the J3 mailing list