From 9c6bd0d84064dcdbba24ab4b65238706827fe7a3 Mon Sep 17 00:00:00 2001
From: shyouhei <shyouhei@b2dd03c8-39d4-4d8f-98ff-823fe69b080e>
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

