mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-01 13:11:39 +01:00
1c46c7087d
It caused assertions to fire when building Chromium: lib/CodeGen/LiveDebugValues.cpp:331: bool {anonymous}::LiveDebugValues::OpenRangesSet::empty() const: Assertion `Vars.empty() == VarLocs.empty() && "open ranges are inconsistent"' failed. See https://crbug.com/992871#c3 for how to reproduce. > Patch https://reviews.llvm.org/D43256 introduced more aggressive loop layout optimization which depends on profile information. If profile information is not available, the statically estimated profile information(generated by BranchProbabilityInfo.cpp) is used. If user program doesn't behave as BranchProbabilityInfo.cpp expected, the layout may be worse. > > To be conservative this patch restores the original layout algorithm in plain mode. But user can still try the aggressive layout optimization with -force-precise-rotation-cost=true. > > Differential Revision: https://reviews.llvm.org/D65673 llvm-svn: 368579
313 lines
10 KiB
YAML
313 lines
10 KiB
YAML
# 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: 4
|
|
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: 4
|
|
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:
|
|
...
|