void added a comment.

In D69868#1883687 <https://reviews.llvm.org/D69868#1883687>, @jyknight wrote:

> Ugh, it's actually been that long, hasn't it...I'm really sorry about that. :(


No worries. Thanks for getting back to us!

> I've been actively spending time to look at this over the last couple weeks. 
> I haven't been able to convince myself that the weird-successors and having 
> allocatable registers across BBs here is not going to cause codegen issues 
> after optimization passes run on it. Unfortunately, despite spending time 
> looking into it, I also wasn't able to convince myself that this *IS* broken. 
> Maybe someone else can chime in here and either assuage or confirm my worries?

I've been concerned about the register live-ins too (I'm less concerned about 
the successors issue). Is there documentation on the original decision to 
disallow physical register live-ins for MBBs before register allocation? We 
could then check to see if we're violating the original reasoning.

> I also see some other minor issues, which I need to write up, but I'd been 
> blocking writing up a comment for that behind the larger question.
> 
> Anyways, while looking at this I started thinking it might actually be better 
> to actually have INLINEASM_BR (both with or without outputs) _not_ be a 
> terminator MachineInstr. (remaining a terminator in IR form, however). This 
> would then be similar to how "invoke" works -- at the MachineInstr level, the 
> call is not a terminator, even though it can jump out to the EH successors. 
> And, the return-value handling remains in the same basic block as the call. I 
> tried making that change, but doing it correctly has other impacts -- much of 
> the code which currently special-cases isEHPad() needs to be updated (Which 
> does mean I now feel like I have a good handle on the problems the _previous_ 
> version of this code, which didn't split the block, had.). 
> MachineBasicBlock::updateTerminator is a good example of the problematic 
> cases -- it trawls the successor list to look for the "correct" successor, 
> filtering out isEHPad successors. But unlike EH Pads, indirect targets of a 
> INLINEASM_BR are not used only for that purpose, so can't be so quickly 
> distinguished in the successors list.

I had a very similar idea. There are some people *cough*Chris*cough* who insist 
that `INLINEASM_BR` makes sense as a terminator. I don't deny that it's very 
tempting to make it one, but because of this instruction's behavior it doesn't 
*act* like a normal terminator (explicitly branching to some destination).

As for `isEHPad`, do you think it would make sense to have a generic 
`isIndirectTarget` predicate, which we could then use everywhere and it would 
automagically filter out blocks that aren't interesting?

> So, I started updating some of that code to not have that assumption. While 
> doing so, I noticed that fixing this would also allow analyzeBranch to ignore 
> the inlineasm branch instructions -- and remain correct -- which actually 
> would allow llvm to do better block placement of the inlineasm_br blocks, 
> because it enables it to move the normal successor jump/fallthrough. So, I 
> think that would actually be a good idea to make that change.

Now that I know I'm not crazy for wanting to make INLINEASM_BR a non-terminator 
(I'm assuming you're not crazy at least :-), I'll give it a go. Feel free to 
send me patches if you have them.

> But whether it'd be _necessary_ to make such a change (or other changes) for 
> this patch, or just a nice thing to fix, I'm still just unsure about.

Given your concerns over the patch in its current form, let's at least try the 
non-terminator path. If we can make it work, then your concerns will be 
assuaged (as would mine).


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D69868/new/

https://reviews.llvm.org/D69868



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to