https://gcc.gnu.org/bugzilla/show_bug.cgi?id=81661
Jakub Jelinek <jakub at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |jakub at gcc dot gnu.org --- Comment #2 from Jakub Jelinek <jakub at gcc dot gnu.org> --- So do we need some predicate that will tell us if it is safe to evaluate some generic expression using force_gimple_operand* and bail out if it isn't possible? Even if gimplify_cond_expr tried harder around: 3865 if (gimplify_ctxp->allow_rhs_cond_expr 3866 /* If either branch has side effects or could trap, it can't be 3867 evaluated unconditionally. */ 3868 && !TREE_SIDE_EFFECTS (then_) 3869 && !generic_expr_could_trap_p (then_) 3870 && !TREE_SIDE_EFFECTS (else_) 3871 && !generic_expr_could_trap_p (else_)) 3872 return gimplify_pure_cond_expr (expr_p, pre_p); 3873 3874 tmp = create_tmp_var (type, "iftmp"); and built for the case where gimplify_pure_cond_expr can't be used a SSA_NAME and a PHI if we're in SSA, I guess the vast majority of callers of force_gimple_operand* don't really expect that the sequence might need to be split into several basic blocks.