bool evolution_function_is_invariant_p (tree chrec, int loopnum) { if (evolution_function_is_constant_p (chrec)) return true; if (current_loops != NULL) return evolution_function_is_invariant_rec_p (chrec, loopnum); return false; }
bool evolution_function_is_affine_multivariate_p (tree chrec) { if (chrec == NULL_TREE) return false; switch (TREE_CODE (chrec)) { case POLYNOMIAL_CHREC: if (evolution_function_is_constant_p (CHREC_LEFT (chrec))) { if (evolution_function_is_constant_p (CHREC_RIGHT (chrec))) return true; else { if (TREE_CODE (CHREC_RIGHT (chrec)) == POLYNOMIAL_CHREC && CHREC_VARIABLE (CHREC_RIGHT (chrec)) != CHREC_VARIABLE (chrec) && evolution_function_is_affine_multivariate_p (CHREC_RIGHT (chrec))) return true; else return false; } } else { if (evolution_function_is_constant_p (CHREC_RIGHT (chrec)) && TREE_CODE (CHREC_LEFT (chrec)) == POLYNOMIAL_CHREC && CHREC_VARIABLE (CHREC_LEFT (chrec)) != CHREC_VARIABLE (chrec) && evolution_function_is_affine_multivariate_p (CHREC_LEFT (chrec))) return true; else return false; } default: return false; } }
static bool evolution_function_is_invariant_rec_p (tree chrec, int loopnum) { if (evolution_function_is_constant_p (chrec)) return true; if (TREE_CODE (chrec) == SSA_NAME && (loopnum == 0 || expr_invariant_in_loop_p (get_loop (cfun, loopnum), chrec))) return true; if (TREE_CODE (chrec) == POLYNOMIAL_CHREC) { if (CHREC_VARIABLE (chrec) == (unsigned) loopnum || flow_loop_nested_p (get_loop (cfun, loopnum), get_chrec_loop (chrec)) || !evolution_function_is_invariant_rec_p (CHREC_RIGHT (chrec), loopnum) || !evolution_function_is_invariant_rec_p (CHREC_LEFT (chrec), loopnum)) return false; return true; } switch (TREE_OPERAND_LENGTH (chrec)) { case 2: if (!evolution_function_is_invariant_rec_p (TREE_OPERAND (chrec, 1), loopnum)) return false; case 1: if (!evolution_function_is_invariant_rec_p (TREE_OPERAND (chrec, 0), loopnum)) return false; return true; default: return false; } return false; }
static bool evolution_function_is_invariant_rec_p (tree chrec, int loopnum) { if (evolution_function_is_constant_p (chrec)) return true; if (TREE_CODE (chrec) == SSA_NAME && expr_invariant_in_loop_p (current_loops->parray[loopnum], chrec)) return true; if (TREE_CODE (chrec) == POLYNOMIAL_CHREC) { if (CHREC_VARIABLE (chrec) == (unsigned) loopnum || !evolution_function_is_invariant_rec_p (CHREC_RIGHT (chrec), loopnum) || !evolution_function_is_invariant_rec_p (CHREC_LEFT (chrec), loopnum)) return false; return true; } switch (TREE_CODE_LENGTH (TREE_CODE (chrec))) { case 2: if (!evolution_function_is_invariant_rec_p (TREE_OPERAND (chrec, 1), loopnum)) return false; case 1: if (!evolution_function_is_invariant_rec_p (TREE_OPERAND (chrec, 0), loopnum)) return false; return true; default: return false; } return false; }