|  | ; RUN: opt -deadargelim -S %s | FileCheck %s | 
|  |  | 
|  | define void @test(i32) { | 
|  | ret void | 
|  | } | 
|  |  | 
|  | define void @foo() { | 
|  | call void @test(i32 0) | 
|  | ret void | 
|  | ; CHECK: @foo | 
|  | ; CHECK: i32 undef | 
|  | } | 
|  |  | 
|  | define void @f(i32 %X) { | 
|  | entry: | 
|  | tail call void @sideeffect() nounwind | 
|  | ret void | 
|  | } | 
|  |  | 
|  | declare void @sideeffect() | 
|  |  | 
|  | define void @g(i32 %n) { | 
|  | entry: | 
|  | %add = add nsw i32 %n, 1 | 
|  | ; CHECK: tail call void @f(i32 undef) | 
|  | tail call void @f(i32 %add) | 
|  | ret void | 
|  | } | 
|  |  | 
|  | define void @h() { | 
|  | entry: | 
|  | %i = alloca i32, align 4 | 
|  | volatile store i32 10, i32* %i, align 4 | 
|  | ; CHECK: %tmp = load volatile i32* %i, align 4 | 
|  | ; CHECK-next: call void @f(i32 undef) | 
|  | %tmp = volatile load i32* %i, align 4 | 
|  | call void @f(i32 %tmp) | 
|  | ret void | 
|  | } | 
|  |  | 
|  | ; Check that callers are not transformed for weak definitions. | 
|  | define weak i32 @weak_f(i32 %x) nounwind { | 
|  | entry: | 
|  | ret i32 0 | 
|  | } | 
|  | define void @weak_f_caller() nounwind { | 
|  | entry: | 
|  | ; CHECK: call i32 @weak_f(i32 10) | 
|  | %call = tail call i32 @weak_f(i32 10) | 
|  | ret void | 
|  | } | 
|  |  |