1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc -enable-machine-outliner -mtriple=x86_64-unknown-linux < %s | FileCheck %s 3@x = dso_local global i32 0, align 4 4 5define dso_local i32 @check_boundaries() #0 { 6; CHECK-LABEL: check_boundaries: 7; CHECK: # %bb.0: 8; CHECK-NEXT: pushq %rbp 9; CHECK-NEXT: .cfi_def_cfa_offset 16 10; CHECK-NEXT: .cfi_offset %rbp, -16 11; CHECK-NEXT: movq %rsp, %rbp 12; CHECK-NEXT: .cfi_def_cfa_register %rbp 13; CHECK-NEXT: subq $20, %rsp 14; CHECK-NEXT: movl $0, -20(%rbp) 15; CHECK-NEXT: movl $0, -8(%rbp) 16; CHECK-NEXT: xorl %eax, %eax 17; CHECK-NEXT: testb %al, %al 18; CHECK-NEXT: je .LBB0_1 19; CHECK-NEXT: # %bb.2: 20; CHECK-NEXT: movl $1, -4(%rbp) 21; CHECK-NEXT: cmpl $0, -8(%rbp) 22; CHECK-NEXT: je .LBB0_4 23; CHECK-NEXT: .LBB0_5: 24; CHECK-NEXT: movl $1, -4(%rbp) 25; CHECK-NEXT: jmp .LBB0_6 26; CHECK-NEXT: .LBB0_1: 27; CHECK-NEXT: callq OUTLINED_FUNCTION_0 28; CHECK-NEXT: cmpl $0, -8(%rbp) 29; CHECK-NEXT: jne .LBB0_5 30; CHECK-NEXT: .LBB0_4: 31; CHECK-NEXT: callq OUTLINED_FUNCTION_0 32; CHECK-NEXT: .LBB0_6: 33; CHECK-NEXT: xorl %eax, %eax 34; CHECK-NEXT: addq $20, %rsp 35; CHECK-NEXT: popq %rbp 36; CHECK-NEXT: .cfi_def_cfa %rsp, 8 37; CHECK-NEXT: retq 38 %1 = alloca i32, align 4 39 %2 = alloca i32, align 4 40 %3 = alloca i32, align 4 41 %4 = alloca i32, align 4 42 %5 = alloca i32, align 4 43 store i32 0, i32* %1, align 4 44 store i32 0, i32* %2, align 4 45 %6 = load i32, i32* %2, align 4 46 %7 = icmp ne i32 %6, 0 47 br i1 %7, label %9, label %8 48 49 store i32 1, i32* %2, align 4 50 store i32 2, i32* %3, align 4 51 store i32 3, i32* %4, align 4 52 store i32 4, i32* %5, align 4 53 br label %10 54 55 store i32 1, i32* %4, align 4 56 br label %10 57 58 %11 = load i32, i32* %2, align 4 59 %12 = icmp ne i32 %11, 0 60 br i1 %12, label %14, label %13 61 62 store i32 1, i32* %2, align 4 63 store i32 2, i32* %3, align 4 64 store i32 3, i32* %4, align 4 65 store i32 4, i32* %5, align 4 66 br label %15 67 68 store i32 1, i32* %4, align 4 69 br label %15 70 71 ret i32 0 72} 73 74define dso_local i32 @main() #0 { 75; CHECK-LABEL: main: 76; CHECK: # %bb.0: 77; CHECK-NEXT: pushq %rbp 78; CHECK-NEXT: .cfi_def_cfa_offset 16 79; CHECK-NEXT: .cfi_offset %rbp, -16 80; CHECK-NEXT: movq %rsp, %rbp 81; CHECK-NEXT: .cfi_def_cfa_register %rbp 82; CHECK-NEXT: subq $20, %rsp 83; CHECK-NEXT: movl $0, -20(%rbp) 84; CHECK-NEXT: callq OUTLINED_FUNCTION_1 85; CHECK-NEXT: movl $1, x(%rip) 86; CHECK-NEXT: #APP 87; CHECK-NEXT: #NO_APP 88; CHECK-NEXT: callq OUTLINED_FUNCTION_1 89; CHECK-NEXT: xorl %eax, %eax 90; CHECK-NEXT: addq $20, %rsp 91; CHECK-NEXT: popq %rbp 92; CHECK-NEXT: .cfi_def_cfa %rsp, 8 93; CHECK-NEXT: retq 94 %1 = alloca i32, align 4 95 %2 = alloca i32, align 4 96 %3 = alloca i32, align 4 97 %4 = alloca i32, align 4 98 %5 = alloca i32, align 4 99 100 store i32 0, i32* %1, align 4 101 store i32 0, i32* @x, align 4 102 store i32 1, i32* %2, align 4 103 store i32 2, i32* %3, align 4 104 store i32 3, i32* %4, align 4 105 store i32 4, i32* %5, align 4 106 store i32 1, i32* @x, align 4 107 call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() 108 store i32 1, i32* %2, align 4 109 store i32 2, i32* %3, align 4 110 store i32 3, i32* %4, align 4 111 store i32 4, i32* %5, align 4 112 ret i32 0 113} 114 115attributes #0 = { noredzone nounwind ssp uwtable "frame-pointer"="all" } 116