From 685a6abc822a493c3597ca229d383aaacf4d3384 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 23 Feb 2026 15:27:11 +0000 Subject: [PATCH 1/4] Initial plan From 1ac9042dc9ad1d4a7f8574abf2bacd579a00f764 Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 23 Feb 2026 15:39:01 +0000 Subject: [PATCH 2/4] Propagate const T* to xss_argsort, xss_argselect and all related functions Co-authored-by: r-devulap <44766858+r-devulap@users.noreply.github.com> --- _codeql_detected_source_root | 1 + src/avx2-32bit-half.hpp | 6 ++-- src/avx2-64bit-qsort.hpp | 6 ++-- src/avx512-64bit-common.h | 12 ++++---- src/xss-common-argsort.h | 49 +++++++++++++------------------- src/xss-common-qsort.h | 2 +- src/xss-network-keyvaluesort.hpp | 4 +-- 7 files changed, 35 insertions(+), 45 deletions(-) create mode 120000 _codeql_detected_source_root diff --git a/_codeql_detected_source_root b/_codeql_detected_source_root new file mode 120000 index 00000000..945c9b46 --- /dev/null +++ b/_codeql_detected_source_root @@ -0,0 +1 @@ +. \ No newline at end of file diff --git a/src/avx2-32bit-half.hpp b/src/avx2-32bit-half.hpp index 36469796..9a72f0d6 100644 --- a/src/avx2-32bit-half.hpp +++ b/src/avx2-32bit-half.hpp @@ -84,7 +84,7 @@ struct avx2_half_vector { return _mm_mask_i32gather_epi32( src, (const int *)base, index, mask, scale); } - static reg_t i64gather(type_t *arr, arrsize_t *ind) + static reg_t i64gather(const type_t *arr, arrsize_t *ind) { return set(arr[ind[3]], arr[ind[2]], arr[ind[1]], arr[ind[0]]); } @@ -237,7 +237,7 @@ struct avx2_half_vector { return _mm_mask_i32gather_epi32( src, (const int *)base, index, mask, scale); } - static reg_t i64gather(type_t *arr, arrsize_t *ind) + static reg_t i64gather(const type_t *arr, arrsize_t *ind) { return set(arr[ind[3]], arr[ind[2]], arr[ind[1]], arr[ind[0]]); } @@ -421,7 +421,7 @@ struct avx2_half_vector { return _mm_mask_i32gather_ps( src, (const float *)base, index, _mm_castsi128_ps(mask), scale); } - static reg_t i64gather(type_t *arr, arrsize_t *ind) + static reg_t i64gather(const type_t *arr, arrsize_t *ind) { return set(arr[ind[3]], arr[ind[2]], arr[ind[1]], arr[ind[0]]); } diff --git a/src/avx2-64bit-qsort.hpp b/src/avx2-64bit-qsort.hpp index 2af97d65..78bea589 100644 --- a/src/avx2-64bit-qsort.hpp +++ b/src/avx2-64bit-qsort.hpp @@ -99,7 +99,7 @@ struct avx2_vector { return _mm256_mask_i32gather_epi64( src, (const long long int *)base, index, mask, scale); } - static reg_t i64gather(type_t *arr, arrsize_t *ind) + static reg_t i64gather(const type_t *arr, arrsize_t *ind) { return set(arr[ind[3]], arr[ind[2]], arr[ind[1]], arr[ind[0]]); } @@ -269,7 +269,7 @@ struct avx2_vector { return _mm256_mask_i32gather_epi64( src, (const long long int *)base, index, mask, scale); } - static reg_t i64gather(type_t *arr, arrsize_t *ind) + static reg_t i64gather(const type_t *arr, arrsize_t *ind) { return set(arr[ind[3]], arr[ind[2]], arr[ind[1]], arr[ind[0]]); } @@ -499,7 +499,7 @@ struct avx2_vector { scale); ; } - static reg_t i64gather(type_t *arr, arrsize_t *ind) + static reg_t i64gather(const type_t *arr, arrsize_t *ind) { return set(arr[ind[3]], arr[ind[2]], arr[ind[1]], arr[ind[0]]); } diff --git a/src/avx512-64bit-common.h b/src/avx512-64bit-common.h index f27a31fe..71599e88 100644 --- a/src/avx512-64bit-common.h +++ b/src/avx512-64bit-common.h @@ -99,7 +99,7 @@ struct ymm_vector { { return _mm256_mmask_i32gather_ps(src, mask, index, base, scale); } - static reg_t i64gather(type_t *arr, arrsize_t *ind) + static reg_t i64gather(const type_t *arr, arrsize_t *ind) { return set(arr[ind[7]], arr[ind[6]], @@ -293,7 +293,7 @@ struct ymm_vector { { return _mm256_mmask_i32gather_epi32(src, mask, index, base, scale); } - static reg_t i64gather(type_t *arr, arrsize_t *ind) + static reg_t i64gather(const type_t *arr, arrsize_t *ind) { return set(arr[ind[7]], arr[ind[6]], @@ -481,7 +481,7 @@ struct ymm_vector { { return _mm256_mmask_i32gather_epi32(src, mask, index, base, scale); } - static reg_t i64gather(type_t *arr, arrsize_t *ind) + static reg_t i64gather(const type_t *arr, arrsize_t *ind) { return set(arr[ind[7]], arr[ind[6]], @@ -680,7 +680,7 @@ struct zmm_vector { { return _mm512_mask_i32gather_epi64(src, mask, index, base, scale); } - static reg_t i64gather(type_t *arr, arrsize_t *ind) + static reg_t i64gather(const type_t *arr, arrsize_t *ind) { return set(arr[ind[7]], arr[ind[6]], @@ -843,7 +843,7 @@ struct zmm_vector { { return _mm512_mask_i32gather_epi64(src, mask, index, base, scale); } - static reg_t i64gather(type_t *arr, arrsize_t *ind) + static reg_t i64gather(const type_t *arr, arrsize_t *ind) { return set(arr[ind[7]], arr[ind[6]], @@ -1062,7 +1062,7 @@ struct zmm_vector { { return _mm512_mask_i32gather_pd(src, mask, index, base, scale); } - static reg_t i64gather(type_t *arr, arrsize_t *ind) + static reg_t i64gather(const type_t *arr, arrsize_t *ind) { return set(arr[ind[7]], arr[ind[6]], diff --git a/src/xss-common-argsort.h b/src/xss-common-argsort.h index 3e800831..97786957 100644 --- a/src/xss-common-argsort.h +++ b/src/xss-common-argsort.h @@ -12,7 +12,7 @@ template X86_SIMD_SORT_INLINE void std_argselect_withnan( - T *arr, arrsize_t *arg, arrsize_t k, arrsize_t left, arrsize_t right) + const T *arr, arrsize_t *arg, arrsize_t k, arrsize_t left, arrsize_t right) { std::nth_element(arg + left, arg + k, @@ -33,7 +33,7 @@ X86_SIMD_SORT_INLINE void std_argselect_withnan( /* argsort using std::sort */ template X86_SIMD_SORT_INLINE void -std_argsort_withnan(T *arr, arrsize_t *arg, arrsize_t left, arrsize_t right) +std_argsort_withnan(const T *arr, arrsize_t *arg, arrsize_t left, arrsize_t right) { std::sort(arg + left, arg + right, @@ -53,7 +53,7 @@ std_argsort_withnan(T *arr, arrsize_t *arg, arrsize_t left, arrsize_t right) /* argsort using std::sort */ template X86_SIMD_SORT_INLINE void -std_argsort(T *arr, arrsize_t *arg, arrsize_t left, arrsize_t right) +std_argsort(const T *arr, arrsize_t *arg, arrsize_t left, arrsize_t right) { std::sort(arg + left, arg + right, @@ -172,7 +172,7 @@ X86_SIMD_SORT_INLINE int32_t partition_vec(type_t *arg, * last element that is less than equal to the pivot. */ template -X86_SIMD_SORT_INLINE arrsize_t argpartition(type_t *arr, +X86_SIMD_SORT_INLINE arrsize_t argpartition(const type_t *arr, arrsize_t *arg, arrsize_t left, arrsize_t right, @@ -291,7 +291,7 @@ template -X86_SIMD_SORT_INLINE arrsize_t argpartition_unrolled(type_t *arr, +X86_SIMD_SORT_INLINE arrsize_t argpartition_unrolled(const type_t *arr, arrsize_t *arg, arrsize_t left, arrsize_t right, @@ -422,7 +422,7 @@ X86_SIMD_SORT_INLINE arrsize_t argpartition_unrolled(type_t *arr, } template -X86_SIMD_SORT_INLINE type_t get_pivot_64bit(type_t *arr, +X86_SIMD_SORT_INLINE type_t get_pivot_64bit(const type_t *arr, arrsize_t *arg, const arrsize_t left, const arrsize_t right) @@ -468,7 +468,7 @@ X86_SIMD_SORT_INLINE type_t get_pivot_64bit(type_t *arr, } template -X86_SIMD_SORT_INLINE void argsort_(type_t *arr, +X86_SIMD_SORT_INLINE void argsort_(const type_t *arr, arrsize_t *arg, arrsize_t left, arrsize_t right, @@ -549,7 +549,7 @@ X86_SIMD_SORT_INLINE void argsort_(type_t *arr, } template -X86_SIMD_SORT_INLINE void argselect_(type_t *arr, +X86_SIMD_SORT_INLINE void argselect_(const type_t *arr, arrsize_t *arg, arrsize_t pos, arrsize_t left, @@ -590,7 +590,7 @@ template typename half_vector> -X86_SIMD_SORT_INLINE void xss_argsort(T *arr, +X86_SIMD_SORT_INLINE void xss_argsort(const T *arr, arrsize_t *arg, arrsize_t arrsize, bool hasnan = false, @@ -669,29 +669,24 @@ X86_SIMD_SORT_INLINE void xss_argsort(T *arr, } template -X86_SIMD_SORT_INLINE void avx512_argsort(T *arr, +X86_SIMD_SORT_INLINE void avx512_argsort(const T *arr, arrsize_t *arg, arrsize_t arrsize, bool hasnan = false, bool descending = false) { - // Safe: argsort never mutates arr; const is dropped only for SIMD type instantiation - using base_t = std::remove_const_t; - xss_argsort( - const_cast(arr), arg, arrsize, hasnan, descending); + xss_argsort(arr, arg, arrsize, hasnan, descending); } template -X86_SIMD_SORT_INLINE void avx2_argsort(T *arr, +X86_SIMD_SORT_INLINE void avx2_argsort(const T *arr, arrsize_t *arg, arrsize_t arrsize, bool hasnan = false, bool descending = false) { - // Safe: argsort never mutates arr; const is dropped only for SIMD type instantiation - using base_t = std::remove_const_t; - xss_argsort( - const_cast(arr), arg, arrsize, hasnan, descending); + xss_argsort( + arr, arg, arrsize, hasnan, descending); } /* argselect methods for 32-bit and 64-bit dtypes */ @@ -700,7 +695,7 @@ template typename half_vector> -X86_SIMD_SORT_INLINE void xss_argselect(T *arr, +X86_SIMD_SORT_INLINE void xss_argselect(const T *arr, arrsize_t *arg, arrsize_t k, arrsize_t arrsize, @@ -735,29 +730,23 @@ X86_SIMD_SORT_INLINE void xss_argselect(T *arr, } template -X86_SIMD_SORT_INLINE void avx512_argselect(T *arr, +X86_SIMD_SORT_INLINE void avx512_argselect(const T *arr, arrsize_t *arg, arrsize_t k, arrsize_t arrsize, bool hasnan = false) { - // Safe: argselect never mutates arr; const is dropped only for SIMD type instantiation - using base_t = std::remove_const_t; - xss_argselect( - const_cast(arr), arg, k, arrsize, hasnan); + xss_argselect(arr, arg, k, arrsize, hasnan); } template -X86_SIMD_SORT_INLINE void avx2_argselect(T *arr, +X86_SIMD_SORT_INLINE void avx2_argselect(const T *arr, arrsize_t *arg, arrsize_t k, arrsize_t arrsize, bool hasnan = false) { - // Safe: argselect never mutates arr; const is dropped only for SIMD type instantiation - using base_t = std::remove_const_t; - xss_argselect( - const_cast(arr), arg, k, arrsize, hasnan); + xss_argselect(arr, arg, k, arrsize, hasnan); } #endif // XSS_COMMON_ARGSORT diff --git a/src/xss-common-qsort.h b/src/xss-common-qsort.h index 73b947ab..2bf7ca61 100644 --- a/src/xss-common-qsort.h +++ b/src/xss-common-qsort.h @@ -79,7 +79,7 @@ X86_SIMD_SORT_INLINE arrsize_t replace_nan_with_inf(T *arr, arrsize_t size) } template -X86_SIMD_SORT_INLINE bool array_has_nan(type_t *arr, arrsize_t size) +X86_SIMD_SORT_INLINE bool array_has_nan(const type_t *arr, arrsize_t size) { using opmask_t = typename vtype::opmask_t; using reg_t = typename vtype::reg_t; diff --git a/src/xss-network-keyvaluesort.hpp b/src/xss-network-keyvaluesort.hpp index 771d7a36..1e5cd5d9 100644 --- a/src/xss-network-keyvaluesort.hpp +++ b/src/xss-network-keyvaluesort.hpp @@ -208,7 +208,7 @@ bitonic_fullmerge_n_vec(typename keyType::reg_t *keys, template X86_SIMD_SORT_INLINE void -argsort_n_vec(typename keyType::type_t *keys, arrsize_t *indices, int N) +argsort_n_vec(const typename keyType::type_t *keys, arrsize_t *indices, int N) { using kreg_t = typename keyType::reg_t; using ireg_t = typename indexType::reg_t; @@ -354,7 +354,7 @@ X86_SIMD_SORT_INLINE void kvsort_n_vec(typename keyType::type_t *keys, template X86_SIMD_SORT_INLINE void -argsort_n(typename keyType::type_t *keys, arrsize_t *indices, int N) +argsort_n(const typename keyType::type_t *keys, arrsize_t *indices, int N) { static_assert(keyType::numlanes == indexType::numlanes, "invalid pairing of value/index types"); From 37ec892b4335646eb5806c1286a1205a4e94095a Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Tue, 24 Feb 2026 04:47:55 +0000 Subject: [PATCH 3/4] Fix clang-format violations in xss-common-argsort.h Co-authored-by: r-devulap <44766858+r-devulap@users.noreply.github.com> --- src/xss-common-argsort.h | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/src/xss-common-argsort.h b/src/xss-common-argsort.h index 97786957..1bec821b 100644 --- a/src/xss-common-argsort.h +++ b/src/xss-common-argsort.h @@ -11,8 +11,11 @@ #include template -X86_SIMD_SORT_INLINE void std_argselect_withnan( - const T *arr, arrsize_t *arg, arrsize_t k, arrsize_t left, arrsize_t right) +X86_SIMD_SORT_INLINE void std_argselect_withnan(const T *arr, + arrsize_t *arg, + arrsize_t k, + arrsize_t left, + arrsize_t right) { std::nth_element(arg + left, arg + k, @@ -32,8 +35,10 @@ X86_SIMD_SORT_INLINE void std_argselect_withnan( /* argsort using std::sort */ template -X86_SIMD_SORT_INLINE void -std_argsort_withnan(const T *arr, arrsize_t *arg, arrsize_t left, arrsize_t right) +X86_SIMD_SORT_INLINE void std_argsort_withnan(const T *arr, + arrsize_t *arg, + arrsize_t left, + arrsize_t right) { std::sort(arg + left, arg + right, @@ -675,7 +680,8 @@ X86_SIMD_SORT_INLINE void avx512_argsort(const T *arr, bool hasnan = false, bool descending = false) { - xss_argsort(arr, arg, arrsize, hasnan, descending); + xss_argsort( + arr, arg, arrsize, hasnan, descending); } template @@ -746,7 +752,8 @@ X86_SIMD_SORT_INLINE void avx2_argselect(const T *arr, arrsize_t arrsize, bool hasnan = false) { - xss_argselect(arr, arg, k, arrsize, hasnan); + xss_argselect( + arr, arg, k, arrsize, hasnan); } #endif // XSS_COMMON_ARGSORT From e0f2519496057fee9d143caacefa4ad1ef682323 Mon Sep 17 00:00:00 2001 From: Raghuveer Devulapalli Date: Tue, 24 Feb 2026 14:59:52 +0530 Subject: [PATCH 4/4] Delete _codeql_detected_source_root --- _codeql_detected_source_root | 1 - 1 file changed, 1 deletion(-) delete mode 120000 _codeql_detected_source_root diff --git a/_codeql_detected_source_root b/_codeql_detected_source_root deleted file mode 120000 index 945c9b46..00000000 --- a/_codeql_detected_source_root +++ /dev/null @@ -1 +0,0 @@ -. \ No newline at end of file