aboutsummaryrefslogtreecommitdiff
path: root/src/analyzer.js
diff options
context:
space:
mode:
authoralon@honor <none@none>2010-10-23 17:13:52 -0700
committeralon@honor <none@none>2010-10-23 17:13:52 -0700
commite36107508d64acd60624ad8fee5bf486b7e14c7b (patch)
tree56de1b21f5948e14b3a181179062f6df6d0b6435 /src/analyzer.js
parentde6934db38e16a6572f7813531e5966ac115e744 (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.js18
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);
});