[macruby-changes] [3065] MacRuby/trunk

source_changes at macosforge.org source_changes at macosforge.org
Mon Nov 30 18:42:59 PST 2009


Revision: 3065
          http://trac.macosforge.org/projects/ruby/changeset/3065
Author:   lsansonetti at apple.com
Date:     2009-11-30 18:42:59 -0800 (Mon, 30 Nov 2009)
Log Message:
-----------
prepare MacRuby for another LLVM transition

Modified Paths:
--------------
    MacRuby/trunk/compiler.cpp
    MacRuby/trunk/rakelib/builder.rb
    MacRuby/trunk/vm.cpp

Modified: MacRuby/trunk/compiler.cpp
===================================================================
--- MacRuby/trunk/compiler.cpp	2009-11-30 21:04:26 UTC (rev 3064)
+++ MacRuby/trunk/compiler.cpp	2009-12-01 02:42:59 UTC (rev 3065)
@@ -1116,7 +1116,11 @@
 
     Instruction *slot_insn = dyn_cast<Instruction>(slot);
     if (slot_insn != NULL) {
+#if LLVM_TOT
+	Instruction *insn = slot_insn->clone();
+#else
 	Instruction *insn = slot_insn->clone(context);
+#endif
 	BasicBlock::InstListType &list = bb->getInstList();
 	list.insert(list.end(), insn);
 	return insn;
@@ -1849,12 +1853,17 @@
 	    Intrinsic::eh_exception);
     Value *eh_ptr = CallInst::Create(eh_exception_f, "", bb);
 
-#if __LP64__
+#if LLVM_TOT
     Function *eh_selector_f = Intrinsic::getDeclaration(module,
+	    Intrinsic::eh_selector);
+#else
+# if __LP64__
+     Function *eh_selector_f = Intrinsic::getDeclaration(module,
 	    Intrinsic::eh_selector_i64);
-#else
+# else
     Function *eh_selector_f = Intrinsic::getDeclaration(module,
 	    Intrinsic::eh_selector_i32);
+# endif
 #endif
 
     std::vector<Value *> params;
@@ -1882,12 +1891,17 @@
 
     if (eh_type != typeid(void)) {
 	// TODO: this doesn't work yet, the type id must be a GlobalVariable...
-#if __LP64__
+#if LLVM_TOT
 	Function *eh_typeid_for_f = Intrinsic::getDeclaration(module,
-		Intrinsic::eh_typeid_for_i64);
+		Intrinsic::eh_typeid_for);
 #else
+# if __LP64__
 	Function *eh_typeid_for_f = Intrinsic::getDeclaration(module,
+		Intrinsic::eh_typeid_for_i64);
+# else
+	Function *eh_typeid_for_f = Intrinsic::getDeclaration(module,
 		Intrinsic::eh_typeid_for_i32);
+# endif
 #endif
 	std::vector<Value *> params;
 	params.push_back(compile_const_pointer((void *)&eh_type));
@@ -2943,7 +2957,11 @@
 
 	    Instruction *slot_insn = dyn_cast<Instruction>(ivar_slot);
 	    if (slot_insn != NULL) {
+#if LLVM_TOT
+		Instruction *insn = slot_insn->clone();
+#else
 		Instruction *insn = slot_insn->clone(context);
+#endif
 		list.insert(list_iter, insn);
 		params.push_back(insn);
 	    }
@@ -5711,13 +5729,17 @@
 	list.insert(list.begin(), load);
     }
 
+    Function *ivarSlotAlloc = cast<Function>(module->getOrInsertFunction(
+		"rb_vm_ivar_slot_allocate",
+		Int32PtrTy, NULL));
+
     for (std::vector<GlobalVariable *>::iterator i = ivar_slots.begin();
 	 i != ivar_slots.end();
 	 ++i) {
 
 	GlobalVariable *gvar = *i;
 
-	Instruction *call = new MallocInst(Int32Ty, "");
+	Instruction *call = CallInst::Create(ivarSlotAlloc, "");
 	Instruction *assign1 =
 	    new StoreInst(ConstantInt::getSigned(Int32Ty, -1), call, "");
 	Instruction *assign2 = new StoreInst(call, gvar, "");

Modified: MacRuby/trunk/rakelib/builder.rb
===================================================================
--- MacRuby/trunk/rakelib/builder.rb	2009-11-30 21:04:26 UTC (rev 3064)
+++ MacRuby/trunk/rakelib/builder.rb	2009-12-01 02:42:59 UTC (rev 3065)
@@ -92,7 +92,7 @@
 CFLAGS = "-I. -I./include -I./onig -I/usr/include/libxml2 #{ARCHFLAGS} -fno-common -pipe -O3 -g -Wall -fexceptions"
 CFLAGS << " -Wno-parentheses -Wno-deprecated-declarations -Werror" if NO_WARN_BUILD
 OBJC_CFLAGS = CFLAGS + " -fobjc-gc-only"
-CXXFLAGS = `#{LLVM_CONFIG} --cxxflags #{LLVM_MODULES}`.strip
+CXXFLAGS = `#{LLVM_CONFIG} --cxxflags #{LLVM_MODULES}`.sub(/-DNDEBUG/, '').strip
 CXXFLAGS << " -I. -I./include -g -Wall #{ARCHFLAGS}"
 CXXFLAGS << " -Wno-parentheses -Wno-deprecated-declarations -Werror" if NO_WARN_BUILD
 LDFLAGS = `#{LLVM_CONFIG} --ldflags --libs #{LLVM_MODULES}`.strip.gsub(/\n/, '')
@@ -116,7 +116,7 @@
 
 OBJS_CFLAGS = {
   # Make sure everything gets inlined properly + compile as Objective-C++.
-  'dispatcher' => '-Winline --param inline-unit-growth=10000 --param large-function-growth=10000 -x objective-c++'
+  'dispatcher' => '--param inline-unit-growth=10000 --param large-function-growth=10000 -x objective-c++'
 }
 
 class Builder

Modified: MacRuby/trunk/vm.cpp
===================================================================
--- MacRuby/trunk/vm.cpp	2009-11-30 21:04:26 UTC (rev 3064)
+++ MacRuby/trunk/vm.cpp	2009-12-01 02:42:59 UTC (rev 3065)
@@ -29,6 +29,9 @@
 #include <llvm/Support/raw_ostream.h>
 #include <llvm/Intrinsics.h>
 #include <llvm/Bitcode/ReaderWriter.h>
+#if LLVM_TOT
+# include <llvm/LLVMContext.h>
+#endif
 using namespace llvm;
 
 #if ROXOR_COMPILER_DEBUG
@@ -174,9 +177,19 @@
 			FunctionEnd));
 	}
 
+#if LLVM_TOT
+	void deallocateFunctionBody(void *data) {
+	    mm->deallocateFunctionBody(data);
+	}
+
+	void deallocateExceptionTable(void *data) {
+	    mm->deallocateExceptionTable(data);
+	}
+#else
 	void deallocateMemForFunction(const Function *F) {
 	    mm->deallocateMemForFunction(F);
 	}
+#endif
 
 	uint8_t* startExceptionTable(const Function* F, 
 		uintptr_t &ActualSize) {
@@ -1304,6 +1317,13 @@
 }
 
 extern "C"
+int *
+rb_vm_ivar_slot_allocate(void)
+{
+    return (int *)malloc(sizeof(int));
+}
+
+extern "C"
 VALUE
 rb_vm_ivar_get(VALUE obj, ID name, int *slot_cache)
 {
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/macruby-changes/attachments/20091130/42bdbf04/attachment-0001.html>


More information about the macruby-changes mailing list