erichkeane marked an inline comment as done.
erichkeane added inline comments.


================
Comment at: clang/lib/CodeGen/TargetInfo.cpp:2804
+    return;
+  }
+
----------------
Quuxplusone wrote:
> Asking silly questions because I don't stand a chance of understanding either 
> the code or the tests...
> 
> In the x86-64 ABI, an ordinary 16-byte `struct` would be passed in `rdi/rsi` 
> and returned in `rdx/rax`. An ordinary 17-byte `struct` would be passed by 
> hidden reference and returned by hidden reference.
> 
> Is your intent here that `_ExtInt` will follow the same convention, i.e., 
> `_ExtInt(128)` will be passed in `rdi/rsi` and returned in `rdx/rax`? and 
> `_ExtInt(129)` will be passed and returned by hidden reference?
> 
> Clang trunk currently passes `_ExtInt(256)` in `rdi/rsi/rdx/rcx/r8/r9/stack` 
> as if it were a series of `uint64_t`s. (I hadn't noticed until now.) That's 
> kind of cute. Is the current PR motivated by performance concerns with the 
> multi-`uint64_t` approach, or just trying to be consistent with the `struct` 
> rules?
Yes, that is my intent.  The bug you filed apparently showed why putting it in 
registers is perhaps a bad idea (for something that large), AND gets us more 
consistent with structs.

As there is no official ABI for any of the 3 platforms, this seems more 
consistent and gives performance benefit.  @craig.topper can explain this part 
better than me.


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

https://reviews.llvm.org/D78785



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

Reply via email to