[pypy-svn] r8940 - pypy/dist/pypy/translator/llvm

cfbolz at codespeak.net cfbolz at codespeak.net
Mon Feb 7 01:32:43 CET 2005


Author: cfbolz
Date: Mon Feb  7 01:32:43 2005
New Revision: 8940

Modified:
   pypy/dist/pypy/translator/llvm/build_llvm_module.py
   pypy/dist/pypy/translator/llvm/genllvm.py
Log:
Added some debug output and a way to turn off LLVM-optimization.


Modified: pypy/dist/pypy/translator/llvm/build_llvm_module.py
==============================================================================
--- pypy/dist/pypy/translator/llvm/build_llvm_module.py	(original)
+++ pypy/dist/pypy/translator/llvm/build_llvm_module.py	Mon Feb  7 01:32:43 2005
@@ -14,7 +14,7 @@
 from pypy.translator.tool.buildpyxmodule import make_c_from_pyxfile
 from pypy.translator.tool import stdoutcapture
 
-debug = 0
+debug = 1
 
 class CompileError(exceptions.Exception):
     pass
@@ -26,18 +26,26 @@
 old_system = os.system
 os.system = system_trace
 
-def make_module_from_llvm(llvmfile, pyxfile):
+def make_module_from_llvm(llvmfile, pyxfile, optimize=True):
     include_dir = autopath.this_dir
     dirpath = llvmfile.dirpath()
     lastdir = path.local()
     os.chdir(str(dirpath))
     modname = pyxfile.purebasename
-    ops1 = ["llvm-as %s -f" % llvmfile,
-           "llvmc -O3 %s.bc -o _%s.o" % (llvmfile.purebasename, modname),
-           "llc _%s.o.bc -f -o _%s.s" % (modname, modname),
-           "as _%s.s -o _%s.o" % (modname, modname)]
+    ops1 = ["llvm-as %s -f -o %s.bc" % (llvmfile, llvmfile.purebasename), 
+            "llvmc -f -O3 %s.bc -o %s_optimized.o" % (llvmfile.purebasename,
+                                                      llvmfile.purebasename),
+            "llc %s_optimized.o.bc -f -o %s.s" % (llvmfile.purebasename,
+                                                   llvmfile.purebasename),
+            "as %s.s -o %s.o" % (llvmfile.purebasename, llvmfile.purebasename)]
+    if not optimize:
+        ops1 = ["llvm-as %s -f" % llvmfile,
+                "llc %s.bc -f -o %s.s" % (llvmfile.purebasename,
+                                          llvmfile.purebasename),
+                "as %s.s -o %s.o" % (llvmfile.purebasename,
+                                          llvmfile.purebasename)]
     ops2 = ["gcc -c -fPIC -I/usr/include/python %s.c" % pyxfile.purebasename,
-           "gcc -shared %s.o _%s.o -o %s.so" % (pyxfile.purebasename,
+           "gcc -shared %s.o %s.o -o %s.so" % (llvmfile.purebasename,
                                                 modname, modname)]
     try:
         if debug: print "modname", modname
@@ -46,9 +54,11 @@
         try:
             try:
                 for op in ops1:
+                    print op
                     cmdexec(op)
                 make_c_from_pyxfile(pyxfile)
                 for op in ops2:
+                    print op
                     cmdexec(op)
             finally:
                 foutput, foutput = c.done()

Modified: pypy/dist/pypy/translator/llvm/genllvm.py
==============================================================================
--- pypy/dist/pypy/translator/llvm/genllvm.py	(original)
+++ pypy/dist/pypy/translator/llvm/genllvm.py	Mon Feb  7 01:32:43 2005
@@ -34,9 +34,9 @@
 debug = 0
 
 
-def llvmcompile(transl):
+def llvmcompile(transl, optimize=True):
     gen = LLVMGenerator(transl)
-    return gen.compile()
+    return gen.compile(optimize)
 
 
 class CompileError(exceptions.Exception):
@@ -53,7 +53,7 @@
         self.llvm_reprs = {}
         self.l_entrypoint = self.get_repr(self.translator.functions[0])
 
-    def compile(self):
+    def compile(self, optimize=True):
         from pypy.tool.udir import udir
         name = self.l_entrypoint.llvmname()[1:]
         llvmfile = udir.join('%s.ll' % name)
@@ -64,7 +64,8 @@
         f = pyxfile.open('w')
         f.write(self.l_entrypoint.get_pyrex_source())
         f.close()
-        mod = build_llvm_module.make_module_from_llvm(llvmfile, pyxfile)
+        mod = build_llvm_module.make_module_from_llvm(llvmfile, pyxfile,
+                                                      optimize)
         return getattr(mod, "wrap_%s" % name)
 
     def get_global_tmp(self, used_by=None):



More information about the Pypy-commit mailing list