1; RUN: opt -function-specialization -deadargelim -inline -S < %s | FileCheck %s 2 3; CHECK-LABEL: @main(i64 %x, i1 %flag) { 4; CHECK: entry: 5; CHECK-NEXT: br i1 %flag, label %plus, label %minus 6; CHECK: plus: 7; CHECK-NEXT: [[TMP0:%.+]] = add i64 %x, 1 8; CHECH-NEXT: br label %merge 9; CHECK: minus: 10; CHECK-NEXT: [[TMP1:%.+]] = sub i64 %x, 1 11; CHECK-NEXT: br label %merge 12; CHECK: merge: 13; CHECK-NEXT: [[TMP2:%.+]] = phi i64 [ [[TMP0]], %plus ], [ [[TMP1]], %minus ] 14; CHECK-NEXT: ret i64 [[TMP2]] 15; CHECK-NEXT: } 16; 17define i64 @main(i64 %x, i1 %flag) { 18entry: 19 br i1 %flag, label %plus, label %minus 20 21plus: 22 %tmp0 = call i64 @compute(i64 %x, i64 (i64)* @plus) 23 br label %merge 24 25minus: 26 %tmp1 = call i64 @compute(i64 %x, i64 (i64)* @minus) 27 br label %merge 28 29merge: 30 %tmp2 = phi i64 [ %tmp0, %plus ], [ %tmp1, %minus] 31 ret i64 %tmp2 32} 33 34define internal i64 @compute(i64 %x, i64 (i64)* %binop) { 35entry: 36 %tmp0 = call i64 %binop(i64 %x) 37 ret i64 %tmp0 38} 39 40define internal i64 @plus(i64 %x) { 41entry: 42 %tmp0 = add i64 %x, 1 43 ret i64 %tmp0 44} 45 46define internal i64 @minus(i64 %x) { 47entry: 48 %tmp0 = sub i64 %x, 1 49 ret i64 %tmp0 50} 51