
This change adds support for the CIRGlobalValueInterface and attributes for visibility and comdat to GlobalOp. The comdat attribute isn't correctly calculated yet, but it was required for the CIRGlobalValueInterface interface. There are also some cases where dso_local isn't set correctly, but it is better than it was before this change. Those issues will be addressed in a future patch.
38 lines
1.5 KiB
C++
38 lines
1.5 KiB
C++
//====- CIROpInterfaces.cpp - Interface to AST Attributes ---------------===//
|
|
//
|
|
// Part of the LLVM Project, under the Apache License v2.0 with LLVM Exceptions.
|
|
// See https://llvm.org/LICENSE.txt for license information.
|
|
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
//
|
|
// Defines the interface to CIR operations.
|
|
//
|
|
//===----------------------------------------------------------------------===//
|
|
#include "clang/CIR/Interfaces/CIROpInterfaces.h"
|
|
|
|
using namespace cir;
|
|
|
|
/// Include the generated type qualifiers interfaces.
|
|
#include "clang/CIR/Interfaces/CIROpInterfaces.cpp.inc"
|
|
|
|
#include "clang/CIR/MissingFeatures.h"
|
|
|
|
bool CIRGlobalValueInterface::hasDefaultVisibility() {
|
|
assert(!cir::MissingFeatures::hiddenVisibility());
|
|
assert(!cir::MissingFeatures::protectedVisibility());
|
|
return isPublic() || isPrivate();
|
|
}
|
|
|
|
bool CIRGlobalValueInterface::canBenefitFromLocalAlias() {
|
|
assert(!cir::MissingFeatures::supportIFuncAttr());
|
|
// hasComdat here should be isDeduplicateComdat, but as far as clang codegen
|
|
// is concerned, there is no case for Comdat::NoDeduplicate as all comdat
|
|
// would be Comdat::Any or Comdat::Largest (in the case of MS ABI). And CIRGen
|
|
// wouldn't even generate Comdat::Largest comdat as it tries to leave ABI
|
|
// specifics to LLVM lowering stage, thus here we don't need test Comdat
|
|
// selectionKind.
|
|
return hasDefaultVisibility() && hasExternalLinkage() && !isDeclaration() &&
|
|
!hasComdat();
|
|
}
|