# REQUIRES: ppc

# RUN: rm -rf %t.dir
# RUN: split-file %s %t.dir
# RUN: cd %t.dir

## Object files.
# RUN: llvm-mc -triple=powerpc64le -filetype=obj ref.s -o 1.o
# RUN: llvm-mc -triple=powerpc64le -filetype=obj refanddef.s -o 2.o
# RUN: llvm-mc -triple=powerpc64le -filetype=obj def.s -o strong_data_only.o
# RUN: llvm-mc -triple=powerpc64le -filetype=obj weak.s -o weak_data_only.o

# RUN: llvm-mc -triple=powerpc64le -filetype=obj main.s -o main.o

## Object file archives.
# RUN: llvm-ar crs 1.a 1.o strong_data_only.o
# RUN: llvm-ar crs 2.a 1.o weak_data_only.o
# RUN: llvm-ar crs 3.a 2.o strong_data_only.o

## Bitcode files.
# RUN: llvm-as -o 1.bc commonblock.ll
# RUN: llvm-as -o 2.bc blockdata.ll
# RUN: llvm-as -o 3.bc weak.ll

## Bitcode archive.
# RUN: llvm-ar crs 4.a 1.bc 2.bc

# RUN: ld.lld -o 1 main.o 1.a
# RUN: llvm-objdump -D -j .data 1 | FileCheck --check-prefix=TEST1 %s

# RUN: ld.lld -o 2 main.o --start-lib 1.o strong_data_only.o --end-lib
# RUN: llvm-objdump -D -j .data 2 | FileCheck --check-prefix=TEST1 %s

# RUN: ld.lld -o 3 main.o 2.a
# RUN: llvm-objdump -t 3 | FileCheck --check-prefix=BSS %s

# RUN: ld.lld -o 4 main.o --start-lib 1.o weak_data_only.o --end-lib
# RUN: llvm-objdump -t 4 | FileCheck --check-prefix=BSS %s

# RUN: ld.lld -o 5 main.o 3.a --print-map | FileCheck --check-prefix=MAP %s

# RUN: ld.lld -o 6 main.o 2.o 1.a
# RUN: llvm-objdump -D -j .data 6 | FileCheck --check-prefix=TEST2 %s

# RUN: ld.lld -o 7 main.o 2.o --start-lib 1.o strong_data_only.o --end-lib
# RUN: llvm-objdump -D -j .data 7 | FileCheck --check-prefix=TEST2 %s

# RUN: not ld.lld -o 8 main.o 1.a strong_data_only.o 2>&1 | \
# RUN:   FileCheck --check-prefix=ERR %s

# RUN: not ld.lld -o 9 main.o --start-lib 1.o 2.o --end-lib  strong_data_only.o 2>&1 | \
# RUN:   FileCheck --check-prefix=ERR %s

# ERR: ld.lld: error: duplicate symbol: block

# RUN: ld.lld --no-fortran-common -o 10 main.o 1.a
# RUN: llvm-readobj --syms 10 | FileCheck --check-prefix=NFC %s

# RUN: ld.lld --no-fortran-common -o 11 main.o --start-lib 1.o strong_data_only.o --end-lib
# RUN: llvm-readobj --syms 11 | FileCheck --check-prefix=NFC %s

# RUN: ld.lld -o - main.o 4.a --lto-emit-asm | FileCheck --check-prefix=ASM %s

# RUN: ld.lld -o - main.o  --start-lib 1.bc 2.bc --end-lib --lto-emit-asm | \
# RUN:   FileCheck --check-prefix=ASM %s

## COMMON overrides weak. Don't extract 3.bc which provides a weak definition.
# RUN: ld.lld -o /dev/null main.o --start-lib 1.bc 3.bc --end-lib -y block | FileCheck --check-prefix=LTO_WEAK %s

## Old FORTRAN that mixes use of COMMON blocks and BLOCK DATA requires that we
## search through archives for non-tentative definitions (from the BLOCK DATA)
## to replace the tentative definitions (from the COMMON block(s)).

## Ensure we have used the initialized definition of 'block' instead of a
## common definition.
# TEST1-LABEL:  Disassembly of section .data:
# TEST1:          <block>:
# TEST1-NEXT:       ea 2e 44 54
# TEST1-NEXT:       fb 21 09 40
# TEST1-NEXT:       ...

# BSS:       [[#%x,]] g     O .bss   0000000000000028 block

# NFC:       Name: block
# NFC-NEXT:  Value:
# NFC-NEXT:  Size: 40
# NFC-NEXT:  Binding: Global (0x1)
# NFC-NEXT:  Type: Object (0x1)
# NFC-NEXT:  Other: 0
# NFC-NEXT:  Section: .bss

## Expecting the strong definition from the object file, and the defintions from
## the archive do not interfere.
# TEST2-LABEL: Disassembly of section .data:
# TEST2:         <block>:
# TEST2-NEXT:     03 57 14 8b
# TEST2-NEXT:     0a bf 05 40
# TEST2-NEXT:     ...

# MAP:       28 8 3.a(2.o):(.data)
# MAP-NEXT:  28 1 block

# ASM:         .type   block,@object
# ASM:       block:
# ASM-NEXT:    .long 5
# ASM:         .size   block, 20

# LTO_WEAK:     1.bc: common definition of block
# LTO_WEAK:     <internal>: reference to block
# LTO_WEAK-NOT: {{.}}

#--- ref.s
  .text
  .abiversion 2
  .global bar
  .type bar,@function
bar:
  addis 4, 2, block@toc@ha
  addi  4, 4, block@toc@l

## Tentative definition of 'block'.
  .comm block,40,8

#--- refanddef.s
## An alternate strong definition of block, in the same file as
## a different referenced symbol.
  .text
  .abiversion 2
  .global bar
  .type bar,@function
bar:
  addis 4, 2, block@toc@ha
  addi  4, 4, block@toc@l

  .data
  .type block,@object
  .global block
  .p2align 3
block:
  .quad   0x4005bf0a8b145703              # double 2.7182818284589998
  .space  32
  .size   block, 40

#--- def.s
## Strong definition of 'block'.
  .data
  .type block,@object
  .global block
  .p2align 3
block:
  .quad   0x400921fb54442eea              # double 3.1415926535900001
  .space  32
  .size   block, 40

#--- weak.s
## Weak definition of `block`.
  .data
  .type block,@object
  .weak block
  .p2align 3
block:
  .quad   0x400921fb54442eea              # double 3.1415926535900001
  .space  32
  .size   block, 40

#--- main.s
  .global _start
_start:
  bl bar
  blr


#--- blockdata.ll
target datalayout = "e-m:e-i64:64-n32:64-S128-v256:256:256-v512:512:512"
target triple = "powerpc64le-unknown-linux-gnu"

@block = dso_local local_unnamed_addr global [5 x i32] [i32 5, i32 0, i32 0, i32 0, i32 0], align 4

#--- weak.ll
target datalayout = "e-m:e-i64:64-n32:64-S128-v256:256:256-v512:512:512"
target triple = "powerpc64le-unknown-linux-gnu"

@block = weak dso_local global [5 x i32] [i32 5, i32 0, i32 0, i32 0, i32 0], align 4

#--- commonblock.ll
target datalayout = "e-m:e-i64:64-n32:64-S128-v256:256:256-v512:512:512"
target triple = "powerpc64le-unknown-linux-gnu"

@block =  common dso_local local_unnamed_addr global [5 x i32] zeroinitializer, align 4

define dso_local i32 @bar(i32 signext %i) local_unnamed_addr {
entry:
  %idxprom = sext i32 %i to i64
  %arrayidx = getelementptr inbounds [5 x i32], [5 x i32]* @block, i64 0, i64 %idxprom
  %0 = load i32, i32* %arrayidx, align 8
  ret i32 %0
}
