[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