[前][次][番号順一覧][スレッド一覧]

ruby-changes:51042

From: k0kubun <ko1@a...>
Date: Tue, 24 Apr 2018 01:20:51 +0900 (JST)
Subject: [ruby-changes:51042] k0kubun:r63249 (trunk): revert r63212

k0kubun	2018-04-24 01:20:45 +0900 (Tue, 24 Apr 2018)

  New Revision: 63249

  https://svn.ruby-lang.org/cgi-bin/viewvc.cgi?view=revision&revision=63249

  Log:
    revert r63212
    
    except test_jit.rb.
    
    In some situations, this generates a wrong code. I'll add a test for it
    later but let me revert this to make it work for now.

  Removed files:
    trunk/tool/ruby_vm/views/_mjit_compile_send_guard.erb
  Modified files:
    trunk/common.mk
    trunk/tool/ruby_vm/views/_mjit_compile_send.erb
Index: tool/ruby_vm/views/_mjit_compile_send_guard.erb
===================================================================
--- tool/ruby_vm/views/_mjit_compile_send_guard.erb	(revision 63248)
+++ tool/ruby_vm/views/_mjit_compile_send_guard.erb	(nonexistent)
@@ -1,14 +0,0 @@ https://github.com/ruby/ruby/blob/trunk/tool/ruby_vm/views/_mjit_compile_send_guard.erb#L0
-% # Copyright (c) 2018 Takashi Kokubun.  All rights reserved.
-% #
-% # This file is a part of  the programming language Ruby.  Permission is hereby
-% # granted, to either  redistribute and/or modify this file,  provided that the
-% # conditions mentioned  in the  file COPYING  are met.   Consult the  file for
-% # details.
-%
-% # JIT: Invalidate call cache if it requires vm_search_method. This allows to inline some of following things.
-            fprintf(f, "    if (UNLIKELY(GET_GLOBAL_METHOD_STATE() != %"PRI_SERIALT_PREFIX"u ||\n", cc->method_state);
-            fprintf(f, "        RCLASS_SERIAL(CLASS_OF(stack[%d])) != %"PRI_SERIALT_PREFIX"u)) {\n", b->stack_size - 1 - argc, cc->class_serial);
-            fprintf(f, "        reg_cfp->pc = original_body_iseq + %d;\n", pos);
-            fprintf(f, "        reg_cfp->sp = (VALUE *)reg_cfp->bp + %d;\n", b->stack_size + 1);
-            fprintf(f, "        goto cancel;\n");
-            fprintf(f, "    }\n");
Index: common.mk
===================================================================
--- common.mk	(revision 63248)
+++ common.mk	(revision 63249)
@@ -924,7 +924,6 @@ $(srcs_vpath)vmtc.inc: $(srcdir)/tool/ru https://github.com/ruby/ruby/blob/trunk/common.mk#L924
 $(srcs_vpath)vm.inc: $(srcdir)/tool/ruby_vm/views/vm.inc.erb
 $(srcs_vpath)mjit_compile.inc: $(srcdir)/tool/ruby_vm/views/mjit_compile.inc.erb \
   $(srcdir)/tool/ruby_vm/views/_mjit_compile_insn.erb $(srcdir)/tool/ruby_vm/views/_mjit_compile_send.erb \
-  $(srcdir)/tool/ruby_vm/views/_mjit_compile_send_guard.erb \
   $(srcdir)/tool/ruby_vm/views/_mjit_compile_insn_body.erb $(srcdir)/tool/ruby_vm/views/_mjit_compile_pc_and_sp.erb
 
 common-srcs: $(srcs_vpath)parse.c $(srcs_vpath)lex.c $(srcs_vpath)enc/trans/newline.c $(srcs_vpath)id.c \
Index: tool/ruby_vm/views/_mjit_compile_send.erb
===================================================================
--- tool/ruby_vm/views/_mjit_compile_send.erb	(revision 63248)
+++ tool/ruby_vm/views/_mjit_compile_send.erb	(revision 63249)
@@ -29,12 +29,16 @@ https://github.com/ruby/ruby/blob/trunk/tool/ruby_vm/views/_mjit_compile_send.erb#L29
                 fprintf(f, "    MAYBE_UNUSED(unsigned int) stack_size = %u;\n", b->stack_size);
             }
 
-% # JIT: Invalidate call cache if it requires vm_search_method. This allows to inline some of following things.
-<%= render 'mjit_compile_send_guard' -%>
-
 % # JIT: move sp and pc if necessary
 <%= render 'mjit_compile_pc_and_sp', locals: { insn: insn } -%>
 
+% # JIT: Invalidate call cache if it requires vm_search_method. This allows to inline some of following things.
+            fprintf(f, "    if (UNLIKELY(GET_GLOBAL_METHOD_STATE() != %"PRI_SERIALT_PREFIX"u ||\n", cc->method_state);
+            fprintf(f, "        RCLASS_SERIAL(CLASS_OF(stack[%d])) != %"PRI_SERIALT_PREFIX"u)) {\n", b->stack_size - 1 - argc, cc->class_serial);
+            fprintf(f, "        reg_cfp->pc = original_body_iseq + %d;\n", pos);
+            fprintf(f, "        goto cancel;\n");
+            fprintf(f, "    }\n");
+
 % # JIT: Print insn body in insns.def
             fprintf(f, "    {\n");
             fprintf(f, "        struct rb_calling_info calling;\n");
@@ -84,19 +88,5 @@ https://github.com/ruby/ruby/blob/trunk/tool/ruby_vm/views/_mjit_compile_send.erb#L88
             fprintf(f, "}\n");
             break;
         }
-% if insn.name == 'opt_send_without_block'
-        else if (cc->me->def->type == VM_METHOD_TYPE_IVAR) {
-% # JIT: Invalidate call cache if it requires vm_search_method. This allows to inline some of following things.
-<%= render 'mjit_compile_send_guard' -%>
-
-% # JIT: vm_call_ivar without sp motion
-            fprintf(f, "    stack[%d] = vm_getivar(stack[%d], (ID)0x%"PRIxVALUE", NULL, (CALL_CACHE)0x%"PRIxVALUE", 1);\n",
-                    b->stack_size - argc - 1, b->stack_size - argc - 1, cc->me->def->body.attr.id, (VALUE)cc);
-
-% # compiler: Move JIT compiler's internal stack pointer
-            b->stack_size += <%= insn.call_attribute('sp_inc') %>;
-            break;
-        }
-% end
     }
 }

--
ML: ruby-changes@q...
Info: http://www.atdot.net/~ko1/quickml/

[前][次][番号順一覧][スレッド一覧]