[LoopIdiomRecognize][AArch64] failed to recognize crc32 pattern and lower to native instruction
- Dominant language
- LLVM
- Stars
- 40.5k
- Forks
- 18.7k
- PR merge metrics
- PR metrics pending
Description
see https://developer.arm.com/community/arm-community-blogs/b/tools-software-ides-blog/posts/gcc-15-continuously-improving
godbolt: https://godbolt.org/z/9e73nfje1
```c
#include
#include
uint32_t _crc32 (uint32_t crc, uint16_t data) {
int i;
crc = crc ^ data;
for (i = 0; i < 8; i++) {
if (crc & 1)
crc = (crc >> 1) ^ 0xEDB88320;
else
crc = (crc >> 1);
}
return crc;
}
```
gcc
```asm
_crc32:
and w1, w1, 65535
mov w2, 0
eor w0, w1, w0
crc32b w0, w0, w2
ret
```
clang
```asm
_crc32:
and w8, w1, #0xffff
adrp x10, .L.crctable
add x10, x10, :lo12:.L.crctable
eor w8, w0, w8
and w9, w8, #0xff
ldr w9, [x10, w9, uxtw #2]
eor w0, w9, w8, lsr #8
ret
.L.crctable:
.word 0
.word 1996959894
.word 3993919788
.word 2567524794
.word 124634137
.word 1886057615
.word 3915621685
.word 2657392035
.word 249268274
.word 2044508324
.word 3772115230
.word 2547177864
.word 162941995
.word 2125561021
.word 3887607047
.word 2428444049
.word 498536548
.word 1789927666
.word 4089016648
.word 2227061214
.word 450548861
.word 1843258603
.word 4107580753
.word 2211677639
.word 325883990
.word 1684777152
.word 4251122042
.word 2321926636
.word 335633487
.word 1661365465
.word 4195302755
.word 2366115317
.word 997073096
.word 1281953886
.word 3579855332
.word 2724688242
.word 1006888145
.word 1258607687
.word 3524101629
.word 2768942443
.word 901097722
.word 1119000684
.word 3686517206
.word 2898065728
.word 853044451
.word 1172266101
.word 3705015759
.word 2882616665
.word 651767980
.word 1373503546
.word 3369554304
.word 3218104598
.word 565507253
.word 1454621731
.word 3485111705
.word 3099436303
.word 671266974
.word 1594198024
.word 3322730930
.word 2970347812
.word 795835527
.word 1483230225
.word 3244367275
.word 3060149565
.word 1994146192
.word 31158534
.word 2563907772
.word 4023717930
.word 1907459465
.word 112637215
.word 2680153253
.word 3904427059
.word 2013776290
.word 251722036
.word 2517215374
.word 3775830040
.word 2137656763
.word 141376813
.word 2439277719
.word 3865271297
.word 1802195444
.word 476864866
.word 2238001368
.word 4066508878
.word 1812370925
.word 453092731
.word 2181625025
.word 4111451223
.word 1706088902
.word 314042704
.word 2344532202
.word 4240017532
.word 1658658271
.word 366619977
.word 2362670323
.word 4224994405
.word 1303535960
.word 984961486
.word 2747007092
.word 3569037538
.word 1256170817
.word 1037604311
.word 2765210733
.word 3554079995
.word 1131014506
.word 879679996
.word 2909243462
.word 3663771856
.word 1141124467
.word 855842277
.word 2852801631
.word 3708648649
.word 1342533948
.word 654459306
.word 3188396048
.word 3373015174
.word 1466479909
.word 544179635
.word 3110523913
.word 3462522015
.word 1591671054
.word 702138776
.word 2966460450
.word 3352799412
.word 1504918807
.word 783551873
.word 3082640443
.word 3233442989
.word 3988292384
.word 2596254646
.word 62317068
.word 1957810842
.word 3939845945
.word 2647816111
.word 81470997
.word 1943803523
.word 3814918930
.word 2489596804
.word 225274430
.word 2053790376
.word 3826175755
.word 2466906013
.word 167816743
.word 2097651377
.word 4027552580
.word 2265490386
.word 503444072
.word 1762050814
.word 4150417245
.word 2154129355
.word 426522225
.word 1852507879
.word 4275313526
.word 2312317920
.word 282753626
.word 1742555852
.word 4189708143
.word 2394877945
.word 397917763
.word 1622183637
.word 3604390888
.word 2714866558
.word 953729732
.word 1340076626
.word 3518719985
.word 2797360999
.word 1068828381
.word 1219638859
.word 3624741850
.word 2936675148
.word 906185462
.word 1090812512
.word 3747672003
.word 2825379669
.word 829329135
.word 1181335161
.word 3412177804
.word 3160834842
.word 628085408
.word 1382605366
.word 3423369109
.word 3138078467
.word 570562233
.word 1426400815
.word 3317316542
.word 2998733608
.word 733239954
.word 1555261956
.word 3268935591
.word 3050360625
.word 752459403
.word 1541320221
.word 2607071920
.word 3965973030
.word 1969922972
.word 40735498
.word 2617837225
.word 3943577151
.word 1913087877
.word 83908371
.word 2512341634
.word 3803740692
.word 2075208622
.word 213261112
.word 2463272603
.word 3855990285
.word 2094854071
.word 198958881
.word 2262029012
.word 4057260610
.word 1759359992
.word 534414190
.word 2176718541
.word 4139329115
.word 1873836001
.word 414664567
.word 2282248934
.word 4279200368
.word 1711684554
.word 285281116
.word 2405801727
.word 4167216745
.word 1634467795
.word 376229701
.word 2685067896
.word 3608007406
.word 1308918612
.word 956543938
.word 2808555105
.word 3495958263
.word 1231636301
.word 1047427035
.word 2932959818
.word 3654703836
.word 1088359270
.word 936918000
.word 2847714899
.word 3736837829
.word 1202900863
.word 817233897
.word 3183342108
.word 3401237130
.word 1404277552
.word 615818150
.word 3134207493
.word 3453421203
.word 1423857449
.word 601450431
.word 3009837614
.word 3294710456
.word 1567103746
.word 711928724
.word 3020668471
.word 3272380065
.word 1510334235
.word 755167117
```
Contributor guide
Assessment
This issue has not been assessed yet.