diff options
author | Alon Zakai <alonzakai@gmail.com> | 2012-02-08 13:23:27 -0800 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2012-02-08 13:23:27 -0800 |
commit | d0d5db0a361551f0e2bf557874cccbf88ec2a12f (patch) | |
tree | 79cfe0c38413dfbaf51ae09cd2a48cb2a9a803d0 | |
parent | 6f0ff33511e674c10dabd45c48e1e85d90981dd8 (diff) |
legalize (unfolded) phi
-rw-r--r-- | src/analyzer.js | 33 |
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; } } } |