Skip to main content

melior/dialect/llvm/
attributes.rs

1use crate::{ir::Attribute, Context};
2
3#[derive(Debug, Clone, Copy, PartialEq, Eq)]
4pub enum Linkage {
5    Private,
6    Internal,
7    AvailableExternally,
8    LinkOnce,
9    Weak,
10    Common,
11    Appending,
12    External,
13}
14
15/// Creates an LLVM linkage attribute.
16pub fn linkage(context: &Context, linkage: Linkage) -> Attribute {
17    let linkage = match linkage {
18        Linkage::Private => "private",
19        Linkage::Internal => "internal",
20        Linkage::AvailableExternally => "available_externally",
21        Linkage::LinkOnce => "link_once",
22        Linkage::Weak => "weak",
23        Linkage::Common => "common",
24        Linkage::Appending => "appending",
25        Linkage::External => "external",
26    };
27    Attribute::parse(context, &format!("#llvm.linkage<{linkage}>")).unwrap()
28}