Subzero. Refactors Switch Lowering.

BUG=
R=stichnot@chromium.org

Review URL: https://codereview.chromium.org/1860473002 .
diff --git a/src/IceCfg.cpp b/src/IceCfg.cpp
index e2bee72..33a5992 100644
--- a/src/IceCfg.cpp
+++ b/src/IceCfg.cpp
@@ -1025,11 +1025,6 @@
   Str << Name << ":\n";
 }
 
-void Cfg::deleteJumpTableInsts() {
-  for (InstJumpTable *JumpTable : JumpTables)
-    JumpTable->setDeleted();
-}
-
 void Cfg::emitJumpTables() {
   switch (getFlags().getOutFileType()) {
   case FT_Elf:
@@ -1037,14 +1032,7 @@
     // The emission needs to be delayed until the after the text section so
     // save the offsets in the global context.
     for (const InstJumpTable *JumpTable : JumpTables) {
-      SizeT NumTargets = JumpTable->getNumTargets();
-      JumpTableData::TargetList TargetList;
-      for (SizeT I = 0; I < NumTargets; ++I) {
-        SizeT Index = JumpTable->getTarget(I)->getIndex();
-        TargetList.emplace_back(
-            getAssembler()->getCfgNodeLabel(Index)->getPosition());
-      }
-      Ctx->addJumpTable(FunctionName, JumpTable->getId(), TargetList);
+      Ctx->addJumpTableData(JumpTable->toJumpTableData(getAssembler()));
     }
   } break;
   case FT_Asm: {
@@ -1071,7 +1059,6 @@
   const bool NeedSandboxing = getFlags().getUseSandboxing();
 
   emitTextHeader(FunctionName, Ctx, Asm);
-  deleteJumpTableInsts();
   if (getFlags().getDecorateAsm()) {
     for (Variable *Var : getVariables()) {
       if (Var->getStackOffset() && !Var->isRematerializable()) {
@@ -1095,7 +1082,6 @@
   TimerMarker T(TimerStack::TT_emitAsm, this);
   // The emitIAS() routines emit into the internal assembler buffer, so there's
   // no need to lock the streams.
-  deleteJumpTableInsts();
   const bool NeedSandboxing = getFlags().getUseSandboxing();
   for (CfgNode *Node : Nodes) {
     if (NeedSandboxing && Node->needsAlignment())