[Mesa-dev] [PATCH] mesa: update lower_jumps tests after bug fix
Timothy Arceri
tarceri at itsqueeze.com
Wed Mar 29 09:30:19 UTC 2017
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
More information about the mesa-dev
mailing list