[llvm-commits] [gcc-plugin] r76416 - /gcc-plugin/trunk/llvm-backend.cpp

Duncan Sands baldrick at free.fr
Mon Jul 20 03:05:34 PDT 2009


Author: baldrick
Date: Mon Jul 20 05:05:09 2009
New Revision: 76416

URL: http://llvm.org/viewvc/llvm-project?rev=76416&view=rev
Log:
Initialize the target as x86 for the moment.
Actually do something with functions rather
than just printing Yo!

Modified:
    gcc-plugin/trunk/llvm-backend.cpp

Modified: gcc-plugin/trunk/llvm-backend.cpp
URL: http://llvm.org/viewvc/llvm-project/gcc-plugin/trunk/llvm-backend.cpp?rev=76416&r1=76415&r2=76416&view=diff

==============================================================================
--- gcc-plugin/trunk/llvm-backend.cpp (original)
+++ gcc-plugin/trunk/llvm-backend.cpp Mon Jul 20 05:05:09 2009
@@ -43,6 +43,7 @@
 #include "llvm/Transforms/IPO.h"
 #include "llvm/ADT/StringExtras.h"
 #include "llvm/ADT/StringMap.h"
+#include "llvm/Support/ErrorHandling.h"
 #include "llvm/Support/ManagedStatic.h"
 #include "llvm/Support/MemoryBuffer.h"
 #include "llvm/Support/StandardPasses.h"
@@ -345,19 +346,22 @@
   }
 }
 
-//TODO#ifndef LLVM_TARGET_NAME
-//TODO#error LLVM_TARGET_NAME macro not specified by GCC backend
-//TODO#endif
-//TODO
-//TODOnamespace llvm {
-//TODO#define Declare2(TARG, MOD)   extern "C" void LLVMInitialize ## TARG ## MOD()
-//TODO#define Declare(T, M) Declare2(T, M)
-//TODO  Declare(LLVM_TARGET_NAME, TargetInfo);
-//TODO  Declare(LLVM_TARGET_NAME, Target);
-//TODO  Declare(LLVM_TARGET_NAME, AsmPrinter);
-//TODO#undef Declare
-//TODO#undef Declare2
-//TODO}
+// FIXME: For the moment, all the world's an x86
+#define LLVM_TARGET_NAME X86
+
+#ifndef LLVM_TARGET_NAME
+#error LLVM_TARGET_NAME macro not specified by GCC backend
+#endif
+
+namespace llvm {
+#define Declare2(TARG, MOD)   extern "C" void LLVMInitialize ## TARG ## MOD()
+#define Declare(T, M) Declare2(T, M)
+  Declare(LLVM_TARGET_NAME, TargetInfo);
+  Declare(LLVM_TARGET_NAME, Target);
+  Declare(LLVM_TARGET_NAME, AsmPrinter);
+#undef Declare
+#undef Declare2
+}
 
 /// LazilyConfigureLLVM - Set LLVM configuration options, if not already set.
 /// already created.
@@ -366,6 +370,15 @@
   if (Configured)
     return;
 
+  // Initialize the LLVM backend.
+#define DoInit2(TARG, MOD)  LLVMInitialize ## TARG ## MOD()
+#define DoInit(T, M) DoInit2(T, M)
+  DoInit(LLVM_TARGET_NAME, TargetInfo);
+  DoInit(LLVM_TARGET_NAME, Target);
+  DoInit(LLVM_TARGET_NAME, AsmPrinter);
+#undef DoInit
+#undef DoInit2
+
   // Initialize LLVM command line options.
   std::vector<const char*> Args;
   Args.push_back(progname); // program name
@@ -478,20 +491,18 @@
   std::string Err;
   const Target *TME =
     TargetRegistry::getClosestStaticTargetForModule(*TheModule, Err);
-  if (!TME) {
-    cerr << "Did not get a target machine! Triplet is " << TargetTriple << '\n';
-    exit(1);
-  }
+  if (!TME)
+    llvm_report_error(Err);
 
   // Figure out the subtarget feature string we pass to the target.
   std::string FeatureStr;
-//TODO  // The target can set LLVM_SET_SUBTARGET_FEATURES to configure the LLVM
-//TODO  // backend.
-//TODO#ifdef LLVM_SET_SUBTARGET_FEATURES
-//TODO  SubtargetFeatures Features;
-//TODO  LLVM_SET_SUBTARGET_FEATURES(Features);
-//TODO  FeatureStr = Features.getString();
-//TODO#endif
+  // The target can set LLVM_SET_SUBTARGET_FEATURES to configure the LLVM
+  // backend.
+#ifdef LLVM_SET_SUBTARGET_FEATURES
+  SubtargetFeatures Features;
+  LLVM_SET_SUBTARGET_FEATURES(Features);
+  FeatureStr = Features.getString();
+#endif
   TheTarget = TME->createTargetMachine(*TheModule, FeatureStr);
   assert(TheTarget->getTargetData()->isBigEndian() == BYTES_BIG_ENDIAN);
 
@@ -1814,6 +1825,8 @@
 static unsigned int
 execute_emit_llvm (void)
 {
+  LazilyInitializeModule();
+
 //TODO Don't want to use sorry at this stage...
 //TODO  if (cfun->nonlocal_goto_save_area)
 //TODO    sorry("%Jnon-local gotos not supported by LLVM", fndecl);
@@ -1831,8 +1844,7 @@
   DECL_DEFER_OUTPUT(current_function_decl) = 0;
 
   // Convert the AST to raw/ugly LLVM code.
-//FIXME  TreeToLLVM Emitter(current_function_decl);
-cout << "Yo!\n";
+  TreeToLLVM Emitter(current_function_decl);
 
 //TODO#if 0
 //TODO  if (dump_file) {





More information about the llvm-commits mailing list