Compiler projects using llvm
; RUN: opt -S -mergefunc < %s | FileCheck %s

@llvm.compiler.used = appending global [1 x i8*] [i8* bitcast (i32 (i32)* @a to i8*)], section "llvm.metadata"

define internal i32 @a(i32 %a) unnamed_addr {
  %b = xor i32 %a, 0
  %c = xor i32 %b, 0
  ret i32 %c
}

define i32 @b(i32 %a) unnamed_addr {
  %b = xor i32 %a, 0
  %c = xor i32 %b, 0
  ret i32 %c
}

define i32 @c(i32 %a) unnamed_addr {
  %b = tail call i32 @a(i32 %a)
  ret i32 %b
}

; CHECK-LABEL: @llvm.compiler.used = appending global [1 x i8*] [i8* bitcast (i32 (i32)* @a to i8*)], section "llvm.metadata"

; CHECK-LABEL: define i32 @b(i32 %a) unnamed_addr
; CHECK-NEXT:    xor
; CHECK-NEXT:    xor
; CHECK-NEXT:    ret

; CHECK-LABEL: define i32 @c(i32 %a) unnamed_addr
; CHECK-NEXT:    tail call i32 @b(i32 %a)
; CHECK-NEXT:    ret

; CHECK-LABEL: define internal i32 @a(i32 %0) unnamed_addr
; CHECK-NEXT:    tail call i32 @b(i32 %0)
; CHECK-NEXT:    ret