mirror of
https://github.com/zeek/zeek.git
synced 2025-10-08 17:48:21 +00:00
fix for reducing operations on boolean vectors
This commit is contained in:
parent
c7234713b1
commit
56ab0ddcf1
2 changed files with 21 additions and 2 deletions
|
@ -752,7 +752,7 @@ public:
|
|||
|
||||
// Optimization-related:
|
||||
ExprPtr Duplicate() override;
|
||||
bool WillTransform(Reducer* c) const override { return true; }
|
||||
bool WillTransform(Reducer* c) const override;
|
||||
bool WillTransformInConditional(Reducer* c) const override;
|
||||
ExprPtr Reduce(Reducer* c, StmtPtr& red_stmt) override;
|
||||
|
||||
|
|
|
@ -1054,9 +1054,20 @@ ExprPtr BoolExpr::Duplicate()
|
|||
return SetSucc(new BoolExpr(tag, op1_d, op2_d));
|
||||
}
|
||||
|
||||
bool BoolExpr::WillTransform(Reducer* c) const
|
||||
{
|
||||
if ( op1->IsConst() || (op1->HasNoSideEffects() && op2->IsConst()) )
|
||||
return true;
|
||||
|
||||
if ( IsVector(op1->GetType()->Tag()) )
|
||||
return false;
|
||||
|
||||
return WillTransformInConditional(c);
|
||||
}
|
||||
|
||||
bool BoolExpr::WillTransformInConditional(Reducer* c) const
|
||||
{
|
||||
IDPtr common_id = nullptr;
|
||||
IDPtr common_id;
|
||||
std::vector<ConstExprPtr> patterns;
|
||||
|
||||
ExprPtr e_ptr = {NewRef{}, (Expr*) this};
|
||||
|
@ -1119,6 +1130,14 @@ ExprPtr BoolExpr::Reduce(Reducer* c, StmtPtr& red_stmt)
|
|||
}
|
||||
}
|
||||
|
||||
if ( IsVector(op1->GetType()->Tag()) )
|
||||
{
|
||||
if ( c->Optimizing() )
|
||||
return ThisPtr();
|
||||
else
|
||||
return AssignToTemporary(c, red_stmt);
|
||||
}
|
||||
|
||||
auto else_val = is_and ? val_mgr->False() : val_mgr->True();
|
||||
ExprPtr else_e = make_intrusive<ConstExpr>(else_val);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue