forked from OSchip/llvm-project
lib/CodeGen/TargetInfo.cpp: On Win64, arg i128 should be emitted as INDIRECT.
mingw-w64's i128 tweak should be done with x86_64-mingw32. llvm-svn: 126186
This commit is contained in:
parent
f8b22b3483
commit
f8a6e802f9
|
@ -2105,8 +2105,15 @@ ABIArgInfo WinX86_64ABIInfo::classify(QualType Ty) const {
|
|||
RT->getDecl()->hasFlexibleArrayMember())
|
||||
return ABIArgInfo::getIndirect(0, /*ByVal=*/false);
|
||||
|
||||
// FIXME: mingw64-gcc emits 128-bit struct as i128
|
||||
if (Size <= 128 &&
|
||||
// FIXME: mingw-w64-gcc emits 128-bit struct as i128
|
||||
if (Size == 128 &&
|
||||
getContext().Target.getTriple().getOS() == llvm::Triple::MinGW32)
|
||||
return ABIArgInfo::getDirect(llvm::IntegerType::get(getVMContext(),
|
||||
Size));
|
||||
|
||||
// MS x64 ABI requirement: "Any argument that doesn't fit in 8 bytes, or is
|
||||
// not 1, 2, 4, or 8 bytes, must be passed by reference."
|
||||
if (Size <= 64 &&
|
||||
(Size & (Size - 1)) == 0)
|
||||
return ABIArgInfo::getDirect(llvm::IntegerType::get(getVMContext(),
|
||||
Size));
|
||||
|
|
Loading…
Reference in New Issue