On Fri, May 16, 2025 at 1:05 AM Jeff Law <jeffreya...@gmail.com> wrote: > > > > On 5/15/25 11:18 AM, Richard Sandiford wrote: > > The start_sequence/end_sequence interface was a big improvement over > > the previous state, but one slightly awkward thing about it is that > > you have to call get_insns before end_sequence in order to get the > > insn sequence itself: > I can't even remember what the previous state was... push_to_sequence? > > > > > To get the contents of the sequence just made, you must call > > `get_insns' *before* calling here. > > > > We therefore have quite a lot of code like this: > > > > insns = get_insns (); > > end_sequence (); > > return insns; > > > > It would seem simpler to write: > > > > return end_sequence (); > > > > instead. > Totally agreed. It's much more natural to just return the sequence. > > > > > I can see three main potential objections to this: > > > > (1) It isn't obvious whether ending the sequence would return the first > > or the last instruction. But although some code reads *both* the > > first and the last instruction, I can't think of a specific case > > where code would want *only* the last instruction. All the emit > > functions take the first instruction rather than the last. > Understood. It's a bad name. finish_sequence, close_sequence, or > somesuch would probably be much clearer. And no, I'm not immediately > aware of cases where we'd only look at the last instruction. I could > probably come up with one in theory, but again, not aware of any case in > practice. > > > > > (2) The "end" in end_sequence might imply the C++ meaning of an exclusive > > endpoint iterator. But for an insn sequence, the exclusive endpoint > > is always the null pointer, so it would never need to be returned. > > That said, we could rename the function to something like > > "finish_sequence" or "complete_sequence" if this is an issue. > See above. It's a large mechanical change, but it would remove some of > the ambiguity in the current API. > > > > (3) There might have been an intention that start_sequence/end_sequence > > could in future reclaim memory for unwanted sequences, and so an > > explicit get_insns was used to indicate that the caller does want > > the sequence. > > > > But that sort of memory reclaimation has never been added, > > and now that the codebase is C++, it would be easier to handle > > using RAII. I think reclaiming memory would be difficult to do in > > any case, since some code records the individual instructions that > > they emit, rather than using get_insns. > IMHO this isn't a strong reason to keep the status quo. And as you > note, if we really wanted to wade into this space, RAII style > ctors/dtors would likely be a much better way to go. > > I'm absolutely in favor of the change, even if we didn't do a name > change in the process. But let's give others a bit of time to chime in.
I agree with the change, thus OK. Richard. > > jeff >