CodeQL / Analyze (actions) (push) Canceled after 0s
CodeQL / Analyze (python) (push) Canceled after 0s
pre-commit / pre-commit (push) Canceled after 0s
Multi-Arch CI / setup (push) Canceled after 0s
Publish build_manylinux_x86_64 images / publish_build_manylinux_x86_64 (push) Canceled after 0s
Setup (Multi-Arch) / setup (push) Canceled after 0s
Multi-Arch CI / Linux::${{ fromJSON(needs.setup.outputs.linux_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubi10 image / publish_no_rocm_image_ubi10 (push) Canceled after 0s
Multi-Arch CI / Windows::${{ fromJSON(needs.setup.outputs.windows_build_config || '{}').build_variant_label || 'skip' }} (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Multi-Arch CI / Manifest Diff (push) Canceled after 0s
TheRock Manifest Diff Report / Generate Manifest Diff Report (push) Canceled after 0s
Multi-Arch CI / CI Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_ocl_rt images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04_rocgdb images / publish_no_rocm_image_ubuntu24_04_rocgdb (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_ocl_rt (push) Canceled after 0s
Publish TheRock Docker image / build-and-push-image (push) Canceled after 0s
Unit Tests / Unit Tests :: ubuntu-24.04 (push) Canceled after 0s
Unit Tests / Unit Tests :: windows-2022 (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_media (push) Canceled after 0s
Unit Tests / Unit Tests Summary (push) Canceled after 0s
Publish no_rocm_image_ubuntu24_04 images / publish_no_rocm_image_ubuntu24_04_openmpi (push) Canceled after 0s
226 lines
13 KiB
Plaintext
226 lines
13 KiB
Plaintext
// RUN: cir-opt %s --verify-roundtrip | FileCheck %s
|
|
|
|
!s32i = !cir.int<s, 32>
|
|
|
|
module {
|
|
|
|
cir.global external @vec_a = #cir.zero : !cir.vector<4 x !s32i>
|
|
// CHECK: cir.global external @vec_a = #cir.zero : !cir.vector<4 x !s32i>
|
|
|
|
cir.global external @vec_b = #cir.zero : !cir.vector<3 x !s32i>
|
|
// CHECK: cir.global external @vec_b = #cir.zero : !cir.vector<3 x !s32i>
|
|
|
|
cir.global external @vec_c = #cir.zero : !cir.vector<2 x !s32i>
|
|
// CHECK: cir.global external @vec_c = #cir.zero : !cir.vector<2 x !s32i>
|
|
|
|
cir.global external @vec_d = #cir.const_vector<[#cir.int<1> : !s32i, #cir.int<2>
|
|
: !s32i, #cir.int<3> : !s32i, #cir.int<4> : !s32i]> : !cir.vector<4 x !s32i>
|
|
|
|
// CIR: cir.global external @vec_d = #cir.const_vector<[#cir.int<1> : !s32i, #cir.int<2> :
|
|
// CIR-SAME: !s32i, #cir.int<3> : !s32i, #cir.int<4> : !s32i]> : !cir.vector<4 x !s32i>
|
|
|
|
cir.func @vec_int_test() {
|
|
%0 = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["a"] {alignment = 16 : i64}
|
|
%1 = cir.alloca !cir.vector<3 x !s32i>, !cir.ptr<!cir.vector<3 x !s32i>>, ["b"] {alignment = 16 : i64}
|
|
%2 = cir.alloca !cir.vector<2 x !s32i>, !cir.ptr<!cir.vector<2 x !s32i>>, ["c"] {alignment = 8 : i64}
|
|
%3 = cir.alloca !cir.vector<[1] x !s32i>, !cir.ptr<!cir.vector<[1] x !s32i>>, ["d"] {alignment = 4 : i64}
|
|
cir.return
|
|
}
|
|
|
|
// CHECK: cir.func{{.*}} @vec_int_test() {
|
|
// CHECK: %0 = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["a"]
|
|
// CHECK: %1 = cir.alloca !cir.vector<3 x !s32i>, !cir.ptr<!cir.vector<3 x !s32i>>, ["b"]
|
|
// CHECK: %2 = cir.alloca !cir.vector<2 x !s32i>, !cir.ptr<!cir.vector<2 x !s32i>>, ["c"]
|
|
// CHECK: %3 = cir.alloca !cir.vector<[1] x !s32i>, !cir.ptr<!cir.vector<[1] x !s32i>>, ["d"]
|
|
// CHECK: cir.return
|
|
// CHECK: }
|
|
|
|
cir.func @vec_double_test() {
|
|
%0 = cir.alloca !cir.vector<2 x !cir.double>, !cir.ptr<!cir.vector<2 x !cir.double>>, ["a"] {alignment = 16 : i64}
|
|
cir.return
|
|
}
|
|
|
|
// CHECK: cir.func{{.*}} @vec_double_test() {
|
|
// CHECK: %0 = cir.alloca !cir.vector<2 x !cir.double>, !cir.ptr<!cir.vector<2 x !cir.double>>, ["a"]
|
|
// CHECK: cir.return
|
|
// CHECK: }
|
|
|
|
cir.func @local_vector_create_test() {
|
|
%0 = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["a", init] {alignment = 16 : i64}
|
|
%1 = cir.const #cir.int<1> : !s32i
|
|
%2 = cir.const #cir.int<2> : !s32i
|
|
%3 = cir.const #cir.int<3> : !s32i
|
|
%4 = cir.const #cir.int<4> : !s32i
|
|
%5 = cir.vec.create(%1, %2, %3, %4 : !s32i, !s32i, !s32i, !s32i) : !cir.vector<4 x !s32i>
|
|
cir.store %5, %0 : !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>
|
|
cir.return
|
|
}
|
|
|
|
// CHECK: cir.func{{.*}} @local_vector_create_test() {
|
|
// CHECK: %0 = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["a", init]
|
|
// CHECK: %1 = cir.const #cir.int<1> : !s32i
|
|
// CHECK: %2 = cir.const #cir.int<2> : !s32i
|
|
// CHECK: %3 = cir.const #cir.int<3> : !s32i
|
|
// CHECK: %4 = cir.const #cir.int<4> : !s32i
|
|
// CHECK: %5 = cir.vec.create(%1, %2, %3, %4 : !s32i, !s32i, !s32i, !s32i) : !cir.vector<4 x !s32i>
|
|
// CHECK: cir.store %5, %0 : !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>
|
|
// CHECK: cir.return
|
|
// CHECK: }
|
|
|
|
cir.func @vector_extract_element_test() {
|
|
%0 = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["d", init] {alignment = 16 : i64}
|
|
%1 = cir.alloca !s32i, !cir.ptr<!s32i>, ["e", init] {alignment = 4 : i64}
|
|
%2 = cir.const #cir.int<1> : !s32i
|
|
%3 = cir.const #cir.int<2> : !s32i
|
|
%4 = cir.const #cir.int<3> : !s32i
|
|
%5 = cir.const #cir.int<4> : !s32i
|
|
%6 = cir.vec.create(%2, %3, %4, %5 : !s32i, !s32i, !s32i, !s32i) : !cir.vector<4 x !s32i>
|
|
cir.store %6, %0 : !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>
|
|
%7 = cir.load %0 : !cir.ptr<!cir.vector<4 x !s32i>>, !cir.vector<4 x !s32i>
|
|
%8 = cir.const #cir.int<1> : !s32i
|
|
%9 = cir.vec.extract %7[%8 : !s32i] : !cir.vector<4 x !s32i>
|
|
cir.store %9, %1 : !s32i, !cir.ptr<!s32i>
|
|
cir.return
|
|
}
|
|
|
|
// CHECK: cir.func{{.*}} @vector_extract_element_test() {
|
|
// CHECK: %0 = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["d", init]
|
|
// CHECK: %1 = cir.alloca !s32i, !cir.ptr<!s32i>, ["e", init]
|
|
// CHECK: %2 = cir.const #cir.int<1> : !s32i
|
|
// CHECK: %3 = cir.const #cir.int<2> : !s32i
|
|
// CHECK: %4 = cir.const #cir.int<3> : !s32i
|
|
// CHECK: %5 = cir.const #cir.int<4> : !s32i
|
|
// CHECK: %6 = cir.vec.create(%2, %3, %4, %5 : !s32i, !s32i, !s32i, !s32i) : !cir.vector<4 x !s32i>
|
|
// CHECK: cir.store %6, %0 : !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>
|
|
// CHECK: %7 = cir.load %0 : !cir.ptr<!cir.vector<4 x !s32i>>, !cir.vector<4 x !s32i>
|
|
// CHECK: %8 = cir.const #cir.int<1> : !s32i
|
|
// CHECK: %9 = cir.vec.extract %7[%8 : !s32i] : !cir.vector<4 x !s32i>
|
|
// CHECK: cir.store %9, %1 : !s32i, !cir.ptr<!s32i>
|
|
// CHECK: cir.return
|
|
// CHECK: }
|
|
|
|
cir.func @vector_insert_element_test() {
|
|
%0 = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["a", init] {alignment = 16 : i64}
|
|
%1 = cir.const #cir.int<1> : !s32i
|
|
%2 = cir.const #cir.int<2> : !s32i
|
|
%3 = cir.const #cir.int<3> : !s32i
|
|
%4 = cir.const #cir.int<4> : !s32i
|
|
%5 = cir.vec.create(%1, %2, %3, %4 : !s32i, !s32i, !s32i, !s32i) : !cir.vector<4 x !s32i>
|
|
cir.store %5, %0 : !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>
|
|
%6 = cir.const #cir.int<5> : !s32i
|
|
%7 = cir.const #cir.int<2> : !s32i
|
|
%8 = cir.load %0 : !cir.ptr<!cir.vector<4 x !s32i>>, !cir.vector<4 x !s32i>
|
|
%9 = cir.vec.extract %8[%7 : !s32i] : !cir.vector<4 x !s32i>
|
|
%10 = cir.add nsw %9, %6 : !s32i
|
|
%11 = cir.load %0 : !cir.ptr<!cir.vector<4 x !s32i>>, !cir.vector<4 x !s32i>
|
|
%12 = cir.vec.insert %10, %11[%7 : !s32i] : !cir.vector<4 x !s32i>
|
|
cir.store %12, %0 : !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>
|
|
cir.return
|
|
}
|
|
|
|
// CHECK: cir.func{{.*}} @vector_insert_element_test() {
|
|
// CHECK: %0 = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["a", init]
|
|
// CHECK: %1 = cir.const #cir.int<1> : !s32i
|
|
// CHECK: %2 = cir.const #cir.int<2> : !s32i
|
|
// CHECK: %3 = cir.const #cir.int<3> : !s32i
|
|
// CHECK: %4 = cir.const #cir.int<4> : !s32i
|
|
// CHECK: %5 = cir.vec.create(%1, %2, %3, %4 : !s32i, !s32i, !s32i, !s32i) : !cir.vector<4 x !s32i>
|
|
// CHECK: cir.store %5, %0 : !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>
|
|
// CHECK: %6 = cir.const #cir.int<5> : !s32i
|
|
// CHECK: %7 = cir.const #cir.int<2> : !s32i
|
|
// CHECK: %8 = cir.load %0 : !cir.ptr<!cir.vector<4 x !s32i>>, !cir.vector<4 x !s32i>
|
|
// CHECK: %9 = cir.vec.extract %8[%7 : !s32i] : !cir.vector<4 x !s32i>
|
|
// CHECK: %10 = cir.add nsw %9, %6 : !s32i
|
|
// CHECK: %11 = cir.load %0 : !cir.ptr<!cir.vector<4 x !s32i>>, !cir.vector<4 x !s32i>
|
|
// CHECK: %12 = cir.vec.insert %10, %11[%7 : !s32i] : !cir.vector<4 x !s32i>
|
|
// CHECK: cir.store %12, %0 : !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>
|
|
// CHECK: cir.return
|
|
// CHECK: }
|
|
|
|
cir.func @vector_compare_test() {
|
|
%0 = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["a"] {alignment = 16 : i64}
|
|
%1 = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["b"] {alignment = 16 : i64}
|
|
%2 = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["o", init] {alignment = 16 : i64}
|
|
%3 = cir.const #cir.const_vector<[#cir.int<1> : !s32i, #cir.int<2> : !s32i, #cir.int<4> : !s32i, #cir.int<4> : !s32i]> : !cir.vector<4 x !s32i>
|
|
cir.store %3, %0 : !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>
|
|
%4 = cir.const #cir.const_vector<[#cir.int<1> : !s32i, #cir.int<2> : !s32i, #cir.int<4> : !s32i, #cir.int<4> : !s32i]> : !cir.vector<4 x !s32i>
|
|
cir.store %4, %1 : !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>
|
|
%5 = cir.load %0 : !cir.ptr<!cir.vector<4 x !s32i>>, !cir.vector<4 x !s32i>
|
|
%6 = cir.load %1 : !cir.ptr<!cir.vector<4 x !s32i>>, !cir.vector<4 x !s32i>
|
|
%7 = cir.vec.cmp(eq, %5, %6) : !cir.vector<4 x !s32i>, !cir.vector<4 x !s32i>
|
|
cir.store %7, %2 : !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>
|
|
cir.return
|
|
}
|
|
|
|
// CHECK: cir.func{{.*}} @vector_compare_test() {
|
|
// CHECK: %[[VEC_A:.*]] = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["a"]
|
|
// CHECK: %[[VEC_B:.*]] = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["b"]
|
|
// CHECK: %[[INIT:.*]] = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["o", init]
|
|
// CHECK: %[[VEC_A_VAL:.*]] = cir.const #cir.const_vector<[#cir.int<1> : !s32i, #cir.int<2> : !s32i, #cir.int<4> : !s32i, #cir.int<4> : !s32i]> : !cir.vector<4 x !s32i>
|
|
// CHECK: cir.store %[[VEC_A_VAL]], %[[VEC_A]] : !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>
|
|
// CHECK: %[[VEC_B_VAL:.*]] = cir.const #cir.const_vector<[#cir.int<1> : !s32i, #cir.int<2> : !s32i, #cir.int<4> : !s32i, #cir.int<4> : !s32i]> : !cir.vector<4 x !s32i>
|
|
// CHECK: cir.store %[[VEC_B_VAL]], %[[VEC_B]] : !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>
|
|
// CHECK: %[[TMP_A:.*]] = cir.load %[[VEC_A]] : !cir.ptr<!cir.vector<4 x !s32i>>, !cir.vector<4 x !s32i>
|
|
// CHECK: %[[TMP_B:.*]] = cir.load %[[VEC_B]] : !cir.ptr<!cir.vector<4 x !s32i>>, !cir.vector<4 x !s32i>
|
|
// CHECK: %[[EQ:.*]] = cir.vec.cmp(eq, %[[TMP_A]], %[[TMP_B]]) : !cir.vector<4 x !s32i>, !cir.vector<4 x !s32i>
|
|
// CHECK: cir.store %[[EQ]], %[[INIT]] : !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>
|
|
// CHECK: cir.return
|
|
// CHECK: }
|
|
|
|
cir.func @vector_shuffle_dynamic_test() {
|
|
%0 = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["a"] {alignment = 16 : i64}
|
|
%1 = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["b"] {alignment = 16 : i64}
|
|
%2 = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["r", init] {alignment = 16 : i64}
|
|
%3 = cir.load align(16) %0 : !cir.ptr<!cir.vector<4 x !s32i>>, !cir.vector<4 x !s32i>
|
|
%4 = cir.load align(16) %1 : !cir.ptr<!cir.vector<4 x !s32i>>, !cir.vector<4 x !s32i>
|
|
%5 = cir.vec.shuffle.dynamic %3 : !cir.vector<4 x !s32i>, %4 : !cir.vector<4 x !s32i>
|
|
cir.store align(16) %5, %2 : !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>
|
|
cir.return
|
|
}
|
|
|
|
// CHECK: cir.func{{.*}} @vector_shuffle_dynamic_test() {
|
|
// CHECK: %[[VEC_A:.*]] = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["a"]
|
|
// CHECK: %[[VEC_B:.*]] = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["b"]
|
|
// CHECK: %[[RES:.*]] = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["r", init]
|
|
// CHECK: %[[TMP_A:.*]] = cir.load{{.*}} %[[VEC_A]] : !cir.ptr<!cir.vector<4 x !s32i>>, !cir.vector<4 x !s32i>
|
|
// CHECK: %[[TMP_B:.*]] = cir.load{{.*}} %[[VEC_B]] : !cir.ptr<!cir.vector<4 x !s32i>>, !cir.vector<4 x !s32i>
|
|
// CHECK: %[[VEC_SHUF:.*]] = cir.vec.shuffle.dynamic %[[TMP_A]] : !cir.vector<4 x !s32i>, %[[TMP_B]] : !cir.vector<4 x !s32i>
|
|
// CHECK: cir.store{{.*}} %[[VEC_SHUF]], %[[RES]] : !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>
|
|
// CHECK: cir.return
|
|
// CHECK: }
|
|
|
|
cir.func @vector_splat_test() {
|
|
%0 = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["a", init] {alignment = 16 : i64}
|
|
%1 = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["shl", init] {alignment = 16 : i64}
|
|
%2 = cir.const #cir.int<1> : !s32i
|
|
%3 = cir.const #cir.int<2> : !s32i
|
|
%4 = cir.const #cir.int<3> : !s32i
|
|
%5 = cir.const #cir.int<4> : !s32i
|
|
%6 = cir.vec.create(%2, %3, %4, %5 : !s32i, !s32i, !s32i, !s32i) : !cir.vector<4 x !s32i>
|
|
cir.store %6, %0 : !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>
|
|
%7 = cir.load %0 : !cir.ptr<!cir.vector<4 x !s32i>>, !cir.vector<4 x !s32i>
|
|
%8 = cir.const #cir.int<3> : !s32i
|
|
%9 = cir.vec.splat %8 : !s32i, !cir.vector<4 x !s32i>
|
|
%10 = cir.shift(left, %7 : !cir.vector<4 x !s32i>, %9 : !cir.vector<4 x !s32i>) -> !cir.vector<4 x !s32i>
|
|
cir.store %10, %1 : !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>
|
|
cir.return
|
|
}
|
|
|
|
// CHECK: cir.func{{.*}} @vector_splat_test() {
|
|
// CHECK-NEXT: %[[VEC:.*]] = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["a", init]
|
|
// CHECK-NEXT: %[[SHL_RES:.*]] = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["shl", init]
|
|
// CHECK-NEXT: %[[CONST_1:.*]] = cir.const #cir.int<1> : !s32i
|
|
// CHECK-NEXT: %[[CONST_2:.*]] = cir.const #cir.int<2> : !s32i
|
|
// CHECK-NEXT: %[[CONST_3:.*]] = cir.const #cir.int<3> : !s32i
|
|
// CHECK-NEXT: %[[CONST_4:.*]] = cir.const #cir.int<4> : !s32i
|
|
// CHECK-NEXT: %[[VEC_VAL:.*]] = cir.vec.create(%[[CONST_1]], %[[CONST_2]], %[[CONST_3]], %[[CONST_4]] : !s32i, !s32i, !s32i, !s32i) : !cir.vector<4 x !s32i>
|
|
// CHECK-NEXT: cir.store %[[VEC_VAL]], %[[VEC]] : !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>
|
|
// CHECK-NEXT: %[[TMP:.*]] = cir.load %[[VEC]] : !cir.ptr<!cir.vector<4 x !s32i>>, !cir.vector<4 x !s32i>
|
|
// CHECK-NEXT: %[[SPLAT_VAL:.*]] = cir.const #cir.int<3> : !s32i
|
|
// CHECK-NEXT: %[[SPLAT_VEC:.*]] = cir.vec.splat %[[SPLAT_VAL]] : !s32i, !cir.vector<4 x !s32i>
|
|
// CHECK-NEXT: %[[SHL:.*]] = cir.shift(left, %[[TMP]] : !cir.vector<4 x !s32i>, %[[SPLAT_VEC]] : !cir.vector<4 x !s32i>) -> !cir.vector<4 x !s32i>
|
|
// CHECK-NEXT: cir.store %[[SHL]], %[[SHL_RES:.*]] : !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>
|
|
// CHECK-NEXT: cir.return
|
|
|
|
}
|