brintos

brintos / llvm-project-archived public Read only

0
0
Text · 1.4 KiB · f72756d Raw
54 lines · plain
1; RUN: opt -passes='require<profile-summary>,function(codegenprepare)' -S -mtriple=x86_64-linux < %s | FileCheck %s2 3; The ret instruction can be duplicated into BB case2 even though there is an4; intermediate BB exit1 and call to llvm.assume.5 6@ptr = external global ptr, align 87 8; CHECK:       %ret1 = tail call ptr @qux()9; CHECK-NEXT:  ret ptr %ret110 11; CHECK:       %ret2 = tail call ptr @bar()12; CHECK-NEXT:  ret ptr %ret213 14define ptr @foo(i64 %size, i64 %v1, i64 %v2) {15entry:16  %a = alloca i817  call void @llvm.lifetime.start.p0(ptr %a) nounwind18  %cmp1 = icmp ult i64 %size, 102519  br i1 %cmp1, label %if.end, label %case120 21case1:22  %ret1 = tail call ptr @qux()23  br label %exit224 25if.end:26  %cmp2 = icmp ult i64 %v1, %v227  br i1 %cmp2, label %case3, label %case228 29case2:30  %ret2 = tail call ptr @bar()31  br label %exit132 33case3:34  %ret3 = load ptr, ptr @ptr, align 835  br label %exit136 37exit1:38  %retval1 = phi ptr [ %ret2, %case2 ], [ %ret3, %case3 ]39  %cmp3 = icmp ne ptr %retval1, null40  tail call void @llvm.assume(i1 %cmp3)41  br label %exit242 43exit2:44  %retval2 = phi ptr [ %ret1, %case1 ], [ %retval1, %exit1 ]45  call void @llvm.lifetime.end.p0(ptr %a) nounwind46  ret ptr %retval247}48 49declare void @llvm.assume(i1)50declare ptr @qux()51declare ptr @bar()52declare void @llvm.lifetime.start.p0(ptr nocapture) nounwind53declare void @llvm.lifetime.end.p0(ptr nocapture) nounwind54