; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
; REQUIRES: llvm_inliner_model_autogenerated && asserts
; RUN: opt -passes='default<O3>' -enable-ml-inliner=release -ml-inliner-skip-policy=if-caller-not-cold -S %s -o - | FileCheck %s
; RUN: opt -passes='default<O3>' -ml-inliner-stop-immediately -enable-ml-inliner=release -ml-inliner-skip-policy=if-caller-not-cold -S %s -o - | FileCheck %s

declare ptr @f()

define void @e() #0 {
; CHECK-LABEL: define void @e(
; CHECK-SAME: ) local_unnamed_addr #[[ATTR0:[0-9]+]] {
; CHECK-NEXT:    tail call void @d()
; CHECK-NEXT:    tail call void @g()
; CHECK-NEXT:    tail call void @d()
; CHECK-NEXT:    tail call void @g()
; CHECK-NEXT:    tail call void @d()
; CHECK-NEXT:    tail call void @g()
; CHECK-NEXT:    ret void
;
  call void @h()
  call void @h()
  call void @h()
  ret void
}

define void @d() {
; CHECK-LABEL: define void @d() local_unnamed_addr {
; CHECK-NEXT:    tail call void @f()
; CHECK-NEXT:    ret void
;
  call void @f()
  ret void
}

define void @g() {
; CHECK-LABEL: define void @g() local_unnamed_addr {
; CHECK-NEXT:    tail call void @f()
; CHECK-NEXT:    ret void
;
  call void @f()
  ret void
}

define void @h() #0 {
; CHECK-LABEL: define void @h(
; CHECK-SAME: ) local_unnamed_addr #[[ATTR0]] {
; CHECK-NEXT:    tail call void @d()
; CHECK-NEXT:    tail call void @g()
; CHECK-NEXT:    ret void
;
  call void @d()
  call void @g()
  ret void
}

attributes #0 = { "sign-return-address"="non-leaf" "sign-return-address-key"="a_key" }
