// File: /workspace/github_c_makefile_star2_O2/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 %r15
pushq %r14
pushq %rbx
pushq $0x1
popq %rbx
testb $0x1, 0x4(%rsi)
jne 0x5f64b
movq %rsi, %r15
movq %rdi, %r14
movzbl (%rsi), %eax
leal -0x2b(%rax), %ecx
cmpl $0xe, %ecx
ja 0x5f61c
leaq 0x1665d(%rip), %rax     # 0x75c48
movslq (%rax,%rcx,4), %rcx
addq %rax, %rcx
jmpq *%rcx
movq 0x10(%r15), %rax
cmpb $-0x5e, (%rax)
jne 0x5f607
movq 0x40(%rax), %rax
cmpl $0x0, 0x54(%rax)
jne 0x5f64b
movq 0x18(%r15), %rax
cmpb $-0x5e, (%rax)
jne 0x5f649
movq 0x40(%rax), %rax
cmpl $0x0, 0x54(%rax)
jne 0x5f64b
jmp 0x5f649
addl $0xffffff68, %eax       # imm = 0xFFFFFF68
cmpl $0x12, %eax
ja 0x5f649
movl $0x4c001, %ecx          # imm = 0x4C001
btl %eax, %ecx
jb 0x5f64b
cmpl $0xa, %eax
jne 0x5f649
movl 0x28(%r14), %eax
cmpl 0x2c(%r15), %eax
jne 0x5f64b
movb $0x1, 0x24(%r14)
pushq $0x2
popq %rbx
jmp 0x5f64b
xorl %ebx, %ebx
movl %ebx, %eax
popq %rbx
popq %r14
popq %r15
retq
movq 0x10(%r15), %rsi
movq %r14, %rdi
callq 0x52ab6
jmp 0x5f64b
movq 0x10(%r15), %rdi
movl 0x28(%r14), %esi
callq 0x5a70b
testl %eax, %eax
je 0x5f64b
movq 0x18(%r15), %rdi
movl 0x28(%r14), %esi
callq 0x5a70b
testl %eax, %eax
je 0x5f64b
movb $0x1, 0x24(%r14)
jmp 0x5f64b