1 ; RUN: opt < %s -passes='function(callsite-splitting),cgscc(inline),function(instcombine,jump-threading)' -S | FileCheck %s
3 target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
4 target triple = "aarch64"
6 %struct.bitmap = type { i32, ptr }
9 ;CHECK-LABEL: Top.split:
10 ;CHECK: call void @callee(ptr null, ptr null, ptr %b_elt, i1 false)
11 ;CHECK-LABEL: NextCond:
12 ;CHECK: br {{.*}} label %callee.exit
13 ;CHECK-LABEL: callee.exit:
14 ;CHECK: call void @dummy2(ptr %a_elt)
16 define void @caller(i1 %c, ptr %a_elt, ptr %b_elt) {
21 %tobool1 = icmp eq ptr %a_elt, null
22 br i1 %tobool1, label %CallSiteBB, label %NextCond
25 %cmp = icmp ne ptr %b_elt, null
26 br i1 %cmp, label %CallSiteBB, label %End
29 %p = phi i1 [0, %Top], [%c, %NextCond]
30 call void @callee(ptr %a_elt, ptr %a_elt, ptr %b_elt, i1 %p)
37 define void @callee(ptr %dst_elt, ptr %a_elt, ptr %b_elt, i1 %c) {
39 %tobool = icmp ne ptr %a_elt, null
40 %tobool1 = icmp ne ptr %b_elt, null
41 %or.cond = and i1 %tobool, %tobool1
42 br i1 %or.cond, label %Cond, label %Big
45 %cmp = icmp eq ptr %dst_elt, %a_elt
46 br i1 %cmp, label %Small, label %Big
49 call void @dummy2(ptr %a_elt)
53 call void @dummy1(ptr %a_elt, ptr %a_elt, ptr %a_elt, ptr %a_elt, ptr %a_elt, ptr %a_elt)
54 call void @dummy1(ptr %a_elt, ptr %a_elt, ptr %a_elt, ptr %a_elt, ptr %a_elt, ptr %a_elt)
55 call void @dummy1(ptr %a_elt, ptr %a_elt, ptr %a_elt, ptr %a_elt, ptr %a_elt, ptr %a_elt)
56 call void @dummy1(ptr %a_elt, ptr %a_elt, ptr %a_elt, ptr %a_elt, ptr %a_elt, ptr %a_elt)
57 call void @dummy1(ptr %a_elt, ptr %a_elt, ptr %a_elt, ptr %a_elt, ptr %a_elt, ptr %a_elt)
58 call void @dummy1(ptr %a_elt, ptr %a_elt, ptr %a_elt, ptr %a_elt, ptr %a_elt, ptr %a_elt)
59 call void @dummy1(ptr %a_elt, ptr %a_elt, ptr %a_elt, ptr %a_elt, ptr %a_elt, ptr %a_elt)
66 declare void @dummy2(ptr)
67 declare void @dummy1(ptr, ptr, ptr, ptr, ptr, ptr)
70 ;CHECK-LABEL: @caller2
71 ;CHECK-LABEL: Top.split:
72 ;CHECK: call void @dummy4()
73 ;CHECK-LABEL: NextCond.split:
74 ;CHECK: call void @dummy3()
75 ;CheCK-LABEL: CallSiteBB:
76 ;CHECK: call void @foo(i1 %tobool1)
77 define void @caller2(i1 %c, ptr %a_elt, ptr %b_elt, ptr %c_elt) {
82 %tobool1 = icmp eq ptr %a_elt, %b_elt
83 br i1 %tobool1, label %CallSiteBB, label %NextCond
86 %cmp = icmp ne ptr %b_elt, %c_elt
87 br i1 %cmp, label %CallSiteBB, label %End
90 %phi = phi i1 [0, %Top],[1, %NextCond]
91 %u = call i1 @callee2(i1 %phi)
99 define i1 @callee2(i1 %b) {
101 br i1 %b, label %BB1, label %BB2
115 declare void @dummy3()
116 declare void @dummy4()
117 declare void @foo(i1)