https://gcc.gnu.org/bugzilla/show_bug.cgi?id=49203
Andrew Pinski <pinskia at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Resolution|--- |FIXED Status|NEW |RESOLVED Known to work| |7.0 Target Milestone|--- |7.0 Known to fail| |4.8.5 --- Comment #3 from Andrew Pinski <pinskia at gcc dot gnu.org> --- Fixed in at least in GCC 7.0: .L2: leaq 16(%r8), %rsi movq %r8, %rdx xorl %eax, %eax .p2align 4,,10 .p2align 3 .L3: movzbl (%rdx), %ecx sall $2, %eax addq $1, %rdx andl $3, %ecx orl %ecx, %eax cmpq %rsi, %rdx jne .L3 movl %eax, %edx addq $4, %r8 movb %ah, 2(%rdi) shrl $24, %edx movb %al, 3(%rdi) addq $4, %rdi movb %dl, -4(%rdi) movl %eax, %edx shrl $16, %edx movb %dl, -3(%rdi) cmpq %r8, %r9 jne .L2 <bb 3> [94.12%]: # tmp_37 = PHI <tmp_23(3), 0(5)> # ivtmp.17_17 = PHI <ivtmp.17_15(3), ivtmp.28_79(5)> _1 = tmp_37 << 2; _87 = (void *) ivtmp.17_17; _3 = MEM[base: _87, offset: 0B]; _20 = _3 & 3; _4 = (unsigned int) _20; tmp_23 = _1 | _4; ivtmp.17_15 = ivtmp.17_17 + 1; if (ivtmp.17_15 != _83) goto <bb 3>; [93.75%] else goto <bb 4>; [6.25%] <bb 4> [5.88%]: _5 = tmp_23 >> 24; _6 = (unsigned char) _5; _76 = (void *) ivtmp.27_82; MEM[base: _76, offset: 0B] = _6; _7 = tmp_23 >> 16; _9 = (unsigned char) _7; MEM[base: _76, offset: 1B] = _9; _10 = tmp_23 >> 8; _12 = (unsigned char) _10; MEM[base: _76, offset: 2B] = _12; _14 = (unsigned char) tmp_23; MEM[base: _76, offset: 3B] = _14; ivtmp.27_81 = ivtmp.27_82 + 4; ivtmp.28_78 = ivtmp.28_79 + 4; if (_71 != ivtmp.28_78) goto <bb 5>; [87.51%] else goto <bb 6>; [12.49%] <bb 5> [5.88%]: # ivtmp.27_82 = PHI <ivtmp.27_81(4), ivtmp.27_80(2)> # ivtmp.28_79 = PHI <ivtmp.28_78(4), ivtmp.28_77(2)> _83 = ivtmp.28_79 + 16; goto <bb 3>; [100.00%]