aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/intertyper.js2
-rw-r--r--src/jsifier.js5
-rw-r--r--src/library.js1
-rw-r--r--src/modules.js12
-rw-r--r--tests/runner.py20
-rw-r--r--tests/settings.py27
-rw-r--r--tools/shared.py1
7 files changed, 31 insertions, 37 deletions
diff --git a/src/intertyper.js b/src/intertyper.js
index 806dd3ce..fe4eb929 100644
--- a/src/intertyper.js
+++ b/src/intertyper.js
@@ -693,7 +693,7 @@ function intertyper(data, parseFunctions, baseLineNum) {
return [{
intertype: 'return',
type: type,
- value: item.tokens[2] ? parseLLVMSegment(item.tokens.slice(2)) : null,
+ value: (item.tokens[2] && type !== 'void') ? parseLLVMSegment(item.tokens.slice(2)) : null,
lineNum: item.lineNum
}];
}
diff --git a/src/jsifier.js b/src/jsifier.js
index 7a25983c..4bc20758 100644
--- a/src/jsifier.js
+++ b/src/jsifier.js
@@ -338,8 +338,10 @@ function JSify(data, functionsOnly, givenFunctions, givenGlobalVariables) {
addedLibraryItems[ident] = true;
var snippet = Library[ident];
+ var redirectedIdent = null;
if (typeof snippet === 'string') {
if (Library[snippet]) {
+ redirectedIdent = snippet;
snippet = Library[snippet]; // redirection for aliases
}
} else if (typeof snippet === 'object') {
@@ -369,6 +371,9 @@ function JSify(data, functionsOnly, givenFunctions, givenGlobalVariables) {
}
var deps = Library[ident + '__deps'];
+ if (redirectedIdent) {
+ deps = (deps || []).concat(Library[redirectedIdent + '__deps']);
+ }
return 'var _' + ident + '=' + snippet + (deps ? '\n' + deps.map(addFromLibrary).join('\n') : '');
}
item.JS = addFromLibrary(shortident);
diff --git a/src/library.js b/src/library.js
index 81eb358a..b875e131 100644
--- a/src/library.js
+++ b/src/library.js
@@ -603,6 +603,7 @@ var Library = {
llvm_memcpy_p0i8_p0i8_i32: 'memcpy',
llvm_memcpy_p0i8_p0i8_i64: 'memcpy',
+ memmove__deps: ['memcpy'],
memmove: function(dest, src, num, idunno) {
// not optimized!
if (num === 0) return; // will confuse malloc if 0
diff --git a/src/modules.js b/src/modules.js
index 4d811b56..4d225057 100644
--- a/src/modules.js
+++ b/src/modules.js
@@ -5,7 +5,7 @@ var LLVM_STYLE = null;
var LLVM = {
LINKAGES: set('private', 'linker_private', 'linker_private_weak', 'linker_private_weak_def_auto', 'internal',
'available_externally', 'linkonce', 'common', 'weak', 'appending', 'extern_weak', 'linkonce_odr',
- 'weak_odr', 'externally_visible', 'dllimport', 'dllexport'),
+ 'weak_odr', 'externally_visible', 'dllimport', 'dllexport', 'unnamed_addr'),
PARAM_ATTR: set('noalias', 'signext', 'zeroext', 'inreg', 'byval', 'sret', 'nocapture', 'nest'),
CALLING_CONVENTIONS: set('ccc', 'fastcc', 'coldcc', 'cc10')
};
@@ -18,8 +18,8 @@ var Debugging = {
var metadataToParentMetadata = {};
var metadataToFilename = {};
- var form1 = new RegExp(/^ .*, !dbg !(\d+)$/);
- var form2 = new RegExp(/^ .*, !dbg !(\d+) +; \[#uses=\d+\]$/);
+ var form1 = new RegExp(/^ .*, !dbg !(\d+) +$/);
+ var form2 = new RegExp(/^ .*, !dbg !(\d+) +; .*$/);
var form3 = new RegExp(/^!(\d+) = metadata !{i32 (\d+), i32 \d+, metadata !(\d+), .*}$/);
var form3a = new RegExp(/^!(\d+) = metadata !{i32 \d+, metadata !\d+, i32 \d+, i32 \d+, metadata !(\d+), i32 \d+} ; \[ DW_TAG_lexical_block \]$/);
var form3ab = new RegExp(/^!(\d+) = metadata !{i32 \d+, i32 \d+, metadata !(\d+), .*$/);
@@ -30,7 +30,11 @@ var Debugging = {
var form5 = new RegExp(/^!(\d+) = metadata !{.*$/);
var form6 = new RegExp(/^ (tail )?call void \@llvm.dbg.\w+\(metadata .*$/);
+ var debugComment = new RegExp(/; +\[debug line = \d+:\d+\]/);
+
var ret = lines.map(function(line, i) {
+ line = line.replace(debugComment, '');
+
if (form6.exec(line)) return ';';
var calc = form1.exec(line) || form2.exec(line);
@@ -51,7 +55,7 @@ var Debugging = {
}
calc = form3b.exec(line);
if (calc) {
- metadataToFilename[calc[1]] = calc[3] + '/' + calc[2];
+ metadataToFilename[calc[1]] = /* LLVM 2.8<= : calc[3] + '/' + */ calc[2];
return ';';
}
calc = form3c.exec(line) || form4.exec(line) || form5.exec(line);
diff --git a/tests/runner.py b/tests/runner.py
index d7520bfd..e5cc3a27 100644
--- a/tests/runner.py
+++ b/tests/runner.py
@@ -17,9 +17,9 @@ exec(open(path_from_root('tools', 'shared.py'), 'r').read())
# Sanity check for config
try:
- assert COMPILERS != None
+ assert COMPILER_OPTS != None
except:
- raise Exception('Cannot find "COMPILERS" definition. Is ~/.emscripten set up properly? You may need to copy the template at ~/tests/settings.py into it.')
+ raise Exception('Cannot find "COMPILER_OPTS" definition. Is ~/.emscripten set up properly? You may need to copy the template at ~/tests/settings.py into it.')
# Paths
@@ -1675,7 +1675,7 @@ if 'benchmark' not in sys.argv:
force_c=True)
def test_poppler(self):
- if COMPILER != LLVM_GCC: return # compilation failures on clang, TODO
+ if COMPILER != LLVM_GCC: return # llvm-link failure when using clang, LLVM bug 9498
if RELOOP or LLVM_OPTS: return # TODO
global SAFE_HEAP; SAFE_HEAP = 0 # Has variable object
@@ -2101,7 +2101,7 @@ class %s(T):
global COMPILER, QUANTUM_SIZE, RELOOP, OPTIMIZE, GUARD_MEMORY, USE_TYPED_ARRAYS, LLVM_OPTS, SAFE_HEAP, CHECK_OVERFLOWS, CORRECT_OVERFLOWS, CORRECT_OVERFLOWS_LINES, CORRECT_SIGNS, CORRECT_SIGNS_LINES, CHECK_SIGNS, COMPILER_TEST_OPTS, CORRECT_ROUNDINGS, CORRECT_ROUNDINGS_LINES, INVOKE_RUN
COMPILER = '%s'
- QUANTUM_SIZE = %d
+ QUANTUM_SIZE = 4 # See settings.js
llvm_opts = %d
embetter = %d
INVOKE_RUN = 1
@@ -2121,14 +2121,14 @@ class %s(T):
shutil.rmtree(self.get_dir()) # Useful in debugging sometimes to comment this out
self.get_dir() # make sure it exists
TT = %s
-''' % (fullname, compiler['path'], compiler['quantum_size'], llvm_opts, embetter, fullname))
+''' % (fullname, compiler, llvm_opts, embetter, fullname))
return TT
for embetter in [0,1]:
for llvm_opts in [0,1]:
- for name in COMPILERS.keys():
+ for name, compiler in [('clang', CLANG), ('llvm_gcc', LLVM_GCC)]:
fullname = '%s_%d_%d' % (name, llvm_opts, embetter)
- exec('%s = make_test("%s", COMPILERS["%s"],%d,%d)' % (fullname, fullname, name, llvm_opts, embetter))
+ exec('%s = make_test("%s","%s",%d,%d)' % (fullname, fullname, compiler, llvm_opts, embetter))
del T # T is just a shape for the specific subclasses, we don't test it itself
else:
@@ -2257,8 +2257,8 @@ else:
if __name__ == '__main__':
sys.argv = [sys.argv[0]] + ['-v'] + sys.argv[1:] # Verbose output by default
- for cmd in map(lambda compiler: compiler['path'], COMPILERS.values()) + [LLVM_DIS, SPIDERMONKEY_ENGINE[0], V8_ENGINE[0]]:
- print "Checking for existence of", cmd
- assert(os.path.exists(cmd))
+ for cmd in [CLANG, LLVM_GCC, LLVM_DIS, SPIDERMONKEY_ENGINE[0], V8_ENGINE[0]]:
+ if not os.path.exists(cmd):
+ print 'WARNING: Cannot find', cmd
unittest.main()
diff --git a/tests/settings.py b/tests/settings.py
index 8c987e94..cf3564ca 100644
--- a/tests/settings.py
+++ b/tests/settings.py
@@ -1,32 +1,15 @@
TEMP_DIR='/dev/shm'
-LLVM_ROOT=os.path.expanduser('~/Dev/llvm-2.8/cbuild/Release/bin') # Might not need 'Release'
-#LLVM_ROOT=os.path.expanduser('~/Dev/llvm-2.7/cbuild/bin')
-
-CLANG=os.path.expanduser(os.path.join(LLVM_ROOT, 'clang++'))
-LLVM_GCC=os.path.expanduser('~/Dev/llvm-gcc-4.2-2.8.source/cbuild/install/bin/llvm-g++')
-
-COMPILERS = {
- 'clang': {
- 'path': CLANG,
- 'quantum_size': 4, # See settings.js
- },
- 'llvm_gcc': {
- 'path': LLVM_GCC,
- 'quantum_size': 4,
- }
-}
+#LLVM_ROOT=os.path.expanduser('~/Dev/llvm-2.8/cbuild/Release/bin')
+LLVM_ROOT=os.path.expanduser('~/Dev/llvm-svn/build/Release+Asserts/bin')
+
+#LLVM_GCC=os.path.expanduser('~/Dev/llvm-gcc-4.2-2.8.source/cbuild/install/bin/llvm-g++')
+LLVM_GCC=os.path.expanduser('~/Dev/llvm-gcc-svn/cbuild/install/bin/llvm-g++')
COMPILER_OPTS = ['-m32'] # Need to build as 32bit arch, for now -
# various errors on 64bit compilation
# WARNING: '-g' here will generate llvm bitcode that lli will crash on!
-LLVM_OPT=os.path.expanduser(os.path.join(LLVM_ROOT, 'opt'))
-
-LLVM_AS=os.path.expanduser(os.path.join(LLVM_ROOT, 'llvm-as'))
-LLVM_DIS=os.path.expanduser(os.path.join(LLVM_ROOT, 'llvm-dis'))
-LLVM_DIS_OPTS = ['-show-annotations'] # For LLVM 2.8+. For 2.7, you may need to do just []
-
SPIDERMONKEY_ENGINE = [os.path.expanduser('~/Dev/tracemonkey/js/src/js'), '-m', '-j', '-p']
V8_ENGINE = [os.path.expanduser('~/Dev/v8/d8')]
diff --git a/tools/shared.py b/tools/shared.py
index 2257d4e4..85da6e9e 100644
--- a/tools/shared.py
+++ b/tools/shared.py
@@ -9,6 +9,7 @@ exec(open(CONFIG_FILE, 'r').read())
# Tools
+CLANG=os.path.expanduser(os.path.join(LLVM_ROOT, 'clang++'))
LLVM_LINK=os.path.join(LLVM_ROOT, 'llvm-link')
LLVM_OPT=os.path.expanduser(os.path.join(LLVM_ROOT, 'opt'))
LLVM_AS=os.path.expanduser(os.path.join(LLVM_ROOT, 'llvm-as'))