[PATCH] D25204: Register Calling Convention, Clang changes

Erich Keane via cfe-commits cfe-commits at lists.llvm.org
Tue Oct 4 17:54:05 PDT 2016


erichkeane marked 16 inline comments as done.
erichkeane added a comment.

Commenting to save my comments (don't seem to survive a refresh).  Still working on non-function mangling.



> rnk wrote in ItaniumMangle.cpp:1203
> What mangling should happen for operator overloads and all other kinds of DeclarationName? Please add tests for these cases

Test cases show that I need to implement these.  Going to quit for the evening, but will continue working on this tomorrow.

> majnemer wrote in ItaniumMangle.cpp:1413-1414
> I'd add an overload of `mangleSourceName` which takes a `Twine`. Then the one caller which passes `isRegCall` would merely concat the identifier with __regcall3__. The existing implementation using `IdentifierInfo` would merely pass in `II->getName` for the `Twine`.

I really like this idea, and had most of an implementation, however it seems that Twine has no real good way to get its 'length', so it required a temporary for the sake of getting the length.  Instead I ended up with Ried's suggestion of separate functions for each.

> rnk wrote in TargetInfo.cpp:3742-3743
> 'classify' takes FreeSSERegs by reference and modifies it, so are you sure this is correct? It means if I have this kind of prototype, we won't pass 'd' in registers because we'll consume four registers for the return value:
> 
>   struct HFA { __m128 f[4]; };
>   HFA __regcall f(HFA a, HFA b, HFA c, HFA d) {
>     ...
>   }

I added it to the C test, and was convinced that you're right.  Fixed, thanks!

https://reviews.llvm.org/D25204





More information about the cfe-commits mailing list