| ; RUN: llc -verify-machineinstrs -enable-machine-outliner -mtriple=aarch64-apple-darwin < %s | FileCheck %s |
| ; RUN: llc -verify-machineinstrs -enable-machine-outliner -mtriple=aarch64-apple-darwin -mcpu=cortex-a53 -enable-misched=false < %s | FileCheck %s |
| ; RUN: llc -verify-machineinstrs -enable-machine-outliner -enable-linkonceodr-outlining -mtriple=aarch64-apple-darwin < %s | FileCheck %s -check-prefix=ODR |
| |
| define linkonce_odr void @fish() #0 { |
| ; CHECK-LABEL: _fish: |
| ; CHECK-NOT: OUTLINED |
| ; ODR: [[OUTLINED:OUTLINED_FUNCTION_[0-9]+]] |
| %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 |
| %6 = alloca i32, align 4 |
| store i32 1, i32* %1, align 4 |
| store i32 2, i32* %2, align 4 |
| store i32 3, i32* %3, align 4 |
| store i32 4, i32* %4, align 4 |
| store i32 5, i32* %5, align 4 |
| store i32 6, i32* %6, align 4 |
| ret void |
| } |
| |
| define void @turtle() section "TURTLE,turtle" { |
| ; CHECK-LABEL: _turtle: |
| ; ODR-LABEL: _turtle: |
| ; CHECK-NOT: OUTLINED |
| %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 |
| %6 = alloca i32, align 4 |
| store i32 1, i32* %1, align 4 |
| store i32 2, i32* %2, align 4 |
| store i32 3, i32* %3, align 4 |
| store i32 4, i32* %4, align 4 |
| store i32 5, i32* %5, align 4 |
| store i32 6, i32* %6, align 4 |
| ret void |
| } |
| |
| define void @cat() #0 { |
| ; CHECK-LABEL: _cat: |
| ; CHECK: [[OUTLINED:OUTLINED_FUNCTION_[0-9]+]] |
| ; ODR: [[OUTLINED]] |
| %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 |
| %6 = alloca i32, align 4 |
| store i32 1, i32* %1, align 4 |
| store i32 2, i32* %2, align 4 |
| store i32 3, i32* %3, align 4 |
| store i32 4, i32* %4, align 4 |
| store i32 5, i32* %5, align 4 |
| store i32 6, i32* %6, align 4 |
| ret void |
| } |
| |
| define void @dog() #0 { |
| ; CHECK-LABEL: _dog: |
| ; CHECK: [[OUTLINED]] |
| ; ODR: [[OUTLINED]] |
| %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 |
| %6 = alloca i32, align 4 |
| store i32 1, i32* %1, align 4 |
| store i32 2, i32* %2, align 4 |
| store i32 3, i32* %3, align 4 |
| store i32 4, i32* %4, align 4 |
| store i32 5, i32* %5, align 4 |
| store i32 6, i32* %6, align 4 |
| ret void |
| } |
| |
| ; ODR: [[OUTLINED]]: |
| ; CHECK: .p2align 2 |
| ; CHECK-NEXT: [[OUTLINED]]: |
| ; CHECK: orr w8, wzr, #0x1 |
| ; CHECK-NEXT: str w8, [sp, #28] |
| ; CHECK-NEXT: orr w8, wzr, #0x2 |
| ; CHECK-NEXT: str w8, [sp, #24] |
| ; CHECK-NEXT: orr w8, wzr, #0x3 |
| ; CHECK-NEXT: str w8, [sp, #20] |
| ; CHECK-NEXT: orr w8, wzr, #0x4 |
| ; CHECK-NEXT: str w8, [sp, #16] |
| ; CHECK-NEXT: mov w8, #5 |
| ; CHECK-NEXT: str w8, [sp, #12] |
| ; CHECK-NEXT: orr w8, wzr, #0x6 |
| ; CHECK-NEXT: str w8, [sp, #8] |
| ; CHECK-NEXT: ret |
| |
| attributes #0 = { noredzone "target-cpu"="cyclone" } |