1475ddca5SAlexandros Lamprineas; RUN: opt -passes="ipsccp<func-spec>" -funcspec-for-literal-constant=true -force-specialization -S < %s | FileCheck %s
2801c2b9bSChuanqi Xu
3801c2b9bSChuanqi Xu; Check that the literal constant parameter could be specialized.
4*e15d72adSAlexandros Lamprineas; CHECK: @foo.specialized.1(
5*e15d72adSAlexandros Lamprineas; CHECK: @foo.specialized.2(
6801c2b9bSChuanqi Xu
7801c2b9bSChuanqi Xutarget datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
8801c2b9bSChuanqi Xu
9801c2b9bSChuanqi Xudeclare i32 @getValue()
10801c2b9bSChuanqi Xudeclare i1 @getCond()
11801c2b9bSChuanqi Xu
12801c2b9bSChuanqi Xudefine internal i32 @foo(i1 %break_cond) {
13801c2b9bSChuanqi Xuentry:
14801c2b9bSChuanqi Xu  br label %loop.entry
15801c2b9bSChuanqi Xu
16801c2b9bSChuanqi Xuloop.entry:
17801c2b9bSChuanqi Xu  br label %loop2.entry
18801c2b9bSChuanqi Xu
19801c2b9bSChuanqi Xuloop2.entry:
20801c2b9bSChuanqi Xu  br label %loop2.body
21801c2b9bSChuanqi Xu
22801c2b9bSChuanqi Xuloop2.body:
23801c2b9bSChuanqi Xu  %value = call i32 @getValue()
24801c2b9bSChuanqi Xu  br i1 %break_cond, label %loop2.end, label %return
25801c2b9bSChuanqi Xu
26801c2b9bSChuanqi Xuloop2.end:
27801c2b9bSChuanqi Xu  %cond.end = call i1 @getCond()
28801c2b9bSChuanqi Xu  br i1 %cond.end, label %loop2.entry, label %loop.end
29801c2b9bSChuanqi Xu
30801c2b9bSChuanqi Xuloop.end:
31801c2b9bSChuanqi Xu  %cond2.end = call i1 @getCond()
32801c2b9bSChuanqi Xu  br i1 %cond2.end, label %loop.entry, label %return
33801c2b9bSChuanqi Xu
34801c2b9bSChuanqi Xureturn:
35801c2b9bSChuanqi Xu  ret i32 %value
36801c2b9bSChuanqi Xu}
37801c2b9bSChuanqi Xu
38801c2b9bSChuanqi Xudefine dso_local i32 @bar(i32 %x, i32 %y) {
39801c2b9bSChuanqi Xuentry:
40801c2b9bSChuanqi Xu  %retval.1 = call i32 @foo(i1 1)
41801c2b9bSChuanqi Xu  %retval.2 = call i32 @foo(i1 0)
42801c2b9bSChuanqi Xu  %retval = add nsw i32 %retval.1, %retval.2
43801c2b9bSChuanqi Xu  ret i32 %retval
44801c2b9bSChuanqi Xu}
45