Revert "Optimise if/unless wrt OP_AND/OP_OR/OP_DOR. Also optimise OP_OR/OP_DOR chains."
authorKarl Williamson <public@khwilliamson.com>
Mon, 30 Sep 2013 15:57:55 +0000 (09:57 -0600)
committerKarl Williamson <public@khwilliamson.com>
Mon, 30 Sep 2013 16:07:38 +0000 (10:07 -0600)
This reverts commit 15a4d87479c14a0808c36a762bcd182890b84815
at the submitter's request.

op.c
t/op/or.t

index 49de893..29c9467 100644 (file)
--- a/op.c
+++ b/op.c
@@ -10949,9 +10949,6 @@ S_inplace_aassign(pTHX_ OP *o) {
     defer_queue[(defer_base + ++defer_ix) % MAX_DEFERRED] = o; \
   } STMT_END
 
-#define IS_AND_OP(o) o->op_type == OP_AND
-#define IS_ORISH_OP(o) (o->op_type == OP_OR || o->op_type == OP_DOR)
-
 /* A peephole optimizer.  We visit the ops in the order they're to execute.
  * See the comments at the top of this file for more details about when
  * peep() is called */
@@ -11419,23 +11416,6 @@ Perl_rpeep(pTHX_ OP *o)
            while (o->op_next && (   o->op_type == o->op_next->op_type
                                  || o->op_next->op_type == OP_NULL))
                o->op_next = o->op_next->op_next;
-           /* OP_OR/OP_DOR behave the same wrt op_next */
-           if (IS_ORISH_OP(o)) {
-              while (o->op_next && ( IS_ORISH_OP(o->op_next)
-                                 ||  o->op_next->op_type == OP_NULL))
-                  o->op_next = o->op_next->op_next;
-           }
-           /* if we're an OR/DOR and our next is a AND in void context, we'll
-             follow it's op_other on short circuit, same for reverse */
-           if (o->op_next &&
-               (
-                   (IS_AND_OP(o) && IS_ORISH_OP(o->op_next))
-                || (IS_ORISH_OP(o) && IS_AND_OP(o->op_next))
-               )
-               && (o->op_next->op_flags & OPf_WANT) == OPf_WANT_VOID
-           ) {
-               o->op_next = ((LOGOP*)o->op_next)->op_other;
-           }
            DEFER(cLOGOP->op_other);
           
            o->op_opt = 1;
index 2a85ff5..5260780 100644 (file)
--- a/t/op/or.t
+++ b/t/op/or.t
@@ -25,7 +25,7 @@ sub FETCH {
 package main;
 require './test.pl';
 
-plan( tests => 10 );
+plan( tests => 8 );
 
 
 my ($a, $b, $c);
@@ -66,20 +66,3 @@ $c = $a || $b;
     local $TODO = 'Double FETCH';
     is($c, 1,   '   $tied || $var');
 }
-
-my $aa, $bb, $cc;
-$bb = 1;
-
-my $res = 0;
-# Well, really testing OP_DOR I guess
-unless ($aa || $bb // $cc) {
-       $res = 1;
-}
-is($res, 0, "res is 0 after mixed OR/DOR");
-
-$res = 0;
-unless ($aa // $bb || $cc) {
-       $res = 1;
-}
-is($res, 0, "res is 0 after mixed DOR/OR");
-