Skip to content

Commit

Permalink
Use optional priority
Browse files Browse the repository at this point in the history
Summary:

Test Plan:

Reviewers:

Subscribers:

Tasks:

Tags:
  • Loading branch information
htyu committed Aug 23, 2023
1 parent ee1409b commit 00b2a9c
Show file tree
Hide file tree
Showing 4 changed files with 19 additions and 7 deletions.
13 changes: 9 additions & 4 deletions clang/include/clang/CIR/Dialect/IR/CIRAttrs.td
Original file line number Diff line number Diff line change
Expand Up @@ -455,14 +455,19 @@ def OptNoneAttr : CIRUnitAttr<"OptNone", "optnone"> {
def GlobalCtorAttr : CIR_Attr<"GlobalCtor", "globalCtor"> {
let summary = "Indicates a function is a global constructor.";
let description = [{
Describing a global constructor with a priority (default 65536).
Describing a global constructor with an optional priority.
}];
let parameters = (ins "StringAttr":$name, "int":$priority);
let parameters = (ins "StringAttr":$name,
OptionalParameter<"std::optional<int>">:$priority);
let assemblyFormat = [{
`<` $name `,` $priority `>`
`<`
$name
(`,` $priority^)?
`>`
}];
let builders = [
AttrBuilder<(ins "StringRef":$name, CArg<"int", "65536">:$priority), [{
AttrBuilder<(ins "StringRef":$name,
CArg<"std::optional<int>", "{}">:$priority), [{
return $_get($_ctxt, StringAttr::get($_ctxt, name), priority);
}]>
];
Expand Down
2 changes: 2 additions & 0 deletions clang/lib/CIR/Dialect/Transforms/LoweringPrepare.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -126,6 +126,8 @@ void LoweringPreparePass::lowerGlobalOp(GlobalOp op) {
ctorRegion.getBlocks().clear();

// Add a function call to the variable initialization function.
assert(!op.getAst()->getAstDecl()->getAttr<clang::InitPriorityAttr>() &&
"custom initialization priority NYI");
dynamicInitializers.push_back(f);
}
}
Expand Down
9 changes: 7 additions & 2 deletions clang/lib/CIR/Lowering/DirectToLLVM/LowerToLLVM.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1838,8 +1838,13 @@ static void buildCtorList(mlir::ModuleOp module) {
for (auto attr : namedAttr.getValue().cast<mlir::ArrayAttr>()) {
assert(attr.isa<mlir::cir::GlobalCtorAttr>() &&
"must be a GlobalCtorAttr");
if (auto ctorAttr = attr.cast<mlir::cir::GlobalCtorAttr>())
globalCtors.emplace_back(ctorAttr.getName(), ctorAttr.getPriority());
if (auto ctorAttr = attr.cast<mlir::cir::GlobalCtorAttr>()) {
// default priority is 65536
int priority = 65536;
if (ctorAttr.getPriority())
priority = *ctorAttr.getPriority();
globalCtors.emplace_back(ctorAttr.getName(), priority);
}
}
break;
}
Expand Down
2 changes: 1 addition & 1 deletion clang/test/CIR/CodeGen/static.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ static Init __ioinit2(false);
// BEFORE-NEXT: }


// AFTER: module {{.*}} attributes {{.*}}cir.globalCtors = [#cir.globalCtor<"__cxx_global_var_init", 65536>, #cir.globalCtor<"__cxx_global_var_init.1", 65536>]
// AFTER: module {{.*}} attributes {{.*}}cir.globalCtors = [#cir.globalCtor<"__cxx_global_var_init">, #cir.globalCtor<"__cxx_global_var_init.1">]
// AFTER-NEXT: cir.func private @_ZN4InitC1Eb(!cir.ptr<!ty_22class2EInit22>, !cir.bool)
// AFTER-NEXT: cir.global "private" internal @_ZL8__ioinit = #cir.zero : !ty_22class2EInit22 {ast = #cir.vardecl.ast}
// AFTER-NEXT: cir.func internal private @__cxx_global_var_init()
Expand Down

0 comments on commit 00b2a9c

Please sign in to comment.