xref: /freebsd/contrib/llvm-project/clang/lib/CIR/Interfaces/CIROpInterfaces.cpp (revision 700637cbb5e582861067a11aaca4d053546871d2)
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 
hasDefaultVisibility()21 bool CIRGlobalValueInterface::hasDefaultVisibility() {
22   assert(!cir::MissingFeatures::hiddenVisibility());
23   assert(!cir::MissingFeatures::protectedVisibility());
24   return isPublic() || isPrivate();
25 }
26 
canBenefitFromLocalAlias()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