efriedma-quic wrote:

So the rule here is essentially that if we see a call to an always_inline 
function, we ignore the attributes on the callee and just directly examine the 
body?  That makes sense from the perspective of being user-friendly.  The 
backend still needs to be robust: the AlwaysInliner still needs to detect 
whether the callee contains an operation that prevents inlining... but I guess 
that's a separate issue.

Please make sure we have a testcase showing what happens if the always_inline 
function is defined after the caller:

```
int incompatible_neon();
int bar() __arm_streaming { return incompatible_neon(); }
__attribute__((always_inline)) void incompatible_neon() {
  __attribute((vector_size(16))) char vec = { 0 };
  vec = __builtin_neon_vqaddq_v(vec, vec, 33);
}
```

https://github.com/llvm/llvm-project/pull/174608
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to