Multiplication by −1 does not fold with surrounding multipliers (incl. other −1s).

Derived from this topic. Slightly reminds me of my old report, but might be a separate issue.

This code:

var
	x: integer;
begin
	x := 2 + random(0);
	x := x * -3 * 4 * -5 * -1 * -1 * -1 * -5 * 6 * -7; // (A)
	x := -3 * 4 * -5 * -1 * -1 * -1 * -5 * 6 * -7 * x; // (B)
	writeln(x);
end.

Compiles as follows:

; x := x * -3 * 4 * -5 * -1 * -1 * -1 * -5 * 6 * -7;
imul ebx,eax,$3C
neg  ebx
neg  ebx
neg  ebx
imul ebx,ebx,$000000D2
; x := -3 * 4 * -5 * -1 * -1 * -1 * -5 * 6 * -7 * x;
imul ebx,ebx,$FFFFCEC8

Each -1 became a separate neg. Since multiplication is commutative, there is no reason for these expressions to fold differently.