Skip to content

Commit 20050b6

Browse files
committed
Address code review comment
1 parent d2c63cd commit 20050b6

File tree

6 files changed

+72
-37
lines changed

6 files changed

+72
-37
lines changed

clang/include/clang/CIR/Dialect/IR/CIRTypes.td

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -316,15 +316,32 @@ def CIR_VectorType : CIR_Type<"Vector", "vector",
316316

317317
let summary = "CIR vector type";
318318
let description = [{
319-
`cir.vector' represents fixed-size vector types. The parameters are the
320-
element type and the number of elements.
319+
`!cir.vector' represents fixed-size vector types, parameterized
320+
by the element type and the number of elements.
321+
322+
Example:
323+
324+
```mlir
325+
!cir.vector<!u64i x 2>
326+
!cir.vector<!cir.float x 4>
327+
```
321328
}];
322329

323330
let parameters = (ins "mlir::Type":$eltType, "uint64_t":$size);
324331

325332
let assemblyFormat = [{
326-
`<` $eltType `x` $size `>`
333+
`<` $size `x` $eltType `>`
327334
}];
335+
336+
let builders = [
337+
TypeBuilderWithInferredContext<(ins
338+
"mlir::Type":$eltType, "uint64_t":$size
339+
), [{
340+
return $_get(eltType.getContext(), eltType, size);
341+
}]>,
342+
];
343+
344+
let genVerifyDecl = 1;
328345
}
329346

330347
//===----------------------------------------------------------------------===//

clang/lib/CIR/CodeGen/CIRGenTypes.cpp

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -403,8 +403,7 @@ mlir::Type CIRGenTypes::convertType(QualType type) {
403403
case Type::Vector: {
404404
const VectorType *vec = cast<VectorType>(ty);
405405
const mlir::Type elemTy = convertTypeForMem(vec->getElementType());
406-
resultType = cir::VectorType::get(builder.getContext(), elemTy,
407-
vec->getNumElements());
406+
resultType = cir::VectorType::get(elemTy, vec->getNumElements());
408407
break;
409408
}
410409

clang/lib/CIR/Dialect/IR/CIRTypes.cpp

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -684,6 +684,25 @@ cir::VectorType::getABIAlignment(const ::mlir::DataLayout &dataLayout,
684684
return llvm::NextPowerOf2(dataLayout.getTypeSizeInBits(*this));
685685
}
686686

687+
mlir::LogicalResult cir::VectorType::verify(
688+
llvm::function_ref<mlir::InFlightDiagnostic()> emitError,
689+
mlir::Type eltType, uint64_t size) {
690+
if (size == 0)
691+
return emitError() << "the number of vector elements must be positive";
692+
693+
// Check if it a valid FixedVectorType
694+
if (mlir::isa<cir::PointerType, cir::FP128Type>(eltType))
695+
return success();
696+
697+
// Check if it a valid VectorType
698+
if (mlir::isa<cir::IntType>(eltType) || isAnyFloatingPointType(eltType))
699+
return success();
700+
701+
eltType.dump();
702+
return emitError() << "expected LLVM-compatible fixed-vector type "
703+
"to be either builtin or LLVM dialect type";
704+
}
705+
687706
//===----------------------------------------------------------------------===//
688707
// PointerType Definitions
689708
//===----------------------------------------------------------------------===//

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

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,29 +11,29 @@ typedef int vi2 __attribute__((ext_vector_type(2)));
1111
typedef double vd2 __attribute__((ext_vector_type(2)));
1212

1313
vi4 vec_a;
14-
// CIR: cir.global external @[[VEC_A:.*]] = #cir.zero : !cir.vector<!s32i x 4>
14+
// CIR: cir.global external @[[VEC_A:.*]] = #cir.zero : !cir.vector<4 x !s32i>
1515

1616
// LLVM: @[[VEC_A:.*]] = dso_local global <4 x i32> zeroinitializer
1717

1818
// OGCG: @[[VEC_A:.*]] = global <4 x i32> zeroinitializer
1919

2020
vi3 vec_b;
21-
// CIR: cir.global external @[[VEC_B:.*]] = #cir.zero : !cir.vector<!s32i x 3>
21+
// CIR: cir.global external @[[VEC_B:.*]] = #cir.zero : !cir.vector<3 x !s32i>
2222

2323
// LLVM: @[[VEC_B:.*]] = dso_local global <3 x i32> zeroinitializer
2424

2525
// OGCG: @[[VEC_B:.*]] = global <3 x i32> zeroinitializer
2626

2727
vi2 vec_c;
28-
// CIR: cir.global external @[[VEC_C:.*]] = #cir.zero : !cir.vector<!s32i x 2>
28+
// CIR: cir.global external @[[VEC_C:.*]] = #cir.zero : !cir.vector<2 x !s32i>
2929

3030
// LLVM: @[[VEC_C:.*]] = dso_local global <2 x i32> zeroinitializer
3131

3232
// OGCG: @[[VEC_C:.*]] = global <2 x i32> zeroinitializer
3333

3434
vd2 d;
3535

36-
// CIR: cir.global external @[[VEC_D:.*]] = #cir.zero : !cir.vector<!cir.double x 2>
36+
// CIR: cir.global external @[[VEC_D:.*]] = #cir.zero : !cir.vector<2 x !cir.double>
3737

3838
// LLVM: @[[VEC_D:.*]] = dso_local global <2 x double> zeroinitialize
3939

@@ -46,10 +46,10 @@ void foo() {
4646
vd2 d;
4747
}
4848

49-
// CIR: %[[VEC_A:.*]] = cir.alloca !cir.vector<!s32i x 4>, !cir.ptr<!cir.vector<!s32i x 4>>, ["a"]
50-
// CIR: %[[VEC_B:.*]] = cir.alloca !cir.vector<!s32i x 3>, !cir.ptr<!cir.vector<!s32i x 3>>, ["b"]
51-
// CIR: %[[VEC_C:.*]] = cir.alloca !cir.vector<!s32i x 2>, !cir.ptr<!cir.vector<!s32i x 2>>, ["c"]
52-
// CIR: %[[VEC_D:.*]] = cir.alloca !cir.vector<!cir.double x 2>, !cir.ptr<!cir.vector<!cir.double x 2>>, ["d"]
49+
// CIR: %[[VEC_A:.*]] = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["a"]
50+
// CIR: %[[VEC_B:.*]] = cir.alloca !cir.vector<3 x !s32i>, !cir.ptr<!cir.vector<3 x !s32i>>, ["b"]
51+
// CIR: %[[VEC_C:.*]] = cir.alloca !cir.vector<2 x !s32i>, !cir.ptr<!cir.vector<2 x !s32i>>, ["c"]
52+
// CIR: %[[VEC_D:.*]] = cir.alloca !cir.vector<2 x !cir.double>, !cir.ptr<!cir.vector<2 x !cir.double>>, ["d"]
5353

5454
// LLVM: %[[VEC_A:.*]] = alloca <4 x i32>, i64 1, align 16
5555
// LLVM: %[[VEC_B:.*]] = alloca <3 x i32>, i64 1, align 16
@@ -63,8 +63,8 @@ void foo() {
6363

6464
void foo2(vi4 p) {}
6565

66-
// CIR: %[[VEC_A:.*]] = cir.alloca !cir.vector<!s32i x 4>, !cir.ptr<!cir.vector<!s32i x 4>>, ["p", init]
67-
// CIR: cir.store %{{.*}}, %[[VEC_A]] : !cir.vector<!s32i x 4>, !cir.ptr<!cir.vector<!s32i x 4>>
66+
// CIR: %[[VEC_A:.*]] = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["p", init]
67+
// CIR: cir.store %{{.*}}, %[[VEC_A]] : !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>
6868

6969
// LLVM: %[[VEC_A:.*]] = alloca <4 x i32>, i64 1, align 16
7070
// LLVM: store <4 x i32> %{{.*}}, ptr %[[VEC_A]], align 16

clang/test/CIR/CodeGen/vector.cpp

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,21 +10,21 @@ typedef double vd2 __attribute__((vector_size(16)));
1010
typedef long long vll2 __attribute__((vector_size(16)));
1111

1212
vi4 vec_a;
13-
// CIR: cir.global external @[[VEC_A:.*]] = #cir.zero : !cir.vector<!s32i x 4>
13+
// CIR: cir.global external @[[VEC_A:.*]] = #cir.zero : !cir.vector<4 x !s32i>
1414

1515
// LLVM: @[[VEC_A:.*]] = dso_local global <4 x i32> zeroinitializer
1616

1717
// OGCG: @[[VEC_A:.*]] = global <4 x i32> zeroinitializer
1818

1919
vd2 b;
20-
// CIR: cir.global external @[[VEC_B:.*]] = #cir.zero : !cir.vector<!cir.double x 2>
20+
// CIR: cir.global external @[[VEC_B:.*]] = #cir.zero : !cir.vector<2 x !cir.double>
2121

2222
// LLVM: @[[VEC_B:.*]] = dso_local global <2 x double> zeroinitialize
2323

2424
// OGCG: @[[VEC_B:.*]] = global <2 x double> zeroinitializer
2525

2626
vll2 c;
27-
// CIR: cir.global external @[[VEC_C:.*]] = #cir.zero : !cir.vector<!s64i x 2>
27+
// CIR: cir.global external @[[VEC_C:.*]] = #cir.zero : !cir.vector<2 x !s64i>
2828

2929
// LLVM: @[[VEC_C:.*]] = dso_local global <2 x i64> zeroinitialize
3030

@@ -36,9 +36,9 @@ void vec_int_test() {
3636
vll2 c;
3737
}
3838

39-
// CIR: %[[VEC_A:.*]] = cir.alloca !cir.vector<!s32i x 4>, !cir.ptr<!cir.vector<!s32i x 4>>, ["a"]
40-
// CIR: %[[VEC_B:.*]] = cir.alloca !cir.vector<!cir.double x 2>, !cir.ptr<!cir.vector<!cir.double x 2>>, ["b"]
41-
// CIR: %[[VEC_C:.*]] = cir.alloca !cir.vector<!s64i x 2>, !cir.ptr<!cir.vector<!s64i x 2>>, ["c"]
39+
// CIR: %[[VEC_A:.*]] = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["a"]
40+
// CIR: %[[VEC_B:.*]] = cir.alloca !cir.vector<2 x !cir.double>, !cir.ptr<!cir.vector<2 x !cir.double>>, ["b"]
41+
// CIR: %[[VEC_C:.*]] = cir.alloca !cir.vector<2 x !s64i>, !cir.ptr<!cir.vector<2 x !s64i>>, ["c"]
4242

4343
// LLVM: %[[VEC_A:.*]] = alloca <4 x i32>, i64 1, align 16
4444
// LLVM: %[[VEC_B:.*]] = alloca <2 x double>, i64 1, align 16
@@ -50,8 +50,8 @@ void vec_int_test() {
5050

5151
void foo2(vi4 p) {}
5252

53-
// CIR: %[[VEC_A:.*]] = cir.alloca !cir.vector<!s32i x 4>, !cir.ptr<!cir.vector<!s32i x 4>>, ["p", init]
54-
// CIR: cir.store %{{.*}}, %[[VEC_A]] : !cir.vector<!s32i x 4>, !cir.ptr<!cir.vector<!s32i x 4>>
53+
// CIR: %[[VEC_A:.*]] = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["p", init]
54+
// CIR: cir.store %{{.*}}, %[[VEC_A]] : !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>
5555

5656
// LLVM: %[[VEC_A:.*]] = alloca <4 x i32>, i64 1, align 16
5757
// LLVM: store <4 x i32> %{{.*}}, ptr %[[VEC_A]], align 16

clang/test/CIR/IR/vector.cir

Lines changed: 14 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -4,36 +4,36 @@
44

55
module {
66

7-
cir.global external @vec_a = #cir.zero : !cir.vector<!s32i x 4>
8-
// CHECK: cir.global external @vec_a = #cir.zero : !cir.vector<!s32i x 4>
7+
cir.global external @vec_a = #cir.zero : !cir.vector<4 x !s32i>
8+
// CHECK: cir.global external @vec_a = #cir.zero : !cir.vector<4 x !s32i>
99

10-
cir.global external @vec_b = #cir.zero : !cir.vector<!s32i x 3>
11-
// CHECK: cir.global external @vec_b = #cir.zero : !cir.vector<!s32i x 3>
10+
cir.global external @vec_b = #cir.zero : !cir.vector<3 x !s32i>
11+
// CHECK: cir.global external @vec_b = #cir.zero : !cir.vector<3 x !s32i>
1212

13-
cir.global external @vec_c = #cir.zero : !cir.vector<!s32i x 2>
14-
// CHECK: cir.global external @vec_c = #cir.zero : !cir.vector<!s32i x 2>
13+
cir.global external @vec_c = #cir.zero : !cir.vector<2 x !s32i>
14+
// CHECK: cir.global external @vec_c = #cir.zero : !cir.vector<2 x !s32i>
1515

1616
cir.func @vec_int_test() {
17-
%0 = cir.alloca !cir.vector<!s32i x 4>, !cir.ptr<!cir.vector<!s32i x 4>>, ["a"]
18-
%1 = cir.alloca !cir.vector<!s32i x 3>, !cir.ptr<!cir.vector<!s32i x 3>>, ["b"]
19-
%2 = cir.alloca !cir.vector<!s32i x 2>, !cir.ptr<!cir.vector<!s32i x 2>>, ["c"]
17+
%0 = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["a"]
18+
%1 = cir.alloca !cir.vector<3 x !s32i>, !cir.ptr<!cir.vector<3 x !s32i>>, ["b"]
19+
%2 = cir.alloca !cir.vector<2 x !s32i>, !cir.ptr<!cir.vector<2 x !s32i>>, ["c"]
2020
cir.return
2121
}
2222

2323
// CHECK: cir.func @vec_int_test() {
24-
// CHECK: %0 = cir.alloca !cir.vector<!s32i x 4>, !cir.ptr<!cir.vector<!s32i x 4>>, ["a"]
25-
// CHECK: %1 = cir.alloca !cir.vector<!s32i x 3>, !cir.ptr<!cir.vector<!s32i x 3>>, ["b"]
26-
// CHECK: %2 = cir.alloca !cir.vector<!s32i x 2>, !cir.ptr<!cir.vector<!s32i x 2>>, ["c"]
24+
// CHECK: %0 = cir.alloca !cir.vector<4 x !s32i>, !cir.ptr<!cir.vector<4 x !s32i>>, ["a"]
25+
// CHECK: %1 = cir.alloca !cir.vector<3 x !s32i>, !cir.ptr<!cir.vector<3 x !s32i>>, ["b"]
26+
// CHECK: %2 = cir.alloca !cir.vector<2 x !s32i>, !cir.ptr<!cir.vector<2 x !s32i>>, ["c"]
2727
// CHECK: cir.return
2828
// CHECK: }
2929

3030
cir.func @vec_double_test() {
31-
%0 = cir.alloca !cir.vector<!cir.double x 2>, !cir.ptr<!cir.vector<!cir.double x 2>>, ["a"]
31+
%0 = cir.alloca !cir.vector<2 x !cir.double>, !cir.ptr<!cir.vector<2 x !cir.double>>, ["a"]
3232
cir.return
3333
}
3434

3535
// CHECK: cir.func @vec_double_test() {
36-
// CHECK: %0 = cir.alloca !cir.vector<!cir.double x 2>, !cir.ptr<!cir.vector<!cir.double x 2>>, ["a"]
36+
// CHECK: %0 = cir.alloca !cir.vector<2 x !cir.double>, !cir.ptr<!cir.vector<2 x !cir.double>>, ["a"]
3737
// CHECK: cir.return
3838
// CHECK: }
3939

0 commit comments

Comments
 (0)