aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2012-02-08 13:23:27 -0800
committerAlon Zakai <alonzakai@gmail.com>2012-02-08 13:23:27 -0800
commitd0d5db0a361551f0e2bf557874cccbf88ec2a12f (patch)
tree79cfe0c38413dfbaf51ae09cd2a48cb2a9a803d0
parent6f0ff33511e674c10dabd45c48e1e85d90981dd8 (diff)
legalize (unfolded) phi
-rw-r--r--src/analyzer.js33
1 files changed, 33 insertions, 0 deletions
diff --git a/src/analyzer.js b/src/analyzer.js
index 41d46b95..729d4607 100644
--- a/src/analyzer.js
+++ b/src/analyzer.js
@@ -273,6 +273,38 @@ function analyzer(data, sidePass) {
i += j*2;
continue;
}
+ break;
+ }
+ case 'phi': {
+ if (isIllegalType(value.type)) {
+ dprint('legalizer', 'Legalizing phi at line ' + item.lineNum);
+ bits = getBits(value.type);
+ var toAdd = [];
+ var elements = getLegalVars(item.assignTo, bits);
+ var j = 0;
+ elements.forEach(function(element) {
+ toAdd.push({
+ intertype: 'phi',
+ assignTo: element.ident,
+ type: 'i' + element.bits,
+ params: value.params.map(function(param) {
+ return {
+ intertype: 'phiparam',
+ label: param.label,
+ value: { // TODO: unfolding
+ intertype: 'value',
+ ident: param.value.ident + '$' + j,
+ type: 'i' + element.bits,
+ }
+ };
+ })
+ });
+ j++;
+ });
+ i += removeAndAdd(label.lines, i, toAdd);
+ continue;
+ }
+ break;
}
case 'mathop': {
if (isIllegalType(value.type)) {
@@ -421,6 +453,7 @@ function analyzer(data, sidePass) {
i += removeAndAdd(label.lines, i, toAdd);
continue;
}
+ break;
}
}
}