forked from OSchip/llvm-project
Add "hasSection" flag in the Summary
Reviewers: tejohnson Subscribers: llvm-commits Differential Revision: http://reviews.llvm.org/D19405 From: Mehdi Amini <mehdi.amini@apple.com> llvm-svn: 267329
This commit is contained in:
parent
01b3a6184a
commit
ca2c54e04e
|
@ -103,9 +103,14 @@ public:
|
|||
/// types based on global summary-based analysis.
|
||||
GlobalValue::LinkageTypes Linkage : 4;
|
||||
|
||||
/// Indicate if the global value is located in a specific section.
|
||||
unsigned HasSection : 1;
|
||||
|
||||
/// Convenience Constructors
|
||||
explicit GVFlags(GlobalValue::LinkageTypes Linkage) : Linkage(Linkage) {}
|
||||
GVFlags(const GlobalValue &GV) : Linkage(GV.getLinkage()) {}
|
||||
explicit GVFlags(GlobalValue::LinkageTypes Linkage, bool HasSection)
|
||||
: Linkage(Linkage), HasSection(HasSection) {}
|
||||
GVFlags(const GlobalValue &GV)
|
||||
: Linkage(GV.getLinkage()), HasSection(GV.hasSection()) {}
|
||||
};
|
||||
|
||||
private:
|
||||
|
@ -164,6 +169,9 @@ public:
|
|||
/// Return linkage type recorded for this global value.
|
||||
GlobalValue::LinkageTypes linkage() const { return Flags.Linkage; }
|
||||
|
||||
/// Return true if this global value is located in a specific section.
|
||||
bool hasSection() const { return Flags.HasSection; }
|
||||
|
||||
/// Record a reference from this global value to the global value identified
|
||||
/// by \p RefGUID.
|
||||
void addRefEdge(GlobalValue::GUID RefGUID) { RefEdgeList.push_back(RefGUID); }
|
||||
|
|
|
@ -745,7 +745,9 @@ static GlobalValueSummary::GVFlags getDecodedGVSummaryFlags(uint64_t RawFlags,
|
|||
// like getDecodedLinkage() above. Any future change to the linkage enum and
|
||||
// to getDecodedLinkage() will need to be taken into account here as above.
|
||||
auto Linkage = GlobalValue::LinkageTypes(RawFlags & 0xF); // 4 bits
|
||||
return GlobalValueSummary::GVFlags(Linkage);
|
||||
RawFlags = RawFlags >> 4;
|
||||
auto HasSection = RawFlags & 0x1; // bool
|
||||
return GlobalValueSummary::GVFlags(Linkage, HasSection);
|
||||
}
|
||||
|
||||
static GlobalValue::VisibilityTypes getDecodedVisibility(unsigned Val) {
|
||||
|
|
|
@ -789,8 +789,14 @@ static unsigned getEncodedLinkage(const GlobalValue &GV) {
|
|||
// Decode the flags for GlobalValue in the summary
|
||||
static uint64_t getEncodedGVSummaryFlags(GlobalValueSummary::GVFlags Flags) {
|
||||
uint64_t RawFlags = 0;
|
||||
// Emit Linkage enum.
|
||||
RawFlags |= Flags.Linkage; // 4 bits
|
||||
|
||||
RawFlags |= Flags.HasSection; // bool
|
||||
|
||||
// Linkage don't need to be remapped at that time for the summary. Any future
|
||||
// change to the getEncodedLinkage() function will need to be taken into
|
||||
// account here as well.
|
||||
RawFlags = (RawFlags << 4) | Flags.Linkage; // 4 bits
|
||||
|
||||
return RawFlags;
|
||||
}
|
||||
|
||||
|
|
|
@ -0,0 +1,11 @@
|
|||
; Check the linkage types in both the per-module and combined summaries.
|
||||
; RUN: opt -module-summary %s -o %t.o
|
||||
; RUN: llvm-bcanalyzer -dump %t.o | FileCheck %s
|
||||
; RUN: llvm-lto -thinlto -o %t2 %t.o
|
||||
; RUN: llvm-bcanalyzer -dump %t2.thinlto.bc | FileCheck %s --check-prefix=COMBINED
|
||||
|
||||
; CHECK: <PERMODULE {{.*}} op1=16
|
||||
; COMBINED-DAG: <COMBINED {{.*}} op1=16
|
||||
define void @functionWithSection() section "some_section" {
|
||||
ret void
|
||||
}
|
Loading…
Reference in New Issue