Skip to content

Conversation

@aschackmull
Copy link
Contributor

This was highlighted by the join-order badness metric.

Before:

Evaluated recursive predicate NullGuards::customNullGuard#df9d737e#ffbf@516f08wh in 1861ms on iteration 6 (delta size: 231).
Tuple counts for NullGuards::customNullGuard#df9d737e#ffbf@516f08wh on iteration 6 running pipeline order_500000:
         363765  ~1388%    {4} r1 = SCAN NullGuards::validReturnInCustomNullGuard#df9d737e#bffb#reorder_1_2_3_0#prev_delta OUTPUT In.3, In.0, In.1, In.2
         363765  ~1388%    {4} r2 = r1 AND NOT isVarargsParam(Lhs.1)
         363765  ~1440%    {4} r3 = SCAN r2 OUTPUT In.1, In.0, In.2, In.3
         363765  ~1462%    {6} r4 = JOIN r3 WITH params ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.0, Lhs.2, Lhs.3, Rhs.2
         363765  ~1394%    {5} r5 = JOIN r4 WITH @reftype#f ON FIRST 1 OUTPUT Lhs.2, Lhs.1, Lhs.3, Lhs.4, Lhs.5
         363765  ~1446%    {6} r6 = JOIN r5 WITH Variable::Parameter::getCallable#dispred#f0820431#ff ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.0, Lhs.2, Lhs.3, Lhs.4
                       
         121255   ~413%    {6} r7 = JOIN r6 WITH Member::Method#class#9eba3c33#f ON FIRST 1 OUTPUT Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.5, Lhs.0
                       
         242510   ~930%    {6} r8 = JOIN r6 WITH Member::Method#class#9eba3c33#f ON FIRST 1 OUTPUT Lhs.0, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.5
        6064500   ~911%    {7} r9 = JOIN r8 WITH Statement::Stmt::getEnclosingCallable#dispred#f0820431#ff_10#join_rhs ON FIRST 1 OUTPUT Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.5, Lhs.0, Rhs.1
        4660800   ~900%    {7} r10 = r9 AND NOT NullGuards::validReturnInCustomNullGuard#df9d737e#bffb#reorder_1_2_3_0#prev(Lhs.1, Lhs.2, Lhs.3, Lhs.6)
        4660800   ~913%    {7} r11 = SCAN r10 OUTPUT In.6, In.0, In.1, In.2, In.3, In.4, In.5
                       
         159720   ~414%    {7} r12 = JOIN r11 WITH Statement::ReturnStmt::getResult#dispred#f0820431#ff ON FIRST 1 OUTPUT Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.5, Lhs.6, Rhs.1
                       
         159720   ~401%    {8} r13 = JOIN r11 WITH Statement::ReturnStmt::getResult#dispred#f0820431#ff ON FIRST 1 OUTPUT Rhs.1, booleanNot(Lhs.3), Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.5, Lhs.6
          74470   ~420%    {7} r14 = JOIN r13 WITH Expr::BooleanLiteral::getBooleanValue#dispred#f0820431#ff ON FIRST 2 OUTPUT Lhs.2, Lhs.3, Lhs.4, Lhs.5, Lhs.6, Lhs.7, Lhs.0
                           {7} r15 = MATERIALIZE r14 AS unknown
                       
          85250   ~402%    {7} r16 = r12 AND NOT r15(Lhs.0, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.5, Lhs.6)
          85250   ~608%    {6} r17 = SCAN r16 OUTPUT In.0, In.1, In.2, In.3, In.4, In.5
                           {6} r18 = MATERIALIZE r17 AS unknown
                       
          60400   ~420%    {6} r19 = r7 AND NOT r18(Lhs.0, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.5)
                       
          24160    ~92%    {5} r20 = SCAN r19 OUTPUT In.0, In.5, In.2, In.3, In.4
          24160   ~109%    {5} r21 = JOIN r20 WITH Statement::Stmt::getEnclosingCallable#dispred#f0820431#ff ON FIRST 2 OUTPUT Lhs.0, Lhs.2, Lhs.3, Lhs.4, Lhs.1
            808   ~101%    {5} r22 = r21 AND NOT Member::Method::isOverridable#dispred#f0820431#b(Lhs.4)
            808   ~103%    {5} r23 = SCAN r22 OUTPUT In.4, In.0, In.1, In.2, In.3
            808    ~94%    {6} r24 = JOIN r23 WITH Member::Callable::getReturnType#dispred#f0820431#ff ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.0
            808    ~90%    {7} r25 = JOIN r24 WITH Type::PrimitiveType#class#6144c3fd#f ON FIRST 1 OUTPUT Lhs.0, "boolean", Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.5
            808   ~101%    {5} r26 = JOIN r25 WITH Element::Element::hasName#dispred#f0820431#ff ON FIRST 2 OUTPUT Lhs.2, Lhs.3, Lhs.4, Lhs.5, Lhs.6
                       
            404     ~1%    {5} r27 = JOIN r26 WITH Statement::ReturnStmt::getResult#dispred#f0820431#ff ON FIRST 1 OUTPUT Lhs.1, Lhs.2, Lhs.3, Lhs.4, Rhs.1
                       
            404     ~3%    {6} r28 = JOIN r26 WITH Statement::ReturnStmt::getResult#dispred#f0820431#ff ON FIRST 1 OUTPUT Rhs.1, booleanNot(Lhs.1), Lhs.1, Lhs.2, Lhs.3, Lhs.4
            117     ~0%    {5} r29 = JOIN r28 WITH Expr::BooleanLiteral::getBooleanValue#dispred#f0820431#ff ON FIRST 2 OUTPUT Lhs.2, Lhs.3, Lhs.4, Lhs.5, Lhs.0
                           {5} r30 = MATERIALIZE r29 AS unknown
                       
            287     ~4%    {5} r31 = r27 AND NOT r30(Lhs.0, Lhs.1, Lhs.2, Lhs.3, Lhs.4)
            287    ~51%    {4} r32 = SCAN r31 OUTPUT In.0, In.1, In.2, In.3
                       
          48320   ~303%    {6} r33 = SCAN r19 OUTPUT In.0, In.5, In.1, In.2, In.3, In.4
          48320   ~316%    {6} r34 = JOIN r33 WITH Statement::Stmt::getEnclosingCallable#dispred#f0820431#ff ON FIRST 2 OUTPUT Lhs.0, Lhs.2, Lhs.3, Lhs.4, Lhs.5, Lhs.1
           1616   ~300%    {6} r35 = r34 AND NOT Member::Method::isOverridable#dispred#f0820431#b(Lhs.5)
           1616   ~300%    {6} r36 = SCAN r35 OUTPUT In.5, In.0, In.1, In.2, In.3, In.4
           1616   ~291%    {7} r37 = JOIN r36 WITH Member::Callable::getReturnType#dispred#f0820431#ff ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.5, Lhs.0
           1616   ~310%    {8} r38 = JOIN r37 WITH Type::PrimitiveType#class#6144c3fd#f ON FIRST 1 OUTPUT Lhs.0, "boolean", Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.5, Lhs.6
           1616   ~300%    {6} r39 = JOIN r38 WITH Element::Element::hasName#dispred#f0820431#ff ON FIRST 2 OUTPUT Lhs.2, Lhs.3, Lhs.4, Lhs.5, Lhs.6, Lhs.7
                       
            808   ~103%    {6} r40 = JOIN r39 WITH Statement::ReturnStmt::getResult#dispred#f0820431#ff ON FIRST 1 OUTPUT Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.5, Rhs.1
                       
            808   ~103%    {7} r41 = JOIN r39 WITH Statement::ReturnStmt::getResult#dispred#f0820431#ff ON FIRST 1 OUTPUT Rhs.1, booleanNot(Lhs.2), Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.5
            234   ~116%    {6} r42 = JOIN r41 WITH Expr::BooleanLiteral::getBooleanValue#dispred#f0820431#ff ON FIRST 2 OUTPUT Lhs.2, Lhs.3, Lhs.4, Lhs.5, Lhs.6, Lhs.0
                           {6} r43 = MATERIALIZE r42 AS unknown
                       
            574   ~100%    {6} r44 = r40 AND NOT r43(Lhs.0, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.5)
            574   ~190%    {5} r45 = SCAN r44 OUTPUT In.0, In.1, In.2, In.3, In.4
            798   ~101%    {5} r46 = JOIN r45 WITH NullGuards::validReturnInCustomNullGuard#df9d737e#bffb#reorder_1_2_3_0#prev ON FIRST 3 OUTPUT Rhs.3, Lhs.4, Lhs.1, Lhs.2, Lhs.3
            798   ~102%    {5} r47 = JOIN r46 WITH Statement::Stmt::getEnclosingCallable#dispred#f0820431#ff ON FIRST 2 OUTPUT Lhs.0, Lhs.2, Lhs.3, Lhs.4, Lhs.1
                       
            399     ~1%    {5} r48 = JOIN r47 WITH Statement::ReturnStmt::getResult#dispred#f0820431#ff ON FIRST 1 OUTPUT Lhs.1, Lhs.2, Lhs.3, Lhs.4, Rhs.1
                       
            399     ~3%    {6} r49 = JOIN r47 WITH Statement::ReturnStmt::getResult#dispred#f0820431#ff ON FIRST 1 OUTPUT Rhs.1, booleanNot(Lhs.1), Lhs.1, Lhs.2, Lhs.3, Lhs.4
            112     ~0%    {5} r50 = JOIN r49 WITH Expr::BooleanLiteral::getBooleanValue#dispred#f0820431#ff ON FIRST 2 OUTPUT Lhs.2, Lhs.3, Lhs.4, Lhs.5, Lhs.0
                           {5} r51 = MATERIALIZE r50 AS unknown
                       
            287     ~4%    {5} r52 = r48 AND NOT r51(Lhs.0, Lhs.1, Lhs.2, Lhs.3, Lhs.4)
            287    ~51%    {4} r53 = SCAN r52 OUTPUT In.0, In.1, In.2, In.3
                       
            574   ~203%    {4} r54 = r32 UNION r53
            232    ~22%    {4} r55 = r54 AND NOT NullGuards::customNullGuard#df9d737e#ffbf#prev(Lhs.2, Lhs.0, Lhs.1, Lhs.3)
            232    ~22%    {4} r56 = SCAN r55 OUTPUT In.2, In.0, In.1, In.3
                           return r56

After:

Evaluated recursive predicate NullGuards::customNullGuard#df9d737e#ffbf@bc67d8wp in 32ms on iteration 6 (delta size: 243).
Tuple counts for NullGuards::customNullGuard#df9d737e#ffbf@bc67d8wp on iteration 6 running pipeline order_500000:
        19590  ~1335%    {4} r1 = SCAN NullGuards::validReturnInCustomNullGuard#df9d737e#bffb#reorder_1_2_3_0#prev_delta OUTPUT In.0, In.3, In.1, In.2
                     
         6530   ~384%    {5} r2 = JOIN r1 WITH Variable::Parameter::getCallable#dispred#f0820431#ff ON FIRST 1 OUTPUT Lhs.1, Lhs.0, Lhs.2, Lhs.3, Rhs.1
                     
        13060   ~911%    {5} r3 = JOIN r1 WITH Variable::Parameter::getCallable#dispred#f0820431#ff ON FIRST 1 OUTPUT Rhs.1, Lhs.1, Lhs.0, Lhs.2, Lhs.3
        70490   ~912%    {6} r4 = JOIN r3 WITH NullGuards::returnStmtGetEnclosingCallable#df9d737e#ff_10#join_rhs ON FIRST 1 OUTPUT Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.0, Rhs.1
        22360   ~839%    {6} r5 = r4 AND NOT NullGuards::validReturnInCustomNullGuard#df9d737e#bffb#reorder_1_2_3_0#prev(Lhs.1, Lhs.2, Lhs.3, Lhs.5)
        22360   ~879%    {6} r6 = SCAN r5 OUTPUT In.5, In.0, In.1, In.2, In.3, In.4
                     
        11180   ~393%    {6} r7 = JOIN r6 WITH Statement::ReturnStmt::getResult#dispred#f0820431#ff ON FIRST 1 OUTPUT Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.5, Rhs.1
                     
        11180   ~399%    {7} r8 = JOIN r6 WITH Statement::ReturnStmt::getResult#dispred#f0820431#ff ON FIRST 1 OUTPUT Rhs.1, booleanNot(Lhs.3), Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.5
         4830   ~415%    {6} r9 = JOIN r8 WITH Expr::BooleanLiteral::getBooleanValue#dispred#f0820431#ff ON FIRST 2 OUTPUT Lhs.2, Lhs.3, Lhs.4, Lhs.5, Lhs.6, Lhs.0
                         {6} r10 = MATERIALIZE r9 AS unknown
                     
         6350   ~384%    {6} r11 = r7 AND NOT r10(Lhs.0, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.5)
         6350   ~609%    {5} r12 = SCAN r11 OUTPUT In.0, In.1, In.2, In.3, In.4
                         {5} r13 = MATERIALIZE r12 AS unknown
                     
         2020   ~387%    {5} r14 = r2 AND NOT r13(Lhs.0, Lhs.1, Lhs.2, Lhs.3, Lhs.4)
         2020   ~380%    {5} r15 = SCAN r14 OUTPUT In.0, In.4, In.1, In.2, In.3
         2020   ~389%    {5} r16 = JOIN r15 WITH NullGuards::returnStmtGetEnclosingCallable#df9d737e#ff ON FIRST 2 OUTPUT Lhs.2, Lhs.0, Lhs.3, Lhs.4, Lhs.1
                     
          808    ~98%    {5} r17 = JOIN r16 WITH params ON FIRST 1 OUTPUT Lhs.1, Lhs.2, Lhs.3, Lhs.4, Rhs.2
                     
          404     ~1%    {5} r18 = JOIN r17 WITH Statement::ReturnStmt::getResult#dispred#f0820431#ff ON FIRST 1 OUTPUT Lhs.1, Lhs.2, Lhs.3, Lhs.4, Rhs.1
                     
          404     ~0%    {6} r19 = JOIN r17 WITH Statement::ReturnStmt::getResult#dispred#f0820431#ff ON FIRST 1 OUTPUT Rhs.1, booleanNot(Lhs.1), Lhs.1, Lhs.2, Lhs.3, Lhs.4
          117     ~0%    {5} r20 = JOIN r19 WITH Expr::BooleanLiteral::getBooleanValue#dispred#f0820431#ff ON FIRST 2 OUTPUT Lhs.2, Lhs.3, Lhs.4, Lhs.5, Lhs.0
                         {5} r21 = MATERIALIZE r20 AS unknown
                     
          287     ~1%    {5} r22 = r18 AND NOT r21(Lhs.0, Lhs.1, Lhs.2, Lhs.3, Lhs.4)
          287    ~54%    {4} r23 = SCAN r22 OUTPUT In.0, In.1, In.2, In.3
                     
         1616   ~287%    {6} r24 = JOIN r16 WITH params ON FIRST 1 OUTPUT Lhs.1, Lhs.0, Lhs.2, Lhs.3, Lhs.4, Rhs.2
                     
          808   ~104%    {6} r25 = JOIN r24 WITH Statement::ReturnStmt::getResult#dispred#f0820431#ff ON FIRST 1 OUTPUT Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.5, Rhs.1
                     
          808    ~98%    {7} r26 = JOIN r24 WITH Statement::ReturnStmt::getResult#dispred#f0820431#ff ON FIRST 1 OUTPUT Rhs.1, booleanNot(Lhs.2), Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.5
          234    ~95%    {6} r27 = JOIN r26 WITH Expr::BooleanLiteral::getBooleanValue#dispred#f0820431#ff ON FIRST 2 OUTPUT Lhs.2, Lhs.3, Lhs.4, Lhs.5, Lhs.6, Lhs.0
                         {6} r28 = MATERIALIZE r27 AS unknown
                     
          574   ~105%    {6} r29 = r25 AND NOT r28(Lhs.0, Lhs.1, Lhs.2, Lhs.3, Lhs.4, Lhs.5)
          574   ~207%    {5} r30 = SCAN r29 OUTPUT In.0, In.1, In.2, In.3, In.4
          798   ~101%    {5} r31 = JOIN r30 WITH NullGuards::validReturnInCustomNullGuard#df9d737e#bffb#reorder_1_2_3_0#prev ON FIRST 3 OUTPUT Rhs.3, Lhs.3, Lhs.1, Lhs.2, Lhs.4
          798    ~97%    {5} r32 = JOIN r31 WITH NullGuards::returnStmtGetEnclosingCallable#df9d737e#ff ON FIRST 2 OUTPUT Lhs.0, Lhs.2, Lhs.3, Lhs.1, Lhs.4
                     
          399     ~1%    {5} r33 = JOIN r32 WITH Statement::ReturnStmt::getResult#dispred#f0820431#ff ON FIRST 1 OUTPUT Lhs.1, Lhs.2, Lhs.3, Lhs.4, Rhs.1
                     
          399     ~0%    {6} r34 = JOIN r32 WITH Statement::ReturnStmt::getResult#dispred#f0820431#ff ON FIRST 1 OUTPUT Rhs.1, booleanNot(Lhs.1), Lhs.1, Lhs.2, Lhs.3, Lhs.4
          112     ~0%    {5} r35 = JOIN r34 WITH Expr::BooleanLiteral::getBooleanValue#dispred#f0820431#ff ON FIRST 2 OUTPUT Lhs.2, Lhs.3, Lhs.4, Lhs.5, Lhs.0
                         {5} r36 = MATERIALIZE r35 AS unknown
                     
          287     ~1%    {5} r37 = r33 AND NOT r36(Lhs.0, Lhs.1, Lhs.2, Lhs.3, Lhs.4)
          287    ~54%    {4} r38 = SCAN r37 OUTPUT In.0, In.1, In.2, In.3
                     
          574   ~209%    {4} r39 = r23 UNION r38
          244    ~31%    {4} r40 = r39 AND NOT NullGuards::customNullGuard#df9d737e#ffbf#prev(Lhs.3, Lhs.0, Lhs.1, Lhs.2)
          244    ~28%    {4} r41 = SCAN r40 OUTPUT In.3, In.0, In.1, In.2
                         return r41

@aschackmull aschackmull added the no-change-note-required This PR does not need a change note label May 24, 2022
@aschackmull aschackmull requested a review from a team as a code owner May 24, 2022 11:23
@github-actions github-actions bot added the Java label May 24, 2022
@aschackmull
Copy link
Contributor Author

DCA looks fine.

Copy link
Contributor

@atorralba atorralba left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks plausible to me.

@aschackmull aschackmull merged commit 9212886 into github:main May 31, 2022
@aschackmull aschackmull deleted the java/perf-customnullguard branch May 31, 2022 09:36
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Java no-change-note-required This PR does not need a change note

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants