// File: /workspace/github_c_makefile_star2_O0/jkbenaim[P]psfrag/sqlite3.c
// Function: impliesNotNullRow
static int impliesNotNullRow(Walker *pWalker, Expr *pExpr){
  testcase( pExpr->op==TK_AGG_COLUMN );
  testcase( pExpr->op==TK_AGG_FUNCTION );
  if( ExprHasProperty(pExpr, EP_FromJoin) ) return WRC_Prune;
  switch( pExpr->op ){
    case TK_ISNOT:
    case TK_ISNULL:
    case TK_NOTNULL:
    case TK_IS:
    case TK_OR:
    case TK_CASE:
    case TK_IN:
    case TK_FUNCTION:
    case TK_TRUTH:
      testcase( pExpr->op==TK_ISNOT );
      testcase( pExpr->op==TK_ISNULL );
      testcase( pExpr->op==TK_NOTNULL );
      testcase( pExpr->op==TK_IS );
      testcase( pExpr->op==TK_OR );
      testcase( pExpr->op==TK_CASE );
      testcase( pExpr->op==TK_IN );
      testcase( pExpr->op==TK_FUNCTION );
      testcase( pExpr->op==TK_TRUTH );
      return WRC_Prune;
    case TK_COLUMN:
      if( pWalker->u.iCur==pExpr->iTable ){
        pWalker->eCode = 1;
        return WRC_Abort;
      }
      return WRC_Prune;

    case TK_AND:
      if( sqlite3ExprImpliesNonNullRow(pExpr->pLeft, pWalker->u.iCur)
       && sqlite3ExprImpliesNonNullRow(pExpr->pRight, pWalker->u.iCur)
      ){
        pWalker->eCode = 1;
      }
      return WRC_Prune;

    case TK_BETWEEN:
      sqlite3WalkExpr(pWalker, pExpr->pLeft);
      return WRC_Prune;

    /* Virtual tables are allowed to use constraints like x=NULL.  So
    ** a term of the form x=y does not prove that y is not null if x
    ** is the column of a virtual table */
    case TK_EQ:
    case TK_NE:
    case TK_LT:
    case TK_LE:
    case TK_GT:
    case TK_GE:
      testcase( pExpr->op==TK_EQ );
      testcase( pExpr->op==TK_NE );
      testcase( pExpr->op==TK_LT );
      testcase( pExpr->op==TK_LE );
      testcase( pExpr->op==TK_GT );
      testcase( pExpr->op==TK_GE );
      if( (pExpr->pLeft->op==TK_COLUMN && IsVirtual(pExpr->pLeft->y.pTab))
       || (pExpr->pRight->op==TK_COLUMN && IsVirtual(pExpr->pRight->y.pTab))
      ){
       return WRC_Prune;
      }

    default:
      return WRC_Continue;
  }
}

// Assembly:
pushq %rbp
movq %rsp, %rbp
subq $0x20, %rsp
movq %rdi, -0x10(%rbp)
movq %rsi, -0x18(%rbp)
movq -0x18(%rbp), %rax
movl 0x4(%rax), %eax
andl $0x1, %eax
cmpl $0x0, %eax
je 0x8e00b
movl $0x1, -0x4(%rbp)
jmp 0x8e12b
movq -0x18(%rbp), %rax
movzbl (%rax), %eax
addl $-0x2b, %eax
movl %eax, %ecx
movq %rcx, -0x20(%rbp)
subl $0x7f, %eax
ja 0x8e124
movq -0x20(%rbp), %rax
leaq 0x2a501(%rip), %rcx     # 0xb8530
movslq (%rcx,%rax,4), %rax
addq %rcx, %rax
jmpq *%rax
movl $0x1, -0x4(%rbp)
jmp 0x8e12b
movq -0x10(%rbp), %rax
movl 0x28(%rax), %eax
movq -0x18(%rbp), %rcx
cmpl 0x2c(%rcx), %eax
jne 0x8e068
movq -0x10(%rbp), %rax
movb $0x1, 0x24(%rax)
movl $0x2, -0x4(%rbp)
jmp 0x8e12b
movl $0x1, -0x4(%rbp)
jmp 0x8e12b
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rdi
movq -0x10(%rbp), %rax
movl 0x28(%rax), %esi
callq 0x878e0
cmpl $0x0, %eax
je 0x8e0ae
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rdi
movq -0x10(%rbp), %rax
movl 0x28(%rax), %esi
callq 0x878e0
cmpl $0x0, %eax
je 0x8e0ae
movq -0x10(%rbp), %rax
movb $0x1, 0x24(%rax)
movl $0x1, -0x4(%rbp)
jmp 0x8e12b
movq -0x10(%rbp), %rdi
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rsi
callq 0x78f80
movl $0x1, -0x4(%rbp)
jmp 0x8e12b
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
movzbl (%rax), %eax
cmpl $0xa2, %eax
jne 0x8e0f5
movq -0x18(%rbp), %rax
movq 0x10(%rax), %rax
movq 0x40(%rax), %rax
cmpl $0x0, 0x54(%rax)
jne 0x8e119
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rax
movzbl (%rax), %eax
cmpl $0xa2, %eax
jne 0x8e122
movq -0x18(%rbp), %rax
movq 0x18(%rax), %rax
movq 0x40(%rax), %rax
cmpl $0x0, 0x54(%rax)
je 0x8e122
movl $0x1, -0x4(%rbp)
jmp 0x8e12b
jmp 0x8e124
movl $0x0, -0x4(%rbp)
movl -0x4(%rbp), %eax
addq $0x20, %rsp
popq %rbp
retq
nopw %cs:(%rax,%rax)