This change updates the tests to reflect the IR after the following bug fix.
glsl: fix lower jumps for returns when loop is inside an if commit c1096b7f1d49f33c85b1042f82ccb063f63e7c20 --- .../glsl/tests/lower_jumps/create_test_cases.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/src/compiler/glsl/tests/lower_jumps/create_test_cases.py b/src/compiler/glsl/tests/lower_jumps/create_test_cases.py index f1217b8..20f5ace 100644 --- a/src/compiler/glsl/tests/lower_jumps/create_test_cases.py +++ b/src/compiler/glsl/tests/lower_jumps/create_test_cases.py @@ -232,20 +232,27 @@ def lowered_break(): """ return lowered_break_simple() + assign_x('execute_flag', const_bool(False)) def if_execute_flag(statements): """Wrap statements in an if test so that they will only execute if execute_flag is True. """ check_sexp(statements) return [['if', ['var_ref', 'execute_flag'], statements, []]] +def if_return_flag(then_statements, else_statements): + """Wrap statements in an if test with return_flag as the condition. + """ + check_sexp(then_statements) + check_sexp(else_statements) + return [['if', ['var_ref', 'return_flag'], then_statements, else_statements]] + def if_not_return_flag(statements): """Wrap statements in an if test so that they will only execute if return_flag is False. """ check_sexp(statements) return [['if', ['var_ref', 'return_flag'], [], statements]] def final_return(): """Create the return statement that lower_jumps.cpp places at the end of a function when lowering returns. @@ -448,21 +455,24 @@ def test_lower_pulled_out_jump(): # loop gets guarded so that it only executes if the return # flag is clear. expected_sexp = make_test_case('main', 'void', ( declare_execute_flag() + declare_return_flag() + complex_if('a', lowered_return()) + if_execute_flag( loop(simple_if('b', simple_if('c', [], continue_()), lowered_return_simple()) + break_()) + - if_not_return_flag(assign_x('d', const_float(1)))) + + if_return_flag(assign_x('return_flag', const_bool(1)) + + assign_x('execute_flag', const_bool(0)), + assign_x('d', const_float(1)))) )) create_test_case(doc_string, input_sexp, expected_sexp, 'lower_pulled_out_jump', lower_main_return=True, pull_out_jumps=True) def test_lower_breaks_1(): doc_string = """If a loop contains an unconditional break at the bottom of it, it should not be lowered.""" input_sexp = make_test_case('main', 'void', ( loop(assign_x('a', const_float(1)) + break_()) @@ -579,25 +589,28 @@ def test_remove_continue_at_end_of_loop(): def test_lower_return_void_at_end_of_loop(): doc_string = """Test that a return of void at the end of a loop is properly lowered. """ input_sexp = make_test_case('main', 'void', ( loop(assign_x('a', const_float(1)) + return_()) + assign_x('b', const_float(2)) )) expected_sexp = make_test_case('main', 'void', ( + declare_execute_flag() + declare_return_flag() + loop(assign_x('a', const_float(1)) + lowered_return_simple() + break_()) + - if_not_return_flag(assign_x('b', const_float(2))) + if_return_flag(assign_x('return_flag', const_bool(1)) + + assign_x('execute_flag', const_bool(0)), + assign_x('b', const_float(2))) )) create_test_case(doc_string, input_sexp, input_sexp, 'return_void_at_end_of_loop_lower_nothing') create_test_case(doc_string, input_sexp, expected_sexp, 'return_void_at_end_of_loop_lower_return', lower_main_return=True) create_test_case(doc_string, input_sexp, expected_sexp, 'return_void_at_end_of_loop_lower_return_and_break', lower_main_return=True, lower_break=True) def test_lower_return_non_void_at_end_of_loop(): doc_string = """Test that a non-void return at the end of a loop is properly lowered. -- 2.9.3 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev