Skip to content

Commit 43c54a8

Browse files
committed
Address code review comments
1 parent e91f537 commit 43c54a8

File tree

5 files changed

+29
-25
lines changed

5 files changed

+29
-25
lines changed

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

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,27 @@ def CIR_AnyIntOrFloatAttr : AnyAttrOf<[CIR_AnyIntAttr, CIR_AnyFPAttr],
3838
string cppType = "::mlir::TypedAttr";
3939
}
4040

41+
//===----------------------------------------------------------------------===//
42+
// GlobalViewAttr constraints
43+
//===----------------------------------------------------------------------===//
44+
45+
def CIR_AnyGlobalViewAttr : CIR_AttrConstraint<"::cir::GlobalViewAttr", "GlobalView attribute">;
46+
47+
def CIR_AnyIntOrGlobalViewAttr : AnyAttrOf<[CIR_AnyIntAttr, CIR_AnyGlobalViewAttr],
48+
"integer or global view attribute"> {
49+
string cppType = "::mlir::TypedAttr";
50+
}
51+
4152
//===----------------------------------------------------------------------===//
4253
// ArrayAttr constraints
4354
//===----------------------------------------------------------------------===//
4455

4556
def CIR_IntArrayAttr : TypedArrayAttrBase<CIR_AnyIntAttr,
4657
"integer array attribute">;
4758

59+
def CIR_IntOrGlobalViewArrayAttr : TypedArrayAttrBase<CIR_AnyIntOrGlobalViewAttr,
60+
"integer or global view array attribute">{
61+
string cppType = "::mlir::ArrayAttr";
62+
}
63+
4864
#endif // CLANG_CIR_DIALECT_IR_CIRATTRCONSTRAINTS_TD

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

Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -798,19 +798,21 @@ def CIR_TypeInfoAttr : CIR_Attr<"TypeInfo", "typeinfo", [TypedAttrInterface]> {
798798
Example:
799799

800800
```
801-
cir.global "private" external @_ZTVN10__cxxabiv120__si_class_type_infoE : !cir.ptr<i32>
801+
cir.global "private" external @_ZTVN10__cxxabiv120__si_class_type_infoE
802+
: !cir.ptr<i32>
802803

803-
!rec_anon_struct = !cir.record<struct {!cir.ptr<!u8i>, !cir.ptr<!u8i>, !cir.ptr<!u8i>}>
804+
!rec_anon_struct = !cir.record<struct {!cir.ptr<!u8i>, !cir.ptr<!u8i>,
805+
!cir.ptr<!u8i>}>
804806

805807
cir.global constant external @type_info = #cir.typeinfo<{
806808
#cir.global_view<@_ZTVN10__cxxabiv120__si_class_type_infoE, [2 : i32]>
807-
: !cir.ptr<!u8i>, #cir.global_view<@_ZTS1B> : !cir.ptr<!u8i>, #cir.global_view<@_ZTI1A>
808-
: !cir.ptr<!u8i>}> : !rec_anon_struct
809+
: !cir.ptr<!u8i>, #cir.global_view<@_ZTS1B> : !cir.ptr<!u8i>,
810+
#cir.global_view<@_ZTI1A> : !cir.ptr<!u8i>}> : !rec_anon_struct
809811
```
810812
}];
811813

812814
let parameters = (ins AttributeSelfTypeParameter<"">:$type,
813-
"mlir::ArrayAttr":$data);
815+
CIR_IntOrGlobalViewArrayAttr:$data);
814816

815817
let builders = [
816818
AttrBuilderWithInferredContext<(ins "mlir::Type":$type,

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

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,6 @@
2626
#include "llvm/ADT/SmallSet.h"
2727
#include "llvm/Support/LogicalResult.h"
2828

29-
#include <numeric>
30-
3129
using namespace mlir;
3230
using namespace cir;
3331

@@ -2752,11 +2750,6 @@ LogicalResult cir::TypeInfoAttr::verify(
27522750
if (cir::ConstRecordAttr::verify(emitError, type, typeinfoData).failed())
27532751
return failure();
27542752

2755-
for (auto &member : typeinfoData) {
2756-
if (llvm::isa<GlobalViewAttr, IntAttr>(member))
2757-
continue;
2758-
return emitError() << "expected GlobalViewAttr or IntAttr attribute";
2759-
}
27602753
return success();
27612754
}
27622755

clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -523,14 +523,15 @@ mlir::Value CIRAttrToValue::visitCirAttr(cir::GlobalViewAttr globalAttr) {
523523
}
524524

525525
// TypeInfoAttr visitor.
526-
mlir::Value CIRAttrToValue::visitCirAttr(cir::TypeInfoAttr typeinfoArr) {
527-
mlir::Type llvmTy = converter->convertType(typeinfoArr.getType());
526+
mlir::Value CIRAttrToValue::visitCirAttr(cir::TypeInfoAttr typeinfoAttr) {
527+
mlir::Type llvmTy = converter->convertType(typeinfoAttr.getType());
528528
mlir::Location loc = parentOp->getLoc();
529-
mlir::Value result = rewriter.create<mlir::LLVM::UndefOp>(loc, llvmTy);
529+
mlir::Value result = mlir::LLVM::UndefOp::create(rewriter, loc, llvmTy);
530530

531-
for (auto [idx, elt] : llvm::enumerate(typeinfoArr.getData())) {
531+
for (auto [idx, elt] : llvm::enumerate(typeinfoAttr.getData())) {
532532
mlir::Value init = visit(elt);
533-
result = rewriter.create<mlir::LLVM::InsertValueOp>(loc, result, init, idx);
533+
result =
534+
mlir::LLVM::InsertValueOp::create(rewriter, loc, result, init, idx);
534535
}
535536

536537
return result;

clang/test/CIR/IR/invalid-type-info.cir

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,3 @@
77
// expected-error @below {{expected !cir.record type}}
88
cir.global constant external @type_info = #cir.typeinfo<{#cir.global_view<@_ZTVN10__cxxabiv120__si_class_type_infoE, [2 : i32]> : !cir.ptr<!u8i>, #cir.global_view<@_ZTS1B> : !cir.ptr<!u8i>, #cir.global_view<@_ZTI1A> : !cir.ptr<!u8i>}> : !u8i
99

10-
// -----
11-
12-
!u8i = !cir.int<u, 8>
13-
14-
!rec_anon_struct = !cir.record<struct {!u8i, !u8i, !u8i}>
15-
16-
// expected-error @below {{expected GlobalViewAttr or IntAttr attribute}}
17-
cir.global constant external @type_info = #cir.typeinfo<{ #cir.undef : !u8i, #cir.int<1> : !u8i, #cir.int<1> : !u8i}> : !rec_anon_struct

0 commit comments

Comments
 (0)