diff options
author | alon@honor <none@none> | 2010-10-23 17:13:52 -0700 |
---|---|---|
committer | alon@honor <none@none> | 2010-10-23 17:13:52 -0700 |
commit | e36107508d64acd60624ad8fee5bf486b7e14c7b (patch) | |
tree | 56de1b21f5948e14b3a181179062f6df6d0b6435 /src/analyzer.js | |
parent | de6934db38e16a6572f7813531e5966ac115e744 (diff) |
fix for phi-in-phi, and fix uncovered bug with llvm function calls inside phi
Diffstat (limited to 'src/analyzer.js')
-rw-r--r-- | src/analyzer.js | 18 |
1 files changed, 13 insertions, 5 deletions
diff --git a/src/analyzer.js b/src/analyzer.js index 2ee43d6c..c8529dd5 100644 --- a/src/analyzer.js +++ b/src/analyzer.js @@ -282,13 +282,25 @@ function analyzer(data) { substrate.addZyme('LabelAnalyzer', { processItem: function(item) { item.functions.forEach(function(func) { + func.labelsDict = {}; + func.labels.forEach(function(label) { + func.labelsDict[label.ident] = label; + }); func.hasPhi = false; func.remarkableLabels = []; func.labels.forEach(function(label) { label.lines.forEach(function(line) { if (line.value && line.value.intertype == 'phi') { for (var i = 0; i < line.value.params.length; i++) { - func.remarkableLabels.push(line.value.params[i].label); + var remarkableLabelId = line.value.params[i].label; + func.remarkableLabels.push(remarkableLabelId); + var remarkableLabel = func.labelsDict[remarkableLabelId]; + var lastLine = remarkableLabel.lines.slice(-1)[0]; + if (lastLine.value) { + lastLine.value.currLabelId = remarkableLabelId; + } else { + lastLine.currLabelId = remarkableLabelId; + } } func.hasPhi = true; } @@ -698,10 +710,6 @@ function analyzer(data) { // TODO: each of these can be run in parallel item.functions.forEach(function(func) { dprint('relooping', "// relooping function: " + func.ident); - func.labelsDict = {}; - func.labels.forEach(function(label) { - func.labelsDict[label.ident] = label; - }); func.block = makeBlock(func.labels, [toNiceIdent(func.labels[0].ident)], func.labelsDict); }); |