https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70604
--- Comment #3 from Josh Poimboeuf <jpoimboe at redhat dot com> --- Hi Richard, thanks for looking at it! (In reply to Richard Biener from comment #2) > Are the cases you still see indirect jumps to only one active case or > is it just that if()s with multiple cases would have avoided the dead > code? I don't quite understand the second part of your question, but maybe this information will answer it. With GCC 6 I've only seen one occurrence of this issue, which is the one for which I posted the assembler and .i file above. It has an indirect jump which is hard-coded to use only one entry in the jump table, as shown in the assembler code above. Note that the C code has two switch statements, which seem to correspond to the two "normal" cases of indirect jump table patterns. But then there's the third unusual indirect jump, shown above, which also corresponds to one of the two switch statements -- so there are two jump tables for a single switch statement, where one of the tables appears to be optimized for a single case. Hopefully I'm making sense :-) With GCC 5, the other occurrences of this issue were very similar, with switch statements and indirect jumps to a single entry in the jump table.