The two arguments both arrived as the second one
A backend gained direct argument passing: instead of pushing arguments and popping them into the ABI registers, it emits moves straight from wherever the value already lives into the register the convention requires. This is a real hazard in this codebase, which is why argument moves are routed through a cycle-breaking sequencer.
divide(a, b) where a currently lives in the second argument register and b in the first — a natural outcome of the previous call — returns b / b, which is 1 for every non-zero input. Swapping the two parameters at the call site makes the bug disappear and reappear elsewhere.
Write the two moves the compiler must emit to get a into the first argument register and b into the second, given that they start in the opposite registers. Then execute your own two moves on paper, in the order you wrote them. Commit to the phase before you look at the emitted code.