[cfe-commits] r42013 - in /cfe/trunk: Driver/ASTStreamers.cpp Driver/ASTStreamers.h Driver/LLVMCodegen.cpp Driver/clang.cpp clang.xcodeproj/project.pbxproj
Chris Lattner
sabre at nondot.org
Sun Sep 16 12:47:01 PDT 2007
Author: lattner
Date: Sun Sep 16 14:46:59 2007
New Revision: 42013
URL: http://llvm.org/viewvc/llvm-project?rev=42013&view=rev
Log:
switch the llvm emitter to ASTConsumer interface.
Removed:
cfe/trunk/Driver/LLVMCodegen.cpp
Modified:
cfe/trunk/Driver/ASTStreamers.cpp
cfe/trunk/Driver/ASTStreamers.h
cfe/trunk/Driver/clang.cpp
cfe/trunk/clang.xcodeproj/project.pbxproj
Modified: cfe/trunk/Driver/ASTStreamers.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Driver/ASTStreamers.cpp?rev=42013&r1=42012&r2=42013&view=diff
==============================================================================
--- cfe/trunk/Driver/ASTStreamers.cpp (original)
+++ cfe/trunk/Driver/ASTStreamers.cpp Sun Sep 16 14:46:59 2007
@@ -232,3 +232,57 @@
ASTConsumer *clang::CreateDeadStoreChecker(Diagnostic &Diags) {
return new DeadStoreVisitor(Diags);
}
+
+//===----------------------------------------------------------------------===//
+// LLVM Emitter
+
+#include "clang/Basic/Diagnostic.h"
+#include "clang/CodeGen/ModuleBuilder.h"
+#include "llvm/Module.h"
+#include <iostream>
+
+namespace {
+ class LLVMEmitter : public ASTConsumer {
+ Diagnostic &Diags;
+ llvm::Module *M;
+ ASTContext *Ctx;
+ CodeGen::BuilderTy *Builder;
+ public:
+ LLVMEmitter(Diagnostic &diags) : Diags(diags) {}
+ virtual void Initialize(ASTContext &Context, unsigned MainFileID) {
+ Ctx = &Context;
+ M = new llvm::Module("foo");
+ Builder = CodeGen::Init(Context, *M);
+ }
+
+ virtual void HandleTopLevelDecl(Decl *D) {
+ // If an error occurred, stop code generation, but continue parsing and
+ // semantic analysis (to ensure all warnings and errors are emitted).
+ if (Diags.hasErrorOccurred())
+ return;
+
+ if (FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
+ CodeGen::CodeGenFunction(Builder, FD);
+ } else if (FileVarDecl *FVD = dyn_cast<FileVarDecl>(D)) {
+ CodeGen::CodeGenGlobalVar(Builder, FVD);
+ } else {
+ assert(isa<TypedefDecl>(D) && "Only expected typedefs here");
+ // don't codegen for now, eventually pass down for debug info.
+ //std::cerr << "Read top-level typedef decl: '" << D->getName() << "'\n";
+ }
+ }
+
+ ~LLVMEmitter() {
+ CodeGen::Terminate(Builder);
+
+ // Print the generated code.
+ M->print(std::cout);
+ delete M;
+ }
+ };
+} // end anonymous namespace
+
+ASTConsumer *clang::CreateLLVMEmitter(Diagnostic &Diags) {
+ return new LLVMEmitter(Diags);
+}
+
Modified: cfe/trunk/Driver/ASTStreamers.h
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Driver/ASTStreamers.h?rev=42013&r1=42012&r2=42013&view=diff
==============================================================================
--- cfe/trunk/Driver/ASTStreamers.h (original)
+++ cfe/trunk/Driver/ASTStreamers.h Sun Sep 16 14:46:59 2007
@@ -24,6 +24,7 @@
ASTConsumer *CreateCFGDumper(bool ViewGraphs = false);
ASTConsumer *CreateLiveVarAnalyzer();
ASTConsumer *CreateDeadStoreChecker(Diagnostic &Diags);
+ASTConsumer *CreateLLVMEmitter(Diagnostic &Diags);
} // end clang namespace
Removed: cfe/trunk/Driver/LLVMCodegen.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Driver/LLVMCodegen.cpp?rev=42012&view=auto
==============================================================================
--- cfe/trunk/Driver/LLVMCodegen.cpp (original)
+++ cfe/trunk/Driver/LLVMCodegen.cpp (removed)
@@ -1,71 +0,0 @@
-//===--- LLVMCodegen.cpp - Emit LLVM Code from ASTs -----------------------===//
-//
-// 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 builds an AST and converts it to LLVM Code.
-//
-//===----------------------------------------------------------------------===//
-
-#include "clang.h"
-#include "clang/CodeGen/ModuleBuilder.h"
-#include "clang/Sema/ASTStreamer.h"
-#include "clang/AST/AST.h"
-#include "clang/Lex/Preprocessor.h"
-#include "clang/Basic/Diagnostic.h"
-#include "llvm/Module.h"
-#include <iostream>
-using namespace clang;
-
-//===----------------------------------------------------------------------===//
-// LLVM Emission
-//===----------------------------------------------------------------------===//
-
-void clang::EmitLLVMFromASTs(Preprocessor &PP, unsigned MainFileID,
- bool PrintStats) {
- Diagnostic &Diags = PP.getDiagnostics();
- // Create the streamer to read the file.
- ASTContext Context(PP.getSourceManager(), PP.getTargetInfo(),
- PP.getIdentifierTable());
- ASTStreamerTy *Streamer = ASTStreamer_Init(PP, Context, MainFileID);
-
- // Create the module to codegen into.
- llvm::Module M("foo");
-
- CodeGen::BuilderTy *Builder = CodeGen::Init(Context, M);
-
- while (Decl *D = ASTStreamer_ReadTopLevelDecl(Streamer)) {
- // If an error occurred, stop code generation, but continue parsing and
- // semantic analysis (to ensure all warnings and errors are emitted).
- if (Diags.hasErrorOccurred())
- continue;
-
- if (FunctionDecl *FD = dyn_cast<FunctionDecl>(D)) {
- CodeGen::CodeGenFunction(Builder, FD);
- } else if (FileVarDecl *FVD = dyn_cast<FileVarDecl>(D)) {
- CodeGen::CodeGenGlobalVar(Builder, FVD);
- } else {
- assert(isa<TypedefDecl>(D) && "Only expected typedefs here");
- // don't codegen for now, eventually pass down for debug info.
- //std::cerr << "Read top-level typedef decl: '" << D->getName() << "'\n";
- }
- }
-
- if (PrintStats) {
- std::cerr << "\nSTATISTICS:\n";
- CodeGen::PrintStats(Builder);
- ASTStreamer_PrintStats(Streamer);
- Context.PrintStats();
- }
-
- CodeGen::Terminate(Builder);
- ASTStreamer_Terminate(Streamer);
-
- // Print the generated code.
- M.print(std::cout);
-}
-
Modified: cfe/trunk/Driver/clang.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/Driver/clang.cpp?rev=42013&r1=42012&r2=42013&view=diff
==============================================================================
--- cfe/trunk/Driver/clang.cpp (original)
+++ cfe/trunk/Driver/clang.cpp Sun Sep 16 14:46:59 2007
@@ -870,9 +870,11 @@
ParseAST(PP, MainFileID, *C.get(), Stats);
break;
}
- case EmitLLVM:
- EmitLLVMFromASTs(PP, MainFileID, Stats);
+ case EmitLLVM: {
+ std::auto_ptr<ASTConsumer> C(CreateLLVMEmitter(PP.getDiagnostics()));
+ ParseAST(PP, MainFileID, *C.get(), Stats);
break;
+ }
case ParseASTCheck:
exit(CheckDiagnostics(PP, MainFileID));
break;
Modified: cfe/trunk/clang.xcodeproj/project.pbxproj
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/clang.xcodeproj/project.pbxproj?rev=42013&r1=42012&r2=42013&view=diff
==============================================================================
--- cfe/trunk/clang.xcodeproj/project.pbxproj (original)
+++ cfe/trunk/clang.xcodeproj/project.pbxproj Sun Sep 16 14:46:59 2007
@@ -70,7 +70,6 @@
DE6954640C5121BD00A5826B /* Token.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DE6954630C5121BD00A5826B /* Token.h */; };
DE75ED290B044DC90020CF81 /* ASTContext.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DE75ED280B044DC90020CF81 /* ASTContext.h */; };
DE75EDF10B06880E0020CF81 /* Type.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DE75EDF00B06880E0020CF81 /* Type.cpp */; };
- DE927FFD0C055DE900231DA4 /* LLVMCodegen.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DE927FFC0C055DE900231DA4 /* LLVMCodegen.cpp */; };
DE928B130C05659200231DA4 /* ModuleBuilder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = DE928B120C05659200231DA4 /* ModuleBuilder.cpp */; };
DE928B200C0565B000231DA4 /* ModuleBuilder.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DE928B1F0C0565B000231DA4 /* ModuleBuilder.h */; };
DE928B7D0C0A615100231DA4 /* CodeGenModule.h in CopyFiles */ = {isa = PBXBuildFile; fileRef = DE928B7C0C0A615100231DA4 /* CodeGenModule.h */; };
@@ -228,7 +227,7 @@
35AE0F680C9B4CC200CC1279 /* UnintializedValues.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; name = UnintializedValues.cpp; path = Analysis/UnintializedValues.cpp; sourceTree = "<group>"; };
84D9A8870C1A57E100AC7ABC /* AttributeList.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = AttributeList.cpp; path = Parse/AttributeList.cpp; sourceTree = "<group>"; };
84D9A88B0C1A581300AC7ABC /* AttributeList.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = AttributeList.h; path = clang/Parse/AttributeList.h; sourceTree = "<group>"; };
- 8DD76F6C0486A84900D96B5E /* clang */ = {isa = PBXFileReference; explicitFileType = "compiled.mach-o.executable"; includeInIndex = 0; path = clang; sourceTree = BUILT_PRODUCTS_DIR; };
+ 8DD76F6C0486A84900D96B5E /* clang */ = {isa = PBXFileReference; includeInIndex = 0; lastKnownFileType = "compiled.mach-o.executable"; path = clang; sourceTree = BUILT_PRODUCTS_DIR; };
DE01DA480B12ADA300AC22CE /* PPCallbacks.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = PPCallbacks.h; sourceTree = "<group>"; };
DE06756B0C051CFE00EBBFD8 /* ParseExprCXX.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = ParseExprCXX.cpp; path = Parse/ParseExprCXX.cpp; sourceTree = "<group>"; };
DE06B73D0A8307640050E87E /* LangOptions.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = LangOptions.h; sourceTree = "<group>"; };
@@ -281,7 +280,6 @@
DE6954630C5121BD00A5826B /* Token.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; path = Token.h; sourceTree = "<group>"; };
DE75ED280B044DC90020CF81 /* ASTContext.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ASTContext.h; path = clang/AST/ASTContext.h; sourceTree = "<group>"; };
DE75EDF00B06880E0020CF81 /* Type.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = Type.cpp; path = AST/Type.cpp; sourceTree = "<group>"; };
- DE927FFC0C055DE900231DA4 /* LLVMCodegen.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = LLVMCodegen.cpp; path = Driver/LLVMCodegen.cpp; sourceTree = "<group>"; };
DE928B120C05659200231DA4 /* ModuleBuilder.cpp */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.cpp.cpp; name = ModuleBuilder.cpp; path = CodeGen/ModuleBuilder.cpp; sourceTree = "<group>"; };
DE928B1F0C0565B000231DA4 /* ModuleBuilder.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = ModuleBuilder.h; path = clang/CodeGen/ModuleBuilder.h; sourceTree = "<group>"; };
DE928B7C0C0A615100231DA4 /* CodeGenModule.h */ = {isa = PBXFileReference; fileEncoding = 30; lastKnownFileType = sourcecode.c.h; name = CodeGenModule.h; path = CodeGen/CodeGenModule.h; sourceTree = "<group>"; };
@@ -532,7 +530,6 @@
DED67AEF0B6DB92F00AAD4A3 /* PPCBuiltins.def */,
DED67AED0B6DB92A00AAD4A3 /* X86Builtins.def */,
DEC82DC30C32D50A00BAC245 /* DiagChecker.cpp */,
- DE927FFC0C055DE900231DA4 /* LLVMCodegen.cpp */,
DE5932CF0AD60FF400BC794C /* PrintParserCallbacks.cpp */,
DE5932D00AD60FF400BC794C /* PrintPreprocessedOutput.cpp */,
DED627020AE0C51D001E80A4 /* Targets.cpp */,
@@ -766,7 +763,6 @@
DE67E7170C020EE400F66BC5 /* Sema.cpp in Sources */,
DE67E71A0C020F4F00F66BC5 /* ASTStreamer.cpp in Sources */,
DE06756C0C051CFE00EBBFD8 /* ParseExprCXX.cpp in Sources */,
- DE927FFD0C055DE900231DA4 /* LLVMCodegen.cpp in Sources */,
DE928B130C05659200231DA4 /* ModuleBuilder.cpp in Sources */,
DE928B7F0C0A615600231DA4 /* CodeGenModule.cpp in Sources */,
DE928B830C0A616000231DA4 /* CodeGenFunction.cpp in Sources */,
More information about the cfe-commits
mailing list