tentzen added a comment.

Thank you for prompt reply again.

> [rjmccall] And I agree with him that the potential benefits are substantial. 
> I'm just saying that one barely-trafficked RFC thread is not evidence of a 
> community consensus.

OK, thanks.  it's good to know you are also supportive in adding this feature.

> [rjmccall] As I understand it, you are creating implicit edges within the 
> function to the active SEH handler (potentially part of the same function) 
> from arbitrary places within covered basic blocks, turning basic blocks from 
> a single-entry single-(internal-)exit representation to a single-entry 
> multiple-exit representation. That is a huge change. How do you expect LLVM 
> transformations to preserve or merge this information across blocks? How do 
> you expect transformations to not move code between blocks in problematic 
> ways, or reorder code within blocks in ways that will suddenly be visible to 
> the optimizer? These are the standard objections to supporting features like 
> this, that they have basically unspecified behavior and appear to work by 
> good intentions and happy thoughts.

There is absolutely NO explicit edge added in this design. You misunderstood 
the term of SEME here.  It refers to a SEH scope-region of many blocks that can 
have multi-blocks jumping out of this region, not multi-branches jumping out of 
a block.  Since blocks in LLVM are already 'completely' connected by Control 
Flow (no lexical concept at all before layout), there is nothing we need to do 
to //build //this SEME region.  For LLVM transformations/optimizations, the 
only constrain added is **volatile** attribute on memory operations within a 
SEH region.  As described earlier, it's a little sub-optimal, but given that 
the amount of code directly under a SEH scope is very small, the impact to 
overall code quality is minor.  Volatile-ness is robust as it's one fundamental 
attribute that is expected to be honored by entire framework.

> [rjmccall] Does it pass under all combinations of optimization and 
> code-generation settings? How do LLVM contributors ensure that this test 
> suite continues to pass?

Yes. this is just the first patch.  there will be second patch to land LLVM 
code-gen part in, then 3rd patch to add some test cases (Ex, xcpt4u.c from 
MSVC). Without option -EHa, the patch is a zero-impact change for now.

> [rjmccall] There is a major difference between HW exceptions and non-HW 
> exceptions, which is that non-HW exceptions are observed only at call sites. 
> It is quite easy to write code in IRGen that works because the code emitted 
> at a certain point isn't totally arbitrary

still not completely sure what you are referring to. let me guess. Are you 
concerned that the Cleanup mechanism of a SEH region may not be setup properly 
if there is no call instruction in the region? This is actually a good 
question.  The answer is that the presence of seh.try.begin() intrinsic will 
ensure that a Cleanup stack is established properly because there is an EH edge 
built for seh.try.begin() automatically. hope this answer your concern here.

> [rjmccall] Yes, but it's not known well to all the compiler developers who 
> are reading and maintaining the Clang codebase. I'm not saying you should 
> rename the command-line flag, I'm asking that you not just say "EHa" in 
> comments and identifiers.

Ok, no problem. more comments will be added.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D80344

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

Reply via email to