As mentioned in ir-breaking-changes, addmod is evaluated from right to left in the legacy codegen, but from left to right in the IR-based codegen. I would like to understand the reason behind this difference. What determines the evaluation order of arguments, and is there a specific part of the source code that defines this behavior?