aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <alonzakai@gmail.com>2013-09-27 22:01:55 -0700
committerAlon Zakai <alonzakai@gmail.com>2013-10-02 17:31:35 -0700
commit7cca6f256323b05ed58fa2bcd4743bfdc6968fda (patch)
tree6837a212ac7c68d28dc2250b6ef342fba017381d
parent05de5e01b14562c438bec2d90855326ed8091d92 (diff)
fast-path simple icmp
-rw-r--r--src/intertyper.js26
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;