diff options
author | Alon Zakai <azakai@mozilla.com> | 2010-12-18 17:29:24 -0800 |
---|---|---|
committer | Alon Zakai <azakai@mozilla.com> | 2010-12-18 17:29:24 -0800 |
commit | 5bbf8a976bdb547a6e6801dc4dcd9da8bb1fefb3 (patch) | |
tree | 3169c999ead4db65048fb2cf5b13cd64e995dd37 /src/parseTools.js | |
parent | 2890aa49d7d26cef710f994f7a3f838ca3466356 (diff) |
fixes for llvm optimized code in 2 tests
Diffstat (limited to 'src/parseTools.js')
-rw-r--r-- | src/parseTools.js | 11 |
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) }; |