Hi Tamar, > So in the > > if (slp_node) > { > > Add something like: > > If (is_cond_op) > { > if (dump_enabled_p ()) > dump_printf_loc (MSG_MISSED_OPTIMIZATION, vect_location, > "left fold reduction on SLP not supported.\n"); > return false; > }
Yes, seems reasonable, added. > The only comment I have is whether you actually need this helper function? > It looks like all the uses of it are in cases you have, or will call > conditional_internal_fn_code > directly. > > e.g. in vect_transform_reduction you can replace it by > > bool cond_fn_p = cond_fn != ERROR_MARK; > > and in > > if (cond_fn_p (orig_code)) > orig_code = conditional_internal_fn_code (internal_fn(orig_code)); > > just > > internal_fn new_fn = conditional_internal_fn_code (internal_fn(orig_code)); > if (new_fn != ERROR_MARK) > orig_code = new_fn; > > which would save the repeated testing of the condition. I see what you mean. One complication is that we want to disambiguate (among others): (1) code = IFN_COND_ADD, cond_fn = IFN_LAST. (new case) (2) code = IFN_MAX, cond_fn = IFN_COND_MAX. (3) code = IFN_SOMETHING, cond_fn = IFN_LAST. So just checking cond_fn is not enough (even if we made get_conditional_internal_fn (IFN_COND_ADD) return IFN_COND_ADD). We need to know if the initial code already was an IFN_COND. It's a bit of a mess but I didn't dare untangling. Well, actually, I tried but made it worse ;) The cond_fn_p check seemed least intrusive to me. Maybe you have another idea? Regards Robin