зеркало из https://github.com/microsoft/clang-1.git
Move TargetInfo::adjustInlineAsmType to TargetCodeGenInfo
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@125819 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Родитель
8f5667d06a
Коммит
ef9a1d0e13
|
@ -26,8 +26,6 @@
|
|||
namespace llvm {
|
||||
struct fltSemantics;
|
||||
class StringRef;
|
||||
class LLVMContext;
|
||||
class Type;
|
||||
}
|
||||
|
||||
namespace clang {
|
||||
|
@ -532,12 +530,6 @@ public:
|
|||
virtual const char *getStaticInitSectionSpecifier() const {
|
||||
return 0;
|
||||
}
|
||||
|
||||
virtual const llvm::Type* adjustInlineAsmType(std::string& Constraint,
|
||||
const llvm::Type* Ty,
|
||||
llvm::LLVMContext& Context) const {
|
||||
return Ty;
|
||||
}
|
||||
protected:
|
||||
virtual uint64_t getPointerWidthV(unsigned AddrSpace) const {
|
||||
return PointerWidth;
|
||||
|
|
|
@ -1014,9 +1014,6 @@ public:
|
|||
}
|
||||
virtual bool validateAsmConstraint(const char *&Name,
|
||||
TargetInfo::ConstraintInfo &info) const;
|
||||
virtual const llvm::Type* adjustInlineAsmType(std::string& Constraint,
|
||||
const llvm::Type* Ty,
|
||||
llvm::LLVMContext& Context) const;
|
||||
virtual std::string convertConstraint(const char Constraint) const;
|
||||
virtual const char *getClobbers() const {
|
||||
return "~{dirflag},~{fpsr},~{flags}";
|
||||
|
@ -1341,15 +1338,6 @@ X86TargetInfo::validateAsmConstraint(const char *&Name,
|
|||
return false;
|
||||
}
|
||||
|
||||
const llvm::Type*
|
||||
X86TargetInfo::adjustInlineAsmType(std::string& Constraint,
|
||||
const llvm::Type* Ty,
|
||||
llvm::LLVMContext &Context) const {
|
||||
if (Constraint=="y" && Ty->isVectorTy())
|
||||
return llvm::Type::getX86_MMXTy(Context);
|
||||
return Ty;
|
||||
}
|
||||
|
||||
|
||||
std::string
|
||||
X86TargetInfo::convertConstraint(const char Constraint) const {
|
||||
|
|
|
@ -14,6 +14,7 @@
|
|||
#include "CGDebugInfo.h"
|
||||
#include "CodeGenModule.h"
|
||||
#include "CodeGenFunction.h"
|
||||
#include "TargetInfo.h"
|
||||
#include "clang/AST/StmtVisitor.h"
|
||||
#include "clang/Basic/PrettyStackTrace.h"
|
||||
#include "clang/Basic/TargetInfo.h"
|
||||
|
@ -1135,8 +1136,8 @@ void CodeGenFunction::EmitAsmStmt(const AsmStmt &S) {
|
|||
}
|
||||
}
|
||||
if (const llvm::Type* AdjTy =
|
||||
Target.adjustInlineAsmType(OutputConstraint, ResultRegTypes.back(),
|
||||
getLLVMContext()))
|
||||
getTargetHooks().adjustInlineAsmType(*this, OutputConstraint,
|
||||
ResultRegTypes.back()))
|
||||
ResultRegTypes.back() = AdjTy;
|
||||
} else {
|
||||
ArgTypes.push_back(Dest.getAddress()->getType());
|
||||
|
@ -1207,8 +1208,8 @@ void CodeGenFunction::EmitAsmStmt(const AsmStmt &S) {
|
|||
}
|
||||
}
|
||||
if (const llvm::Type* AdjTy =
|
||||
Target.adjustInlineAsmType(InputConstraint, Arg->getType(),
|
||||
getLLVMContext()))
|
||||
getTargetHooks().adjustInlineAsmType(*this, InputConstraint,
|
||||
Arg->getType()))
|
||||
Arg = Builder.CreateBitCast(Arg, AdjTy);
|
||||
|
||||
ArgTypes.push_back(Arg->getType());
|
||||
|
|
|
@ -355,6 +355,14 @@ bool UseX86_MMXType(const llvm::Type *IRType) {
|
|||
IRType->getScalarSizeInBits() != 64;
|
||||
}
|
||||
|
||||
static const llvm::Type* X86AdjustInlineAsmType(CodeGen::CodeGenFunction &CGF,
|
||||
llvm::StringRef Constraint,
|
||||
const llvm::Type* Ty) {
|
||||
if (Constraint=="y" && UseX86_MMXType(Ty))
|
||||
return llvm::Type::getX86_MMXTy(CGF.getLLVMContext());
|
||||
return Ty;
|
||||
}
|
||||
|
||||
//===----------------------------------------------------------------------===//
|
||||
// X86-32 ABI Implementation
|
||||
//===----------------------------------------------------------------------===//
|
||||
|
@ -415,6 +423,13 @@ public:
|
|||
|
||||
bool initDwarfEHRegSizeTable(CodeGen::CodeGenFunction &CGF,
|
||||
llvm::Value *Address) const;
|
||||
|
||||
const llvm::Type* adjustInlineAsmType(CodeGen::CodeGenFunction &CGF,
|
||||
llvm::StringRef Constraint,
|
||||
const llvm::Type* Ty) const {
|
||||
return X86AdjustInlineAsmType(CGF, Constraint, Ty);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
@ -895,6 +910,13 @@ public:
|
|||
|
||||
return false;
|
||||
}
|
||||
|
||||
const llvm::Type* adjustInlineAsmType(CodeGen::CodeGenFunction &CGF,
|
||||
llvm::StringRef Constraint,
|
||||
const llvm::Type* Ty) const {
|
||||
return X86AdjustInlineAsmType(CGF, Constraint, Ty);
|
||||
}
|
||||
|
||||
};
|
||||
|
||||
class WinX86_64TargetCodeGenInfo : public TargetCodeGenInfo {
|
||||
|
|
|
@ -15,8 +15,11 @@
|
|||
#ifndef CLANG_CODEGEN_TARGETINFO_H
|
||||
#define CLANG_CODEGEN_TARGETINFO_H
|
||||
|
||||
#include "llvm/ADT/StringRef.h"
|
||||
|
||||
namespace llvm {
|
||||
class GlobalValue;
|
||||
class Type;
|
||||
class Value;
|
||||
}
|
||||
|
||||
|
@ -102,6 +105,12 @@ namespace clang {
|
|||
llvm::Value *Address) const {
|
||||
return Address;
|
||||
}
|
||||
|
||||
virtual const llvm::Type* adjustInlineAsmType(CodeGen::CodeGenFunction &CGF,
|
||||
llvm::StringRef Constraint,
|
||||
const llvm::Type* Ty) const {
|
||||
return Ty;
|
||||
}
|
||||
};
|
||||
}
|
||||
|
||||
|
|
Загрузка…
Ссылка в новой задаче