[polly] r271514 - [NFC] Simplify min/max expression generation

Tobias Grosser via llvm-commits llvm-commits at lists.llvm.org
Tue Jun 7 09:27:28 PDT 2016


On 06/02/2016 01:21 PM, Johannes Doerfert via llvm-commits wrote:
> Author: jdoerfert
> Date: Thu Jun  2 06:20:52 2016
> New Revision: 271514
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=271514&view=rev
> Log:
> [NFC] Simplify min/max expression generation

> Modified:
>     polly/trunk/lib/CodeGen/IslExprBuilder.cpp
> 
> Modified: polly/trunk/lib/CodeGen/IslExprBuilder.cpp
> URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/CodeGen/IslExprBuilder.cpp?rev=271514&r1=271513&r2=271514&view=diff
> ==============================================================================
> --- polly/trunk/lib/CodeGen/IslExprBuilder.cpp (original)
> +++ polly/trunk/lib/CodeGen/IslExprBuilder.cpp Thu Jun  2 06:20:52 2016
> @@ -178,32 +178,18 @@ Value *IslExprBuilder::createOpNAry(__is
>           "isl ast expression not of type isl_ast_op");
>    assert(isl_ast_expr_get_op_n_arg(Expr) >= 2 &&
>           "We need at least two operands in an n-ary operation");
> -
> -  Value *V;
> -
> -  V = create(isl_ast_expr_get_op_arg(Expr, 0));
> +  assert((isl_ast_expr_get_op_type(Expr) == isl_ast_op_max ||
> +          isl_ast_expr_get_op_type(Expr) == isl_ast_op_min) &&
> +         "This is no n-ary isl ast expression");
> +
> +  bool IsMax = isl_ast_expr_get_op_type(Expr) == isl_ast_op_max;
> +  auto Pred = IsMax ? CmpInst::ICMP_SGT : CmpInst::ICMP_SLT;
> +  auto *V = create(isl_ast_expr_get_op_arg(Expr, 0));
>  
>    for (int i = 0; i < isl_ast_expr_get_op_n_arg(Expr); ++i) {
> -    Value *OpV;
> -    OpV = create(isl_ast_expr_get_op_arg(Expr, i));
> -
> +    auto *OpV = create(isl_ast_expr_get_op_arg(Expr, i));
>      unifyTypes(V, OpV);
> -
> -    switch (isl_ast_expr_get_op_type(Expr)) {
> -    default:
> -      llvm_unreachable("This is no n-ary isl ast expression");
> -
> -    case isl_ast_op_max: {
> -      Value *Cmp = Builder.CreateICmpSGT(V, OpV);
> -      V = Builder.CreateSelect(Cmp, V, OpV);
> -      continue;
> -    }
> -    case isl_ast_op_min: {
> -      Value *Cmp = Builder.CreateICmpSLT(V, OpV);
> -      V = Builder.CreateSelect(Cmp, V, OpV);
> -      continue;
> -    }
> -    }
> +    V = Builder.CreateSelect(Builder.CreateICmp(Pred, V, OpV), V, OpV);
>    }

Nice!

Tobias



More information about the llvm-commits mailing list