1; RUN: opt -S -passes=deadargelim %s | FileCheck %s 2 3define internal { i64, i64 } @f(i64 %a, i64 %b) { 4start: 5 %0 = insertvalue { i64, i64 } undef, i64 %a, 0 6 %1 = insertvalue { i64, i64 } %0, i64 %b, 1 7 ret { i64, i64 } %1 8} 9 10; Check that we don't delete either of g's return values 11 12; CHECK-LABEL: define internal { i64, i64 } @g(i64 %a, i64 %b) 13define internal { i64, i64 } @g(i64 %a, i64 %b) { 14start: 15 %0 = call { i64, i64 } @f(i64 %a, i64 %b) 16 ret { i64, i64 } %0 17} 18 19declare dso_local i32 @test(i64, i64) 20 21define i32 @main(i32 %argc, ptr %argv) { 22start: 23 %x = call { i64, i64 } @g(i64 13, i64 42) 24 %x.0 = extractvalue { i64, i64 } %x, 0 25 %x.1 = extractvalue { i64, i64 } %x, 1 26 %z = bitcast i64 %x.0 to i64 27 %y = call { i64, i64 } @f(i64 %x.0, i64 %x.1) 28 %y.1 = extractvalue { i64, i64 } %y, 1 29 %0 = call i32 @test(i64 %x.0, i64 %y.1) 30 ret i32 %0 31} 32 33