[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