[all-commits] [llvm/llvm-project] fb2fa0: [clang][clangIR]: X86 upstream avx psrldqi/pslldqi...

Lucas Ribeiro Lima via All-commits all-commits at lists.llvm.org
Fri Jul 17 17:51:18 PDT 2026


  Branch: refs/heads/main
  Home:   https://github.com/llvm/llvm-project
  Commit: fb2fa0b0f0a8b061401f6cfa3c2fadd3fbfb3b35
      https://github.com/llvm/llvm-project/commit/fb2fa0b0f0a8b061401f6cfa3c2fadd3fbfb3b35
  Author: Lucas Ribeiro Lima <lucasribeirolima974 at gmail.com>
  Date:   2026-07-17 (Fri, 17 Jul 2026)

  Changed paths:
    M clang/lib/CIR/CodeGen/CIRGenBuiltinX86.cpp
    M clang/test/CIR/CodeGenBuiltins/X86/avx2-builtins.c
    M clang/test/CIR/CodeGenBuiltins/X86/avx512bw-builtins.c
    M clang/test/CIR/CodeGenBuiltins/X86/sse-builtins.c

  Log Message:
  -----------
  [clang][clangIR]: X86 upstream avx psrldqi/pslldqi (#208025)

This PR upstreams the implementation and corresponding test suites for
X86 byte-shift intrinsics (pslldqi / psrldqi) spanning 128, 256, and
512-bit vector variants from the incubator.

I consolidated both left and right shifts into a single code path since
the underlying lane topology is identical, extracting the
direction-specific index arithmetic into clean variables at the top. Let
me know if you prefer this unified data-driven approach or if explicit
split functions for left/right shifts would be preferred for local
readability.

All integrated tests from the incubator have been upstreamed and are
currently passing.

Minimal compile case
```cpp
#include <emmintrin.h>
#include <iostream>

struct DataLayout {
  alignas(16) int values[4];
};

#define INDEX 1

int main(int argc, char **argv) {
  DataLayout data{8, 4, 2, 1};

  std::cout << "Value before: " << data.values[INDEX] << '\n';

  __m128i reg128i =
      _mm_load_si128(reinterpret_cast<__m128i const *>(data.values));
  __m128i reg_right_shift = _mm_bsrli_si128(reg128i, 4);
  __m128i reg_left_shift = _mm_bslli_si128(reg128i, 4);

  DataLayout result_right;
  _mm_store_si128(reinterpret_cast<__m128i *>(result_right.values),
                  reg_right_shift);

  DataLayout result_left;
  _mm_store_si128(reinterpret_cast<__m128i *>(result_left.values),
                  reg_left_shift);

  std::cout << "Value after left: " << result_left.values[INDEX] << '\n';
  std::cout << "Value after right: " << result_right.values[INDEX] << '\n';

  return 0;
}
```
Addresses #167752.



To unsubscribe from these emails, change your notification settings at https://github.com/llvm/llvm-project/settings/notifications


More information about the All-commits mailing list