1*9880d681SAndroid Build Coastguard Worker; RUN: opt -deadargelim -S < %s | FileCheck %s 2*9880d681SAndroid Build Coastguard Worker 3*9880d681SAndroid Build Coastguard Workerdefine void @test(i32) { 4*9880d681SAndroid Build Coastguard Worker ret void 5*9880d681SAndroid Build Coastguard Worker} 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Workerdefine void @foo() { 8*9880d681SAndroid Build Coastguard Worker call void @test(i32 0) 9*9880d681SAndroid Build Coastguard Worker ret void 10*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @foo( 11*9880d681SAndroid Build Coastguard Worker; CHECK: i32 undef 12*9880d681SAndroid Build Coastguard Worker} 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Workerdefine void @f(i32 %X) { 15*9880d681SAndroid Build Coastguard Workerentry: 16*9880d681SAndroid Build Coastguard Worker tail call void @sideeffect() nounwind 17*9880d681SAndroid Build Coastguard Worker ret void 18*9880d681SAndroid Build Coastguard Worker} 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Workerdeclare void @sideeffect() 21*9880d681SAndroid Build Coastguard Worker 22*9880d681SAndroid Build Coastguard Workerdefine void @g(i32 %n) { 23*9880d681SAndroid Build Coastguard Workerentry: 24*9880d681SAndroid Build Coastguard Worker %add = add nsw i32 %n, 1 25*9880d681SAndroid Build Coastguard Worker; CHECK: tail call void @f(i32 undef) 26*9880d681SAndroid Build Coastguard Worker tail call void @f(i32 %add) 27*9880d681SAndroid Build Coastguard Worker ret void 28*9880d681SAndroid Build Coastguard Worker} 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard Workerdefine void @h() { 31*9880d681SAndroid Build Coastguard Workerentry: 32*9880d681SAndroid Build Coastguard Worker %i = alloca i32, align 4 33*9880d681SAndroid Build Coastguard Worker store volatile i32 10, i32* %i, align 4 34*9880d681SAndroid Build Coastguard Worker; CHECK: %tmp = load volatile i32, i32* %i, align 4 35*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: call void @f(i32 undef) 36*9880d681SAndroid Build Coastguard Worker %tmp = load volatile i32, i32* %i, align 4 37*9880d681SAndroid Build Coastguard Worker call void @f(i32 %tmp) 38*9880d681SAndroid Build Coastguard Worker ret void 39*9880d681SAndroid Build Coastguard Worker} 40*9880d681SAndroid Build Coastguard Worker 41*9880d681SAndroid Build Coastguard Worker; Check that callers are not transformed for weak definitions. 42*9880d681SAndroid Build Coastguard Workerdefine weak i32 @weak_f(i32 %x) nounwind { 43*9880d681SAndroid Build Coastguard Workerentry: 44*9880d681SAndroid Build Coastguard Worker ret i32 0 45*9880d681SAndroid Build Coastguard Worker} 46*9880d681SAndroid Build Coastguard Workerdefine void @weak_f_caller() nounwind { 47*9880d681SAndroid Build Coastguard Workerentry: 48*9880d681SAndroid Build Coastguard Worker; CHECK: call i32 @weak_f(i32 10) 49*9880d681SAndroid Build Coastguard Worker %call = tail call i32 @weak_f(i32 10) 50*9880d681SAndroid Build Coastguard Worker ret void 51*9880d681SAndroid Build Coastguard Worker} 52*9880d681SAndroid Build Coastguard Worker 53