On Thu, Nov 30, 2023 at 12:11 PM juzhe.zh...@rivai.ai <juzhe.zh...@rivai.ai> wrote:
> BIAS should be: > > signed char biasval > = LOOP_VINFO_PARTIAL_LOAD_STORE_BIAS (loop_vinfo); > tree bias = build_int_cst (intQI_type_node, biasval); > > Currently, only IBM will set LOOP_VINFO_PARTIAL_LOAD_STORE_BIAS -1 for > some situations of len_load/len_store. > Otherwise, it is always 0. > But for consistency, I think we should use the codes as follows. > > I see your patch is so big and separate into multiple sub-patches. > Do you have a patch that directly can be applied for whole support. > I want to support length and test that base your patch. > Can we defer LEN support for a followup? I think we still need to set partial loop support as disabled when there are any lengths with the initial patch for correctness. Richard. > Thanks. > > ------------------------------ > juzhe.zh...@rivai.ai > > > *From:* Tamar Christina <tamar.christ...@arm.com> > *Date:* 2023-11-30 18:58 > *To:* juzhe.zh...@rivai.ai; gcc-patches <gcc-patches@gcc.gnu.org> > *CC:* Richard Biener <richard.guent...@gmail.com> > *Subject:* RE: RE: [PATCH 9/21]middle-end: implement > vectorizable_early_exit for codegen of exit code > > Hi Juzhe, > > > > I meant that “lens” is undefined, from looking around I guess that needs > to be > > > > vec_loop_lens *lens = &LOOP_VINFO_LENS (loop_vinfo); > > > > for `bias` I meant > > > > cond = gimple_build (&cond_gsi, IFN_VCOND_MASK_LEN, truth_type, > > all true mask, cond, all false mask, len, bias); > > > > that variable `bias` isn’t defined. And I can’t find any other usage of > IFN_VCOND_MASK_LEN creation to figure out what it’s supposed to be > > > > is it just an SImode 0? > > > > Thanks, > > Tamar > > > > > > *From:* juzhe.zh...@rivai.ai <juzhe.zh...@rivai.ai> > *Sent:* Thursday, November 30, 2023 11:49 AM > *To:* Tamar Christina <tamar.christ...@arm.com>; gcc-patches < > gcc-patches@gcc.gnu.org> > *Cc:* Richard Biener <richard.guent...@gmail.com> > *Subject:* Re: RE: [PATCH 9/21]middle-end: implement > vectorizable_early_exit for codegen of exit code > > > > Thanks Tamar. > > > > I am not sure whether I am not on the same page with you. > > > > IMHO, ARM SVE will use the final mask = loop mask (generate by WHILE_ULT) > & conditional mask. > > Use that final mask to do the cbranch. Am I right ? > > > > If yes, I leverage that for length and avoid too much codes change in your > patch. > > > > So, for RVV, the length is pretty same as loop mask in ARM SVE. > > For example, suppose n = 4, in ARM SVE, WHILE_ULT (whilelo) generate mask > = 0b11110000000.... > > Then use that mask to control the operations. > > > > For RVV, is the same, length will be 4, then we will only process the > elements with index < 4. > > > > For bias, I think that won't be the issue. Currently, BIAS is not used by > RVV and only used on len_load/len_store for IBM targets. > > So, the bias value by default is 0 in all other situations except > len_load/len_store specifically for IBM. > > > ------------------------------ > > juzhe.zh...@rivai.ai > > > > *From:* Tamar Christina <tamar.christ...@arm.com> > > *Date:* 2023-11-30 18:39 > > *To:* juzhe.zh...@rivai.ai; gcc-patches <gcc-patches@gcc.gnu.org> > > *CC:* Richard Biener <richard.guent...@gmail.com> > > *Subject:* RE: [PATCH 9/21]middle-end: implement vectorizable_early_exit > for codegen of exit code > > Hi Juzhe, > > > > I’m happy to take the hunks, just that I can’t test it and don’t know the > specifics of how it lens work. > > I still need to read up on it. > > > > I tried adding that chunk in, but for the first bit `lens` seems > undefined, and the second bit it seems `bias` is undefined. > > > > I’ll also need what to do for vectorizable_live_operations how to get the > first element rather than the last. > > > > Thanks, > > Tamar > > > > *From:* juzhe.zh...@rivai.ai <juzhe.zh...@rivai.ai> > *Sent:* Thursday, November 30, 2023 4:48 AM > *To:* gcc-patches <gcc-patches@gcc.gnu.org> > *Cc:* Richard Biener <richard.guent...@gmail.com>; Tamar Christina < > tamar.christ...@arm.com> > *Subject:* [PATCH 9/21]middle-end: implement vectorizable_early_exit for > codegen of exit code > > > > Hi, Richard and Tamar. > > > > I am sorry for bothering you. > > Hope you don't mind I give some comments: > > > > Can we support partial vector for length ? > > > > IMHO, we can do that as follows: > > > > bool length_loop_p = LOOP_VINFO_FULLY_WITH_LENGTH_P (loop_vinfo); > > > > if (LOOP_VINFO_CAN_USE_PARTIAL_VECTORS_P (loop_vinfo)) > > { > > if (direct_internal_fn_supported_p (IFN_VCOND_MASK_LEN, vectype, > > OPTIMIZE_FOR_SPEED)) > > vect_record_loop_len (loop_vinfo, lens, ncopies, vectype, 1); > > else > > vect_record_loop_mask (loop_vinfo, masks, ncopies, truth_type, NULL > ); > > } > > > > if (length_loop_p) > > { > > tree len = vect_get_loop_len (loop_vinfo, gsi, loop_lens, 1, vectype, > 0, 0); > > /* Use VCOND_MASK_LEN (all true, cond, all false, len, bias) to > generate > > final mask = i < len + bias ? cond[i] : false. */ > > cond = gimple_build (&cond_gsi, IFN_VCOND_MASK_LEN, truth_type, > > all true mask, cond, all false mask, len, bias); > > } > > else if (masked_loop_p) > > { > > tree mask > > = vect_get_loop_mask (loop_vinfo, gsi, masks, ncopies, truth_type, 0 > ); > > cond > > = prepare_vec_mask (loop_vinfo, TREE_TYPE (mask), mask, cond, & > cond_gsi); > > } > > > > This is a prototype. Is this idea reasonable to Richi ? > > > > Thanks. > > > ------------------------------ > > juzhe.zh...@rivai.ai > >