[NewGVN] Use performSymbolicEvaluation instead of createExpression.
performSymbolicEvaluation is used to obtain the symbolic expression when visiting instructions and this is used to determine their congruence class. performSymbolicEvaluation only creates expressions for certain instructions (via createExpression). For unsupported instructions, 'unknown' expression are created. The use of createExpression in processOutgoingEdges means we may simplify the condition in processOutgoingEdges to a constant in the initial round of processing, but we use Unknown(I) for the congruence class. If an operand of I changes the expression Unknown(I) stays the same, so there is no update of the congruence class of I. Hence it won't get re-visited. So if an operand of I changes in a way that causes createExpression to return different result, this update is missed. This patch updates the code to use performSymbolicEvaluation, to be symmetric with the congruence class updating code. Reviewed By: asbirlea Differential Revision: https://reviews.llvm.org/D99990
Loading
Please sign in to comment