On Wed, Aug 29, 2018 at 11:25 AM Richard Sandiford <richard.sandif...@arm.com> wrote: > > Richard Biener <richard.guent...@gmail.com> writes: > > On Tue, Aug 28, 2018 at 1:25 PM Richard Sandiford > > <richard.sandif...@arm.com> wrote: > >> > >> One of the warts of the vectoriser IR is that it doesn't link SSA name > >> uses for pattern statements, leading to complicated special cases in > >> vect_mark_stmts_to_be_vectorized and (especially) vect_detect_hybrid_slp. > >> It also makes it harder to check how an SSA name is used after pattern > >> replacement (something I need for a later patch). > >> > >> This patch adds a mode in which tree-ssa-operands.c can update > >> statements in the same non-invasive way as for debug statements. > >> It then uses this mode to update pattern statements when adding > >> them to a vec_basic_block, so that pattern statements become > >> even more like statements that existed from the outset. > > > > Without reviewing in detail yet I think putting them in the same > > ballpark as debug stmts or documenting they have no effect on > > code generation is misleading - this is because immediate use > > handling _does_ affect code generation unless you mark those > > stmts in some way and handle them like debug-uses in all of > > the immediate use routines. For example match-and-simplify > > foldings guarded by :s will see the transparent stmts as uses. > > Yeah, true. So the comment was plain wrong. I guess what I meant to > say was that adding the statement and removing it again must leave the > IL the same as before. > > > So the real effect is to not add virtual operands or marking things > > addressable? IMHO rather than adding a transparent_p flag > > we eventually should allow passing down a oep flag to update_stmt? > > > > Do vector pattern stmts cause any of the issues? I don't remember > > seeing things that would cause TREE_ADDRESSABLE. I know > > we have patterns for stores so we'd get extra VDEFs. > > Yeah, it was the vop case that motivated the patch. I don't know of > any specific examples in which pattern statements could cause the > addressable flag to be set, but in principle we should handle that > case like debug statements. > > The series was building up to adding support for extending loads and > truncating stores, which would be another source of potential VUSEs and VDEFs. > > > IIRC we historically didn't add pattern stmts to the IL simply because > > pattern recognition was supposed to be analysis phase and building > > and eventually tearing down pattern stmts was thought as to be too > > expensive. That is also because we'd need to copy the loop to > > retain a copy w/o those stmts. > > > > So - would update_stmt (stmt, opf_no_vops|opf_non_addressable) > > work? I suppose we'd need to pass down a second sticky_flags > > arg. > > I don't mind making the opf_* flags part of the public interface > if you think that's cleaner, but I'd still prefer to have a name > that abstracts the semantics. Using opf_no_vops|opf_non_addressable > directly feels a bit low-level.
True. I guess not exposing the opf_ flags would be better. Maybe really just clall the flag like_debug_stmt_p ;) That makes the semantics obvious as well - you can of course document that, for example, it doesn't make things addressable or add virtual operands. I suppose the patch is OK with that mere documentation change. Richard. > > Thanks, > Richard