diff --git a/llvm/test/tools/llvm-objdump/BPF/disassemble-symbolize-operands.s b/llvm/test/tools/llvm-objdump/BPF/disassemble-symbolize-operands.s index a52ed56d680e3..38c10de67c447 100644 --- a/llvm/test/tools/llvm-objdump/BPF/disassemble-symbolize-operands.s +++ b/llvm/test/tools/llvm-objdump/BPF/disassemble-symbolize-operands.s @@ -15,10 +15,10 @@ main: exit # CHECK:
: -# CHECK-NEXT: : -# CHECK-NEXT: if r1 > 0x2a goto +0x2 +# CHECK-NEXT: : +# CHECK-NEXT: if r1 > 0x2a goto +0x2 # CHECK-NEXT: r1 -= 0xa # CHECK-NEXT: goto -0x3
-# CHECK-NEXT: : +# CHECK-NEXT: : # CHECK-NEXT: r0 = 0x0 # CHECK-NEXT: exit diff --git a/llvm/test/tools/llvm-objdump/ELF/PowerPC/disassemble-symbolize-operands.ll b/llvm/test/tools/llvm-objdump/ELF/PowerPC/disassemble-symbolize-operands.ll index 4d75a874d616d..61c7f74e513bf 100644 --- a/llvm/test/tools/llvm-objdump/ELF/PowerPC/disassemble-symbolize-operands.ll +++ b/llvm/test/tools/llvm-objdump/ELF/PowerPC/disassemble-symbolize-operands.ll @@ -10,19 +10,19 @@ ; CHECK-NEXT: 28: blr ; CHECK-LABEL: : -; CHECK: 6c: b 0x74 -; CHECK-NEXT: : -; CHECK-NEXT: 70: bf 8, 0x94 +; CHECK: 6c: b 0x74 ; CHECK-NEXT: : +; CHECK-NEXT: 70: bf 8, 0x94 +; CHECK-NEXT: : ; CHECK-NEXT: 74: clrldi 3, 30, 32 ; CHECK-NEXT: 78: bl 0x0 ; CHECK-NEXT: 7c: mr 30, 3 ; CHECK-NEXT: 80: cmplwi 30, 11 -; CHECK-NEXT: 84: bt 0, 0x70 +; CHECK-NEXT: 84: bt 0, 0x70 ; CHECK-NEXT: 88: bl 0x88 ; CHECK-NEXT: 8c: nop -; CHECK-NEXT: 90: b 0x70 -; CHECK-NEXT: : +; CHECK-NEXT: 90: b 0x70 +; CHECK-NEXT: : ; CHECK-NEXT: 94: ld 30, 32(1) define internal i32 @internal(i32 %a) { diff --git a/llvm/test/tools/llvm-objdump/X86/elf-disassemble-symbololize-operands.yaml b/llvm/test/tools/llvm-objdump/X86/elf-disassemble-symbololize-operands.yaml index 959b6d8681f8b..c3dcc2dfd2e1e 100644 --- a/llvm/test/tools/llvm-objdump/X86/elf-disassemble-symbololize-operands.yaml +++ b/llvm/test/tools/llvm-objdump/X86/elf-disassemble-symbololize-operands.yaml @@ -7,20 +7,20 @@ ## Expect to find the branch labels and global variable name. # ATT: <_start>: # ATT-NEXT: pushq %rax -# ATT-NEXT: : -# ATT-NEXT: cmpl , %eax -# ATT-NEXT: jge -# ATT-NEXT: jmp # ATT-NEXT: : +# ATT-NEXT: cmpl , %eax +# ATT-NEXT: jge +# ATT-NEXT: jmp +# ATT-NEXT: : # ATT-NEXT: retq # INTEL: <_start>: # INTEL-NEXT: push rax -# INTEL-NEXT: : -# INTEL-NEXT: cmp eax, dword ptr -# INTEL-NEXT: jge -# INTEL-NEXT: jmp # INTEL-NEXT: : +# INTEL-NEXT: cmp eax, dword ptr +# INTEL-NEXT: jge +# INTEL-NEXT: jmp +# INTEL-NEXT: : # INTEL-NEXT: ret --- !ELF diff --git a/llvm/test/tools/llvm-objdump/XCOFF/disassemble-symbolize-operands.ll b/llvm/test/tools/llvm-objdump/XCOFF/disassemble-symbolize-operands.ll index 2cad8fa4b6df8..7a14f62e47297 100644 --- a/llvm/test/tools/llvm-objdump/XCOFF/disassemble-symbolize-operands.ll +++ b/llvm/test/tools/llvm-objdump/XCOFF/disassemble-symbolize-operands.ll @@ -13,19 +13,19 @@ ; CHECK-NEXT: 14: blr ; CHECK-LABEL: <.foo>: -; CHECK: 5c: b 0x64 -; CHECK-NEXT: : -; CHECK-NEXT: 60: bf 8, 0x84 +; CHECK: 5c: b 0x64 ; CHECK-NEXT: : +; CHECK-NEXT: 60: bf 8, 0x84 +; CHECK-NEXT: : ; CHECK-NEXT: 64: bl 0x0 <.internal> ; CHECK-NEXT: 68: cmplwi 3, 11 -; CHECK-NEXT: 6c: bt 0, 0x60 +; CHECK-NEXT: 6c: bt 0, 0x60 ; CHECK-NEXT: 70: mr 31, 3 ; CHECK-NEXT: 74: bl 0x0 <.extern> ; CHECK-NEXT: 78: nop ; CHECK-NEXT: 7c: mr 3, 31 -; CHECK-NEXT: 80: b 0x60 -; CHECK-NEXT: : +; CHECK-NEXT: 80: b 0x60 +; CHECK-NEXT: : ; CHECK-NEXT: 84: lwz 31, 60(1) define internal i32 @internal(i32 %a) { diff --git a/llvm/tools/llvm-objdump/llvm-objdump.cpp b/llvm/tools/llvm-objdump/llvm-objdump.cpp index 5c84fd5380c4d..578e0d475be02 100644 --- a/llvm/tools/llvm-objdump/llvm-objdump.cpp +++ b/llvm/tools/llvm-objdump/llvm-objdump.cpp @@ -1500,8 +1500,7 @@ collectLocalBranchTargets(ArrayRef Bytes, MCInstrAnalysis *MIA, if (MIA) MIA->resetState(); - Labels.clear(); - unsigned LabelCount = 0; + std::set Targets; Start += SectionAddr; End += SectionAddr; const bool isXCOFF = STI->getTargetTriple().isOSBinFormatXCOFF(); @@ -1521,13 +1520,13 @@ collectLocalBranchTargets(ArrayRef Bytes, MCInstrAnalysis *MIA, uint64_t Target; bool TargetKnown = MIA->evaluateBranch(Inst, Index, Size, Target); if (TargetKnown && (Target >= Start && Target < End) && - !Labels.count(Target)) { + !Targets.count(Target)) { // On PowerPC and AIX, a function call is encoded as a branch to 0. // On other PowerPC platforms (ELF), a function call is encoded as // a branch to self. Do not add a label for these cases. if (!(isPPC && ((Target == 0 && isXCOFF) || (Target == Index && !isXCOFF)))) - Labels[Target] = ("L" + Twine(LabelCount++)).str(); + Targets.insert(Target); } MIA->updateState(Inst, Index); } else @@ -1535,6 +1534,10 @@ collectLocalBranchTargets(ArrayRef Bytes, MCInstrAnalysis *MIA, } Index += Size; } + + Labels.clear(); + for (auto [Idx, Target] : enumerate(Targets)) + Labels[Target] = ("L" + Twine(Idx)).str(); } // Create an MCSymbolizer for the target and add it to the MCDisassembler.