hack2 / hacks / compilehook.py

def find_last_label(ops):
    for i in range(len(ops) - 1, -1, -1):
        if ops[i].name == 'label':
            return i

def print_ops(ops):
    for op in ops[find_last_label(ops):]:
        if op.name != 'debug_merge_point':
            print op


import time
def optimize(jd, type, (code, next_instr, is_profiled), ops):
    # removes the getfield_raw and friends
    """ Executed before assembler compilation
    """
    print_ops(ops)
    print
    del ops[-5:-1]
    return ops

def compile(jd, type, gkey, ops, asmadr, asmlen):
    """ Executed after assembler compilation
    """
    print_ops(ops)

def f():
    i = 0
    while i < 300000000:
        i += 1

def g():
    i = 0
    while i < 300000000:
        i += 1

import pypyjit
t0 = time.time()
f()
t1 = time.time()
pypyjit.set_optimize_hook(optimize)
pypyjit.set_compile_hook(compile)
t2 = time.time()
g()
print time.time() - t2, t1 - t0
Tip: Filter by directory path e.g. /media app.js to search for public/media/app.js.
Tip: Use camelCasing e.g. ProjME to search for ProjectModifiedEvent.java.
Tip: Filter by extension type e.g. /repo .js to search for all .js files in the /repo directory.
Tip: Separate your search with spaces e.g. /ssh pom.xml to search for src/ssh/pom.xml.
Tip: Use ↑ and ↓ arrow keys to navigate and return to view the file.
Tip: You can also navigate files with Ctrl+j (next) and Ctrl+k (previous) and view the file with Ctrl+o.
Tip: You can also navigate files with Alt+j (next) and Alt+k (previous) and view the file with Alt+o.