On Fri, Sep 2, 2016 at 4:46 PM, Yuri Rumyantsev <ysrum...@gmail.com> wrote: > Hi Jeff, > > I am trying to reduce cost of repeated call of if-conversion for > epilogue vectorization. I'd like to clarify your recommendation - > should I design additional support for versioning in > vect_do_peeling_for_loop_bound or lightweight version of if-conversion > is sufficient? Any help in clarification will be appreciated.
For general infrastructure it would be nice to expose a (post-)dominator compute for MESE (post-dominators) / SEME (dominators) regions. I believe what makes if-conversion expensive is the post-dom compute which happens for each loop for the whole function. It shouldn't be very difficult to write this, sharing as much as possible code with the current DOM code might need quite some refactoring though. If you want to avoid this work then you have to go the versioning route. Richard. > Thanks ahead. > Yuri. > > 2016-08-01 19:10 GMT+03:00 Jeff Law <l...@redhat.com>: >> On 08/01/2016 03:09 AM, Ilya Enkovich wrote: >>> >>> 2016-07-26 18:38 GMT+03:00 Ilya Enkovich <enkovich....@gmail.com>: >>>> >>>> 2016-07-26 18:26 GMT+03:00 Jeff Law <l...@redhat.com>: >>>>> >>>>> On 07/26/2016 03:57 AM, Ilya Enkovich wrote: >>>>>>> >>>>>>> >>>>>>> >>>>>>> Ilya, what's the fundamental reason why we need to run >>>>>>> if-conversion again? Yes, I know you want to if-convert the >>>>>>> epilogue, but why? >>>>>>> >>>>>>> What are the consequences of not doing if-conversion on the >>>>>>> epilogue? Presumably we miss a vectorization opportunity on the >>>>>>> tail. But that may be a reasonable limitation to allow the >>>>>>> existing work to move forward while you go back and revamp things a >>>>>>> little. >>>>>> >>>>>> >>>>>> >>>>>> If we have some control-flow in a loop then we have to if-convert it >>>>>> for vectorizer. We need to preserve both versions: if-converted one >>>>>> for vectorizer and the original one to be used if vectorization >>>>>> fails. For epilogues we have similar situation and need two >>>>>> versions. I do it by running if-conversion on a copy of original >>>>>> loop. Note that it doesn't run full if-conversion pass. If-conversion >>>>>> is called for epilogue loop only. >>>>> >>>>> >>>>> Right. So what I think Richi wants you to try is to use the >>>>> if-converted >>>>> loop to construct the if-converted epilogue. It seems conceptually >>>>> simple >>>>> and low cost -- the question is on the implementation side. I have no >>>>> clue >>>>> how painful that would be. >>>> >>>> >>>> Probably another part of if-conversion may be re-used to build required >>>> epilogue. I'll have a look. >>> >>> >>> Hi, >>> >>> Yuri will continue my work from this point. >> >> Understood. I'm actually got some comments on #5 and Yuri is already on the >> CC list for that draft message. >> >> Jeff