------- Additional Comments From mostrows at watson dot ibm dot com 2004-10-13 21:45
-------
Subject: Re: const/pure functions result in
bad asm
For starters, when compiling without -DBUG, the resulting assembly is
much longer (correct assembly, with -DBUG below, that is without
pure/const).
Basically, most of the assembly code one would expect is missing.
Further more, of the assembly output in my last mail, execution of that
code leads to one of several infinite loops, all of which take the form
of a branch instruction targeting itself.
I expect that pure/const functions to not be called more than once, the
problem is that the sample assembly in my original mail shows that the
body of the function being compiler is pretty much all gone.
On Wed, 2004-10-13 at 14:51 +0000, pinskia at gcc dot gnu dot org wrote:
> ------- Additional Comments From pinskia at gcc dot gnu dot org 2004-10-13 14:51
> -------
> What do you think is wrong, attach the difference. Also const/pure functions can
> changed so that they
> are only called once. And since they are pure (or is it const) is known not to
> access memory, the
> barrier:
> __asm__ __volatile__("": : :"memory");
>
> does not make a difference.
>
--
Michal Ostrowski <[EMAIL PROTECTED]>
0: 7c 08 02 a6 mflr r0
4: fb 81 ff e0 std r28,-32(r1)
8: fb a1 ff e8 std r29,-24(r1)
c: fb c1 ff f0 std r30,-16(r1)
10: fb e1 ff f8 std r31,-8(r1)
14: f8 01 00 10 std r0,16(r1)
18: f8 21 ff 61 stdu r1,-160(r1)
1c: 7c 7d 1b 78 mr r29,r3
20: 7c 9e 23 78 mr r30,r4
24: 3b 80 00 00 li r28,0
28: 7d bf 6b 78 mr r31,r13
2c: e9 3f 00 00 ld r9,0(r31)
30: 88 09 00 03 lbz r0,3(r9)
34: 2f a0 00 00 cmpdi cr7,r0,0
38: 40 be 00 20 bne+ cr7,58
<._Z10queue_workP16workqueue_structP11work_struct+0x58>
3c: 48 00 00 01 bl 3c
<._Z10queue_workP16workqueue_structP11work_struct+0x3c>
40: 60 00 00 00 nop
44: e9 7f 00 00 ld r11,0(r31)
48: 81 2b 00 00 lwz r9,0(r11)
4c: 39 29 00 01 addi r9,r9,1
50: 91 2b 00 00 stw r9,0(r11)
54: 48 00 00 18 b 6c
<._Z10queue_workP16workqueue_structP11work_struct+0x6c>
58: 7d a9 6b 78 mr r9,r13
5c: e9 69 00 00 ld r11,0(r9)
60: 81 2b 00 00 lwz r9,0(r11)
64: 39 29 00 01 addi r9,r9,1
68: 91 2b 00 00 stw r9,0(r11)
6c: e9 22 00 00 ld r9,0(r2)
70: eb e9 00 06 lwa r31,4(r9)
74: 7b e0 17 64 rldicr r0,r31,2,61
78: 7f e0 ea 14 add r31,r0,r29
7c: 38 60 00 00 li r3,0
80: 7f c4 f3 78 mr r4,r30
84: 48 00 00 01 bl 84
<._Z10queue_workP16workqueue_structP11work_struct+0x84>
88: 60 00 00 00 nop
8c: 2f a3 00 00 cmpdi cr7,r3,0
90: 40 9e 00 3c bne- cr7,cc
<._Z10queue_workP16workqueue_structP11work_struct+0xcc>
94: e8 1e 00 18 ld r0,24(r30)
98: 2f a0 00 00 cmpdi cr7,r0,0
9c: 40 be 00 18 bne+ cr7,b4
<._Z10queue_workP16workqueue_structP11work_struct+0xb4>
a0: 38 60 00 67 li r3,103
a4: e8 82 00 08 ld r4,8(r2)
a8: e8 a2 00 10 ld r5,16(r2)
ac: 48 00 00 01 bl ac
<._Z10queue_workP16workqueue_structP11work_struct+0xac>
b0: 60 00 00 00 nop
b4: fb fe 00 18 std r31,24(r30)
b8: 7f e3 fb 78 mr r3,r31
bc: 38 81 00 70 addi r4,r1,112
c0: 48 00 00 01 bl c0
<._Z10queue_workP16workqueue_structP11work_struct+0xc0>
c4: 60 00 00 00 nop
c8: 3b 80 00 01 li r28,1
cc: 7d a9 6b 78 mr r9,r13
d0: e9 29 00 00 ld r9,0(r9)
d4: 81 69 00 00 lwz r11,0(r9)
d8: 79 60 06 20 clrldi r0,r11,56
dc: 2f a0 00 01 cmpdi cr7,r0,1
e0: 40 be 00 18 bne+ cr7,f8
<._Z10queue_workP16workqueue_structP11work_struct+0xf8>
e4: 38 0b ff ff addi r0,r11,-1
e8: 90 09 00 00 stw r0,0(r9)
ec: 48 00 00 01 bl ec
<._Z10queue_workP16workqueue_structP11work_struct+0xec>
f0: 60 00 00 00 nop
f4: 48 00 00 18 b 10c
<._Z10queue_workP16workqueue_structP11work_struct+0x10c>
f8: 7d a9 6b 78 mr r9,r13
fc: e9 69 00 00 ld r11,0(r9)
100: 81 2b 00 00 lwz r9,0(r11)
104: 39 29 ff ff addi r9,r9,-1
108: 91 2b 00 00 stw r9,0(r11)
10c: 7f 83 e3 78 mr r3,r28
110: 38 21 00 a0 addi r1,r1,160
114: e8 01 00 10 ld r0,16(r1)
118: 7c 08 03 a6 mtlr r0
11c: eb 81 ff e0 ld r28,-32(r1)
120: eb a1 ff e8 ld r29,-24(r1)
124: eb c1 ff f0 ld r30,-16(r1)
128: eb e1 ff f8 ld r31,-8(r1)
12c: 4e 80 00 20 blr
130: 00 00 00 00 .long 0x0
134: 00 09 00 01 .long 0x90001
138: 80 04 00 00 lwz r0,0(r4)
--
http://gcc.gnu.org/bugzilla/show_bug.cgi?id=17972