diff options
author | Bill Wendling <isanbard@gmail.com> | 2010-10-17 07:58:46 +0000 |
---|---|---|
committer | Bill Wendling <isanbard@gmail.com> | 2010-10-17 07:58:46 +0000 |
commit | b70fba451e5a92df6f77ca288caf80b0c5572593 (patch) | |
tree | 108c6227a3cc0ddf260cd229c10de5e7e1a0b242 /lib/CodeGen/TargetInfo.cpp | |
parent | 51a9f5309a025f5c54e7dc373eb7d11daabee6df (diff) |
Temporarily revert r116684. It was causing failures with
Clang :: CodeGen/x86_32-arguments-darwin.c
Clang :: CodeGen/x86_32-arguments-linux.c
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@116687 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/CodeGen/TargetInfo.cpp')
-rw-r--r-- | lib/CodeGen/TargetInfo.cpp | 59 |
1 files changed, 12 insertions, 47 deletions
diff --git a/lib/CodeGen/TargetInfo.cpp b/lib/CodeGen/TargetInfo.cpp index c28f71a304..38c746068d 100644 --- a/lib/CodeGen/TargetInfo.cpp +++ b/lib/CodeGen/TargetInfo.cpp @@ -331,16 +331,6 @@ ABIArgInfo DefaultABIInfo::classifyArgumentType(QualType Ty) const { ABIArgInfo::getExtend() : ABIArgInfo::getDirect()); } -/// UseX86_MMXType - Return true if this is an MMX type that should use the special -/// x86_mmx type. -bool UseX86_MMXType(const llvm::Type *IRType) { - // If the type is an MMX type <2 x i32>, <4 x i16>, or <8 x i8>, use the - // special x86_mmx type. - return IRType->isVectorTy() && IRType->getPrimitiveSizeInBits() == 64 && - cast<llvm::VectorType>(IRType)->getElementType()->isIntegerTy() && - IRType->getScalarSizeInBits() != 64; -} - //===----------------------------------------------------------------------===// // X86-32 ABI Implementation //===----------------------------------------------------------------------===// @@ -668,13 +658,6 @@ ABIArgInfo X86_32ABIInfo::classifyArgumentType(QualType Ty) const { return ABIArgInfo::getDirect(llvm::IntegerType::get(getVMContext(), Size)); } - - const llvm::Type *IRType = CGT.ConvertTypeRecursive(Ty); - if (UseX86_MMXType(IRType)) { - ABIArgInfo AAI = ABIArgInfo::getDirect(IRType); - AAI.setCoerceToType(llvm::Type::getX86_MMXTy(getVMContext())); - return AAI; - } return ABIArgInfo::getDirect(); } @@ -831,10 +814,8 @@ class X86_64ABIInfo : public ABIInfo { ABIArgInfo classifyReturnType(QualType RetTy) const; - ABIArgInfo classifyArgumentType(QualType Ty, - unsigned &neededInt, - unsigned &neededSSE, - unsigned &neededMMX) const; + ABIArgInfo classifyArgumentType(QualType Ty, unsigned &neededInt, + unsigned &neededSSE) const; public: X86_64ABIInfo(CodeGen::CodeGenTypes &CGT) : ABIInfo(CGT) {} @@ -1681,8 +1662,7 @@ classifyReturnType(QualType RetTy) const { } ABIArgInfo X86_64ABIInfo::classifyArgumentType(QualType Ty, unsigned &neededInt, - unsigned &neededSSE, - unsigned &neededMMX) const { + unsigned &neededSSE) const { X86_64ABIInfo::Class Lo, Hi; classify(Ty, 0, Lo, Hi); @@ -1693,7 +1673,6 @@ ABIArgInfo X86_64ABIInfo::classifyArgumentType(QualType Ty, unsigned &neededInt, neededInt = 0; neededSSE = 0; - neededMMX = 0; const llvm::Type *ResType = 0; switch (Lo) { case NoClass: @@ -1745,20 +1724,11 @@ ABIArgInfo X86_64ABIInfo::classifyArgumentType(QualType Ty, unsigned &neededInt, // AMD64-ABI 3.2.3p3: Rule 3. If the class is SSE, the next // available SSE register is used, the registers are taken in the // order from %xmm0 to %xmm7. - case SSE: { - const llvm::Type *IRType = CGT.ConvertTypeRecursive(Ty); - if (Hi != NoClass || !UseX86_MMXType(IRType)) { - ResType = GetSSETypeAtOffset(IRType, 0, Ty, 0); - ++neededSSE; - } else { - // This is an MMX type. Treat it as such. - ResType = llvm::Type::getX86_MMXTy(getVMContext()); - ++neededMMX; - } - + case SSE: + ++neededSSE; + ResType = GetSSETypeAtOffset(CGT.ConvertTypeRecursive(Ty), 0, Ty, 0); break; } - } const llvm::Type *HighPart = 0; switch (Hi) { @@ -1817,7 +1787,7 @@ void X86_64ABIInfo::computeInfo(CGFunctionInfo &FI) const { FI.getReturnInfo() = classifyReturnType(FI.getReturnType()); // Keep track of the number of assigned registers. - unsigned freeIntRegs = 6, freeSSERegs = 8, freeMMXRegs = 8; + unsigned freeIntRegs = 6, freeSSERegs = 8; // If the return value is indirect, then the hidden argument is consuming one // integer register. @@ -1828,18 +1798,16 @@ void X86_64ABIInfo::computeInfo(CGFunctionInfo &FI) const { // get assigned (in left-to-right order) for passing as follows... for (CGFunctionInfo::arg_iterator it = FI.arg_begin(), ie = FI.arg_end(); it != ie; ++it) { - unsigned neededInt, neededSSE, neededMMX; - it->info = classifyArgumentType(it->type, neededInt, neededSSE, neededMMX); + unsigned neededInt, neededSSE; + it->info = classifyArgumentType(it->type, neededInt, neededSSE); // AMD64-ABI 3.2.3p3: If there are no registers available for any // eightbyte of an argument, the whole argument is passed on the // stack. If registers have already been assigned for some // eightbytes of such an argument, the assignments get reverted. - if (freeIntRegs >= neededInt && freeSSERegs >= neededSSE && - freeMMXRegs >= neededMMX) { + if (freeIntRegs >= neededInt && freeSSERegs >= neededSSE) { freeIntRegs -= neededInt; freeSSERegs -= neededSSE; - freeMMXRegs -= neededMMX; } else { it->info = getIndirectResult(it->type); } @@ -1908,13 +1876,10 @@ llvm::Value *X86_64ABIInfo::EmitVAArg(llvm::Value *VAListAddr, QualType Ty, // i8* overflow_arg_area; // i8* reg_save_area; // }; - unsigned neededInt, neededSSE, neededMMX; + unsigned neededInt, neededSSE; Ty = CGF.getContext().getCanonicalType(Ty); - ABIArgInfo AI = classifyArgumentType(Ty, neededInt, neededSSE, neededMMX); - - // Lump the MMX in with SSE. - neededSSE += neededMMX; + ABIArgInfo AI = classifyArgumentType(Ty, neededInt, neededSSE); // AMD64-ABI 3.5.7p5: Step 1. Determine whether type may be passed // in the registers. If not go to step 7. |