mirror of
https://github.com/intel/llvm.git
synced 2026-01-27 14:50:42 +08:00
Make target info available to clang code generator. This is far from complete but this helps clang codegen module make progress. At the moment target triplet and target description strings are hard coded in clang::TargetInfo llvm-svn: 43572
82 lines
2.3 KiB
C++
82 lines
2.3 KiB
C++
//===--- CodeGenModule.h - Per-Module state for LLVM CodeGen --------------===//
|
|
//
|
|
// The LLVM Compiler Infrastructure
|
|
//
|
|
// This file was developed by Chris Lattner and is distributed under
|
|
// the University of Illinois Open Source License. See LICENSE.TXT for details.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// This is the internal per-translation-unit state used for llvm translation.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
|
|
#ifndef CODEGEN_CODEGENMODULE_H
|
|
#define CODEGEN_CODEGENMODULE_H
|
|
|
|
#include "CodeGenTypes.h"
|
|
#include "llvm/ADT/DenseMap.h"
|
|
#include "llvm/ADT/StringMap.h"
|
|
|
|
namespace llvm {
|
|
class Module;
|
|
class Constant;
|
|
class Function;
|
|
class GlobalVariable;
|
|
class TargetData;
|
|
}
|
|
|
|
namespace clang {
|
|
class ASTContext;
|
|
class FunctionDecl;
|
|
class Decl;
|
|
class ValueDecl;
|
|
class FileVarDecl;
|
|
|
|
namespace CodeGen {
|
|
|
|
/// CodeGenModule - This class organizes the cross-module state that is used
|
|
/// while generating LLVM code.
|
|
class CodeGenModule {
|
|
ASTContext &Context;
|
|
llvm::Module &TheModule;
|
|
const llvm::TargetData &TheTargetData;
|
|
CodeGenTypes Types;
|
|
|
|
llvm::Function *MemCpyFn;
|
|
llvm::DenseMap<const Decl*, llvm::Constant*> GlobalDeclMap;
|
|
|
|
llvm::StringMap<llvm::Constant*> CFConstantStringMap;
|
|
llvm::Constant *CFConstantStringClassRef;
|
|
|
|
std::vector<llvm::Function *> BuiltinFunctions;
|
|
public:
|
|
CodeGenModule(ASTContext &C, llvm::Module &M, const llvm::TargetData &TD);
|
|
|
|
ASTContext &getContext() const { return Context; }
|
|
llvm::Module &getModule() const { return TheModule; }
|
|
CodeGenTypes &getTypes() { return Types; }
|
|
|
|
llvm::Constant *GetAddrOfGlobalDecl(const ValueDecl *D);
|
|
|
|
/// getBuiltinLibFunction - Given a builtin id for a function like
|
|
/// "__builtin_fabsf", return a Function* for "fabsf".
|
|
///
|
|
llvm::Function *getBuiltinLibFunction(unsigned BuiltinID);
|
|
llvm::Constant *GetAddrOfConstantCFString(const std::string& str);
|
|
llvm::Function *getMemCpyFn();
|
|
|
|
|
|
void EmitFunction(const FunctionDecl *FD);
|
|
void EmitGlobalVar(const FileVarDecl *D);
|
|
void EmitGlobalVarDeclarator(const FileVarDecl *D);
|
|
llvm::Constant *EmitGlobalInit(const FileVarDecl *D,
|
|
llvm::GlobalVariable *GV);
|
|
|
|
void PrintStats() {}
|
|
};
|
|
} // end namespace CodeGen
|
|
} // end namespace clang
|
|
|
|
#endif
|