ahatanak reopened this revision.
ahatanak added a comment.
This revision is now accepted and ready to land.

In D92808#2555737 <https://reviews.llvm.org/D92808#2555737>, @dexonsmith wrote:

> In D92808#2552354 <https://reviews.llvm.org/D92808#2552354>, @rjmccall wrote:
>
>> The ultimate code-generation consequences of this feature aren't very 
>> generic, so we shouldn't let ourselves get caught up designing an extremely 
>> general feature that ultimately either doesn't do what we need it to do or 
>> doesn't actually work for any of the generalizations.
>
> Sure, those are two bad potential outcomes.
>
> Stepping back, the goalĀ of this patch is to encode ARC's code generation 
> invariants in the IR so that maintainers don't inadvertently break them. I 
> think the IR should describe those invariants as clearly and precisely as is 
> reasonable.
>
> Besides idle / misplaced optimism about reuse, I was trying to make the 
> following points along those lines, so I'll restate them more directly:
>
> - Explicitly adding a use of the call avoids having to teach transformations 
> / analyses about it. It might be simpler to add a self-reference carve-out 
> for this operand bundle (or operand bundles in general) than to teach all the 
> passes that this operand bundle implies a use of the callsite (but I'm not 
> sure; maybe there are lots of assumptions about self-references not existing 
> outside of PHIs...).
> - Passing the function that's implicitly called into the operand bundle is 
> simpler to reason about than an opaque table index.
> - Naming the operand bundle after its code generation consequences makes it 
> simpler reason about. (A few generic names thatĀ make some sense to me 
> (besides what I listed yesterday) include "callafter", "callimmediately", 
> "forwardto", and "attachedcall". If it's important to make this ARC only, it 
> could be (e.g.) "clang.arc.attachedcall".)

The second and third suggestions seem like an improvement over the bundle used 
in this patch.

I'm not sure about the first one though as it seems to me that you'll still 
have to teach at least some of the passes about the self-reference.

For example, if SCCP just does a normal RAUW on the following call, which is 
taken from the example I posted,

  %r = call i8* @foo() [ "clang.arc.rv"(i64 1, i8* %r) ]

will become

  %r = call i8* @foo() [ "clang.arc.rv"(i64 1, i8* @g0) ]

`%r` doesn't have an explicit use in the IR anymore, so passes like deadargelim 
can change the return type of the function to `void`.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D92808

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

Reply via email to