1# REQUIRES: asserts 2# RUN: llc -mtriple=aarch64-linux-gnu -run-pass=machine-outliner \ 3# RUN: -machine-outliner-reruns=0 -verify-machineinstrs %s -o - | FileCheck --check-prefix=ITER1 %s 4 5# RUN: llc -mtriple=aarch64-linux-gnu -run-pass=machine-outliner \ 6# RUN: -machine-outliner-reruns=1 -verify-machineinstrs %s -o - | FileCheck --check-prefix=ITER2 %s 7 8# RUN: llc -mtriple=aarch64-linux-gnu -run-pass=machine-outliner \ 9# RUN: -machine-outliner-reruns=2 -debug-only=machine-outliner \ 10# RUN: -verify-machineinstrs %s -o /dev/null 2>&1 | FileCheck --check-prefix=ITER3 %s 11 12--- | 13 declare void @z1(i32, i32) 14 declare void @z2(i32, i32, i32) 15 define void @a(i32 %p1) { unreachable } 16 define void @b(i32 %p1) { unreachable } 17... 18--- 19#ITER1-LABEL: name: a 20#ITER1: $w19 = ORRWrs $wzr, killed $w0, 0 21#ITER1-NEXT: BL @OUTLINED_FUNCTION_{{[0-9]+}} 22#ITER1-NEXT: $w1 = ORRWri $wzr, 1 23#ITER1-NEXT: BL @OUTLINED_FUNCTION_{{[0-9]+}} 24#ITER1-NEXT: $w1 = ORRWri $wzr, 1984 25#ITER1-NEXT: BL @OUTLINED_FUNCTION_{{[0-9]+}} 26#ITER1-NEXT: BL @OUTLINED_FUNCTION_{{[0-9]+}} 27 28#ITER2-LABEL: name: a 29#ITER2: $w19 = ORRWrs $wzr, killed $w0, 0 30#ITER2-NEXT: BL @OUTLINED_FUNCTION_{{[0-9]+}} 31#ITER2-NEXT: $w1 = ORRWri $wzr, 1 32#ITER2-NEXT: BL @OUTLINED_FUNCTION_{{[0-9]+}} 33#ITER2-NEXT: BL @OUTLINED_FUNCTION_{{[0-9]+}} 34#ITER2-NEXT: BL @OUTLINED_FUNCTION_{{[0-9]+}} 35name: a 36tracksRegLiveness: true 37liveins: 38 - { reg: '$w0', virtual-reg: '' } 39machineFunctionInfo: 40 hasRedZone: false 41body: | 42 bb.0: 43 liveins: $w0, $lr, $x19 44 45 early-clobber $sp = frame-setup STPXpre killed $x19, killed $lr, $sp, -2 :: (store 8), (store 8) 46 $w19 = ORRWrs $wzr, killed $w0, 0 47 $w0 = ORRWri $wzr, 0 48 $w1 = ORRWri $wzr, 1 49 BL @z1, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit killed $w1, implicit-def $sp 50 $w1 = ORRWri $wzr, 1 51 $w2 = ORRWri $wzr, 1920 52 $w0 = ORRWrs $wzr, $w19, 0 53 BL @z2, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit killed $w1, implicit killed $w2, implicit-def $sp 54 $w1 = ORRWri $wzr, 1984 55 $w2 = ORRWri $wzr, 1920 56 $w0 = ORRWrs $wzr, killed $w19, 0 57 BL @z2, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit killed $w1, implicit killed $w2, implicit-def $sp 58 $w0 = ORRWri $wzr, 0 59 $w1 = ORRWri $wzr, 1 60 BL @z1, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit killed $w1, implicit-def $sp 61 early-clobber $sp, $x19, $lr = frame-destroy LDPXpost $sp, 2 :: (load 8), (load 8) 62 RET undef $lr 63 64... 65--- 66#ITER1-LABEL: name: b 67#ITER1: $w19 = ORRWrs $wzr, killed $w0, 0 68#ITER1-NEXT: BL @OUTLINED_FUNCTION_{{[0-9]+}} 69#ITER1-NEXT: $w1 = ORRWri $wzr, 1984 70#ITER1-NEXT: BL @OUTLINED_FUNCTION_{{[0-9]+}} 71#ITER1-NEXT: $w1 = ORRWri $wzr, 1984 72#ITER1-NEXT: BL @OUTLINED_FUNCTION_{{[0-9]+}} 73#ITER1-NEXT: BL @OUTLINED_FUNCTION_{{[0-9]+}} 74 75#ITER2-LABEL: name: b 76#ITER2: $w19 = ORRWrs $wzr, killed $w0, 0 77#ITER2-NEXT: BL @OUTLINED_FUNCTION_{{[0-9]+}} 78#ITER2-NEXT: BL @OUTLINED_FUNCTION_{{[0-9]+}} 79#ITER2-NEXT: BL @OUTLINED_FUNCTION_{{[0-9]+}} 80#ITER2-NEXT: BL @OUTLINED_FUNCTION_{{[0-9]+}} 81name: b 82tracksRegLiveness: true 83liveins: 84 - { reg: '$w0', virtual-reg: '' } 85machineFunctionInfo: 86 hasRedZone: false 87body: | 88 bb.0: 89 liveins: $w0, $lr, $x19 90 91 early-clobber $sp = frame-setup STPXpre killed $x19, killed $lr, $sp, -2 :: (store 8), (store 8) 92 $w19 = ORRWrs $wzr, killed $w0, 0 93 $w0 = ORRWri $wzr, 0 94 $w1 = ORRWri $wzr, 1 95 BL @z1, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit killed $w1, implicit-def $sp 96 $w1 = ORRWri $wzr, 1984 97 $w2 = ORRWri $wzr, 1920 98 $w0 = ORRWrs $wzr, $w19, 0 99 BL @z2, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit killed $w1, implicit killed $w2, implicit-def $sp 100 $w1 = ORRWri $wzr, 1984 101 $w2 = ORRWri $wzr, 1920 102 $w0 = ORRWrs $wzr, killed $w19, 0 103 BL @z2, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit killed $w1, implicit killed $w2, implicit-def $sp 104 $w0 = ORRWri $wzr, 0 105 $w1 = ORRWri $wzr, 1 106 BL @z1, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit killed $w1, implicit-def $sp 107 early-clobber $sp, $x19, $lr = frame-destroy LDPXpost $sp, 2 :: (load 8), (load 8) 108 RET undef $lr 109... 110 111#ITER1-LABEL: name: OUTLINED_FUNCTION_{{[0-9]+}} 112#ITER1-LABEL: name: OUTLINED_FUNCTION_{{[0-9]+}} 113 114#ITER2-LABEL: name: OUTLINED_FUNCTION_{{[0-9]+}} 115#ITER2-LABEL: name: OUTLINED_FUNCTION_{{[0-9]+}} 116#ITER2-LABEL: name: OUTLINED_FUNCTION_{{[0-9]+}} 117 118# ITER3: Did not outline on iteration 3 out of 3 119