https://gcc.gnu.org/bugzilla/show_bug.cgi?id=113339
Bug ID: 113339 Summary: `-a/-b` is not simplified to `a/b` if done in seperate statements Product: gcc Version: 14.0 Status: UNCONFIRMED Keywords: missed-optimization Severity: enhancement Priority: P3 Component: tree-optimization Assignee: unassigned at gcc dot gnu.org Reporter: pinskia at gcc dot gnu.org Target Milestone: --- Take: ``` int unopt(int a, int b) { a = -a; b = -b; return a / b; } int opt(int a, int b) { return -a / -b; } ``` I would have expected these 2 would produce the same assembly but only opt is optimized to a/b and the neg is removed. Note LLVM does not do either: https://github.com/llvm/llvm-project/issues/77717 .