|  | ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py | 
|  | ; RUN: opt -passes=argpromotion,inline -S %s | FileCheck %s | 
|  |  | 
|  | ; argpromo removes @b's parameter (removing @c's reference to @a without updating the ref edge in the call graph), then the inliner inlines @a into @d and attempts to remove @a. | 
|  |  | 
|  | define internal void @a() alwaysinline { | 
|  | call void @e(ptr @c) | 
|  | ret void | 
|  | } | 
|  |  | 
|  | define internal void @b(ptr) noinline { | 
|  | ; CHECK-LABEL: @b( | 
|  | ; CHECK-NEXT:    ret void | 
|  | ; | 
|  | ret void | 
|  | } | 
|  |  | 
|  | define internal void @c() noinline { | 
|  | ; CHECK-LABEL: @c( | 
|  | ; CHECK-NEXT:    call void @b() | 
|  | ; CHECK-NEXT:    ret void | 
|  | ; | 
|  | call void @b(ptr @a) | 
|  | ret void | 
|  | } | 
|  |  | 
|  | define void @d() { | 
|  | ; CHECK-LABEL: @d( | 
|  | ; CHECK-NEXT:    call void @e(ptr @c) | 
|  | ; CHECK-NEXT:    ret void | 
|  | ; | 
|  | call void @a() | 
|  | ret void | 
|  | } | 
|  |  | 
|  | declare void @e(ptr); |