| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,65 @@ | ||
| ; RUN: llc -enable-machine-outliner -mtriple=sparc-unknown-linux < %s | FileCheck %s | ||
| ; | ||
| ; NOTE: Machine outliner doesn't run. | ||
| @x = global i32 0, align 4 | ||
|
|
||
| define i32 @check_boundaries() #0 { | ||
| %1 = alloca i32, align 4 | ||
| %2 = alloca i32, align 4 | ||
| %3 = alloca i32, align 4 | ||
| %4 = alloca i32, align 4 | ||
| %5 = alloca i32, align 4 | ||
| store i32 0, i32* %1, align 4 | ||
| store i32 0, i32* %2, align 4 | ||
| %6 = load i32, i32* %2, align 4 | ||
| %7 = icmp ne i32 %6, 0 | ||
| br i1 %7, label %9, label %8 | ||
|
|
||
| store i32 1, i32* %2, align 4 | ||
| store i32 2, i32* %3, align 4 | ||
| store i32 3, i32* %4, align 4 | ||
| store i32 4, i32* %5, align 4 | ||
| br label %10 | ||
|
|
||
| store i32 1, i32* %4, align 4 | ||
| br label %10 | ||
|
|
||
| %11 = load i32, i32* %2, align 4 | ||
| %12 = icmp ne i32 %11, 0 | ||
| br i1 %12, label %14, label %13 | ||
|
|
||
| store i32 1, i32* %2, align 4 | ||
| store i32 2, i32* %3, align 4 | ||
| store i32 3, i32* %4, align 4 | ||
| store i32 4, i32* %5, align 4 | ||
| br label %15 | ||
|
|
||
| store i32 1, i32* %4, align 4 | ||
| br label %15 | ||
|
|
||
| ret i32 0 | ||
| } | ||
|
|
||
| define i32 @main() #0 { | ||
| %1 = alloca i32, align 4 | ||
| %2 = alloca i32, align 4 | ||
| %3 = alloca i32, align 4 | ||
| %4 = alloca i32, align 4 | ||
| %5 = alloca i32, align 4 | ||
|
|
||
| store i32 0, i32* %1, align 4 | ||
| store i32 0, i32* @x, align 4 | ||
| store i32 1, i32* %2, align 4 | ||
| store i32 2, i32* %3, align 4 | ||
| store i32 3, i32* %4, align 4 | ||
| store i32 4, i32* %5, align 4 | ||
| store i32 1, i32* @x, align 4 | ||
| call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() | ||
| store i32 1, i32* %2, align 4 | ||
| store i32 2, i32* %3, align 4 | ||
| store i32 3, i32* %4, align 4 | ||
| store i32 4, i32* %5, align 4 | ||
| ret i32 0 | ||
| } | ||
|
|
||
| attributes #0 = { noredzone nounwind ssp uwtable "frame-pointer"="all" } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,138 @@ | ||
| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --include-generated-funcs | ||
| ; RUN: llc -enable-machine-outliner -mtriple=sparc-unknown-linux < %s | FileCheck %s | ||
| ; NOTE: Machine outliner doesn't run. | ||
| @x = global i32 0, align 4 | ||
|
|
||
| define i32 @check_boundaries() #0 { | ||
| %1 = alloca i32, align 4 | ||
| %2 = alloca i32, align 4 | ||
| %3 = alloca i32, align 4 | ||
| %4 = alloca i32, align 4 | ||
| %5 = alloca i32, align 4 | ||
| store i32 0, i32* %1, align 4 | ||
| store i32 0, i32* %2, align 4 | ||
| %6 = load i32, i32* %2, align 4 | ||
| %7 = icmp ne i32 %6, 0 | ||
| br i1 %7, label %9, label %8 | ||
|
|
||
| store i32 1, i32* %2, align 4 | ||
| store i32 2, i32* %3, align 4 | ||
| store i32 3, i32* %4, align 4 | ||
| store i32 4, i32* %5, align 4 | ||
| br label %10 | ||
|
|
||
| store i32 1, i32* %4, align 4 | ||
| br label %10 | ||
|
|
||
| %11 = load i32, i32* %2, align 4 | ||
| %12 = icmp ne i32 %11, 0 | ||
| br i1 %12, label %14, label %13 | ||
|
|
||
| store i32 1, i32* %2, align 4 | ||
| store i32 2, i32* %3, align 4 | ||
| store i32 3, i32* %4, align 4 | ||
| store i32 4, i32* %5, align 4 | ||
| br label %15 | ||
|
|
||
| store i32 1, i32* %4, align 4 | ||
| br label %15 | ||
|
|
||
| ret i32 0 | ||
| } | ||
|
|
||
| define i32 @main() #0 { | ||
| %1 = alloca i32, align 4 | ||
| %2 = alloca i32, align 4 | ||
| %3 = alloca i32, align 4 | ||
| %4 = alloca i32, align 4 | ||
| %5 = alloca i32, align 4 | ||
|
|
||
| store i32 0, i32* %1, align 4 | ||
| store i32 0, i32* @x, align 4 | ||
| store i32 1, i32* %2, align 4 | ||
| store i32 2, i32* %3, align 4 | ||
| store i32 3, i32* %4, align 4 | ||
| store i32 4, i32* %5, align 4 | ||
| store i32 1, i32* @x, align 4 | ||
| call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() | ||
| store i32 1, i32* %2, align 4 | ||
| store i32 2, i32* %3, align 4 | ||
| store i32 3, i32* %4, align 4 | ||
| store i32 4, i32* %5, align 4 | ||
| ret i32 0 | ||
| } | ||
|
|
||
| attributes #0 = { noredzone nounwind ssp uwtable "frame-pointer"="all" } | ||
| ; CHECK-LABEL: check_boundaries: | ||
| ; CHECK: .cfi_startproc | ||
| ; CHECK-NEXT: ! %bb.0: | ||
| ; CHECK-NEXT: save %sp, -112, %sp | ||
| ; CHECK-NEXT: .cfi_def_cfa_register %fp | ||
| ; CHECK-NEXT: .cfi_window_save | ||
| ; CHECK-NEXT: .cfi_register %o7, %i7 | ||
| ; CHECK-NEXT: st %g0, [%fp+-4] | ||
| ; CHECK-NEXT: mov %g0, %i0 | ||
| ; CHECK-NEXT: cmp %i0, 0 | ||
| ; CHECK-NEXT: st %g0, [%fp+-8] | ||
| ; CHECK-NEXT: be .LBB0_1 | ||
| ; CHECK-NEXT: mov 1, %i0 | ||
| ; CHECK-NEXT: ! %bb.2: | ||
| ; CHECK-NEXT: ba .LBB0_3 | ||
| ; CHECK-NEXT: st %i0, [%fp+-16] | ||
| ; CHECK-NEXT: .LBB0_1: | ||
| ; CHECK-NEXT: st %i0, [%fp+-8] | ||
| ; CHECK-NEXT: mov 2, %i0 | ||
| ; CHECK-NEXT: st %i0, [%fp+-12] | ||
| ; CHECK-NEXT: mov 3, %i0 | ||
| ; CHECK-NEXT: st %i0, [%fp+-16] | ||
| ; CHECK-NEXT: mov 4, %i0 | ||
| ; CHECK-NEXT: st %i0, [%fp+-20] | ||
| ; CHECK-NEXT: .LBB0_3: | ||
| ; CHECK-NEXT: ld [%fp+-8], %i0 | ||
| ; CHECK-NEXT: cmp %i0, 0 | ||
| ; CHECK-NEXT: be .LBB0_4 | ||
| ; CHECK-NEXT: nop | ||
| ; CHECK-NEXT: ! %bb.5: | ||
| ; CHECK-NEXT: mov 1, %i0 | ||
| ; CHECK-NEXT: ba .LBB0_6 | ||
| ; CHECK-NEXT: st %i0, [%fp+-16] | ||
| ; CHECK-NEXT: .LBB0_4: | ||
| ; CHECK-NEXT: mov 1, %i0 | ||
| ; CHECK-NEXT: st %i0, [%fp+-8] | ||
| ; CHECK-NEXT: mov 2, %i0 | ||
| ; CHECK-NEXT: st %i0, [%fp+-12] | ||
| ; CHECK-NEXT: mov 3, %i0 | ||
| ; CHECK-NEXT: st %i0, [%fp+-16] | ||
| ; CHECK-NEXT: mov 4, %i0 | ||
| ; CHECK-NEXT: st %i0, [%fp+-20] | ||
| ; CHECK-NEXT: .LBB0_6: | ||
| ; CHECK-NEXT: ret | ||
| ; CHECK-NEXT: restore %g0, %g0, %o0 | ||
| ; | ||
| ; CHECK-LABEL: main: | ||
| ; CHECK: .cfi_startproc | ||
| ; CHECK-NEXT: ! %bb.0: | ||
| ; CHECK-NEXT: save %sp, -112, %sp | ||
| ; CHECK-NEXT: .cfi_def_cfa_register %fp | ||
| ; CHECK-NEXT: .cfi_window_save | ||
| ; CHECK-NEXT: .cfi_register %o7, %i7 | ||
| ; CHECK-NEXT: st %g0, [%fp+-4] | ||
| ; CHECK-NEXT: sethi %hi(x), %i0 | ||
| ; CHECK-NEXT: mov 1, %i1 | ||
| ; CHECK-NEXT: st %i1, [%fp+-8] | ||
| ; CHECK-NEXT: mov 2, %i2 | ||
| ; CHECK-NEXT: st %i2, [%fp+-12] | ||
| ; CHECK-NEXT: mov 3, %i3 | ||
| ; CHECK-NEXT: st %i3, [%fp+-16] | ||
| ; CHECK-NEXT: mov 4, %i4 | ||
| ; CHECK-NEXT: st %i4, [%fp+-20] | ||
| ; CHECK-NEXT: st %i1, [%i0+%lo(x)] | ||
| ; CHECK-NEXT: !APP | ||
| ; CHECK-NEXT: !NO_APP | ||
| ; CHECK-NEXT: st %i1, [%fp+-8] | ||
| ; CHECK-NEXT: st %i2, [%fp+-12] | ||
| ; CHECK-NEXT: st %i3, [%fp+-16] | ||
| ; CHECK-NEXT: mov %g0, %i0 | ||
| ; CHECK-NEXT: st %i4, [%fp+-20] | ||
| ; CHECK-NEXT: ret | ||
| ; CHECK-NEXT: restore |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,138 @@ | ||
| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py | ||
| ; RUN: llc -enable-machine-outliner -mtriple=sparc-unknown-linux < %s | FileCheck %s | ||
| ; | ||
| ; NOTE: Machine outliner doesn't run. | ||
| @x = global i32 0, align 4 | ||
|
|
||
| define i32 @check_boundaries() #0 { | ||
| ; CHECK-LABEL: check_boundaries: | ||
| ; CHECK: .cfi_startproc | ||
| ; CHECK-NEXT: ! %bb.0: | ||
| ; CHECK-NEXT: save %sp, -112, %sp | ||
| ; CHECK-NEXT: .cfi_def_cfa_register %fp | ||
| ; CHECK-NEXT: .cfi_window_save | ||
| ; CHECK-NEXT: .cfi_register %o7, %i7 | ||
| ; CHECK-NEXT: st %g0, [%fp+-4] | ||
| ; CHECK-NEXT: mov %g0, %i0 | ||
| ; CHECK-NEXT: cmp %i0, 0 | ||
| ; CHECK-NEXT: st %g0, [%fp+-8] | ||
| ; CHECK-NEXT: be .LBB0_1 | ||
| ; CHECK-NEXT: mov 1, %i0 | ||
| ; CHECK-NEXT: ! %bb.2: | ||
| ; CHECK-NEXT: ba .LBB0_3 | ||
| ; CHECK-NEXT: st %i0, [%fp+-16] | ||
| ; CHECK-NEXT: .LBB0_1: | ||
| ; CHECK-NEXT: st %i0, [%fp+-8] | ||
| ; CHECK-NEXT: mov 2, %i0 | ||
| ; CHECK-NEXT: st %i0, [%fp+-12] | ||
| ; CHECK-NEXT: mov 3, %i0 | ||
| ; CHECK-NEXT: st %i0, [%fp+-16] | ||
| ; CHECK-NEXT: mov 4, %i0 | ||
| ; CHECK-NEXT: st %i0, [%fp+-20] | ||
| ; CHECK-NEXT: .LBB0_3: | ||
| ; CHECK-NEXT: ld [%fp+-8], %i0 | ||
| ; CHECK-NEXT: cmp %i0, 0 | ||
| ; CHECK-NEXT: be .LBB0_4 | ||
| ; CHECK-NEXT: nop | ||
| ; CHECK-NEXT: ! %bb.5: | ||
| ; CHECK-NEXT: mov 1, %i0 | ||
| ; CHECK-NEXT: ba .LBB0_6 | ||
| ; CHECK-NEXT: st %i0, [%fp+-16] | ||
| ; CHECK-NEXT: .LBB0_4: | ||
| ; CHECK-NEXT: mov 1, %i0 | ||
| ; CHECK-NEXT: st %i0, [%fp+-8] | ||
| ; CHECK-NEXT: mov 2, %i0 | ||
| ; CHECK-NEXT: st %i0, [%fp+-12] | ||
| ; CHECK-NEXT: mov 3, %i0 | ||
| ; CHECK-NEXT: st %i0, [%fp+-16] | ||
| ; CHECK-NEXT: mov 4, %i0 | ||
| ; CHECK-NEXT: st %i0, [%fp+-20] | ||
| ; CHECK-NEXT: .LBB0_6: | ||
| ; CHECK-NEXT: ret | ||
| ; CHECK-NEXT: restore %g0, %g0, %o0 | ||
| %1 = alloca i32, align 4 | ||
| %2 = alloca i32, align 4 | ||
| %3 = alloca i32, align 4 | ||
| %4 = alloca i32, align 4 | ||
| %5 = alloca i32, align 4 | ||
| store i32 0, i32* %1, align 4 | ||
| store i32 0, i32* %2, align 4 | ||
| %6 = load i32, i32* %2, align 4 | ||
| %7 = icmp ne i32 %6, 0 | ||
| br i1 %7, label %9, label %8 | ||
|
|
||
| store i32 1, i32* %2, align 4 | ||
| store i32 2, i32* %3, align 4 | ||
| store i32 3, i32* %4, align 4 | ||
| store i32 4, i32* %5, align 4 | ||
| br label %10 | ||
|
|
||
| store i32 1, i32* %4, align 4 | ||
| br label %10 | ||
|
|
||
| %11 = load i32, i32* %2, align 4 | ||
| %12 = icmp ne i32 %11, 0 | ||
| br i1 %12, label %14, label %13 | ||
|
|
||
| store i32 1, i32* %2, align 4 | ||
| store i32 2, i32* %3, align 4 | ||
| store i32 3, i32* %4, align 4 | ||
| store i32 4, i32* %5, align 4 | ||
| br label %15 | ||
|
|
||
| store i32 1, i32* %4, align 4 | ||
| br label %15 | ||
|
|
||
| ret i32 0 | ||
| } | ||
|
|
||
| define i32 @main() #0 { | ||
| ; CHECK-LABEL: main: | ||
| ; CHECK: .cfi_startproc | ||
| ; CHECK-NEXT: ! %bb.0: | ||
| ; CHECK-NEXT: save %sp, -112, %sp | ||
| ; CHECK-NEXT: .cfi_def_cfa_register %fp | ||
| ; CHECK-NEXT: .cfi_window_save | ||
| ; CHECK-NEXT: .cfi_register %o7, %i7 | ||
| ; CHECK-NEXT: st %g0, [%fp+-4] | ||
| ; CHECK-NEXT: sethi %hi(x), %i0 | ||
| ; CHECK-NEXT: mov 1, %i1 | ||
| ; CHECK-NEXT: st %i1, [%fp+-8] | ||
| ; CHECK-NEXT: mov 2, %i2 | ||
| ; CHECK-NEXT: st %i2, [%fp+-12] | ||
| ; CHECK-NEXT: mov 3, %i3 | ||
| ; CHECK-NEXT: st %i3, [%fp+-16] | ||
| ; CHECK-NEXT: mov 4, %i4 | ||
| ; CHECK-NEXT: st %i4, [%fp+-20] | ||
| ; CHECK-NEXT: st %i1, [%i0+%lo(x)] | ||
| ; CHECK-NEXT: !APP | ||
| ; CHECK-NEXT: !NO_APP | ||
| ; CHECK-NEXT: st %i1, [%fp+-8] | ||
| ; CHECK-NEXT: st %i2, [%fp+-12] | ||
| ; CHECK-NEXT: st %i3, [%fp+-16] | ||
| ; CHECK-NEXT: mov %g0, %i0 | ||
| ; CHECK-NEXT: st %i4, [%fp+-20] | ||
| ; CHECK-NEXT: ret | ||
| ; CHECK-NEXT: restore | ||
| %1 = alloca i32, align 4 | ||
| %2 = alloca i32, align 4 | ||
| %3 = alloca i32, align 4 | ||
| %4 = alloca i32, align 4 | ||
| %5 = alloca i32, align 4 | ||
|
|
||
| store i32 0, i32* %1, align 4 | ||
| store i32 0, i32* @x, align 4 | ||
| store i32 1, i32* %2, align 4 | ||
| store i32 2, i32* %3, align 4 | ||
| store i32 3, i32* %4, align 4 | ||
| store i32 4, i32* %5, align 4 | ||
| store i32 1, i32* @x, align 4 | ||
| call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() | ||
| store i32 1, i32* %2, align 4 | ||
| store i32 2, i32* %3, align 4 | ||
| store i32 3, i32* %4, align 4 | ||
| store i32 4, i32* %5, align 4 | ||
| ret i32 0 | ||
| } | ||
|
|
||
| attributes #0 = { noredzone nounwind ssp uwtable "frame-pointer"="all" } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,65 @@ | ||
| ; RUN: llc -enable-machine-outliner -mtriple=s390x-unknown-linux < %s | FileCheck %s | ||
| ; | ||
| ; NOTE: Machine outliner doesn't run. | ||
| @x = global i32 0, align 4 | ||
|
|
||
| define i32 @check_boundaries() #0 { | ||
| %1 = alloca i32, align 4 | ||
| %2 = alloca i32, align 4 | ||
| %3 = alloca i32, align 4 | ||
| %4 = alloca i32, align 4 | ||
| %5 = alloca i32, align 4 | ||
| store i32 0, i32* %1, align 4 | ||
| store i32 0, i32* %2, align 4 | ||
| %6 = load i32, i32* %2, align 4 | ||
| %7 = icmp ne i32 %6, 0 | ||
| br i1 %7, label %9, label %8 | ||
|
|
||
| store i32 1, i32* %2, align 4 | ||
| store i32 2, i32* %3, align 4 | ||
| store i32 3, i32* %4, align 4 | ||
| store i32 4, i32* %5, align 4 | ||
| br label %10 | ||
|
|
||
| store i32 1, i32* %4, align 4 | ||
| br label %10 | ||
|
|
||
| %11 = load i32, i32* %2, align 4 | ||
| %12 = icmp ne i32 %11, 0 | ||
| br i1 %12, label %14, label %13 | ||
|
|
||
| store i32 1, i32* %2, align 4 | ||
| store i32 2, i32* %3, align 4 | ||
| store i32 3, i32* %4, align 4 | ||
| store i32 4, i32* %5, align 4 | ||
| br label %15 | ||
|
|
||
| store i32 1, i32* %4, align 4 | ||
| br label %15 | ||
|
|
||
| ret i32 0 | ||
| } | ||
|
|
||
| define i32 @main() #0 { | ||
| %1 = alloca i32, align 4 | ||
| %2 = alloca i32, align 4 | ||
| %3 = alloca i32, align 4 | ||
| %4 = alloca i32, align 4 | ||
| %5 = alloca i32, align 4 | ||
|
|
||
| store i32 0, i32* %1, align 4 | ||
| store i32 0, i32* @x, align 4 | ||
| store i32 1, i32* %2, align 4 | ||
| store i32 2, i32* %3, align 4 | ||
| store i32 3, i32* %4, align 4 | ||
| store i32 4, i32* %5, align 4 | ||
| store i32 1, i32* @x, align 4 | ||
| call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() | ||
| store i32 1, i32* %2, align 4 | ||
| store i32 2, i32* %3, align 4 | ||
| store i32 3, i32* %4, align 4 | ||
| store i32 4, i32* %5, align 4 | ||
| ret i32 0 | ||
| } | ||
|
|
||
| attributes #0 = { noredzone nounwind ssp uwtable "frame-pointer"="all" } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,127 @@ | ||
| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --include-generated-funcs | ||
| ; RUN: llc -enable-machine-outliner -mtriple=s390x-unknown-linux < %s | FileCheck %s | ||
| ; NOTE: Machine outliner doesn't run. | ||
| @x = global i32 0, align 4 | ||
|
|
||
| define i32 @check_boundaries() #0 { | ||
| %1 = alloca i32, align 4 | ||
| %2 = alloca i32, align 4 | ||
| %3 = alloca i32, align 4 | ||
| %4 = alloca i32, align 4 | ||
| %5 = alloca i32, align 4 | ||
| store i32 0, i32* %1, align 4 | ||
| store i32 0, i32* %2, align 4 | ||
| %6 = load i32, i32* %2, align 4 | ||
| %7 = icmp ne i32 %6, 0 | ||
| br i1 %7, label %9, label %8 | ||
|
|
||
| store i32 1, i32* %2, align 4 | ||
| store i32 2, i32* %3, align 4 | ||
| store i32 3, i32* %4, align 4 | ||
| store i32 4, i32* %5, align 4 | ||
| br label %10 | ||
|
|
||
| store i32 1, i32* %4, align 4 | ||
| br label %10 | ||
|
|
||
| %11 = load i32, i32* %2, align 4 | ||
| %12 = icmp ne i32 %11, 0 | ||
| br i1 %12, label %14, label %13 | ||
|
|
||
| store i32 1, i32* %2, align 4 | ||
| store i32 2, i32* %3, align 4 | ||
| store i32 3, i32* %4, align 4 | ||
| store i32 4, i32* %5, align 4 | ||
| br label %15 | ||
|
|
||
| store i32 1, i32* %4, align 4 | ||
| br label %15 | ||
|
|
||
| ret i32 0 | ||
| } | ||
|
|
||
| define i32 @main() #0 { | ||
| %1 = alloca i32, align 4 | ||
| %2 = alloca i32, align 4 | ||
| %3 = alloca i32, align 4 | ||
| %4 = alloca i32, align 4 | ||
| %5 = alloca i32, align 4 | ||
|
|
||
| store i32 0, i32* %1, align 4 | ||
| store i32 0, i32* @x, align 4 | ||
| store i32 1, i32* %2, align 4 | ||
| store i32 2, i32* %3, align 4 | ||
| store i32 3, i32* %4, align 4 | ||
| store i32 4, i32* %5, align 4 | ||
| store i32 1, i32* @x, align 4 | ||
| call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() | ||
| store i32 1, i32* %2, align 4 | ||
| store i32 2, i32* %3, align 4 | ||
| store i32 3, i32* %4, align 4 | ||
| store i32 4, i32* %5, align 4 | ||
| ret i32 0 | ||
| } | ||
|
|
||
| attributes #0 = { noredzone nounwind ssp uwtable "frame-pointer"="all" } | ||
| ; CHECK-LABEL: check_boundaries: | ||
| ; CHECK: # %bb.0: | ||
| ; CHECK-NEXT: stmg %r11, %r15, 88(%r15) | ||
| ; CHECK-NEXT: .cfi_offset %r11, -72 | ||
| ; CHECK-NEXT: .cfi_offset %r15, -40 | ||
| ; CHECK-NEXT: aghi %r15, -184 | ||
| ; CHECK-NEXT: .cfi_def_cfa_offset 344 | ||
| ; CHECK-NEXT: lgr %r11, %r15 | ||
| ; CHECK-NEXT: .cfi_def_cfa_register %r11 | ||
| ; CHECK-NEXT: mvhi 180(%r11), 0 | ||
| ; CHECK-NEXT: lhi %r0, 0 | ||
| ; CHECK-NEXT: mvhi 176(%r11), 0 | ||
| ; CHECK-NEXT: cije %r0, 0, .LBB0_3 | ||
| ; CHECK-NEXT: # %bb.1: | ||
| ; CHECK-NEXT: mvhi 168(%r11), 1 | ||
| ; CHECK-NEXT: chsi 176(%r11), 0 | ||
| ; CHECK-NEXT: je .LBB0_4 | ||
| ; CHECK-NEXT: .LBB0_2: | ||
| ; CHECK-NEXT: mvhi 168(%r11), 1 | ||
| ; CHECK-NEXT: j .LBB0_5 | ||
| ; CHECK-NEXT: .LBB0_3: | ||
| ; CHECK-NEXT: mvhi 176(%r11), 1 | ||
| ; CHECK-NEXT: mvhi 172(%r11), 2 | ||
| ; CHECK-NEXT: mvhi 168(%r11), 3 | ||
| ; CHECK-NEXT: mvhi 164(%r11), 4 | ||
| ; CHECK-NEXT: chsi 176(%r11), 0 | ||
| ; CHECK-NEXT: jlh .LBB0_2 | ||
| ; CHECK-NEXT: .LBB0_4: | ||
| ; CHECK-NEXT: mvhi 176(%r11), 1 | ||
| ; CHECK-NEXT: mvhi 172(%r11), 2 | ||
| ; CHECK-NEXT: mvhi 168(%r11), 3 | ||
| ; CHECK-NEXT: mvhi 164(%r11), 4 | ||
| ; CHECK-NEXT: .LBB0_5: | ||
| ; CHECK-NEXT: lhi %r2, 0 | ||
| ; CHECK-NEXT: lmg %r11, %r15, 272(%r11) | ||
| ; CHECK-NEXT: br %r14 | ||
| ; | ||
| ; CHECK-LABEL: main: | ||
| ; CHECK: # %bb.0: | ||
| ; CHECK-NEXT: stmg %r11, %r15, 88(%r15) | ||
| ; CHECK-NEXT: .cfi_offset %r11, -72 | ||
| ; CHECK-NEXT: .cfi_offset %r15, -40 | ||
| ; CHECK-NEXT: aghi %r15, -184 | ||
| ; CHECK-NEXT: .cfi_def_cfa_offset 344 | ||
| ; CHECK-NEXT: lgr %r11, %r15 | ||
| ; CHECK-NEXT: .cfi_def_cfa_register %r11 | ||
| ; CHECK-NEXT: mvhi 180(%r11), 0 | ||
| ; CHECK-NEXT: mvhi 176(%r11), 1 | ||
| ; CHECK-NEXT: mvhi 172(%r11), 2 | ||
| ; CHECK-NEXT: mvhi 168(%r11), 3 | ||
| ; CHECK-NEXT: mvhi 164(%r11), 4 | ||
| ; CHECK-NEXT: lhi %r0, 1 | ||
| ; CHECK-NEXT: strl %r0, x | ||
| ; CHECK-NEXT: #APP | ||
| ; CHECK-NEXT: #NO_APP | ||
| ; CHECK-NEXT: mvhi 176(%r11), 1 | ||
| ; CHECK-NEXT: mvhi 172(%r11), 2 | ||
| ; CHECK-NEXT: mvhi 168(%r11), 3 | ||
| ; CHECK-NEXT: lhi %r2, 0 | ||
| ; CHECK-NEXT: mvhi 164(%r11), 4 | ||
| ; CHECK-NEXT: lmg %r11, %r15, 272(%r11) | ||
| ; CHECK-NEXT: br %r14 |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,127 @@ | ||
| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py | ||
| ; RUN: llc -enable-machine-outliner -mtriple=s390x-unknown-linux < %s | FileCheck %s | ||
| ; | ||
| ; NOTE: Machine outliner doesn't run. | ||
| @x = global i32 0, align 4 | ||
|
|
||
| define i32 @check_boundaries() #0 { | ||
| ; CHECK-LABEL: check_boundaries: | ||
| ; CHECK: # %bb.0: | ||
| ; CHECK-NEXT: stmg %r11, %r15, 88(%r15) | ||
| ; CHECK-NEXT: .cfi_offset %r11, -72 | ||
| ; CHECK-NEXT: .cfi_offset %r15, -40 | ||
| ; CHECK-NEXT: aghi %r15, -184 | ||
| ; CHECK-NEXT: .cfi_def_cfa_offset 344 | ||
| ; CHECK-NEXT: lgr %r11, %r15 | ||
| ; CHECK-NEXT: .cfi_def_cfa_register %r11 | ||
| ; CHECK-NEXT: mvhi 180(%r11), 0 | ||
| ; CHECK-NEXT: lhi %r0, 0 | ||
| ; CHECK-NEXT: mvhi 176(%r11), 0 | ||
| ; CHECK-NEXT: cije %r0, 0, .LBB0_3 | ||
| ; CHECK-NEXT: # %bb.1: | ||
| ; CHECK-NEXT: mvhi 168(%r11), 1 | ||
| ; CHECK-NEXT: chsi 176(%r11), 0 | ||
| ; CHECK-NEXT: je .LBB0_4 | ||
| ; CHECK-NEXT: .LBB0_2: | ||
| ; CHECK-NEXT: mvhi 168(%r11), 1 | ||
| ; CHECK-NEXT: j .LBB0_5 | ||
| ; CHECK-NEXT: .LBB0_3: | ||
| ; CHECK-NEXT: mvhi 176(%r11), 1 | ||
| ; CHECK-NEXT: mvhi 172(%r11), 2 | ||
| ; CHECK-NEXT: mvhi 168(%r11), 3 | ||
| ; CHECK-NEXT: mvhi 164(%r11), 4 | ||
| ; CHECK-NEXT: chsi 176(%r11), 0 | ||
| ; CHECK-NEXT: jlh .LBB0_2 | ||
| ; CHECK-NEXT: .LBB0_4: | ||
| ; CHECK-NEXT: mvhi 176(%r11), 1 | ||
| ; CHECK-NEXT: mvhi 172(%r11), 2 | ||
| ; CHECK-NEXT: mvhi 168(%r11), 3 | ||
| ; CHECK-NEXT: mvhi 164(%r11), 4 | ||
| ; CHECK-NEXT: .LBB0_5: | ||
| ; CHECK-NEXT: lhi %r2, 0 | ||
| ; CHECK-NEXT: lmg %r11, %r15, 272(%r11) | ||
| ; CHECK-NEXT: br %r14 | ||
| %1 = alloca i32, align 4 | ||
| %2 = alloca i32, align 4 | ||
| %3 = alloca i32, align 4 | ||
| %4 = alloca i32, align 4 | ||
| %5 = alloca i32, align 4 | ||
| store i32 0, i32* %1, align 4 | ||
| store i32 0, i32* %2, align 4 | ||
| %6 = load i32, i32* %2, align 4 | ||
| %7 = icmp ne i32 %6, 0 | ||
| br i1 %7, label %9, label %8 | ||
|
|
||
| store i32 1, i32* %2, align 4 | ||
| store i32 2, i32* %3, align 4 | ||
| store i32 3, i32* %4, align 4 | ||
| store i32 4, i32* %5, align 4 | ||
| br label %10 | ||
|
|
||
| store i32 1, i32* %4, align 4 | ||
| br label %10 | ||
|
|
||
| %11 = load i32, i32* %2, align 4 | ||
| %12 = icmp ne i32 %11, 0 | ||
| br i1 %12, label %14, label %13 | ||
|
|
||
| store i32 1, i32* %2, align 4 | ||
| store i32 2, i32* %3, align 4 | ||
| store i32 3, i32* %4, align 4 | ||
| store i32 4, i32* %5, align 4 | ||
| br label %15 | ||
|
|
||
| store i32 1, i32* %4, align 4 | ||
| br label %15 | ||
|
|
||
| ret i32 0 | ||
| } | ||
|
|
||
| define i32 @main() #0 { | ||
| ; CHECK-LABEL: main: | ||
| ; CHECK: # %bb.0: | ||
| ; CHECK-NEXT: stmg %r11, %r15, 88(%r15) | ||
| ; CHECK-NEXT: .cfi_offset %r11, -72 | ||
| ; CHECK-NEXT: .cfi_offset %r15, -40 | ||
| ; CHECK-NEXT: aghi %r15, -184 | ||
| ; CHECK-NEXT: .cfi_def_cfa_offset 344 | ||
| ; CHECK-NEXT: lgr %r11, %r15 | ||
| ; CHECK-NEXT: .cfi_def_cfa_register %r11 | ||
| ; CHECK-NEXT: mvhi 180(%r11), 0 | ||
| ; CHECK-NEXT: mvhi 176(%r11), 1 | ||
| ; CHECK-NEXT: mvhi 172(%r11), 2 | ||
| ; CHECK-NEXT: mvhi 168(%r11), 3 | ||
| ; CHECK-NEXT: mvhi 164(%r11), 4 | ||
| ; CHECK-NEXT: lhi %r0, 1 | ||
| ; CHECK-NEXT: strl %r0, x | ||
| ; CHECK-NEXT: #APP | ||
| ; CHECK-NEXT: #NO_APP | ||
| ; CHECK-NEXT: mvhi 176(%r11), 1 | ||
| ; CHECK-NEXT: mvhi 172(%r11), 2 | ||
| ; CHECK-NEXT: mvhi 168(%r11), 3 | ||
| ; CHECK-NEXT: lhi %r2, 0 | ||
| ; CHECK-NEXT: mvhi 164(%r11), 4 | ||
| ; CHECK-NEXT: lmg %r11, %r15, 272(%r11) | ||
| ; CHECK-NEXT: br %r14 | ||
| %1 = alloca i32, align 4 | ||
| %2 = alloca i32, align 4 | ||
| %3 = alloca i32, align 4 | ||
| %4 = alloca i32, align 4 | ||
| %5 = alloca i32, align 4 | ||
|
|
||
| store i32 0, i32* %1, align 4 | ||
| store i32 0, i32* @x, align 4 | ||
| store i32 1, i32* %2, align 4 | ||
| store i32 2, i32* %3, align 4 | ||
| store i32 3, i32* %4, align 4 | ||
| store i32 4, i32* %5, align 4 | ||
| store i32 1, i32* @x, align 4 | ||
| call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() | ||
| store i32 1, i32* %2, align 4 | ||
| store i32 2, i32* %3, align 4 | ||
| store i32 3, i32* %4, align 4 | ||
| store i32 4, i32* %5, align 4 | ||
| ret i32 0 | ||
| } | ||
|
|
||
| attributes #0 = { noredzone nounwind ssp uwtable "frame-pointer"="all" } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,65 @@ | ||
| ; RUN: llc -enable-machine-outliner -mtriple=wasm32-unknown-linux < %s | FileCheck %s | ||
| ; | ||
| ; NOTE: Machine outliner doesn't run. | ||
| @x = global i32 0, align 4 | ||
|
|
||
| define i32 @check_boundaries() #0 { | ||
| %1 = alloca i32, align 4 | ||
| %2 = alloca i32, align 4 | ||
| %3 = alloca i32, align 4 | ||
| %4 = alloca i32, align 4 | ||
| %5 = alloca i32, align 4 | ||
| store i32 0, i32* %1, align 4 | ||
| store i32 0, i32* %2, align 4 | ||
| %6 = load i32, i32* %2, align 4 | ||
| %7 = icmp ne i32 %6, 0 | ||
| br i1 %7, label %9, label %8 | ||
|
|
||
| store i32 1, i32* %2, align 4 | ||
| store i32 2, i32* %3, align 4 | ||
| store i32 3, i32* %4, align 4 | ||
| store i32 4, i32* %5, align 4 | ||
| br label %10 | ||
|
|
||
| store i32 1, i32* %4, align 4 | ||
| br label %10 | ||
|
|
||
| %11 = load i32, i32* %2, align 4 | ||
| %12 = icmp ne i32 %11, 0 | ||
| br i1 %12, label %14, label %13 | ||
|
|
||
| store i32 1, i32* %2, align 4 | ||
| store i32 2, i32* %3, align 4 | ||
| store i32 3, i32* %4, align 4 | ||
| store i32 4, i32* %5, align 4 | ||
| br label %15 | ||
|
|
||
| store i32 1, i32* %4, align 4 | ||
| br label %15 | ||
|
|
||
| ret i32 0 | ||
| } | ||
|
|
||
| define i32 @main() #0 { | ||
| %1 = alloca i32, align 4 | ||
| %2 = alloca i32, align 4 | ||
| %3 = alloca i32, align 4 | ||
| %4 = alloca i32, align 4 | ||
| %5 = alloca i32, align 4 | ||
|
|
||
| store i32 0, i32* %1, align 4 | ||
| store i32 0, i32* @x, align 4 | ||
| store i32 1, i32* %2, align 4 | ||
| store i32 2, i32* %3, align 4 | ||
| store i32 3, i32* %4, align 4 | ||
| store i32 4, i32* %5, align 4 | ||
| store i32 1, i32* @x, align 4 | ||
| call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() | ||
| store i32 1, i32* %2, align 4 | ||
| store i32 2, i32* %3, align 4 | ||
| store i32 3, i32* %4, align 4 | ||
| store i32 4, i32* %5, align 4 | ||
| ret i32 0 | ||
| } | ||
|
|
||
| attributes #0 = { noredzone nounwind ssp uwtable "frame-pointer"="all" } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,191 @@ | ||
| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --include-generated-funcs | ||
| ; RUN: llc -enable-machine-outliner -mtriple=wasm32-unknown-linux < %s | FileCheck %s | ||
| ; NOTE: Machine outliner doesn't run. | ||
| @x = global i32 0, align 4 | ||
|
|
||
| define i32 @check_boundaries() #0 { | ||
| %1 = alloca i32, align 4 | ||
| %2 = alloca i32, align 4 | ||
| %3 = alloca i32, align 4 | ||
| %4 = alloca i32, align 4 | ||
| %5 = alloca i32, align 4 | ||
| store i32 0, i32* %1, align 4 | ||
| store i32 0, i32* %2, align 4 | ||
| %6 = load i32, i32* %2, align 4 | ||
| %7 = icmp ne i32 %6, 0 | ||
| br i1 %7, label %9, label %8 | ||
|
|
||
| store i32 1, i32* %2, align 4 | ||
| store i32 2, i32* %3, align 4 | ||
| store i32 3, i32* %4, align 4 | ||
| store i32 4, i32* %5, align 4 | ||
| br label %10 | ||
|
|
||
| store i32 1, i32* %4, align 4 | ||
| br label %10 | ||
|
|
||
| %11 = load i32, i32* %2, align 4 | ||
| %12 = icmp ne i32 %11, 0 | ||
| br i1 %12, label %14, label %13 | ||
|
|
||
| store i32 1, i32* %2, align 4 | ||
| store i32 2, i32* %3, align 4 | ||
| store i32 3, i32* %4, align 4 | ||
| store i32 4, i32* %5, align 4 | ||
| br label %15 | ||
|
|
||
| store i32 1, i32* %4, align 4 | ||
| br label %15 | ||
|
|
||
| ret i32 0 | ||
| } | ||
|
|
||
| define i32 @main() #0 { | ||
| %1 = alloca i32, align 4 | ||
| %2 = alloca i32, align 4 | ||
| %3 = alloca i32, align 4 | ||
| %4 = alloca i32, align 4 | ||
| %5 = alloca i32, align 4 | ||
|
|
||
| store i32 0, i32* %1, align 4 | ||
| store i32 0, i32* @x, align 4 | ||
| store i32 1, i32* %2, align 4 | ||
| store i32 2, i32* %3, align 4 | ||
| store i32 3, i32* %4, align 4 | ||
| store i32 4, i32* %5, align 4 | ||
| store i32 1, i32* @x, align 4 | ||
| call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() | ||
| store i32 1, i32* %2, align 4 | ||
| store i32 2, i32* %3, align 4 | ||
| store i32 3, i32* %4, align 4 | ||
| store i32 4, i32* %5, align 4 | ||
| ret i32 0 | ||
| } | ||
|
|
||
| attributes #0 = { noredzone nounwind ssp uwtable "frame-pointer"="all" } | ||
| ; CHECK-LABEL: check_boundaries: | ||
| ; CHECK: .functype check_boundaries () -> (i32) | ||
| ; CHECK-NEXT: .local i32 | ||
| ; CHECK-NEXT: # %bb.0: | ||
| ; CHECK-NEXT: global.get __stack_pointer | ||
| ; CHECK-NEXT: i32.const 32 | ||
| ; CHECK-NEXT: i32.sub | ||
| ; CHECK-NEXT: local.tee 0 | ||
| ; CHECK-NEXT: global.set __stack_pointer | ||
| ; CHECK-NEXT: local.get 0 | ||
| ; CHECK-NEXT: i32.const 0 | ||
| ; CHECK-NEXT: i32.store 24 | ||
| ; CHECK-NEXT: local.get 0 | ||
| ; CHECK-NEXT: i32.const 0 | ||
| ; CHECK-NEXT: i32.store 28 | ||
| ; CHECK-NEXT: block | ||
| ; CHECK-NEXT: block | ||
| ; CHECK-NEXT: i32.const 0 | ||
| ; CHECK-NEXT: br_if 0 # 0: down to label1 | ||
| ; CHECK-NEXT: # %bb.1: | ||
| ; CHECK-NEXT: local.get 0 | ||
| ; CHECK-NEXT: i32.const 2 | ||
| ; CHECK-NEXT: i32.store 20 | ||
| ; CHECK-NEXT: local.get 0 | ||
| ; CHECK-NEXT: i32.const 1 | ||
| ; CHECK-NEXT: i32.store 24 | ||
| ; CHECK-NEXT: local.get 0 | ||
| ; CHECK-NEXT: i32.const 3 | ||
| ; CHECK-NEXT: i32.store 16 | ||
| ; CHECK-NEXT: local.get 0 | ||
| ; CHECK-NEXT: i32.const 4 | ||
| ; CHECK-NEXT: i32.store 12 | ||
| ; CHECK-NEXT: br 1 # 1: down to label0 | ||
| ; CHECK-NEXT: .LBB0_2: | ||
| ; CHECK-NEXT: end_block # label1: | ||
| ; CHECK-NEXT: local.get 0 | ||
| ; CHECK-NEXT: i32.const 1 | ||
| ; CHECK-NEXT: i32.store 16 | ||
| ; CHECK-NEXT: .LBB0_3: | ||
| ; CHECK-NEXT: end_block # label0: | ||
| ; CHECK-NEXT: block | ||
| ; CHECK-NEXT: block | ||
| ; CHECK-NEXT: local.get 0 | ||
| ; CHECK-NEXT: i32.load 24 | ||
| ; CHECK-NEXT: br_if 0 # 0: down to label3 | ||
| ; CHECK-NEXT: # %bb.4: | ||
| ; CHECK-NEXT: local.get 0 | ||
| ; CHECK-NEXT: i32.const 2 | ||
| ; CHECK-NEXT: i32.store 20 | ||
| ; CHECK-NEXT: local.get 0 | ||
| ; CHECK-NEXT: i32.const 1 | ||
| ; CHECK-NEXT: i32.store 24 | ||
| ; CHECK-NEXT: local.get 0 | ||
| ; CHECK-NEXT: i32.const 3 | ||
| ; CHECK-NEXT: i32.store 16 | ||
| ; CHECK-NEXT: local.get 0 | ||
| ; CHECK-NEXT: i32.const 4 | ||
| ; CHECK-NEXT: i32.store 12 | ||
| ; CHECK-NEXT: br 1 # 1: down to label2 | ||
| ; CHECK-NEXT: .LBB0_5: | ||
| ; CHECK-NEXT: end_block # label3: | ||
| ; CHECK-NEXT: local.get 0 | ||
| ; CHECK-NEXT: i32.const 1 | ||
| ; CHECK-NEXT: i32.store 16 | ||
| ; CHECK-NEXT: .LBB0_6: | ||
| ; CHECK-NEXT: end_block # label2: | ||
| ; CHECK-NEXT: local.get 0 | ||
| ; CHECK-NEXT: i32.const 32 | ||
| ; CHECK-NEXT: i32.add | ||
| ; CHECK-NEXT: global.set __stack_pointer | ||
| ; CHECK-NEXT: i32.const 0 | ||
| ; CHECK-NEXT: # fallthrough-return | ||
| ; | ||
| ; CHECK-LABEL: __original_main: | ||
| ; CHECK: .functype __original_main () -> (i32) | ||
| ; CHECK-NEXT: .local i32 | ||
| ; CHECK-NEXT: # %bb.0: | ||
| ; CHECK-NEXT: global.get __stack_pointer | ||
| ; CHECK-NEXT: i32.const 32 | ||
| ; CHECK-NEXT: i32.sub | ||
| ; CHECK-NEXT: local.tee 0 | ||
| ; CHECK-NEXT: global.set __stack_pointer | ||
| ; CHECK-NEXT: i32.const 0 | ||
| ; CHECK-NEXT: i32.const 1 | ||
| ; CHECK-NEXT: i32.store x | ||
| ; CHECK-NEXT: local.get 0 | ||
| ; CHECK-NEXT: i32.const 0 | ||
| ; CHECK-NEXT: i32.store 28 | ||
| ; CHECK-NEXT: local.get 0 | ||
| ; CHECK-NEXT: i32.const 1 | ||
| ; CHECK-NEXT: i32.store 24 | ||
| ; CHECK-NEXT: local.get 0 | ||
| ; CHECK-NEXT: i32.const 2 | ||
| ; CHECK-NEXT: i32.store 20 | ||
| ; CHECK-NEXT: local.get 0 | ||
| ; CHECK-NEXT: i32.const 3 | ||
| ; CHECK-NEXT: i32.store 16 | ||
| ; CHECK-NEXT: local.get 0 | ||
| ; CHECK-NEXT: i32.const 4 | ||
| ; CHECK-NEXT: i32.store 12 | ||
| ; CHECK-NEXT: #APP | ||
| ; CHECK-NEXT: #NO_APP | ||
| ; CHECK-NEXT: local.get 0 | ||
| ; CHECK-NEXT: i32.const 2 | ||
| ; CHECK-NEXT: i32.store 20 | ||
| ; CHECK-NEXT: local.get 0 | ||
| ; CHECK-NEXT: i32.const 1 | ||
| ; CHECK-NEXT: i32.store 24 | ||
| ; CHECK-NEXT: local.get 0 | ||
| ; CHECK-NEXT: i32.const 3 | ||
| ; CHECK-NEXT: i32.store 16 | ||
| ; CHECK-NEXT: local.get 0 | ||
| ; CHECK-NEXT: i32.const 4 | ||
| ; CHECK-NEXT: i32.store 12 | ||
| ; CHECK-NEXT: local.get 0 | ||
| ; CHECK-NEXT: i32.const 32 | ||
| ; CHECK-NEXT: i32.add | ||
| ; CHECK-NEXT: global.set __stack_pointer | ||
| ; CHECK-NEXT: i32.const 0 | ||
| ; CHECK-NEXT: # fallthrough-return | ||
| ; | ||
| ; CHECK-LABEL: main: | ||
| ; CHECK: .functype main (i32, i32) -> (i32) | ||
| ; CHECK-NEXT: # %bb.0: # %body | ||
| ; CHECK-NEXT: call __original_main | ||
| ; CHECK-NEXT: # fallthrough-return |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,143 @@ | ||
| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py | ||
| ; RUN: llc -enable-machine-outliner -mtriple=wasm32-unknown-linux < %s | FileCheck %s | ||
| ; | ||
| ; NOTE: Machine outliner doesn't run. | ||
| @x = global i32 0, align 4 | ||
|
|
||
| define i32 @check_boundaries() #0 { | ||
| ; CHECK-LABEL: check_boundaries: | ||
| ; CHECK: .functype check_boundaries () -> (i32) | ||
| ; CHECK-NEXT: .local i32 | ||
| ; CHECK-NEXT: # %bb.0: | ||
| ; CHECK-NEXT: global.get __stack_pointer | ||
| ; CHECK-NEXT: i32.const 32 | ||
| ; CHECK-NEXT: i32.sub | ||
| ; CHECK-NEXT: local.tee 0 | ||
| ; CHECK-NEXT: global.set __stack_pointer | ||
| ; CHECK-NEXT: local.get 0 | ||
| ; CHECK-NEXT: i32.const 0 | ||
| ; CHECK-NEXT: i32.store 24 | ||
| ; CHECK-NEXT: local.get 0 | ||
| ; CHECK-NEXT: i32.const 0 | ||
| ; CHECK-NEXT: i32.store 28 | ||
| ; CHECK-NEXT: block | ||
| ; CHECK-NEXT: block | ||
| ; CHECK-NEXT: i32.const 0 | ||
| ; CHECK-NEXT: br_if 0 # 0: down to label1 | ||
| ; CHECK-NEXT: # %bb.1: | ||
| ; CHECK-NEXT: local.get 0 | ||
| ; CHECK-NEXT: i32.const 2 | ||
| ; CHECK-NEXT: i32.store 20 | ||
| ; CHECK-NEXT: local.get 0 | ||
| ; CHECK-NEXT: i32.const 1 | ||
| ; CHECK-NEXT: i32.store 24 | ||
| ; CHECK-NEXT: local.get 0 | ||
| ; CHECK-NEXT: i32.const 3 | ||
| ; CHECK-NEXT: i32.store 16 | ||
| ; CHECK-NEXT: local.get 0 | ||
| ; CHECK-NEXT: i32.const 4 | ||
| ; CHECK-NEXT: i32.store 12 | ||
| ; CHECK-NEXT: br 1 # 1: down to label0 | ||
| ; CHECK-NEXT: .LBB0_2: | ||
| ; CHECK-NEXT: end_block # label1: | ||
| ; CHECK-NEXT: local.get 0 | ||
| ; CHECK-NEXT: i32.const 1 | ||
| ; CHECK-NEXT: i32.store 16 | ||
| ; CHECK-NEXT: .LBB0_3: | ||
| ; CHECK-NEXT: end_block # label0: | ||
| ; CHECK-NEXT: block | ||
| ; CHECK-NEXT: block | ||
| ; CHECK-NEXT: local.get 0 | ||
| ; CHECK-NEXT: i32.load 24 | ||
| ; CHECK-NEXT: br_if 0 # 0: down to label3 | ||
| ; CHECK-NEXT: # %bb.4: | ||
| ; CHECK-NEXT: local.get 0 | ||
| ; CHECK-NEXT: i32.const 2 | ||
| ; CHECK-NEXT: i32.store 20 | ||
| ; CHECK-NEXT: local.get 0 | ||
| ; CHECK-NEXT: i32.const 1 | ||
| ; CHECK-NEXT: i32.store 24 | ||
| ; CHECK-NEXT: local.get 0 | ||
| ; CHECK-NEXT: i32.const 3 | ||
| ; CHECK-NEXT: i32.store 16 | ||
| ; CHECK-NEXT: local.get 0 | ||
| ; CHECK-NEXT: i32.const 4 | ||
| ; CHECK-NEXT: i32.store 12 | ||
| ; CHECK-NEXT: br 1 # 1: down to label2 | ||
| ; CHECK-NEXT: .LBB0_5: | ||
| ; CHECK-NEXT: end_block # label3: | ||
| ; CHECK-NEXT: local.get 0 | ||
| ; CHECK-NEXT: i32.const 1 | ||
| ; CHECK-NEXT: i32.store 16 | ||
| ; CHECK-NEXT: .LBB0_6: | ||
| ; CHECK-NEXT: end_block # label2: | ||
| ; CHECK-NEXT: local.get 0 | ||
| ; CHECK-NEXT: i32.const 32 | ||
| ; CHECK-NEXT: i32.add | ||
| ; CHECK-NEXT: global.set __stack_pointer | ||
| ; CHECK-NEXT: i32.const 0 | ||
| ; CHECK-NEXT: # fallthrough-return | ||
| %1 = alloca i32, align 4 | ||
| %2 = alloca i32, align 4 | ||
| %3 = alloca i32, align 4 | ||
| %4 = alloca i32, align 4 | ||
| %5 = alloca i32, align 4 | ||
| store i32 0, i32* %1, align 4 | ||
| store i32 0, i32* %2, align 4 | ||
| %6 = load i32, i32* %2, align 4 | ||
| %7 = icmp ne i32 %6, 0 | ||
| br i1 %7, label %9, label %8 | ||
|
|
||
| store i32 1, i32* %2, align 4 | ||
| store i32 2, i32* %3, align 4 | ||
| store i32 3, i32* %4, align 4 | ||
| store i32 4, i32* %5, align 4 | ||
| br label %10 | ||
|
|
||
| store i32 1, i32* %4, align 4 | ||
| br label %10 | ||
|
|
||
| %11 = load i32, i32* %2, align 4 | ||
| %12 = icmp ne i32 %11, 0 | ||
| br i1 %12, label %14, label %13 | ||
|
|
||
| store i32 1, i32* %2, align 4 | ||
| store i32 2, i32* %3, align 4 | ||
| store i32 3, i32* %4, align 4 | ||
| store i32 4, i32* %5, align 4 | ||
| br label %15 | ||
|
|
||
| store i32 1, i32* %4, align 4 | ||
| br label %15 | ||
|
|
||
| ret i32 0 | ||
| } | ||
|
|
||
| define i32 @main() #0 { | ||
| ; CHECK-LABEL: main: | ||
| ; CHECK: .functype main (i32, i32) -> (i32) | ||
| ; CHECK-NEXT: # %bb.0: # %body | ||
| ; CHECK-NEXT: call __original_main | ||
| ; CHECK-NEXT: # fallthrough-return | ||
| %1 = alloca i32, align 4 | ||
| %2 = alloca i32, align 4 | ||
| %3 = alloca i32, align 4 | ||
| %4 = alloca i32, align 4 | ||
| %5 = alloca i32, align 4 | ||
|
|
||
| store i32 0, i32* %1, align 4 | ||
| store i32 0, i32* @x, align 4 | ||
| store i32 1, i32* %2, align 4 | ||
| store i32 2, i32* %3, align 4 | ||
| store i32 3, i32* %4, align 4 | ||
| store i32 4, i32* %5, align 4 | ||
| store i32 1, i32* @x, align 4 | ||
| call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() | ||
| store i32 1, i32* %2, align 4 | ||
| store i32 2, i32* %3, align 4 | ||
| store i32 3, i32* %4, align 4 | ||
| store i32 4, i32* %5, align 4 | ||
| ret i32 0 | ||
| } | ||
|
|
||
| attributes #0 = { noredzone nounwind ssp uwtable "frame-pointer"="all" } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,63 @@ | ||
| ; RUN: llc -enable-machine-outliner -mtriple=x86_64-unknown-linux < %s | FileCheck %s | ||
| @x = global i32 0, align 4 | ||
|
|
||
| define i32 @check_boundaries() #0 { | ||
| %1 = alloca i32, align 4 | ||
| %2 = alloca i32, align 4 | ||
| %3 = alloca i32, align 4 | ||
| %4 = alloca i32, align 4 | ||
| %5 = alloca i32, align 4 | ||
| store i32 0, i32* %1, align 4 | ||
| store i32 0, i32* %2, align 4 | ||
| %6 = load i32, i32* %2, align 4 | ||
| %7 = icmp ne i32 %6, 0 | ||
| br i1 %7, label %9, label %8 | ||
|
|
||
| store i32 1, i32* %2, align 4 | ||
| store i32 2, i32* %3, align 4 | ||
| store i32 3, i32* %4, align 4 | ||
| store i32 4, i32* %5, align 4 | ||
| br label %10 | ||
|
|
||
| store i32 1, i32* %4, align 4 | ||
| br label %10 | ||
|
|
||
| %11 = load i32, i32* %2, align 4 | ||
| %12 = icmp ne i32 %11, 0 | ||
| br i1 %12, label %14, label %13 | ||
|
|
||
| store i32 1, i32* %2, align 4 | ||
| store i32 2, i32* %3, align 4 | ||
| store i32 3, i32* %4, align 4 | ||
| store i32 4, i32* %5, align 4 | ||
| br label %15 | ||
|
|
||
| store i32 1, i32* %4, align 4 | ||
| br label %15 | ||
|
|
||
| ret i32 0 | ||
| } | ||
|
|
||
| define i32 @main() #0 { | ||
| %1 = alloca i32, align 4 | ||
| %2 = alloca i32, align 4 | ||
| %3 = alloca i32, align 4 | ||
| %4 = alloca i32, align 4 | ||
| %5 = alloca i32, align 4 | ||
|
|
||
| store i32 0, i32* %1, align 4 | ||
| store i32 0, i32* @x, align 4 | ||
| store i32 1, i32* %2, align 4 | ||
| store i32 2, i32* %3, align 4 | ||
| store i32 3, i32* %4, align 4 | ||
| store i32 4, i32* %5, align 4 | ||
| store i32 1, i32* @x, align 4 | ||
| call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() | ||
| store i32 1, i32* %2, align 4 | ||
| store i32 2, i32* %3, align 4 | ||
| store i32 3, i32* %4, align 4 | ||
| store i32 4, i32* %5, align 4 | ||
| ret i32 0 | ||
| } | ||
|
|
||
| attributes #0 = { noredzone nounwind ssp uwtable "frame-pointer"="all" } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,132 @@ | ||
| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --include-generated-funcs | ||
| ; RUN: llc -enable-machine-outliner -mtriple=x86_64-unknown-linux < %s | FileCheck %s | ||
| @x = global i32 0, align 4 | ||
|
|
||
| define i32 @check_boundaries() #0 { | ||
| %1 = alloca i32, align 4 | ||
| %2 = alloca i32, align 4 | ||
| %3 = alloca i32, align 4 | ||
| %4 = alloca i32, align 4 | ||
| %5 = alloca i32, align 4 | ||
| store i32 0, i32* %1, align 4 | ||
| store i32 0, i32* %2, align 4 | ||
| %6 = load i32, i32* %2, align 4 | ||
| %7 = icmp ne i32 %6, 0 | ||
| br i1 %7, label %9, label %8 | ||
|
|
||
| store i32 1, i32* %2, align 4 | ||
| store i32 2, i32* %3, align 4 | ||
| store i32 3, i32* %4, align 4 | ||
| store i32 4, i32* %5, align 4 | ||
| br label %10 | ||
|
|
||
| store i32 1, i32* %4, align 4 | ||
| br label %10 | ||
|
|
||
| %11 = load i32, i32* %2, align 4 | ||
| %12 = icmp ne i32 %11, 0 | ||
| br i1 %12, label %14, label %13 | ||
|
|
||
| store i32 1, i32* %2, align 4 | ||
| store i32 2, i32* %3, align 4 | ||
| store i32 3, i32* %4, align 4 | ||
| store i32 4, i32* %5, align 4 | ||
| br label %15 | ||
|
|
||
| store i32 1, i32* %4, align 4 | ||
| br label %15 | ||
|
|
||
| ret i32 0 | ||
| } | ||
|
|
||
| define i32 @main() #0 { | ||
| %1 = alloca i32, align 4 | ||
| %2 = alloca i32, align 4 | ||
| %3 = alloca i32, align 4 | ||
| %4 = alloca i32, align 4 | ||
| %5 = alloca i32, align 4 | ||
|
|
||
| store i32 0, i32* %1, align 4 | ||
| store i32 0, i32* @x, align 4 | ||
| store i32 1, i32* %2, align 4 | ||
| store i32 2, i32* %3, align 4 | ||
| store i32 3, i32* %4, align 4 | ||
| store i32 4, i32* %5, align 4 | ||
| store i32 1, i32* @x, align 4 | ||
| call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() | ||
| store i32 1, i32* %2, align 4 | ||
| store i32 2, i32* %3, align 4 | ||
| store i32 3, i32* %4, align 4 | ||
| store i32 4, i32* %5, align 4 | ||
| ret i32 0 | ||
| } | ||
|
|
||
| attributes #0 = { noredzone nounwind ssp uwtable "frame-pointer"="all" } | ||
| ; CHECK-LABEL: check_boundaries: | ||
| ; CHECK: # %bb.0: | ||
| ; CHECK-NEXT: pushq %rbp | ||
| ; CHECK-NEXT: .cfi_def_cfa_offset 16 | ||
| ; CHECK-NEXT: .cfi_offset %rbp, -16 | ||
| ; CHECK-NEXT: movq %rsp, %rbp | ||
| ; CHECK-NEXT: .cfi_def_cfa_register %rbp | ||
| ; CHECK-NEXT: subq $20, %rsp | ||
| ; CHECK-NEXT: movl $0, -20(%rbp) | ||
| ; CHECK-NEXT: movl $0, -8(%rbp) | ||
| ; CHECK-NEXT: xorl %eax, %eax | ||
| ; CHECK-NEXT: testb %al, %al | ||
| ; CHECK-NEXT: je .LBB0_1 | ||
| ; CHECK-NEXT: # %bb.2: | ||
| ; CHECK-NEXT: movl $1, -4(%rbp) | ||
| ; CHECK-NEXT: cmpl $0, -8(%rbp) | ||
| ; CHECK-NEXT: je .LBB0_4 | ||
| ; CHECK-NEXT: .LBB0_5: | ||
| ; CHECK-NEXT: movl $1, -4(%rbp) | ||
| ; CHECK-NEXT: jmp .LBB0_6 | ||
| ; CHECK-NEXT: .LBB0_1: | ||
| ; CHECK-NEXT: callq OUTLINED_FUNCTION_0 | ||
| ; CHECK-NEXT: cmpl $0, -8(%rbp) | ||
| ; CHECK-NEXT: jne .LBB0_5 | ||
| ; CHECK-NEXT: .LBB0_4: | ||
| ; CHECK-NEXT: callq OUTLINED_FUNCTION_0 | ||
| ; CHECK-NEXT: .LBB0_6: | ||
| ; CHECK-NEXT: xorl %eax, %eax | ||
| ; CHECK-NEXT: addq $20, %rsp | ||
| ; CHECK-NEXT: popq %rbp | ||
| ; CHECK-NEXT: .cfi_def_cfa %rsp, 8 | ||
| ; CHECK-NEXT: retq | ||
| ; | ||
| ; CHECK-LABEL: main: | ||
| ; CHECK: # %bb.0: | ||
| ; CHECK-NEXT: pushq %rbp | ||
| ; CHECK-NEXT: .cfi_def_cfa_offset 16 | ||
| ; CHECK-NEXT: .cfi_offset %rbp, -16 | ||
| ; CHECK-NEXT: movq %rsp, %rbp | ||
| ; CHECK-NEXT: .cfi_def_cfa_register %rbp | ||
| ; CHECK-NEXT: subq $20, %rsp | ||
| ; CHECK-NEXT: movl $0, -20(%rbp) | ||
| ; CHECK-NEXT: callq OUTLINED_FUNCTION_1 | ||
| ; CHECK-NEXT: movl $1, {{.*}}(%rip) | ||
| ; CHECK-NEXT: #APP | ||
| ; CHECK-NEXT: #NO_APP | ||
| ; CHECK-NEXT: callq OUTLINED_FUNCTION_1 | ||
| ; CHECK-NEXT: xorl %eax, %eax | ||
| ; CHECK-NEXT: addq $20, %rsp | ||
| ; CHECK-NEXT: popq %rbp | ||
| ; CHECK-NEXT: .cfi_def_cfa %rsp, 8 | ||
| ; CHECK-NEXT: retq | ||
| ; | ||
| ; CHECK-LABEL: OUTLINED_FUNCTION_0: | ||
| ; CHECK: # %bb.0: | ||
| ; CHECK-NEXT: movl $1, -8(%rbp) | ||
| ; CHECK-NEXT: movl $2, -16(%rbp) | ||
| ; CHECK-NEXT: movl $3, -4(%rbp) | ||
| ; CHECK-NEXT: movl $4, -12(%rbp) | ||
| ; CHECK-NEXT: retq | ||
| ; | ||
| ; CHECK-LABEL: OUTLINED_FUNCTION_1: | ||
| ; CHECK: # %bb.0: | ||
| ; CHECK-NEXT: movl $1, -16(%rbp) | ||
| ; CHECK-NEXT: movl $2, -12(%rbp) | ||
| ; CHECK-NEXT: movl $3, -8(%rbp) | ||
| ; CHECK-NEXT: movl $4, -4(%rbp) | ||
| ; CHECK-NEXT: retq |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,115 @@ | ||
| ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py | ||
| ; RUN: llc -enable-machine-outliner -mtriple=x86_64-unknown-linux < %s | FileCheck %s | ||
| @x = global i32 0, align 4 | ||
|
|
||
| define i32 @check_boundaries() #0 { | ||
| ; CHECK-LABEL: check_boundaries: | ||
| ; CHECK: # %bb.0: | ||
| ; CHECK-NEXT: pushq %rbp | ||
| ; CHECK-NEXT: .cfi_def_cfa_offset 16 | ||
| ; CHECK-NEXT: .cfi_offset %rbp, -16 | ||
| ; CHECK-NEXT: movq %rsp, %rbp | ||
| ; CHECK-NEXT: .cfi_def_cfa_register %rbp | ||
| ; CHECK-NEXT: subq $20, %rsp | ||
| ; CHECK-NEXT: movl $0, -20(%rbp) | ||
| ; CHECK-NEXT: movl $0, -8(%rbp) | ||
| ; CHECK-NEXT: xorl %eax, %eax | ||
| ; CHECK-NEXT: testb %al, %al | ||
| ; CHECK-NEXT: je .LBB0_1 | ||
| ; CHECK-NEXT: # %bb.2: | ||
| ; CHECK-NEXT: movl $1, -4(%rbp) | ||
| ; CHECK-NEXT: cmpl $0, -8(%rbp) | ||
| ; CHECK-NEXT: je .LBB0_4 | ||
| ; CHECK-NEXT: .LBB0_5: | ||
| ; CHECK-NEXT: movl $1, -4(%rbp) | ||
| ; CHECK-NEXT: jmp .LBB0_6 | ||
| ; CHECK-NEXT: .LBB0_1: | ||
| ; CHECK-NEXT: callq OUTLINED_FUNCTION_0 | ||
| ; CHECK-NEXT: cmpl $0, -8(%rbp) | ||
| ; CHECK-NEXT: jne .LBB0_5 | ||
| ; CHECK-NEXT: .LBB0_4: | ||
| ; CHECK-NEXT: callq OUTLINED_FUNCTION_0 | ||
| ; CHECK-NEXT: .LBB0_6: | ||
| ; CHECK-NEXT: xorl %eax, %eax | ||
| ; CHECK-NEXT: addq $20, %rsp | ||
| ; CHECK-NEXT: popq %rbp | ||
| ; CHECK-NEXT: .cfi_def_cfa %rsp, 8 | ||
| ; CHECK-NEXT: retq | ||
| %1 = alloca i32, align 4 | ||
| %2 = alloca i32, align 4 | ||
| %3 = alloca i32, align 4 | ||
| %4 = alloca i32, align 4 | ||
| %5 = alloca i32, align 4 | ||
| store i32 0, i32* %1, align 4 | ||
| store i32 0, i32* %2, align 4 | ||
| %6 = load i32, i32* %2, align 4 | ||
| %7 = icmp ne i32 %6, 0 | ||
| br i1 %7, label %9, label %8 | ||
|
|
||
| store i32 1, i32* %2, align 4 | ||
| store i32 2, i32* %3, align 4 | ||
| store i32 3, i32* %4, align 4 | ||
| store i32 4, i32* %5, align 4 | ||
| br label %10 | ||
|
|
||
| store i32 1, i32* %4, align 4 | ||
| br label %10 | ||
|
|
||
| %11 = load i32, i32* %2, align 4 | ||
| %12 = icmp ne i32 %11, 0 | ||
| br i1 %12, label %14, label %13 | ||
|
|
||
| store i32 1, i32* %2, align 4 | ||
| store i32 2, i32* %3, align 4 | ||
| store i32 3, i32* %4, align 4 | ||
| store i32 4, i32* %5, align 4 | ||
| br label %15 | ||
|
|
||
| store i32 1, i32* %4, align 4 | ||
| br label %15 | ||
|
|
||
| ret i32 0 | ||
| } | ||
|
|
||
| define i32 @main() #0 { | ||
| ; CHECK-LABEL: main: | ||
| ; CHECK: # %bb.0: | ||
| ; CHECK-NEXT: pushq %rbp | ||
| ; CHECK-NEXT: .cfi_def_cfa_offset 16 | ||
| ; CHECK-NEXT: .cfi_offset %rbp, -16 | ||
| ; CHECK-NEXT: movq %rsp, %rbp | ||
| ; CHECK-NEXT: .cfi_def_cfa_register %rbp | ||
| ; CHECK-NEXT: subq $20, %rsp | ||
| ; CHECK-NEXT: movl $0, -20(%rbp) | ||
| ; CHECK-NEXT: callq OUTLINED_FUNCTION_1 | ||
| ; CHECK-NEXT: movl $1, {{.*}}(%rip) | ||
| ; CHECK-NEXT: #APP | ||
| ; CHECK-NEXT: #NO_APP | ||
| ; CHECK-NEXT: callq OUTLINED_FUNCTION_1 | ||
| ; CHECK-NEXT: xorl %eax, %eax | ||
| ; CHECK-NEXT: addq $20, %rsp | ||
| ; CHECK-NEXT: popq %rbp | ||
| ; CHECK-NEXT: .cfi_def_cfa %rsp, 8 | ||
| ; CHECK-NEXT: retq | ||
| %1 = alloca i32, align 4 | ||
| %2 = alloca i32, align 4 | ||
| %3 = alloca i32, align 4 | ||
| %4 = alloca i32, align 4 | ||
| %5 = alloca i32, align 4 | ||
|
|
||
| store i32 0, i32* %1, align 4 | ||
| store i32 0, i32* @x, align 4 | ||
| store i32 1, i32* %2, align 4 | ||
| store i32 2, i32* %3, align 4 | ||
| store i32 3, i32* %4, align 4 | ||
| store i32 4, i32* %5, align 4 | ||
| store i32 1, i32* @x, align 4 | ||
| call void asm sideeffect "", "~{memory},~{dirflag},~{fpsr},~{flags}"() | ||
| store i32 1, i32* %2, align 4 | ||
| store i32 2, i32* %3, align 4 | ||
| store i32 3, i32* %4, align 4 | ||
| store i32 4, i32* %5, align 4 | ||
| ret i32 0 | ||
| } | ||
|
|
||
| attributes #0 = { noredzone nounwind ssp uwtable "frame-pointer"="all" } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,17 @@ | ||
| # REQUIRES: aarch64-registered-target | ||
|
|
||
| ## Check that generated functions are included. | ||
| # RUN: cp -f %S/Inputs/aarch64_generated_funcs.ll %t.ll && %update_llc_test_checks --include-generated-funcs %t.ll | ||
| # RUN: diff -u %t.ll %S/Inputs/aarch64_generated_funcs.ll.generated.expected | ||
|
|
||
| ## Check that running the script again does not change the result: | ||
| # RUN: %update_llc_test_checks --include-generated-funcs %t.ll | ||
| # RUN: diff -u %t.ll %S/Inputs/aarch64_generated_funcs.ll.generated.expected | ||
|
|
||
| ## Check that generated functions are not included. | ||
| # RUN: cp -f %S/Inputs/aarch64_generated_funcs.ll %t.ll && %update_llc_test_checks %t.ll | ||
| # RUN: diff -u %t.ll %S/Inputs/aarch64_generated_funcs.ll.nogenerated.expected | ||
|
|
||
| ## Check that running the script again does not change the result: | ||
| # RUN: %update_llc_test_checks %t.ll | ||
| # RUN: diff -u %t.ll %S/Inputs/aarch64_generated_funcs.ll.nogenerated.expected |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,17 @@ | ||
| # REQUIRES: amdgpu-registered-target | ||
|
|
||
| ## Check that generated functions are included. | ||
| # RUN: cp -f %S/Inputs/amdgpu_generated_funcs.ll %t.ll && %update_llc_test_checks --include-generated-funcs %t.ll | ||
| # RUN: diff -u %t.ll %S/Inputs/amdgpu_generated_funcs.ll.generated.expected | ||
|
|
||
| ## Check that running the script again does not change the result: | ||
| # RUN: %update_llc_test_checks --include-generated-funcs %t.ll | ||
| # RUN: diff -u %t.ll %S/Inputs/amdgpu_generated_funcs.ll.generated.expected | ||
|
|
||
| ## Check that generated functions are not included. | ||
| # RUN: cp -f %S/Inputs/amdgpu_generated_funcs.ll %t.ll && %update_llc_test_checks %t.ll | ||
| # RUN: diff -u %t.ll %S/Inputs/amdgpu_generated_funcs.ll.nogenerated.expected | ||
|
|
||
| ## Check that running the script again does not change the result: | ||
| # RUN: %update_llc_test_checks %t.ll | ||
| # RUN: diff -u %t.ll %S/Inputs/amdgpu_generated_funcs.ll.nogenerated.expected |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,17 @@ | ||
| # REQUIRES: arm-registered-target | ||
|
|
||
| ## Check that generated functions are included. | ||
| # RUN: cp -f %S/Inputs/arm_generated_funcs.ll %t.ll && %update_llc_test_checks --include-generated-funcs %t.ll | ||
| # RUN: diff -u %t.ll %S/Inputs/arm_generated_funcs.ll.generated.expected | ||
|
|
||
| ## Check that running the script again does not change the result: | ||
| # RUN: %update_llc_test_checks --include-generated-funcs %t.ll | ||
| # RUN: diff -u %t.ll %S/Inputs/arm_generated_funcs.ll.generated.expected | ||
|
|
||
| ## Check that generated functions are not included. | ||
| # RUN: cp -f %S/Inputs/arm_generated_funcs.ll %t.ll && %update_llc_test_checks %t.ll | ||
| # RUN: diff -u %t.ll %S/Inputs/arm_generated_funcs.ll.nogenerated.expected | ||
|
|
||
| ## Check that running the script again does not change the result: | ||
| # RUN: %update_llc_test_checks %t.ll | ||
| # RUN: diff -u %t.ll %S/Inputs/arm_generated_funcs.ll.nogenerated.expected |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,17 @@ | ||
| # REQUIRES: hexagon-registered-target | ||
|
|
||
| ## Check that generated functions are included. | ||
| # RUN: cp -f %S/Inputs/hexagon_generated_funcs.ll %t.ll && %update_llc_test_checks --include-generated-funcs %t.ll | ||
| # RUN: diff -u %t.ll %S/Inputs/hexagon_generated_funcs.ll.generated.expected | ||
|
|
||
| ## Check that running the script again does not change the result: | ||
| # RUN: %update_llc_test_checks --include-generated-funcs %t.ll | ||
| # RUN: diff -u %t.ll %S/Inputs/hexagon_generated_funcs.ll.generated.expected | ||
|
|
||
| ## Check that generated functions are not included. | ||
| # RUN: cp -f %S/Inputs/hexagon_generated_funcs.ll %t.ll && %update_llc_test_checks %t.ll | ||
| # RUN: diff -u %t.ll %S/Inputs/hexagon_generated_funcs.ll.nogenerated.expected | ||
|
|
||
| ## Check that running the script again does not change the result: | ||
| # RUN: %update_llc_test_checks %t.ll | ||
| # RUN: diff -u %t.ll %S/Inputs/hexagon_generated_funcs.ll.nogenerated.expected |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,17 @@ | ||
| # REQUIRES: lanai-registered-target | ||
|
|
||
| ## Check that generated functions are included. | ||
| # RUN: cp -f %S/Inputs/lanai_generated_funcs.ll %t.ll && %update_llc_test_checks --include-generated-funcs %t.ll | ||
| # RUN: diff -u %t.ll %S/Inputs/lanai_generated_funcs.ll.generated.expected | ||
|
|
||
| ## Check that running the script again does not change the result: | ||
| # RUN: %update_llc_test_checks --include-generated-funcs %t.ll | ||
| # RUN: diff -u %t.ll %S/Inputs/lanai_generated_funcs.ll.generated.expected | ||
|
|
||
| ## Check that generated functions are not included. | ||
| # RUN: cp -f %S/Inputs/lanai_generated_funcs.ll %t.ll && %update_llc_test_checks %t.ll | ||
| # RUN: diff -u %t.ll %S/Inputs/lanai_generated_funcs.ll.nogenerated.expected | ||
|
|
||
| ## Check that running the script again does not change the result: | ||
| # RUN: %update_llc_test_checks %t.ll | ||
| # RUN: diff -u %t.ll %S/Inputs/lanai_generated_funcs.ll.nogenerated.expected |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,17 @@ | ||
| # REQUIRES: mips-registered-target | ||
|
|
||
| ## Check that generated functions are included. | ||
| # RUN: cp -f %S/Inputs/mips_generated_funcs.ll %t.ll && %update_llc_test_checks --include-generated-funcs %t.ll | ||
| # RUN: diff -u %t.ll %S/Inputs/mips_generated_funcs.ll.generated.expected | ||
|
|
||
| ## Check that running the script again does not change the result: | ||
| # RUN: %update_llc_test_checks --include-generated-funcs %t.ll | ||
| # RUN: diff -u %t.ll %S/Inputs/mips_generated_funcs.ll.generated.expected | ||
|
|
||
| ## Check that generated functions are not included. | ||
| # RUN: cp -f %S/Inputs/mips_generated_funcs.ll %t.ll && %update_llc_test_checks %t.ll | ||
| # RUN: diff -u %t.ll %S/Inputs/mips_generated_funcs.ll.nogenerated.expected | ||
|
|
||
| ## Check that running the script again does not change the result: | ||
| # RUN: %update_llc_test_checks %t.ll | ||
| # RUN: diff -u %t.ll %S/Inputs/mips_generated_funcs.ll.nogenerated.expected |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,17 @@ | ||
| # REQUIRES: msp430-registered-target | ||
|
|
||
| ## Check that generated functions are included. | ||
| # RUN: cp -f %S/Inputs/msp430_generated_funcs.ll %t.ll && %update_llc_test_checks --include-generated-funcs %t.ll | ||
| # RUN: diff -u %t.ll %S/Inputs/msp430_generated_funcs.ll.generated.expected | ||
|
|
||
| ## Check that running the script again does not change the result: | ||
| # RUN: %update_llc_test_checks --include-generated-funcs %t.ll | ||
| # RUN: diff -u %t.ll %S/Inputs/msp430_generated_funcs.ll.generated.expected | ||
|
|
||
| ## Check that generated functions are not included. | ||
| # RUN: cp -f %S/Inputs/msp430_generated_funcs.ll %t.ll && %update_llc_test_checks %t.ll | ||
| # RUN: diff -u %t.ll %S/Inputs/msp430_generated_funcs.ll.nogenerated.expected | ||
|
|
||
| ## Check that running the script again does not change the result: | ||
| # RUN: %update_llc_test_checks %t.ll | ||
| # RUN: diff -u %t.ll %S/Inputs/msp430_generated_funcs.ll.nogenerated.expected |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,17 @@ | ||
| # REQUIRES: powerpc-registered-target | ||
|
|
||
| ## Check that generated functions are included. | ||
| # RUN: cp -f %S/Inputs/ppc_generated_funcs.ll %t.ll && %update_llc_test_checks --include-generated-funcs %t.ll | ||
| # RUN: diff -u %t.ll %S/Inputs/ppc_generated_funcs.ll.generated.expected | ||
|
|
||
| ## Check that running the script again does not change the result: | ||
| # RUN: %update_llc_test_checks --include-generated-funcs %t.ll | ||
| # RUN: diff -u %t.ll %S/Inputs/ppc_generated_funcs.ll.generated.expected | ||
|
|
||
| ## Check that generated functions are not included. | ||
| # RUN: cp -f %S/Inputs/ppc_generated_funcs.ll %t.ll && %update_llc_test_checks %t.ll | ||
| # RUN: diff -u %t.ll %S/Inputs/ppc_generated_funcs.ll.nogenerated.expected | ||
|
|
||
| ## Check that running the script again does not change the result: | ||
| # RUN: %update_llc_test_checks %t.ll | ||
| # RUN: diff -u %t.ll %S/Inputs/ppc_generated_funcs.ll.nogenerated.expected |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,17 @@ | ||
| # REQUIRES: riscv-registered-target | ||
|
|
||
| ## Check that generated functions are included. | ||
| # RUN: cp -f %S/Inputs/riscv_generated_funcs.ll %t.ll && %update_llc_test_checks --include-generated-funcs %t.ll | ||
| # RUN: diff -u %t.ll %S/Inputs/riscv_generated_funcs.ll.generated.expected | ||
|
|
||
| ## Check that running the script again does not change the result: | ||
| # RUN: %update_llc_test_checks --include-generated-funcs %t.ll | ||
| # RUN: diff -u %t.ll %S/Inputs/riscv_generated_funcs.ll.generated.expected | ||
|
|
||
| ## Check that generated functions are not included. | ||
| # RUN: cp -f %S/Inputs/riscv_generated_funcs.ll %t.ll && %update_llc_test_checks %t.ll | ||
| # RUN: diff -u %t.ll %S/Inputs/riscv_generated_funcs.ll.nogenerated.expected | ||
|
|
||
| ## Check that running the script again does not change the result: | ||
| # RUN: %update_llc_test_checks %t.ll | ||
| # RUN: diff -u %t.ll %S/Inputs/riscv_generated_funcs.ll.nogenerated.expected |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,17 @@ | ||
| # REQUIRES: sparc-registered-target | ||
|
|
||
| ## Check that generated functions are included. | ||
| # RUN: cp -f %S/Inputs/sparc_generated_funcs.ll %t.ll && %update_llc_test_checks --include-generated-funcs %t.ll | ||
| # RUN: diff -u %t.ll %S/Inputs/sparc_generated_funcs.ll.generated.expected | ||
|
|
||
| ## Check that running the script again does not change the result: | ||
| # RUN: %update_llc_test_checks --include-generated-funcs %t.ll | ||
| # RUN: diff -u %t.ll %S/Inputs/sparc_generated_funcs.ll.generated.expected | ||
|
|
||
| ## Check that generated functions are not included. | ||
| # RUN: cp -f %S/Inputs/sparc_generated_funcs.ll %t.ll && %update_llc_test_checks %t.ll | ||
| # RUN: diff -u %t.ll %S/Inputs/sparc_generated_funcs.ll.nogenerated.expected | ||
|
|
||
| ## Check that running the script again does not change the result: | ||
| # RUN: %update_llc_test_checks %t.ll | ||
| # RUN: diff -u %t.ll %S/Inputs/sparc_generated_funcs.ll.nogenerated.expected |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,17 @@ | ||
| # REQUIRES: systemz-registered-target | ||
|
|
||
| ## Check that generated functions are included. | ||
| # RUN: cp -f %S/Inputs/systemz_generated_funcs.ll %t.ll && %update_llc_test_checks --include-generated-funcs %t.ll | ||
| # RUN: diff -u %t.ll %S/Inputs/systemz_generated_funcs.ll.generated.expected | ||
|
|
||
| ## Check that running the script again does not change the result: | ||
| # RUN: %update_llc_test_checks --include-generated-funcs %t.ll | ||
| # RUN: diff -u %t.ll %S/Inputs/systemz_generated_funcs.ll.generated.expected | ||
|
|
||
| ## Check that generated functions are not included. | ||
| # RUN: cp -f %S/Inputs/systemz_generated_funcs.ll %t.ll && %update_llc_test_checks %t.ll | ||
| # RUN: diff -u %t.ll %S/Inputs/systemz_generated_funcs.ll.nogenerated.expected | ||
|
|
||
| ## Check that running the script again does not change the result: | ||
| # RUN: %update_llc_test_checks %t.ll | ||
| # RUN: diff -u %t.ll %S/Inputs/systemz_generated_funcs.ll.nogenerated.expected |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,17 @@ | ||
| # REQUIRES: webassembly-registered-target | ||
|
|
||
| ## Check that generated functions are included. | ||
| # RUN: cp -f %S/Inputs/wasm_generated_funcs.ll %t.ll && %update_llc_test_checks --include-generated-funcs %t.ll | ||
| # RUN: diff -u %t.ll %S/Inputs/wasm_generated_funcs.ll.generated.expected | ||
|
|
||
| ## Check that running the script again does not change the result: | ||
| # RUN: %update_llc_test_checks --include-generated-funcs %t.ll | ||
| # RUN: diff -u %t.ll %S/Inputs/wasm_generated_funcs.ll.generated.expected | ||
|
|
||
| ## Check that generated functions are not included. | ||
| # RUN: cp -f %S/Inputs/wasm_generated_funcs.ll %t.ll && %update_llc_test_checks %t.ll | ||
| # RUN: diff -u %t.ll %S/Inputs/wasm_generated_funcs.ll.nogenerated.expected | ||
|
|
||
| ## Check that running the script again does not change the result: | ||
| # RUN: %update_llc_test_checks %t.ll | ||
| # RUN: diff -u %t.ll %S/Inputs/wasm_generated_funcs.ll.nogenerated.expected |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,17 @@ | ||
| # REQUIRES: x86-registered-target | ||
|
|
||
| ## Check that generated functions are included. | ||
| # RUN: cp -f %S/Inputs/x86_generated_funcs.ll %t.ll && %update_llc_test_checks --include-generated-funcs %t.ll | ||
| # RUN: diff -u %t.ll %S/Inputs/x86_generated_funcs.ll.generated.expected | ||
|
|
||
| ## Check that running the script again does not change the result: | ||
| # RUN: %update_llc_test_checks --include-generated-funcs %t.ll | ||
| # RUN: diff -u %t.ll %S/Inputs/x86_generated_funcs.ll.generated.expected | ||
|
|
||
| ## Check that generated functions are not included. | ||
| # RUN: cp -f %S/Inputs/x86_generated_funcs.ll %t.ll && %update_llc_test_checks %t.ll | ||
| # RUN: diff -u %t.ll %S/Inputs/x86_generated_funcs.ll.nogenerated.expected | ||
|
|
||
| ## Check that running the script again does not change the result: | ||
| # RUN: %update_llc_test_checks %t.ll | ||
| # RUN: diff -u %t.ll %S/Inputs/x86_generated_funcs.ll.nogenerated.expected |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,34 @@ | ||
| ; RUN: opt -hotcoldsplit -hotcoldsplit-threshold=0 -S < %s | FileCheck %s | ||
| target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128" | ||
| target triple = "x86_64-apple-macosx10.14.0" | ||
|
|
||
| define void @foo(i32) { | ||
| %2 = icmp eq i32 %0, 0 | ||
| tail call void @_Z10sideeffectv() | ||
| br i1 %2, label %sink, label %exit | ||
|
|
||
| sink: | ||
| tail call void @_Z10sideeffectv() | ||
| call void @llvm.trap() | ||
| unreachable | ||
|
|
||
| exit: | ||
| ret void | ||
| } | ||
|
|
||
| define void @bar(i32) { | ||
| %2 = icmp eq i32 %0, 0 | ||
| tail call void @_Z10sideeffectv() | ||
| br i1 %2, label %sink, label %exit | ||
|
|
||
| sink: | ||
| tail call void @_Z10sideeffectv() | ||
| call void @llvm.trap() | ||
| unreachable | ||
|
|
||
| exit: | ||
| ret void | ||
| } | ||
|
|
||
| declare void @llvm.trap() noreturn cold | ||
| declare void @_Z10sideeffectv() |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,74 @@ | ||
| ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --include-generated-funcs | ||
| ; RUN: opt -hotcoldsplit -hotcoldsplit-threshold=0 -S < %s | FileCheck %s | ||
| target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128" | ||
| target triple = "x86_64-apple-macosx10.14.0" | ||
|
|
||
| define void @foo(i32) { | ||
| %2 = icmp eq i32 %0, 0 | ||
| tail call void @_Z10sideeffectv() | ||
| br i1 %2, label %sink, label %exit | ||
|
|
||
| sink: | ||
| tail call void @_Z10sideeffectv() | ||
| call void @llvm.trap() | ||
| unreachable | ||
|
|
||
| exit: | ||
| ret void | ||
| } | ||
|
|
||
| define void @bar(i32) { | ||
| %2 = icmp eq i32 %0, 0 | ||
| tail call void @_Z10sideeffectv() | ||
| br i1 %2, label %sink, label %exit | ||
|
|
||
| sink: | ||
| tail call void @_Z10sideeffectv() | ||
| call void @llvm.trap() | ||
| unreachable | ||
|
|
||
| exit: | ||
| ret void | ||
| } | ||
|
|
||
| declare void @llvm.trap() noreturn cold | ||
| declare void @_Z10sideeffectv() | ||
| ; CHECK-LABEL: @foo( | ||
| ; CHECK-NEXT: [[TMP2:%.*]] = icmp eq i32 [[TMP0:%.*]], 0 | ||
| ; CHECK-NEXT: tail call void @_Z10sideeffectv() | ||
| ; CHECK-NEXT: br i1 [[TMP2]], label [[CODEREPL:%.*]], label [[EXIT:%.*]] | ||
| ; CHECK: codeRepl: | ||
| ; CHECK-NEXT: call void @foo.cold.1() [[ATTR2:#.*]] | ||
| ; CHECK-NEXT: ret void | ||
| ; CHECK: exit: | ||
| ; CHECK-NEXT: ret void | ||
| ; | ||
| ; | ||
| ; CHECK-LABEL: @bar( | ||
| ; CHECK-NEXT: [[TMP2:%.*]] = icmp eq i32 [[TMP0:%.*]], 0 | ||
| ; CHECK-NEXT: tail call void @_Z10sideeffectv() | ||
| ; CHECK-NEXT: br i1 [[TMP2]], label [[CODEREPL:%.*]], label [[EXIT:%.*]] | ||
| ; CHECK: codeRepl: | ||
| ; CHECK-NEXT: call void @bar.cold.1() [[ATTR2]] | ||
| ; CHECK-NEXT: ret void | ||
| ; CHECK: exit: | ||
| ; CHECK-NEXT: ret void | ||
| ; | ||
| ; | ||
| ; CHECK-LABEL: @foo.cold.1( | ||
| ; CHECK-NEXT: newFuncRoot: | ||
| ; CHECK-NEXT: br label [[SINK:%.*]] | ||
| ; CHECK: sink: | ||
| ; CHECK-NEXT: tail call void @_Z10sideeffectv() | ||
| ; CHECK-NEXT: call void @llvm.trap() | ||
| ; CHECK-NEXT: unreachable | ||
| ; | ||
| ; | ||
| ; CHECK-LABEL: @bar.cold.1( | ||
| ; CHECK-NEXT: newFuncRoot: | ||
| ; CHECK-NEXT: br label [[SINK:%.*]] | ||
| ; CHECK: sink: | ||
| ; CHECK-NEXT: tail call void @_Z10sideeffectv() | ||
| ; CHECK-NEXT: call void @llvm.trap() | ||
| ; CHECK-NEXT: unreachable | ||
| ; |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,55 @@ | ||
| ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py | ||
| ; RUN: opt -hotcoldsplit -hotcoldsplit-threshold=0 -S < %s | FileCheck %s | ||
| target datalayout = "e-m:o-i64:64-f80:128-n8:16:32:64-S128" | ||
| target triple = "x86_64-apple-macosx10.14.0" | ||
|
|
||
| define void @foo(i32) { | ||
| ; CHECK-LABEL: @foo( | ||
| ; CHECK-NEXT: [[TMP2:%.*]] = icmp eq i32 [[TMP0:%.*]], 0 | ||
| ; CHECK-NEXT: tail call void @_Z10sideeffectv() | ||
| ; CHECK-NEXT: br i1 [[TMP2]], label [[CODEREPL:%.*]], label [[EXIT:%.*]] | ||
| ; CHECK: codeRepl: | ||
| ; CHECK-NEXT: call void @foo.cold.1() [[ATTR2:#.*]] | ||
| ; CHECK-NEXT: ret void | ||
| ; CHECK: exit: | ||
| ; CHECK-NEXT: ret void | ||
| ; | ||
| %2 = icmp eq i32 %0, 0 | ||
| tail call void @_Z10sideeffectv() | ||
| br i1 %2, label %sink, label %exit | ||
|
|
||
| sink: | ||
| tail call void @_Z10sideeffectv() | ||
| call void @llvm.trap() | ||
| unreachable | ||
|
|
||
| exit: | ||
| ret void | ||
| } | ||
|
|
||
| define void @bar(i32) { | ||
| ; CHECK-LABEL: @bar( | ||
| ; CHECK-NEXT: [[TMP2:%.*]] = icmp eq i32 [[TMP0:%.*]], 0 | ||
| ; CHECK-NEXT: tail call void @_Z10sideeffectv() | ||
| ; CHECK-NEXT: br i1 [[TMP2]], label [[CODEREPL:%.*]], label [[EXIT:%.*]] | ||
| ; CHECK: codeRepl: | ||
| ; CHECK-NEXT: call void @bar.cold.1() [[ATTR2]] | ||
| ; CHECK-NEXT: ret void | ||
| ; CHECK: exit: | ||
| ; CHECK-NEXT: ret void | ||
| ; | ||
| %2 = icmp eq i32 %0, 0 | ||
| tail call void @_Z10sideeffectv() | ||
| br i1 %2, label %sink, label %exit | ||
|
|
||
| sink: | ||
| tail call void @_Z10sideeffectv() | ||
| call void @llvm.trap() | ||
| unreachable | ||
|
|
||
| exit: | ||
| ret void | ||
| } | ||
|
|
||
| declare void @llvm.trap() noreturn cold | ||
| declare void @_Z10sideeffectv() |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,15 @@ | ||
| ## Check that generated functions are included. | ||
| # RUN: cp -f %S/Inputs/generated_funcs.ll %t.ll && %update_test_checks --include-generated-funcs %t.ll | ||
| # RUN: diff -u %t.ll %S/Inputs/generated_funcs.ll.generated.expected | ||
|
|
||
| ## Check that running the script again does not change the result: | ||
| # RUN: %update_test_checks --include-generated-funcs %t.ll | ||
| # RUN: diff -u %t.ll %S/Inputs/generated_funcs.ll.generated.expected | ||
|
|
||
| ## Check that generated functions are not included. | ||
| # RUN: cp -f %S/Inputs/generated_funcs.ll %t.ll && %update_test_checks %t.ll | ||
| # RUN: diff -u %t.ll %S/Inputs/generated_funcs.ll.nogenerated.expected | ||
|
|
||
| ## Check that running the script again does not change the result: | ||
| # RUN: %update_test_checks %t.ll | ||
| # RUN: diff -u %t.ll %S/Inputs/generated_funcs.ll.nogenerated.expected |