abstraps/dialects/builtin/
intrinsics.rs

1use 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}