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

--- Comment #1 from Mukund Sivaraman <muks at banu dot com> ---
The following is _correct_ generated x8t_64 code for
dns_rdataslab_fromrdataset() as compiled with:

gcc version 4.8.2 20131212 (Red Hat 4.8.2-7) (GCC)

Under free_rdatas label, you can see that there is a 0 check for x
(%r14) as in the C code. It was not deleted by the compiler.

0000000000521450 <dns_rdataslab_fromrdataset>:

; find dns_rdata_set_first() call below:

  521450:       41 57                   push   %r15
  521452:       49 89 f7                mov    %rsi,%r15
  521455:       41 56                   push   %r14
  521457:       41 55                   push   %r13
  521459:       41 54                   push   %r12
  52145b:       49 89 fc                mov    %rdi,%r12
  52145e:       55                      push   %rbp
  52145f:       53                      push   %rbx
  521460:       48 83 ec 38             sub    $0x38,%rsp
  521464:       48 89 54 24 10          mov    %rdx,0x10(%rsp)
  521469:       89 4c 24 0c             mov    %ecx,0xc(%rsp)
  52146d:       e8 ce e7 ff ff          callq  51fc40 <dns_rdataset_count>
  521472:       41 89 c5                mov    %eax,%r13d
  521475:       45 85 ed                test   %r13d,%r13d
  521478:       75 26                   jne    5214a0
<dns_rdataslab_fromrdataset+0x50>
  52147a:       45 31 f6                xor    %r14d,%r14d
  52147d:       66 41 83 7c 24 22 00    cmpw   $0x0,0x22(%r12)
  521484:       b8 19 00 00 00          mov    $0x19,%eax
  521489:       74 4c                   je     5214d7
<dns_rdataslab_fromrdataset+0x87>
  52148b:       48 83 c4 38             add    $0x38,%rsp
  52148f:       5b                      pop    %rbx
  521490:       5d                      pop    %rbp
  521491:       41 5c                   pop    %r12
  521493:       41 5d                   pop    %r13
  521495:       41 5e                   pop    %r14
  521497:       41 5f                   pop    %r15
  521499:       c3                      retq   
  52149a:       66 0f 1f 44 00 00       nopw   0x0(%rax,%rax,1)
  5214a0:       41 81 fd ff ff 00 00    cmp    $0xffff,%r13d
  5214a7:       b8 13 00 00 00          mov    $0x13,%eax
  5214ac:       77 dd                   ja     52148b
<dns_rdataslab_fromrdataset+0x3b>
  5214ae:       44 89 e8                mov    %r13d,%eax
  5214b1:       b9 a1 00 00 00          mov    $0xa1,%ecx
  5214b6:       ba eb 20 64 00          mov    $0x6420eb,%edx
  5214bb:       48 8d 34 40             lea    (%rax,%rax,2),%rsi
  5214bf:       4c 89 ff                mov    %r15,%rdi
  5214c2:       48 c1 e6 04             shl    $0x4,%rsi
  5214c6:       e8 45 c2 0a 00          callq  5cd710 <isc__mem_get>
  5214cb:       48 85 c0                test   %rax,%rax
  5214ce:       49 89 c6                mov    %rax,%r14
  5214d1:       0f 84 a7 00 00 00       je     52157e
<dns_rdataslab_fromrdataset+0x12e>
  5214d7:       4c 89 e7                mov    %r12,%rdi

;       result = dns_rdataset_first(rdataset);

  5214da:       e8 41 e8 ff ff          callq  51fd20 <dns_rdataset_first>

;       if (result != ISC_R_SUCCESS && result != ISC_R_NOMORE)
;               goto free_rdatas;

; 0x1d (ISC_R_NOMORE)

  5214df:       83 f8 1d                cmp    $0x1d,%eax
  5214e2:       74 04                   je     5214e8
<dns_rdataslab_fromrdataset+0x98>

; 0x0 (ISC_R_SUCCESS).  if (result != ISC_R_SUCCESS && result !=
; ISC_R_NOMORE), jmp to 52153f (free_rdatas) below.

;; test instruction does logical AND of operands and sets zero flag if
;; %eax is 0. jne (same as jnz) tests ZF and performs conditional jump
;; if ZF=0.

  5214e4:       85 c0                   test   %eax,%eax
  5214e6:       75 57                   jne    52153f
<dns_rdataslab_fromrdataset+0xef>

; go below to free_rdatas.

; ignore: for loop

  5214e8:       31 db                   xor    %ebx,%ebx
  5214ea:       85 c0                   test   %eax,%eax
  5214ec:       75 4c                   jne    52153a
<dns_rdataslab_fromrdataset+0xea>
  5214ee:       45 85 ed                test   %r13d,%r13d
  5214f1:       75 0a                   jne    5214fd
<dns_rdataslab_fromrdataset+0xad>
  5214f3:       eb 45                   jmp    52153a
<dns_rdataslab_fromrdataset+0xea>
  5214f5:       0f 1f 00                nopl   (%rax)

; ignore: for loop iterate (continue;)

  5214f8:       41 39 dd                cmp    %ebx,%r13d
  5214fb:       76 3d                   jbe    52153a
<dns_rdataslab_fromrdataset+0xea>
  5214fd:       89 d8                   mov    %ebx,%eax
  5214ff:       48 8d 2c 40             lea    (%rax,%rax,2),%rbp
  521503:       48 c1 e5 04             shl    $0x4,%rbp
  521507:       4c 01 f5                add    %r14,%rbp
  52150a:       48 89 ef                mov    %rbp,%rdi
  52150d:       e8 4e 9e fd ff          callq  4fb360 <dns_rdata_init>
  521512:       48 89 ee                mov    %rbp,%rsi
  521515:       4c 89 e7                mov    %r12,%rdi
  521518:       e8 a3 e8 ff ff          callq  51fdc0 <dns_rdataset_current>

; Second INSIST() inside for loop. First INSIST() is redundant.
  52151d:       48 81 7d 00 a8 c6 8b    cmpq   $0x8bc6a8,0x0(%rbp)
  521524:       00 
  521525:       0f 84 00 02 00 00       je     52172b
<dns_rdataslab_fromrdataset+0x2db>

  52152b:       4c 89 e7                mov    %r12,%rdi
  52152e:       83 c3 01                add    $0x1,%ebx
  521531:       e8 3a e8 ff ff          callq  51fd70 <dns_rdataset_next>
  521536:       85 c0                   test   %eax,%eax
  521538:       74 be                   je     5214f8
<dns_rdataslab_fromrdataset+0xa8>
  52153a:       83 f8 1d                cmp    $0x1d,%eax
  52153d:       74 49                   je     521588
<dns_rdataslab_fromrdataset+0x138>

;  free_rdatas:
;        if (x != NULL)
;                isc_mem_put(mctx, x, nalloc * sizeof(struct xrdata));
;        return (result);

  52153f:       4d 85 f6                test   %r14,%r14
  521542:       0f 84 43 ff ff ff       je     52148b
<dns_rdataslab_fromrdataset+0x3b>

; x is not NULL. Call isc__mem_put(), pop frame and return:

  521548:       4b 8d 54 6d 00          lea    0x0(%r13,%r13,2),%rdx
  52154d:       4c 89 f6                mov    %r14,%rsi
  521550:       4c 89 ff                mov    %r15,%rdi
  521553:       41 b8 4e 01 00 00       mov    $0x14e,%r8d
  521559:       b9 eb 20 64 00          mov    $0x6420eb,%ecx
  52155e:       89 44 24 0c             mov    %eax,0xc(%rsp)
  521562:       48 c1 e2 04             shl    $0x4,%rdx
  521566:       e8 85 d2 0a 00          callq  5ce7f0 <isc__mem_put>
  52156b:       8b 44 24 0c             mov    0xc(%rsp),%eax
  52156f:       48 83 c4 38             add    $0x38,%rsp
  521573:       5b                      pop    %rbx
  521574:       5d                      pop    %rbp
  521575:       41 5c                   pop    %r12
  521577:       41 5d                   pop    %r13
  521579:       41 5e                   pop    %r14
  52157b:       41 5f                   pop    %r15
  52157d:       c3                      retq   

; ... you can skip the rest of this comment.

  52157e:       b8 01 00 00 00          mov    $0x1,%eax
  521583:       e9 03 ff ff ff          jmpq   52148b
<dns_rdataslab_fromrdataset+0x3b>
  521588:       44 39 eb                cmp    %r13d,%ebx
  52158b:       b0 19                   mov    $0x19,%al
  52158d:       75 b0                   jne    52153f
<dns_rdataslab_fromrdataset+0xef>
  52158f:       8b 44 24 0c             mov    0xc(%rsp),%eax
  521593:       89 de                   mov    %ebx,%esi
  521595:       b9 c0 13 52 00          mov    $0x5213c0,%ecx
  52159a:       ba 30 00 00 00          mov    $0x30,%edx
  52159f:       4c 89 f7                mov    %r14,%rdi
  5215a2:       8d 68 02                lea    0x2(%rax),%ebp
  5215a5:       e8 86 57 ee ff          callq  406d30 <qsort@plt>
  5215aa:       83 fb 01                cmp    $0x1,%ebx
  5215ad:       0f 86 91 01 00 00       jbe    521744
<dns_rdataslab_fromrdataset+0x2f4>
  5215b3:       4c 89 f2                mov    %r14,%rdx
  5215b6:       89 5c 24 2c             mov    %ebx,0x2c(%rsp)
  5215ba:       b9 01 00 00 00          mov    $0x1,%ecx
  5215bf:       eb 16                   jmp    5215d7
<dns_rdataslab_fromrdataset+0x187>
  5215c1:       83 6c 24 2c 01          subl   $0x1,0x2c(%rsp)
  5215c6:       48 c7 02 a8 c6 8b 00    movq   $0x8bc6a8,(%rdx)
  5215cd:       83 c1 01                add    $0x1,%ecx
  5215d0:       39 d9                   cmp    %ebx,%ecx
  5215d2:       74 49                   je     52161d
<dns_rdataslab_fromrdataset+0x1cd>
  5215d4:       4c 89 c2                mov    %r8,%rdx
  5215d7:       4c 8d 42 30             lea    0x30(%rdx),%r8
  5215db:       48 89 d7                mov    %rdx,%rdi
  5215de:       89 4c 24 28             mov    %ecx,0x28(%rsp)
  5215e2:       48 89 54 24 18          mov    %rdx,0x18(%rsp)
  5215e7:       4c 89 c6                mov    %r8,%rsi
  5215ea:       4c 89 44 24 20          mov    %r8,0x20(%rsp)
  5215ef:       e8 8c d3 fd ff          callq  4fe980 <dns_rdata_compare>
  5215f4:       85 c0                   test   %eax,%eax
  5215f6:       48 8b 54 24 18          mov    0x18(%rsp),%rdx
  5215fb:       4c 8b 44 24 20          mov    0x20(%rsp),%r8
  521600:       8b 4c 24 28             mov    0x28(%rsp),%ecx
  521604:       74 bb                   je     5215c1
<dns_rdataslab_fromrdataset+0x171>
  521606:       8b 42 08                mov    0x8(%rdx),%eax
  521609:       01 e8                   add    %ebp,%eax
  52160b:       8d 68 02                lea    0x2(%rax),%ebp
  52160e:       83 c0 03                add    $0x3,%eax
  521611:       66 41 83 7c 24 22 2e    cmpw   $0x2e,0x22(%r12)
  521618:       0f 44 e8                cmove  %eax,%ebp
  52161b:       eb b0                   jmp    5215cd
<dns_rdataslab_fromrdataset+0x17d>
  52161d:       89 d8                   mov    %ebx,%eax
  52161f:       83 e8 01                sub    $0x1,%eax
  521622:       48 8d 04 40             lea    (%rax,%rax,2),%rax
  521626:       48 c1 e0 04             shl    $0x4,%rax
  52162a:       41 8b 44 06 08          mov    0x8(%r14,%rax,1),%eax
  52162f:       8d 6c 05 02             lea    0x2(%rbp,%rax,1),%ebp
  521633:       41 0f b7 44 24 22       movzwl 0x22(%r12),%eax
  521639:       31 d2                   xor    %edx,%edx
  52163b:       66 83 f8 2e             cmp    $0x2e,%ax
  52163f:       0f 94 c2                sete   %dl
  521642:       01 d5                   add    %edx,%ebp
  521644:       83 7c 24 2c 01          cmpl   $0x1,0x2c(%rsp)
  521649:       76 16                   jbe    521661
<dns_rdataslab_fromrdataset+0x211>
  52164b:       0f b7 f8                movzwl %ax,%edi
  52164e:       e8 3d d7 ff ff          callq  51ed90
<dns_rdatatype_issingleton>
  521653:       85 c0                   test   %eax,%eax
  521655:       74 0a                   je     521661
<dns_rdataslab_fromrdataset+0x211>
  521657:       b8 48 00 01 00          mov    $0x10048,%eax
  52165c:       e9 de fe ff ff          jmpq   52153f
<dns_rdataslab_fromrdataset+0xef>
  521661:       89 ee                   mov    %ebp,%esi
  521663:       b9 0a 01 00 00          mov    $0x10a,%ecx
  521668:       ba eb 20 64 00          mov    $0x6420eb,%edx
  52166d:       4c 89 ff                mov    %r15,%rdi
  521670:       e8 9b c0 0a 00          callq  5cd710 <isc__mem_get>
  521675:       48 85 c0                test   %rax,%rax
  521678:       0f 84 d7 00 00 00       je     521755
<dns_rdataslab_fromrdataset+0x305>
  52167e:       48 8b 4c 24 10          mov    0x10(%rsp),%rcx
  521683:       8b 54 24 0c             mov    0xc(%rsp),%edx
  521687:       8b 74 24 2c             mov    0x2c(%rsp),%esi
  52168b:       48 89 01                mov    %rax,(%rcx)
  52168e:       89 69 08                mov    %ebp,0x8(%rcx)
  521691:       48 89 f1                mov    %rsi,%rcx
  521694:       48 01 d0                add    %rdx,%rax
  521697:       85 db                   test   %ebx,%ebx
  521699:       0f b6 d5                movzbl %ch,%edx
  52169c:       40 88 70 01             mov    %sil,0x1(%rax)
  5216a0:       88 10                   mov    %dl,(%rax)
  5216a2:       48 8d 50 02             lea    0x2(%rax),%rdx
  5216a6:       74 7c                   je     521724
<dns_rdataslab_fromrdataset+0x2d4>
  5216a8:       83 eb 01                sub    $0x1,%ebx
  5216ab:       4c 89 f5                mov    %r14,%rbp
  5216ae:       48 8d 04 5b             lea    (%rbx,%rbx,2),%rax
  5216b2:       48 c1 e0 04             shl    $0x4,%rax
  5216b6:       49 8d 5c 06 30          lea    0x30(%r14,%rax,1),%rbx
  5216bb:       eb 21                   jmp    5216de
<dns_rdataslab_fromrdataset+0x28e>
  5216bd:       0f 1f 00                nopl   (%rax)
  5216c0:       8b 55 08                mov    0x8(%rbp),%edx
  5216c3:       48 8b 75 00             mov    0x0(%rbp),%rsi
  5216c7:       48 89 cf                mov    %rcx,%rdi
  5216ca:       e8 11 54 ee ff          callq  406ae0 <memmove@plt>
  5216cf:       8b 55 08                mov    0x8(%rbp),%edx
  5216d2:       48 01 c2                add    %rax,%rdx
  5216d5:       48 83 c5 30             add    $0x30,%rbp
  5216d9:       48 39 dd                cmp    %rbx,%rbp
  5216dc:       74 46                   je     521724
<dns_rdataslab_fromrdataset+0x2d4>
  5216de:       48 81 7d 00 a8 c6 8b    cmpq   $0x8bc6a8,0x0(%rbp)
  5216e5:       00 
  5216e6:       74 ed                   je     5216d5
<dns_rdataslab_fromrdataset+0x285>
  5216e8:       31 c0                   xor    %eax,%eax
  5216ea:       66 41 83 7c 24 22 2e    cmpw   $0x2e,0x22(%r12)
  5216f1:       0f 94 c0                sete   %al
  5216f4:       03 45 08                add    0x8(%rbp),%eax
  5216f7:       3d ff ff 00 00          cmp    $0xffff,%eax
  5216fc:       77 61                   ja     52175f
<dns_rdataslab_fromrdataset+0x30f>
  5216fe:       0f b6 cc                movzbl %ah,%ecx
  521701:       88 42 01                mov    %al,0x1(%rdx)
  521704:       88 0a                   mov    %cl,(%rdx)
  521706:       66 41 83 7c 24 22 2e    cmpw   $0x2e,0x22(%r12)
  52170d:       48 8d 4a 02             lea    0x2(%rdx),%rcx
  521711:       75 ad                   jne    5216c0
<dns_rdataslab_fromrdataset+0x270>
  521713:       8b 45 10                mov    0x10(%rbp),%eax
  521716:       48 8d 4a 03             lea    0x3(%rdx),%rcx
  52171a:       d1 e8                   shr    %eax
  52171c:       83 e0 01                and    $0x1,%eax
  52171f:       08 42 02                or     %al,0x2(%rdx)
  521722:       eb 9c                   jmp    5216c0
<dns_rdataslab_fromrdataset+0x270>
  521724:       31 c0                   xor    %eax,%eax
  521726:       e9 14 fe ff ff          jmpq   52153f
<dns_rdataslab_fromrdataset+0xef>
  52172b:       b9 f7 20 64 00          mov    $0x6420f7,%ecx
  521730:       ba 02 00 00 00          mov    $0x2,%edx
  521735:       be b1 00 00 00          mov    $0xb1,%esi
  52173a:       bf eb 20 64 00          mov    $0x6420eb,%edi
  52173f:       e8 dc 92 09 00          callq  5baa20 <isc_assertion_failed>
  521744:       85 db                   test   %ebx,%ebx
  521746:       75 30                   jne    521778
<dns_rdataslab_fromrdataset+0x328>
  521748:       c7 44 24 2c 00 00 00    movl   $0x0,0x2c(%rsp)
  52174f:       00 
  521750:       e9 de fe ff ff          jmpq   521633
<dns_rdataslab_fromrdataset+0x1e3>
  521755:       b8 01 00 00 00          mov    $0x1,%eax
  52175a:       e9 e0 fd ff ff          jmpq   52153f
<dns_rdataslab_fromrdataset+0xef>
  52175f:       b9 33 6c 5f 00          mov    $0x5f6c33,%ecx
  521764:       ba 02 00 00 00          mov    $0x2,%edx
  521769:       be 34 01 00 00          mov    $0x134,%esi
  52176e:       bf eb 20 64 00          mov    $0x6420eb,%edi
  521773:       e8 a8 92 09 00          callq  5baa20 <isc_assertion_failed>
  521778:       89 5c 24 2c             mov    %ebx,0x2c(%rsp)
  52177c:       b8 01 00 00 00          mov    $0x1,%eax
  521781:       e9 99 fe ff ff          jmpq   52161f
<dns_rdataslab_fromrdataset+0x1cf>
  521786:       66 2e 0f 1f 84 00 00    nopw   %cs:0x0(%rax,%rax,1)
  52178d:       00 00 00

Reply via email to