abstraps/dialects/builtin/
intrinsics.rs1use crate::core::*;
2use crate::dialects::builtin::*;
3use crate::*;
4
5intrinsic! {
6 Module: ["builtin", "module"],
7 [ProvidesSymbolTable], extern: []
8}
9
10impl Module {
11 pub fn get_builder(&self, name: &str, loc: LocationInfo) -> OperationBuilder {
12 let intr = Box::new(Module);
13 let mut b = OperationBuilder::default(intr, loc);
14 let r = Region::Undirected(Graph::default());
15 b.push_region(r);
16 let blk = BasicBlock::default();
17 b.push_block(blk);
18 let st = SymbolTableAttr::new();
19 b.insert_attr("symbols", Box::new(st));
20 let sym_name = SymbolAttr::new(name);
21 b.insert_attr("symbol", Box::new(sym_name));
22 b
23 }
24}
25
26intrinsic! {
27 Func: ["builtin", "func"],
28 [ProvidesSymbol, ProvidesLinkage, FunctionLike, RequiresTerminators],
29 extern: []
30}
31
32impl Func {
33 pub fn get_builder(&self, name: &str, loc: LocationInfo) -> OperationBuilder {
34 let intr = Box::new(Func);
35 let mut b = OperationBuilder::default(intr, loc);
36 let r = Region::Directed(SSACFG::default());
37 b.push_region(r);
38 let blk = BasicBlock::default();
39 b.push_block(blk);
40 let attr = SymbolAttr::new(name);
41 b.insert_attr("symbol", Box::new(attr));
42 let lattr = LinkageAttr::Private;
43 b.insert_attr("linkage", Box::new(lattr));
44 b
45 }
46}