44 lines · plain
1; RUN: opt < %s -passes=deadargelim -S | FileCheck %s2 3@g0 = global i8 0, align 84 5; CHECK-NOT: DEAD6 7; Dead arg only used by dead retval8define internal i32 @test(i32 %DEADARG) {9 ret i32 %DEADARG10}11 12define i32 @test2(i32 %A) {13 %DEAD = call i32 @test( i32 %A ) ; <i32> [#uses=0]14 ret i32 12315}16 17define i32 @test3() {18 %X = call i32 @test2( i32 3232 ) ; <i32> [#uses=1]19 %Y = add i32 %X, -123 ; <i32> [#uses=1]20 ret i32 %Y21}22 23; The callee function's return type shouldn't be changed if the call result is24; used.25 26; CHECK-LABEL: define internal ptr @callee4()27 28define internal ptr @callee4(ptr %a0) {29 ret ptr @g0;30}31 32declare void @llvm.objc.clang.arc.noop.use(...)33 34; CHECK-LABEL: define ptr @test4(35; CHECK: tail call ptr @callee4() [ "clang.arc.attachedcall"(ptr @llvm.objc.retainAutoreleasedReturnValue) ]36 37define ptr @test4() {38 %call = tail call ptr @callee4(ptr @g0) [ "clang.arc.attachedcall"(ptr @llvm.objc.retainAutoreleasedReturnValue) ]39 call void (...) @llvm.objc.clang.arc.noop.use(ptr %call)40 ret ptr @g041}42 43declare ptr @llvm.objc.retainAutoreleasedReturnValue(ptr)44