2019-07-18 14:56:49 +08:00
|
|
|
# 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] Use llvm::Align in MachineFunction and TargetLowering - fixes mir parsing
Summary:
This catches malformed mir files which specify alignment as log2 instead of pow2.
See https://reviews.llvm.org/D65945 for reference,
This is patch is part of a series to introduce an Alignment type.
See this thread for context: http://lists.llvm.org/pipermail/llvm-dev/2019-July/133851.html
See this patch for the introduction of the type: https://reviews.llvm.org/D64790
Reviewers: courbet
Subscribers: MatzeB, qcolombet, dschuff, arsenm, sdardis, nemanjai, jvesely, nhaehnle, hiraditya, kbarton, asb, rbar, johnrusso, simoncook, apazos, sabuasal, niosHD, jrtc27, MaskRay, zzheng, edward-jones, atanasyan, rogfer01, MartinMosbeck, brucehoult, the_o, PkmX, jocewei, jsji, Petar.Avramovic, asbirlea, s.egerton, pzheng, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D67433
llvm-svn: 371608
2019-09-11 19:16:48 +08:00
|
|
|
alignment: 16
|
2019-07-18 14:56:49 +08:00
|
|
|
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] Use llvm::Align in MachineFunction and TargetLowering - fixes mir parsing
Summary:
This catches malformed mir files which specify alignment as log2 instead of pow2.
See https://reviews.llvm.org/D65945 for reference,
This is patch is part of a series to introduce an Alignment type.
See this thread for context: http://lists.llvm.org/pipermail/llvm-dev/2019-July/133851.html
See this patch for the introduction of the type: https://reviews.llvm.org/D64790
Reviewers: courbet
Subscribers: MatzeB, qcolombet, dschuff, arsenm, sdardis, nemanjai, jvesely, nhaehnle, hiraditya, kbarton, asb, rbar, johnrusso, simoncook, apazos, sabuasal, niosHD, jrtc27, MaskRay, zzheng, edward-jones, atanasyan, rogfer01, MartinMosbeck, brucehoult, the_o, PkmX, jocewei, jsji, Petar.Avramovic, asbirlea, s.egerton, pzheng, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D67433
llvm-svn: 371608
2019-09-11 19:16:48 +08:00
|
|
|
alignment: 16
|
2019-07-18 14:56:49 +08:00
|
|
|
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:
|
|
|
|
|
2019-08-30 03:03:58 +08:00
|
|
|
; CHECK: bb.1.for.body:
|
|
|
|
; CHECK: successors: %bb.2(0x7ffff800), %bb.3(0x00000800)
|
|
|
|
; CHECK: B %bb.2
|
|
|
|
|
2019-07-18 14:56:49 +08:00
|
|
|
; CHECK: bb.4.catch4:
|
2019-08-12 20:43:51 +08:00
|
|
|
; CHECK: successors: %bb.11(0x7ffff800), %bb.6(0x00000800)
|
|
|
|
; CHECK: B %bb.11
|
2019-07-26 11:25:58 +08:00
|
|
|
|
2019-08-12 20:43:51 +08:00
|
|
|
; CHECK: bb.2..noexc:
|
|
|
|
|
|
|
|
; CHECK: bb.11.unreachable:
|
2019-07-18 14:56:49 +08:00
|
|
|
...
|