196a14f38SNikita Popov; RUN: opt -passes="ipsccp<func-spec>" -funcspec-min-function-size=3 -S < %s | FileCheck %s 296a14f38SNikita Popov; RUN: opt -passes="ipsccp<no-func-spec>" -funcspec-min-function-size=3 -S < %s | FileCheck %s --check-prefix=NOFSPEC 3c4a0969bSSjoerd Meijer 4a1e8b754SSjoerd Meijerdefine i64 @main(i64 %x, i1 %flag) { 5a1e8b754SSjoerd Meijer; 6c4a0969bSSjoerd Meijer; CHECK-LABEL: @main(i64 %x, i1 %flag) { 7c4a0969bSSjoerd Meijer; CHECK: entry: 8c4a0969bSSjoerd Meijer; CHECK-NEXT: br i1 %flag, label %plus, label %minus 9c4a0969bSSjoerd Meijer; CHECK: plus: 10*e15d72adSAlexandros Lamprineas; CHECK-NEXT: [[TMP0:%.+]] = call i64 @compute.specialized.1(i64 %x, ptr @plus) 11a1e8b754SSjoerd Meijer; CHECK-NEXT: br label %merge 12c4a0969bSSjoerd Meijer; CHECK: minus: 13*e15d72adSAlexandros Lamprineas; CHECK-NEXT: [[TMP1:%.+]] = call i64 @compute.specialized.2(i64 %x, ptr @minus) 14c4a0969bSSjoerd Meijer; CHECK-NEXT: br label %merge 15c4a0969bSSjoerd Meijer; CHECK: merge: 16c4a0969bSSjoerd Meijer; CHECK-NEXT: [[TMP2:%.+]] = phi i64 [ [[TMP0]], %plus ], [ [[TMP1]], %minus ] 17c4a0969bSSjoerd Meijer; CHECK-NEXT: ret i64 [[TMP2]] 18c4a0969bSSjoerd Meijer; CHECK-NEXT: } 19c4a0969bSSjoerd Meijer; 20f952bc05SAlexandros Lamprineas; NOFSPEC-LABEL: @main(i64 %x, i1 %flag) { 21*e15d72adSAlexandros Lamprineas; NOFSPEC-NOT: call i64 @compute.specialized.{{[0-9]+}}( 22f952bc05SAlexandros Lamprineas; NOFSPEC: call i64 @compute( 23f952bc05SAlexandros Lamprineas; 24c4a0969bSSjoerd Meijerentry: 25c4a0969bSSjoerd Meijer br i1 %flag, label %plus, label %minus 26c4a0969bSSjoerd Meijer 27c4a0969bSSjoerd Meijerplus: 28ebdf5aefSMatt Arsenault %tmp0 = call i64 @compute(i64 %x, ptr @plus) 29c4a0969bSSjoerd Meijer br label %merge 30c4a0969bSSjoerd Meijer 31c4a0969bSSjoerd Meijerminus: 32ebdf5aefSMatt Arsenault %tmp1 = call i64 @compute(i64 %x, ptr @minus) 33c4a0969bSSjoerd Meijer br label %merge 34c4a0969bSSjoerd Meijer 35c4a0969bSSjoerd Meijermerge: 36c4a0969bSSjoerd Meijer %tmp2 = phi i64 [ %tmp0, %plus ], [ %tmp1, %minus] 37c4a0969bSSjoerd Meijer ret i64 %tmp2 38c4a0969bSSjoerd Meijer} 39c4a0969bSSjoerd Meijer 4033830326SAlexandros Lamprineas; CHECK-NOT: define internal i64 @compute( 4133830326SAlexandros Lamprineas; 42*e15d72adSAlexandros Lamprineas; CHECK-LABEL: define internal i64 @compute.specialized.1(i64 %x, ptr %binop) { 43a1e8b754SSjoerd Meijer; CHECK-NEXT: entry: 44a1e8b754SSjoerd Meijer; CHECK-NEXT: [[TMP0:%.+]] = call i64 @plus(i64 %x) 45a1e8b754SSjoerd Meijer; CHECK-NEXT: ret i64 [[TMP0]] 46a1e8b754SSjoerd Meijer; CHECK-NEXT: } 47a1e8b754SSjoerd Meijer; 48*e15d72adSAlexandros Lamprineas; CHECK-LABEL: define internal i64 @compute.specialized.2(i64 %x, ptr %binop) { 49a1e8b754SSjoerd Meijer; CHECK-NEXT: entry: 50a1e8b754SSjoerd Meijer; CHECK-NEXT: [[TMP0:%.+]] = call i64 @minus(i64 %x) 51a1e8b754SSjoerd Meijer; CHECK-NEXT: ret i64 [[TMP0]] 52a1e8b754SSjoerd Meijer; CHECK-NEXT: } 53a1e8b754SSjoerd Meijer; 54f952bc05SAlexandros Lamprineas; NOFSPEC: define internal i64 @compute( 55*e15d72adSAlexandros Lamprineas; NOFSPEC-NOT: define internal i64 @compute.specialized.{{[0-9]+}}( 56f952bc05SAlexandros Lamprineas; 57ebdf5aefSMatt Arsenaultdefine internal i64 @compute(i64 %x, ptr %binop) { 58c4a0969bSSjoerd Meijerentry: 59c4a0969bSSjoerd Meijer %tmp0 = call i64 %binop(i64 %x) 60c4a0969bSSjoerd Meijer ret i64 %tmp0 61c4a0969bSSjoerd Meijer} 62c4a0969bSSjoerd Meijer 63c4a0969bSSjoerd Meijerdefine internal i64 @plus(i64 %x) { 64c4a0969bSSjoerd Meijerentry: 65c4a0969bSSjoerd Meijer %tmp0 = add i64 %x, 1 66c4a0969bSSjoerd Meijer ret i64 %tmp0 67c4a0969bSSjoerd Meijer} 68c4a0969bSSjoerd Meijer 69c4a0969bSSjoerd Meijerdefine internal i64 @minus(i64 %x) { 70c4a0969bSSjoerd Meijerentry: 71c4a0969bSSjoerd Meijer %tmp0 = sub i64 %x, 1 72c4a0969bSSjoerd Meijer ret i64 %tmp0 73c4a0969bSSjoerd Meijer} 74