def test_replace_regnames_by_tmp_names(): ''' Test name mangling in code generator. ''' from blip.code.BlipCompiler import Codegenerator codegen = Codegenerator(Compiler()) ignore = ['in@0'] code = [ ('mov', None, 'a@1', 'in@0'), ('imm', None, 'b@2', 3), ('cmp', None, 'b@2', 'a@1'), ('sub', None, 'a@2', 'in@0', 'a@1'), ('mov', None, 'c@1', 'west'), ('mov', None, 'out', 'c@1'), ('mov', None, 'get2D___return', 'east'), ('mov', None, 'c@3', 'get2D___return') ] expect_res = [ ('mov', None, 'cg_tmp_1@0', 'in@0'), ('imm', None, 'cg_tmp_2@0', 3), ('cmp', None, 'cg_tmp_2@0', 'cg_tmp_1@0'), ('sub', None, 'cg_tmp_3@0', 'in@0', 'cg_tmp_1@0'), ('mov', None, 'cg_tmp_4@0', 'west'), ('mov', None, 'out', 'cg_tmp_4@0'), ('mov', None, 'cg_tmp_5@0', 'east'), ('mov', None, 'cg_tmp_6@0', 'cg_tmp_5@0') ] test_res, _ = codegen.replace_regnames_by_tmp_names(code, ignore) assert expect_res == test_res
def test_jmp_codegen(): from blip.code.BlipCompiler import NamedValue, JmpValue, Codegenerator, Comparison kernelObject = KernelObject('test') kernelObject.values = [\ (NamedValue('cmp', seq_value=True), Comparison(NamedValue('x', seq_value=True), 'Gt', NamedValue('y', seq_value=True))), (NamedValue('tmp', seq_value=True), JmpValue(NamedValue('cmp'), NamedValue('for_3'))) ] codegen = Codegenerator(Compiler()) kernelObject = codegen.gen_code(kernelObject) code = [InstrAdapter(x) for x in kernelObject.code] pattern = ''' xcmp x, y xjmp {GT} for_3 ''' assert match_code(code, pattern)
def test_phi_codegen(): from blip.code.BlipCompiler import NamedValue, PhiValue, Codegenerator, Comparison kernelObject = KernelObject('test') kernelObject.values = [\ (NamedValue('cmp'), Comparison(NamedValue('x'), 'Gt', NamedValue('y'))), (NamedValue('z'), PhiValue(NamedValue('cmp'), NamedValue('x'), NamedValue('y'))) ] codegen = Codegenerator(Compiler()) kernelObject = codegen.gen_code(kernelObject) code = [InstrAdapter(x) for x in kernelObject.code] pattern = ''' cmp x, y phi {GT} z, x, y ''' assert match_code(code, pattern)