[llvm] 0a4fc4a - Revert "Emit the CodeView `S_ARMSWITCHTABLE` debug symbol for jump tables"

Arthur Eubanks via llvm-commits llvm-commits at lists.llvm.org
Fri Aug 25 18:34:36 PDT 2023


Author: Arthur Eubanks
Date: 2023-08-25T18:34:15-07:00
New Revision: 0a4fc4ac1c6e74eba7eb184d3da11772a06df65f

URL: https://github.com/llvm/llvm-project/commit/0a4fc4ac1c6e74eba7eb184d3da11772a06df65f
DIFF: https://github.com/llvm/llvm-project/commit/0a4fc4ac1c6e74eba7eb184d3da11772a06df65f.diff

LOG: Revert "Emit the CodeView `S_ARMSWITCHTABLE` debug symbol for jump tables"

This reverts commit 8d0c3db388143f4e058b5f513a70fd5d089d51c3.

Causes crashes, see comments in https://reviews.llvm.org/D149367.

Some follow-up fixes are also reverted:

This reverts commit 636269f4fca44693bfd787b0a37bb0328ffcc085.
This reverts commit 5966079cf4d4de0285004eef051784d0d9f7a3a6.
This reverts commit e7294dbc85d24a08c716d9babbe7f68390cf219b.

Added: 
    

Modified: 
    llvm/include/llvm/CodeGen/AsmPrinter.h
    llvm/include/llvm/CodeGen/ISDOpcodes.h
    llvm/include/llvm/CodeGen/MachineInstr.h
    llvm/include/llvm/CodeGen/SelectionDAG.h
    llvm/include/llvm/CodeGen/SelectionDAGISel.h
    llvm/include/llvm/CodeGen/TargetLowering.h
    llvm/include/llvm/DebugInfo/CodeView/CodeView.h
    llvm/include/llvm/DebugInfo/CodeView/CodeViewSymbols.def
    llvm/include/llvm/DebugInfo/CodeView/EnumTables.h
    llvm/include/llvm/DebugInfo/CodeView/SymbolRecord.h
    llvm/include/llvm/DebugInfo/LogicalView/Readers/LVCodeViewVisitor.h
    llvm/include/llvm/Support/TargetOpcodes.def
    llvm/include/llvm/Target/Target.td
    llvm/include/llvm/Target/TargetSelectionDAG.td
    llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
    llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp
    llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.h
    llvm/lib/CodeGen/MachineCSE.cpp
    llvm/lib/CodeGen/MachineInstr.cpp
    llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
    llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
    llvm/lib/CodeGen/SelectionDAG/SelectionDAGDumper.cpp
    llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
    llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
    llvm/lib/DebugInfo/CodeView/EnumTables.cpp
    llvm/lib/DebugInfo/CodeView/SymbolDumper.cpp
    llvm/lib/DebugInfo/CodeView/SymbolRecordMapping.cpp
    llvm/lib/DebugInfo/CodeView/TypeIndexDiscovery.cpp
    llvm/lib/DebugInfo/LogicalView/Readers/LVCodeViewVisitor.cpp
    llvm/lib/ObjectYAML/CodeViewYAMLSymbols.cpp
    llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp
    llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
    llvm/lib/Target/AArch64/GISel/AArch64InstructionSelector.cpp
    llvm/lib/Target/ARM/ARMAsmPrinter.cpp
    llvm/lib/Target/ARM/ARMAsmPrinter.h
    llvm/lib/Target/X86/X86ISelLowering.cpp
    llvm/lib/Target/X86/X86ISelLowering.h
    llvm/test/CodeGen/AArch64/GlobalISel/select-jump-table-brjt-constrain.mir
    llvm/test/CodeGen/AArch64/GlobalISel/select-jump-table-brjt.mir
    llvm/tools/llvm-pdbutil/MinimalSymbolDumper.cpp

Removed: 
    llvm/test/DebugInfo/COFF/jump-table.ll


################################################################################
diff  --git a/llvm/include/llvm/CodeGen/AsmPrinter.h b/llvm/include/llvm/CodeGen/AsmPrinter.h
index 9bfb4d42a54f7f..0ac497c5f8efbd 100644
--- a/llvm/include/llvm/CodeGen/AsmPrinter.h
+++ b/llvm/include/llvm/CodeGen/AsmPrinter.h
@@ -24,7 +24,6 @@
 #include "llvm/CodeGen/DwarfStringPoolEntry.h"
 #include "llvm/CodeGen/MachineFunctionPass.h"
 #include "llvm/CodeGen/StackMaps.h"
-#include "llvm/DebugInfo/CodeView/CodeView.h"
 #include "llvm/IR/InlineAsm.h"
 #include "llvm/Support/ErrorHandling.h"
 #include <cstdint>
@@ -767,18 +766,6 @@ class AsmPrinter : public MachineFunctionPass {
   /// Recursively emit Dwarf DIE tree.
   void emitDwarfDIE(const DIE &Die) const;
 
-  //===------------------------------------------------------------------===//
-  // CodeView Helper Routines
-  //===------------------------------------------------------------------===//
-
-  /// Gets information required to create a CodeView debug symbol for a jump
-  /// table.
-  /// Return value is <Base Address, Base Offset, Branch Address, Entry Size>
-  virtual std::tuple<const MCSymbol *, uint64_t, const MCSymbol *,
-                     codeview::JumpTableEntrySize>
-  getCodeViewJumpTableInfo(int JTI, const MachineInstr *BranchInstr,
-                           const MCSymbol *BranchLabel) const;
-
   //===------------------------------------------------------------------===//
   // Inline Asm Support
   //===------------------------------------------------------------------===//

diff  --git a/llvm/include/llvm/CodeGen/ISDOpcodes.h b/llvm/include/llvm/CodeGen/ISDOpcodes.h
index 9a0028e505b584..8876a6966a58d2 100644
--- a/llvm/include/llvm/CodeGen/ISDOpcodes.h
+++ b/llvm/include/llvm/CodeGen/ISDOpcodes.h
@@ -1048,10 +1048,6 @@ enum NodeType {
   /// is the jumptable index, the last one is the jumptable entry index.
   BR_JT,
 
-  /// JUMP_TABLE_DEBUG_INFO - Jumptable debug info. The first operand is the
-  /// chain, the second is the jumptable index.
-  JUMP_TABLE_DEBUG_INFO,
-
   /// BRCOND - Conditional branch.  The first operand is the chain, the
   /// second is the condition, the third is the block to branch to if the
   /// condition is true.  If the type of the condition is not i1, then the

diff  --git a/llvm/include/llvm/CodeGen/MachineInstr.h b/llvm/include/llvm/CodeGen/MachineInstr.h
index 03fb15f77c65cb..311e7f4e3d2ff9 100644
--- a/llvm/include/llvm/CodeGen/MachineInstr.h
+++ b/llvm/include/llvm/CodeGen/MachineInstr.h
@@ -1350,10 +1350,6 @@ class MachineInstr
     return false;
   }
 
-  bool isJumpTableDebugInfo() const {
-    return getOpcode() == TargetOpcode::JUMP_TABLE_DEBUG_INFO;
-  }
-
   bool isPHI() const {
     return getOpcode() == TargetOpcode::PHI ||
            getOpcode() == TargetOpcode::G_PHI;

diff  --git a/llvm/include/llvm/CodeGen/SelectionDAG.h b/llvm/include/llvm/CodeGen/SelectionDAG.h
index a7d7a72942ff4c..ac2cf02d3be717 100644
--- a/llvm/include/llvm/CodeGen/SelectionDAG.h
+++ b/llvm/include/llvm/CodeGen/SelectionDAG.h
@@ -731,7 +731,6 @@ class SelectionDAG {
   SDValue getTargetJumpTable(int JTI, EVT VT, unsigned TargetFlags = 0) {
     return getJumpTable(JTI, VT, true, TargetFlags);
   }
-  SDValue getJumpTableDebugInfo(int JTI, SDValue Chain, const SDLoc &DL);
   SDValue getConstantPool(const Constant *C, EVT VT,
                           MaybeAlign Align = std::nullopt, int Offs = 0,
                           bool isT = false, unsigned TargetFlags = 0);

diff  --git a/llvm/include/llvm/CodeGen/SelectionDAGISel.h b/llvm/include/llvm/CodeGen/SelectionDAGISel.h
index 557c6ef03d96b9..bda532e5761494 100644
--- a/llvm/include/llvm/CodeGen/SelectionDAGISel.h
+++ b/llvm/include/llvm/CodeGen/SelectionDAGISel.h
@@ -328,8 +328,6 @@ class SelectionDAGISel : public MachineFunctionPass {
   void Select_STACKMAP(SDNode *N);
   void Select_PATCHPOINT(SDNode *N);
 
-  void Select_JUMP_TABLE_DEBUG_INFO(SDNode *N);
-
 private:
   void DoInstructionSelection();
   SDNode *MorphNode(SDNode *Node, unsigned TargetOpc, SDVTList VTList,

diff  --git a/llvm/include/llvm/CodeGen/TargetLowering.h b/llvm/include/llvm/CodeGen/TargetLowering.h
index 26ef40da7c116f..ddc56798fddd6a 100644
--- a/llvm/include/llvm/CodeGen/TargetLowering.h
+++ b/llvm/include/llvm/CodeGen/TargetLowering.h
@@ -5303,10 +5303,11 @@ class TargetLowering : public TargetLoweringBase {
                                           SelectionDAG &DAG) const;
 
   /// Expands target specific indirect branch for the case of JumpTable
-  /// expansion.
-  virtual SDValue expandIndirectJTBranch(const SDLoc &dl, SDValue Value,
-                                         SDValue Addr, int JTI,
-                                         SelectionDAG &DAG) const;
+  /// expanasion.
+  virtual SDValue expandIndirectJTBranch(const SDLoc& dl, SDValue Value, SDValue Addr,
+                                         SelectionDAG &DAG) const {
+    return DAG.getNode(ISD::BRIND, dl, MVT::Other, Value, Addr);
+  }
 
   // seteq(x, 0) -> truncate(srl(ctlz(zext(x)), log2(#bits)))
   // If we're comparing for equality to zero and isCtlzFast is true, expose the

diff  --git a/llvm/include/llvm/DebugInfo/CodeView/CodeView.h b/llvm/include/llvm/DebugInfo/CodeView/CodeView.h
index 62e559e2cebaef..a9ad99a1d0a84c 100644
--- a/llvm/include/llvm/DebugInfo/CodeView/CodeView.h
+++ b/llvm/include/llvm/DebugInfo/CodeView/CodeView.h
@@ -615,29 +615,6 @@ inline uint32_t alignOf(CodeViewContainer Container) {
     return 1;
   return 4;
 }
-
-// Corresponds to CV_armswitchtype enum.
-// This enum represents the 
diff erent ways that jump tables entries can be
-// encoded to represent the target address to jump to.
-// * Pointer: The absolute address to jump to.
-// * [U]Int[8|16|32]: A value that is added to some "base" address to get the
-//    address to jump to.
-// * [U]Int[8|16]ShiftLeft: A value that is shifted left by an implementation
-//    specified amount, then added to some "base" address to get the address to
-//    jump to.
-enum class JumpTableEntrySize : uint16_t {
-  Int8 = 0,
-  UInt8 = 1,
-  Int16 = 2,
-  UInt16 = 3,
-  Int32 = 4,
-  UInt32 = 5,
-  Pointer = 6,
-  UInt8ShiftLeft = 7,
-  UInt16ShiftLeft = 8,
-  Int8ShiftLeft = 9,
-  Int16ShiftLeft = 10,
-};
 }
 }
 

diff  --git a/llvm/include/llvm/DebugInfo/CodeView/CodeViewSymbols.def b/llvm/include/llvm/DebugInfo/CodeView/CodeViewSymbols.def
index 9d85acc49fa022..4f8ccfdd16af59 100644
--- a/llvm/include/llvm/DebugInfo/CodeView/CodeViewSymbols.def
+++ b/llvm/include/llvm/DebugInfo/CodeView/CodeViewSymbols.def
@@ -170,6 +170,7 @@ CV_SYMBOL(S_LDATA_HLSL     , 0x1152)
 CV_SYMBOL(S_LOCAL_DPC_GROUPSHARED, 0x1154)
 CV_SYMBOL(S_DEFRANGE_DPC_PTR_TAG, 0x1157)
 CV_SYMBOL(S_DPC_SYM_TAG_MAP, 0x1158)
+CV_SYMBOL(S_ARMSWITCHTABLE , 0x1159)
 CV_SYMBOL(S_POGODATA       , 0x115c)
 CV_SYMBOL(S_INLINESITE2    , 0x115d)
 CV_SYMBOL(S_MOD_TYPEREF    , 0x115f)
@@ -230,8 +231,6 @@ SYMBOL_RECORD(S_FILESTATIC     , 0x1153, FileStaticSym)
 SYMBOL_RECORD(S_HEAPALLOCSITE  , 0x115e, HeapAllocationSiteSym)
 SYMBOL_RECORD(S_FRAMECOOKIE   , 0x113a, FrameCookieSym)
 
-SYMBOL_RECORD(S_ARMSWITCHTABLE, 0x1159, JumpTableSym)
-
 SYMBOL_RECORD(S_CALLEES        , 0x115a, CallerSym)
 SYMBOL_RECORD_ALIAS(S_CALLERS, 0x115b, CalleeSym, CallerSym)
 

diff  --git a/llvm/include/llvm/DebugInfo/CodeView/EnumTables.h b/llvm/include/llvm/DebugInfo/CodeView/EnumTables.h
index 2e3be094f8a60f..ec874b7ca11482 100644
--- a/llvm/include/llvm/DebugInfo/CodeView/EnumTables.h
+++ b/llvm/include/llvm/DebugInfo/CodeView/EnumTables.h
@@ -48,7 +48,6 @@ ArrayRef<EnumEntry<uint16_t>> getTypeModifierNames();
 ArrayRef<EnumEntry<uint8_t>> getCallingConventions();
 ArrayRef<EnumEntry<uint8_t>> getFunctionOptionEnum();
 ArrayRef<EnumEntry<uint16_t>> getLabelTypeEnum();
-ArrayRef<EnumEntry<uint16_t>> getJumpTableEntrySizeNames();
 
 } // end namespace codeview
 } // end namespace llvm

diff  --git a/llvm/include/llvm/DebugInfo/CodeView/SymbolRecord.h b/llvm/include/llvm/DebugInfo/CodeView/SymbolRecord.h
index 3cce40dcf735a3..3ddcf9c5739096 100644
--- a/llvm/include/llvm/DebugInfo/CodeView/SymbolRecord.h
+++ b/llvm/include/llvm/DebugInfo/CodeView/SymbolRecord.h
@@ -144,27 +144,6 @@ class ScopeEndSym : public SymbolRecord {
   uint32_t RecordOffset = 0;
 };
 
-class JumpTableSym : public SymbolRecord {
-public:
-  explicit JumpTableSym(SymbolRecordKind Kind) : SymbolRecord(Kind) {}
-  JumpTableSym(uint32_t RecordOffset)
-      : SymbolRecord(SymbolRecordKind::JumpTableSym),
-        RecordOffset(RecordOffset) {}
-
-  uint32_t BaseOffset = 0;
-  uint16_t BaseSegment = 0;
-
-  JumpTableEntrySize SwitchType;
-  uint32_t BranchOffset = 0;
-  uint32_t TableOffset = 0;
-  uint16_t BranchSegment = 0;
-  uint16_t TableSegment = 0;
-
-  uint32_t EntriesCount = 0;
-
-  uint32_t RecordOffset = 0;
-};
-
 class CallerSym : public SymbolRecord {
 public:
   explicit CallerSym(SymbolRecordKind Kind) : SymbolRecord(Kind) {}

diff  --git a/llvm/include/llvm/DebugInfo/LogicalView/Readers/LVCodeViewVisitor.h b/llvm/include/llvm/DebugInfo/LogicalView/Readers/LVCodeViewVisitor.h
index e371fecff1234e..3c461fd9e1e926 100644
--- a/llvm/include/llvm/DebugInfo/LogicalView/Readers/LVCodeViewVisitor.h
+++ b/llvm/include/llvm/DebugInfo/LogicalView/Readers/LVCodeViewVisitor.h
@@ -225,7 +225,6 @@ class LVSymbolVisitor final : public SymbolVisitorCallbacks {
   Error visitKnownRecord(CVSymbol &Record, Thunk32Sym &Thunk) override;
   Error visitKnownRecord(CVSymbol &Record, UDTSym &UDT) override;
   Error visitKnownRecord(CVSymbol &Record, UsingNamespaceSym &UN) override;
-  Error visitKnownRecord(CVSymbol &Record, JumpTableSym &JumpTable) override;
 };
 
 // Visitor for CodeView types and symbols to populate elements.

diff  --git a/llvm/include/llvm/Support/TargetOpcodes.def b/llvm/include/llvm/Support/TargetOpcodes.def
index 63bcf9dc44251c..db7888b043b4da 100644
--- a/llvm/include/llvm/Support/TargetOpcodes.def
+++ b/llvm/include/llvm/Support/TargetOpcodes.def
@@ -226,10 +226,6 @@ HANDLE_TARGET_OPCODE(ICALL_BRANCH_FUNNEL)
 // barrier, but does not correspond to any generated instruction.
 HANDLE_TARGET_OPCODE(MEMBARRIER)
 
-// Provides information about what jump table the following indirect branch is
-// using.
-HANDLE_TARGET_OPCODE(JUMP_TABLE_DEBUG_INFO)
-
 /// The following generic opcodes are not supposed to appear after ISel.
 /// This is something we might want to relax, but for now, this is convenient
 /// to produce diagnostics.

diff  --git a/llvm/include/llvm/Target/Target.td b/llvm/include/llvm/Target/Target.td
index d384cebdddd478..06521fa584cb06 100644
--- a/llvm/include/llvm/Target/Target.td
+++ b/llvm/include/llvm/Target/Target.td
@@ -1410,14 +1410,6 @@ def MEMBARRIER : StandardPseudoInstruction {
   let Size = 0;
   let isMeta = true;
 }
-def JUMP_TABLE_DEBUG_INFO : StandardPseudoInstruction {
-  let OutOperandList = (outs);
-  let InOperandList = (ins i64imm:$jti);
-  let AsmString = "";
-  let hasSideEffects = false;
-  let Size = 0;
-  let isMeta = true;
-}
 
 // Generic opcodes used in GlobalISel.
 include "llvm/Target/GenericOpcodes.td"

diff  --git a/llvm/include/llvm/Target/TargetSelectionDAG.td b/llvm/include/llvm/Target/TargetSelectionDAG.td
index 78a7fc76a64eaa..6ef59cf47b839c 100644
--- a/llvm/include/llvm/Target/TargetSelectionDAG.td
+++ b/llvm/include/llvm/Target/TargetSelectionDAG.td
@@ -650,9 +650,6 @@ def readcyclecounter : SDNode<"ISD::READCYCLECOUNTER", SDTIntLeaf,
 def membarrier : SDNode<"ISD::MEMBARRIER", SDTNone,
                         [SDNPHasChain, SDNPSideEffect]>;
 
-def jump_table_debug_info : SDNode<"ISD::JUMP_TABLE_DEBUG_INFO", SDTNone,
-                        [SDNPHasChain]>;
-
 def atomic_fence : SDNode<"ISD::ATOMIC_FENCE" , SDTAtomicFence,
                           [SDNPHasChain, SDNPSideEffect]>;
 

diff  --git a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
index 6292586c5b875e..a39abf4a3aaf4b 100644
--- a/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
+++ b/llvm/lib/CodeGen/AsmPrinter/AsmPrinter.cpp
@@ -1726,10 +1726,6 @@ void AsmPrinter::emitFunctionBody() {
       case TargetOpcode::MEMBARRIER:
         OutStreamer->emitRawComment("MEMBARRIER");
         break;
-      case TargetOpcode::JUMP_TABLE_DEBUG_INFO:
-        // This instruction is only used to note jump table debug info, it's
-        // purely meta information.
-        break;
       default:
         emitInstruction(&MI);
         if (CanDoExtraAnalysis) {
@@ -4170,18 +4166,3 @@ unsigned int AsmPrinter::getUnitLengthFieldByteSize() const {
   return dwarf::getUnitLengthFieldByteSize(
       OutStreamer->getContext().getDwarfFormat());
 }
-
-std::tuple<const MCSymbol *, uint64_t, const MCSymbol *,
-           codeview::JumpTableEntrySize>
-AsmPrinter::getCodeViewJumpTableInfo(int JTI, const MachineInstr *BranchInstr,
-                                     const MCSymbol *BranchLabel) const {
-  const auto TLI = MF->getSubtarget().getTargetLowering();
-  const auto BaseExpr =
-      TLI->getPICJumpTableRelocBaseExpr(MF, JTI, MMI->getContext());
-  const auto Base = &cast<MCSymbolRefExpr>(BaseExpr)->getSymbol();
-
-  // By default, for the architectures that support CodeView,
-  // EK_LabelDifference32 is implemented as an Int32 from the base address.
-  return std::make_tuple(Base, 0, BranchLabel,
-                         codeview::JumpTableEntrySize::Int32);
-}

diff  --git a/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp b/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp
index 31877d922c7de5..8161de57b58e06 100644
--- a/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp
+++ b/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.cpp
@@ -26,7 +26,6 @@
 #include "llvm/CodeGen/MachineInstr.h"
 #include "llvm/CodeGen/MachineModuleInfo.h"
 #include "llvm/CodeGen/TargetFrameLowering.h"
-#include "llvm/CodeGen/TargetLowering.h"
 #include "llvm/CodeGen/TargetRegisterInfo.h"
 #include "llvm/CodeGen/TargetSubtargetInfo.h"
 #include "llvm/Config/llvm-config.h"
@@ -1244,8 +1243,6 @@ void CodeViewDebug::emitDebugInfoForFunction(const Function *GV,
     if (SP != nullptr)
       emitDebugInfoForUDTs(LocalUDTs);
 
-    emitDebugInfoForJumpTables(FI);
-
     // We're done with this function.
     emitEndSymbolRecord(SymbolKind::S_PROC_ID_END);
   }
@@ -1581,11 +1578,6 @@ void CodeViewDebug::beginFunctionImpl(const MachineFunction *MF) {
       }
     }
   }
-
-  // Mark branches that may potentially be using jump tables with labels.
-  bool isThumb = Triple(MMI->getModule()->getTargetTriple()).getArch() ==
-                 llvm::Triple::ArchType::thumb;
-  discoverJumpTableBranches(MF, isThumb);
 }
 
 static bool shouldEmitUdt(const DIType *T) {
@@ -3091,10 +3083,6 @@ void CodeViewDebug::endFunctionImpl(const MachineFunction *MF) {
     }
   }
 
-  bool isThumb = Triple(MMI->getModule()->getTargetTriple()).getArch() ==
-                 llvm::Triple::ArchType::thumb;
-  collectDebugInfoForJumpTables(MF, isThumb);
-
   CurFn->Annotations = MF->getCodeViewAnnotations();
 
   CurFn->End = Asm->getFunctionEnd();
@@ -3454,125 +3442,3 @@ void CodeViewDebug::emitDebugInfoForGlobal(const CVGlobalVariable &CVGV) {
     emitConstantSymbolRecord(DIGV->getType(), Value, QualifiedName);
   }
 }
-
-void forEachJumpTableBranch(
-    const MachineFunction *MF, bool isThumb,
-    const std::function<void(const MachineJumpTableInfo &, const MachineInstr &,
-                             int64_t)> &Callback) {
-  auto JTI = MF->getJumpTableInfo();
-  if (JTI && !JTI->isEmpty()) {
-    for (const auto &MBB : *MF) {
-      // Search for indirect branches...
-      const auto LastMI = MBB.getFirstTerminator();
-      if (LastMI != MBB.end() && LastMI->isIndirectBranch()) {
-        bool foundJTI = false;
-        if (isThumb) {
-          // ... that directly use jump table operands.
-          // NOTE: ARM uses pattern matching to lower its BR_JT SDNode to
-          // machine instructions, hence inserting a JUMP_TABLE_DEBUG_INFO node
-          // interferes with this process *but* the resulting pseudo-instruction
-          // uses a Jump Table operand, so extract the jump table index directly
-          // from that.
-          for (const auto &MO : LastMI->operands()) {
-            if (MO.isJTI()) {
-              foundJTI = true;
-              Callback(*JTI, *LastMI, MO.getIndex());
-              break;
-            }
-          }
-        } else {
-          // ... that have jump table debug info.
-          // NOTE: The debug info is inserted as a JUMP_TABLE_DEBUG_INFO node
-          // when lowering the BR_JT SDNode to an indirect branch.
-          for (auto I = MBB.instr_rbegin(), E = MBB.instr_rend(); I != E; ++I) {
-            if (I->isJumpTableDebugInfo()) {
-              foundJTI = true;
-              Callback(*JTI, *LastMI, I->getOperand(0).getImm());
-              break;
-            }
-          }
-        }
-        assert(foundJTI);
-        (void)foundJTI;
-      }
-    }
-  }
-}
-
-void CodeViewDebug::discoverJumpTableBranches(const MachineFunction *MF,
-                                              bool isThumb) {
-  forEachJumpTableBranch(
-      MF, isThumb,
-      [this](const MachineJumpTableInfo &, const MachineInstr &BranchMI,
-             int64_t) { requestLabelBeforeInsn(&BranchMI); });
-}
-
-void CodeViewDebug::collectDebugInfoForJumpTables(const MachineFunction *MF,
-                                                  bool isThumb) {
-  forEachJumpTableBranch(
-      MF, isThumb,
-      [this, MF](const MachineJumpTableInfo &JTI, const MachineInstr &BranchMI,
-                 int64_t JumpTableIndex) {
-        // For label-
diff erence jump tables, find the base expression.
-        // Otherwise the jump table uses an absolute address (so no base
-        // is required).
-        const MCSymbol *Base;
-        uint64_t BaseOffset = 0;
-        const MCSymbol *Branch = getLabelBeforeInsn(&BranchMI);
-        JumpTableEntrySize EntrySize;
-        switch (JTI.getEntryKind()) {
-        case MachineJumpTableInfo::EK_Custom32:
-        case MachineJumpTableInfo::EK_GPRel32BlockAddress:
-        case MachineJumpTableInfo::EK_GPRel64BlockAddress:
-          llvm_unreachable(
-              "EK_Custom32, EK_GPRel32BlockAddress, and "
-              "EK_GPRel64BlockAddress should never be emitted for COFF");
-        case MachineJumpTableInfo::EK_BlockAddress:
-          // Each entry is an absolute address.
-          EntrySize = JumpTableEntrySize::Pointer;
-          Base = nullptr;
-          break;
-        case MachineJumpTableInfo::EK_Inline:
-        case MachineJumpTableInfo::EK_LabelDifference32:
-          // Ask the AsmPrinter.
-          std::tie(Base, BaseOffset, Branch, EntrySize) =
-              Asm->getCodeViewJumpTableInfo(JumpTableIndex, &BranchMI, Branch);
-          break;
-        }
-
-        CurFn->JumpTables.push_back(
-            {EntrySize, Base, BaseOffset, Branch,
-             MF->getJTISymbol(JumpTableIndex, MMI->getContext()),
-             JTI.getJumpTables()[JumpTableIndex].MBBs.size()});
-      });
-}
-
-void CodeViewDebug::emitDebugInfoForJumpTables(const FunctionInfo &FI) {
-  for (auto JumpTable : FI.JumpTables) {
-    MCSymbol *JumpTableEnd = beginSymbolRecord(SymbolKind::S_ARMSWITCHTABLE);
-    if (JumpTable.Base) {
-      OS.AddComment("Base offset");
-      OS.emitCOFFSecRel32(JumpTable.Base, JumpTable.BaseOffset);
-      OS.AddComment("Base section index");
-      OS.emitCOFFSectionIndex(JumpTable.Base);
-    } else {
-      OS.AddComment("Base offset");
-      OS.emitInt32(0);
-      OS.AddComment("Base section index");
-      OS.emitInt16(0);
-    }
-    OS.AddComment("Switch type");
-    OS.emitInt16(static_cast<uint16_t>(JumpTable.EntrySize));
-    OS.AddComment("Branch offset");
-    OS.emitCOFFSecRel32(JumpTable.Branch, /*Offset=*/0);
-    OS.AddComment("Table offset");
-    OS.emitCOFFSecRel32(JumpTable.Table, /*Offset=*/0);
-    OS.AddComment("Branch section index");
-    OS.emitCOFFSectionIndex(JumpTable.Branch);
-    OS.AddComment("Table section index");
-    OS.emitCOFFSectionIndex(JumpTable.Table);
-    OS.AddComment("Entries count");
-    OS.emitInt32(JumpTable.TableSize);
-    endSymbolRecord(JumpTableEnd);
-  }
-}

diff  --git a/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.h b/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.h
index eb274d25de9197..1455ac417824c8 100644
--- a/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.h
+++ b/llvm/lib/CodeGen/AsmPrinter/CodeViewDebug.h
@@ -23,7 +23,6 @@
 #include "llvm/ADT/SmallVector.h"
 #include "llvm/CodeGen/DbgEntityHistoryCalculator.h"
 #include "llvm/CodeGen/DebugHandlerBase.h"
-#include "llvm/CodeGen/MachineJumpTableInfo.h"
 #include "llvm/DebugInfo/CodeView/CodeView.h"
 #include "llvm/DebugInfo/CodeView/GlobalTypeTableBuilder.h"
 #include "llvm/DebugInfo/CodeView/TypeIndex.h"
@@ -134,15 +133,6 @@ class LLVM_LIBRARY_VISIBILITY CodeViewDebug : public DebugHandlerBase {
     StringRef Name;
   };
 
-  struct JumpTableInfo {
-    codeview::JumpTableEntrySize EntrySize;
-    const MCSymbol *Base;
-    uint64_t BaseOffset;
-    const MCSymbol *Branch;
-    const MCSymbol *Table;
-    size_t TableSize;
-  };
-
   // For each function, store a vector of labels to its instructions, as well as
   // to the end of the function.
   struct FunctionInfo {
@@ -170,8 +160,6 @@ class LLVM_LIBRARY_VISIBILITY CodeViewDebug : public DebugHandlerBase {
     std::vector<std::tuple<const MCSymbol *, const MCSymbol *, const DIType *>>
         HeapAllocSites;
 
-    std::vector<JumpTableInfo> JumpTables;
-
     const MCSymbol *Begin = nullptr;
     const MCSymbol *End = nullptr;
     unsigned FuncId = 0;
@@ -490,10 +478,6 @@ class LLVM_LIBRARY_VISIBILITY CodeViewDebug : public DebugHandlerBase {
 
   unsigned getPointerSizeInBytes();
 
-  void discoverJumpTableBranches(const MachineFunction *MF, bool isThumb);
-  void collectDebugInfoForJumpTables(const MachineFunction *MF, bool isThumb);
-  void emitDebugInfoForJumpTables(const FunctionInfo &FI);
-
 protected:
   /// Gather pre-function debug information.
   void beginFunctionImpl(const MachineFunction *MF) override;

diff  --git a/llvm/lib/CodeGen/MachineCSE.cpp b/llvm/lib/CodeGen/MachineCSE.cpp
index 89c4562e8d3803..8bd7eae1221444 100644
--- a/llvm/lib/CodeGen/MachineCSE.cpp
+++ b/llvm/lib/CodeGen/MachineCSE.cpp
@@ -407,7 +407,7 @@ bool MachineCSE::PhysRegDefsReach(MachineInstr *CSMI, MachineInstr *MI,
 
 bool MachineCSE::isCSECandidate(MachineInstr *MI) {
   if (MI->isPosition() || MI->isPHI() || MI->isImplicitDef() || MI->isKill() ||
-      MI->isInlineAsm() || MI->isDebugInstr() || MI->isJumpTableDebugInfo())
+      MI->isInlineAsm() || MI->isDebugInstr())
     return false;
 
   // Ignore copies.

diff  --git a/llvm/lib/CodeGen/MachineInstr.cpp b/llvm/lib/CodeGen/MachineInstr.cpp
index 1cc06e7434f732..13673fbeec5851 100644
--- a/llvm/lib/CodeGen/MachineInstr.cpp
+++ b/llvm/lib/CodeGen/MachineInstr.cpp
@@ -1263,8 +1263,7 @@ bool MachineInstr::isSafeToMove(AAResults *AA, bool &SawStore) const {
   }
 
   if (isPosition() || isDebugInstr() || isTerminator() ||
-      mayRaiseFPException() || hasUnmodeledSideEffects() ||
-      isJumpTableDebugInfo())
+      mayRaiseFPException() || hasUnmodeledSideEffects())
     return false;
 
   // See if this instruction does a load.  If so, we have to guarantee that the

diff  --git a/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp b/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
index c53176e3a28327..e3f8b30021e468 100644
--- a/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/LegalizeDAG.cpp
@@ -3905,7 +3905,6 @@ bool SelectionDAGLegalize::ExpandNode(SDNode *Node) {
     SDValue Chain = Node->getOperand(0);
     SDValue Table = Node->getOperand(1);
     SDValue Index = Node->getOperand(2);
-    int JTI = cast<JumpTableSDNode>(Table.getNode())->getIndex();
 
     const DataLayout &TD = DAG.getDataLayout();
     EVT PTy = TLI.getPointerTy(TD);
@@ -3940,7 +3939,7 @@ bool SelectionDAGLegalize::ExpandNode(SDNode *Node) {
                           TLI.getPICJumpTableRelocBase(Table, DAG));
     }
 
-    Tmp1 = TLI.expandIndirectJTBranch(dl, LD.getValue(1), Addr, JTI, DAG);
+    Tmp1 = TLI.expandIndirectJTBranch(dl, LD.getValue(1), Addr, DAG);
     Results.push_back(Tmp1);
     break;
   }

diff  --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
index 7763572a045fc5..b466d72c4e97db 100644
--- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAG.cpp
@@ -1845,13 +1845,6 @@ SDValue SelectionDAG::getJumpTable(int JTI, EVT VT, bool isTarget,
   return SDValue(N, 0);
 }
 
-SDValue SelectionDAG::getJumpTableDebugInfo(int JTI, SDValue Chain,
-                                            const SDLoc &DL) {
-  EVT PTy = getTargetLoweringInfo().getPointerTy(getDataLayout());
-  return getNode(ISD::JUMP_TABLE_DEBUG_INFO, DL, MVT::Glue, Chain,
-                 getTargetConstant(static_cast<uint64_t>(JTI), DL, PTy, true));
-}
-
 SDValue SelectionDAG::getConstantPool(const Constant *C, EVT VT,
                                       MaybeAlign Alignment, int Offset,
                                       bool isTarget, unsigned TargetFlags) {

diff  --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGDumper.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGDumper.cpp
index 55ed461cae4fd3..c5a269ec1b96cf 100644
--- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGDumper.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGDumper.cpp
@@ -125,8 +125,6 @@ std::string SDNode::getOperationName(const SelectionDAG *G) const {
   case ISD::GlobalTLSAddress:           return "GlobalTLSAddress";
   case ISD::FrameIndex:                 return "FrameIndex";
   case ISD::JumpTable:                  return "JumpTable";
-  case ISD::JUMP_TABLE_DEBUG_INFO:
-    return "JUMP_TABLE_DEBUG_INFO";
   case ISD::GLOBAL_OFFSET_TABLE:        return "GLOBAL_OFFSET_TABLE";
   case ISD::RETURNADDR:                 return "RETURNADDR";
   case ISD::ADDROFRETURNADDR:           return "ADDROFRETURNADDR";

diff  --git a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
index 2c5f371ffbe33a..2951bdf0ef9acd 100644
--- a/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
@@ -2437,13 +2437,6 @@ GetVBR(uint64_t Val, const unsigned char *MatcherTable, unsigned &Idx) {
   return Val;
 }
 
-void SelectionDAGISel::Select_JUMP_TABLE_DEBUG_INFO(SDNode *N) {
-  SDLoc dl(N);
-  CurDAG->SelectNodeTo(N, TargetOpcode::JUMP_TABLE_DEBUG_INFO, MVT::Glue,
-                       CurDAG->getTargetConstant(N->getConstantOperandVal(1),
-                                                 dl, MVT::i64, true));
-}
-
 /// When a match is complete, this method updates uses of interior chain results
 /// to use the new results.
 void SelectionDAGISel::UpdateChains(
@@ -2996,9 +2989,6 @@ void SelectionDAGISel::SelectCodeCommon(SDNode *NodeToMatch,
   case ISD::PATCHPOINT:
     Select_PATCHPOINT(NodeToMatch);
     return;
-  case ISD::JUMP_TABLE_DEBUG_INFO:
-    Select_JUMP_TABLE_DEBUG_INFO(NodeToMatch);
-    return;
   }
 
   assert(!NodeToMatch->isMachineOpcode() && "Node already selected!");

diff  --git a/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp b/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
index dbb4b102f93ae6..d162c019aac8ae 100644
--- a/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
+++ b/llvm/lib/CodeGen/SelectionDAG/TargetLowering.cpp
@@ -18,7 +18,6 @@
 #include "llvm/CodeGen/MachineFrameInfo.h"
 #include "llvm/CodeGen/MachineFunction.h"
 #include "llvm/CodeGen/MachineJumpTableInfo.h"
-#include "llvm/CodeGen/MachineModuleInfoImpls.h"
 #include "llvm/CodeGen/MachineRegisterInfo.h"
 #include "llvm/CodeGen/SelectionDAG.h"
 #include "llvm/CodeGen/TargetRegisterInfo.h"
@@ -473,17 +472,6 @@ TargetLowering::getPICJumpTableRelocBaseExpr(const MachineFunction *MF,
   return MCSymbolRefExpr::create(MF->getJTISymbol(JTI, Ctx), Ctx);
 }
 
-SDValue TargetLowering::expandIndirectJTBranch(const SDLoc &dl, SDValue Value,
-                                               SDValue Addr, int JTI,
-                                               SelectionDAG &DAG) const {
-  SDValue Chain = Value;
-  // Jump table debug info is only needed if CodeView is enabled.
-  if (DAG.getTarget().getTargetTriple().isOSBinFormatCOFF()) {
-    Chain = DAG.getJumpTableDebugInfo(JTI, Chain, dl);
-  }
-  return DAG.getNode(ISD::BRIND, dl, MVT::Other, Chain, Addr);
-}
-
 bool
 TargetLowering::isOffsetFoldingLegal(const GlobalAddressSDNode *GA) const {
   const TargetMachine &TM = getTargetMachine();

diff  --git a/llvm/lib/DebugInfo/CodeView/EnumTables.cpp b/llvm/lib/DebugInfo/CodeView/EnumTables.cpp
index 7e3087373bfa0b..b2f0099bd01c5b 100644
--- a/llvm/lib/DebugInfo/CodeView/EnumTables.cpp
+++ b/llvm/lib/DebugInfo/CodeView/EnumTables.cpp
@@ -434,20 +434,6 @@ static const EnumEntry<uint16_t> LabelTypeEnum[] = {
     CV_ENUM_CLASS_ENT(LabelType, Far),
 };
 
-static const EnumEntry<uint16_t> JumpTableEntrySizeNames[] = {
-    CV_ENUM_CLASS_ENT(JumpTableEntrySize, Int8),
-    CV_ENUM_CLASS_ENT(JumpTableEntrySize, UInt8),
-    CV_ENUM_CLASS_ENT(JumpTableEntrySize, Int16),
-    CV_ENUM_CLASS_ENT(JumpTableEntrySize, UInt16),
-    CV_ENUM_CLASS_ENT(JumpTableEntrySize, Int32),
-    CV_ENUM_CLASS_ENT(JumpTableEntrySize, UInt32),
-    CV_ENUM_CLASS_ENT(JumpTableEntrySize, Pointer),
-    CV_ENUM_CLASS_ENT(JumpTableEntrySize, UInt8ShiftLeft),
-    CV_ENUM_CLASS_ENT(JumpTableEntrySize, UInt16ShiftLeft),
-    CV_ENUM_CLASS_ENT(JumpTableEntrySize, Int8ShiftLeft),
-    CV_ENUM_CLASS_ENT(JumpTableEntrySize, Int16ShiftLeft),
-};
-
 namespace llvm {
 namespace codeview {
 
@@ -573,9 +559,5 @@ ArrayRef<EnumEntry<uint16_t>> getLabelTypeEnum() {
   return ArrayRef(LabelTypeEnum);
 }
 
-ArrayRef<EnumEntry<uint16_t>> getJumpTableEntrySizeNames() {
-  return ArrayRef(JumpTableEntrySizeNames);
-}
-
 } // end namespace codeview
 } // end namespace llvm

diff  --git a/llvm/lib/DebugInfo/CodeView/SymbolDumper.cpp b/llvm/lib/DebugInfo/CodeView/SymbolDumper.cpp
index c86fb244f6887b..cfb12dbae8457c 100644
--- a/llvm/lib/DebugInfo/CodeView/SymbolDumper.cpp
+++ b/llvm/lib/DebugInfo/CodeView/SymbolDumper.cpp
@@ -643,20 +643,6 @@ Error CVSymbolDumperImpl::visitKnownRecord(CVSymbol &CVR,
   return Error::success();
 }
 
-Error CVSymbolDumperImpl::visitKnownRecord(CVSymbol &CVR,
-                                           JumpTableSym &JumpTable) {
-  W.printHex("BaseOffset", JumpTable.BaseOffset);
-  W.printNumber("BaseSegment", JumpTable.BaseSegment);
-  W.printEnum("SwitchType", static_cast<uint16_t>(JumpTable.SwitchType),
-              getJumpTableEntrySizeNames());
-  W.printHex("BranchOffset", JumpTable.BranchOffset);
-  W.printHex("TableOffset", JumpTable.TableOffset);
-  W.printNumber("BranchSegment", JumpTable.BranchSegment);
-  W.printNumber("TableSegment", JumpTable.TableSegment);
-  W.printNumber("EntriesCount", JumpTable.EntriesCount);
-  return Error::success();
-}
-
 Error CVSymbolDumperImpl::visitUnknownSymbol(CVSymbol &CVR) {
   W.printNumber("Length", CVR.length());
   return Error::success();

diff  --git a/llvm/lib/DebugInfo/CodeView/SymbolRecordMapping.cpp b/llvm/lib/DebugInfo/CodeView/SymbolRecordMapping.cpp
index b5e366b965a955..3b627930e27167 100644
--- a/llvm/lib/DebugInfo/CodeView/SymbolRecordMapping.cpp
+++ b/llvm/lib/DebugInfo/CodeView/SymbolRecordMapping.cpp
@@ -483,19 +483,6 @@ Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
   return Error::success();
 }
 
-Error SymbolRecordMapping::visitKnownRecord(CVSymbol &CVR,
-                                            JumpTableSym &JumpTable) {
-  error(IO.mapInteger(JumpTable.BaseOffset));
-  error(IO.mapInteger(JumpTable.BaseSegment));
-  error(IO.mapEnum(JumpTable.SwitchType));
-  error(IO.mapInteger(JumpTable.BranchOffset));
-  error(IO.mapInteger(JumpTable.TableOffset));
-  error(IO.mapInteger(JumpTable.BranchSegment));
-  error(IO.mapInteger(JumpTable.TableSegment));
-  error(IO.mapInteger(JumpTable.EntriesCount));
-  return Error::success();
-}
-
 RegisterId codeview::decodeFramePtrReg(EncodedFramePtrReg EncodedReg,
                                        CPUType CPU) {
   assert(unsigned(EncodedReg) < 4);

diff  --git a/llvm/lib/DebugInfo/CodeView/TypeIndexDiscovery.cpp b/llvm/lib/DebugInfo/CodeView/TypeIndexDiscovery.cpp
index e903a37a8c8e08..682747a2b81fe2 100644
--- a/llvm/lib/DebugInfo/CodeView/TypeIndexDiscovery.cpp
+++ b/llvm/lib/DebugInfo/CodeView/TypeIndexDiscovery.cpp
@@ -442,7 +442,6 @@ static bool discoverTypeIndices(ArrayRef<uint8_t> Content, SymbolKind Kind,
   case SymbolKind::S_THUNK32:
   case SymbolKind::S_FRAMECOOKIE:
   case SymbolKind::S_UNAMESPACE:
-  case SymbolKind::S_ARMSWITCHTABLE:
     break;
   // Scope ending symbols.
   case SymbolKind::S_END:

diff  --git a/llvm/lib/DebugInfo/LogicalView/Readers/LVCodeViewVisitor.cpp b/llvm/lib/DebugInfo/LogicalView/Readers/LVCodeViewVisitor.cpp
index fdb089c1a5f716..e4f5f533262bf0 100644
--- a/llvm/lib/DebugInfo/LogicalView/Readers/LVCodeViewVisitor.cpp
+++ b/llvm/lib/DebugInfo/LogicalView/Readers/LVCodeViewVisitor.cpp
@@ -1688,23 +1688,6 @@ Error LVSymbolVisitor::visitKnownRecord(CVSymbol &Record,
   return Error::success();
 }
 
-// S_ARMSWITCHTABLE
-Error LVSymbolVisitor::visitKnownRecord(CVSymbol &CVR,
-                                        JumpTableSym &JumpTable) {
-  LLVM_DEBUG({
-    W.printHex("BaseOffset", JumpTable.BaseOffset);
-    W.printNumber("BaseSegment", JumpTable.BaseSegment);
-    W.printFlags("SwitchType", static_cast<uint16_t>(JumpTable.SwitchType),
-                 getJumpTableEntrySizeNames());
-    W.printHex("BranchOffset", JumpTable.BranchOffset);
-    W.printHex("TableOffset", JumpTable.TableOffset);
-    W.printNumber("BranchSegment", JumpTable.BranchSegment);
-    W.printNumber("TableSegment", JumpTable.TableSegment);
-    W.printNumber("EntriesCount", JumpTable.EntriesCount);
-  });
-  return Error::success();
-}
-
 #undef DEBUG_TYPE
 #define DEBUG_TYPE "CodeViewLogicalVisitor"
 

diff  --git a/llvm/lib/ObjectYAML/CodeViewYAMLSymbols.cpp b/llvm/lib/ObjectYAML/CodeViewYAMLSymbols.cpp
index 64e1a58aa71a8a..8d2028abfe9b41 100644
--- a/llvm/lib/ObjectYAML/CodeViewYAMLSymbols.cpp
+++ b/llvm/lib/ObjectYAML/CodeViewYAMLSymbols.cpp
@@ -61,7 +61,6 @@ LLVM_YAML_DECLARE_ENUM_TRAITS(CPUType)
 LLVM_YAML_DECLARE_ENUM_TRAITS(RegisterId)
 LLVM_YAML_DECLARE_ENUM_TRAITS(TrampolineType)
 LLVM_YAML_DECLARE_ENUM_TRAITS(ThunkOrdinal)
-LLVM_YAML_DECLARE_ENUM_TRAITS(JumpTableEntrySize)
 
 LLVM_YAML_STRONG_TYPEDEF(StringRef, TypeName)
 
@@ -208,15 +207,6 @@ void ScalarEnumerationTraits<FrameCookieKind>::enumeration(
   }
 }
 
-void ScalarEnumerationTraits<JumpTableEntrySize>::enumeration(
-    IO &io, JumpTableEntrySize &FC) {
-  auto ThunkNames = getJumpTableEntrySizeNames();
-  for (const auto &E : ThunkNames) {
-    io.enumCase(FC, E.Name.str().c_str(),
-                static_cast<JumpTableEntrySize>(E.Value));
-  }
-}
-
 namespace llvm {
 namespace yaml {
 template <> struct MappingTraits<LocalVariableAddrRange> {
@@ -596,17 +586,6 @@ template <> void SymbolRecordImpl<AnnotationSym>::map(IO &IO) {
   IO.mapRequired("Strings", Symbol.Strings);
 }
 
-template <> void SymbolRecordImpl<JumpTableSym>::map(IO &IO) {
-  IO.mapRequired("BaseOffset", Symbol.BaseOffset);
-  IO.mapRequired("BaseSegment", Symbol.BaseSegment);
-  IO.mapRequired("SwitchType", Symbol.SwitchType);
-  IO.mapRequired("BranchOffset", Symbol.BranchOffset);
-  IO.mapRequired("TableOffset", Symbol.TableOffset);
-  IO.mapRequired("BranchSegment", Symbol.BranchSegment);
-  IO.mapRequired("TableSegment", Symbol.TableSegment);
-  IO.mapRequired("EntriesCount", Symbol.EntriesCount);
-}
-
 } // end namespace detail
 } // end namespace CodeViewYAML
 } // end namespace llvm

diff  --git a/llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp b/llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp
index aa7efc65949ae4..4d714df5bb7f60 100644
--- a/llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp
+++ b/llvm/lib/Target/AArch64/AArch64AsmPrinter.cpp
@@ -89,10 +89,6 @@ class AArch64AsmPrinter : public AsmPrinter {
 
   void emitStartOfAsmFile(Module &M) override;
   void emitJumpTableInfo() override;
-  std::tuple<const MCSymbol *, uint64_t, const MCSymbol *,
-             codeview::JumpTableEntrySize>
-  getCodeViewJumpTableInfo(int JTI, const MachineInstr *BranchInstr,
-                           const MCSymbol *BranchLabel) const override;
 
   void emitFunctionEntryLabel() override;
 
@@ -1066,30 +1062,6 @@ void AArch64AsmPrinter::emitJumpTableInfo() {
   }
 }
 
-std::tuple<const MCSymbol *, uint64_t, const MCSymbol *,
-           codeview::JumpTableEntrySize>
-AArch64AsmPrinter::getCodeViewJumpTableInfo(int JTI,
-                                            const MachineInstr *BranchInstr,
-                                            const MCSymbol *BranchLabel) const {
-  const auto AFI = MF->getInfo<AArch64FunctionInfo>();
-  const auto Base = AArch64FI->getJumpTableEntryPCRelSymbol(JTI);
-  codeview::JumpTableEntrySize EntrySize;
-  switch (AFI->getJumpTableEntrySize(JTI)) {
-  case 1:
-    EntrySize = codeview::JumpTableEntrySize::UInt8ShiftLeft;
-    break;
-  case 2:
-    EntrySize = codeview::JumpTableEntrySize::UInt16ShiftLeft;
-    break;
-  case 4:
-    EntrySize = codeview::JumpTableEntrySize::Int32;
-    break;
-  default:
-    llvm_unreachable("Unexpected jump table entry size");
-  }
-  return std::make_tuple(Base, 0, BranchLabel, EntrySize);
-}
-
 void AArch64AsmPrinter::emitFunctionEntryLabel() {
   if (MF->getFunction().getCallingConv() == CallingConv::AArch64_VectorCall ||
       MF->getFunction().getCallingConv() ==

diff  --git a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
index 9cfa16fd70ede6..1ccd9d3a73da0d 100644
--- a/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
+++ b/llvm/lib/Target/AArch64/AArch64ISelLowering.cpp
@@ -9426,8 +9426,8 @@ SDValue AArch64TargetLowering::LowerBR_JT(SDValue Op,
   SDNode *Dest =
       DAG.getMachineNode(AArch64::JumpTableDest32, DL, MVT::i64, MVT::i64, JT,
                          Entry, DAG.getTargetJumpTable(JTI, MVT::i32));
-  SDValue JTInfo = DAG.getJumpTableDebugInfo(JTI, Op.getOperand(0), DL);
-  return DAG.getNode(ISD::BRIND, DL, MVT::Other, JTInfo, SDValue(Dest, 0));
+  return DAG.getNode(ISD::BRIND, DL, MVT::Other, Op.getOperand(0),
+                     SDValue(Dest, 0));
 }
 
 SDValue AArch64TargetLowering::LowerConstantPool(SDValue Op,

diff  --git a/llvm/lib/Target/AArch64/GISel/AArch64InstructionSelector.cpp b/llvm/lib/Target/AArch64/GISel/AArch64InstructionSelector.cpp
index df1695b0cc5161..2425a9a60c6373 100644
--- a/llvm/lib/Target/AArch64/GISel/AArch64InstructionSelector.cpp
+++ b/llvm/lib/Target/AArch64/GISel/AArch64InstructionSelector.cpp
@@ -3632,9 +3632,6 @@ bool AArch64InstructionSelector::selectBrJT(MachineInstr &I,
   auto JumpTableInst = MIB.buildInstr(AArch64::JumpTableDest32,
                                       {TargetReg, ScratchReg}, {JTAddr, Index})
                            .addJumpTableIndex(JTI);
-  // Save the jump table info.
-  MIB.buildInstr(TargetOpcode::JUMP_TABLE_DEBUG_INFO, {},
-                 {static_cast<int64_t>(JTI)});
   // Build the indirect branch.
   MIB.buildInstr(AArch64::BR, {}, {TargetReg});
   I.eraseFromParent();

diff  --git a/llvm/lib/Target/ARM/ARMAsmPrinter.cpp b/llvm/lib/Target/ARM/ARMAsmPrinter.cpp
index c2aff4687d3b1f..69df1d12aa8e28 100644
--- a/llvm/lib/Target/ARM/ARMAsmPrinter.cpp
+++ b/llvm/lib/Target/ARM/ARMAsmPrinter.cpp
@@ -1117,50 +1117,6 @@ void ARMAsmPrinter::emitJumpTableTBInst(const MachineInstr *MI,
   emitAlignment(Align(2));
 }
 
-std::tuple<const MCSymbol *, uint64_t, const MCSymbol *,
-           codeview::JumpTableEntrySize>
-ARMAsmPrinter::getCodeViewJumpTableInfo(int JTI,
-                                        const MachineInstr *BranchInstr,
-                                        const MCSymbol *BranchLabel) const {
-  codeview::JumpTableEntrySize EntrySize;
-  const MCSymbol *BaseLabel;
-  uint64_t BaseOffset = 0;
-  switch (BranchInstr->getOpcode()) {
-  case ARM::BR_JTadd:
-  case ARM::BR_JTr:
-  case ARM::tBR_JTr:
-    // Word relative to the jump table address.
-    EntrySize = codeview::JumpTableEntrySize::UInt32;
-    BaseLabel = GetARMJTIPICJumpTableLabel(JTI);
-    break;
-  case ARM::tTBH_JT:
-  case ARM::t2TBH_JT:
-    // half-word shifted left, relative to *after* the branch instruction.
-    EntrySize = codeview::JumpTableEntrySize::UInt16ShiftLeft;
-    BranchLabel = GetCPISymbol(BranchInstr->getOperand(3).getImm());
-    BaseLabel = BranchLabel;
-    BaseOffset = 4;
-    break;
-  case ARM::tTBB_JT:
-  case ARM::t2TBB_JT:
-    // byte shifted left, relative to *after* the branch instruction.
-    EntrySize = codeview::JumpTableEntrySize::UInt8ShiftLeft;
-    BranchLabel = GetCPISymbol(BranchInstr->getOperand(3).getImm());
-    BaseLabel = BranchLabel;
-    BaseOffset = 4;
-    break;
-  case ARM::t2BR_JT:
-    // Direct jump.
-    BaseLabel = nullptr;
-    EntrySize = codeview::JumpTableEntrySize::Pointer;
-    break;
-  default:
-    llvm_unreachable("Unknown jump table instruction");
-  }
-
-  return std::make_tuple(BaseLabel, BaseOffset, BranchLabel, EntrySize);
-}
-
 void ARMAsmPrinter::EmitUnwindingInstruction(const MachineInstr *MI) {
   assert(MI->getFlag(MachineInstr::FrameSetup) &&
       "Only instruction which are involved into frame setup code are allowed");

diff  --git a/llvm/lib/Target/ARM/ARMAsmPrinter.h b/llvm/lib/Target/ARM/ARMAsmPrinter.h
index 33b4417aa9b809..bd2d9c7621196a 100644
--- a/llvm/lib/Target/ARM/ARMAsmPrinter.h
+++ b/llvm/lib/Target/ARM/ARMAsmPrinter.h
@@ -89,10 +89,6 @@ class LLVM_LIBRARY_VISIBILITY ARMAsmPrinter : public AsmPrinter {
   void emitJumpTableTBInst(const MachineInstr *MI, unsigned OffsetWidth);
   void emitInstruction(const MachineInstr *MI) override;
   bool runOnMachineFunction(MachineFunction &F) override;
-  std::tuple<const MCSymbol *, uint64_t, const MCSymbol *,
-             codeview::JumpTableEntrySize>
-  getCodeViewJumpTableInfo(int JTI, const MachineInstr *BranchInstr,
-                           const MCSymbol *BranchLabel) const override;
 
   void emitConstantPool() override {
     // we emit constant pools customly!

diff  --git a/llvm/lib/Target/X86/X86ISelLowering.cpp b/llvm/lib/Target/X86/X86ISelLowering.cpp
index de0b852771c4a8..ffe4c5cba848c3 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.cpp
+++ b/llvm/lib/Target/X86/X86ISelLowering.cpp
@@ -55962,9 +55962,8 @@ bool X86TargetLowering::isTypeDesirableForOp(unsigned Opc, EVT VT) const {
   return true;
 }
 
-SDValue X86TargetLowering::expandIndirectJTBranch(const SDLoc &dl,
+SDValue X86TargetLowering::expandIndirectJTBranch(const SDLoc& dl,
                                                   SDValue Value, SDValue Addr,
-                                                  int JTI,
                                                   SelectionDAG &DAG) const {
   const Module *M = DAG.getMachineFunction().getMMI().getModule();
   Metadata *IsCFProtectionSupported = M->getModuleFlag("cf-protection-branch");
@@ -55973,11 +55972,10 @@ SDValue X86TargetLowering::expandIndirectJTBranch(const SDLoc &dl,
     // notrack prefix to the indirect branch.
     // In order to do that we create NT_BRIND SDNode.
     // Upon ISEL, the pattern will convert it to jmp with NoTrack prefix.
-    SDValue JTInfo = DAG.getJumpTableDebugInfo(JTI, Value, dl);
-    return DAG.getNode(X86ISD::NT_BRIND, dl, MVT::Other, JTInfo, Addr);
+    return DAG.getNode(X86ISD::NT_BRIND, dl, MVT::Other, Value, Addr);
   }
 
-  return TargetLowering::expandIndirectJTBranch(dl, Value, Addr, JTI, DAG);
+  return TargetLowering::expandIndirectJTBranch(dl, Value, Addr, DAG);
 }
 
 TargetLowering::AndOrSETCCFoldKind

diff  --git a/llvm/lib/Target/X86/X86ISelLowering.h b/llvm/lib/Target/X86/X86ISelLowering.h
index 8cf186214a0ec0..bba457239547cf 100644
--- a/llvm/lib/Target/X86/X86ISelLowering.h
+++ b/llvm/lib/Target/X86/X86ISelLowering.h
@@ -1562,8 +1562,9 @@ namespace llvm {
     bool lowerInterleavedStore(StoreInst *SI, ShuffleVectorInst *SVI,
                                unsigned Factor) const override;
 
-    SDValue expandIndirectJTBranch(const SDLoc &dl, SDValue Value, SDValue Addr,
-                                   int JTI, SelectionDAG &DAG) const override;
+    SDValue expandIndirectJTBranch(const SDLoc& dl, SDValue Value,
+                                   SDValue Addr, SelectionDAG &DAG)
+                                   const override;
 
     Align getPrefLoopAlignment(MachineLoop *ML) const override;
 

diff  --git a/llvm/test/CodeGen/AArch64/GlobalISel/select-jump-table-brjt-constrain.mir b/llvm/test/CodeGen/AArch64/GlobalISel/select-jump-table-brjt-constrain.mir
index 4ac009de19113f..28160398af28fa 100644
--- a/llvm/test/CodeGen/AArch64/GlobalISel/select-jump-table-brjt-constrain.mir
+++ b/llvm/test/CodeGen/AArch64/GlobalISel/select-jump-table-brjt-constrain.mir
@@ -35,7 +35,6 @@ body:             |
   ; CHECK-NEXT: {{  $}}
   ; CHECK-NEXT:   [[MOVaddrJT:%[0-9]+]]:gpr64common = MOVaddrJT target-flags(aarch64-page) %jump-table.0, target-flags(aarch64-pageoff, aarch64-nc) %jump-table.0
   ; CHECK-NEXT:   early-clobber %5:gpr64, early-clobber %6:gpr64sp = JumpTableDest32 [[MOVaddrJT]], [[SUBREG_TO_REG]], %jump-table.0
-  ; CHECK-NEXT:   JUMP_TABLE_DEBUG_INFO 0
   ; CHECK-NEXT:   BR %5
   ; CHECK-NEXT: {{  $}}
   ; CHECK-NEXT: bb.2:

diff  --git a/llvm/test/CodeGen/AArch64/GlobalISel/select-jump-table-brjt.mir b/llvm/test/CodeGen/AArch64/GlobalISel/select-jump-table-brjt.mir
index afc5ea2e64b7e1..ba026f555b7ed3 100644
--- a/llvm/test/CodeGen/AArch64/GlobalISel/select-jump-table-brjt.mir
+++ b/llvm/test/CodeGen/AArch64/GlobalISel/select-jump-table-brjt.mir
@@ -71,7 +71,6 @@ body:             |
   ; CHECK-NEXT:   [[COPY2:%[0-9]+]]:gpr32 = COPY $wzr
   ; CHECK-NEXT:   [[MOVaddrJT:%[0-9]+]]:gpr64common = MOVaddrJT target-flags(aarch64-page) %jump-table.0, target-flags(aarch64-pageoff, aarch64-nc) %jump-table.0
   ; CHECK-NEXT:   early-clobber %17:gpr64, early-clobber %18:gpr64sp = JumpTableDest32 [[MOVaddrJT]], [[SUBREG_TO_REG]], %jump-table.0
-  ; CHECK-NEXT:   JUMP_TABLE_DEBUG_INFO 0
   ; CHECK-NEXT:   BR %17
   ; CHECK-NEXT: {{  $}}
   ; CHECK-NEXT: bb.2.sw.bb:

diff  --git a/llvm/test/DebugInfo/COFF/jump-table.ll b/llvm/test/DebugInfo/COFF/jump-table.ll
deleted file mode 100644
index a1f16f48962f99..00000000000000
--- a/llvm/test/DebugInfo/COFF/jump-table.ll
+++ /dev/null
@@ -1,262 +0,0 @@
-; REQUIRES: arm-registered-target
-; REQUIRES: aarch64-registered-target
-; REQUIRES: x86-registered-target
-; RUN: llc -mtriple=i686-windows < %s | FileCheck %s --check-prefixes=CHECK,I686,NOTA32
-; RUN: llc -mtriple=x86_64-windows < %s | FileCheck %s --check-prefixes=CHECK,X64,NOTA32
-; RUN: llc -mtriple=aarch64-windows < %s | FileCheck %s --check-prefixes=CHECK,A64,NOTA32
-; RUN: llc -mtriple=thumbv7a-windows < %s | FileCheck %s --check-prefixes=CHECK,A32
-; RUN: llc -mtriple=x86_64-windows -filetype=obj < %s | llvm-readobj - --codeview | FileCheck %s --check-prefixes=CV
-
-; Generated by clang++ -S -c -std=c++11 -emit-llvm -g from the following C++11 source:
-; extern "C" void f1();
-; extern "C" void f2();
-; extern "C" void f3();
-; extern "C" void f4();
-; extern "C" void f5();
-; extern "C" void func(int i){
-;     switch (i) {
-;         case 0: f1(); break;
-;         case 1: f2(); break;
-;         case 2: f3(); break;
-;         case 3: f4(); break;
-;     }
-;     switch (i) {
-;         case 1: f2(); break;
-;         case 2: f3(); break;
-;         case 3: f4(); break;
-;         case 4: f5(); break;
-;         case 5: f1(); break;
-;     }
-; }
-
-; i686 entries are absolute addresses (Base = 0, SwitchType = Pointer).
-; x86_64 entries are fixed-size and relative to the jump table (Base = Table,
-;   SwitchType = Int32).
-; aarch64 entries are variable-sized and relative to the first entry's BB if
-;   compressed (Base = Branch+0x4, SwitchType = UInt8ShiftLeft/UInt16ShiftLeft)
-;   otherwise relative to the ADR instruction (Base = Branch-0xc, SwitchType =
-;   Int32).
-; thumbv7a entries are either absolute addresses (Base = 0, SwitchType =
-;   Pointer) OR variable-sized and relative to *after* the branch instruction
-;   (Base = Branch+0x4, SwitchType = UInt8ShiftLeft/UInt16ShiftLeft/UInt32) but
-;   there appears to be a bug where the offsets are always 0.
-
-; Verify branch labels match what's in the CodeView
-; X64:            .Ltmp1:
-; X64-NEXT:       jmpq    *%{{.*}}
-; X64:            .Ltmp4:
-; X64-NEXT:       jmpq    *%{{.*}}
-; A32:            .LCPI0_0:
-; A32-NEXT        add     pc, r{{.*}}
-; NOTE: thumbv7a places the jump tables just after the branch, so verify the other branch below
-; A64:            .Ltmp1:
-; A64-NEXT:       br      x{{.*}}
-; A64:            .Ltmp4:
-; A64-NEXT:       br      x{{.*}}
-
-; Verify jump table have the same entry size, base offset and shift as what's in the CodeView
-; CHECK:          {{\.?}}LJTI0_0:
-; I686-NEXT:      .long   LBB0_[[#]]
-; X64-NEXT:       .long   .LBB0_[[#]]-.LJTI0_0
-; A32-NEXT:       .byte   (($MBB0_[[#]])-(.LCPI0_0+4))/2
-; A64-NEXT:       .byte   (.LBB0_[[FIRSTBLOCK:[0-9]+]]-.LBB0_[[FIRSTBLOCK]])>>2
-; NOTE: thumbv7a places the jump tables just after the branch, so check for the other branch now
-; A32:            .LCPI0_1:
-; A32-NEXT        add     pc, r{{.*}}
-; CHECK:          {{\.?}}LJTI0_1:
-; I686-NEXT:      .long   LBB0_[[#]]
-; X64-NEXT:       .long   .LBB0_[[#]]-.LJTI0_1
-; A32-NEXT:       .byte   (($MBB0_[[#]])-(.LCPI0_1+4))/2
-; A64-NEXT:       .byte   (.LBB0_[[SECONDBLOCK:[0-9]+]]-.LBB0_[[SECONDBLOCK]])>>2
-
-; Verify CodeView
-; CHECK:          [[INT16:\.short|\.hword]]	4441        [[COMMENT:#|//|@]] Record kind: S_ARMSWITCHTABLE
-; I686-NEXT:      .long 0                               [[COMMENT]] Base offset
-; I686-NEXT:      .short 0                              [[COMMENT]] Base section index
-; X64-NEXT:       .secrel32	.LJTI0_0                    [[COMMENT]] Base offset
-; X64-NEXT:       .secidx	.LJTI0_0                      [[COMMENT]] Base section index
-; A32-NEXT:       .secrel32	.LCPI0_0+4                  [[COMMENT]] Base offset
-; A32-NEXT:       .secidx	.LCPI0_0                      [[COMMENT]] Base section index
-; A64-NEXT:       .secrel32	.LBB0_[[FIRSTBLOCK]]        [[COMMENT]] Base offset
-; A64-NEXT:       .secidx	.LBB0_[[FIRSTBLOCK]]          [[COMMENT]] Base section index
-; I686-NEXT:      .short	6                             [[COMMENT]] Switch type
-; X64-NEXT:       .short	4                             [[COMMENT]] Switch type
-; A32-NEXT:       .short	7                             [[COMMENT]] Switch type
-; A64-NEXT:       .hword	7                             [[COMMENT]] Switch type
-; NOTA32-NEXT:    .secrel32	{{\.?}}Ltmp1                [[COMMENT]] Branch offset
-; A32-NEXT:       .secrel32	.LCPI0_0                    [[COMMENT]] Branch offset
-; CHECK-NEXT:     .secrel32	{{\.?}}LJTI0_0              [[COMMENT]] Table offset
-; NOTA32-NEXT:    .secidx	{{\.?}}Ltmp1                  [[COMMENT]] Branch section index
-; A32-NEXT:       .secidx	.LCPI0_0                      [[COMMENT]] Branch section index
-; CHECK-NEXT:     .secidx	{{\.?}}LJTI0_0                [[COMMENT]] Table section index
-; CHECK-NEXT:     [[INT32:\.long|\.word]]	4             [[COMMENT]] Entries count
-; CHECK:          [[INT16]]	4441                        [[COMMENT]] Record kind: S_ARMSWITCHTABLE
-; I686-NEXT:      .long 0                               [[COMMENT]] Base offset
-; I686-NEXT:      .short 0                              [[COMMENT]] Base section index
-; X64-NEXT:       .secrel32	.LJTI0_1                    [[COMMENT]] Base offset
-; X64-NEXT:       .secidx	.LJTI0_1                      [[COMMENT]] Base section index
-; A32-NEXT:       .secrel32	.LCPI0_1+4                  [[COMMENT]] Base offset
-; A32-NEXT:       .secidx	.LCPI0_1                      [[COMMENT]] Base section index
-; A64-NEXT:       .secrel32	.LBB0_[[SECONDBLOCK]]       [[COMMENT]] Base offset
-; A64-NEXT:       .secidx	.LBB0_[[SECONDBLOCK]]         [[COMMENT]] Base section index
-; I686-NEXT:      .short	6                             [[COMMENT]] Switch type
-; X64-NEXT:       .short	4                             [[COMMENT]] Switch type
-; A32-NEXT:       .short	7                             [[COMMENT]] Switch type
-; A64-NEXT:       .hword	7                             [[COMMENT]] Switch type
-; NOTA32-NEXT:    .secrel32	{{\.?}}Ltmp4                [[COMMENT]] Branch offset
-; A32-NEXT:       .secrel32	.LCPI0_1                    [[COMMENT]] Branch offset
-; CHECK-NEXT:     .secrel32	{{\.?}}LJTI0_1              [[COMMENT]] Table offset
-; NOTA32-NEXT:    .secidx	{{\.?}}Ltmp4                  [[COMMENT]] Branch section index
-; A32-NEXT:       .secidx	.LCPI0_1                      [[COMMENT]] Branch section index
-; CHECK-NEXT:     .secidx	{{\.?}}LJTI0_1                [[COMMENT]] Table section index
-; CHECK-NEXT:     [[INT32]]	5                           [[COMMENT]] Entries count
-; CHECK-NOT:      [[INT16]]	4441                        [[COMMENT]] Record kind: S_ARMSWITCHTABLE
-
-; Verify CodeView as dumped by llvm-readobj
-; CV:      Subsection [
-; CV:         SubSectionType: Symbols (0xF1)
-; CV:         GlobalProcIdSym {
-; CV:           DisplayName: func
-; CV-NOT:     GlobalProcIdSym
-; CV:           JumpTableSym {
-; CV-NEXT:        Kind: S_ARMSWITCHTABLE (0x1159)
-; CV-NEXT:        BaseOffset: 0x0
-; CV-NEXT:        BaseSegment: 0
-; CV-NEXT:        SwitchType: Int32 (0x4)
-; CV-NEXT:        BranchOffset: 0x23
-; CV-NEXT:        TableOffset: 0x0
-; CV-NEXT:        BranchSegment: 0
-; CV-NEXT:        TableSegment: 0
-; CV-NEXT:        EntriesCount: 4
-; CV-NEXT:      }
-; CV-NEXT:      JumpTableSym {
-; CV-NEXT:        Kind: S_ARMSWITCHTABLE (0x1159)
-; CV-NEXT:        BaseOffset: 0x10
-; CV-NEXT:        BaseSegment: 0
-; CV-NEXT:        SwitchType: Int32 (0x4)
-; CV-NEXT:        BranchOffset: 0x5A
-; CV-NEXT:        TableOffset: 0x10
-; CV-NEXT:        BranchSegment: 0
-; CV-NEXT:        TableSegment: 0
-; CV-NEXT:        EntriesCount: 5
-; CV-NEXT:      }
-; CV-NOT:       JumpTableSym {
-
-source_filename = ".\\jump-table.cpp"
-target datalayout = "e-m:w-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
-target triple = "x86_64-pc-windows-msvc19.35.32216"
-
-; Function Attrs: mustprogress noinline optnone uwtable
-define dso_local void @func(i32 noundef %0) #0 !dbg !8 {
-  %2 = alloca i32, align 4
-  store i32 %0, ptr %2, align 4
-  call void @llvm.dbg.declare(metadata ptr %2, metadata !14, metadata !DIExpression()), !dbg !15
-  %3 = load i32, ptr %2, align 4, !dbg !16
-  switch i32 %3, label %8 [
-    i32 0, label %4
-    i32 1, label %5
-    i32 2, label %6
-    i32 3, label %7
-  ], !dbg !16
-
-4:                                                ; preds = %1
-  call void @f1(), !dbg !17
-  br label %8, !dbg !17
-
-5:                                                ; preds = %1
-  call void @f2(), !dbg !19
-  br label %8, !dbg !19
-
-6:                                                ; preds = %1
-  call void @f3(), !dbg !20
-  br label %8, !dbg !20
-
-7:                                                ; preds = %1
-  call void @f4(), !dbg !21
-  br label %8, !dbg !21
-
-8:                                                ; preds = %1, %7, %6, %5, %4
-  %9 = load i32, ptr %2, align 4, !dbg !22
-  switch i32 %9, label %15 [
-    i32 1, label %10
-    i32 2, label %11
-    i32 3, label %12
-    i32 4, label %13
-    i32 5, label %14
-  ], !dbg !22
-
-10:                                               ; preds = %8
-  call void @f2(), !dbg !23
-  br label %15, !dbg !23
-
-11:                                               ; preds = %8
-  call void @f3(), !dbg !25
-  br label %15, !dbg !25
-
-12:                                               ; preds = %8
-  call void @f4(), !dbg !26
-  br label %15, !dbg !26
-
-13:                                               ; preds = %8
-  call void @f5(), !dbg !27
-  br label %15, !dbg !27
-
-14:                                               ; preds = %8
-  call void @f1(), !dbg !28
-  br label %15, !dbg !28
-
-15:                                               ; preds = %8, %14, %13, %12, %11, %10
-  ret void, !dbg !29
-}
-
-; Function Attrs: nocallback nofree nosync nounwind readnone speculatable willreturn
-declare void @llvm.dbg.declare(metadata, metadata, metadata) #1
-
-declare dso_local void @f1() #2
-
-declare dso_local void @f2() #2
-
-declare dso_local void @f3() #2
-
-declare dso_local void @f4() #2
-
-declare dso_local void @f5() #2
-
-attributes #0 = { mustprogress noinline optnone uwtable "frame-pointer"="none" "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
-attributes #1 = { nocallback nofree nosync nounwind readnone speculatable willreturn }
-attributes #2 = { "frame-pointer"="none" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
-
-!llvm.dbg.cu = !{!0}
-!llvm.module.flags = !{!2, !3, !4, !5, !6}
-!llvm.ident = !{!7}
-
-!0 = distinct !DICompileUnit(language: DW_LANG_C_plus_plus_11, file: !1, producer: "clang version 15.0.1", isOptimized: false, runtimeVersion: 0, emissionKind: FullDebug, splitDebugInlining: false, nameTableKind: None)
-!1 = !DIFile(filename: "jump-table.cpp", directory: "C:\\llvm", checksumkind: CSK_MD5, checksum: "35610c7104c8080f83e2bf6a02dabfc9")
-!2 = !{i32 2, !"CodeView", i32 1}
-!3 = !{i32 2, !"Debug Info Version", i32 3}
-!4 = !{i32 1, !"wchar_size", i32 2}
-!5 = !{i32 7, !"PIC Level", i32 2}
-!6 = !{i32 7, !"uwtable", i32 2}
-!7 = !{!"clang version 15.0.1"}
-!8 = distinct !DISubprogram(name: "func", scope: !9, file: !9, line: 6, type: !10, scopeLine: 6, flags: DIFlagPrototyped, spFlags: DISPFlagDefinition, unit: !0, retainedNodes: !13)
-!9 = !DIFile(filename: ".\\jump-table.cpp", directory: "C:\\llvm", checksumkind: CSK_MD5, checksum: "35610c7104c8080f83e2bf6a02dabfc9")
-!10 = !DISubroutineType(types: !11)
-!11 = !{null, !12}
-!12 = !DIBasicType(name: "int", size: 32, encoding: DW_ATE_signed)
-!13 = !{}
-!14 = !DILocalVariable(name: "i", arg: 1, scope: !8, file: !9, line: 6, type: !12)
-!15 = !DILocation(line: 6, scope: !8)
-!16 = !DILocation(line: 7, scope: !8)
-!17 = !DILocation(line: 8, scope: !18)
-!18 = distinct !DILexicalBlock(scope: !8, file: !9, line: 7)
-!19 = !DILocation(line: 9, scope: !18)
-!20 = !DILocation(line: 10, scope: !18)
-!21 = !DILocation(line: 11, scope: !18)
-!22 = !DILocation(line: 13, scope: !8)
-!23 = !DILocation(line: 14, scope: !24)
-!24 = distinct !DILexicalBlock(scope: !8, file: !9, line: 13)
-!25 = !DILocation(line: 15, scope: !24)
-!26 = !DILocation(line: 16, scope: !24)
-!27 = !DILocation(line: 17, scope: !24)
-!28 = !DILocation(line: 18, scope: !24)
-!29 = !DILocation(line: 20, scope: !8)

diff  --git a/llvm/tools/llvm-pdbutil/MinimalSymbolDumper.cpp b/llvm/tools/llvm-pdbutil/MinimalSymbolDumper.cpp
index 6b6ba48f9214d8..96c3d49072b68c 100644
--- a/llvm/tools/llvm-pdbutil/MinimalSymbolDumper.cpp
+++ b/llvm/tools/llvm-pdbutil/MinimalSymbolDumper.cpp
@@ -358,23 +358,6 @@ static std::string formatGaps(uint32_t IndentLevel,
   return typesetItemList(GapStrs, 7, IndentLevel, ", ");
 }
 
-static std::string formatJumpTableEntrySize(JumpTableEntrySize EntrySize) {
-  switch (EntrySize) {
-    RETURN_CASE(JumpTableEntrySize, Int8, "int8");
-    RETURN_CASE(JumpTableEntrySize, UInt8, "uin8");
-    RETURN_CASE(JumpTableEntrySize, Int16, "int16");
-    RETURN_CASE(JumpTableEntrySize, UInt16, "uint16");
-    RETURN_CASE(JumpTableEntrySize, Int32, "int32");
-    RETURN_CASE(JumpTableEntrySize, UInt32, "uint32");
-    RETURN_CASE(JumpTableEntrySize, Pointer, "pointer");
-    RETURN_CASE(JumpTableEntrySize, UInt8ShiftLeft, "uint8shl");
-    RETURN_CASE(JumpTableEntrySize, UInt16ShiftLeft, "uint16shl");
-    RETURN_CASE(JumpTableEntrySize, Int8ShiftLeft, "int8shl");
-    RETURN_CASE(JumpTableEntrySize, Int16ShiftLeft, "int16shl");
-  }
-  return formatUnknownEnum(EntrySize);
-}
-
 Error MinimalSymbolDumper::visitSymbolBegin(codeview::CVSymbol &Record) {
   return visitSymbolBegin(Record, 0);
 }
@@ -922,17 +905,3 @@ Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR,
                                                    Annot.Strings));
   return Error::success();
 }
-
-Error MinimalSymbolDumper::visitKnownRecord(CVSymbol &CVR,
-                                            JumpTableSym &JumpTable) {
-  AutoIndent Indent(P, 7);
-  P.formatLine(
-      "base = {0}, switchtype = {1}, branch = {2}, table = {3}, entriescount = "
-      "{4}",
-      formatSegmentOffset(JumpTable.BaseSegment, JumpTable.BaseOffset),
-      formatJumpTableEntrySize(JumpTable.SwitchType),
-      formatSegmentOffset(JumpTable.BranchSegment, JumpTable.BranchOffset),
-      formatSegmentOffset(JumpTable.TableSegment, JumpTable.TableOffset),
-      JumpTable.EntriesCount);
-  return Error::success();
-}


        


More information about the llvm-commits mailing list