public inbox for gcc-bugs@sourceware.org
help / color / mirror / Atom feed
* [Bug c/102023] New: Unnecessary duplication of mtcrf instruction
@ 2021-08-23 11:27 christophe.leroy at csgroup dot eu
  0 siblings, 0 replies; only message in thread
From: christophe.leroy at csgroup dot eu @ 2021-08-23 11:27 UTC (permalink / raw)
  To: gcc-bugs

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=102023

            Bug ID: 102023
           Summary: Unnecessary duplication of mtcrf instruction
           Product: gcc
           Version: 11.0
            Status: UNCONFIRMED
          Severity: normal
          Priority: P3
         Component: c
          Assignee: unassigned at gcc dot gnu.org
          Reporter: christophe.leroy at csgroup dot eu
  Target Milestone: ---

Building Linux Kernel, mpc885_ads_defconfig (powerpc), several places we get
multiple mtcrf whereas a single mtcrf instruction would be enough:

Exemple: arch/powerpc/perf/8xx-pmu.o, function mpc8xx_pmu_read()

At two places we get:
 258:   7d 82 01 20     mtcrf   32,r12
 25c:   7d 81 01 20     mtcrf   16,r12
 260:   7d 80 81 20     mtcrf   8,r12

The above should be replaced by the following:

        mtcrf   56,r12

56 being the or-ing of 32|16|8

Dump of the complete function is below:

000000e0 <mpc8xx_pmu_read>:
  e0:   94 21 ff b0     stwu    r1,-80(r1)
  e4:   7c 08 02 a6     mflr    r0
  e8:   7d 80 00 26     mfcr    r12
  ec:   93 21 00 34     stw     r25,52(r1)
  f0:   90 01 00 54     stw     r0,84(r1)
  f4:   91 81 00 14     stw     r12,20(r1)
  f8:   7c 79 1b 78     mr      r25,r3
  fc:   4b ff ff 05     bl      0 <event_type>
 100:   2c 03 00 00     cmpwi   r3,0
 104:   41 80 01 f4     blt     2f8 <mpc8xx_pmu_read+0x218>
 108:   2c 03 00 04     cmpwi   r3,4
 10c:   2e 03 00 03     cmpwi   cr4,r3,3
 110:   2d 03 00 01     cmpwi   cr2,r3,1
 114:   2d 83 00 02     cmpwi   cr3,r3,2
 118:   93 81 00 40     stw     r28,64(r1)
 11c:   93 a1 00 44     stw     r29,68(r1)
 120:   92 41 00 18     stw     r18,24(r1)
 124:   92 61 00 1c     stw     r19,28(r1)
 128:   92 81 00 20     stw     r20,32(r1)
 12c:   92 a1 00 24     stw     r21,36(r1)
 130:   92 c1 00 28     stw     r22,40(r1)
 134:   92 e1 00 2c     stw     r23,44(r1)
 138:   93 01 00 30     stw     r24,48(r1)
 13c:   93 41 00 38     stw     r26,56(r1)
 140:   93 61 00 3c     stw     r27,60(r1)
 144:   93 c1 00 48     stw     r30,72(r1)
 148:   93 e1 00 4c     stw     r31,76(r1)
 14c:   7e 80 00 26     mfcr    r20
 150:   3b 79 01 88     addi    r27,r25,392
 154:   3a 40 00 00     li      r18,0
 158:   3a 60 00 00     li      r19,0
 15c:   3b c0 00 00     li      r30,0
 160:   3b e0 00 00     li      r31,0
 164:   3e e0 00 00     lis     r23,0
                        166: R_PPC_ADDR16_HA    dtlb_miss_counter
 168:   3a c0 00 00     li      r22,0
 16c:   3f 40 00 00     lis     r26,0
                        16e: R_PPC_ADDR16_HA    instruction_counter
 170:   3e a0 00 01     lis     r21,1
 174:   3f 00 00 00     lis     r24,0
                        176: R_PPC_ADDR16_HA    itlb_miss_counter
 178:   7f 63 db 78     mr      r3,r27
 17c:   48 00 00 01     bl      17c <mpc8xx_pmu_read+0x9c>
                        17c: R_PPC_REL24        generic_atomic64_read
 180:   7c 9c 23 78     mr      r28,r4
 184:   7c 7d 1b 78     mr      r29,r3
 188:   41 92 01 40     beq     cr4,2c8 <mpc8xx_pmu_read+0x1e8>
 18c:   41 91 01 50     bgt     cr4,2dc <mpc8xx_pmu_read+0x1fc>
 190:   41 8a 00 dc     beq     cr2,26c <mpc8xx_pmu_read+0x18c>
 194:   39 3a 00 00     addi    r9,r26,0
                        196: R_PPC_ADDR16_LO    instruction_counter
 198:   40 8e 00 fc     bne     cr3,294 <mpc8xx_pmu_read+0x1b4>
 19c:   81 49 00 00     lwz     r10,0(r9)
 1a0:   7f f6 22 a6     mfspr   r31,150
 1a4:   81 09 00 00     lwz     r8,0(r9)
 1a8:   7c 0a 40 00     cmpw    r10,r8
 1ac:   40 82 ff f0     bne     19c <mpc8xx_pmu_read+0xbc>
 1b0:   57 ff 84 3e     rlwinm  r31,r31,16,16,31
 1b4:   7d 49 fe 70     srawi   r9,r10,31
 1b8:   55 47 84 3e     rlwinm  r7,r10,16,16,31
 1bc:   51 5f 80 1e     rlwimi  r31,r10,16,0,15
 1c0:   51 27 80 1e     rlwimi  r7,r9,16,0,15
 1c4:   7e 7f e0 10     subfc   r19,r31,r28
 1c8:   7e 47 e9 10     subfe   r18,r7,r29
 1cc:   2c 12 00 00     cmpwi   r18,0
 1d0:   7c fe 3b 78     mr      r30,r7
 1d4:   40 a0 00 c0     bge     294 <mpc8xx_pmu_read+0x1b4>
 1d8:   7e 73 b0 14     addc    r19,r19,r22
 1dc:   7f c7 f3 78     mr      r7,r30
 1e0:   7f e8 fb 78     mr      r8,r31
 1e4:   7f a5 eb 78     mr      r5,r29
 1e8:   7f 86 e3 78     mr      r6,r28
 1ec:   7f 63 db 78     mr      r3,r27
 1f0:   7e 52 a9 14     adde    r18,r18,r21
 1f4:   48 00 00 01     bl      1f4 <mpc8xx_pmu_read+0x114>
                        1f4: R_PPC_REL24        generic_atomic64_cmpxchg
 1f8:   7c 1d 18 00     cmpw    r29,r3
 1fc:   40 82 ff 7c     bne     178 <mpc8xx_pmu_read+0x98>
 200:   7c 1c 20 40     cmplw   r28,r4
 204:   40 82 ff 74     bne     178 <mpc8xx_pmu_read+0x98>
 208:   81 81 00 14     lwz     r12,20(r1)
 20c:   80 01 00 54     lwz     r0,84(r1)
 210:   82 81 00 20     lwz     r20,32(r1)
 214:   82 a1 00 24     lwz     r21,36(r1)
 218:   82 c1 00 28     lwz     r22,40(r1)
 21c:   82 e1 00 2c     lwz     r23,44(r1)
 220:   83 01 00 30     lwz     r24,48(r1)
 224:   83 41 00 38     lwz     r26,56(r1)
 228:   83 61 00 3c     lwz     r27,60(r1)
 22c:   83 81 00 40     lwz     r28,64(r1)
 230:   83 a1 00 44     lwz     r29,68(r1)
 234:   83 c1 00 48     lwz     r30,72(r1)
 238:   83 e1 00 4c     lwz     r31,76(r1)
 23c:   38 b9 00 68     addi    r5,r25,104
 240:   7e 43 93 78     mr      r3,r18
 244:   83 21 00 34     lwz     r25,52(r1)
 248:   82 41 00 18     lwz     r18,24(r1)
 24c:   7e 64 9b 78     mr      r4,r19
 250:   82 61 00 1c     lwz     r19,28(r1)
 254:   7c 08 03 a6     mtlr    r0
 258:   7d 82 01 20     mtcrf   32,r12
 25c:   7d 81 01 20     mtcrf   16,r12
 260:   7d 80 81 20     mtcrf   8,r12
 264:   38 21 00 50     addi    r1,r1,80
 268:   48 00 00 00     b       268 <mpc8xx_pmu_read+0x188>
                        268: R_PPC_REL24        generic_atomic64_add
 26c:   7f cd 42 e6     mftbu   r30
 270:   7f ec 42 e6     mftb    r31
 274:   7d 2d 42 e6     mftbu   r9
 278:   7c 1e 48 40     cmplw   r30,r9
 27c:   40 82 ff f0     bne     26c <mpc8xx_pmu_read+0x18c>
 280:   7e 7c f8 10     subfc   r19,r28,r31
 284:   56 72 27 3e     rlwinm  r18,r19,4,28,31
 288:   7d 3d f1 10     subfe   r9,r29,r30
 28c:   51 32 20 36     rlwimi  r18,r9,4,0,27
 290:   56 73 20 36     rlwinm  r19,r19,4,0,27
 294:   7f c7 f3 78     mr      r7,r30
 298:   7f e8 fb 78     mr      r8,r31
 29c:   7f a5 eb 78     mr      r5,r29
 2a0:   7f 86 e3 78     mr      r6,r28
 2a4:   7f 63 db 78     mr      r3,r27
 2a8:   48 00 00 01     bl      2a8 <mpc8xx_pmu_read+0x1c8>
                        2a8: R_PPC_REL24        generic_atomic64_cmpxchg
 2ac:   7c 1d 18 00     cmpw    r29,r3
 2b0:   41 a2 ff 50     beq     200 <mpc8xx_pmu_read+0x120>
 2b4:   7f 63 db 78     mr      r3,r27
 2b8:   48 00 00 01     bl      2b8 <mpc8xx_pmu_read+0x1d8>
                        2b8: R_PPC_REL24        generic_atomic64_read
 2bc:   7c 9c 23 78     mr      r28,r4
 2c0:   7c 7d 1b 78     mr      r29,r3
 2c4:   40 92 fe c8     bne     cr4,18c <mpc8xx_pmu_read+0xac>
 2c8:   83 f8 00 00     lwz     r31,0(r24)
                        2ca: R_PPC_ADDR16_LO    itlb_miss_counter
 2cc:   3b c0 00 00     li      r30,0
 2d0:   7e 64 f8 50     subf    r19,r4,r31
 2d4:   7e 72 fe 70     srawi   r18,r19,31
 2d8:   4b ff ff bc     b       294 <mpc8xx_pmu_read+0x1b4>
 2dc:   7e 88 01 20     mtcrf   128,r20
 2e0:   40 a2 ff b4     bne     294 <mpc8xx_pmu_read+0x1b4>
 2e4:   83 f7 00 00     lwz     r31,0(r23)
                        2e6: R_PPC_ADDR16_LO    dtlb_miss_counter
 2e8:   3b c0 00 00     li      r30,0
 2ec:   7e 64 f8 50     subf    r19,r4,r31
 2f0:   7e 72 fe 70     srawi   r18,r19,31
 2f4:   4b ff ff a0     b       294 <mpc8xx_pmu_read+0x1b4>
 2f8:   81 81 00 14     lwz     r12,20(r1)
 2fc:   80 01 00 54     lwz     r0,84(r1)
 300:   83 21 00 34     lwz     r25,52(r1)
 304:   7c 08 03 a6     mtlr    r0
 308:   7d 82 01 20     mtcrf   32,r12
 30c:   7d 81 01 20     mtcrf   16,r12
 310:   7d 80 81 20     mtcrf   8,r12
 314:   38 21 00 50     addi    r1,r1,80
 318:   4e 80 00 20     blr

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2021-08-23 11:27 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-08-23 11:27 [Bug c/102023] New: Unnecessary duplication of mtcrf instruction christophe.leroy at csgroup dot eu

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).