示例#1
0
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
示例#2
0
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)
示例#3
0
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)