aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlon Zakai <azakai@mozilla.com>2010-11-18 21:10:37 -0800
committerAlon Zakai <azakai@mozilla.com>2010-11-18 21:10:37 -0800
commit5c7d13c59133a45430bac1ce01540428a67292a4 (patch)
tree99fe9d210c895471a9775e48d37667d61cf5c4e6
parentf30d5d97a0090777a871f93b76a4657836828443 (diff)
fix parsing of |noalias| in function calls, minor fix to |getelementptr| type discovery error
-rw-r--r--src/analyzer.js3
-rw-r--r--src/intertyper.js4
-rw-r--r--src/settings.js1
3 files changed, 6 insertions, 2 deletions
diff --git a/src/analyzer.js b/src/analyzer.js
index 494355c5..b23da395 100644
--- a/src/analyzer.js
+++ b/src/analyzer.js
@@ -221,6 +221,7 @@ function analyzer(data, givenTypes) {
ident: item.ident,
type: item.value.type,
origin: item.value.intertype,
+ lineNum: item.lineNum,
uses: parseInt(item.value.tokens.slice(-1)[0].item.tokens[0].text.split('=')[1]),
};
}
@@ -266,6 +267,8 @@ function analyzer(data, givenTypes) {
var pointedType = removePointing(variable.type);
if (variable.origin == 'getelementptr') {
// Use our implementation that emulates pointers etc.
+ // XXX Can we perhaps nativize some of these? However to do so, we need to discover their
+ // true types; we have '?' for them now, as they cannot be discovered in the intertyper.
variable.impl = VAR_EMULATED;
} else if (OPTIMIZE && variable.pointingLevels === 0 && !variable.hasAddrTaken) {
// A simple int value, can be implemented as a native variable
diff --git a/src/intertyper.js b/src/intertyper.js
index 78827e87..a19ed17a 100644
--- a/src/intertyper.js
+++ b/src/intertyper.js
@@ -482,7 +482,7 @@ function intertyper(data, parseFunctions, baseLineNum) {
} } ];
var data = parseLLVMFunctionCall(segment);
item.intertype = 'getelementptr';
- item.type = data.type;
+ item.type = '?'; // We need type info to determine this
item.params = data.params;
item.ident = data.ident;
this.forwardItem(item, 'Reintegrator');
@@ -496,7 +496,7 @@ function intertyper(data, parseFunctions, baseLineNum) {
item.tokens.splice(0, 1);
}
assertEq(item.tokens[0].text, 'call');
- if (['signext', 'zeroext', 'fastcc'].indexOf(item.tokens[1].text) != -1) {
+ while (['signext', 'zeroext', 'fastcc', 'noalias'].indexOf(item.tokens[1].text) != -1) {
item.tokens.splice(1, 1);
}
item.type = item.tokens[1].text;
diff --git a/src/settings.js b/src/settings.js
index 95012abc..7312488b 100644
--- a/src/settings.js
+++ b/src/settings.js
@@ -39,6 +39,7 @@ DEBUG_TAGS_SHOWING = [];
// enzymatic
// gconst
// types
+ // vars
// relooping
// unparsedFunctions