blob: 1f9b666124c6cad683d3222e455104ea25b8bb2b [file] [log] [blame]
# RUN: llc -verify-machineinstrs -mcpu=pwr9 -mtriple powerpc64le-unknown-linux-gnu \
# RUN: -run-pass=block-placement -o - %s | FileCheck %s
--- |
; ModuleID = 'test.ll'
source_filename = "test.ll"
target datalayout = "e-m:e-i64:64-n32:64"
@_ZTIl = external constant i8*
@_ZTIi = external constant i8*
@_ZTIc = external constant i8*
define dso_local void @_Z6calleev() local_unnamed_addr {
entry:
tail call void @__cxa_rethrow()
unreachable
}
declare void @__cxa_rethrow() local_unnamed_addr
define dso_local void @_Z14TestSinglePredv() local_unnamed_addr personality i8* bitcast (i32 (...)* @__gxx_personality_v0 to i8*) {
entry:
br label %for.body
for.cond.cleanup: ; preds = %for.inc
ret void
for.body: ; preds = %for.inc, %entry
%lsr.iv = phi i32 [ %lsr.iv.next, %for.inc ], [ 10, %entry ]
invoke void @__cxa_rethrow()
to label %.noexc unwind label %lpad
.noexc: ; preds = %for.body
unreachable
lpad: ; preds = %for.body
%0 = landingpad { i8*, i32 }
catch i8* bitcast (i8** @_ZTIl to i8*)
catch i8* bitcast (i8** @_ZTIi to i8*)
catch i8* null
%1 = extractvalue { i8*, i32 } %0, 0
%2 = extractvalue { i8*, i32 } %0, 1
%3 = tail call i32 @llvm.eh.typeid.for(i8* bitcast (i8** @_ZTIl to i8*))
%matches = icmp eq i32 %2, %3
br i1 %matches, label %catch4, label %catch.fallthrough
catch4: ; preds = %lpad
%4 = tail call i8* @__cxa_begin_catch(i8* %1)
invoke void @__cxa_rethrow()
to label %unreachable unwind label %lpad6
catch.fallthrough: ; preds = %lpad
%5 = tail call i32 @llvm.eh.typeid.for(i8* bitcast (i8** @_ZTIi to i8*))
%matches1 = icmp eq i32 %2, %5
%6 = tail call i8* @__cxa_begin_catch(i8* %1)
br i1 %matches1, label %catch2, label %catch
catch2: ; preds = %catch.fallthrough
tail call void @__cxa_end_catch()
br label %for.inc
catch: ; preds = %catch.fallthrough
tail call void @__cxa_end_catch()
br label %for.inc
lpad6: ; preds = %catch4
%7 = landingpad { i8*, i32 }
cleanup
catch i8* bitcast (i8** @_ZTIc to i8*)
%8 = extractvalue { i8*, i32 } %7, 1
%9 = tail call i32 @llvm.eh.typeid.for(i8* bitcast (i8** @_ZTIc to i8*))
%matches9 = icmp eq i32 %8, %9
br i1 %matches9, label %catch10, label %ehcleanup
catch10: ; preds = %lpad6
%10 = extractvalue { i8*, i32 } %7, 0
%11 = tail call i8* @__cxa_begin_catch(i8* %10)
tail call void @__cxa_end_catch()
tail call void @__cxa_end_catch()
br label %for.inc
for.inc: ; preds = %catch10, %catch, %catch2
%lsr.iv.next = add nsw i32 %lsr.iv, -1
%exitcond = icmp eq i32 %lsr.iv.next, 0
br i1 %exitcond, label %for.cond.cleanup, label %for.body
ehcleanup: ; preds = %lpad6
tail call void @__cxa_end_catch()
%exn.obj = extractvalue { i8*, i32 } %7, 0
call void @_Unwind_Resume(i8* %exn.obj)
unreachable
unreachable: ; preds = %catch4
unreachable
}
declare i32 @__gxx_personality_v0(...)
; Function Attrs: nounwind readnone
declare i32 @llvm.eh.typeid.for(i8*) #0
declare i8* @__cxa_begin_catch(i8*) local_unnamed_addr
declare void @__cxa_end_catch() local_unnamed_addr
; Function Attrs: nounwind
declare void @llvm.stackprotector(i8*, i8**) #1
declare void @_Unwind_Resume(i8*)
attributes #0 = { nounwind readnone }
attributes #1 = { nounwind }
...
---
name: _Z6calleev
alignment: 16
exposesReturnsTwice: false
legalized: false
regBankSelected: false
selected: false
failedISel: false
tracksRegLiveness: true
hasWinCFI: false
registers: []
liveins: []
frameInfo:
isFrameAddressTaken: false
isReturnAddressTaken: false
hasStackMap: false
hasPatchPoint: false
stackSize: 32
offsetAdjustment: 0
maxAlignment: 0
adjustsStack: true
hasCalls: true
stackProtector: ''
maxCallFrameSize: 32
cvBytesOfCalleeSavedRegisters: 0
hasOpaqueSPAdjustment: false
hasVAStart: false
hasMustTailInVarArgFunc: false
localFrameSize: 0
savePoint: ''
restorePoint: ''
fixedStack: []
stack: []
callSites: []
constants: []
machineFunctionInfo: {}
body: |
bb.0.entry:
$x0 = MFLR8 implicit $lr8
STD killed $x0, 16, $x1
$x1 = STDU $x1, -32, $x1
CFI_INSTRUCTION def_cfa_offset 32
CFI_INSTRUCTION offset $lr8, 16
BL8_NOP @__cxa_rethrow, csr_svr464_altivec, implicit-def dead $lr8, implicit $rm, implicit-def $r1
...
---
name: _Z14TestSinglePredv
alignment: 16
exposesReturnsTwice: false
legalized: false
regBankSelected: false
selected: false
failedISel: false
tracksRegLiveness: true
hasWinCFI: false
registers: []
liveins: []
frameInfo:
isFrameAddressTaken: false
isReturnAddressTaken: false
hasStackMap: false
hasPatchPoint: false
stackSize: 64
offsetAdjustment: 0
maxAlignment: 0
adjustsStack: true
hasCalls: true
stackProtector: ''
maxCallFrameSize: 32
cvBytesOfCalleeSavedRegisters: 0
hasOpaqueSPAdjustment: false
hasVAStart: false
hasMustTailInVarArgFunc: false
localFrameSize: 0
savePoint: ''
restorePoint: ''
fixedStack:
- { id: 0, type: spill-slot, offset: -80, size: 8, alignment: 16, stack-id: default,
callee-saved-register: '$x30', callee-saved-restored: true, debug-info-variable: '',
debug-info-expression: '', debug-info-location: '' }
- { id: 1, type: spill-slot, offset: -88, size: 8, alignment: 8, stack-id: default,
callee-saved-register: '$x29', callee-saved-restored: true, debug-info-variable: '',
debug-info-expression: '', debug-info-location: '' }
stack: []
callSites: []
constants: []
machineFunctionInfo: {}
body: |
bb.0.entry:
successors: %bb.1(0x80000000)
liveins: $x29, $x30
$x0 = MFLR8 implicit $lr8
CFI_INSTRUCTION def_cfa_offset 64
CFI_INSTRUCTION offset $lr8, 16
CFI_INSTRUCTION offset $x29, -24
CFI_INSTRUCTION offset $x30, -16
STD killed $x29, -24, $x1 :: (store 8 into %fixed-stack.1)
STD killed $x30, -16, $x1 :: (store 8 into %fixed-stack.0, align 16)
STD killed $x0, 16, $x1
$x1 = STDU $x1, -64, $x1
renamable $r29 = LI 10
bb.1.for.body:
successors: %bb.2(0x7ffff800), %bb.3(0x00000800)
liveins: $r29
EH_LABEL <mcsymbol .Ltmp0>
BL8_NOP @__cxa_rethrow, csr_svr464_altivec, implicit-def dead $lr8, implicit $rm, implicit-def $r1
EH_LABEL <mcsymbol .Ltmp1>
bb.2..noexc:
successors:
bb.3.lpad (landing-pad):
successors: %bb.4(0x00000001), %bb.5(0x7fffffff)
liveins: $r29, $x3, $x4
EH_LABEL <mcsymbol .Ltmp2>
$x30 = OR8 killed $x4, $x4
renamable $cr0 = CMPLWI renamable $r30, 3
BCC 71, killed renamable $cr0, %bb.5
bb.4.catch4:
successors: %bb.11(0x7ffff800), %bb.6(0x00000800)
liveins: $r29, $x3
BL8_NOP @__cxa_begin_catch, csr_svr464_altivec, implicit-def dead $lr8, implicit $rm, implicit killed $x3, implicit $x2, implicit-def $r1, implicit-def dead $x3
EH_LABEL <mcsymbol .Ltmp3>
BL8_NOP @__cxa_rethrow, csr_svr464_altivec, implicit-def dead $lr8, implicit $rm, implicit-def $r1
EH_LABEL <mcsymbol .Ltmp4>
B %bb.11
bb.5.catch.fallthrough:
successors: %bb.8(0x80000000)
liveins: $r29, $x3, $x30
BL8_NOP @__cxa_begin_catch, csr_svr464_altivec, implicit-def dead $lr8, implicit $rm, implicit killed $x3, implicit $x2, implicit-def $r1, implicit-def dead $x3
renamable $cr0 = CMPLWI killed renamable $r30, 2, implicit $x30
B %bb.8
bb.6.lpad6 (landing-pad):
successors: %bb.7(0x7fffffff), %bb.10(0x00000001)
liveins: $r29, $x3, $x4
EH_LABEL <mcsymbol .Ltmp5>
renamable $cr0 = CMPLWI killed renamable $r4, 4, implicit $x4
$x30 = OR8 killed $x3, $x3
BCC 70, killed renamable $cr0, %bb.10
bb.7.catch10:
successors: %bb.8(0x80000000)
liveins: $r29, $x30
$x3 = OR8 killed $x30, $x30
BL8_NOP @__cxa_begin_catch, csr_svr464_altivec, implicit-def dead $lr8, implicit $rm, implicit killed $x3, implicit-def $r1, implicit-def dead $x3
BL8_NOP @__cxa_end_catch, csr_svr464_altivec, implicit-def dead $lr8, implicit $rm, implicit-def $r1
bb.8.for.inc:
successors: %bb.9(0x04000000), %bb.1(0x7c000000)
liveins: $r29
BL8_NOP @__cxa_end_catch, csr_svr464_altivec, implicit-def dead $lr8, implicit $rm, implicit-def $r1
renamable $r29 = nsw ADDI killed renamable $r29, -1
renamable $cr0 = CMPLWI renamable $r29, 0
BCC 68, killed renamable $cr0, %bb.1
bb.9.for.cond.cleanup:
$x1 = ADDI8 $x1, 64
$x0 = LD 16, $x1
MTLR8 killed $x0, implicit-def $lr8
$x30 = LD -16, $x1 :: (load 8 from %fixed-stack.0, align 16)
$x29 = LD -24, $x1 :: (load 8 from %fixed-stack.1)
BLR8 implicit $lr8, implicit $rm
bb.10.ehcleanup:
successors:
liveins: $x30
BL8_NOP @__cxa_end_catch, csr_svr464_altivec, implicit-def dead $lr8, implicit $rm, implicit-def $r1
$x3 = OR8 killed $x30, $x30
BL8_NOP @_Unwind_Resume, csr_svr464_altivec, implicit-def dead $lr8, implicit $rm, implicit killed $x3, implicit-def $r1
bb.11.unreachable:
; CHECK: bb.1.for.body:
; CHECK: successors: %bb.2(0x7ffff800), %bb.3(0x00000800)
; CHECK: B %bb.2
; CHECK: bb.4.catch4:
; CHECK: successors: %bb.11(0x7ffff800), %bb.6(0x00000800)
; CHECK: B %bb.11
; CHECK: bb.2..noexc:
; CHECK: bb.11.unreachable:
...