> Ah, got it. > Sounds like we might need to introduce CC_X86_Win32_MSVC_ThisCall then?..No, we should not. It should be properly expanded in frontend. -- With best regards, Anton Korobeynikov Faculty of Mathematics and Mechanics, Saint Petersburg State University
How can a frontend tell LLVM to put a function argument on stack/register/etc? On Thu, Oct 4, 2012 at 5:08 PM, Anton Korobeynikov <asl at math.spbu.ru> wrote:>> Ah, got it. >> Sounds like we might need to introduce CC_X86_Win32_MSVC_ThisCall then?.. > No, we should not. It should be properly expanded in frontend. > > -- > With best regards, Anton Korobeynikov > Faculty of Mathematics and Mechanics, Saint Petersburg State University
ping? On Thu, Oct 4, 2012 at 5:10 PM, Timur Iskhodzhanov <timurrrr at google.com> wrote:> How can a frontend tell LLVM to put a function argument on stack/register/etc? > > On Thu, Oct 4, 2012 at 5:08 PM, Anton Korobeynikov <asl at math.spbu.ru> wrote: >>> Ah, got it. >>> Sounds like we might need to introduce CC_X86_Win32_MSVC_ThisCall then?.. >> No, we should not. It should be properly expanded in frontend. >> >> -- >> With best regards, Anton Korobeynikov >> Faculty of Mathematics and Mechanics, Saint Petersburg State University
Anton, [+Eric, Nick, the e-mail thread context has been broken a few times, so you should probably look at the llvmdev archives. It all starts here: http://lists.cs.uiuc.edu/pipermail/llvmdev/2012-October/053961.html ] So I've decided to make a new attempt to fix this issue. We've discussed my patches with Eric and came up with the following idea: a) IsTargetWindows should be true for all the targets that execute on the Windows kernel, including Cygwin, MinGW and MSVC ABIs. However, "Windows 32-bit ABI" usually implies "MSVC 32-bit ABI", so it's Cygwin and MinGW (that are similar more similar to Itanium ABI than to MSVC ABI) that should be exceptions from the general Win32 handling code. That is, b) We should add a IsTargetWin32 which is true if the MSVC 32-bit ABI is used and false for Cygwin+MinGW. c) We should add CC_X86_Win32_C and CC_X86_Win32_ThisCall and use them only for MSVC 32-bit ABI. d) Cygwin and MinGW should use the CC_X86_32_C This way, Clang takes care of setting the SRet attribute wherever appropriate and LLVM takes care of putting such return values onto stack in the Win32/MSVC32 ABI. What do you think about such a proposal? One more data point: the ABI is wrong even in C! http://llvm.org/bugs/show_bug.cgi?id=15556 -- Timur