aboutsummaryrefslogtreecommitdiff
path: root/tests/runner.py
diff options
context:
space:
mode:
Diffstat (limited to 'tests/runner.py')
-rw-r--r--tests/runner.py36
1 files changed, 29 insertions, 7 deletions
diff --git a/tests/runner.py b/tests/runner.py
index 159f7d7b..be77fb7b 100644
--- a/tests/runner.py
+++ b/tests/runner.py
@@ -59,7 +59,9 @@ class RunnerCore(unittest.TestCase):
def get_dir(self):
return self.working_dir
- # Similar to LLVM::createStandardModulePasses()
+ def get_stdout_path(self):
+ return os.path.join(self.get_dir(), 'stdout')
+
def pick_llvm_opts(self, optimization_level, safe=True):
global LLVM_OPT_OPTS
@@ -3302,10 +3304,10 @@ if 'benchmark' not in str(sys.argv):
if Settings.QUANTUM_SIZE == 1: return self.skip('TODO FIXME')
Settings.RELOOP = 0 # too slow
- auto_optimize_data = read_auto_optimize_data(path_from_root('tests', 'sqlite', 'sqlite-autooptimize.fails.txt'))
+ pgo_data = read_pgo_data(path_from_root('tests', 'sqlite', 'sqlite-autooptimize.fails.txt'))
Settings.CORRECT_SIGNS = 2
- Settings.CORRECT_SIGNS_LINES = auto_optimize_data['signs_lines']
+ Settings.CORRECT_SIGNS_LINES = pgo_data['signs_lines']
Settings.CORRECT_OVERFLOWS = 0
Settings.CORRECT_ROUNDINGS = 0
Settings.SAFE_HEAP = 0 # uses time.h to set random bytes, other stuff
@@ -4303,10 +4305,10 @@ Child2:9
self.do_run(src.replace('TYPE', 'long long'), '*-2**2**-5**5*')
self.do_run(src.replace('TYPE', 'int'), '*-2**2**-5**5*')
- def test_autooptimize(self):
+ def test_pgo(self):
if Settings.USE_TYPED_ARRAYS == 2: return self.skip('LLVM opts optimize out the things we check')
- Settings.AUTO_OPTIMIZE = Settings.CHECK_OVERFLOWS = Settings.CORRECT_OVERFLOWS = Settings.CHECK_SIGNS = Settings.CORRECT_SIGNS = 1
+ Settings.PGO = Settings.CHECK_OVERFLOWS = Settings.CORRECT_OVERFLOWS = Settings.CHECK_SIGNS = Settings.CORRECT_SIGNS = 1
src = '''
#include<stdio.h>
@@ -4335,6 +4337,26 @@ Child2:9
self.do_run(src, '*186854335,63*\n', output_nicerizer=check)
+ Settings.PGO = Settings.CHECK_OVERFLOWS = Settings.CORRECT_OVERFLOWS = Settings.CHECK_SIGNS = Settings.CORRECT_SIGNS = 0
+
+ # Now, recompile with the PGO data, and it should work
+
+ pgo_data = read_pgo_data(self.get_stdout_path())
+
+ Settings.CORRECT_SIGNS = 2
+ Settings.CORRECT_SIGNS_LINES = pgo_data['signs_lines']
+ Settings.CORRECT_OVERFLOWS = 2
+ Settings.CORRECT_OVERFLOWS_LINES = pgo_data['overflows_lines']
+
+ self.do_run(src, '*186854335,63*\n')
+
+ # Sanity check: Without PGO, we will fail
+
+ try:
+ self.do_run(src, '*186854335,63*\n')
+ except:
+ pass
+
# Generate tests for all our compilers
def make_run(name, compiler, llvm_opts, embetter, quantum_size, typed_arrays):
@@ -4357,7 +4379,7 @@ class %s(T):
Settings.ASSERTIONS = 1-embetter
Settings.SAFE_HEAP = 1-(embetter and llvm_opts)
Building.LLVM_OPTS = llvm_opts
- Settings.AUTO_OPTIMIZE = 0
+ Settings.PGO = 0
Settings.CHECK_OVERFLOWS = 1-(embetter or llvm_opts)
Settings.CORRECT_OVERFLOWS = 1-(embetter and llvm_opts)
Settings.CORRECT_SIGNS = 0
@@ -4465,7 +4487,7 @@ else:
Settings.USE_TYPED_ARRAYS = 1
Settings.QUANTUM_SIZE = 1
Settings.I64_MODE = 0
- Settings.ASSERTIONS = Settings.SAFE_HEAP = Settings.CHECK_OVERFLOWS = Settings.CORRECT_OVERFLOWS = Settings.CHECK_SIGNS = Settings.INIT_STACK = Settings.AUTO_OPTIMIZE = Settings.RUNTIME_TYPE_INFO = 0
+ Settings.ASSERTIONS = Settings.SAFE_HEAP = Settings.CHECK_OVERFLOWS = Settings.CORRECT_OVERFLOWS = Settings.CHECK_SIGNS = Settings.INIT_STACK = Settings.PGO = Settings.RUNTIME_TYPE_INFO = 0
Settings.INVOKE_RUN = 1
Settings.CORRECT_SIGNS = 0
Settings.CORRECT_ROUNDINGS = 0