163 lines · plain
1# RUN: llc -mtriple=aarch64-none-linux-gnu -run-pass machine-outliner -verify-machineinstrs -enable-machine-outliner %s -o - | FileCheck %s2--- |3 ; Function Attrs: minsize4 declare void @foo(i32, i32, i32, i32) #05 6 ; Function Attrs: nounwind7 define void @xray0(i1 %a) #1 {8 entry:9 br i1 %a, label %if.then, label %if.end10 11 if.then: ; preds = %entry12 call void @foo(i32 1, i32 2, i32 3, i32 4)13 br label %if.end14 15 if.end: ; preds = %if.then, %entry16 call void @foo(i32 5, i32 6, i32 7, i32 8)17 ret void18 }19 20 ; Function Attrs: nounwind21 define void @xray1(i1 %a) #1 {22 entry:23 br i1 %a, label %if.then, label %if.end24 25 if.then: ; preds = %entry26 call void @foo(i32 1, i32 2, i32 3, i32 4)27 br label %if.end28 29 if.end: ; preds = %if.then, %entry30 call void @foo(i32 5, i32 6, i32 7, i32 8)31 ret void32 }33 34 attributes #0 = { minsize }35 attributes #1 = { nounwind "function-instrument"="xray-always" }36 37...38---39name: xray040tracksRegLiveness: true41liveins:42 - { reg: '$w0', virtual-reg: '' }43stack:44 - { id: 0, name: '', type: spill-slot, offset: -16, size: 8, alignment: 16, 45 stack-id: default, callee-saved-register: '$lr', callee-saved-restored: true, 46 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }47machineFunctionInfo:48 hasRedZone: false49body: |50 ; CHECK-LABEL: name: xray051 ; CHECK: bb.0.entry:52 ; CHECK: PATCHABLE_FUNCTION_ENTER53 ; CHECK: bb.1.if.then:54 ; CHECK: BL @[[OUTLINED_FUNCTION:OUTLINED_FUNCTION_[0-9]]]55 ; CHECK: bb.2.if.end:56 ; CHECK-NEXT: $w0 = MOVZWi 5, 057 ; CHECK-NEXT: $w1 = MOVZWi 6, 058 ; CHECK-NEXT: $w2 = MOVZWi 7, 059 ; CHECK-NEXT: $w3 = MOVZWi 8, 060 ; CHECK-NEXT: BL @foo, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit killed $w1, implicit killed $w2, implicit killed $w3, implicit-def $sp61 ; CHECK: $w0 = MOVZWi 5, 062 ; CHECK-NEXT: $w1 = MOVZWi 6, 063 ; CHECK-NEXT: PATCHABLE_FUNCTION_EXIT64 ; CHECK-NEXT: RET undef $lr65 66 bb.0.entry:67 successors: %bb.1(0x40000000), %bb.2(0x40000000)68 liveins: $w0, $lr69 70 PATCHABLE_FUNCTION_ENTER71 early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)72 TBZW killed renamable $w0, 0, %bb.273 74 bb.1.if.then:75 successors: %bb.2(0x80000000)76 77 $w0 = MOVZWi 1, 078 $w1 = MOVZWi 2, 079 $w2 = MOVZWi 3, 080 $w3 = MOVZWi 4, 081 BL @foo, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit killed $w1, implicit killed $w2, implicit killed $w3, implicit-def $sp82 83 bb.2.if.end:84 $w0 = MOVZWi 5, 085 $w1 = MOVZWi 6, 086 $w2 = MOVZWi 7, 087 $w3 = MOVZWi 8, 088 BL @foo, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit killed $w1, implicit killed $w2, implicit killed $w3, implicit-def $sp89 early-clobber $sp, $lr = frame-destroy LDRXpost $sp, 16 :: (load (s64) from %stack.0)90 $w0 = MOVZWi 5, 091 $w1 = MOVZWi 6, 092 PATCHABLE_FUNCTION_EXIT93 RET undef $lr94 95...96---97name: xray198tracksRegLiveness: true99liveins:100 - { reg: '$w0', virtual-reg: '' }101stack:102 - { id: 0, name: '', type: spill-slot, offset: -16, size: 8, alignment: 16, 103 stack-id: default, callee-saved-register: '$lr', callee-saved-restored: true, 104 debug-info-variable: '', debug-info-expression: '', debug-info-location: '' }105machineFunctionInfo:106 hasRedZone: false107body: |108 ; CHECK-LABEL: name: xray1109 ; CHECK: bb.0.entry:110 ; CHECK: PATCHABLE_FUNCTION_ENTER111 ; CHECK: bb.1.if.then:112 ; CHECK: BL @[[OUTLINED_FUNCTION]]113 ; CHECK: bb.2.if.end:114 ; CHECK-NEXT: $w0 = MOVZWi 5, 0115 ; CHECK-NEXT: $w1 = MOVZWi 6, 0116 ; CHECK-NEXT: $w2 = MOVZWi 7, 0117 ; CHECK-NEXT: $w3 = MOVZWi 8, 0118 ; CHECK-NEXT: BL @foo, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit killed $w1, implicit killed $w2, implicit killed $w3, implicit-def $sp119 ; CHECK: $w0 = MOVZWi 5, 0120 ; CHECK-NEXT: $w1 = MOVZWi 6, 0121 ; CHECK-NEXT: PATCHABLE_FUNCTION_EXIT122 ; CHECK-NEXT: RET undef $lr123 124 bb.0.entry:125 successors: %bb.1(0x40000000), %bb.2(0x40000000)126 liveins: $w0, $lr127 128 PATCHABLE_FUNCTION_ENTER129 early-clobber $sp = frame-setup STRXpre killed $lr, $sp, -16 :: (store (s64) into %stack.0)130 TBZW killed renamable $w0, 0, %bb.2131 132 bb.1.if.then:133 successors: %bb.2(0x80000000)134 135 $w0 = MOVZWi 1, 0136 $w1 = MOVZWi 2, 0137 $w2 = MOVZWi 3, 0138 $w3 = MOVZWi 4, 0139 BL @foo, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit killed $w1, implicit killed $w2, implicit killed $w3, implicit-def $sp140 141 bb.2.if.end:142 $w0 = MOVZWi 5, 0143 $w1 = MOVZWi 6, 0144 $w2 = MOVZWi 7, 0145 $w3 = MOVZWi 8, 0146 BL @foo, csr_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit killed $w0, implicit killed $w1, implicit killed $w2, implicit killed $w3, implicit-def $sp147 early-clobber $sp, $lr = frame-destroy LDRXpost $sp, 16 :: (load (s64) from %stack.0)148 $w0 = MOVZWi 5, 0149 $w1 = MOVZWi 6, 0150 PATCHABLE_FUNCTION_EXIT151 RET undef $lr152 153 ; CHECK: name: [[OUTLINED_FUNCTION]]154 ; CHECK: bb.0:155 ; CHECK: $w0 = MOVZWi 1, 0156 ; CHECK-NEXT: $w1 = MOVZWi 2, 0157 ; CHECK-NEXT: $w2 = MOVZWi 3, 0158 ; CHECK-NEXT: $w3 = MOVZWi 4, 0159 ; CHECK-NEXT: TCRETURNdi @foo, 0, implicit $sp160 161...162 163