[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