def test_peephole_twoconstant_sources(): src = ''' @kernel def main(): a = 1 b = 12 c = a + b d = b - a e = a | b a = -2 b = 3 f = b & a g = a * b ''' compiler = Compiler() main_object = compiler.compile(src)[0] main_object = compiler.opt_peephole(main_object) code = [InstrAdapter(x) for x in main_object.code] pattern = ''' imm a@0,1 imm b@0,12 imm c@0,13 imm d@0,11 imm e@0,13 imm a@1,-2 imm b@1,3 imm f@0,2 imm g@0,-6 '''.strip() assert match_code(code, pattern)
def test_peephole_addorsub_zero(): ''' Test if an addition/subtraction with a zero operand is converted into a mov instr. ''' src = ''' @kernel def main(a): b = a | 0 c = a + 0 d = a - 0 e = 0 - a # unoptimised case f = 4 g = 3 h = f + g i = f - g ''' compiler = Compiler() main_object = compiler.compile(src)[0] main_object = compiler.opt_peephole(main_object) code = [InstrAdapter(x) for x in main_object.code] pattern = ''' imm tmp_0@0,0 mov b@0,a@0 imm tmp_1@0,0 mov c@0,a@0 imm tmp_2@0,0 mov d@0,a@0 imm tmp_3@0,0 sub e@0,tmp_3@0,a@0 imm f@0,4 imm g@0,3 imm h@0,7 imm i@0,1 '''.strip() assert match_code(code, pattern)