[cfe-commits] r39519 - in /cfe/cfe/trunk: CodeGen/CodeGenFunction.cpp CodeGen/CodeGenFunction.h CodeGen/CodeGenModule.cpp CodeGen/CodeGenModule.h clang.xcodeproj/project.pbxproj
clattner at cs.uiuc.edu
clattner at cs.uiuc.edu
Wed Jul 11 09:45:14 PDT 2007
Author: clattner
Date: Wed Jul 11 11:45:14 2007
New Revision: 39519
URL: http://llvm.org/viewvc/llvm-project?rev=39519&view=rev
Log:
Implement conversion of clang ast types to LLVM types, at least for some trivial
cases.
Modified:
cfe/cfe/trunk/CodeGen/CodeGenFunction.cpp
cfe/cfe/trunk/CodeGen/CodeGenFunction.h
cfe/cfe/trunk/CodeGen/CodeGenModule.cpp
cfe/cfe/trunk/CodeGen/CodeGenModule.h
cfe/cfe/trunk/clang.xcodeproj/project.pbxproj
Modified: cfe/cfe/trunk/CodeGen/CodeGenFunction.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/cfe/trunk/CodeGen/CodeGenFunction.cpp?rev=39519&r1=39518&r2=39519&view=diff
==============================================================================
--- cfe/cfe/trunk/CodeGen/CodeGenFunction.cpp (original)
+++ cfe/cfe/trunk/CodeGen/CodeGenFunction.cpp Wed Jul 11 11:45:14 2007
@@ -13,8 +13,97 @@
#include "CodeGenFunction.h"
#include "CodeGenModule.h"
+#include "clang/Basic/TargetInfo.h"
+#include "clang/AST/AST.h"
+#include "llvm/DerivedTypes.h"
#include "llvm/Support/LLVMBuilder.h"
using namespace llvm;
using namespace clang;
using namespace CodeGen;
+CodeGenFunction::CodeGenFunction(CodeGenModule &cgm)
+ : CGM(cgm), Target(CGM.getContext().Target) {}
+
+
+/// ConvertType - Convert the specified type to its LLVM form.
+const llvm::Type *CodeGenFunction::ConvertType(QualType T, SourceLocation Loc) {
+ // FIXME: Cache these, move the CodeGenModule, expand, etc.
+ const clang::Type &Ty = *T.getCanonicalType();
+
+ switch (Ty.getTypeClass()) {
+ case Type::Builtin: {
+ switch (cast<BuiltinType>(Ty).getKind()) {
+ case BuiltinType::Void:
+ // LLVM void type can only be used as the result of a function call. Just
+ // map to the same as char.
+ case BuiltinType::Char:
+ case BuiltinType::SChar:
+ case BuiltinType::UChar:
+ return IntegerType::get(Target.getCharWidth(Loc));
+
+ case BuiltinType::Bool:
+ return IntegerType::get(Target.getBoolWidth(Loc));
+
+ case BuiltinType::Short:
+ case BuiltinType::UShort:
+ return IntegerType::get(Target.getShortWidth(Loc));
+
+ case BuiltinType::Int:
+ case BuiltinType::UInt:
+ return IntegerType::get(Target.getIntWidth(Loc));
+
+ case BuiltinType::Long:
+ case BuiltinType::ULong:
+ return IntegerType::get(Target.getLongWidth(Loc));
+
+ case BuiltinType::LongLong:
+ case BuiltinType::ULongLong:
+ return IntegerType::get(Target.getLongLongWidth(Loc));
+
+ case BuiltinType::Float: return llvm::Type::FloatTy;
+ case BuiltinType::Double: return llvm::Type::DoubleTy;
+ case BuiltinType::LongDouble:
+ case BuiltinType::FloatComplex:
+ case BuiltinType::DoubleComplex:
+ case BuiltinType::LongDoubleComplex:
+ ;
+ }
+ break;
+ }
+ case Type::Pointer:
+ case Type::Reference:
+ case Type::Array:
+ break;
+ case Type::FunctionNoProto:
+ case Type::FunctionProto: {
+ const FunctionType &FP = cast<FunctionType>(Ty);
+ const llvm::Type *ResultType;
+
+ if (FP.getResultType()->isVoidType())
+ ResultType = llvm::Type::VoidTy; // Result of function uses llvm void.
+ else
+ ResultType = ConvertType(FP.getResultType(), Loc);
+
+ // FIXME: Convert argument types.
+
+ return llvm::FunctionType::get(ResultType,
+ std::vector<const llvm::Type*>(),
+ false,
+ 0);
+ }
+ case Type::TypeName:
+ case Type::Tagged:
+ break;
+ }
+
+ // FIXME: implement.
+ return OpaqueType::get();
+}
+
+
+void CodeGenFunction::GenerateCode(FunctionDecl *FD) {
+ const llvm::Type *Ty = ConvertType(FD->getType(), FD->getLocation());
+
+ Ty->dump();
+
+}
Modified: cfe/cfe/trunk/CodeGen/CodeGenFunction.h
URL: http://llvm.org/viewvc/llvm-project/cfe/cfe/trunk/CodeGen/CodeGenFunction.h?rev=39519&r1=39518&r2=39519&view=diff
==============================================================================
--- cfe/cfe/trunk/CodeGen/CodeGenFunction.h (original)
+++ cfe/cfe/trunk/CodeGen/CodeGenFunction.h Wed Jul 11 11:45:14 2007
@@ -16,9 +16,13 @@
namespace llvm {
class Module;
+ class Type;
namespace clang {
class ASTContext;
class FunctionDecl;
+ class QualType;
+ class SourceLocation;
+ class TargetInfo;
namespace CodeGen {
class CodeGenModule;
@@ -27,9 +31,13 @@
/// while generating LLVM code.
class CodeGenFunction {
CodeGenModule &CGM; // Per-module state.
+ TargetInfo &Target;
public:
- CodeGenFunction(CodeGenModule &cgm) : CGM(cgm) {}
+ CodeGenFunction(CodeGenModule &cgm);
+ const llvm::Type *ConvertType(QualType T, SourceLocation Loc);
+
+ void GenerateCode(FunctionDecl *FD);
};
} // end namespace CodeGen
} // end namespace clang
Modified: cfe/cfe/trunk/CodeGen/CodeGenModule.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/cfe/trunk/CodeGen/CodeGenModule.cpp?rev=39519&r1=39518&r2=39519&view=diff
==============================================================================
--- cfe/cfe/trunk/CodeGen/CodeGenModule.cpp (original)
+++ cfe/cfe/trunk/CodeGen/CodeGenModule.cpp Wed Jul 11 11:45:14 2007
@@ -19,6 +19,5 @@
void CodeGenModule::EmitFunction(FunctionDecl *FD) {
- CodeGenFunction CGF(*this);
-
+ CodeGenFunction(*this).GenerateCode(FD);
}
Modified: cfe/cfe/trunk/CodeGen/CodeGenModule.h
URL: http://llvm.org/viewvc/llvm-project/cfe/cfe/trunk/CodeGen/CodeGenModule.h?rev=39519&r1=39518&r2=39519&view=diff
==============================================================================
--- cfe/cfe/trunk/CodeGen/CodeGenModule.h (original)
+++ cfe/cfe/trunk/CodeGen/CodeGenModule.h Wed Jul 11 11:45:14 2007
@@ -30,6 +30,8 @@
public:
CodeGenModule(ASTContext &C, Module &M) : Context(C), TheModule(M) {}
+ ASTContext &getContext() const { return Context; }
+
void EmitFunction(FunctionDecl *FD);
void PrintStats() {}
Modified: cfe/cfe/trunk/clang.xcodeproj/project.pbxproj
URL: http://llvm.org/viewvc/llvm-project/cfe/cfe/trunk/clang.xcodeproj/project.pbxproj?rev=39519&r1=39518&r2=39519&view=diff
==============================================================================
--- cfe/cfe/trunk/clang.xcodeproj/project.pbxproj (original)
+++ cfe/cfe/trunk/clang.xcodeproj/project.pbxproj Wed Jul 11 11:45:14 2007
@@ -103,23 +103,6 @@
DED7D9E50A5257F6003AD0FB /* ScratchBuffer.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DED7D9E40A5257F6003AD0FB /* ScratchBuffer.cpp */; };
/* End PBXBuildFile section */
-/* Begin PBXBuildStyle section */
- 84FADE170C0B37FF00330902 /* Development */ = {
- isa = PBXBuildStyle;
- buildSettings = {
- COPY_PHASE_STRIP = NO;
- };
- name = Development;
- };
- 84FADE180C0B37FF00330902 /* Deployment */ = {
- isa = PBXBuildStyle;
- buildSettings = {
- COPY_PHASE_STRIP = YES;
- };
- name = Deployment;
- };
-/* End PBXBuildStyle section */
-
/* Begin PBXCopyFilesBuildPhase section */
8DD76F690486A84900D96B5E /* CopyFiles */ = {
isa = PBXCopyFilesBuildPhase;
@@ -555,12 +538,6 @@
08FB7793FE84155DC02AAC07 /* Project object */ = {
isa = PBXProject;
buildConfigurationList = 1DEB923508733DC60010E9CD /* Build configuration list for PBXProject "clang" */;
- buildSettings = {
- };
- buildStyles = (
- 84FADE170C0B37FF00330902 /* Development */,
- 84FADE180C0B37FF00330902 /* Deployment */,
- );
hasScannedForEncodings = 1;
mainGroup = 08FB7794FE84155DC02AAC07 /* clang */;
projectDirPath = "";
More information about the cfe-commits
mailing list