aboutsummaryrefslogtreecommitdiff
path: root/src/parseTools.js
diff options
context:
space:
mode:
authorAlon Zakai <azakai@mozilla.com>2010-12-18 17:29:24 -0800
committerAlon Zakai <azakai@mozilla.com>2010-12-18 17:29:24 -0800
commit5bbf8a976bdb547a6e6801dc4dcd9da8bb1fefb3 (patch)
tree3169c999ead4db65048fb2cf5b13cd64e995dd37 /src/parseTools.js
parent2890aa49d7d26cef710f994f7a3f838ca3466356 (diff)
fixes for llvm optimized code in 2 tests
Diffstat (limited to 'src/parseTools.js')
-rw-r--r--src/parseTools.js11
1 files changed, 9 insertions, 2 deletions
diff --git a/src/parseTools.js b/src/parseTools.js
index fa8b6ac6..58b1ed71 100644
--- a/src/parseTools.js
+++ b/src/parseTools.js
@@ -317,7 +317,7 @@ function cleanSegment(segment) {
return segment;
}
-PARSABLE_LLVM_FUNCTIONS = searchable('getelementptr', 'bitcast', 'inttoptr', 'ptrtoint');
+PARSABLE_LLVM_FUNCTIONS = searchable('getelementptr', 'bitcast', 'inttoptr', 'ptrtoint', 'mul', 'icmp', 'zext');
// Parses a function call of form
// TYPE functionname MODIFIERS (...)
@@ -327,13 +327,20 @@ function parseLLVMFunctionCall(segment) {
segment = segment.slice(0);
segment = cleanSegment(segment);
// Remove additional modifiers
+ var variant = null;
if (!segment[2] || !segment[2].item) {
- segment.splice(2, 1);
+ variant = segment.splice(2, 1)[0];
+ if (variant && variant.text) variant = variant.text; // needed for mathops
}
assertTrue(['inreg', 'byval'].indexOf(segment[1].text) == -1);
assert(segment[1].text in PARSABLE_LLVM_FUNCTIONS);
+ while (!segment[2].item) {
+ segment.splice(2, 1); // XXX Remove modifiers - should look into them some day
+ if (!segment[2]) throw 'Invalid segment!';
+ }
var ret = {
intertype: segment[1].text,
+ variant: variant,
type: segment[0].text,
params: parseParamTokens(segment[2].item.tokens)
};