@@ -27,7 +27,7 @@ LLVM::LLVMSymbolLinkerInterface::LLVMSymbolLinkerInterface(Dialect *dialect)
2727
2828bool LLVM::LLVMSymbolLinkerInterface::canBeLinked (Operation *op) const {
2929 return isa<LLVM::GlobalOp, LLVM::LLVMFuncOp, LLVM::GlobalCtorsOp,
30- LLVM::GlobalDtorsOp, LLVM::ComdatOp>(op);
30+ LLVM::GlobalDtorsOp, LLVM::ComdatOp, LLVM::AliasOp >(op);
3131}
3232
3333// ===--------------------------------------------------------------------===//
@@ -39,6 +39,8 @@ Linkage LLVM::LLVMSymbolLinkerInterface::getLinkage(Operation *op) {
3939 return gv.getLinkage ();
4040 if (auto fn = dyn_cast<LLVM::LLVMFuncOp>(op))
4141 return fn.getLinkage ();
42+ if (auto alias = dyn_cast<LLVM::AliasOp>(op))
43+ return alias.getLinkage ();
4244 if (isa<LLVM::GlobalCtorsOp, LLVM::GlobalDtorsOp, LLVM::ComdatOp>(op))
4345 return Linkage::Appending;
4446 llvm_unreachable (" unexpected operation" );
@@ -49,6 +51,8 @@ Visibility LLVM::LLVMSymbolLinkerInterface::getVisibility(Operation *op) {
4951 return gv.getVisibility_ ();
5052 if (auto fn = dyn_cast<LLVM::LLVMFuncOp>(op))
5153 return fn.getVisibility_ ();
54+ if (auto alias = dyn_cast<LLVM::AliasOp>(op))
55+ return alias.getVisibility_ ();
5256
5357 if (isa<LLVM::GlobalCtorsOp, LLVM::GlobalDtorsOp, LLVM::ComdatOp>(op))
5458 return Visibility::Default;
@@ -61,6 +65,8 @@ void LLVM::LLVMSymbolLinkerInterface::setVisibility(Operation *op,
6165 return gv.setVisibility_ (visibility);
6266 if (auto fn = dyn_cast<LLVM::LLVMFuncOp>(op))
6367 return fn.setVisibility_ (visibility);
68+ if (auto alias = dyn_cast<LLVM::AliasOp>(op))
69+ return alias.setVisibility_ (visibility);
6470 // GlobalCotrs and Dtors are defined as operations in mlir
6571 // but as globals in LLVM IR
6672 if (isa<LLVM::GlobalCtorsOp, LLVM::GlobalDtorsOp, LLVM::ComdatOp>(op))
@@ -106,7 +112,7 @@ bool LLVM::LLVMSymbolLinkerInterface::isDeclaration(Operation *op) {
106112 return gv.getInitializerRegion ().empty () && !gv.getValue ();
107113 if (auto fn = dyn_cast<LLVM::LLVMFuncOp>(op))
108114 return fn.getBody ().empty ();
109- if (isa<LLVM::GlobalCtorsOp, LLVM::GlobalDtorsOp, LLVM::ComdatOp>(op))
115+ if (isa<LLVM::GlobalCtorsOp, LLVM::GlobalDtorsOp, LLVM::ComdatOp, LLVM::AliasOp >(op))
110116 return false ;
111117 llvm_unreachable (" unexpected operation" );
112118}
@@ -129,6 +135,10 @@ UnnamedAddr LLVM::LLVMSymbolLinkerInterface::getUnnamedAddr(Operation *op) {
129135 auto addr = fn.getUnnamedAddr ();
130136 return addr ? *addr : UnnamedAddr::Global;
131137 }
138+ if (auto alias = dyn_cast<LLVM::AliasOp>(op)) {
139+ auto addr = alias.getUnnamedAddr ();
140+ return addr ? *addr : UnnamedAddr::Global;
141+ }
132142 if (isa<LLVM::GlobalCtorsOp, LLVM::GlobalDtorsOp, LLVM::ComdatOp>(op))
133143 return UnnamedAddr::Global;
134144 llvm_unreachable (" unexpected operation" );
@@ -140,6 +150,8 @@ void LLVM::LLVMSymbolLinkerInterface::setUnnamedAddr(Operation *op,
140150 return gv.setUnnamedAddr (val);
141151 if (auto fn = dyn_cast<LLVM::LLVMFuncOp>(op))
142152 return fn.setUnnamedAddr (val);
153+ if (auto alias = dyn_cast<LLVM::AliasOp>(op))
154+ return alias.setUnnamedAddr (val);
143155 // GlobalCotrs and Dtors are defined as operations in mlir
144156 // but as globals in LLVM IR
145157 if (isa<LLVM::GlobalCtorsOp, LLVM::GlobalDtorsOp, LLVM::ComdatOp>(op))
@@ -153,14 +165,16 @@ LLVM::LLVMSymbolLinkerInterface::getAlignment(Operation *op) {
153165 return gv.getAlignment ();
154166 if (auto fn = dyn_cast<LLVM::LLVMFuncOp>(op))
155167 return fn.getAlignment ();
156- if (isa<LLVM::GlobalCtorsOp, LLVM::GlobalDtorsOp>(op))
168+ if (isa<LLVM::GlobalCtorsOp, LLVM::GlobalDtorsOp, LLVM::AliasOp >(op))
157169 return {};
158170 llvm_unreachable (" unexpected operation" );
159171}
160172
161173bool LLVM::LLVMSymbolLinkerInterface::isConstant (Operation *op) {
162174 if (auto gv = dyn_cast<LLVM::GlobalOp>(op))
163175 return gv.getConstant ();
176+ if (isa<LLVM::AliasOp>(op))
177+ return true ;
164178 if (isa<LLVM::GlobalCtorsOp, LLVM::GlobalDtorsOp>(op))
165179 return false ;
166180 llvm_unreachable (" unexpected operation" );
@@ -175,7 +189,7 @@ llvm::StringRef LLVM::LLVMSymbolLinkerInterface::getSection(Operation *op) {
175189 auto section = fn.getSection ();
176190 return section ? section.value () : llvm::StringRef ();
177191 }
178- if (isa<LLVM::GlobalCtorsOp, LLVM::GlobalDtorsOp>(op))
192+ if (isa<LLVM::GlobalCtorsOp, LLVM::GlobalDtorsOp, LLVM::AliasOp >(op))
179193 return llvm::StringRef ();
180194 llvm_unreachable (" unexpected operation" );
181195}
@@ -184,6 +198,9 @@ uint32_t LLVM::LLVMSymbolLinkerInterface::getAddressSpace(Operation *op) {
184198 if (auto gv = dyn_cast<LLVM::GlobalOp>(op)) {
185199 return gv.getAddrSpace ();
186200 }
201+ if (auto alias = dyn_cast<LLVM::AliasOp>(op)) {
202+ return alias.getAddrSpace ();
203+ }
187204 if (isa<LLVM::GlobalCtorsOp, LLVM::GlobalDtorsOp>(op))
188205 return 0 ;
189206 llvm_unreachable (" unexpected operation" );
0 commit comments