make EMCC_OPTIMIZE_NORMALLY the default

This commit is contained in:
Alon Zakai 2013-06-26 13:58:30 -07:00
Родитель dc341c89d3
Коммит 7e179d8c63
3 изменённых файлов: 8 добавлений и 85 удалений

31
emcc
Просмотреть файл

@ -127,11 +127,6 @@ Options that are modified or new in %s include:
(For details on the affects of different
opt levels, see apply_opt_level() in
tools/shared.py and also src/settings.js.)
Note: Optimizations are only done when
compiling to JavaScript, not to intermediate
bitcode, *unless* you build with
EMCC_OPTIMIZE_NORMALLY=1 (not recommended
unless you know what you are doing!)
-O2 As -O1, plus the relooper (loop recreation),
LLVM -O2 optimizations, and
@ -1103,18 +1098,15 @@ try:
if not LEAVE_INPUTS_RAW: assert len(temp_files) == len(input_files)
# Optimize source files
if llvm_opts > 0:
for input_file in input_files:
if input_file.endswith(SOURCE_SUFFIXES):
logging.debug('optimizing %s with -O%d' % (input_file, llvm_opts))
shared.Building.llvm_opt(in_temp(unsuffixed(uniquename(input_file)) + '.o'), llvm_opts)
# If we were just asked to generate bitcode, stop there
if final_suffix not in JS_CONTAINING_SUFFIXES:
if llvm_opts > 0:
if not os.environ.get('EMCC_OPTIMIZE_NORMALLY'):
logging.warning('-Ox flags ignored, since not generating JavaScript')
else:
for input_file in input_files:
if input_file.endswith(SOURCE_SUFFIXES):
logging.debug('optimizing %s with -O%d since EMCC_OPTIMIZE_NORMALLY defined' % (input_file, llvm_opts))
shared.Building.llvm_opt(in_temp(unsuffixed(uniquename(input_file)) + '.o'), llvm_opts)
else:
logging.debug('not optimizing %s despite EMCC_OPTIMIZE_NORMALLY since not source code' % (input_file))
if not specified_target:
for input_file in input_files:
shutil.move(in_temp(unsuffixed(uniquename(input_file)) + '.o'), unsuffixed_basename(input_file) + '.' + final_suffix)
@ -1154,7 +1146,7 @@ try:
libcxx_symbols = read_symbols(shared.path_from_root('system', 'lib', 'libcxx', 'symbols'), exclude=libc_symbols)
libcxxabi_symbols = read_symbols(shared.path_from_root('system', 'lib', 'libcxxabi', 'symbols'), exclude=libc_symbols)
# XXX we should disable EMCC_DEBUG (and EMCC_OPTIMIZE_NORMALLY?) when building libs, just like in the relooper
# XXX we should disable EMCC_DEBUG when building libs, just like in the relooper
def build_libc(lib_filename, files):
o_s = []
@ -1422,13 +1414,6 @@ try:
if not LEAVE_INPUTS_RAW:
link_opts = [] if debug_level >= 4 else ['-strip-debug'] # remove LLVM debug if we are not asked for it
if llvm_opts > 0:
if not os.environ.get('EMCC_OPTIMIZE_NORMALLY'):
shared.Building.llvm_opt(in_temp(target_basename + '.bc'), llvm_opts)
if DEBUG: save_intermediate('opt', 'bc')
# Do LTO in a separate pass to work around LLVM bug XXX (see failure e.g. in cubescript)
else:
logging.debug('not running opt because EMCC_OPTIMIZE_NORMALLY was specified, opt should have been run before')
if shared.Building.can_build_standalone():
# If we can LTO, do it before dce, since it opens up dce opportunities
if llvm_lto and shared.Building.can_use_unsafe_opts():

Просмотреть файл

@ -11494,64 +11494,6 @@ seeked= file.
code = open('a.out.js').read()
assert 'SAFE_HEAP' in code, 'valid -s option had an effect'
def test_optimize_normally(self):
assert not os.environ.get('EMCC_OPTIMIZE_NORMALLY')
assert not os.environ.get('EMCC_DEBUG')
for optimize_normally in [0, 1]:
print optimize_normally
try:
if optimize_normally: os.environ['EMCC_OPTIMIZE_NORMALLY'] = '1'
os.environ['EMCC_DEBUG'] = '1'
open(self.in_dir('main.cpp'), 'w').write(r'''
extern "C" {
void something();
}
int main() {
something();
return 0;
}
''')
open(self.in_dir('supp.cpp'), 'w').write(r'''
#include <stdio.h>
extern "C" {
void something() {
printf("yello\n");
}
}
''')
out, err = Popen([PYTHON, EMCC, self.in_dir('main.cpp'), '-O2', '-o', 'main.o'], stdout=PIPE, stderr=PIPE).communicate()
assert ("emcc: LLVM opts: ['-O3']" in err) == optimize_normally
assert (' with -O3 since EMCC_OPTIMIZE_NORMALLY defined' in err) == optimize_normally
out, err = Popen([PYTHON, EMCC, self.in_dir('supp.cpp'), '-O2', '-o', 'supp.o'], stdout=PIPE, stderr=PIPE).communicate()
assert ("emcc: LLVM opts: ['-O3']" in err) == optimize_normally
assert (' with -O3 since EMCC_OPTIMIZE_NORMALLY defined' in err) == optimize_normally
out, err = Popen([PYTHON, EMCC, self.in_dir('main.o'), self.in_dir('supp.o'), '-O2', '-o', 'both.o'], stdout=PIPE, stderr=PIPE).communicate()
assert "emcc: LLVM opts: ['-O3']" not in err
assert ' with -O3 since EMCC_OPTIMIZE_NORMALLY defined' not in err
assert ('despite EMCC_OPTIMIZE_NORMALLY since not source code' in err) == optimize_normally
out, err = Popen([PYTHON, EMCC, self.in_dir('main.cpp'), self.in_dir('supp.cpp'), '-O2', '-o', 'both2.o'], stdout=PIPE, stderr=PIPE).communicate()
assert ("emcc: LLVM opts: ['-O3']" in err) == optimize_normally
assert (' with -O3 since EMCC_OPTIMIZE_NORMALLY defined' in err) == optimize_normally
for last in ['both.o', 'both2.o']:
out, err = Popen([PYTHON, EMCC, self.in_dir('both.o'), '-O2', '-o', last + '.js', '--memory-init-file', '0'], stdout=PIPE, stderr=PIPE).communicate()
assert ("emcc: LLVM opts: ['-O3']" not in err) == optimize_normally
assert ' with -O3 since EMCC_OPTIMIZE_NORMALLY defined' not in err
output = run_js(last + '.js')
assert 'yello' in output, 'code works ' + err
assert open('both.o.js').read() == open('both2.o.js').read()
finally:
if optimize_normally: del os.environ['EMCC_OPTIMIZE_NORMALLY']
del os.environ['EMCC_DEBUG']
def test_jcache_printf(self):
open(self.in_dir('src.cpp'), 'w').write(r'''
#include <stdio.h>

Просмотреть файл

@ -1293,9 +1293,6 @@ set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)''' % { 'winfix': '' if not WINDOWS e
emcc_debug = os.environ.get('EMCC_DEBUG')
if emcc_debug: del os.environ['EMCC_DEBUG']
emcc_optimize_normally = os.environ.get('EMCC_OPTIMIZE_NORMALLY')
if emcc_optimize_normally: del os.environ['EMCC_OPTIMIZE_NORMALLY']
def make(opt_level):
raw = relooper + '.raw.js'
Building.emcc(os.path.join('relooper', 'Relooper.cpp'), ['-I' + os.path.join('relooper'), '--post-js',
@ -1326,7 +1323,6 @@ set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)''' % { 'winfix': '' if not WINDOWS e
finally:
os.chdir(curr)
if emcc_debug: os.environ['EMCC_DEBUG'] = emcc_debug
if emcc_optimize_normally: os.environ['EMCC_OPTIMIZE_NORMALLY'] = emcc_optimize_normally
if not ok:
logging.error('bootstrapping relooper failed. You may need to manually create relooper.js by compiling it, see src/relooper/emscripten')
1/0