[pypy-commit] pypy resume-refactor: finish strings enough for test_loop_unroll to pass
fijal
noreply at buildbot.pypy.org
Wed Jan 29 16:13:59 CET 2014
Author: Maciej Fijalkowski <fijall at gmail.com>
Branch: resume-refactor
Changeset: r68993:9f414dbe4f5c
Date: 2014-01-29 15:32 +0100
http://bitbucket.org/pypy/pypy/changeset/9f414dbe4f5c/
Log: finish strings enough for test_loop_unroll to pass
diff --git a/rpython/jit/metainterp/optimizeopt/vstring.py b/rpython/jit/metainterp/optimizeopt/vstring.py
--- a/rpython/jit/metainterp/optimizeopt/vstring.py
+++ b/rpython/jit/metainterp/optimizeopt/vstring.py
@@ -443,7 +443,8 @@
index = indexbox.getint()
varg = self.getvalue(op.getarg(2))
value.setitem(index, varg)
- self.optimizer.resumebuilder.strsetitem(value, varg)
+ self.optimizer.resumebuilder.strsetitem(value, ConstInt(index),
+ varg)
return
value.ensure_nonnull()
self.emit_operation(op)
diff --git a/rpython/jit/metainterp/resoperation.py b/rpython/jit/metainterp/resoperation.py
--- a/rpython/jit/metainterp/resoperation.py
+++ b/rpython/jit/metainterp/resoperation.py
@@ -482,7 +482,7 @@
'RESUME_NEWUNICODE/1',
'RESUME_CONCATSTR/2',
'RESUME_CONCATUNICODE/2',
- 'RESUME_STRSETITEM/2',
+ 'RESUME_STRSETITEM/3',
'RESUME_SETFIELD_GC/2d',
'RESUME_SET_PC/1',
'RESUME_CLEAR/2',
diff --git a/rpython/jit/resume/backend.py b/rpython/jit/resume/backend.py
--- a/rpython/jit/resume/backend.py
+++ b/rpython/jit/resume/backend.py
@@ -74,8 +74,8 @@
def resume_setfield_gc(self, arg0, arg1, descr):
self.deps[arg0].fields[descr] = arg1
- def resume_strsetitem(self, arg0, arg1):
- xxx
+ def resume_strsetitem(self, arg0, index, arg1):
+ self.deps[arg0].l[index] = arg1
def resume_set_pc(self, pc):
pass
@@ -116,7 +116,8 @@
elif op.getopnum() == rop.RESUME_CONCATUNICODE:
self.resume_concatunicode(op.result, op.getarg(0), op.getarg(1))
elif op.getopnum() == rop.RESUME_STRSETITEM:
- self.resume_strsetitem(op.getarg(0), op.getarg(1))
+ self.resume_strsetitem(op.getarg(0), op.getarg(1).getint(),
+ op.getarg(2))
elif not op.is_resume():
pos += 1
continue
@@ -214,8 +215,13 @@
v_pos = len(self.virtuals)
self.virtuals[op.result] = v_pos
leftpos = self.get_box_pos(op.getarg(0))
- rightpos = self.get_box_pos(op.getarg(0))
+ rightpos = self.get_box_pos(op.getarg(1))
self.builder.resume_concatunicode(v_pos, leftpos, rightpos)
+ elif op.getopnum() == rop.RESUME_STRSETITEM:
+ v_pos = self.virtuals[op.getarg(0)]
+ index = op.getarg(1).getint()
+ valpos = self.get_box_pos(op.getarg(2))
+ self.builder.resume_strsetitem(v_pos, index, valpos)
else:
raise Exception("strange operation")
diff --git a/rpython/jit/resume/optimizer.py b/rpython/jit/resume/optimizer.py
--- a/rpython/jit/resume/optimizer.py
+++ b/rpython/jit/resume/optimizer.py
@@ -77,10 +77,10 @@
op = ResOperation(mode.RESUME_CONCAT, [leftbox, rightbox], newbox)
self.opt._newoperations.append(op)
- def strsetitem(self, vstring, varg):
+ def strsetitem(self, vstring, indexbox, varg):
argbox = varg.get_resume_box()
op = ResOperation(rop.RESUME_STRSETITEM, [vstring.get_resume_box(),
- argbox], None)
+ indexbox, argbox], None)
self.opt._newoperations.append(op)
def setfield(self, box, fieldbox, descr):
More information about the pypy-commit
mailing list