https://bugs.kde.org/show_bug.cgi?id=369175

--- Comment #5 from Julian Seward <jsew...@acm.org> ---
Still can't repro it, but with a test case for this insn, the two calls look
like
this:

IR and virtual-registerised code:

 -- t127 =
1Sto32(32to1(64to32(And64(is_BCDstring128_helper{0x38174610}(0x1:I64,t117,t118):I64,is_BCDstring128_helper{0x38174610}(0x1:I64,t120,t121):I64))))
li_word %vR721,0x0000000000000001
mr %r3,%vR721
mr %r4,%vR117
mr %r5,%vR118
call: { li_word %r10,0x0000000038174610 ; mtctr r10 ; bctrl
[r3,r4,r5,RLPri_Int] }
mr %vR722,%r3
li_word %vR723,0x0000000000000001
mr %r3,%vR723
mr %r4,%vR120
mr %r5,%vR121
call: { li_word %r10,0x0000000038174610 ; mtctr r10 ; bctrl
[r3,r4,r5,RLPri_Int] }
mr %vR724,%r3
and %vR720,%vR722,%vR724
andi. %vR725,%vR720,1
cmplwi %cr7,%vR725,1
set (cr7.eq=1),%vR719: { mfcr r0 ; rlwinm %vR719,r0,31,31,31 }
slwi %vR719,%vR719,31
srawi %vR719,%vR719,31
mr %vR127,%vR719

Register allocation around the two calls:

194   li_word %r14,0x0000000000000001
195   mr %r3,%r14
196   mr %r4,%r15
197   mr %r5,%r16
198   call: { li_word %r10,0x0000000038174610 ; mtctr r10 ; bctrl
[r3,r4,r5,RLPri_Int] }
199   mr %r14,%r3
200   li_word %r19,0x0000000000000001
201   mr %r3,%r19
202   mr %r4,%r17
203   mr %r5,%r18
204   call: { li_word %r10,0x0000000038174610 ; mtctr r10 ; bctrl
[r3,r4,r5,RLPri_Int] }
205   mr %r19,%r3
206   and %r20,%r14,%r19
207   andi. %r14,%r20,1

So the result of the first call is parked in r14, and then we make the second
call.  That
seems OK because r14 (in fact, r14 to r28) are callee saved so the result of
the first
call won't get trashed.  Also, the args for the second call enter this fragment
in 
r19/r18/r17, so we can be fairly sure the first call doesn't trash them.  So
there's
nothing *obviously* wrong here that I can see.  We need the real crash block.

-- 
You are receiving this mail because:
You are watching all bug changes.

Reply via email to