https://gcc.gnu.org/bugzilla/show_bug.cgi?id=84436
Bug ID: 84436 Summary: Missed optimization with switch on enum constants returning the same value Product: gcc Version: 7.3.0 Status: UNCONFIRMED Keywords: missed-optimization Severity: normal Priority: P3 Component: c++ Assignee: unassigned at gcc dot gnu.org Reporter: mferoldif at gmail dot com Target Milestone: --- The following snippet: enum class E { A, B, C, }; int foo(E e) { switch (e) { case E::A: return 0; case E::B: return 1; case E::C: return 2; } } Produces the following ineffective code: foo(E): cmp edi, 1 mov eax, 1 je .L1 cmp edi, 2 mov eax, 2 je .L1 xor eax, eax .L1: rep ret There is no reason why it should not produce a single `mov eax, edi` and ret instruction.