Skip to content

Commit e9a14ef

Browse files
Add test
1 parent e3660f3 commit e9a14ef

File tree

2 files changed

+33
-14
lines changed

2 files changed

+33
-14
lines changed

Lib/test/test_generated_cases.py

Lines changed: 29 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -59,14 +59,14 @@ class TestEffects(unittest.TestCase):
5959
def test_effect_sizes(self):
6060
stack = Stack()
6161
inputs = [
62-
x := StackItem("x", None, "1"),
63-
y := StackItem("y", None, "oparg"),
64-
z := StackItem("z", None, "oparg*2"),
62+
x := StackItem("x", None, "1", []),
63+
y := StackItem("y", None, "oparg", []),
64+
z := StackItem("z", None, "oparg*2", []),
6565
]
6666
outputs = [
67-
StackItem("x", None, "1"),
68-
StackItem("b", None, "oparg*4"),
69-
StackItem("c", None, "1"),
67+
StackItem("x", None, "1", []),
68+
StackItem("b", None, "oparg*4", []),
69+
StackItem("c", None, "1", []),
7070
]
7171
null = CWriter.null()
7272
stack.pop(z, null)
@@ -2253,5 +2253,28 @@ def test_validate_uop_unused_size_mismatch(self):
22532253
"Inputs must have equal sizes"):
22542254
self.run_cases_test(input, input2, output)
22552255

2256+
def test_uop_type_attribute_input(self):
2257+
input = """
2258+
op(OP, (foo -- )) {
2259+
}
2260+
"""
2261+
input2 = """
2262+
op(OP, (type(&PyLong_Type) foo -- )) {
2263+
(void)foo;
2264+
}
2265+
"""
2266+
output = """
2267+
case OP: {
2268+
JitOptSymbol *foo;
2269+
foo = stack_pointer[-1];
2270+
(void)foo;
2271+
assert(sym_matches_type(foo, &PyLong_Type));
2272+
stack_pointer += -1;
2273+
assert(WITHIN_STACK_BOUNDS());
2274+
break;
2275+
}
2276+
"""
2277+
self.run_cases_test(input, input2, output)
2278+
22562279
if __name__ == "__main__":
22572280
unittest.main()

Tools/cases_generator/optimizer_generator.py

Lines changed: 4 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -154,11 +154,6 @@ def get_type(item: StackItem) -> str | None:
154154
return attribute.expr
155155
return None
156156

157-
def emit_sym_set_type_for_stack_effect(emitter: Emitter, items: list[StackItem]) -> None:
158-
for var in items:
159-
typ = get_type(var)
160-
if typ is not None:
161-
emitter.emit(f"sym_set_type({var.name}, {typ});\n")
162157

163158

164159
def write_uop(
@@ -198,9 +193,10 @@ def write_uop(
198193
_, storage = emitter.emit_tokens(override, storage, None, False)
199194
# Emit type effects.
200195
out.start_line()
201-
emit_sym_set_type_for_stack_effect(emitter, override.stack.inputs)
202-
emit_sym_set_type_for_stack_effect(emitter, override.stack.outputs)
203-
out.start_line()
196+
for var in override.stack.inputs:
197+
typ = get_type(var)
198+
if typ is not None:
199+
emitter.emit(f"assert(sym_matches_type({var.name}, {typ}));\n")
204200
storage.flush(out)
205201
else:
206202
emit_default(out, uop, stack)

0 commit comments

Comments
 (0)