[AVX-512] Consider folding vector compare results `a | b | c | d` into `~(!a & !b & !c & !d)`
- Dominant language
- LLVM
- Stars
- 40.5k
- Forks
- 18.7k
- PR merge metrics
- PR metrics pending
Description
[Zig Godbolt](https://zig.godbo.lt/#z:OYLghAFBqd5QCxAYwPYBMCmBRdBLAF1QCcAaPECAMzwBtMA7AQwFtMQByARg9KtQYEAysib0QXAGx8BBAKoBnTAAUAHpwAMvAFYTStJg1AAvPMFJL6yAngGVG6AMKpaAVxYM9DgDJ4GmADl3ACNMYhAAZgAmUgAHVAVCWwZnNw89eMSbAV9/IJZQ8OiLTCtshiECJmICVPdPLhKy5MrqglzAkLDImIUqmrr0xr62jvzCnoBKC1RXYmR2DjQGPoBqPvRVgFIIgBFVgAE8FniaiC2oqI2LqMmdgCEtjQBBJ%2BfMVVOCVaoGH9RUOcXqsQasmCBDgA1TDWEgQSQAFlIq1cAA5pm9QatghCDtDYcR4UiUejSJjQchcfiiITEci0RjgaD0FSYTSifTSeSQewoWy4XSSXcXpMUYjtgB2R5MkEAN2qq3CfIJHOxANoop2%2BwOCliBgIEAIxFcmDuEWlzyxxG2UUkWrBqzAYHtwQe3MVNrtewdTvtyDdMo9Fy9%2ByYjud3vQActoOtwftYd93sw0atmAIcz%2BAD8DkwFBBXIKDsFCI48wbiJMzRathLdm83h8vj8/sFqkCYyDwcr2YKGWTAziewLif33ZTh7TR1zAyzJ6qx4HeXj%2BVPOcLnqLCwjJRasfLrUqVyrBcF1ZrvTq9UwDVQxEpq%2B64xLHAntnsXanY5LX96w1q/S/EFn1/UN33rSMgKDF83wA5MoOIdNM0OPMCyLEtanLCBK0fF5a3rF4OGmWhOAAVl4TwOC0UhUE4AAtMx1lmeZMBtCIeFIAhNCI6YAGsQARUiADoEVRDQImiKJSMuLgNAlUj9E4BFeBYCQNA0UhKOo2iOF4BQQA0riqKI0g4FgJA0BOOgwnIShLNiazwmMI1XAYXi%2BDoAgwn0iAcWM0gS2YYgAE9OA4wLqmCgB5YJtDZMLeEsthBCihhaFC/ysGCVxgDLWhaH07heCwFhDGAcRMrwRDrDwWVMEK6iPhhVwvIS8hBFKbj9DwYJiEi5wsC6o1jjauriDPJRdkwUqjFoPxQGM6YqAMYAFEhPBMAAdyi2JGDa/hBBEMR2CiDSDvkJQ1C63QYgMIwQFMcw5uCfTIGmVBYnKQqAFootWAAlUpMDzTAADFy1Wb7%2BmAdNVlUVFJAAfURb65oYVxVEhlhkFiVwtWMBgxtIyH%2BBYQhvqoPq2G%2B%2BI/C84heFQMbiDwLBXogaZLDZZJ7AYJwXHqLw%2BbGLpwkaTIkgEQYGjiBJJYYEWCm6YYgZqgRWgGAWhiabn1f6do/E6JWxYsfXpb0EYakViYuE55iFgkYiyIorqdNWR7VhctzVggXBCBINjbd4IytCrUgEGBrBwg50h%2BNIhEhNIrgAE5JEkCUJQRDPUWTqTFI4ZTSFU2SNK0xnOD0gzOO4sOSI4KIVLU0vXYr6vFumMbEjsBEgA)
[LLVM Godbolt](https://llvm.godbo.lt/#z:OYLghAFBqd5QCxAYwPYBMCmBRdBLAF1QCcAaPECAMzwBtMA7AQwFtMQByARg9KtQYEAysib0QXACx8BBAKoBnTAAUAHpwAMvAFYTStJg1C1aANxakl9ZATwDKjdAGFUtAK4sGexwBk8DTAA5DwAjTGIQACYAdlIAB1QFQjsGF3dPPQSk2wE/AOCWMIiYy0xrHIYhAiZiAjSPLy5S8pSqmoI8oNDwqNiFatr6jKb%2B9s6Cot6ASktUN2Jkdg4sGgCAanQFVAB9WlRRWjW8ADZJNYABflQIAFIAZidTtdUjgA577DWbyIBWDVIvg8ni88O87p9vj8moDHmcQWCIb9IgD7rDnm8Pl9fncUUC4RjwVifpIpms9gdtm4GMw2Ohtkx0OhiF9ogAhG4aACC2EExAAniAOZy1kSfoCACJHZAsOJrdao4EExF/FG/LhCkWQ44SqUyuWYGGK0GYyH/ImRDVE6I6wzoQ34vDqwmQn6qn7HS2Q146vDS2XyvHo43O35myF3T2/ACcNoYdoVDqdytiRPeXM1ao0Pr9%2BvtQYRRLDv0kkahXFj8cDIKTRKjbq4GlLXEiOpChFE/Tz1ZNavLRCOpybdx1qhIA7OkObAIAtOr02tiJgCOOiVwI1ybtFxUKhSt/AbNjtyWIV%2BcQjVblWlYXcWj4T2obejQXIciu9fw0%2BHS/i6Tj7RKWpVhMDpBkmRZdkuR5Ah%2BUFecXWzPVMAAR3fYNlSLKFS21e5JV9JDUITfMH0wi14N%2Ba1cLWMciO7EMfldIkPXIn5vSo/DZRQtCfxVIl12FWsdRoq9HQfFMvSbLN2JzLjaI/UM3RLFiuHLKjhLvI4a0hOtV0bZSWyotsCA7Zc5NE%2BiVLWfsTiUgTF2XGzVzIzlN23LkOBmWhOB%2BXgvA4LRSFQTgfB8AA1ABZNYAEkACU1i2eZFixO4eFIAhNA8mYAGsQEkaIADoow0KNomJPKipK4l9E4SRfIywLOF4BQQH%2BdL/I80g4FgJA0BlOhwnISherifqIhMGxiCpLK%2BDoAhwmaiAQnqttmFg7heBWmo%2BQAeRCbRMBsThUt6thBG2hhaAFdrSCwEI3GAJwxFoZr1puzAWEMYBxGu/BFxsPBTEwF6AswVQDrcOajt4fw5q867aDwEJiC2lwsHqmC8BYKHSEB4gQkSTBxXez6EaMDKZioAxgAUUK8EwAB3ba4kYbH%2BEEEQxHYKQZEERQVHUa7dCaAwyZMcx9ER5rIBmVA4gqF7p224dpxYZA4jcXCAC8GFxnzAtx4g8CwKWIBmKwDoqBw4yGRpSF8fcJh6JosmSAQbcyRJXYYcZugiEYygt1oBjqVwGj0c3/oENpah9woncsYP3ZGYPY8mLgzbmBYuc87y6uuoKODJWhkDWCAYKm0kIFwQgaMiFKpl4NqtCmbKQB%2BSJ8uKjRIkkBjIi7nvjmqjhatILGG3%2BPyAoLpqWrS8mc44SI8%2Bnxr5/alucfmlJcqAA)
```llvm
define dso_local i64 @bar(<64 x i8> %0, <64 x i8> %1, <64 x i8> %2, <64 x i8> %3, <64 x i8> %4) local_unnamed_addr {
Entry:
%5 = icmp eq <64 x i8> %0, %1
%6 = icmp eq <64 x i8> %0, %2
%7 = or <64 x i1> %5, %6
%8 = icmp eq <64 x i8> %0, %3
%9 = or <64 x i1> %7, %8
%10 = icmp eq <64 x i8> %0, %4
%11 = or <64 x i1> %9, %10
%12 = bitcast <64 x i1> %11 to i64
ret i64 %12
}
```
Compiles to:
```asm
vpcmpeqb k0, zmm0, zmm1
vpcmpeqb k1, zmm0, zmm2
vpcmpeqb k2, zmm0, zmm4
korq k0, k0, k1
vpcmpeqb k1, zmm0, zmm3
korq k1, k1, k2
korq k0, k0, k1
kmovq rax, k0
```
I think it could be:
```asm
vpcmpneqb k1, zmm0, zmm1
vpcmpneqb k1 {k1}, zmm0, zmm2
vpcmpneqb k1 {k1}, zmm0, zmm3
vpcmpneqb k0 {k1}, zmm0, zmm4
knotq k0, k0
kmovq rax, k0
```
Contributor guide
Assessment
This issue has not been assessed yet.