Issue 134768
Summary [AVX-512] vpternlogq fails to be emitted for longer chains of bitmanipulations
Labels new issue
Assignees
Reporter Validark
    Consider: ([Godbolt link](https://zig.godbo.lt/#z:OYLghAFBqd5QCxAYwPYBMCmBRdBLAF1QCcAaPECAMzwBtMA7AQwFtMQByARg9KtQYEAysib0QXACx8BBAKoBnTAAUAHpwAMvAFYTStJg1AAvPMFJL6yAngGVG6AMKpaAVxYM9DgDJ4GmADl3ACNMYhAAZgBWUgAHVAVCWwZnNw89eMSbAV9/IJZQ8OiLTCtshiECJmICVPdPLhKy5MrqglzAkLDImIUqmrr0xr62jvzCnoBKC1RXYmR2DkxVeJqAaioGDdRUCCYQNYABADVMaxIIAA5SNdcANklpteCDk7OiYiub%2B8eb5FfTudPtdbg9JpMjoCPl9QY81gBSADsACF4RoAIJrLFrYiYAhzLZ7BEAJjuawAfhBgiSyeTkOD4RFURikQARNHojmbbaoAD6TAULD2APeFxBPyeL0houB3zBfxFQJhEohbyV4rBCJRHOxOLxBLWADdYgQwgxaKhgHsbsE/jcuIi7pNGczOYj2SyMctVgQNltgtVhdL1XLfs9FdCNWH/sHI6HwbGxfGta7dbj8cQtkwaRTqfDSRTkC6OWySxjucYdvzBUG1XHYZKI0mGwrE7KG6qoc2JSmddj0wbjabMxarUwbXa1lwncWWe6y%2BjvSRfdz%2BKgA599m3lfLw9uo08Y3Xu7v0E32xKbux9/HOzKd3Ckan%2B/rM89A2vrc8/k90FfnUyJbzp6i4rMufo8hu1ZClux4XruUpwQ%2Bh7nshNxnjeLZrNeSEHneIYNr2GJpq%2BWyVnyApCmu0Ffraaz0uh/6zm6HqcuWWxDmao4QIaZy8lwqEHjcvHILyxKCfGwl8REElYWgLAmngbBrBQKkRMS%2BH1j2T59lihrVHqCiuLQvqMqyRp8VwzG6pRRouEwNj0GsEC6bqCJRI48IeUaJpcZaACOJJRF5yJKSwXmsjc%2BbBVEyIibyEQRVFxIxXFfHEklQUhfFVlRKxbnYgc2WWRFJIZcSyKqPmxLObiRkmc6xEFWsRWxfFGV5WVVXEjVPHpU8xWiYlnXVd1vXxREA2xWFpXVQw1XOXg0yubqICuQBz5YgOb51cZBDMaWGIcNMtCcFEvCeBwWikKgnAAFpmGsCizPMmAkhEPCkAQmjHdMADWIBRBo%2BicJIF0/TdnC8AoIDA99V3HaQcCwEg8mxHQYTkJQaMY%2BExgEMQrgMH9fB0MOMNUhDwR%2BNUACenCfdTzDELTADywTaO8DO8PJbCCKz5r0wjpBYMErjAI4Yi0DD3C8FgLCGMA4jC/guLWHgvEy9dyxnK4prc%2BQgilBDtB4MExB084WAQwTSkG7xxDBAkmCspgCtGKbRg/dMVAGMACjHHgmAAO6s7EjAG/wggiGI7BSDIgiKCo6jC7oxL6IrICmOYpvBDDkDTKgikCDLAC0rNrAASqUmACpgABiAq%2BqX/TAHiayqJcdy8g8pee64qhrKXLDILErhmcYDAO%2BdN0O8QeBYPnEDTJY7zJPYDBOC49ReJvYxdOEjSZEkAiDA0cQJCfDD7wU3TDDX6sCK0Azb0MTRr0//TtH4nS34fFhfzPnoEYNQb4TC4CvF6CwJAnTOuDYWt0OBrGzmsAmRM/rOVwIQEg70IG8HhlocEpAEC1ywOEZepAAZAxBhwMGpAWASA0MDS611EHQ1hl9b2sCODEngawqGnCEZEIdokOwkggA))

```zig
export fn foo(a: @Vector(8, u64), b: @Vector(8, u64), c: @Vector(8, u64)) @Vector(8, u64) {
    return (a & ~(b & ~c));
}

export fn bar(a: @Vector(8, u64), b: @Vector(8, u64), c: @Vector(8, u64)) @Vector(8, u64) {
    return a & ~b & ~c;
}

export fn foobar(a: @Vector(8, u64), b: @Vector(8, u64), c: @Vector(8, u64), d: @Vector(8, u64), e: @Vector(8, u64)) @Vector(8, u64) {
 return bar(foo(a, b, c), d, e);
}
```

LLVM IR ([Godbolt link](https://llvm.godbolt.org/#z:OYLghAFBqd5QCxAYwPYBMCmBRdBLAF1QCcAaPECAMzwBtMA7AQwFtMQByARg9KtQYEAysib0QXACx8BBAKoBnTAAUAHpwAMvAFYTStJg1C1aANxakl9ZATwDKjdAGFUtAK4sGexwBk8DTAA5DwAjTGIQAGZpAAdUBUI7Bhd3Tz04hNsBPwDgljCI6MtMayyGIQImYgIUjy8uYtKkiqqCHKDQ8KjpBUrq2rSG3tb2vILugEpLVDdiZHYOLBoAgGp0BVQAfVpUUVoVgFJIpwAOFdUVvAA2SSPsFYABflQII9Pzy5u7w4AmAFYNKRDsczhdrrdIvcDv8GsD3mCvpDfn8fhMVjs9ps3AxmGx0JsmOh0MRDgB2ABCBw0AEFsIJiABPEBU6krZEAOgYqAIwIAIucSHDQZ8IVCYUC3uCVgBaWFS2VA%2BVym4y5WSVWKlUKkUanWyu4stnQv6RPkrQVvYXg77GznciX/H6G5Hqo78wzoIUfa1I42RB0A53ETA8y3exFiv63GkHUm8lkspb%2BTBrDbbXZiL0I0WPEJVV4g8M542ArMim3iss%2ByOo9EZ2hYnGsTD4wnEsmUml0giM5k0o3/U1u80ksPZisogNcZ3G12RfmqC2F8e%2BwcS45KzXq7WbvVq3W7w9a6eQmf/P5mj1ViMugMaIMh6/F88JuMJmlJ1brLYYzNj8tIk8qCoHmxAFvCAGRqW/7VsisIwTexo/OuEGwX6KFWoh/ySGiv4NtiuItgSRKjhSLLdr2Z5/HaBDsngZqLqOy6QXBKFHtu%2B47seW4Htxe48fqp79siF7DkuqFYdRXK0XgAZOsJxpXJeDCeghz5/H8d5UaSZriZh6nSMikRUWcw6MU%2BE6kmxfHsbxHECZxjkOQaCn/AAnMpqnMWh/xXAGJwPqG3mSW5r7xjGH6YMsKbfumewWYBzygQSCgsOB%2BkTtBwXqfB2UTshCWRv6hUurh9aNoRrYkR25H0kyVGifOKyVHQKx7PsanfEwqUrAkWBRVQmA2L8PwrKYMQEOEDA7MAACOKwACSxuSxlxkCS0Uk6a2Lct07bRt5L3m%2BPwFdCTrzqopCXZdDCkICAB%2By34MQVAGMAsa8qQj0UlQMQKMQH1fctr1MMACgfWd6VFhOuUSepBV4JEo1cKSfklSWaLQkjVFKcOLX7O1JXdSwvV4P1VCDcNZ1jRNU0zfNB2rZ9O2bYDLPkntzMHUd8YnQ6528tdV2kLdD1PXgL1vYD33kr9/3S8Db3g8dPxQyuRUYdDq5RoqSMrFwaOddrfyYz82PCcGQVwxOVxhSyHBTLQnB/LwXgcFopCoJwPg%2BAAagAsisACSABKvUzHMKZYzwpAEJoDtTAA1iAkhueyKMnBoJw/FwbkZ1nPzSE7HCSK78ee5wvAKCAgJx%2B7DukHAsBIGgLAxHQ4TkJQrft/QEQS8gBhGD22KJ3wdCTcQ1cQCE5chP4VRMtwvDz8wjIAPIhNoQ11zHrdsII6/TUvHtYCEbjAE4Yi0NXy%2BkFgLCGMA4j1/fEs73gpiYLfHuYKoQ1uEmpwGO/hJrFw9rQPAIRiCLxcFgcuPY8AsGAbwL%2BxAQjxEwLyTAj8jCQKMPHKYIMwa%2BzwJgAA7uvGIjAUEyEECIMQ7ApB0PkEoNQ5ddANCHsYMwFhIEhGrpAKYqAJpJFvtKdepppSPzmAgN0AAvBgaCXaezQcQMm394BTCsB/ewEBHADHqKQXwyYxhdAaBkRIAhDHpHiFYhgoxOgRCGCUXR5Q%2Bg1FcHUPQOibDNA8Y4/I5jLAeJsUMAJpinESG0RHeY0T9DOzLq/L2HA2rcJWBAEeDBE5oggLgQgFozZcAmLwOuWgJhJxAACdk2dc751qXnE4CSS68GQVwDQgI3YexSVXGusdCGO04D8JJ3TK79PrhU0gaCEj2EkEAA%3D)):

```llvm
define dso_local <8 x i64> @foo(<8 x i64> %0, <8 x i64> %1, <8 x i64> %2) local_unnamed_addr {
Entry:
  %.not = xor <8 x i64> %1, <i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1>
  %3 = or <8 x i64> %.not, %2
  %4 = and <8 x i64> %3, %0
  ret <8 x i64> %4
}

define dso_local <8 x i64> @bar(<8 x i64> %0, <8 x i64> %1, <8 x i64> %2) local_unnamed_addr {
Entry:
  %3 = or <8 x i64> %2, %1
  %4 = xor <8 x i64> %3, <i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1>
  %5 = and <8 x i64> %4, %0
  ret <8 x i64> %5
}

define dso_local <8 x i64> @foobar(<8 x i64> %0, <8 x i64> %1, <8 x i64> %2, <8 x i64> %3, <8 x i64> %4) local_unnamed_addr {
Entry:
  %.not.i = xor <8 x i64> %1, <i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1>
  %5 = or <8 x i64> %.not.i, %2
  %6 = and <8 x i64> %5, %0
  %7 = or <8 x i64> %4, %3
  %8 = xor <8 x i64> %7, <i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1, i64 -1>
  %9 = and <8 x i64> %6, %8
  ret <8 x i64> %9
}
```

Emit (from LLVM IR godbolt):

```asm
foo:
        vpternlogq      zmm0, zmm2, zmm1, 208
 ret

bar:
        vpternlogq      zmm0, zmm2, zmm1, 16
 ret

foobar:
        vpandnq zmm1, zmm2, zmm1
        vporq   zmm3, zmm4, zmm3
        vpternlogq      zmm0, zmm1, zmm3, 16
 ret
```

`foobar` should be:

```asm
foobar:
        vpternlogq zmm0, zmm1, zmm2, 176
        vpternlogq      zmm0, zmm3, zmm4, 16
 ret
```
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs

Reply via email to