@@ -6038,64 +6038,117 @@ uint64x2_t test_vrshrq_n_u64(uint64x2_t a) {
6038
6038
// return vsliq_n_p16(a, b, 15);
6039
6039
// }
6040
6040
6041
- // NYI-LABEL: @test_vqshlu_n_s8(
6042
- // NYI: [[VQSHLU_N:%.*]] = call <8 x i8> @llvm.aarch64.neon.sqshlu.v8i8(<8 x i8> %a, <8 x i8> <i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3>)
6043
- // NYI: ret <8 x i8> [[VQSHLU_N]]
6044
- // uint8x8_t test_vqshlu_n_s8(int8x8_t a) {
6045
- // return vqshlu_n_s8(a, 3);
6046
- // }
6041
+ uint8x8_t test_vqshlu_n_s8(int8x8_t a) {
6042
+ return vqshlu_n_s8(a, 3);
6047
6043
6048
- // NYI-LABEL: @test_vqshlu_n_s16(
6049
- // NYI: [[TMP0:%.*]] = bitcast <4 x i16> %a to <8 x i8>
6050
- // NYI: [[VQSHLU_N:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>
6051
- // NYI: [[VQSHLU_N1:%.*]] = call <4 x i16> @llvm.aarch64.neon.sqshlu.v4i16(<4 x i16> [[VQSHLU_N]], <4 x i16> <i16 3, i16 3, i16 3, i16 3>)
6052
- // NYI: ret <4 x i16> [[VQSHLU_N1]]
6053
- // uint16x4_t test_vqshlu_n_s16(int16x4_t a) {
6054
- // return vqshlu_n_s16(a, 3);
6055
- // }
6044
+ // CIR-LABEL: vqshlu_n_s8
6045
+ // CIR: [[AMT:%.*]] = cir.const #cir.const_vector<[#cir.int<3> : !s8i, #cir.int<3> : !s8i, #cir.int<3> : !s8i,
6046
+ // CIR: #cir.int<3> : !s8i, #cir.int<3> : !s8i, #cir.int<3> : !s8i, #cir.int<3> : !s8i, #cir.int<3> : !s8i]> : !cir.vector<!s8i x 8>
6047
+ // CIR: {{%.*}} = cir.llvm.intrinsic "llvm.aarch64.neon.sqshlu" {{%.*}}, [[AMT]] :
6048
+ // CIR-SAME: (!cir.vector<!s8i x 8>, !cir.vector<!s8i x 8>) -> !cir.vector<!u8i x 8>
6056
6049
6057
- // NYI-LABEL: @test_vqshlu_n_s32(
6058
- // NYI: [[TMP0:%.*]] = bitcast <2 x i32> %a to <8 x i8>
6059
- // NYI: [[VQSHLU_N:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32>
6060
- // NYI: [[VQSHLU_N1:%.*]] = call <2 x i32> @llvm.aarch64.neon.sqshlu.v2i32(<2 x i32> [[VQSHLU_N]], <2 x i32> <i32 3, i32 3>)
6061
- // NYI: ret <2 x i32> [[VQSHLU_N1]]
6062
- // uint32x2_t test_vqshlu_n_s32(int32x2_t a) {
6063
- // return vqshlu_n_s32(a, 3);
6064
- // }
6050
+ // LLVM: {{.*}}@test_vqshlu_n_s8(<8 x i8>{{.*}}[[A:%.*]])
6051
+ // LLVM: [[VQSHLU_N:%.*]] = call <8 x i8> @llvm.aarch64.neon.sqshlu.v8i8(<8 x i8> [[A]], <8 x i8> <i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3>)
6052
+ // LLVM: ret <8 x i8> [[VQSHLU_N]]
6053
+ }
6065
6054
6066
- // NYI-LABEL: @test_vqshluq_n_s8(
6067
- // NYI: [[VQSHLU_N:%.*]] = call <16 x i8> @llvm.aarch64.neon.sqshlu.v16i8(<16 x i8> %a, <16 x i8> <i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3>)
6068
- // NYI: ret <16 x i8> [[VQSHLU_N]]
6069
- // uint8x16_t test_vqshluq_n_s8(int8x16_t a) {
6070
- // return vqshluq_n_s8(a, 3);
6071
- // }
6055
+ uint16x4_t test_vqshlu_n_s16(int16x4_t a) {
6056
+ return vqshlu_n_s16(a, 3);
6072
6057
6073
- // NYI-LABEL: @test_vqshluq_n_s16(
6074
- // NYI: [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
6075
- // NYI: [[VQSHLU_N:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>
6076
- // NYI: [[VQSHLU_N1:%.*]] = call <8 x i16> @llvm.aarch64.neon.sqshlu.v8i16(<8 x i16> [[VQSHLU_N]], <8 x i16> <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3>)
6077
- // NYI: ret <8 x i16> [[VQSHLU_N1]]
6078
- // uint16x8_t test_vqshluq_n_s16(int16x8_t a) {
6079
- // return vqshluq_n_s16(a, 3);
6080
- // }
6058
+ // CIR-LABEL: vqshlu_n_s16
6059
+ // CIR: [[AMT:%.*]] = cir.const #cir.const_vector<[#cir.int<3> : !s16i, #cir.int<3> : !s16i,
6060
+ // CIR-SAME:#cir.int<3> : !s16i, #cir.int<3> : !s16i]> : !cir.vector<!s16i x 4>
6061
+ // CIR: {{%.*}} = cir.llvm.intrinsic "llvm.aarch64.neon.sqshlu" {{%.*}}, [[AMT]] :
6062
+ // CIR-SAME: (!cir.vector<!s16i x 4>, !cir.vector<!s16i x 4>) -> !cir.vector<!u16i x 4>
6081
6063
6082
- // NYI-LABEL: @test_vqshluq_n_s32(
6083
- // NYI: [[TMP0:%.*]] = bitcast <4 x i32> %a to <16 x i8>
6084
- // NYI: [[VQSHLU_N:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>
6085
- // NYI: [[VQSHLU_N1:%.*]] = call <4 x i32> @llvm.aarch64.neon.sqshlu.v4i32(<4 x i32> [[VQSHLU_N]], <4 x i32> <i32 3, i32 3, i32 3, i32 3>)
6086
- // NYI: ret <4 x i32> [[VQSHLU_N1]]
6087
- // uint32x4_t test_vqshluq_n_s32(int32x4_t a) {
6088
- // return vqshluq_n_s32(a, 3);
6089
- // }
6064
+ // LLVM: {{.*}}@test_vqshlu_n_s16(<4 x i16>{{.*}}[[A:%.*]])
6065
+ // LLVM: [[TMP0:%.*]] = bitcast <4 x i16> [[A]] to <8 x i8>
6066
+ // LLVM: [[VQSHLU_N:%.*]] = bitcast <8 x i8> [[TMP0]] to <4 x i16>
6067
+ // LLVM: [[VQSHLU_N1:%.*]] = call <4 x i16> @llvm.aarch64.neon.sqshlu.v4i16(<4 x i16> [[VQSHLU_N]], <4 x i16> <i16 3, i16 3, i16 3, i16 3>)
6068
+ // LLVM: ret <4 x i16> [[VQSHLU_N1]]
6069
+ }
6090
6070
6091
- // NYI-LABEL: @test_vqshluq_n_s64(
6092
- // NYI: [[TMP0:%.*]] = bitcast <2 x i64> %a to <16 x i8>
6093
- // NYI: [[VQSHLU_N:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64>
6094
- // NYI: [[VQSHLU_N1:%.*]] = call <2 x i64> @llvm.aarch64.neon.sqshlu.v2i64(<2 x i64> [[VQSHLU_N]], <2 x i64> <i64 3, i64 3>)
6095
- // NYI: ret <2 x i64> [[VQSHLU_N1]]
6096
- // uint64x2_t test_vqshluq_n_s64(int64x2_t a) {
6097
- // return vqshluq_n_s64(a, 3);
6098
- // }
6071
+ uint32x2_t test_vqshlu_n_s32(int32x2_t a) {
6072
+ return vqshlu_n_s32(a, 3);
6073
+
6074
+ // CIR-LABEL: vqshlu_n_s32
6075
+ // CIR: [[AMT:%.*]] = cir.const #cir.const_vector<[#cir.int<3> : !s32i, #cir.int<3> : !s32i]> : !cir.vector<!s32i x 2>
6076
+ // CIR: {{%.*}} = cir.llvm.intrinsic "llvm.aarch64.neon.sqshlu" {{%.*}}, [[AMT]] :
6077
+ // CIR-SAME: (!cir.vector<!s32i x 2>, !cir.vector<!s32i x 2>) -> !cir.vector<!u32i x 2>
6078
+
6079
+ // LLVM: {{.*}}@test_vqshlu_n_s32(<2 x i32>{{.*}}[[A:%.*]])
6080
+ // LLVM: [[TMP0:%.*]] = bitcast <2 x i32> [[A]] to <8 x i8>
6081
+ // LLVM: [[VQSHLU_N:%.*]] = bitcast <8 x i8> [[TMP0]] to <2 x i32>
6082
+ // LLVM: [[VQSHLU_N1:%.*]] = call <2 x i32> @llvm.aarch64.neon.sqshlu.v2i32(<2 x i32> [[VQSHLU_N]], <2 x i32> <i32 3, i32 3>)
6083
+ }
6084
+
6085
+ uint8x16_t test_vqshluq_n_s8(int8x16_t a) {
6086
+ return vqshluq_n_s8(a, 3);
6087
+
6088
+ // CIR-LABEL: vqshluq_n_s8
6089
+ // CIR: [[AMT:%.*]] = cir.const #cir.const_vector<[#cir.int<3> : !s8i, #cir.int<3> : !s8i, #cir.int<3> : !s8i,
6090
+ // CIR-SAME: #cir.int<3> : !s8i, #cir.int<3> : !s8i, #cir.int<3> : !s8i, #cir.int<3> : !s8i, #cir.int<3> : !s8i,
6091
+ // CIR-SAME: #cir.int<3> : !s8i, #cir.int<3> : !s8i, #cir.int<3> : !s8i, #cir.int<3> : !s8i,
6092
+ // CIR-SAME: #cir.int<3> : !s8i, #cir.int<3> : !s8i, #cir.int<3> : !s8i, #cir.int<3> : !s8i]> : !cir.vector<!s8i x 16>
6093
+ // CIR: {{%.*}} = cir.llvm.intrinsic "llvm.aarch64.neon.sqshlu" {{%.*}}, [[AMT]] :
6094
+ // CIR-SAME: (!cir.vector<!s8i x 16>, !cir.vector<!s8i x 16>) -> !cir.vector<!u8i x 16>
6095
+
6096
+ // LLVM: {{.*}}@test_vqshluq_n_s8(<16 x i8>{{.*}}[[A:%.*]])
6097
+ // LLVM: [[VQSHLUQ_N:%.*]] = call <16 x i8> @llvm.aarch64.neon.sqshlu.v16i8(<16 x i8> [[A]],
6098
+ // LLVM-SAME: <16 x i8> <i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3, i8 3>)
6099
+ // LLVM: ret <16 x i8> [[VQSHLUQ_N]]
6100
+ }
6101
+
6102
+ uint16x8_t test_vqshluq_n_s16(int16x8_t a) {
6103
+ return vqshluq_n_s16(a, 3);
6104
+
6105
+ // CIR-LABEL: vqshluq_n_s16
6106
+ // CIR: [[AMT:%.*]] = cir.const #cir.const_vector<[#cir.int<3> : !s16i, #cir.int<3> : !s16i,
6107
+ // CIR-SAME: #cir.int<3> : !s16i, #cir.int<3> : !s16i, #cir.int<3> : !s16i, #cir.int<3> : !s16i,
6108
+ // CIR-SAME: #cir.int<3> : !s16i, #cir.int<3> : !s16i]> : !cir.vector<!s16i x 8>
6109
+ // CIR: {{%.*}} = cir.llvm.intrinsic "llvm.aarch64.neon.sqshlu" {{%.*}}, [[AMT]] :
6110
+ // CIR-SAME: (!cir.vector<!s16i x 8>, !cir.vector<!s16i x 8>) -> !cir.vector<!u16i x 8>
6111
+
6112
+ // LLVM: {{.*}}@test_vqshluq_n_s16(<8 x i16>{{.*}}[[A:%.*]])
6113
+ // LLVM: [[TMP0:%.*]] = bitcast <8 x i16> [[A]] to <16 x i8>
6114
+ // LLVM: [[VQSHLUQ_N:%.*]] = bitcast <16 x i8> [[TMP0]] to <8 x i16>
6115
+ // LLVM: [[VQSHLUQ_N1:%.*]] = call <8 x i16> @llvm.aarch64.neon.sqshlu.v8i16(<8 x i16> [[VQSHLUQ_N]],
6116
+ // LLVM-SAME: <8 x i16> <i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3, i16 3>)
6117
+ // LLVM: ret <8 x i16> [[VQSHLUQ_N1]]
6118
+ }
6119
+
6120
+ uint32x4_t test_vqshluq_n_s32(int32x4_t a) {
6121
+ return vqshluq_n_s32(a, 3);
6122
+
6123
+ // CIR-LABEL: vqshluq_n_s32
6124
+ // CIR: [[AMT:%.*]] = cir.const #cir.const_vector<[#cir.int<3> : !s32i, #cir.int<3> : !s32i,
6125
+ // CIR-SAME: #cir.int<3> : !s32i, #cir.int<3> : !s32i]> : !cir.vector<!s32i x 4>
6126
+ // CIR: {{%.*}} = cir.llvm.intrinsic "llvm.aarch64.neon.sqshlu" {{%.*}}, [[AMT]] :
6127
+ // CIR-SAME: (!cir.vector<!s32i x 4>, !cir.vector<!s32i x 4>) -> !cir.vector<!u32i x 4>
6128
+
6129
+ // LLVM: {{.*}}@test_vqshluq_n_s32(<4 x i32>{{.*}}[[A:%.*]])
6130
+ // LLVM: [[TMP0:%.*]] = bitcast <4 x i32> [[A]] to <16 x i8>
6131
+ // LLVM: [[VQSHLUQ_N:%.*]] = bitcast <16 x i8> [[TMP0]] to <4 x i32>
6132
+ // LLVM: [[VQSHLUQ_N1:%.*]] = call <4 x i32> @llvm.aarch64.neon.sqshlu.v4i32(<4 x i32> [[VQSHLUQ_N]],
6133
+ // LLVM-SAME: <4 x i32> <i32 3, i32 3, i32 3, i32 3>)
6134
+ // LLVM: ret <4 x i32> [[VQSHLUQ_N1]]
6135
+ }
6136
+
6137
+ uint64x2_t test_vqshluq_n_s64(int64x2_t a) {
6138
+ return vqshluq_n_s64(a, 3);
6139
+
6140
+ // CIR-LABEL: vqshluq_n_s64
6141
+ // CIR: [[AMT:%.*]] = cir.const #cir.const_vector<[#cir.int<3> : !s64i, #cir.int<3> : !s64i]> : !cir.vector<!s64i x 2>
6142
+ // CIR: {{%.*}} = cir.llvm.intrinsic "llvm.aarch64.neon.sqshlu" {{%.*}}, [[AMT]] :
6143
+ // CIR-SAME: (!cir.vector<!s64i x 2>, !cir.vector<!s64i x 2>) -> !cir.vector<!u64i x 2>
6144
+
6145
+ // LLVM: {{.*}}@test_vqshluq_n_s64(<2 x i64>{{.*}}[[A:%.*]])
6146
+ // LLVM: [[TMP0:%.*]] = bitcast <2 x i64> [[A]] to <16 x i8>
6147
+ // LLVM: [[VQSHLUQ_N:%.*]] = bitcast <16 x i8> [[TMP0]] to <2 x i64>
6148
+ // LLVM: [[VQSHLUQ_N1:%.*]] = call <2 x i64> @llvm.aarch64.neon.sqshlu.v2i64(<2 x i64> [[VQSHLUQ_N]],
6149
+ // LLVM-SAME: <2 x i64> <i64 3, i64 3>)
6150
+ // LLVM: ret <2 x i64> [[VQSHLUQ_N1]]
6151
+ }
6099
6152
6100
6153
// NYI-LABEL: @test_vshrn_n_s16(
6101
6154
// NYI: [[TMP0:%.*]] = bitcast <8 x i16> %a to <16 x i8>
0 commit comments