diff options
author | Alon Zakai <alonzakai@gmail.com> | 2013-09-27 22:01:55 -0700 |
---|---|---|
committer | Alon Zakai <alonzakai@gmail.com> | 2013-10-02 17:31:35 -0700 |
commit | 7cca6f256323b05ed58fa2bcd4743bfdc6968fda (patch) | |
tree | 6837a212ac7c68d28dc2250b6ef342fba017381d | |
parent | 05de5e01b14562c438bec2d90855326ed8091d92 (diff) |
fast-path simple icmp
-rw-r--r-- | src/intertyper.js | 26 |
1 files changed, 24 insertions, 2 deletions
diff --git a/src/intertyper.js b/src/intertyper.js index baf4c93e..d38b32c7 100644 --- a/src/intertyper.js +++ b/src/intertyper.js @@ -1014,7 +1014,7 @@ function intertyper(lines, sidePass, baseLineNums) { noteGlobalVariable(ret); } } else if (phase === 'funcs') { - if (m = /^ (%[\w\d\._]+) = (getelementptr|load) ([%\w\d\._ ,\*\-@]+)$/.exec(line.lineText)) { + if (m = /^ (%[\w\d\._]+) = (getelementptr|load|icmp) ([%\w\d\._ ,\*\-@]+)$/.exec(line.lineText)) { var assignTo = m[1]; var intertype = m[2]; var args = m[3]; @@ -1068,6 +1068,28 @@ function intertyper(lines, sidePass, baseLineNums) { } break; } + case 'icmp': { + var parts = args.split(' '); + assert(parts.length === 4); + ret = { + intertype: 'mathop', + op: 'icmp', + variant: parts[0], + lineNum: line.lineNum, + assignTo: toNiceIdent(assignTo), + params: [{ + intertype: 'value', + ident: toNiceIdent(parts[2].substr(0, parts[2].length-1)), + type: parts[1] + }, { + intertype: 'value', + ident: toNiceIdent(parts[3]), + type: parts[1] + }], + type: 'i1', + }; + break; + } default: throw 'unexpected fast path type ' + intertype; } //else if (line.lineText.indexOf(' = load ') > 0) printErr('close: ' + JSON.stringify(line.lineText)); @@ -1075,7 +1097,7 @@ function intertyper(lines, sidePass, baseLineNums) { } if (ret) { if (COMPILER_ASSERTIONS) { - //printErr(['\n', JSON.stringify(ret), '\n', JSON.stringify(triager(tokenizer(line)))]); + //printErr(['\n', dump(ret), '\n', dump(triager(tokenizer(line)))]); var normal = triager(tokenizer(line)); delete normal.tokens; delete normal.indent; |