From ed3c87d253bea2d2e2675719f90a39b694982965 Mon Sep 17 00:00:00 2001 From: Vern Paxson Date: Mon, 16 Aug 2021 10:38:42 -0700 Subject: [PATCH] simple AST optimization for ?: operator --- src/script_opt/Expr.cc | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/script_opt/Expr.cc b/src/script_opt/Expr.cc index eede780b15..e54ca4dc37 100644 --- a/src/script_opt/Expr.cc +++ b/src/script_opt/Expr.cc @@ -1427,6 +1427,19 @@ ExprPtr CondExpr::Reduce(Reducer* c, StmtPtr& red_stmt) return op2; } + if ( op2->IsConst() && op3->IsConst() && GetType()->Tag() == TYPE_BOOL ) + { + auto op2_t = op2->IsOne(); + ASSERT(op2_t != op3->IsOne()); + + if ( op2_t ) + // This is "var ? T : F", which can be replaced by var. + return op1; + + // Instead we have "var ? F : T". + return make_intrusive(op1); + } + if ( c->Optimizing() ) return ThisPtr();