brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.6 KiB · 0f989a2 Raw
105 lines · plain
1; RUN: opt < %s -passes=callsite-splitting -verify-dom-info -S | FileCheck %s2 3;CHECK-LABEL: @caller4;CHECK-LABEL: Top.split:5;CHECK: %ca1 = musttail call ptr @callee(ptr null, ptr %b)6;CHECK: %cb2 = bitcast ptr %ca1 to ptr7;CHECK: ret ptr %cb28;CHECK-LABEL: TBB.split9;CHECK: %ca3 = musttail call ptr @callee(ptr nonnull %a, ptr null)10;CHECK: %cb4 = bitcast ptr %ca3 to ptr11;CHECK: ret ptr %cb412define ptr @caller(ptr %a, ptr %b) {13Top:14  %c = icmp eq ptr %a, null15  br i1 %c, label %Tail, label %TBB16TBB:17  %c2 = icmp eq ptr %b, null18  br i1 %c2, label %Tail, label %End19Tail:20  %ca = musttail call ptr @callee(ptr %a, ptr %b)21  %cb = bitcast ptr %ca to ptr22  ret ptr %cb23End:24  ret ptr null25}26 27define ptr @callee(ptr %a, ptr %b) noinline {28  ret ptr %a29}30 31;CHECK-LABEL: @no_cast_caller32;CHECK-LABEL: Top.split:33;CHECK: %ca1 = musttail call ptr @callee(ptr null, ptr %b)34;CHECK: ret ptr %ca135;CHECK-LABEL: TBB.split36;CHECK: %ca2 = musttail call ptr @callee(ptr nonnull %a, ptr null)37;CHECK: ret ptr %ca238define ptr @no_cast_caller(ptr %a, ptr %b) {39Top:40  %c = icmp eq ptr %a, null41  br i1 %c, label %Tail, label %TBB42TBB:43  %c2 = icmp eq ptr %b, null44  br i1 %c2, label %Tail, label %End45Tail:46  %ca = musttail call ptr @callee(ptr %a, ptr %b)47  ret ptr %ca48End:49  ret ptr null50}51 52;CHECK-LABEL: @void_caller53;CHECK-LABEL: Top.split:54;CHECK: musttail call void @void_callee(ptr null, ptr %b)55;CHECK: ret void56;CHECK-LABEL: TBB.split57;CHECK: musttail call void @void_callee(ptr nonnull %a, ptr null)58;CHECK: ret void59define void @void_caller(ptr %a, ptr %b) {60Top:61  %c = icmp eq ptr %a, null62  br i1 %c, label %Tail, label %TBB63TBB:64  %c2 = icmp eq ptr %b, null65  br i1 %c2, label %Tail, label %End66Tail:67  musttail call void @void_callee(ptr %a, ptr %b)68  ret void69End:70  ret void71}72 73define void @void_callee(ptr %a, ptr %b) noinline {74  ret void75}76 77;   Include a test with a larger CFG that exercises the DomTreeUpdater78;   machinery a bit more.79;CHECK-LABEL: @larger_cfg_caller80;CHECK-LABEL: Top.split:81;CHECK: %r1 = musttail call ptr @callee(ptr null, ptr %b)82;CHECK: ret ptr %r183;CHECK-LABEL: TBB.split84;CHECK: %r2 = musttail call ptr @callee(ptr nonnull %a, ptr null)85;CHECK: ret ptr %r286define ptr @larger_cfg_caller(ptr %a, ptr %b) {87Top:88  %cond1 = icmp eq ptr %a, null89  br i1 %cond1, label %Tail, label %ExtraTest90ExtraTest:91  %a0 = load i8, ptr %a92  %cond2 = icmp eq i8 %a0, 093  br i1 %cond2, label %TBB_pred, label %End94TBB_pred:95  br label %TBB96TBB:97  %cond3 = icmp eq ptr %b, null98  br i1 %cond3, label %Tail, label %End99Tail:100  %r = musttail call ptr @callee(ptr %a, ptr %b)101  ret ptr %r102End:103  ret ptr null104}105