// RUN: llvm-mc -triple riscv64 -mattr=+c,+relax -filetype obj -o %t.o %s
// RUN: ld.lld --emit-relocs -o %t %t.o
// RUN: llvm-bolt --print-cfg --print-fix-riscv-calls --print-only=_start \
// RUN: -o %t.bolt %t | FileCheck %s
// RUN: llvm-objdump -d %t.bolt | FileCheck --check-prefix=OBJDUMP %s
// CHECK: Binary Function "_start" after building cfg {
// CHECK: jal ra, near_f
// CHECK-NEXT: auipc ra, far_f
// CHECK-NEXT: jalr ra, 0xc(ra)
// CHECK-NEXT: j near_f
// CHECK: Binary Function "_start" after fix-riscv-calls {
// CHECK: call near_f
// CHECK-NEXT: call far_f
// CHECK-NEXT: tail near_f
// OBJDUMP: 0000000000600000 <_start>:
// OBJDUMP-NEXT: jal 0x600040 <near_f>
// OBJDUMP-NEXT: auipc ra, 0x200
// OBJDUMP-NEXT: jalr 0x7c(ra)
// OBJDUMP-NEXT: j 0x600040 <near_f>
// OBJDUMP: 0000000000600040 <near_f>:
// OBJDUMP: 0000000000800080 <far_f>:
.text
.globl _start
.p2align 1
_start:
call near_f
call far_f
tail near_f
.size _start, .-_start
.global near_f
.p2align 1
near_f:
ret
.size near_f, .-near_f
.skip (1 << 21)
.global far_f
.p2align 1
far_f:
ret
.size far_f, .-far_f