diff options
author | Erik Norgren <[email protected]> | 2014-06-09 14:12:08 +0200 |
---|---|---|
committer | Magnus Lång <[email protected]> | 2016-05-23 18:03:09 +0200 |
commit | f833a900897faae48230bc8c1e7572fb470a4a6f (patch) | |
tree | 582c8c3d2fdf6e8db36d0b61c98f18a59768495d /lib/hipe/test/opt_verify_SUITE.erl | |
parent | b9068c94921e97cc918e9c8664c252af33bfaf39 (diff) | |
download | otp-f833a900897faae48230bc8c1e7572fb470a4a6f.tar.gz otp-f833a900897faae48230bc8c1e7572fb470a4a6f.tar.bz2 otp-f833a900897faae48230bc8c1e7572fb470a4a6f.zip |
hipe: Add test suite for verifying optimisations
* Added a suite opt_verify_SUITE.erl to HiPE that tests for the results
of optimisations, with a single testcase that checks that the
icode_call_elim optimisation pass does remove calls to maps:is_key/2
where sound and not otherwise.
* Made hipe_testsuite_driver only create explicitly listed suites.
Diffstat (limited to 'lib/hipe/test/opt_verify_SUITE.erl')
-rw-r--r-- | lib/hipe/test/opt_verify_SUITE.erl | 62 |
1 files changed, 62 insertions, 0 deletions
diff --git a/lib/hipe/test/opt_verify_SUITE.erl b/lib/hipe/test/opt_verify_SUITE.erl new file mode 100644 index 0000000000..61952e81d7 --- /dev/null +++ b/lib/hipe/test/opt_verify_SUITE.erl @@ -0,0 +1,62 @@ +-module(opt_verify_SUITE). + +-compile([export_all]). + +all() -> + [call_elim]. + +groups() -> + []. + +init_per_suite(Config) -> + case erlang:system_info(hipe_architecture) of + undefined -> {skip, "HiPE not available or enabled"}; + _ -> Config + end. + +end_per_suite(_Config) -> + ok. + +init_per_group(_GroupName, Config) -> + Config. + +end_per_group(_GroupName, Config) -> + Config. + +call_elim_test_file(Config, FileName, Option) -> + PrivDir = test_server:lookup_config(priv_dir, Config), + TempOut = test_server:temp_name(filename:join(PrivDir, "call_elim_out")), + {ok, TestCase} = compile:file(FileName), + {ok, TestCase} = hipe:c(TestCase, [Option, {pp_range_icode, {file, TempOut}}]), + {ok, Icode} = file:read_file(TempOut), + ok = file:delete(TempOut), + Icode. + +substring_count(Icode, Substring) -> + substring_count(Icode, Substring, 0). +substring_count(Icode, Substring, N) -> + case string:str(Icode, Substring) of + 0 -> N; + I -> substring_count(lists:nthtail(I, Icode), Substring, N+1) + end. + +call_elim() -> + [{doc, "Test that the call elimination optimization pass is ok"}]. +call_elim(Config) -> + DataDir = test_server:lookup_config(data_dir, Config), + F1 = filename:join(DataDir, "call_elim_test.erl"), + Icode1 = call_elim_test_file(Config, F1, icode_call_elim), + 0 = substring_count(binary:bin_to_list(Icode1), "is_key"), + Icode2 = call_elim_test_file(Config, F1, no_icode_call_elim), + true = (0 /= substring_count(binary:bin_to_list(Icode2), "is_key")), + F2 = filename:join(DataDir, "call_elim_test_branches_no_opt_poss.erl"), + Icode3 = call_elim_test_file(Config, F2, icode_call_elim), + 3 = substring_count(binary:bin_to_list(Icode3), "is_key"), + Icode4 = call_elim_test_file(Config, F2, no_icode_call_elim), + 3 = substring_count(binary:bin_to_list(Icode4), "is_key"), + F3 = filename:join(DataDir, "call_elim_test_branches_opt_poss.erl"), + Icode5 = call_elim_test_file(Config, F3, icode_call_elim), + 0 = substring_count(binary:bin_to_list(Icode5), "is_key"), + Icode6 = call_elim_test_file(Config, F3, no_icode_call_elim), + 3 = substring_count(binary:bin_to_list(Icode6), "is_key"), + ok. |