@@ -213,3 +213,59 @@ void foo4() {
213213// OGCG: %[[TMP2:.*]] = load i32, ptr %[[IDX]], align 4
214214// OGCG: %[[ELE:.*]] = extractelement <4 x i32> %[[TMP1]], i32 %[[TMP2]]
215215// OGCG: store i32 %[[ELE]], ptr %[[INIT]], align 4
216+
217+ void foo8 () {
218+ vi4 a = { 1 , 2 , 3 , 4 };
219+ vi4 plus_res = +a;
220+ vi4 minus_res = -a;
221+ vi4 not_res = ~a;
222+ }
223+
224+ // CIR: %[[VEC:.*]] = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["a", init]
225+ // CIR: %[[PLUS_RES:.*]] = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["plus_res", init]
226+ // CIR: %[[MINUS_RES:.*]] = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["minus_res", init]
227+ // CIR: %[[NOT_RES:.*]] = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["not_res", init]
228+ // CIR: %[[CONST_1:.*]] = cir.const #cir.int<1> : !s32i
229+ // CIR: %[[CONST_2:.*]] = cir.const #cir.int<2> : !s32i
230+ // CIR: %[[CONST_3:.*]] = cir.const #cir.int<3> : !s32i
231+ // CIR: %[[CONST_4:.*]] = cir.const #cir.int<4> : !s32i
232+ // CIR: %[[VEC_VAL:.*]] = cir.vec.create(%[[CONST_1]], %[[CONST_2]], %[[CONST_3]], %[[CONST_4]] :
233+ // CIR-SAME: !s32i, !s32i, !s32i, !s32i) : !cir.vector<4 x !s32i>
234+ // CIR: cir.store %[[VEC_VAL]], %[[VEC]] : !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>
235+ // CIR: %[[TMP1:.*]] = cir.load %[[VEC]] : !cir.ptr<!cir.vector<4 x !s32i>>, !cir.vector<4 x !s32i>
236+ // CIR: %[[PLUS:.*]] = cir.unary(plus, %[[TMP1]]) : !cir.vector<4 x !s32i>, !cir.vector<4 x !s32i>
237+ // CIR: cir.store %[[PLUS]], %[[PLUS_RES]] : !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>
238+ // CIR: %[[TMP2:.*]] = cir.load %[[VEC]] : !cir.ptr<!cir.vector<4 x !s32i>>, !cir.vector<4 x !s32i>
239+ // CIR: %[[MINUS:.*]] = cir.unary(minus, %[[TMP2]]) : !cir.vector<4 x !s32i>, !cir.vector<4 x !s32i>
240+ // CIR: cir.store %[[MINUS]], %[[MINUS_RES]] : !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>
241+ // CIR: %[[TMP3:.*]] = cir.load %[[VEC]] : !cir.ptr<!cir.vector<4 x !s32i>>, !cir.vector<4 x !s32i>
242+ // CIR: %[[NOT:.*]] = cir.unary(not, %[[TMP3]]) : !cir.vector<4 x !s32i>, !cir.vector<4 x !s32i>
243+ // CIR: cir.store %[[NOT]], %[[NOT_RES]] : !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>
244+
245+ // LLVM: %[[VEC:.*]] = alloca <4 x i32>, i64 1, align 16
246+ // LLVM: %[[PLUS_RES:.*]] = alloca <4 x i32>, i64 1, align 16
247+ // LLVM: %[[MINUS_RES:.*]] = alloca <4 x i32>, i64 1, align 16
248+ // LLVM: %[[NOT_RES:.*]] = alloca <4 x i32>, i64 1, align 16
249+ // LLVM: store <4 x i32> <i32 1, i32 2, i32 3, i32 4>, ptr %[[VEC]], align 16
250+ // LLVM: %[[TMP1:.*]] = load <4 x i32>, ptr %[[VEC]], align 16
251+ // LLVM: store <4 x i32> %[[TMP1]], ptr %[[PLUS_RES]], align 16
252+ // LLVM: %[[TMP2:.*]] = load <4 x i32>, ptr %[[VEC]], align 16
253+ // LLVM: %[[SUB:.*]] = sub <4 x i32> zeroinitializer, %[[TMP2]]
254+ // LLVM: store <4 x i32> %[[SUB]], ptr %[[MINUS_RES]], align 16
255+ // LLVM: %[[TMP3:.*]] = load <4 x i32>, ptr %[[VEC]], align 16
256+ // LLVM: %[[NOT:.*]] = xor <4 x i32> %[[TMP3]], splat (i32 -1)
257+ // LLVM: store <4 x i32> %[[NOT]], ptr %[[NOT_RES]], align 16
258+
259+ // OGCG: %[[VEC:.*]] = alloca <4 x i32>, align 16
260+ // OGCG: %[[PLUS_RES:.*]] = alloca <4 x i32>, align 16
261+ // OGCG: %[[MINUS_RES:.*]] = alloca <4 x i32>, align 16
262+ // OGCG: %[[NOT_RES:.*]] = alloca <4 x i32>, align 16
263+ // OGCG: store <4 x i32> <i32 1, i32 2, i32 3, i32 4>, ptr %[[VEC]], align 16
264+ // OGCG: %[[TMP1:.*]] = load <4 x i32>, ptr %[[VEC]], align 16
265+ // OGCG: store <4 x i32> %[[TMP1]], ptr %[[PLUS_RES]], align 16
266+ // OGCG: %[[TMP2:.*]] = load <4 x i32>, ptr %[[VEC]], align 16
267+ // OGCG: %[[SUB:.*]] = sub <4 x i32> zeroinitializer, %[[TMP2]]
268+ // OGCG: store <4 x i32> %[[SUB]], ptr %[[MINUS_RES]], align 16
269+ // OGCG: %[[TMP3:.*]] = load <4 x i32>, ptr %[[VEC]], align 16
270+ // OGCG: %[[NOT:.*]] = xor <4 x i32> %[[TMP3]], splat (i32 -1)
271+ // OGCG: store <4 x i32> %[[NOT]], ptr %[[NOT_RES]], align 16
0 commit comments