1 //====- CIROpInterfaces.cpp - Interface to AST Attributes ---------------===// 2 // 3 // Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions. 4 // See https://llvm.org/LICENSE.txt for license information. 5 // SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception 6 // 7 //===----------------------------------------------------------------------===// 8 // 9 // Defines the interface to CIR operations. 10 // 11 //===----------------------------------------------------------------------===// 12 #include "clang/CIR/Interfaces/CIROpInterfaces.h" 13 14 using namespace cir; 15 16 /// Include the generated type qualifiers interfaces. 17 #include "clang/CIR/Interfaces/CIROpInterfaces.cpp.inc" 18 19 #include "clang/CIR/MissingFeatures.h" 20 21 bool CIRGlobalValueInterface::hasDefaultVisibility() { 22 assert(!cir::MissingFeatures::hiddenVisibility()); 23 assert(!cir::MissingFeatures::protectedVisibility()); 24 return isPublic() || isPrivate(); 25 } 26 27 bool CIRGlobalValueInterface::canBenefitFromLocalAlias() { 28 assert(!cir::MissingFeatures::supportIFuncAttr()); 29 // hasComdat here should be isDeduplicateComdat, but as far as clang codegen 30 // is concerned, there is no case for Comdat::NoDeduplicate as all comdat 31 // would be Comdat::Any or Comdat::Largest (in the case of MS ABI). And CIRGen 32 // wouldn't even generate Comdat::Largest comdat as it tries to leave ABI 33 // specifics to LLVM lowering stage, thus here we don't need test Comdat 34 // selectionKind. 35 return hasDefaultVisibility() && hasExternalLinkage() && !isDeclaration() && 36 !hasComdat(); 37 } 38