From f20e78f0f365c0361876202f0ef7fa60bb3434f2 Mon Sep 17 00:00:00 2001 From: Harry Kalogirou Date: Mon, 28 Apr 2025 14:17:03 +0300 Subject: [PATCH 1/5] squash --- vyper/venom/passes/dft.py | 32 ++++++++++++++++++++++++++------ 1 file changed, 26 insertions(+), 6 deletions(-) diff --git a/vyper/venom/passes/dft.py b/vyper/venom/passes/dft.py index 02570bb403..96f3417bf8 100644 --- a/vyper/venom/passes/dft.py +++ b/vyper/venom/passes/dft.py @@ -45,6 +45,12 @@ def _process_basic_block(self, bb: IRBasicBlock) -> None: entry_instructions_list = list(entry_instructions) + import random + if len(entry_instructions_list) > 1: + last_element = entry_instructions_list.pop() + # entry_instructions_list.reverse() + entry_instructions_list.append(last_element) + self.visited_instructions = OrderedSet() for inst in entry_instructions_list: self._process_instruction_r(self.instructions, inst) @@ -105,15 +111,29 @@ def _calculate_dependency_graphs(self, bb: IRBasicBlock) -> None: write_effects = inst.get_write_effects() read_effects = inst.get_read_effects() - for write_effect in write_effects: - if write_effect in last_read_effects: - self.eda[inst].add(last_read_effects[write_effect]) - last_write_effects[write_effect] = inst + for effect in read_effects: + # Read depends on last write to the same effect + if effect in last_write_effects and last_write_effects[effect] != inst: + self.eda[inst].add(last_write_effects[effect]) + + for effect in write_effects: + # Write depends on last read to the same effect + if effect in last_read_effects and last_read_effects[effect] != inst: + self.eda[inst].add(last_read_effects[effect]) + + # Write depends on last write to the same effect + if effect in last_write_effects and last_write_effects[effect] != inst: + self.eda[inst].add(last_write_effects[effect]) + # Update the last read/write effect trackers for read_effect in read_effects: - if read_effect in last_write_effects and last_write_effects[read_effect] != inst: - self.eda[inst].add(last_write_effects[read_effect]) last_read_effects[read_effect] = inst + for write_effect in write_effects: + last_write_effects[write_effect] = inst + + # DEBUG ASSERTS: Check for cyclic effect dependencies + for inst, deps in self.eda.items(): + assert inst not in deps, f"Cyclic effect dependency detected for {inst}" def _calculate_data_offspring(self, inst: IRInstruction): if inst in self.data_offspring: From be9a5fbe51811d6e1dde4180ec454fa92619ec7a Mon Sep 17 00:00:00 2001 From: Harry Kalogirou Date: Mon, 28 Apr 2025 16:31:54 +0300 Subject: [PATCH 2/5] lint --- vyper/venom/passes/dft.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/vyper/venom/passes/dft.py b/vyper/venom/passes/dft.py index 96f3417bf8..212ee3d0d3 100644 --- a/vyper/venom/passes/dft.py +++ b/vyper/venom/passes/dft.py @@ -46,11 +46,12 @@ def _process_basic_block(self, bb: IRBasicBlock) -> None: entry_instructions_list = list(entry_instructions) import random + if len(entry_instructions_list) > 1: last_element = entry_instructions_list.pop() # entry_instructions_list.reverse() entry_instructions_list.append(last_element) - + self.visited_instructions = OrderedSet() for inst in entry_instructions_list: self._process_instruction_r(self.instructions, inst) From a8f469467129468f5deeac37057a7c6ed3b2001f Mon Sep 17 00:00:00 2001 From: Harry Kalogirou Date: Mon, 28 Apr 2025 16:33:21 +0300 Subject: [PATCH 3/5] remove some debuging code --- vyper/venom/passes/dft.py | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/vyper/venom/passes/dft.py b/vyper/venom/passes/dft.py index 212ee3d0d3..f0e8836053 100644 --- a/vyper/venom/passes/dft.py +++ b/vyper/venom/passes/dft.py @@ -45,12 +45,12 @@ def _process_basic_block(self, bb: IRBasicBlock) -> None: entry_instructions_list = list(entry_instructions) - import random + # import random - if len(entry_instructions_list) > 1: - last_element = entry_instructions_list.pop() - # entry_instructions_list.reverse() - entry_instructions_list.append(last_element) + # if len(entry_instructions_list) > 1: + # last_element = entry_instructions_list.pop() + # # entry_instructions_list.reverse() + # entry_instructions_list.append(last_element) self.visited_instructions = OrderedSet() for inst in entry_instructions_list: @@ -132,10 +132,6 @@ def _calculate_dependency_graphs(self, bb: IRBasicBlock) -> None: for write_effect in write_effects: last_write_effects[write_effect] = inst - # DEBUG ASSERTS: Check for cyclic effect dependencies - for inst, deps in self.eda.items(): - assert inst not in deps, f"Cyclic effect dependency detected for {inst}" - def _calculate_data_offspring(self, inst: IRInstruction): if inst in self.data_offspring: return self.data_offspring[inst] From 0a4565078dbd72b6819e983b972f5c8c8fcfa0a2 Mon Sep 17 00:00:00 2001 From: Harry Kalogirou Date: Tue, 29 Apr 2025 13:13:57 +0300 Subject: [PATCH 4/5] =?UTF-8?q?=CF=82=CE=BF=CF=81=CE=BA?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- vyper/venom/passes/dft.py | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/vyper/venom/passes/dft.py b/vyper/venom/passes/dft.py index f0e8836053..66c53c9dfb 100644 --- a/vyper/venom/passes/dft.py +++ b/vyper/venom/passes/dft.py @@ -45,6 +45,10 @@ def _process_basic_block(self, bb: IRBasicBlock) -> None: entry_instructions_list = list(entry_instructions) + print("entry_instructions_list", len(entry_instructions_list)) + if len(entry_instructions_list) > 17: + print(bb) + # import random # if len(entry_instructions_list) > 1: From 9e8fc1da5552bd93f5d44c30b00e2e90478dc46f Mon Sep 17 00:00:00 2001 From: Charles Cooper Date: Sun, 25 May 2025 14:32:32 +0200 Subject: [PATCH 5/5] remove prints --- vyper/venom/passes/dft.py | 11 ----------- 1 file changed, 11 deletions(-) diff --git a/vyper/venom/passes/dft.py b/vyper/venom/passes/dft.py index 66c53c9dfb..e8a76ff452 100644 --- a/vyper/venom/passes/dft.py +++ b/vyper/venom/passes/dft.py @@ -45,17 +45,6 @@ def _process_basic_block(self, bb: IRBasicBlock) -> None: entry_instructions_list = list(entry_instructions) - print("entry_instructions_list", len(entry_instructions_list)) - if len(entry_instructions_list) > 17: - print(bb) - - # import random - - # if len(entry_instructions_list) > 1: - # last_element = entry_instructions_list.pop() - # # entry_instructions_list.reverse() - # entry_instructions_list.append(last_element) - self.visited_instructions = OrderedSet() for inst in entry_instructions_list: self._process_instruction_r(self.instructions, inst)