# RUN: llvm-mc --filetype=obj --triple=loongarch64 -mattr=-relax %s -o %t.n
# RUN: llvm-readobj -r %t.n | FileCheck %s
# RUN: llvm-mc --filetype=obj --triple=loongarch64 -mattr=+relax %s -o %t.r
# RUN: llvm-readobj -r %t.r | FileCheck %s --check-prefix=CHECKR

# CHECK:      Relocations [
# CHECK-NEXT:   Section ({{.*}}) .rela.text {
# CHECK-NEXT:     0x4 R_LARCH_CALL36 foo 0x0
# CHECK-NEXT:   }
# CHECK-NEXT:   Section ({{.*}}) .rela.data {
# CHECK-NEXT:     0x0 R_LARCH_64 .L1 0x0
# CHECK-NEXT:   }
# CHECK-NEXT: ]

# CHECKR:      Relocations [
# CHECKR-NEXT:   Section ({{.*}}) .rela.text {
# CHECKR-NEXT:     0x4 R_LARCH_CALL36 foo 0x0
# CHECKR-NEXT:     0x4 R_LARCH_RELAX - 0x0
# CHECKR-NEXT:     0x10 R_LARCH_B21 .L0 0x0
# CHECKR-NEXT:     0x18 R_LARCH_B16 .L0 0x0
# CHECKR-NEXT:     0x20 R_LARCH_B26 .L0 0x0
# CHECKR-NEXT:   }
# CHECKR-NEXT:   Section ({{.*}}) .rela.data {
# CHECKR-NEXT:     0x0 R_LARCH_64 .L1 0x0
# CHECKR-NEXT:   }
# CHECKR-NEXT: ]

.text
  nop

.L0:
  call36 foo

.L1:
  nop
## Relocations for branches to .L0 must be reserved and be fixed up by linker
## when linker relaxation enabled, because of the relaxable call36 instruction.
## Branches to .L1 can be resolved correctly at compile time, so their
## relocations can simply be removed.
  bnez $a0, .L0
  beqz $a0, .L1
  beq  $a0, $a1, .L0
  blt  $a0, $a1, .L1
  bl   .L0
  b    .L1

.data
.dword .L1
