Skip to content

Commit e40d0df

Browse files
committed
Add test cases for variable index
1 parent 80bd84c commit e40d0df

File tree

2 files changed

+88
-0
lines changed

2 files changed

+88
-0
lines changed

clang/test/CIR/CodeGen/vector-ext.cpp

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -142,3 +142,47 @@ void foo3() {
142142
// OGCG: %[[TMP:.*]] = load <4 x i32>, ptr %[[VEC]], align 16
143143
// OGCG: %[[ELE:.*]] = extractelement <4 x i32> %[[TMP]], i32 1
144144
// OGCG: store i32 %[[ELE]], ptr %[[INIT]], align 4
145+
146+
void foo4() {
147+
vi4 a = { 1, 2, 3, 4 };
148+
149+
int idx = 2;
150+
int e = a[idx];
151+
}
152+
153+
// CIR: %[[VEC:.*]] = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["a", init]
154+
// CIR: %[[IDX:.*]] = cir.alloca !s32i, !cir.ptr<!s32i>, ["idx", init]
155+
// CIR: %[[INIT:.*]] = cir.alloca !s32i, !cir.ptr<!s32i>, ["e", init]
156+
// CIR: %[[CONST_1:.*]] = cir.const #cir.int<1> : !s32i
157+
// CIR: %[[CONST_2:.*]] = cir.const #cir.int<2> : !s32i
158+
// CIR: %[[CONST_3:.*]] = cir.const #cir.int<3> : !s32i
159+
// CIR: %[[CONST_4:.*]] = cir.const #cir.int<4> : !s32i
160+
// CIR: %[[VEC_VAL:.*]] = cir.vec.create(%[[CONST_1]], %[[CONST_2]], %[[CONST_3]], %[[CONST_4]] :
161+
// CIR-SAME: !s32i, !s32i, !s32i, !s32i) : !cir.vector<4 x !s32i>
162+
// CIR: cir.store %[[VEC_VAL]], %[[VEC]] : !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>
163+
// CIR: %[[CONST_IDX:.*]] = cir.const #cir.int<2> : !s32i
164+
// CIR: cir.store %[[CONST_IDX]], %[[IDX]] : !s32i, !cir.ptr<!s32i>
165+
// CIR: %[[TMP1:.*]] = cir.load %[[VEC]] : !cir.ptr<!cir.vector<4 x !s32i>>, !cir.vector<4 x !s32i>
166+
// CIR: %[[TMP2:.*]] = cir.load %[[IDX]] : !cir.ptr<!s32i>, !s32i
167+
// CIR: %[[ELE:.*]] = cir.vec.extract %[[TMP1]][%[[TMP2]] : !s32i] : !cir.vector<4 x !s32i>
168+
// CIR: cir.store %[[ELE]], %[[INIT]] : !s32i, !cir.ptr<!s32i>
169+
170+
// LLVM: %[[VEC:.*]] = alloca <4 x i32>, i64 1, align 16
171+
// LLVM: %[[IDX:.*]] = alloca i32, i64 1, align 4
172+
// LLVM: %[[INIT:.*]] = alloca i32, i64 1, align 4
173+
// LLVM: store <4 x i32> <i32 1, i32 2, i32 3, i32 4>, ptr %[[VEC]], align 16
174+
// LLVM: store i32 2, ptr %[[IDX]], align 4
175+
// LLVM: %[[TMP1:.*]] = load <4 x i32>, ptr %[[VEC]], align 16
176+
// LLVM: %[[TMP2:.*]] = load i32, ptr %[[IDX]], align 4
177+
// LLVM: %[[ELE:.*]] = extractelement <4 x i32> %[[TMP1]], i32 %[[TMP2]]
178+
// LLVM: store i32 %[[ELE]], ptr %[[INIT]], align 4
179+
180+
// OGCG: %[[VEC:.*]] = alloca <4 x i32>, align 16
181+
// OGCG: %[[IDX:.*]] = alloca i32, align 4
182+
// OGCG: %[[INIT:.*]] = alloca i32, align 4
183+
// OGCG: store <4 x i32> <i32 1, i32 2, i32 3, i32 4>, ptr %[[VEC]], align 16
184+
// OGCG: store i32 2, ptr %[[IDX]], align 4
185+
// OGCG: %[[TMP1:.*]] = load <4 x i32>, ptr %[[VEC]], align 16
186+
// OGCG: %[[TMP2:.*]] = load i32, ptr %[[IDX]], align 4
187+
// OGCG: %[[ELE:.*]] = extractelement <4 x i32> %[[TMP1]], i32 %[[TMP2]]
188+
// OGCG: store i32 %[[ELE]], ptr %[[INIT]], align 4

clang/test/CIR/CodeGen/vector.cpp

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,3 +129,47 @@ void foo3() {
129129
// OGCG: %[[TMP:.*]] = load <4 x i32>, ptr %[[VEC]], align 16
130130
// OGCG: %[[ELE:.*]] = extractelement <4 x i32> %[[TMP]], i32 1
131131
// OGCG: store i32 %[[ELE]], ptr %[[INIT]], align 4
132+
133+
void foo4() {
134+
vi4 a = { 1, 2, 3, 4 };
135+
136+
int idx = 2;
137+
int e = a[idx];
138+
}
139+
140+
// CIR: %[[VEC:.*]] = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["a", init]
141+
// CIR: %[[IDX:.*]] = cir.alloca !s32i, !cir.ptr<!s32i>, ["idx", init]
142+
// CIR: %[[INIT:.*]] = cir.alloca !s32i, !cir.ptr<!s32i>, ["e", init]
143+
// CIR: %[[CONST_1:.*]] = cir.const #cir.int<1> : !s32i
144+
// CIR: %[[CONST_2:.*]] = cir.const #cir.int<2> : !s32i
145+
// CIR: %[[CONST_3:.*]] = cir.const #cir.int<3> : !s32i
146+
// CIR: %[[CONST_4:.*]] = cir.const #cir.int<4> : !s32i
147+
// CIR: %[[VEC_VAL:.*]] = cir.vec.create(%[[CONST_1]], %[[CONST_2]], %[[CONST_3]], %[[CONST_4]] :
148+
// CIR-SAME: !s32i, !s32i, !s32i, !s32i) : !cir.vector<4 x !s32i>
149+
// CIR: cir.store %[[VEC_VAL]], %[[VEC]] : !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>
150+
// CIR: %[[CONST_IDX:.*]] = cir.const #cir.int<2> : !s32i
151+
// CIR: cir.store %[[CONST_IDX]], %[[IDX]] : !s32i, !cir.ptr<!s32i>
152+
// CIR: %[[TMP1:.*]] = cir.load %[[VEC]] : !cir.ptr<!cir.vector<4 x !s32i>>, !cir.vector<4 x !s32i>
153+
// CIR: %[[TMP2:.*]] = cir.load %[[IDX]] : !cir.ptr<!s32i>, !s32i
154+
// CIR: %[[ELE:.*]] = cir.vec.extract %[[TMP1]][%[[TMP2]] : !s32i] : !cir.vector<4 x !s32i>
155+
// CIR: cir.store %[[ELE]], %[[INIT]] : !s32i, !cir.ptr<!s32i>
156+
157+
// LLVM: %[[VEC:.*]] = alloca <4 x i32>, i64 1, align 16
158+
// LLVM: %[[IDX:.*]] = alloca i32, i64 1, align 4
159+
// LLVM: %[[INIT:.*]] = alloca i32, i64 1, align 4
160+
// LLVM: store <4 x i32> <i32 1, i32 2, i32 3, i32 4>, ptr %[[VEC]], align 16
161+
// LLVM: store i32 2, ptr %[[IDX]], align 4
162+
// LLVM: %[[TMP1:.*]] = load <4 x i32>, ptr %[[VEC]], align 16
163+
// LLVM: %[[TMP2:.*]] = load i32, ptr %[[IDX]], align 4
164+
// LLVM: %[[ELE:.*]] = extractelement <4 x i32> %[[TMP1]], i32 %[[TMP2]]
165+
// LLVM: store i32 %[[ELE]], ptr %[[INIT]], align 4
166+
167+
// OGCG: %[[VEC:.*]] = alloca <4 x i32>, align 16
168+
// OGCG: %[[IDX:.*]] = alloca i32, align 4
169+
// OGCG: %[[INIT:.*]] = alloca i32, align 4
170+
// OGCG: store <4 x i32> <i32 1, i32 2, i32 3, i32 4>, ptr %[[VEC]], align 16
171+
// OGCG: store i32 2, ptr %[[IDX]], align 4
172+
// OGCG: %[[TMP1:.*]] = load <4 x i32>, ptr %[[VEC]], align 16
173+
// OGCG: %[[TMP2:.*]] = load i32, ptr %[[IDX]], align 4
174+
// OGCG: %[[ELE:.*]] = extractelement <4 x i32> %[[TMP1]], i32 %[[TMP2]]
175+
// OGCG: store i32 %[[ELE]], ptr %[[INIT]], align 4

0 commit comments

Comments
 (0)