mirror of
https://github.com/RPCS3/llvm.git
synced 2024-12-14 15:39:06 +00:00
ValueMapper: Allow RF_IgnoreMissingLocals and RF_NullMapMissingGlobalValues
Remove the assertion that disallowed the combination, since RF_IgnoreMissingLocals should have no effect on globals. As it happens, RF_NullMapMissingGlobalValues asserted in MapValue(Constant*,...), so I also changed a cast to a cast_or_null to get my test passing. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@265633 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
a10355896b
commit
5c7a97c89b
@ -128,7 +128,8 @@ inline Constant *MapValue(const Constant *V, ValueToValueMapTy &VM,
|
||||
RemapFlags Flags = RF_None,
|
||||
ValueMapTypeRemapper *TypeMapper = nullptr,
|
||||
ValueMaterializer *Materializer = nullptr) {
|
||||
return cast<Constant>(
|
||||
// This can be null for RF_NullMapMissingGlobalValues.
|
||||
return cast_or_null<Constant>(
|
||||
MapValue((const Value *)V, VM, Flags, TypeMapper, Materializer));
|
||||
}
|
||||
|
||||
|
@ -276,14 +276,8 @@ Value *Mapper::mapValue(const Value *V) {
|
||||
// Global values do not need to be seeded into the VM if they
|
||||
// are using the identity mapping.
|
||||
if (isa<GlobalValue>(V)) {
|
||||
if (Flags & RF_NullMapMissingGlobalValues) {
|
||||
// FIXME: Remove this assertion. RF_IgnoreMissingLocals is unrelated to
|
||||
// RF_NullMapMissingGlobalValues.
|
||||
assert(!(Flags & RF_IgnoreMissingLocals) &&
|
||||
"Illegal to specify both RF_NullMapMissingGlobalValues and "
|
||||
"RF_IgnoreMissingLocals");
|
||||
if (Flags & RF_NullMapMissingGlobalValues)
|
||||
return nullptr;
|
||||
}
|
||||
return VM[V] = const_cast<Value*>(V);
|
||||
}
|
||||
|
||||
|
@ -209,4 +209,16 @@ TEST(ValueMapperTest, MapValueLocalAsMetadata) {
|
||||
EXPECT_EQ(&A, MapValue(MAV, VM, RF_IgnoreMissingLocals));
|
||||
}
|
||||
|
||||
TEST(ValueMapperTest, MapMetadataNullMapGlobalWithIgnoreMissingLocals) {
|
||||
LLVMContext C;
|
||||
FunctionType *FTy =
|
||||
FunctionType::get(Type::getVoidTy(C), Type::getInt8Ty(C), false);
|
||||
std::unique_ptr<Function> F(
|
||||
Function::Create(FTy, GlobalValue::ExternalLinkage, "F"));
|
||||
|
||||
ValueToValueMapTy VM;
|
||||
RemapFlags Flags = RF_IgnoreMissingLocals | RF_NullMapMissingGlobalValues;
|
||||
EXPECT_EQ(nullptr, MapValue(F.get(), VM, Flags));
|
||||
}
|
||||
|
||||
} // end namespace
|
||||
|
Loading…
Reference in New Issue
Block a user