Skip to content

Commit 757d0e4

Browse files
authored
Revert "[CFI][LowerTypeTests] Fix indirect call with alias" (#113978)
Reverts #106185 This is breaking Sanitizer bots: https://lab.llvm.org/buildbot/#/builders/66/builds/5449/steps/8/logs/stdio
1 parent 902acde commit 757d0e4

File tree

3 files changed

+29
-133
lines changed

3 files changed

+29
-133
lines changed

llvm/include/llvm/IR/ModuleSummaryIndexYAML.h

Lines changed: 28 additions & 74 deletions
Original file line numberDiff line numberDiff line change
@@ -135,14 +135,10 @@ template <> struct MappingTraits<TypeIdSummary> {
135135
}
136136
};
137137

138-
struct GlobalValueSummaryYaml {
139-
// Commonly used fields
138+
struct FunctionSummaryYaml {
140139
unsigned Linkage, Visibility;
141140
bool NotEligibleToImport, Live, IsLocal, CanAutoHide;
142141
unsigned ImportType;
143-
// Fields for AliasSummary
144-
std::optional<uint64_t> Aliasee;
145-
// Fields for FunctionSummary
146142
std::vector<uint64_t> Refs;
147143
std::vector<uint64_t> TypeTests;
148144
std::vector<FunctionSummary::VFuncId> TypeTestAssumeVCalls,
@@ -180,16 +176,15 @@ LLVM_YAML_IS_SEQUENCE_VECTOR(FunctionSummary::ConstVCall)
180176
namespace llvm {
181177
namespace yaml {
182178

183-
template <> struct MappingTraits<GlobalValueSummaryYaml> {
184-
static void mapping(IO &io, GlobalValueSummaryYaml &summary) {
179+
template <> struct MappingTraits<FunctionSummaryYaml> {
180+
static void mapping(IO &io, FunctionSummaryYaml& summary) {
185181
io.mapOptional("Linkage", summary.Linkage);
186182
io.mapOptional("Visibility", summary.Visibility);
187183
io.mapOptional("NotEligibleToImport", summary.NotEligibleToImport);
188184
io.mapOptional("Live", summary.Live);
189185
io.mapOptional("Local", summary.IsLocal);
190186
io.mapOptional("CanAutoHide", summary.CanAutoHide);
191187
io.mapOptional("ImportType", summary.ImportType);
192-
io.mapOptional("Aliasee", summary.Aliasee);
193188
io.mapOptional("Refs", summary.Refs);
194189
io.mapOptional("TypeTests", summary.TypeTests);
195190
io.mapOptional("TypeTestAssumeVCalls", summary.TypeTestAssumeVCalls);
@@ -204,107 +199,69 @@ template <> struct MappingTraits<GlobalValueSummaryYaml> {
204199
} // End yaml namespace
205200
} // End llvm namespace
206201

207-
LLVM_YAML_IS_SEQUENCE_VECTOR(GlobalValueSummaryYaml)
202+
LLVM_YAML_IS_SEQUENCE_VECTOR(FunctionSummaryYaml)
208203

209204
namespace llvm {
210205
namespace yaml {
211206

212207
// FIXME: Add YAML mappings for the rest of the module summary.
213208
template <> struct CustomMappingTraits<GlobalValueSummaryMapTy> {
214209
static void inputOne(IO &io, StringRef Key, GlobalValueSummaryMapTy &V) {
215-
std::vector<GlobalValueSummaryYaml> GVSums;
216-
io.mapRequired(Key.str().c_str(), GVSums);
210+
std::vector<FunctionSummaryYaml> FSums;
211+
io.mapRequired(Key.str().c_str(), FSums);
217212
uint64_t KeyInt;
218213
if (Key.getAsInteger(0, KeyInt)) {
219214
io.setError("key not an integer");
220215
return;
221216
}
222217
auto &Elem = V.try_emplace(KeyInt, /*IsAnalysis=*/false).first->second;
223-
for (auto &GVSum : GVSums) {
224-
GlobalValueSummary::GVFlags GVFlags(
225-
static_cast<GlobalValue::LinkageTypes>(GVSum.Linkage),
226-
static_cast<GlobalValue::VisibilityTypes>(GVSum.Visibility),
227-
GVSum.NotEligibleToImport, GVSum.Live, GVSum.IsLocal,
228-
GVSum.CanAutoHide,
229-
static_cast<GlobalValueSummary::ImportKind>(GVSum.ImportType));
230-
if (GVSum.Aliasee) {
231-
auto ASum = std::make_unique<AliasSummary>(GVFlags);
232-
if (!V.count(*GVSum.Aliasee))
233-
V.emplace(*GVSum.Aliasee, /*IsAnalysis=*/false);
234-
ValueInfo AliaseeVI(/*IsAnalysis=*/false, &*V.find(*GVSum.Aliasee));
235-
// Note: Aliasee cannot be filled until all summaries are loaded.
236-
// This is done in fixAliaseeLinks() which is called in
237-
// MappingTraits<ModuleSummaryIndex>::mapping().
238-
ASum->setAliasee(AliaseeVI, /*Aliasee=*/nullptr);
239-
Elem.SummaryList.push_back(std::move(ASum));
240-
continue;
241-
}
218+
for (auto &FSum : FSums) {
242219
SmallVector<ValueInfo, 0> Refs;
243-
Refs.reserve(GVSum.Refs.size());
244-
for (auto &RefGUID : GVSum.Refs) {
220+
Refs.reserve(FSum.Refs.size());
221+
for (auto &RefGUID : FSum.Refs) {
245222
auto It = V.try_emplace(RefGUID, /*IsAnalysis=*/false).first;
246223
Refs.push_back(ValueInfo(/*IsAnalysis=*/false, &*It));
247224
}
248225
Elem.SummaryList.push_back(std::make_unique<FunctionSummary>(
249-
GVFlags, /*NumInsts=*/0, FunctionSummary::FFlags{}, std::move(Refs),
250-
SmallVector<FunctionSummary::EdgeTy, 0>{}, std::move(GVSum.TypeTests),
251-
std::move(GVSum.TypeTestAssumeVCalls),
252-
std::move(GVSum.TypeCheckedLoadVCalls),
253-
std::move(GVSum.TypeTestAssumeConstVCalls),
254-
std::move(GVSum.TypeCheckedLoadConstVCalls),
226+
GlobalValueSummary::GVFlags(
227+
static_cast<GlobalValue::LinkageTypes>(FSum.Linkage),
228+
static_cast<GlobalValue::VisibilityTypes>(FSum.Visibility),
229+
FSum.NotEligibleToImport, FSum.Live, FSum.IsLocal,
230+
FSum.CanAutoHide,
231+
static_cast<GlobalValueSummary::ImportKind>(FSum.ImportType)),
232+
/*NumInsts=*/0, FunctionSummary::FFlags{}, std::move(Refs),
233+
SmallVector<FunctionSummary::EdgeTy, 0>{}, std::move(FSum.TypeTests),
234+
std::move(FSum.TypeTestAssumeVCalls),
235+
std::move(FSum.TypeCheckedLoadVCalls),
236+
std::move(FSum.TypeTestAssumeConstVCalls),
237+
std::move(FSum.TypeCheckedLoadConstVCalls),
255238
ArrayRef<FunctionSummary::ParamAccess>{}, ArrayRef<CallsiteInfo>{},
256239
ArrayRef<AllocInfo>{}));
257240
}
258241
}
259242
static void output(IO &io, GlobalValueSummaryMapTy &V) {
260243
for (auto &P : V) {
261-
std::vector<GlobalValueSummaryYaml> GVSums;
244+
std::vector<FunctionSummaryYaml> FSums;
262245
for (auto &Sum : P.second.SummaryList) {
263246
if (auto *FSum = dyn_cast<FunctionSummary>(Sum.get())) {
264247
std::vector<uint64_t> Refs;
265248
Refs.reserve(FSum->refs().size());
266249
for (auto &VI : FSum->refs())
267250
Refs.push_back(VI.getGUID());
268-
GVSums.push_back(GlobalValueSummaryYaml{
251+
FSums.push_back(FunctionSummaryYaml{
269252
FSum->flags().Linkage, FSum->flags().Visibility,
270253
static_cast<bool>(FSum->flags().NotEligibleToImport),
271254
static_cast<bool>(FSum->flags().Live),
272255
static_cast<bool>(FSum->flags().DSOLocal),
273256
static_cast<bool>(FSum->flags().CanAutoHide),
274-
FSum->flags().ImportType, /*Aliasee=*/std::nullopt, Refs,
275-
FSum->type_tests(), FSum->type_test_assume_vcalls(),
276-
FSum->type_checked_load_vcalls(),
257+
FSum->flags().ImportType, Refs, FSum->type_tests(),
258+
FSum->type_test_assume_vcalls(), FSum->type_checked_load_vcalls(),
277259
FSum->type_test_assume_const_vcalls(),
278260
FSum->type_checked_load_const_vcalls()});
279-
} else if (auto *ASum = dyn_cast<AliasSummary>(Sum.get());
280-
ASum && ASum->hasAliasee()) {
281-
GVSums.push_back(GlobalValueSummaryYaml{
282-
ASum->flags().Linkage, ASum->flags().Visibility,
283-
static_cast<bool>(ASum->flags().NotEligibleToImport),
284-
static_cast<bool>(ASum->flags().Live),
285-
static_cast<bool>(ASum->flags().DSOLocal),
286-
static_cast<bool>(ASum->flags().CanAutoHide),
287-
ASum->flags().ImportType,
288-
/*Aliasee=*/ASum->getAliaseeGUID()});
289-
}
290-
}
291-
if (!GVSums.empty())
292-
io.mapRequired(llvm::utostr(P.first).c_str(), GVSums);
293-
}
294-
}
295-
static void fixAliaseeLinks(GlobalValueSummaryMapTy &V) {
296-
for (auto &P : V) {
297-
for (auto &Sum : P.second.SummaryList) {
298-
if (auto *Alias = dyn_cast<AliasSummary>(Sum.get())) {
299-
ValueInfo AliaseeVI = Alias->getAliaseeVI();
300-
auto AliaseeSL = AliaseeVI.getSummaryList();
301-
if (AliaseeSL.empty()) {
302-
ValueInfo EmptyVI;
303-
Alias->setAliasee(EmptyVI, nullptr);
304-
} else
305-
Alias->setAliasee(AliaseeVI, AliaseeSL[0].get());
306-
}
261+
}
307262
}
263+
if (!FSums.empty())
264+
io.mapRequired(llvm::utostr(P.first).c_str(), FSums);
308265
}
309266
}
310267
};
@@ -324,9 +281,6 @@ template <> struct CustomMappingTraits<TypeIdSummaryMapTy> {
324281
template <> struct MappingTraits<ModuleSummaryIndex> {
325282
static void mapping(IO &io, ModuleSummaryIndex& index) {
326283
io.mapOptional("GlobalValueMap", index.GlobalValueMap);
327-
if (!io.outputting())
328-
CustomMappingTraits<GlobalValueSummaryMapTy>::fixAliaseeLinks(
329-
index.GlobalValueMap);
330284
io.mapOptional("TypeIdMap", index.TypeIdMap);
331285
io.mapOptional("WithGlobalValueDeadStripping",
332286
index.WithGlobalValueDeadStripping);

llvm/lib/Transforms/IPO/LowerTypeTests.cpp

Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -2083,12 +2083,8 @@ bool LowerTypeTestsModule::lower() {
20832083
for (auto &I : *ExportSummary)
20842084
for (auto &GVS : I.second.SummaryList)
20852085
if (GVS->isLive())
2086-
for (const auto &Ref : GVS->refs()) {
2086+
for (const auto &Ref : GVS->refs())
20872087
AddressTaken.insert(Ref.getGUID());
2088-
for (auto &RefGVS : Ref.getSummaryList())
2089-
if (auto Alias = dyn_cast<AliasSummary>(RefGVS.get()))
2090-
AddressTaken.insert(Alias->getAliaseeGUID());
2091-
}
20922088

20932089
NamedMDNode *CfiFunctionsMD = M.getNamedMetadata("cfi.functions");
20942090
if (CfiFunctionsMD) {

llvm/test/Transforms/LowerTypeTests/cfi-icall-alias.ll

Lines changed: 0 additions & 54 deletions
This file was deleted.

0 commit comments

Comments
 (0)