116 lines · plain
1; RUN: llc -enable-machine-outliner -mtriple=x86_64-apple-darwin < %s | FileCheck %s2 3@x = global i32 0, align 44 5define i32 @check_boundaries() #0 {6 ; CHECK-LABEL: _check_boundaries:7 %1 = alloca i32, align 48 %2 = alloca i32, align 49 %3 = alloca i32, align 410 %4 = alloca i32, align 411 %5 = alloca i32, align 412 store i32 0, ptr %1, align 413 store i32 0, ptr %2, align 414 %6 = load i32, ptr %2, align 415 %7 = icmp ne i32 %6, 016 br i1 %7, label %9, label %817 18 ; CHECK: callq 19 ; CHECK-SAME: [[OFUNC1:OUTLINED_FUNCTION_[0-9]+]]20 ; CHECK: cmpl $0, -{{[0-9]+}}(%rbp)21 store i32 1, ptr %2, align 422 store i32 2, ptr %3, align 423 store i32 3, ptr %4, align 424 store i32 4, ptr %5, align 425 br label %1026 27 store i32 1, ptr %4, align 428 br label %1029 30 %11 = load i32, ptr %2, align 431 %12 = icmp ne i32 %11, 032 br i1 %12, label %14, label %1333 34 ; CHECK: callq35 ; CHECK-SAME: [[OFUNC1]]36 store i32 1, ptr %2, align 437 store i32 2, ptr %3, align 438 store i32 3, ptr %4, align 439 store i32 4, ptr %5, align 440 br label %1541 42 store i32 1, ptr %4, align 443 br label %1544 45 ret i32 046}47 48define i32 @empty_1() #0 {49 ; CHECK-LABEL: _empty_1:50 ; CHECK-NOT: OUTLINED_FUNCTION51 ret i32 152}53 54define i32 @empty_2() #0 {55 ; CHECK-LABEL: _empty_256 ; CHECK-NOT: OUTLINED_FUNCTION57 ret i32 158}59 60define i32 @no_empty_outlining() #0 {61 ; CHECK-LABEL: _no_empty_outlining:62 %1 = alloca i32, align 463 store i32 0, ptr %1, align 464 ; CHECK-NOT: OUTLINED_FUNCTION65 %2 = call i32 @empty_1() #166 %3 = call i32 @empty_2() #167 %4 = call i32 @empty_1() #168 %5 = call i32 @empty_2() #169 %6 = call i32 @empty_1() #170 %7 = call i32 @empty_2() #171 ret i32 072}73 74define i32 @main() #0 {75 ; CHECK-LABEL: _main:76 %1 = alloca i32, align 477 %2 = alloca i32, align 478 %3 = alloca i32, align 479 %4 = alloca i32, align 480 %5 = alloca i32, align 481 82 store i32 0, ptr %1, align 483 store i32 0, ptr @x, align 484 ; CHECK: callq85 ; CHECK-SAME: [[OFUNC2:OUTLINED_FUNCTION_[0-9]+]]86 store i32 1, ptr %2, align 487 store i32 2, ptr %3, align 488 store i32 3, ptr %4, align 489 store i32 4, ptr %5, align 490 store i32 1, ptr @x, align 491 call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"()92 ; CHECK: callq93 ; CHECK-SAME: [[OFUNC2]]94 store i32 1, ptr %2, align 495 store i32 2, ptr %3, align 496 store i32 3, ptr %4, align 497 store i32 4, ptr %5, align 498 ret i32 099}100 101attributes #0 = { noredzone nounwind ssp uwtable "frame-pointer"="all" }102 103; CHECK: OUTLINED_FUNCTION_{{[0-9]+}}:104; CHECK-DAG: movl $1, -{{[0-9]+}}(%rbp)105; CHECK-NEXT: movl $2, -{{[0-9]+}}(%rbp)106; CHECK-NEXT: movl $3, -{{[0-9]+}}(%rbp)107; CHECK-NEXT: movl $4, -{{[0-9]+}}(%rbp)108; CHECK-NEXT: retq109 110; CHECK: OUTLINED_FUNCTION_{{[0-9]+}}:111; CHECK-DAG: movl $1, -{{[0-9]+}}(%rbp)112; CHECK-NEXT: movl $2, -{{[0-9]+}}(%rbp)113; CHECK-NEXT: movl $3, -{{[0-9]+}}(%rbp)114; CHECK-NEXT: movl $4, -{{[0-9]+}}(%rbp)115; CHECK-NEXT: retq116