[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