Skip to content

Commit

Permalink
transforms.cfg_simplifier: remove.
Browse files Browse the repository at this point in the history
Specifically, the following idiom broke our CFGSimplifier:

b1:
  branch_if %cond, %b2, %b3
b2:
  branch %b3
b3:
  %v = phi [ %b2 => 0, %b3 => 1 ]

This is very annoying to properly handle in general case, and also
this (specifically %b2) is exactly what broke LocalAccessValidator
in the first place. So, remove CFGSimplifier altogether.

Instead, teach LocalAccessValidator how to look through predecessors
in order to get a location.
whitequark committed Dec 31, 2015
1 parent 17802d3 commit 9ed6b54
Showing 4 changed files with 16 additions and 42 deletions.
2 changes: 0 additions & 2 deletions artiq/compiler/module.py
Original file line number Diff line number Diff line change
@@ -55,7 +55,6 @@ def __init__(self, src, ref_period=1e-6):
artiq_ir_generator = transforms.ARTIQIRGenerator(engine=self.engine,
module_name=src.name,
ref_period=ref_period)
cfg_simplifier = transforms.CFGSimplifier(engine=self.engine)
dead_code_eliminator = transforms.DeadCodeEliminator(engine=self.engine)
local_access_validator = validators.LocalAccessValidator(engine=self.engine)
devirtualization = analyses.Devirtualization()
@@ -71,7 +70,6 @@ def __init__(self, src, ref_period=1e-6):
devirtualization.visit(src.typedtree)
self.artiq_ir = artiq_ir_generator.visit(src.typedtree)
artiq_ir_generator.annotate_calls(devirtualization)
cfg_simplifier.process(self.artiq_ir)
dead_code_eliminator.process(self.artiq_ir)
interleaver.process(self.artiq_ir)
local_access_validator.process(self.artiq_ir)
1 change: 0 additions & 1 deletion artiq/compiler/transforms/__init__.py
Original file line number Diff line number Diff line change
@@ -4,6 +4,5 @@
from .iodelay_estimator import IODelayEstimator
from .artiq_ir_generator import ARTIQIRGenerator
from .dead_code_eliminator import DeadCodeEliminator
from .cfg_simplifier import CFGSimplifier
from .llvm_ir_generator import LLVMIRGenerator
from .interleaver import Interleaver
35 changes: 0 additions & 35 deletions artiq/compiler/transforms/cfg_simplifier.py

This file was deleted.

20 changes: 16 additions & 4 deletions artiq/compiler/validators/local_access.py
Original file line number Diff line number Diff line change
@@ -143,11 +143,23 @@ def pred_at_fault(env, var_name):

def _uninitialized_access(self, insn, var_name, pred_at_fault):
if pred_at_fault is not None:
visited = set()
possible_preds = [pred_at_fault]

uninitialized_loc = None
for pred_insn in reversed(pred_at_fault.instructions):
if pred_insn.loc is not None:
uninitialized_loc = pred_insn.loc.begin()
break
while uninitialized_loc is None:
possible_pred = possible_preds.pop(0)
visited.add(possible_pred)

for pred_insn in reversed(possible_pred.instructions):
if pred_insn.loc is not None:
uninitialized_loc = pred_insn.loc.begin()
break

for block in possible_pred.predecessors():
if block not in visited:
possible_preds.append(block)

assert uninitialized_loc is not None

note = diagnostic.Diagnostic("note",

0 comments on commit 9ed6b54

Please sign in to comment.