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

ericvrp at codespeak.net ericvrp at codespeak.net
Mon Aug 29 20:41:51 CEST 2005


Author: ericvrp
Date: Mon Aug 29 20:41:49 2005
New Revision: 17065

Modified:
   pypy/dist/pypy/translator/llvm/arraynode.py
   pypy/dist/pypy/translator/llvm/build_llvm_module.py
   pypy/dist/pypy/translator/llvm/database.py
   pypy/dist/pypy/translator/llvm/opwriter.py
   pypy/dist/pypy/translator/llvm/structnode.py
   pypy/dist/pypy/translator/llvm/varsize.py
Log:
Refactoring/simplification so lltype..._is_atomic is shared by pypy-c and pypy-llvm.


Modified: pypy/dist/pypy/translator/llvm/arraynode.py
==============================================================================
--- pypy/dist/pypy/translator/llvm/arraynode.py	(original)
+++ pypy/dist/pypy/translator/llvm/arraynode.py	Mon Aug 29 20:41:49 2005
@@ -38,14 +38,6 @@
     def setup(self):
         self.db.prepare_type(self.arraytype)
 
-    def is_atomic(self):
-        if isinstance(self.arraytype, lltype.Primitive):
-            return True
-        elif isinstance(self.arraytype, lltype.Ptr):
-            return False
-        else:
-            return self.db.is_atomic(self.arraytype)
-            
     # ______________________________________________________________________
     # entry points from genllvm
     #
@@ -62,8 +54,7 @@
         log.writeimpl(self.ref)
         varsize.write_constructor(self.db, codewriter, self.ref, 
                                   self.constructor_decl,
-                                  self.array,
-                                  atomicmalloc=self.is_atomic())
+                                  self.array)
 
 
 class VoidArrayTypeNode(LLVMNode):
@@ -71,15 +62,13 @@
     def __init__(self, db, array):
         assert isinstance(array, lltype.Array)
         self.db = db
+        self.array = array
         self.ref = "%arraytype.Void"
 
     def writedatatypedecl(self, codewriter):
         td = "%s = type { %s }" % (self.ref, self.db.get_machine_word())
         codewriter.append(td)
         
-    def is_atomic(self):
-        return True
-
 class ArrayNode(ConstantLLVMNode):
     """ An arraynode.  Elements can be
     a primitive,

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 Aug 29 20:41:49 2005
@@ -31,6 +31,7 @@
     "-simplifycfg",
     ]))
 
+# XXX: TODO: refactoring: use gccas to populate this list
 # suggested by: gccas /dev/null -o /dev/null -debug-pass=Arguments
 OPTIMIZATION_SWITCHES = (" ".join([
     "-verify -lowersetjmp -funcresolve -raiseallocs -simplifycfg -mem2reg -globalopt -globaldce -ipconstprop -deadargelim -instcombine -simplifycfg -prune-eh -inline -simplify-libcalls -argpromotion -raise -tailduplicate -simplifycfg -scalarrepl -instcombine -break-crit-edges -condprop -tailcallelim -simplifycfg -reassociate -loopsimplify -licm -instcombine -indvars -loop-unroll -instcombine -load-vn -gcse -sccp -instcombine -break-crit-edges -condprop -dse -mergereturn -adce -simplifycfg -deadtypeelim -constmerge -verify"
@@ -96,7 +97,8 @@
         #this special case for x86-64 (called ia64 in llvm) can go as soon as llc supports ia64 assembly output!
         cmds.append("llc %s %s.bc -march=c -f -o %s.c" % (EXCEPTIONS_SWITCHES, b, b))
         if exe_name:
-            cmds.append("gcc %s.c -c -O2 -fomit-frame-pointer" % (b,))
+            #XXX TODO: use CFLAGS when available
+            cmds.append("gcc %s.c -c -march=pentium4 -O2 -fomit-frame-pointer" % (b,))
             cmds.append("gcc %s.o %s -lm -ldl -o %s" % (b, gc_libs, exe_name))
         source_files.append("%s.c" % b)
 

Modified: pypy/dist/pypy/translator/llvm/database.py
==============================================================================
--- pypy/dist/pypy/translator/llvm/database.py	(original)
+++ pypy/dist/pypy/translator/llvm/database.py	Mon Aug 29 20:41:49 2005
@@ -363,9 +363,6 @@
                     return True
         return False
 
-    def is_atomic(self, value):
-        return self.obj2node[value].is_atomic()
-
     def get_childref(self, parent, child):
         node = self.obj2node[parent]
         return node.get_childref(child)

Modified: pypy/dist/pypy/translator/llvm/opwriter.py
==============================================================================
--- pypy/dist/pypy/translator/llvm/opwriter.py	(original)
+++ pypy/dist/pypy/translator/llvm/opwriter.py	Mon Aug 29 20:41:49 2005
@@ -406,8 +406,7 @@
         targetvar = self.db.repr_arg(op.result) 
         
         type_ = self.db.repr_type(arg_type)
-        atomic = self.db.is_atomic(arg_type)
-        self.codewriter.malloc(targetvar, type_, atomic=atomic)
+        self.codewriter.malloc(targetvar, type_, atomic=arg_type._is_atomic())
 
     def malloc_varsize(self, op):
         arg_type = op.args[0].value

Modified: pypy/dist/pypy/translator/llvm/structnode.py
==============================================================================
--- pypy/dist/pypy/translator/llvm/structnode.py	(original)
+++ pypy/dist/pypy/translator/llvm/structnode.py	Mon Aug 29 20:41:49 2005
@@ -28,15 +28,6 @@
         for field in self._fields():
             self.db.prepare_type(field)
 
-    def is_atomic(self):
-        for f in self._fields():
-            if isinstance(f, lltype.Ptr):
-                return False
-
-            if not isinstance(f, lltype.Primitive):
-                return self.db.is_atomic(f)
-
-        return True
     # ______________________________________________________________________
     # main entry points from genllvm 
 
@@ -83,8 +74,7 @@
                                   self.ref,
                                   self.constructor_decl,
                                   current, 
-                                  indices_to_array,
-                                  atomicmalloc=self.is_atomic())
+                                  indices_to_array)
         
 class StructNode(ConstantLLVMNode):
     """ A struct constant.  Can simply contain

Modified: pypy/dist/pypy/translator/llvm/varsize.py
==============================================================================
--- pypy/dist/pypy/translator/llvm/varsize.py	(original)
+++ pypy/dist/pypy/translator/llvm/varsize.py	Mon Aug 29 20:41:49 2005
@@ -1,8 +1,8 @@
 from pypy.rpython.rstr import STR
 
 def write_constructor(db, codewriter, ref, constructor_decl, ARRAY, 
-                      indices_to_array=(), atomicmalloc=False): 
-    
+                      indices_to_array=()): 
+
     #varsized arrays and structs look like this: 
     #Array: {int length , elemtype*}
     #Struct: {...., Array}
@@ -23,7 +23,7 @@
     elemindices = list(indices_to_array) + [("uint", 1), (lentype, "%actuallen")]
     codewriter.getelementptr("%size", ref + "*", "null", *elemindices) 
     codewriter.cast("%usize", elemtype + "*", "%size", uword)
-    codewriter.malloc("%ptr", "sbyte", "%usize", atomic=atomicmalloc)
+    codewriter.malloc("%ptr", "sbyte", "%usize", atomic=ARRAY._is_atomic())
     codewriter.cast("%result", "sbyte*", "%ptr", ref + "*")
 
     #if ARRAY is STR.chars:



More information about the Pypy-commit mailing list