From 346852c8b49fb7dbf85d34330c09d8e15ea961a2 Mon Sep 17 00:00:00 2001 From: Dong-hee Na Date: Sun, 16 Jul 2023 03:43:42 +0000 Subject: [PATCH 1/5] gh-106797: Reduce warning logs from Python/generated_cases.c.h --- Include/internal/pycore_opcode_metadata.h | 10 +++++----- Python/generated_cases.c.h | 20 ++++++++++---------- Tools/cases_generator/generate_cases.py | 7 ++++++- 3 files changed, 21 insertions(+), 16 deletions(-) diff --git a/Include/internal/pycore_opcode_metadata.h b/Include/internal/pycore_opcode_metadata.h index 8373f56653b1c7..3b2eab23e092ff 100644 --- a/Include/internal/pycore_opcode_metadata.h +++ b/Include/internal/pycore_opcode_metadata.h @@ -839,15 +839,15 @@ _PyOpcode_num_pushed(int opcode, int oparg, bool jump) { case PUSH_EXC_INFO: return 2; case LOAD_ATTR_METHOD_WITH_VALUES: - return (1 ? 1 : 0) + 1; + return 1 + 1; case LOAD_ATTR_METHOD_NO_DICT: - return (1 ? 1 : 0) + 1; + return 1 + 1; case LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES: - return (0 ? 1 : 0) + 1; + return 0 + 1; case LOAD_ATTR_NONDESCRIPTOR_NO_DICT: - return (0 ? 1 : 0) + 1; + return 0 + 1; case LOAD_ATTR_METHOD_LAZY_DICT: - return (1 ? 1 : 0) + 1; + return 1 + 1; case KW_NAMES: return 0; case INSTRUMENTED_CALL: diff --git a/Python/generated_cases.c.h b/Python/generated_cases.c.h index 68531dc074769e..6aa7e5a1aa1992 100644 --- a/Python/generated_cases.c.h +++ b/Python/generated_cases.c.h @@ -3360,9 +3360,9 @@ res2 = Py_NewRef(descr); assert(_PyType_HasFeature(Py_TYPE(res2), Py_TPFLAGS_METHOD_DESCRIPTOR)); res = self; - STACK_GROW((1 ? 1 : 0)); + STACK_GROW(1); stack_pointer[-1] = res; - if (1) { stack_pointer[-(1 + (1 ? 1 : 0))] = res2; } + if (1) { stack_pointer[-(1 + 1)] = res2; } next_instr += 9; DISPATCH(); } @@ -3382,9 +3382,9 @@ assert(_PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_METHOD_DESCRIPTOR)); res2 = Py_NewRef(descr); res = self; - STACK_GROW((1 ? 1 : 0)); + STACK_GROW(1); stack_pointer[-1] = res; - if (1) { stack_pointer[-(1 + (1 ? 1 : 0))] = res2; } + if (1) { stack_pointer[-(1 + 1)] = res2; } next_instr += 9; DISPATCH(); } @@ -3410,9 +3410,9 @@ assert(descr != NULL); Py_DECREF(self); res = Py_NewRef(descr); - STACK_GROW((0 ? 1 : 0)); + STACK_GROW(0); stack_pointer[-1] = res; - if (0) { stack_pointer[-(1 + (0 ? 1 : 0))] = res2; } + if (0) { stack_pointer[-(1 + 0)] = res2; } next_instr += 9; DISPATCH(); } @@ -3432,9 +3432,9 @@ assert(descr != NULL); Py_DECREF(self); res = Py_NewRef(descr); - STACK_GROW((0 ? 1 : 0)); + STACK_GROW(0); stack_pointer[-1] = res; - if (0) { stack_pointer[-(1 + (0 ? 1 : 0))] = res2; } + if (0) { stack_pointer[-(1 + 0)] = res2; } next_instr += 9; DISPATCH(); } @@ -3458,9 +3458,9 @@ assert(_PyType_HasFeature(Py_TYPE(descr), Py_TPFLAGS_METHOD_DESCRIPTOR)); res2 = Py_NewRef(descr); res = self; - STACK_GROW((1 ? 1 : 0)); + STACK_GROW(1); stack_pointer[-1] = res; - if (1) { stack_pointer[-(1 + (1 ? 1 : 0))] = res2; } + if (1) { stack_pointer[-(1 + 1)] = res2; } next_instr += 9; DISPATCH(); } diff --git a/Tools/cases_generator/generate_cases.py b/Tools/cases_generator/generate_cases.py index 6589289121863b..3e12cb5368a84b 100644 --- a/Tools/cases_generator/generate_cases.py +++ b/Tools/cases_generator/generate_cases.py @@ -98,6 +98,8 @@ def effect_size(effect: StackEffect) -> tuple[int, str]: assert not effect.cond, "Array effects cannot have a condition" return 0, effect.size elif effect.cond: + if effect.cond in ("0", "1"): + return 0, effect.cond return 0, f"{maybe_parenthesize(effect.cond)} ? 1 : 0" else: return 1, "" @@ -1077,7 +1079,10 @@ def effect_str(effects: list[StackEffect]) -> str: for effect in comp.instr.output_effects: assert not effect.size, effect if effect.cond: - pushed_symbolic.append(maybe_parenthesize(f"{maybe_parenthesize(effect.cond)} ? 1 : 0")) + if effect.cond in ("0", "1"): + pushed_symbolic.append(effect.cond) + else: + pushed_symbolic.append(maybe_parenthesize(f"{maybe_parenthesize(effect.cond)} ? 1 : 0")) sp += 1 high = max(sp, high) if high != max(0, sp): From 1a266ae0df15369e0f850cd490607bbeb9362da5 Mon Sep 17 00:00:00 2001 From: Dong-hee Na Date: Sun, 16 Jul 2023 13:52:53 +0900 Subject: [PATCH 2/5] Address Guido's suggestion --- Python/generated_cases.c.h | 4 ++-- Tools/cases_generator/generate_cases.py | 5 ++++- 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/Python/generated_cases.c.h b/Python/generated_cases.c.h index 6aa7e5a1aa1992..503fd852c2e4d3 100644 --- a/Python/generated_cases.c.h +++ b/Python/generated_cases.c.h @@ -3412,7 +3412,7 @@ res = Py_NewRef(descr); STACK_GROW(0); stack_pointer[-1] = res; - if (0) { stack_pointer[-(1 + 0)] = res2; } + next_instr += 9; DISPATCH(); } @@ -3434,7 +3434,7 @@ res = Py_NewRef(descr); STACK_GROW(0); stack_pointer[-1] = res; - if (0) { stack_pointer[-(1 + 0)] = res2; } + next_instr += 9; DISPATCH(); } diff --git a/Tools/cases_generator/generate_cases.py b/Tools/cases_generator/generate_cases.py index 3e12cb5368a84b..ba40311588f423 100644 --- a/Tools/cases_generator/generate_cases.py +++ b/Tools/cases_generator/generate_cases.py @@ -251,7 +251,10 @@ def assign(self, dst: StackEffect, src: StackEffect): else: stmt = f"{dst.name} = {cast}{src.name};" if src.cond: - stmt = f"if ({src.cond}) {{ {stmt} }}" + if src.cond == "0": + stmt = "" # skip + else: + stmt = f"if ({src.cond}) {{ {stmt} }}" self.emit(stmt) def cast(self, dst: StackEffect, src: StackEffect) -> str: From fbeaa75596c27b1961c73a6d9cbdb76ed6c4aef4 Mon Sep 17 00:00:00 2001 From: Dong-hee Na Date: Sun, 16 Jul 2023 13:56:21 +0900 Subject: [PATCH 3/5] Nit --- Python/generated_cases.c.h | 2 -- Tools/cases_generator/generate_cases.py | 6 +++--- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/Python/generated_cases.c.h b/Python/generated_cases.c.h index 503fd852c2e4d3..e366314762895e 100644 --- a/Python/generated_cases.c.h +++ b/Python/generated_cases.c.h @@ -3412,7 +3412,6 @@ res = Py_NewRef(descr); STACK_GROW(0); stack_pointer[-1] = res; - next_instr += 9; DISPATCH(); } @@ -3434,7 +3433,6 @@ res = Py_NewRef(descr); STACK_GROW(0); stack_pointer[-1] = res; - next_instr += 9; DISPATCH(); } diff --git a/Tools/cases_generator/generate_cases.py b/Tools/cases_generator/generate_cases.py index ba40311588f423..32cde6aa721f6b 100644 --- a/Tools/cases_generator/generate_cases.py +++ b/Tools/cases_generator/generate_cases.py @@ -252,9 +252,9 @@ def assign(self, dst: StackEffect, src: StackEffect): stmt = f"{dst.name} = {cast}{src.name};" if src.cond: if src.cond == "0": - stmt = "" # skip - else: - stmt = f"if ({src.cond}) {{ {stmt} }}" + # It will not be executed + return + stmt = f"if ({src.cond}) {{ {stmt} }}" self.emit(stmt) def cast(self, dst: StackEffect, src: StackEffect) -> str: From 5574c5e06d685c29cc0bcc6119449c649f71f447 Mon Sep 17 00:00:00 2001 From: Dong-hee Na Date: Sun, 16 Jul 2023 14:09:19 +0900 Subject: [PATCH 4/5] Remove unused varaible case --- Python/generated_cases.c.h | 2 -- Tools/cases_generator/generate_cases.py | 2 +- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/Python/generated_cases.c.h b/Python/generated_cases.c.h index e366314762895e..9dca2ec3bba3db 100644 --- a/Python/generated_cases.c.h +++ b/Python/generated_cases.c.h @@ -3391,7 +3391,6 @@ TARGET(LOAD_ATTR_NONDESCRIPTOR_WITH_VALUES) { PyObject *self = stack_pointer[-1]; - PyObject *res2 = NULL; PyObject *res; uint32_t type_version = read_u32(&next_instr[1].cache); uint32_t keys_version = read_u32(&next_instr[3].cache); @@ -3418,7 +3417,6 @@ TARGET(LOAD_ATTR_NONDESCRIPTOR_NO_DICT) { PyObject *self = stack_pointer[-1]; - PyObject *res2 = NULL; PyObject *res; uint32_t type_version = read_u32(&next_instr[1].cache); PyObject *descr = read_obj(&next_instr[5].cache); diff --git a/Tools/cases_generator/generate_cases.py b/Tools/cases_generator/generate_cases.py index 32cde6aa721f6b..3f6da2e9b1baec 100644 --- a/Tools/cases_generator/generate_cases.py +++ b/Tools/cases_generator/generate_cases.py @@ -226,7 +226,7 @@ def stack_adjust( self.emit(f"STACK_GROW({osym});") def declare(self, dst: StackEffect, src: StackEffect | None): - if dst.name == UNUSED: + if dst.name == UNUSED or dst.cond == "0": return typ = f"{dst.type}" if dst.type else "PyObject *" if src: From 17fc8a3e5395bd48f7f8f5f8f204686a3ed2e360 Mon Sep 17 00:00:00 2001 From: Dong-hee Na Date: Sun, 16 Jul 2023 15:25:05 +0900 Subject: [PATCH 5/5] Skip if statement for always true case --- Python/generated_cases.c.h | 6 +++--- Tools/cases_generator/generate_cases.py | 2 +- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/Python/generated_cases.c.h b/Python/generated_cases.c.h index 9dca2ec3bba3db..392914c0521e9d 100644 --- a/Python/generated_cases.c.h +++ b/Python/generated_cases.c.h @@ -3362,7 +3362,7 @@ res = self; STACK_GROW(1); stack_pointer[-1] = res; - if (1) { stack_pointer[-(1 + 1)] = res2; } + stack_pointer[-(1 + 1)] = res2; next_instr += 9; DISPATCH(); } @@ -3384,7 +3384,7 @@ res = self; STACK_GROW(1); stack_pointer[-1] = res; - if (1) { stack_pointer[-(1 + 1)] = res2; } + stack_pointer[-(1 + 1)] = res2; next_instr += 9; DISPATCH(); } @@ -3456,7 +3456,7 @@ res = self; STACK_GROW(1); stack_pointer[-1] = res; - if (1) { stack_pointer[-(1 + 1)] = res2; } + stack_pointer[-(1 + 1)] = res2; next_instr += 9; DISPATCH(); } diff --git a/Tools/cases_generator/generate_cases.py b/Tools/cases_generator/generate_cases.py index 3f6da2e9b1baec..06ce40b25a03ab 100644 --- a/Tools/cases_generator/generate_cases.py +++ b/Tools/cases_generator/generate_cases.py @@ -250,7 +250,7 @@ def assign(self, dst: StackEffect, src: StackEffect): self.emit(f"Py_XSETREF({dst.name}, {cast}{src.name});") else: stmt = f"{dst.name} = {cast}{src.name};" - if src.cond: + if src.cond and src.cond != "1": if src.cond == "0": # It will not be executed return