[pypy-commit] pypy ppc-vsx-support: renamed costmodel class to generic one (it is used also for ppc, not only for x86)
plan_rich
pypy.commits at gmail.com
Mon Sep 12 08:57:47 EDT 2016
Author: Richard Plangger <planrichi at gmail.com>
Branch: ppc-vsx-support
Changeset: r87040:15528006be4d
Date: 2016-09-12 14:57 +0200
http://bitbucket.org/pypy/pypy/changeset/15528006be4d/
Log: renamed costmodel class to generic one (it is used also for ppc, not
only for x86)
diff --git a/rpython/jit/metainterp/optimizeopt/guard.py b/rpython/jit/metainterp/optimizeopt/guard.py
--- a/rpython/jit/metainterp/optimizeopt/guard.py
+++ b/rpython/jit/metainterp/optimizeopt/guard.py
@@ -268,6 +268,7 @@
if user_code:
self.eliminate_array_bound_checks(info, loop)
+
def emit_operation(self, op):
self.renamer.rename(op)
self._newoperations.append(op)
diff --git a/rpython/jit/metainterp/optimizeopt/schedule.py b/rpython/jit/metainterp/optimizeopt/schedule.py
--- a/rpython/jit/metainterp/optimizeopt/schedule.py
+++ b/rpython/jit/metainterp/optimizeopt/schedule.py
@@ -58,11 +58,13 @@
del needs_resolving[op]
if op in indexvars:
indexvar = indexvars[op]
+ last = None
for operation in indexvar.get_operations():
self.append_to_oplist(operation)
last = operation
- indexvars[last] = indexvar
- self.renamer.start_renaming(op, last)
+ if last:
+ indexvars[last] = indexvar
+ self.renamer.start_renaming(op, last)
else:
self.resolve_delayed(needs_resolving, delayed, op)
self.append_to_oplist(op)
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_costmodel.py b/rpython/jit/metainterp/optimizeopt/test/test_costmodel.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_costmodel.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_costmodel.py
@@ -2,7 +2,7 @@
from rpython.jit.metainterp.history import TargetToken, JitCellToken, TreeLoop
from rpython.jit.metainterp.optimizeopt.util import equaloplists
-from rpython.jit.metainterp.optimizeopt.vector import (Pack, X86_CostModel,
+from rpython.jit.metainterp.optimizeopt.vector import (Pack, GenericCostModel,
NotAProfitableLoop, VectorizingOptimizer, CostModel)
from rpython.jit.metainterp.optimizeopt.schedule import VecScheduleState
from rpython.jit.metainterp.optimizeopt.dependency import Node, DependencyGraph
@@ -101,7 +101,7 @@
print "pack: \n ",
print '\n '.join([str(op.getoperation()) for op in pack.operations])
print
- costmodel = FakeCostModel(X86_CostModel(self.cpu, 0))
+ costmodel = FakeCostModel(GenericCostModel(self.cpu, 0))
costmodel.reset_savings()
state = VecScheduleState(graph, opt.packset, self.cpu, costmodel)
opt.schedule(state)
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_schedule.py b/rpython/jit/metainterp/optimizeopt/test/test_schedule.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_schedule.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_schedule.py
@@ -4,7 +4,7 @@
from rpython.jit.metainterp.optimizeopt.util import equaloplists
from rpython.jit.metainterp.optimizeopt.renamer import Renamer
from rpython.jit.metainterp.optimizeopt.vector import (VecScheduleState,
- Pack, Pair, NotAProfitableLoop, VectorizingOptimizer, X86_CostModel,
+ Pack, Pair, NotAProfitableLoop, VectorizingOptimizer, GenericCostModel,
PackSet)
from rpython.jit.backend.llsupport.vector_ext import VectorExt
from rpython.jit.metainterp.optimizeopt.dependency import Node, DependencyGraph
@@ -43,7 +43,7 @@
def schedule(self, loop, packs, vec_reg_size=16,
prepend_invariant=False, overwrite_funcs=None):
- cm = X86_CostModel(self.cpu, 0)
+ cm = GenericCostModel(self.cpu, 0)
cm.profitable = lambda: True
pairs = []
for pack in packs:
diff --git a/rpython/jit/metainterp/optimizeopt/test/test_vecopt.py b/rpython/jit/metainterp/optimizeopt/test/test_vecopt.py
--- a/rpython/jit/metainterp/optimizeopt/test/test_vecopt.py
+++ b/rpython/jit/metainterp/optimizeopt/test/test_vecopt.py
@@ -13,7 +13,7 @@
from rpython.jit.metainterp.optimizeopt.dependency import DependencyGraph
from rpython.jit.metainterp.optimizeopt.vector import (VectorizingOptimizer,
MemoryRef, isomorphic, Pair, NotAVectorizeableLoop, VectorLoop,
- NotAProfitableLoop, GuardStrengthenOpt, CostModel, X86_CostModel,
+ NotAProfitableLoop, GuardStrengthenOpt, CostModel, GenericCostModel,
PackSet, optimize_vector)
from rpython.jit.metainterp.optimizeopt.schedule import (Scheduler,
SchedulerState, VecScheduleState, Pack)
@@ -174,6 +174,14 @@
if with_guard_opt:
gso = GuardStrengthenOpt(graph.index_vars)
gso.propagate_all_forward(info, loop)
+ # re-schedule
+ #vsize = self.cpu.vector_ext.vec_size()
+ #graph = DependencyGraph(loop)
+ #state = VecScheduleState(graph, PackSet(vsize), self.cpu, costmodel)
+ #state.prepare()
+ #scheduler = Scheduler()
+ #scheduler.walk_and_emit(state)
+ #state.post_schedule()
return opt
def vectorize(self, loop, unroll_factor = -1):
@@ -183,13 +191,23 @@
opt.find_adjacent_memory_refs(graph)
opt.extend_packset()
opt.combine_packset()
- costmodel = X86_CostModel(self.cpu, 0)
+ costmodel = GenericCostModel(self.cpu, 0)
state = VecScheduleState(graph, opt.packset, self.cpu, costmodel)
opt.schedule(state)
if not costmodel.profitable():
raise NotAProfitableLoop()
gso = GuardStrengthenOpt(graph.index_vars)
gso.propagate_all_forward(info, loop)
+ #
+ # re-schedule
+ #vsize = self.cpu.vector_ext.vec_size()
+ #graph = DependencyGraph(loop)
+ #state = VecScheduleState(graph, PackSet(vsize), self.cpu, costmodel)
+ #state.prepare()
+ #scheduler = Scheduler()
+ #scheduler.walk_and_emit(state)
+ #state.post_schedule()
+ #
oplist = loop.operations
loop.operations = loop.prefix[:]
if loop.prefix_label:
diff --git a/rpython/jit/metainterp/optimizeopt/vector.py b/rpython/jit/metainterp/optimizeopt/vector.py
--- a/rpython/jit/metainterp/optimizeopt/vector.py
+++ b/rpython/jit/metainterp/optimizeopt/vector.py
@@ -133,9 +133,7 @@
#
start = time.clock()
opt = VectorizingOptimizer(metainterp_sd, jitdriver_sd, warmstate.vec_cost)
- index_vars = opt.run_optimization(metainterp_sd, info, loop)
- gso = GuardStrengthenOpt(index_vars)
- gso.propagate_all_forward(info, loop, user_code)
+ opt.run_optimization(metainterp_sd, info, loop)
end = time.clock()
#
metainterp_sd.profiler.count(Counters.OPT_VECTORIZED)
@@ -254,13 +252,23 @@
self.find_adjacent_memory_refs(graph)
self.extend_packset()
self.combine_packset()
- # TODO move cost model to CPU
- costmodel = X86_CostModel(self.cpu, self.cost_threshold)
+ costmodel = GenericCostModel(self.cpu, self.cost_threshold)
state = VecScheduleState(graph, self.packset, self.cpu, costmodel)
self.schedule(state)
if not state.profitable():
raise NotAProfitableLoop
- return graph.index_vars
+ gso = GuardStrengthenOpt(graph.index_vars)
+ gso.propagate_all_forward(info, loop, user_code)
+
+ # re-schedule the trace -> removes index operations
+ # work in progress
+ #graph = DependencyGraph(loop)
+ #costmodel = GenericCostModel(self.cpu, self.cost_threshold)
+ #state = VecScheduleState(graph, PackSet(vsize), self.cpu, costmodel)
+ #state.prepare()
+ #scheduler = Scheduler()
+ #scheduler.walk_and_emit(state)
+ #state.post_schedule()
def unroll_loop_iterations(self, loop, unroll_count):
""" Unroll the loop X times. unroll_count + 1 = unroll_factor """
@@ -600,7 +608,7 @@
def profitable(self):
return self.savings >= 0
-class X86_CostModel(CostModel):
+class GenericCostModel(CostModel):
def record_pack_savings(self, pack, times):
cost, benefit_factor = (1,1)
node = pack.operations[0]
More information about the pypy-commit
mailing list