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

--- Comment #3 from Wojciech Mula <wojciech_mula at poczta dot onet.pl> ---
It's worth noting, that Clang first synthesizes a 32-bit word from individual
bytes, and then use a single comparison.

```
ext_is_gzip(std::basic_string_view<char, std::char_traits<char>>):
        li      a2, 4
        bne     a0, a2, .LBB0_2
        lbu     a0, 1(a1)
        lbu     a2, 0(a1)
        lbu     a3, 2(a1)
        lb      a1, 3(a1)
        slli    a0, a0, 8
        or      a0, a0, a2
        slli    a3, a3, 16
        slli    a1, a1, 24
        or      a1, a1, a3
        or      a0, a0, a1
        lui     a1, 460440
        addiw   a1, a1, -1433
        xor     a0, a0, a1
        seqz    a0, a0
        ret
.LBB0_2:
        li      a0, 0
        ret
```

Reply via email to