bool scev_is_linear_expression (tree scev) { if (scev == NULL || !operator_is_linear (scev)) return false; if (TREE_CODE (scev) == MULT_EXPR) return !(tree_contains_chrecs (TREE_OPERAND (scev, 0), NULL) && tree_contains_chrecs (TREE_OPERAND (scev, 1), NULL)); switch (TREE_CODE_LENGTH (TREE_CODE (scev))) { case 3: return scev_is_linear_expression (TREE_OPERAND (scev, 0)) && scev_is_linear_expression (TREE_OPERAND (scev, 1)) && scev_is_linear_expression (TREE_OPERAND (scev, 2)); case 2: return scev_is_linear_expression (TREE_OPERAND (scev, 0)) && scev_is_linear_expression (TREE_OPERAND (scev, 1)); case 1: return scev_is_linear_expression (TREE_OPERAND (scev, 0)); case 0: return true; default: return false; } }
bool scev_is_linear_expression (tree scev) { if (scev == NULL || !operator_is_linear (scev)) return false; if (TREE_CODE (scev) == MULT_EXPR) return !(tree_contains_chrecs (TREE_OPERAND (scev, 0), NULL) && tree_contains_chrecs (TREE_OPERAND (scev, 1), NULL)); if (TREE_CODE (scev) == POLYNOMIAL_CHREC && !evolution_function_is_affine_multivariate_p (scev, CHREC_VARIABLE (scev))) return false; switch (TREE_CODE_LENGTH (TREE_CODE (scev))) { case 3: return scev_is_linear_expression (TREE_OPERAND (scev, 0)) && scev_is_linear_expression (TREE_OPERAND (scev, 1)) && scev_is_linear_expression (TREE_OPERAND (scev, 2)); case 2: return scev_is_linear_expression (TREE_OPERAND (scev, 0)) && scev_is_linear_expression (TREE_OPERAND (scev, 1)); case 1: return scev_is_linear_expression (TREE_OPERAND (scev, 0)); case 0: return true; default: return false; } }