On Thu, Jan 25, 2018 at 07:06:10AM -0800, Steve Kargl wrote: > On Thu, Jan 25, 2018 at 08:37:54AM +0100, Thomas Koenig wrote: > > > > Second, why do you remove this > > > > > - temp.value.op.op = INTRINSIC_NONE; > > > - temp.value.op.op1 = vector_a; > > > - temp.value.op.op2 = vector_b; > > > - gfc_type_convert_binary (&temp, 1); > > > > block of code? > > It is dead code. temp is set to the typespec of > the mixed-mode math result, but it is never used. > compute_dot_product does the mixed-mode math, > because it uses gfc_add() from arith.c. >
Upon re-reading gfc_type_convert_binary, it isn't dead. It simply isn't needed, because gfc_add() eventually lands at arith.c (eval_intrinsics): /* Numeric binary */ case INTRINSIC_PLUS: case INTRINSIC_MINUS: case INTRINSIC_TIMES: case INTRINSIC_DIVIDE: case INTRINSIC_POWER: if (!gfc_numeric_ts (&op1->ts) || !gfc_numeric_ts (&op2->ts)) goto runtime; /* Insert any necessary type conversions to make the operands compatible. */ temp.expr_type = EXPR_OP; gfc_clear_ts (&temp.ts); temp.value.op.op = op; temp.value.op.op1 = op1; temp.value.op.op2 = op2; gfc_type_convert_binary (&temp, warn_conversion || warn_conversion_extra); -- Steve