Skip to content
Merged
Show file tree
Hide file tree
Changes from 1 commit
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 7 additions & 0 deletions vyper/venom/basicblock.py
Original file line number Diff line number Diff line change
Expand Up @@ -190,6 +190,13 @@ def __init__(self, name: str, version: int = 0) -> None:
value = f"{name}:{version}"
super().__init__(value)

def with_version(self, version: int) -> "IRVariable":
if version == self.version:
# IRVariable ctor is a hotspot, try to avoid calling it
# if possible
return self
return self.__class__(self.name, version)

@property
def name(self) -> str:
return self._name
Expand Down
9 changes: 4 additions & 5 deletions vyper/venom/passes/make_ssa.py
Original file line number Diff line number Diff line change
Expand Up @@ -84,7 +84,8 @@ def _rename_vars(self, basic_block: IRBasicBlock):
new_ops.append(op)
continue

new_ops.append(IRVariable(op.name, version=self.var_name_stacks[op.name][-1]))
op = op.with_version(self.var_name_stacks[op.name][-1])
new_ops.append(op)

inst.operands = new_ops

Expand All @@ -95,7 +96,7 @@ def _rename_vars(self, basic_block: IRBasicBlock):
self.var_name_stacks[v_name].append(i)
self.var_name_counters[v_name] = i + 1

inst.output = IRVariable(v_name, version=i)
inst.output = inst.output.with_version(i)
outs.append(inst.output.name)

for bb in basic_block.cfg_out:
Expand All @@ -106,9 +107,7 @@ def _rename_vars(self, basic_block: IRBasicBlock):
for i, op in enumerate(inst.operands):
if op == basic_block.label:
var = inst.operands[i + 1]
inst.operands[i + 1] = IRVariable(
var.name, version=self.var_name_stacks[var.name][-1]
)
inst.operands[i + 1] = var.with_version(self.var_name_stacks[var.name][-1])

for bb in self.dom.dominated[basic_block]:
if bb == basic_block:
Expand Down
Loading