From a0980f2446c0db735b8ffeb37e241370c458a626 Mon Sep 17 00:00:00 2001 From: Yusuke Endoh Date: Fri, 2 Aug 2019 15:03:34 +0900 Subject: Revert "Add a specialized instruction for `.nil?` calls" This reverts commit 9faef3113fb4331524b81ba73005ba13fa0ef6c6. It seemed to cause a failure on macOS Mojave, though I'm unsure how. https://rubyci.org/logs/rubyci.s3.amazonaws.com/osx1014/ruby-master/log/20190802T034503Z.fail.html.gz This tentative revert is to check if the issue is actually caused by the change or not. --- benchmark/nil_p.yml | 9 --------- compile.c | 1 - defs/id.def | 1 - insns.def | 14 -------------- object.c | 2 +- vm.c | 1 - vm_core.h | 1 - vm_insnhelper.c | 20 -------------------- 8 files changed, 1 insertion(+), 48 deletions(-) delete mode 100644 benchmark/nil_p.yml diff --git a/benchmark/nil_p.yml b/benchmark/nil_p.yml deleted file mode 100644 index 79ba4f2177..0000000000 --- a/benchmark/nil_p.yml +++ /dev/null @@ -1,9 +0,0 @@ -prelude: | - class Niller; def nil?; true; end; end - xnil, notnil = nil, Object.new - niller = Niller.new -benchmark: - - xnil.nil? - - notnil.nil? - - niller.nil? -loop_count: 10000000 diff --git a/compile.c b/compile.c index 0dbefd3155..774dadfc79 100644 --- a/compile.c +++ b/compile.c @@ -3255,7 +3255,6 @@ iseq_specialized_instruction(rb_iseq_t *iseq, INSN *iobj) case idLength: SP_INSN(length); return COMPILE_OK; case idSize: SP_INSN(size); return COMPILE_OK; case idEmptyP: SP_INSN(empty_p);return COMPILE_OK; - case idNilP: SP_INSN(nil_p); return COMPILE_OK; case idSucc: SP_INSN(succ); return COMPILE_OK; case idNot: SP_INSN(not); return COMPILE_OK; } diff --git a/defs/id.def b/defs/id.def index 25677ffdc2..66dfdf915a 100644 --- a/defs/id.def +++ b/defs/id.def @@ -3,7 +3,6 @@ firstline, predefined = __LINE__+1, %[\ max min freeze - nil? inspect intern object_id diff --git a/insns.def b/insns.def index 7c93af6e4d..c971026cf6 100644 --- a/insns.def +++ b/insns.def @@ -808,20 +808,6 @@ opt_str_freeze } } -/* optimized nil? */ -DEFINE_INSN -opt_nil_p -(CALL_INFO ci, CALL_CACHE cc) -(VALUE recv) -(VALUE val) -{ - val = vm_opt_nil_p(ci, cc, recv); - - if (val == Qundef) { - CALL_SIMPLE_METHOD(); - } -} - DEFINE_INSN opt_str_uminus (VALUE str, CALL_INFO ci, CALL_CACHE cc) diff --git a/object.c b/object.c index 16dce71671..3aa7cd20d2 100644 --- a/object.c +++ b/object.c @@ -1687,7 +1687,7 @@ rb_true(VALUE obj) */ -MJIT_FUNC_EXPORTED VALUE +static VALUE rb_false(VALUE obj) { return Qfalse; diff --git a/vm.c b/vm.c index b4e2e3c5e6..115bdca503 100644 --- a/vm.c +++ b/vm.c @@ -1656,7 +1656,6 @@ vm_init_redefined_flag(void) OP(Call, CALL), (C(Proc)); OP(And, AND), (C(Integer)); OP(Or, OR), (C(Integer)); - OP(NilP, NIL_P), (C(NilClass)); #undef C #undef OP } diff --git a/vm_core.h b/vm_core.h index d5e18ba489..0120f21831 100644 --- a/vm_core.h +++ b/vm_core.h @@ -550,7 +550,6 @@ enum ruby_basic_operators { BOP_LENGTH, BOP_SIZE, BOP_EMPTY_P, - BOP_NIL_P, BOP_SUCC, BOP_GT, BOP_GE, diff --git a/vm_insnhelper.c b/vm_insnhelper.c index 1875d35de1..57f6d91e88 100644 --- a/vm_insnhelper.c +++ b/vm_insnhelper.c @@ -4228,26 +4228,6 @@ vm_opt_empty_p(VALUE recv) } } -VALUE rb_false(VALUE obj); - -static VALUE -vm_opt_nil_p(CALL_INFO ci, CALL_CACHE cc, VALUE recv) -{ - if (recv == Qnil) { - if (BASIC_OP_UNREDEFINED_P(BOP_NIL_P, NIL_REDEFINED_OP_FLAG)) { - return Qtrue; - } else { - return Qundef; - } - } else { - if (vm_method_cfunc_is(ci, cc, recv, rb_false)) { - return Qfalse; - } else { - return Qundef; - } - } -} - static VALUE fix_succ(VALUE x) { -- cgit v1.2.3