[GHC] #7814: panic in PPC NCG
GHC
cvs-ghc at haskell.org
Sat Apr 6 09:55:00 CEST 2013
#7814: panic in PPC NCG
--------------------------------+-------------------------------------------
Reporter: heisenbug | Owner:
Type: bug | Status: new
Priority: normal | Component: Compiler
Version: 7.7 | Keywords:
Os: Unknown/Multiple | Architecture: powerpc
Failure: Building GHC failed | Blockedby:
Blocking: | Related:
--------------------------------+-------------------------------------------
Comment(by heisenbug):
The problem is in !JoinToTargets:
{{{
==================== Registers allocated
====================joinToTargets: making fixup code
in block: cl
jmp instruction: bne _co
src assignment: [(cf, InReg (RealRegSingle 30)),
(nv, InReg (RealRegSingle 31))]
dest assignment: [(cf, InReg (RealRegSingle 31))]
movement graph: [(cf,
InReg (RealRegSingle 30),
[InReg (RealRegSingle 31)])]
sccs of graph: [NONREC
(cf, InReg (RealRegSingle 30), [InReg
(RealRegSingle 31)])]
joinToTargets: fixup code is:
nI: mr 31, 30
b _co
}}}
Here is the entire output when I disable the panic:
{{{
stg_sel_0_upd_info:
.Lcb:
bcl 20,31,1f
1: mflr 31
lwz 30, .LnF-(1b)(31)
add 31, 31, 30
mr 30, 14
addi 29, 22, -12
cmplw 29, 24
blt .Lcj
.Lcl:
addis 29, 31, .LC_stg_upd_frame_info-(.LCTOC1)+0 at ha
lwz 29, .LC_stg_upd_frame_info-(.LCTOC1)+0 at l(29)
stw 29, -8(22)
stw 30, -4(22)
lwz 30, 8(30)
andi. 29, 30, 3
cmpwi 29, 0
bne .LnI
.Lcn:
addis 31, 31, .LC_ce_info-(.LCTOC1)+0 at ha
lwz 31, .LC_ce_info-(.LCTOC1)+0 at l(31)
stw 31, -12(22)
mr 14, 30
addi 22, 22, -12
lwz 31, 0(30)
mtctr 31
bctr
.text
.align 2
.long 0
.long 2097152
ce_info:
.Lce:
addi 22, 22, 12
mr 31, 14
.Lco:
li 30, -4
and 31, 31, 30
lwz 14, 4(31)
addi 22, 22, -8
addis 31, %vI_nv, .LC_stg_ap_0_fast-(.LCTOC1)+0 at ha
lwz 31, .LC_stg_ap_0_fast-(.LCTOC1)+0 at l(31)
mtctr 31
bctr
.Lcj:
mr 14, 30
lwz 31, -12(27)
mtctr 31
bctr
.LnI:
mr 31, 30
b .Lco
}}}
Apparently the fixup code is in pace (as '.LnI'), but
1. why is it needed at all? (there are two branches to '_co', from 'ce'
and 'cl')
2. in 'cl' (%vI_nv => r31) and in 'ce' %vI_nv is not used but marked as
live in, dying on exit
3. who calls 'ce'? appears to have block_ce_info
--
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/7814#comment:5>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list