aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorYusuke Endoh <mame@ruby-lang.org>2019-08-02 15:03:34 +0900
committerYusuke Endoh <mame@ruby-lang.org>2019-08-02 15:03:34 +0900
commita0980f2446c0db735b8ffeb37e241370c458a626 (patch)
treeff8b0696ccec1e081117963f9e77cdbfab2fd756
parent19006b711d8649b69d6f9dafad073a2f57201dd7 (diff)
downloadruby-a0980f2446c0db735b8ffeb37e241370c458a626.tar.gz
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.
-rw-r--r--benchmark/nil_p.yml9
-rw-r--r--compile.c1
-rw-r--r--defs/id.def1
-rw-r--r--insns.def14
-rw-r--r--object.c2
-rw-r--r--vm.c1
-rw-r--r--vm_core.h1
-rw-r--r--vm_insnhelper.c20
8 files changed, 1 insertions, 48 deletions
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)
{