https://gcc.gnu.org/bugzilla/show_bug.cgi?id=88308
--- Comment #4 from acsawdey at gcc dot gnu.org --- Tracked down the difference between -m32 and -m64. In the -m64 case, rs6000_emit_move calls force_const_mem and that will set LABEL_PRESERVE_P on a label_ref that it finds, which is what marks the jump table label for preservation. In the -m32 case, none of this if tests succeed inside the case E_SImode/E_DImode and as a result rs6000_emit_move does not call force_const_mem. It really seems to me like the label for the jump table should be marked for preservation somewhere more definite than this.