; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --check-attributes --check-globals all --version 5
; RUN: opt -passes=norecurse-lto-inference -S %s | FileCheck %s

; This is a negative test which results in RefSCC with size > 1.
; RefSCC : [(f2), (f1)]
; --- SCC A (f1) --- size() = 1
define internal void @f1() {
; CHECK-LABEL: define internal void @f1() {
; CHECK-NEXT:    call void @f2()
; CHECK-NEXT:    ret void
;
  call void @f2()
  ret void
}

; --- SCC B (f2) --- size() = 1
; f2 indirectly calls f1 using locally allocated function pointer
define internal void @f2() {
; CHECK-LABEL: define internal void @f2() {
; CHECK-NEXT:    [[FP:%.*]] = alloca ptr, align 8
; CHECK-NEXT:    store ptr @f1, ptr [[FP]], align 8
; CHECK-NEXT:    [[TMP:%.*]] = load ptr, ptr [[FP]], align 8
; CHECK-NEXT:    call void [[TMP]]()
; CHECK-NEXT:    ret void
;
  %fp = alloca void ()*
  store void ()* @f1, void ()** %fp
  %tmp = load void ()*, void ()** %fp
  call void %tmp()
  ret void
}

define i32 @main() {
; CHECK-LABEL: define i32 @main() {
; CHECK-NEXT:    call void @f1()
; CHECK-NEXT:    ret i32 0
;
  call void @f1()
  ret i32 0
}

