From 9c6bd0d84064dcdbba24ab4b65238706827fe7a3 Mon Sep 17 00:00:00 2001 From: shyouhei Date: Fri, 14 Sep 2018 07:44:44 +0000 Subject: move ADD_PC around (take 2) Now that we can say for sure if an instruction calls a method or not internally, it is now possible to reroute the bugs that forced us to revert the "move PC around" optimization. First try: r62051 Reverted: r63763 See also: r63999 ---- trunk: ruby 2.6.0dev (2018-09-13 trunk 64736) [x86_64-darwin15] ours: ruby 2.6.0dev (2018-09-13 trunk 64736) [x86_64-darwin15] last_commit=move ADD_PC around (take 2) Calculating ------------------------------------- trunk ours so_ackermann 1.884 2.278 i/s - 1.000 times in 0.530926s 0.438935s so_array 1.178 1.157 i/s - 1.000 times in 0.848786s 0.864467s so_binary_trees 0.176 0.177 i/s - 1.000 times in 5.683895s 5.657707s so_concatenate 0.220 0.221 i/s - 1.000 times in 4.546896s 4.518949s so_count_words 6.729 6.470 i/s - 1.000 times in 0.148602s 0.154561s so_exception 3.324 3.688 i/s - 1.000 times in 0.300872s 0.271147s so_fannkuch 0.546 0.968 i/s - 1.000 times in 1.831328s 1.033376s so_fasta 0.541 0.547 i/s - 1.000 times in 1.849923s 1.827091s so_k_nucleotide 0.800 0.777 i/s - 1.000 times in 1.250635s 1.286295s so_lists 2.101 1.848 i/s - 1.000 times in 0.475954s 0.541095s so_mandelbrot 0.435 0.408 i/s - 1.000 times in 2.299328s 2.450535s so_matrix 1.946 1.912 i/s - 1.000 times in 0.513872s 0.523076s so_meteor_contest 0.311 0.317 i/s - 1.000 times in 3.219297s 3.152052s so_nbody 0.746 0.703 i/s - 1.000 times in 1.339815s 1.423441s so_nested_loop 0.899 0.901 i/s - 1.000 times in 1.111767s 1.109555s so_nsieve 0.559 0.579 i/s - 1.000 times in 1.787763s 1.726552s so_nsieve_bits 0.435 0.428 i/s - 1.000 times in 2.296282s 2.333852s so_object 1.368 1.442 i/s - 1.000 times in 0.731237s 0.693684s so_partial_sums 0.616 0.546 i/s - 1.000 times in 1.623592s 1.833097s so_pidigits 0.831 0.832 i/s - 1.000 times in 1.203117s 1.202334s so_random 2.934 2.724 i/s - 1.000 times in 0.340791s 0.367150s so_reverse_complement 0.583 0.866 i/s - 1.000 times in 1.714144s 1.154615s so_sieve 1.829 2.081 i/s - 1.000 times in 0.546607s 0.480562s so_spectralnorm 0.524 0.558 i/s - 1.000 times in 1.908716s 1.792382s git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@64737 b2dd03c8-39d4-4d8f-98ff-823fe69b080e --- insns.def | 116 +++++++++++++------------------------------------------------- 1 file changed, 24 insertions(+), 92 deletions(-) (limited to 'insns.def') diff --git a/insns.def b/insns.def index df0cd26517..39c61a7f41 100644 --- a/insns.def +++ b/insns.def @@ -761,10 +761,7 @@ opt_str_freeze if (val == Qundef) { PUSH(rb_str_resurrect(str)); -#ifndef MJIT_HEADER - ADD_PC(-WIDTH_OF_opt_send_without_block); -#endif - DISPATCH_ORIGINAL_INSN(opt_send_without_block); + CALL_SIMPLE_METHOD(); } } @@ -778,10 +775,7 @@ opt_str_uminus if (val == Qundef) { PUSH(rb_str_resurrect(str)); -#ifndef MJIT_HEADER - ADD_PC(-WIDTH_OF_opt_send_without_block); -#endif - DISPATCH_ORIGINAL_INSN(opt_send_without_block); + CALL_SIMPLE_METHOD(); } } @@ -1058,10 +1052,7 @@ opt_plus val = vm_opt_plus(recv, obj); if (val == Qundef) { -#ifndef MJIT_HEADER - ADD_PC(-WIDTH_OF_opt_send_without_block); -#endif - DISPATCH_ORIGINAL_INSN(opt_send_without_block); + CALL_SIMPLE_METHOD(); } } @@ -1075,10 +1066,7 @@ opt_minus val = vm_opt_minus(recv, obj); if (val == Qundef) { -#ifndef MJIT_HEADER - ADD_PC(-WIDTH_OF_opt_send_without_block); -#endif - DISPATCH_ORIGINAL_INSN(opt_send_without_block); + CALL_SIMPLE_METHOD(); } } @@ -1092,10 +1080,7 @@ opt_mult val = vm_opt_mult(recv, obj); if (val == Qundef) { -#ifndef MJIT_HEADER - ADD_PC(-WIDTH_OF_opt_send_without_block); -#endif - DISPATCH_ORIGINAL_INSN(opt_send_without_block); + CALL_SIMPLE_METHOD(); } } @@ -1109,10 +1094,7 @@ opt_div val = vm_opt_div(recv, obj); if (val == Qundef) { -#ifndef MJIT_HEADER - ADD_PC(-WIDTH_OF_opt_send_without_block); -#endif - DISPATCH_ORIGINAL_INSN(opt_send_without_block); + CALL_SIMPLE_METHOD(); } } @@ -1126,10 +1108,7 @@ opt_mod val = vm_opt_mod(recv, obj); if (val == Qundef) { -#ifndef MJIT_HEADER - ADD_PC(-WIDTH_OF_opt_send_without_block); -#endif - DISPATCH_ORIGINAL_INSN(opt_send_without_block); + CALL_SIMPLE_METHOD(); } } @@ -1147,10 +1126,7 @@ opt_eq val = opt_eq_func(recv, obj, ci, cc); if (val == Qundef) { -#ifndef MJIT_HEADER - ADD_PC(-WIDTH_OF_opt_send_without_block); -#endif - DISPATCH_ORIGINAL_INSN(opt_send_without_block); + CALL_SIMPLE_METHOD(); } } @@ -1166,10 +1142,7 @@ opt_neq val = vm_opt_neq(ci, cc, ci_eq, cc_eq, recv, obj); if (val == Qundef) { -#ifndef MJIT_HEADER - ADD_PC(-WIDTH_OF_opt_send_without_block); -#endif - DISPATCH_ORIGINAL_INSN(opt_send_without_block); + CALL_SIMPLE_METHOD(); } } @@ -1183,10 +1156,7 @@ opt_lt val = vm_opt_lt(recv, obj); if (val == Qundef) { -#ifndef MJIT_HEADER - ADD_PC(-WIDTH_OF_opt_send_without_block); -#endif - DISPATCH_ORIGINAL_INSN(opt_send_without_block); + CALL_SIMPLE_METHOD(); } } @@ -1200,10 +1170,7 @@ opt_le val = vm_opt_le(recv, obj); if (val == Qundef) { -#ifndef MJIT_HEADER - ADD_PC(-WIDTH_OF_opt_send_without_block); -#endif - DISPATCH_ORIGINAL_INSN(opt_send_without_block); + CALL_SIMPLE_METHOD(); } } @@ -1217,10 +1184,7 @@ opt_gt val = vm_opt_gt(recv, obj); if (val == Qundef) { -#ifndef MJIT_HEADER - ADD_PC(-WIDTH_OF_opt_send_without_block); -#endif - DISPATCH_ORIGINAL_INSN(opt_send_without_block); + CALL_SIMPLE_METHOD(); } } @@ -1234,10 +1198,7 @@ opt_ge val = vm_opt_ge(recv, obj); if (val == Qundef) { -#ifndef MJIT_HEADER - ADD_PC(-WIDTH_OF_opt_send_without_block); -#endif - DISPATCH_ORIGINAL_INSN(opt_send_without_block); + CALL_SIMPLE_METHOD(); } } @@ -1251,10 +1212,7 @@ opt_ltlt val = vm_opt_ltlt(recv, obj); if (val == Qundef) { -#ifndef MJIT_HEADER - ADD_PC(-WIDTH_OF_opt_send_without_block); -#endif - DISPATCH_ORIGINAL_INSN(opt_send_without_block); + CALL_SIMPLE_METHOD(); } } @@ -1273,10 +1231,7 @@ opt_aref val = vm_opt_aref(recv, obj); if (val == Qundef) { -#ifndef MJIT_HEADER - ADD_PC(-WIDTH_OF_opt_send_without_block); -#endif - DISPATCH_ORIGINAL_INSN(opt_send_without_block); + CALL_SIMPLE_METHOD(); } } @@ -1293,10 +1248,7 @@ opt_aset val = vm_opt_aset(recv, obj, set); if (val == Qundef) { -#ifndef MJIT_HEADER - ADD_PC(-WIDTH_OF_opt_send_without_block); -#endif - DISPATCH_ORIGINAL_INSN(opt_send_without_block); + CALL_SIMPLE_METHOD(); } } @@ -1318,9 +1270,8 @@ opt_aset_with #ifndef MJIT_HEADER TOPN(0) = rb_str_resurrect(key); PUSH(val); - ADD_PC(-WIDTH_OF_opt_send_without_block); #endif - DISPATCH_ORIGINAL_INSN(opt_send_without_block); + CALL_SIMPLE_METHOD(); } } @@ -1338,9 +1289,8 @@ opt_aref_with if (val == Qundef) { #ifndef MJIT_HEADER PUSH(rb_str_resurrect(key)); - ADD_PC(-WIDTH_OF_opt_send_without_block); #endif - DISPATCH_ORIGINAL_INSN(opt_send_without_block); + CALL_SIMPLE_METHOD(); } } @@ -1354,10 +1304,7 @@ opt_length val = vm_opt_length(recv, BOP_LENGTH); if (val == Qundef) { -#ifndef MJIT_HEADER - ADD_PC(-WIDTH_OF_opt_send_without_block); -#endif - DISPATCH_ORIGINAL_INSN(opt_send_without_block); + CALL_SIMPLE_METHOD(); } } @@ -1371,10 +1318,7 @@ opt_size val = vm_opt_length(recv, BOP_SIZE); if (val == Qundef) { -#ifndef MJIT_HEADER - ADD_PC(-WIDTH_OF_opt_send_without_block); -#endif - DISPATCH_ORIGINAL_INSN(opt_send_without_block); + CALL_SIMPLE_METHOD(); } } @@ -1388,10 +1332,7 @@ opt_empty_p val = vm_opt_empty_p(recv); if (val == Qundef) { -#ifndef MJIT_HEADER - ADD_PC(-WIDTH_OF_opt_send_without_block); -#endif - DISPATCH_ORIGINAL_INSN(opt_send_without_block); + CALL_SIMPLE_METHOD(); } } @@ -1405,10 +1346,7 @@ opt_succ val = vm_opt_succ(recv); if (val == Qundef) { -#ifndef MJIT_HEADER - ADD_PC(-WIDTH_OF_opt_send_without_block); -#endif - DISPATCH_ORIGINAL_INSN(opt_send_without_block); + CALL_SIMPLE_METHOD(); } } @@ -1422,10 +1360,7 @@ opt_not val = vm_opt_not(ci, cc, recv); if (val == Qundef) { -#ifndef MJIT_HEADER - ADD_PC(-WIDTH_OF_opt_send_without_block); -#endif - DISPATCH_ORIGINAL_INSN(opt_send_without_block); + CALL_SIMPLE_METHOD(); } } @@ -1450,10 +1385,7 @@ opt_regexpmatch2 val = vm_opt_regexpmatch2(obj2, obj1); if (val == Qundef) { -#ifndef MJIT_HEADER - ADD_PC(-WIDTH_OF_opt_send_without_block); -#endif - DISPATCH_ORIGINAL_INSN(opt_send_without_block); + CALL_SIMPLE_METHOD(); } } -- cgit v1.2.3