## Test that in the presence of SHT_LLVM_BB_ADDR_MAP sections which also
## contain PGO data, --symbolize-operands is able to label the basic blocks
## correctly.

## Check the case where we only have entry counts.

# RUN: yaml2obj --docnum=1 %s -o %t1
# RUN: llvm-objdump %t1 -d --symbolize-operands --no-show-raw-insn --no-leading-addr | \
# RUN:   FileCheck %s --check-prefix=ENTRYCOUNT

--- !ELF
FileHeader:
  Class:   ELFCLASS64
  Data:    ELFDATA2LSB
  Type:    ET_EXEC
  Machine: EM_X86_64
Sections:
  - Name:    .text.foo
    Type:    SHT_PROGBITS
    Address: 0x0
    Flags:   [SHF_ALLOC, SHF_EXECINSTR]
    Content: '50'
  - Name:   .llvm_bb_addr_map.foo
    Type:   SHT_LLVM_BB_ADDR_MAP
    Link:   .text.foo
    Entries:
      - Version: 2
        Feature: 0x1
        BBRanges:
          - BaseAddress: 0x0
            BBEntries:
              - ID:            3
                AddressOffset: 0x0
                Size:          0x1
                Metadata:      0x1
    PGOAnalyses:
      - FuncEntryCount: 1000
Symbols:
  - Name:    foo
    Section: .text.foo
    Value:   0x0

# ENTRYCOUNT: <foo>:
# ENTRYCOUNT: <BB3> (Entry count: 1000):

## Check the case where we have entry points and block frequency information

# RUN: yaml2obj %s --docnum=2 -o %t2
# RUN: llvm-objdump %t2 -d --symbolize-operands --no-show-raw-insn --no-leading-addr | \
# RUN:   FileCheck --match-full-lines --strict-whitespace %s --check-prefix=ENTRYCOUNT-BLOCKFREQ
# RUN: llvm-objdump %t2 -d --symbolize-operands --pretty-pgo-analysis-map --no-show-raw-insn --no-leading-addr | \
# RUN:   FileCheck --match-full-lines --strict-whitespace %s --check-prefix=ENTRYCOUNT-BLOCKFREQ-PRETTY

--- !ELF
FileHeader:
  Class:   ELFCLASS64
  Data:    ELFDATA2LSB
  Type:    ET_EXEC
  Machine: EM_X86_64
Sections:
  - Name:    .text.foo
    Type:    SHT_PROGBITS
    Address: 0x0
    Flags:   [SHF_ALLOC, SHF_EXECINSTR]
    Content: '503b0505200000907d02ebf5c3'
  - Name:   .llvm_bb_addr_map.foo
    Type:   SHT_LLVM_BB_ADDR_MAP
    Link:   .text.foo
    Entries:
      - Version: 2
        Feature: 0x3
        BBRanges:
          - BaseAddress: 0x0
            BBEntries:
              - ID:            3
                AddressOffset: 0x0
                Size:          0x1
                Metadata:      0x1
              - ID:            1
                AddressOffset: 0x0
                Size:          0x6
                Metadata:      0x0
              - ID:            2
                AddressOffset: 0x1
                Size:          0x4
                Metadata:      0x0
              - ID:            5
                AddressOffset: 0x0
                Size:          0x1
                Metadata:      0x2
    PGOAnalyses:
      - FuncEntryCount: 1000
        PGOBBEntries:
          - BBFreq: 1000
          - BBFreq: 133
          - BBFreq: 18
          - BBFreq: 1000
Symbols:
  - Name:    foo
    Section: .text.foo
    Value:   0x0

# ENTRYCOUNT-BLOCKFREQ:<foo>:
# ENTRYCOUNT-BLOCKFREQ:<BB3> (Entry count: 1000, Frequency: 1000):
# ENTRYCOUNT-BLOCKFREQ:<BB1> (Frequency: 133):
# ENTRYCOUNT-BLOCKFREQ:<BB2> (Frequency: 18):
# ENTRYCOUNT-BLOCKFREQ:<BB5> (Frequency: 1000):

# ENTRYCOUNT-BLOCKFREQ-PRETTY:<foo>:
# ENTRYCOUNT-BLOCKFREQ-PRETTY:<BB3> (Entry count: 1000, Frequency: 1.0):
# ENTRYCOUNT-BLOCKFREQ-PRETTY:<BB1> (Frequency: 0.133):
# ENTRYCOUNT-BLOCKFREQ-PRETTY:<BB2> (Frequency: 0.018):
# ENTRYCOUNT-BLOCKFREQ-PRETTY:<BB5> (Frequency: 1.0):

## Check the case where we have entry points, block frequency, and branch
## proabability information.

# RUN: yaml2obj %s --docnum=3 -o %t3
# RUN: llvm-objdump %t3 -d --symbolize-operands --no-show-raw-insn --no-leading-addr | \
# RUN:   FileCheck --match-full-lines --strict-whitespace %s --check-prefix=ENTRY-FREQ-PROB
# RUN: llvm-objdump %t3 -d --symbolize-operands --pretty-pgo-analysis-map --no-show-raw-insn --no-leading-addr | \
# RUN:   FileCheck --match-full-lines --strict-whitespace %s --check-prefix=ENTRY-FREQ-PROB-PRETTY
# RUN: llvm-objdump %t3 -d --pretty-pgo-analysis-map --no-show-raw-insn --no-leading-addr 2>&1 | \
# RUN:   FileCheck %s --check-prefix=MISSING-SYMBOLIZE-OPERANDS

--- !ELF
FileHeader:
  Class:   ELFCLASS64
  Data:    ELFDATA2LSB
  Type:    ET_EXEC
  Machine: EM_X86_64
Sections:
  - Name:    .text.foo
    Type:    SHT_PROGBITS
    Address: 0x0
    Flags:   [SHF_ALLOC, SHF_EXECINSTR]
    Content: '503b0505200000907d02ebf5c3'
  - Name:   .llvm_bb_addr_map.foo
    Type:   SHT_LLVM_BB_ADDR_MAP
    Link:   .text.foo
    Entries:
      - Version: 2
        Feature: 0x7
        BBRanges:
          - BaseAddress: 0x0
            BBEntries:
              - ID:            3
                AddressOffset: 0x0
                Size:          0x1
                Metadata:      0x1
              - ID:            1
                AddressOffset: 0x0
                Size:          0x6
                Metadata:      0x0
              - ID:            2
                AddressOffset: 0x1
                Size:          0x4
                Metadata:      0x0
              - ID:            5
                AddressOffset: 0x0
                Size:          0x1
                Metadata:      0x2
    PGOAnalyses:
      - FuncEntryCount: 1000
        PGOBBEntries:
          - BBFreq: 1000
            Successors:
            - ID:          1
              BrProb:      0x10000000
            - ID:          2
              BrProb:      0x15000000
            - ID:          3
              BrProb:      0x50000000
          - BBFreq: 133
            Successors:
            - ID:          2
              BrProb:      0x10000000
            - ID:          3
              BrProb:      0x70000000
          - BBFreq: 18
            Successors:
            - ID:          3
              BrProb:      0x80000000
          - BBFreq: 1000
            Successors:    []
Symbols:
  - Name:    foo
    Section: .text.foo
    Value:   0x0

# ENTRY-FREQ-PROB:<foo>:
# ENTRY-FREQ-PROB:<BB3> (Entry count: 1000, Frequency: 1000, Successors: BB1:10000000, BB2:15000000, BB3:50000000):
# ENTRY-FREQ-PROB:<BB1> (Frequency: 133, Successors: BB2:10000000, BB3:70000000):
# ENTRY-FREQ-PROB:<BB2> (Frequency: 18, Successors: BB3:80000000):
# ENTRY-FREQ-PROB:<BB5> (Frequency: 1000):

# ENTRY-FREQ-PROB-PRETTY:<foo>:
# ENTRY-FREQ-PROB-PRETTY:<BB3> (Entry count: 1000, Frequency: 1.0, Successors: BB1:[0x10000000 / 0x80000000 = 12.50%], BB2:[0x15000000 / 0x80000000 = 16.41%], BB3:[0x50000000 / 0x80000000 = 62.50%]):
# ENTRY-FREQ-PROB-PRETTY:<BB1> (Frequency: 0.133, Successors: BB2:[0x10000000 / 0x80000000 = 12.50%], BB3:[0x70000000 / 0x80000000 = 87.50%]):
# ENTRY-FREQ-PROB-PRETTY:<BB2> (Frequency: 0.018, Successors: BB3:[0x80000000 / 0x80000000 = 100.00%]):
# ENTRY-FREQ-PROB-PRETTY:<BB5> (Frequency: 1.0):

# MISSING-SYMBOLIZE-OPERANDS: warning: --symbolize-operands must be enabled for --pretty-pgo-analysis-map to have an effect
