130 lines
3.7 KiB
Text
130 lines
3.7 KiB
Text
|
# RUN: llc -mtriple=aarch64-apple-ios -run-pass=early-tailduplication %s -o - | FileCheck %s
|
||
|
|
||
|
--- |
|
||
|
; ModuleID = 'taildup.ll'
|
||
|
source_filename = "taildup.ll"
|
||
|
target datalayout = "e-m:o-i64:64-i128:128-n32:64-S128"
|
||
|
target triple = "aarch64-apple-ios"
|
||
|
|
||
|
@bb1 = global i8* blockaddress(@foo, %final)
|
||
|
@bb2 = global i8* inttoptr (i32 1 to i8*)
|
||
|
|
||
|
define void @foo(i1 %tst, i32* %ptr) {
|
||
|
br i1 %tst, label %left, label %right
|
||
|
|
||
|
left: ; preds = %0
|
||
|
%val.left = call i32 @bar()
|
||
|
br label %next
|
||
|
|
||
|
right: ; preds = %0
|
||
|
%val.right = call i32 @baz()
|
||
|
br label %next
|
||
|
|
||
|
next: ; preds = %right, %left
|
||
|
%val = phi i32 [ %val.left, %left ], [ %val.right, %right ]
|
||
|
store i32 %val, i32* %ptr, align 4
|
||
|
br label %final
|
||
|
|
||
|
final: ; preds = %next
|
||
|
%1 = call i32 @bar()
|
||
|
ret void
|
||
|
}
|
||
|
|
||
|
declare i32 @bar()
|
||
|
|
||
|
declare i32 @baz()
|
||
|
|
||
|
...
|
||
|
---
|
||
|
name: foo
|
||
|
alignment: 4
|
||
|
exposesReturnsTwice: false
|
||
|
legalized: false
|
||
|
regBankSelected: false
|
||
|
selected: false
|
||
|
failedISel: false
|
||
|
tracksRegLiveness: true
|
||
|
hasWinCFI: false
|
||
|
registers:
|
||
|
- { id: 0, class: gpr32all, preferred-register: '' }
|
||
|
- { id: 1, class: gpr32all, preferred-register: '' }
|
||
|
- { id: 2, class: gpr32, preferred-register: '' }
|
||
|
- { id: 3, class: gpr32, preferred-register: '' }
|
||
|
- { id: 4, class: gpr64common, preferred-register: '' }
|
||
|
- { id: 5, class: gpr32all, preferred-register: '' }
|
||
|
- { id: 6, class: gpr32all, preferred-register: '' }
|
||
|
- { id: 7, class: gpr32all, preferred-register: '' }
|
||
|
liveins:
|
||
|
- { reg: '$w0', virtual-reg: '%3' }
|
||
|
- { reg: '$x1', virtual-reg: '%4' }
|
||
|
frameInfo:
|
||
|
isFrameAddressTaken: false
|
||
|
isReturnAddressTaken: false
|
||
|
hasStackMap: false
|
||
|
hasPatchPoint: false
|
||
|
stackSize: 0
|
||
|
offsetAdjustment: 0
|
||
|
maxAlignment: 1
|
||
|
adjustsStack: true
|
||
|
hasCalls: true
|
||
|
stackProtector: ''
|
||
|
maxCallFrameSize: 0
|
||
|
cvBytesOfCalleeSavedRegisters: 0
|
||
|
hasOpaqueSPAdjustment: false
|
||
|
hasVAStart: false
|
||
|
hasMustTailInVarArgFunc: false
|
||
|
hasTailCall: false
|
||
|
localFrameSize: 0
|
||
|
savePoint: ''
|
||
|
restorePoint: ''
|
||
|
fixedStack: []
|
||
|
stack: []
|
||
|
callSites: []
|
||
|
debugValueSubstitutions: []
|
||
|
constants: []
|
||
|
machineFunctionInfo: {}
|
||
|
body: |
|
||
|
bb.0 (%ir-block.0):
|
||
|
successors: %bb.1(0x40000000), %bb.2(0x40000000)
|
||
|
liveins: $w0, $x1
|
||
|
|
||
|
%4:gpr64common = COPY $x1
|
||
|
%3:gpr32 = COPY $w0
|
||
|
TBZW %3, 0, %bb.2
|
||
|
B %bb.1
|
||
|
|
||
|
bb.1.left:
|
||
|
successors: %bb.3(0x80000000)
|
||
|
|
||
|
ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
|
||
|
BL @bar, csr_darwin_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $w0
|
||
|
ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
|
||
|
%6:gpr32all = COPY $w0
|
||
|
%0:gpr32all = COPY %6
|
||
|
B %bb.3
|
||
|
|
||
|
bb.2.right:
|
||
|
successors: %bb.3(0x80000000)
|
||
|
|
||
|
ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
|
||
|
BL @baz, csr_darwin_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $w0
|
||
|
ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
|
||
|
%5:gpr32all = COPY $w0
|
||
|
%1:gpr32all = COPY %5
|
||
|
|
||
|
bb.3.next:
|
||
|
successors: %bb.4(0x80000000)
|
||
|
|
||
|
; CHECK: %2:gpr32 = PHI
|
||
|
%2:gpr32 = PHI %1, %bb.2, %0, %bb.1
|
||
|
STRWui %2, %4, 0 :: (store (s32) into %ir.ptr)
|
||
|
|
||
|
bb.4.final (ir-block-address-taken %ir-block.final):
|
||
|
ADJCALLSTACKDOWN 0, 0, implicit-def dead $sp, implicit $sp
|
||
|
BL @bar, csr_darwin_aarch64_aapcs, implicit-def dead $lr, implicit $sp, implicit-def $sp, implicit-def $w0
|
||
|
ADJCALLSTACKUP 0, 0, implicit-def dead $sp, implicit $sp
|
||
|
%7:gpr32all = COPY $w0
|
||
|
RET_ReallyLR
|
||
|
|
||
|
...
|