[vmkit-commits] [vmkit] r180394 - move the static passes into a directory called prepare-code

Peter Senna Tschudin peter.senna at gmail.com
Thu Apr 25 10:07:28 PDT 2013


Author: peter.senna
Date: Thu Apr 25 12:05:29 2013
New Revision: 180394

URL: http://llvm.org/viewvc/llvm-project?rev=180394&view=rev
Log:
move the static passes into a directory called prepare-code
(cherry picked from commit 67467df74a4bfce7758269abbcaad4106a740961)

Added:
    vmkit/trunk/lib/prepare-code/
    vmkit/trunk/lib/prepare-code/Makefile
      - copied, changed from r180393, vmkit/trunk/lib/vmkit/StaticGCPass/Makefile
    vmkit/trunk/lib/prepare-code/StaticGCPass.cpp
      - copied, changed from r180393, vmkit/trunk/lib/vmkit/StaticGCPass/StaticGCPass.cpp
    vmkit/trunk/lib/prepare-code/VmkitGCPrinter.cpp
      - copied, changed from r180393, vmkit/trunk/lib/vmkit/StaticGCPrinter/VmkitGCPrinter.cpp
Removed:
    vmkit/trunk/lib/vmkit/StaticGCPass/Makefile
    vmkit/trunk/lib/vmkit/StaticGCPass/StaticGCPass.cpp
    vmkit/trunk/lib/vmkit/StaticGCPrinter/Makefile
    vmkit/trunk/lib/vmkit/StaticGCPrinter/VmkitGCPrinter.cpp
Modified:
    vmkit/trunk/Makefile
    vmkit/trunk/Makefile.rules
    vmkit/trunk/tools/trainer/Makefile

Modified: vmkit/trunk/Makefile
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/Makefile?rev=180394&r1=180393&r2=180394&view=diff
==============================================================================
--- vmkit/trunk/Makefile (original)
+++ vmkit/trunk/Makefile Thu Apr 25 12:05:29 2013
@@ -13,7 +13,7 @@ include $(LEVEL)/Makefile.config
 
 # Top-Level vmkit Build Stages:
 #
-DIRS := lib/prepare-code lib/vmkit/StaticGCPass lib/vmkit/StaticGCPrinter lib tools/vmjc mmtk tools/precompiler tools/trainer tools
+DIRS := lib/prepare-code lib tools/vmjc mmtk tools/precompiler tools/trainer tools
 
 EXTRA_DIST=include
 

Modified: vmkit/trunk/Makefile.rules
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/Makefile.rules?rev=180394&r1=180393&r2=180394&view=diff
==============================================================================
--- vmkit/trunk/Makefile.rules (original)
+++ vmkit/trunk/Makefile.rules Thu Apr 25 12:05:29 2013
@@ -52,6 +52,8 @@ LArchive=$(LLVM_BIN)/llvm-ar rcsf
 MKDIR=mkdir -p
 TOUCH=touch
 
+PREPARE_CODE=$(LIBDIR)/prepare-code$(SHLIBEXT)
+
 %/.dir:
 	$(Verb) $(MKDIR) $(dir $@) && $(TOUCH) $@
 
@@ -143,9 +145,9 @@ all::
 	$(Verb) $(VMJC) $(VMJC_MMTK_FLAGS) -load=$(LibDir)/MMTKRuntime$(SHLIBEXT) -load=$(LibDir)/MMTKMagic$(SHLIBEXT) -LowerMagic $(PROJ_OBJ_ROOT)/mmtk/java/$(JARNAME).jar -disable-exceptions -disable-cooperativegc -with-clinit=org/mmtk/vm/VM,org/mmtk/utility/*,org/mmtk/policy/*,org/j3/config/* -Dmmtk.hostjvm=org.j3.mmtk.Factory -o $(JARNAME).bc -Dmmtk.properties=$(PROJ_SRC_ROOT)/mmtk/java/vmkit.properties -disable-stubs -assume-compiled
 	$(Verb) $(LOPT) -load=$(LibDir)/MMTKMagic$(SHLIBEXT) $(OPT_MMTK_FLAGS) -LowerJavaRT -f $(JARNAME).bc -o $(JARNAME)-optimized.bc
 	$(Verb) $(LLVMLINK) -o $(LibDir)/FinalMMTk.bc $(LibDir)/MMTKAlloc.bc $(JARNAME)-optimized.bc $(LibDir)/MMTKRuntime.bc
-	$(Verb) $(LOPT) $(LibDir)/FinalMMTk.bc -load=$(LibDir)/StaticGCPass$(SHLIBEXT) $(OPT_MMTK_FLAGS) -StaticGCPass -o $(LibDir)/FinalMMTk.bc
+	$(Verb) $(LOPT) $(LibDir)/FinalMMTk.bc -load=$(PREPARE_CODE) $(OPT_MMTK_FLAGS) -StaticGCPass -o $(LibDir)/FinalMMTk.bc
 	$(Verb) $(MKDIR) $(ObjDir)
-	$(Verb) $(LLC) $(LLC_ASM_FLAGS) -disable-fp-elim -disable-cfi -load=$(LibDir)/StaticGCPrinter$(SHLIBEXT) $(LibDir)/FinalMMTk.bc -o $(ObjDir)/FinalMMTk.s
+	$(Verb) $(LLC) $(LLC_ASM_FLAGS) -disable-fp-elim -disable-cfi -load=$(PREPARE_CODE) $(LibDir)/FinalMMTk.bc -o $(ObjDir)/FinalMMTk.s
 	$(Verb) $(GREP) -v '\.loc[^0-9]\+[0-9]\+ 0' $(ObjDir)/FinalMMTk.s > $(ObjDir)/FinalMMTk.s.remove_invalid_dot_loc
 	$(Verb) $(MV) -f $(ObjDir)/FinalMMTk.s.remove_invalid_dot_loc $(ObjDir)/FinalMMTk.s
 	$(Verb) $(LLVMCC) -c $(ObjDir)/FinalMMTk.s -o $(ObjDir)/FinalMMTk.o
@@ -174,11 +176,11 @@ AModule           := $(LibDir)/lib$(MODU
 
 $(ObjectsBCWithGC): $(ObjDir)/%_gc.bc: $(ObjDir)/%.bc $(LOPT)
 	$(Echo) "**[4] Compiling $*.bc to $*.bc (gc) for $(BuildMode) build (bytecode)" # $(OPT_BC_WITH_GC_FLAGS)
-	$(Verb) $(LOPT) $< -load=$(VMKIT_OBJ_ROOT)/$(BuildMode)/lib/StaticGCPass$(SHLIBEXT) -StaticGCPass -o $@
+	$(Verb) $(LOPT) $< -load=$(PREPARE_CODE) -StaticGCPass -o $@
 
 $(ObjectsWithGC): $(ObjDir)/%_gc.o: $(ObjDir)/%_gc.bc $(LLC)
 	$(Echo) "**[5] Compiling $*.bc to $*.o for $(BuildMode) build" # $(LLC_ASM_FLAGS)
-	$(Verb) $(LLC) -filetype=obj -disable-cfi -disable-fp-elim -load=$(VMKIT_OBJ_ROOT)/$(BuildMode)/lib/StaticGCPrinter$(SHLIBEXT) $< -o $@
+	$(Verb) $(LLC) -filetype=obj -disable-cfi -disable-fp-elim -load=$(PREPARE_CODE) $< -o $@
 
 $(AModule): $(ObjectsWithGC) $(LibDir)/.dir
 	$(Echo) "**[6] Building $(BuildMode) Archive Library $(notdir $@)"

Copied: vmkit/trunk/lib/prepare-code/Makefile (from r180393, vmkit/trunk/lib/vmkit/StaticGCPass/Makefile)
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/prepare-code/Makefile?p2=vmkit/trunk/lib/prepare-code/Makefile&p1=vmkit/trunk/lib/vmkit/StaticGCPass/Makefile&r1=180393&r2=180394&rev=180394&view=diff
==============================================================================
--- vmkit/trunk/lib/vmkit/StaticGCPass/Makefile (original)
+++ vmkit/trunk/lib/prepare-code/Makefile Thu Apr 25 12:05:29 2013
@@ -7,11 +7,11 @@
 #
 ##===----------------------------------------------------------------------===##
 
-LEVEL = ../../..
+LEVEL = ../..
 
 include $(LEVEL)/Makefile.config
 
-LIBRARY=StaticGCPass
+LIBRARY=prepare-code
 LOADABLE_MODULE = 1
 
 include $(LEVEL)/Makefile.common

Copied: vmkit/trunk/lib/prepare-code/StaticGCPass.cpp (from r180393, vmkit/trunk/lib/vmkit/StaticGCPass/StaticGCPass.cpp)
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/prepare-code/StaticGCPass.cpp?p2=vmkit/trunk/lib/prepare-code/StaticGCPass.cpp&p1=vmkit/trunk/lib/vmkit/StaticGCPass/StaticGCPass.cpp&r1=180393&r2=180394&rev=180394&view=diff
==============================================================================
    (empty)

Copied: vmkit/trunk/lib/prepare-code/VmkitGCPrinter.cpp (from r180393, vmkit/trunk/lib/vmkit/StaticGCPrinter/VmkitGCPrinter.cpp)
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/prepare-code/VmkitGCPrinter.cpp?p2=vmkit/trunk/lib/prepare-code/VmkitGCPrinter.cpp&p1=vmkit/trunk/lib/vmkit/StaticGCPrinter/VmkitGCPrinter.cpp&r1=180393&r2=180394&rev=180394&view=diff
==============================================================================
    (empty)

Removed: vmkit/trunk/lib/vmkit/StaticGCPass/Makefile
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/StaticGCPass/Makefile?rev=180393&view=auto
==============================================================================
--- vmkit/trunk/lib/vmkit/StaticGCPass/Makefile (original)
+++ vmkit/trunk/lib/vmkit/StaticGCPass/Makefile (removed)
@@ -1,18 +0,0 @@
-##===- lib/vmkit/StaticGCPass/Makefile -----------------------*- Makefile -*-===##
-#
-#                            The VMKit project
-#
-# This file is distributed under the University of Illinois Open Source
-# License. See LICENSE.TXT for details.
-#
-##===----------------------------------------------------------------------===##
-
-LEVEL = ../../..
-
-include $(LEVEL)/Makefile.config
-
-LIBRARY=StaticGCPass
-LOADABLE_MODULE = 1
-
-include $(LEVEL)/Makefile.common
-

Removed: vmkit/trunk/lib/vmkit/StaticGCPass/StaticGCPass.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/StaticGCPass/StaticGCPass.cpp?rev=180393&view=auto
==============================================================================
--- vmkit/trunk/lib/vmkit/StaticGCPass/StaticGCPass.cpp (original)
+++ vmkit/trunk/lib/vmkit/StaticGCPass/StaticGCPass.cpp (removed)
@@ -1,77 +0,0 @@
-//===---- StaticGCPass.cpp - Put GC information in functions compiled --------//
-//===----------------------- with llvm-gcc --------------------------------===//
-//
-//                     The VMKit project
-//
-// This file is distributed under the University of Illinois Open Source 
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-
-#include "llvm/Intrinsics.h"
-#include "llvm/Module.h"
-#include "llvm/Pass.h"
-#include "llvm/Support/raw_ostream.h"
-
-#include <cstdio>
-
-using namespace llvm;
-
-namespace {
-
-  class StaticGCPass : public ModulePass {
-  public:
-    static char ID;
-    
-    StaticGCPass() : ModulePass(ID) {}
-
-    virtual bool runOnModule(Module& M);
-
-    /// getAnalysisUsage - We do not modify anything.
-    virtual void getAnalysisUsage(AnalysisUsage &AU) const {
-      AU.setPreservesAll();
-    } 
-
-  };
-
-  char StaticGCPass::ID = 0;
-  RegisterPass<StaticGCPass> X("StaticGCPass",
-                      "Add GC information in files compiled with llvm-gcc");
-
-bool StaticGCPass::runOnModule(Module& M) {
-
-  Function* F = M.getFunction("__llvm_gcroot");
-  Function *gcrootFun = Intrinsic::getDeclaration(&M, Intrinsic::gcroot);
-
-  if (F) {
-    F->replaceAllUsesWith(gcrootFun);
-    F->eraseFromParent();
-  }
-
-  bool error = false;
-  for (Value::use_iterator I = gcrootFun->use_begin(),
-       E = gcrootFun->use_end(); I != E; ++I) {
-    if (Instruction* II = dyn_cast<Instruction>(*I)) {
-      Function* F = II->getParent()->getParent();
-      if (!F->hasGC()) {
-        F->setGC("vmkit");
-      }
-    }
-  }
-
-  for (Module::iterator I = M.begin(), E = M.end(); I != E; ++I) {
-    if (I->hasGC() && I->hasInternalLinkage()) {
-      error = true;
-      fprintf(stderr, "Method %s has static linkage but uses gc_root. "
-                      "Functions using gc_root should not have static linkage.\n",
-                      I->getName().data());
-    }
-  }
-
-  if (error) abort();
-
-  return true;
-}
-
-}

Removed: vmkit/trunk/lib/vmkit/StaticGCPrinter/Makefile
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/StaticGCPrinter/Makefile?rev=180393&view=auto
==============================================================================
--- vmkit/trunk/lib/vmkit/StaticGCPrinter/Makefile (original)
+++ vmkit/trunk/lib/vmkit/StaticGCPrinter/Makefile (removed)
@@ -1,18 +0,0 @@
-##===- lib/vmkit/StaticGCPrinter/Makefile --------------------*- Makefile -*-===##
-#
-#                            The VMKit project
-#
-# This file is distributed under the University of Illinois Open Source
-# License. See LICENSE.TXT for details.
-#
-##===----------------------------------------------------------------------===##
-
-LEVEL = ../../..
-
-include $(LEVEL)/Makefile.config
-
-LIBRARY=StaticGCPrinter
-LOADABLE_MODULE = 1
-
-include $(LEVEL)/Makefile.common
-

Removed: vmkit/trunk/lib/vmkit/StaticGCPrinter/VmkitGCPrinter.cpp
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/lib/vmkit/StaticGCPrinter/VmkitGCPrinter.cpp?rev=180393&view=auto
==============================================================================
--- vmkit/trunk/lib/vmkit/StaticGCPrinter/VmkitGCPrinter.cpp (original)
+++ vmkit/trunk/lib/vmkit/StaticGCPrinter/VmkitGCPrinter.cpp (removed)
@@ -1,382 +0,0 @@
-//===----- VmkitAOTGC.cpp - Support for Ahead of Time Compiler GC -------===//
-//
-//                            The Vmkit project
-//
-// This file is distributed under the University of Illinois Open Source
-// License. See LICENSE.TXT for details.
-//
-//===----------------------------------------------------------------------===//
-
-#include "llvm/Constants.h"
-#include "llvm/DerivedTypes.h"
-#include "llvm/Type.h"
-#include "llvm/CodeGen/GCs.h"
-#include "llvm/CodeGen/GCStrategy.h"
-#include "llvm/CodeGen/AsmPrinter.h"
-#include "llvm/CodeGen/GCMetadataPrinter.h"
-#include "llvm/CodeGen/MachineFunction.h"
-#include "llvm/CodeGen/MachineInstrBuilder.h"
-#include "llvm/Module.h"
-#include "llvm/MC/MCAsmInfo.h"
-#include "llvm/MC/MCContext.h"
-#include "llvm/MC/MCExpr.h"
-#include "llvm/MC/MCSymbol.h"
-#include "llvm/MC/MCStreamer.h"
-#include "llvm/Target/Mangler.h"
-#include "llvm/DataLayout.h"
-#include "llvm/Target/TargetInstrInfo.h"
-#include "llvm/Target/TargetLoweringObjectFile.h"
-#include "llvm/Target/TargetMachine.h"
-#include "llvm/ADT/SmallString.h"
-#include "llvm/Support/Compiler.h"
-#include "llvm/Support/ErrorHandling.h"
-#include "llvm/Support/FormattedStream.h"
-#include "llvm/Support/raw_ostream.h"
-#include <cctype>
-#include <cstdio>
-
-using namespace llvm;
-
-namespace {
-  class VmkitAOTGC : public GCStrategy {
-  public:
-    VmkitAOTGC();
-    virtual bool findCustomSafePoints(GCFunctionInfo& FI, MachineFunction& MF);
-  };
-}
-
-static GCRegistry::Add<VmkitAOTGC>
-X("vmkit", "Vmkit GC for AOT-generated functions");
-
-VmkitAOTGC::VmkitAOTGC() {
-  CustomSafePoints = true;
-  UsesMetadata = true;
-}
-
-
-static MCSymbol *InsertLabel(MachineBasicBlock &MBB, 
-                             MachineBasicBlock::iterator MI,
-                             DebugLoc DL) {
-  const TargetInstrInfo* TII = MBB.getParent()->getTarget().getInstrInfo();
-  MCSymbol *Label = MBB.getParent()->getContext().CreateTempSymbol();
-  BuildMI(MBB, MI, DL, TII->get(TargetOpcode::GC_LABEL)).addSym(Label);
-  return Label;
-}
-
-
-bool VmkitAOTGC::findCustomSafePoints(GCFunctionInfo& FI, MachineFunction &MF) {
-  for (MachineFunction::iterator BBI = MF.begin(),
-                                 BBE = MF.end(); BBI != BBE; ++BBI) {
-    for (MachineBasicBlock::iterator MI = BBI->begin(),
-                                     ME = BBI->end(); MI != ME; ++MI) {
-      if (MI->getDesc().isCall()) {
-        MachineBasicBlock::iterator RAI = MI; ++RAI;                                
-        MCSymbol* Label = InsertLabel(*MI->getParent(), RAI, MI->getDebugLoc());
-        FI.addSafePoint(GC::PostCall, Label, MI->getDebugLoc());
-      } else if (MI->getDebugLoc().getCol() == 1) {
-        MCSymbol* Label = InsertLabel(*MI->getParent(), MI, MI->getDebugLoc());
-        FI.addSafePoint(GC::Loop, Label, MI->getDebugLoc());
-      }
-    }
-  }
-  return false;
-}
-
-
-namespace {
-
-  class VmkitAOTGCMetadataPrinter : public GCMetadataPrinter {
-  public:
-    void beginAssembly(AsmPrinter &AP);
-    void finishAssembly(AsmPrinter &AP);
-  };
-
-}
-
-static GCMetadataPrinterRegistry::Add<VmkitAOTGCMetadataPrinter>
-Y("vmkit", "Vmkit GC for AOT-generated functions");
-
-void VmkitAOTGCMetadataPrinter::beginAssembly(AsmPrinter &AP) {
-}
-
-static bool isAcceptableChar(char C) {
-  if ((C < 'a' || C > 'z') &&
-      (C < 'A' || C > 'Z') &&
-      (C < '0' || C > '9') &&
-      C != '_' && C != '$' && C != '@') {
-    return false;
-  }
-  return true;
-}
-
-static char HexDigit(int V) {
-  return V < 10 ? V+'0' : V+'A'-10;
-}
-
-static void MangleLetter(SmallVectorImpl<char> &OutName, unsigned char C) {
-  OutName.push_back('_');
-  OutName.push_back(HexDigit(C >> 4));
-  OutName.push_back(HexDigit(C & 15));
-  OutName.push_back('_');
-}
-
-
-static void EmitVmkitGlobal(const Module &M, AsmPrinter &AP, const char *Id) {
-  const std::string &MId = M.getModuleIdentifier();
-
-  std::string SymName;
-  SymName += "vmkit";
-  size_t Letter = SymName.size();
-  SymName += MId;
-  SymName += "__";
-  SymName += Id;
-
-  // Capitalize the first letter of the module name.
-  SymName[Letter] = toupper(SymName[Letter]);
-
-  SmallString<128> TmpStr;
-  AP.Mang->getNameWithPrefix(TmpStr, SymName);
-
-  SmallString<128> FinalStr;
-  for (unsigned i = 0, e = TmpStr.size(); i != e; ++i) {
-    if (!isAcceptableChar(TmpStr[i])) {
-      MangleLetter(FinalStr, TmpStr[i]);
-    } else {
-      FinalStr.push_back(TmpStr[i]);
-    }
-  }
-
-  MCSymbol *Sym = AP.OutContext.GetOrCreateSymbol(FinalStr);
-
-  AP.OutStreamer.EmitSymbolAttribute(Sym, MCSA_Global);
-  AP.OutStreamer.EmitLabel(Sym);
-}
-
-static bool methodNameMatches(StringRef compiledName,
-                              ConstantDataArray* name,
-                              ConstantDataArray* type) {
-  uint32_t size = compiledName.size();
-  std::string str;
-
-  for (uint32_t i = 0; i < name->getNumElements(); ++i) {
-    ConstantInt* charInt = cast<ConstantInt>(name->getElementAsConstant(i));
-    int16_t cur = charInt->getZExtValue();
-    if (cur == '/') {
-      str += '_';
-    } else if (cur == '_') {
-      str += "_1";
-    } else if (cur == '<') {
-      str += "_0003C";
-    } else if (cur == '>') {
-      str += "_0003E";
-    } else {
-      str += (char)cur;
-    }
-  }
-
-  for (uint32_t i = 0; i < type->getNumElements(); ++i) {
-    ConstantInt* charInt = cast<ConstantInt>(type->getElementAsConstant(i));
-    int16_t cur = charInt->getZExtValue();
-    if (cur == '(') {
-      str += "__";
-    } else if (cur == '/') {
-      str += '_';
-    } else if (cur == '_') {
-      str += "_1";
-    } else if (cur == '$') {
-      str += "_00024";
-    } else if (cur == ';') {
-      str += "_2";
-    } else if (cur == '[') {
-      str += "_3";
-    } else if (cur == ')') {
-      break;
-    } else {
-      str += (char)cur;
-    }
-  }
-
-  if (str.length() > size) return false;
-  if (str.compare(compiledName) == 0) return true;
-
-  str += 'S';
-
-  if (str.compare(compiledName) == 0) return true;
-
-  return false;
-}
-
-Constant* FindMetadata(const Function& F) {
-  LLVMContext& context = F.getParent()->getContext();
-  for (Value::const_use_iterator I = F.use_begin(), E = F.use_end(); I != E; ++I) {
-    if (const Constant* C = dyn_cast<Constant>(*I)) {
-      if (PointerType* PTy = dyn_cast<PointerType>(C->getType())) {
-        if (isa<IntegerType>(PTy->getContainedType(0))) {
-          // We have found the bitcast constant that casts the method in a i8*
-          for (Value::const_use_iterator CI = C->use_begin(), CE = C->use_end(); CI != CE; ++CI) {
-            if (StructType* STy = dyn_cast<StructType>((*CI)->getType())) {
-              if (STy->getName().equals("JavaMethod")) {
-                const Constant* Method = dyn_cast<Constant>(*CI);
-                const Constant* Array = dyn_cast<Constant>(*((*CI)->use_begin()));
-                Constant* VirtualMethods = dyn_cast<Constant>(const_cast<User*>((*(Array->use_begin()))));
-                uint32_t index = 0;
-                for (; index < Array->getNumOperands(); index++) {
-                  if (Array->getOperand(index) == Method) break;
-                }
-                assert(index != Array->getNumOperands());
-                Constant* GEPs[2] = { ConstantInt::get(Type::getInt32Ty(context), 0),
-                                      ConstantInt::get(Type::getInt32Ty(context), index) };
-                return ConstantExpr::getGetElementPtr(VirtualMethods, GEPs, 2);
-              }
-            }
-          }
-        }
-      }
-    }
-  }
-
-  StringRef name = F.getName();
-  if (name.startswith("JnJVM")) {
-    // Metadata for customized methods.
-    std::string methods = name.substr(0, name.find("__"));
-    std::string methodName = name.substr(methods.rfind('_') + 1);
-    methodName = methodName.substr(0, methodName.rfind("__"));
-    methods = methods.substr(6, methods.rfind('_') - 5);
-    methods = methods + "VirtualMethods";
-    Constant* VirtualMethods = cast<Constant>(F.getParent()->getNamedValue(methods));
-    assert(VirtualMethods);
-    Constant* MethodsArray = cast<Constant>(VirtualMethods->getOperand(0));
-    for (uint32_t index = 0; index < MethodsArray->getNumOperands(); index++) {
-      Constant* method = cast<Constant>(MethodsArray->getOperand(index));
-
-      Constant* namePtr = cast<ConstantExpr>(method->getOperand(5));
-      namePtr = cast<Constant>(namePtr->getOperand(0));
-      namePtr = cast<Constant>(namePtr->getOperand(0));
-      ConstantDataArray* name = cast<ConstantDataArray>(namePtr->getOperand(1));
-
-      Constant* typePtr = cast<ConstantExpr>(method->getOperand(6));
-      typePtr = cast<Constant>(typePtr->getOperand(0));
-      typePtr = cast<Constant>(typePtr->getOperand(0));
-      ConstantDataArray* type = cast<ConstantDataArray>(typePtr->getOperand(1));
-
-      if (methodNameMatches(methodName, name, type)) {
-        Constant* GEPs[2] = { ConstantInt::get(Type::getInt32Ty(context), 0),
-                              ConstantInt::get(Type::getInt32Ty(context), index) };
-        return ConstantExpr::getGetElementPtr(VirtualMethods, GEPs, 2);
-      }
-    }
-    assert(0 && "Should have found a JavaMethod");
-  }
-  return NULL;
-}
-
-/// emitAssembly - Print the frametable. The ocaml frametable format is thus:
-///
-///   extern "C" struct align(sizeof(word_t)) {
-///     uint32_t NumDescriptors;
-///     struct align(sizeof(word_t)) {
-///       void *ReturnAddress;
-///       void *Metadata;
-///       uint16_t BytecodeIndex; 
-///       uint16_t FrameSize;
-///       uint16_t NumLiveOffsets;
-///       uint16_t LiveOffsets[NumLiveOffsets];
-///     } Descriptors[NumDescriptors];
-///   } vmkit${module}__frametable;
-///
-/// Note that this precludes programs from stack frames larger than 64K
-/// (FrameSize and LiveOffsets would overflow). FrameTablePrinter will abort if
-/// either condition is detected in a function which uses the GC.
-///
-void VmkitAOTGCMetadataPrinter::finishAssembly(AsmPrinter &AP) {
-  unsigned IntPtrSize = AP.TM.getDataLayout()->getPointerSize(0);
-
-  AP.OutStreamer.SwitchSection(AP.getObjFileLowering().getDataSection());
-
-  AP.EmitAlignment(IntPtrSize == 4 ? 2 : 3);
-  EmitVmkitGlobal(getModule(), AP, "frametable");
-  int NumMethodFrames = 0;
-  for (iterator I = begin(), IE = end(); I != IE; ++I) {
-    NumMethodFrames++;
-  }
-  AP.EmitInt32(NumMethodFrames);
-  AP.EmitAlignment(IntPtrSize == 4 ? 2 : 3);
-
-  for (iterator I = begin(), IE = end(); I != IE; ++I) {
-    GCFunctionInfo &FI = **I;
-
-    Constant* Metadata = FindMetadata(FI.getFunction());
-
-    int NumDescriptors = 0;
-    for (GCFunctionInfo::iterator J = FI.begin(), JE = FI.end(); J != JE; ++J) {
-      NumDescriptors++;
-    }
-    if (NumDescriptors >= 1<<16) {
-      // Very rude!
-      report_fatal_error(" Too much descriptor for J3 AOT GC");
-    }
-    AP.EmitInt32(NumDescriptors);
-    AP.EmitAlignment(IntPtrSize == 4 ? 2 : 3);
-
-    uint64_t FrameSize = FI.getFrameSize();
-    if (FrameSize >= 1<<16) {
-      // Very rude!
-      report_fatal_error("Function '" + FI.getFunction().getName() +
-                         "' is too large for the Vmkit AOT GC! "
-                         "Frame size " + Twine(FrameSize) + ">= 65536.\n"
-                         "(" + Twine(uintptr_t(&FI)) + ")");
-    }
-
-    AP.OutStreamer.AddComment("live roots for " +
-                              Twine(FI.getFunction().getName()));
-    AP.OutStreamer.AddBlankLine();
-
-    for (GCFunctionInfo::iterator J = FI.begin(), JE = FI.end(); J != JE; ++J) {
-      size_t LiveCount = FI.live_size(J);
-      if (LiveCount >= 1<<16) {
-        // Very rude!
-        report_fatal_error("Function '" + FI.getFunction().getName() +
-                           "' is too large for the Vmkit AOT GC! "
-                           "Live root count "+Twine(LiveCount)+" >= 65536.");
-      }
-
-      DebugLoc DL = J->Loc;
-      uint32_t sourceIndex = DL.getLine();
-
-      // Metadata
-      if (Metadata != NULL) {
-        AP.EmitGlobalConstant(Metadata);
-      } else {
-        AP.EmitInt32(0);
-        if (IntPtrSize == 8) {
-          AP.EmitInt32(0);
-        }
-      }
-
-      // Return address
-      const MCExpr* address = MCSymbolRefExpr::Create(J->Label, AP.OutStreamer.getContext());
-      if (DL.getCol() == 1) {
-        const MCExpr* one = MCConstantExpr::Create(1, AP.OutStreamer.getContext());
-        address = MCBinaryExpr::CreateAdd(address, one, AP.OutStreamer.getContext());
-      }
-
-      AP.OutStreamer.EmitValue(address, IntPtrSize, 0);
-      AP.EmitInt16(sourceIndex);
-      AP.EmitInt16(FrameSize);
-      AP.EmitInt16(LiveCount);
-
-      for (GCFunctionInfo::live_iterator K = FI.live_begin(J),
-                                         KE = FI.live_end(J); K != KE; ++K) {
-        if (K->StackOffset >= 1<<16) {
-          // Very rude!
-          report_fatal_error(
-                 "GC root stack offset is outside of fixed stack frame and out "
-                 "of range for ocaml GC!");
-        }
-        AP.EmitInt16(K->StackOffset);
-      }
-
-      AP.EmitAlignment(IntPtrSize == 4 ? 2 : 3);
-    }
-  }
-}

Modified: vmkit/trunk/tools/trainer/Makefile
URL: http://llvm.org/viewvc/llvm-project/vmkit/trunk/tools/trainer/Makefile?rev=180394&r1=180393&r2=180394&view=diff
==============================================================================
--- vmkit/trunk/tools/trainer/Makefile (original)
+++ vmkit/trunk/tools/trainer/Makefile Thu Apr 25 12:05:29 2013
@@ -30,10 +30,10 @@ generated.bc: $(PRECOMPILER) HelloWorld.
 	$(Echo) "Pre-compiling bootstrap code"
 	$(Verb) $(PRECOMPILER) -cp $$PWD HelloWorld $(J3.Flags)
 
-Precompiled.bc: HelloWorld.class $(LibDir)/StaticGCPass$(SHLIBEXT) $(LibDir)/StaticGCPrinter$(SHLIBEXT) generated.bc
+Precompiled.bc: HelloWorld.class $(PREPARE_CODE) generated.bc
 	$(Echo) "Building precompiled bootstrap code"
 	$(Verb) $(MKDIR) $(ObjDir)
-	$(Verb) $(LLC) -disable-branch-fold -disable-cfi -disable-debug-info-print -disable-fp-elim $(PRECOMPILER_FLAGS) -load=$(LibDir)/StaticGCPrinter$(SHLIBEXT) generated.bc -o $(ObjDir)/Precompiled.s
+	$(Verb) $(LLC) -disable-branch-fold -disable-cfi -disable-debug-info-print -disable-fp-elim $(PRECOMPILER_FLAGS) -load=$(PREPARE_CODE) generated.bc -o $(ObjDir)/Precompiled.s
 	$(Verb) $(CC) -c $(ObjDir)/Precompiled.s -o $(ObjDir)/Precompiled.o
 	$(Verb) $(Archive) $(LibDir)/libPrecompiled.a $(ObjDir)/Precompiled.o
 	$(Verb) $(Ranlib) $(LibDir)/libPrecompiled.a





More information about the vmkit-commits mailing list