brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.9 KiB · ea8abfb Raw
118 lines · plain
1; RUN: opt < %s -passes='function(callsite-splitting),cgscc(inline),function(instcombine,jump-threading)' -S | FileCheck %s2 3target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"4target triple = "aarch64"5 6%struct.bitmap = type { i32, ptr }7 8;CHECK-LABEL: @caller9;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.exit13;CHECK-LABEL: callee.exit:14;CHECK: call void @dummy2(ptr %a_elt)15 16define void @caller(i1 %c, ptr %a_elt, ptr %b_elt) {17entry:18  br label %Top19 20Top:21  %tobool1 = icmp eq ptr %a_elt, null22  br i1 %tobool1, label %CallSiteBB, label %NextCond23 24NextCond:25  %cmp = icmp ne ptr %b_elt, null26  br i1 %cmp, label %CallSiteBB, label %End27 28CallSiteBB:29  %p = phi i1 [0, %Top], [%c, %NextCond]30  call void @callee(ptr %a_elt, ptr %a_elt, ptr %b_elt, i1 %p)31  br label %End32 33End:34  ret void35}36 37define void @callee(ptr %dst_elt, ptr %a_elt, ptr %b_elt, i1 %c) {38entry:39  %tobool = icmp ne ptr %a_elt, null40  %tobool1 = icmp ne ptr %b_elt, null41  %or.cond = and i1 %tobool, %tobool142  br i1 %or.cond, label %Cond, label %Big43 44Cond:45  %cmp = icmp eq ptr  %dst_elt, %a_elt46  br i1 %cmp, label %Small, label %Big47 48Small:49  call void @dummy2(ptr %a_elt)50  br label %End51 52Big: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)60  br label %End61 62End:63  ret void64}65 66declare void @dummy2(ptr)67declare void @dummy1(ptr, ptr, ptr, ptr, ptr, ptr)68 69 70;CHECK-LABEL: @caller271;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)77define void @caller2(i1 %c, ptr %a_elt, ptr %b_elt, ptr %c_elt) {78entry:79  br label %Top80 81Top:82  %tobool1 = icmp eq ptr %a_elt, %b_elt83  br i1 %tobool1, label %CallSiteBB, label %NextCond84 85NextCond:86  %cmp = icmp ne ptr %b_elt, %c_elt87  br i1 %cmp, label %CallSiteBB, label %End88 89CallSiteBB:90  %phi = phi i1 [0, %Top],[1, %NextCond]91  %u = call i1 @callee2(i1 %phi)92  call void @foo(i1 %u)93  br label %End94 95End:96  ret void97}98 99define i1 @callee2(i1 %b) {100entry:101  br i1 %b, label %BB1, label %BB2102 103BB1:104  call void @dummy3()105  br label %End106 107BB2:108  call void @dummy4()109  br label %End110 111End:112  ret i1 %b113}114 115declare void @dummy3()116declare void @dummy4()117declare void @foo(i1)118