mirror of
https://github.com/RPCS3/llvm-mirror.git
synced 2025-02-04 03:06:28 +00:00
[IR] Upgrade comment token in objc retain release marker
Older compiler issued '#' instead of ';' llvm-svn: 329248
This commit is contained in:
parent
8549095eb0
commit
f0bf89b366
@ -51,6 +51,10 @@ namespace llvm {
|
||||
/// module is modified.
|
||||
bool UpgradeModuleFlags(Module &M);
|
||||
|
||||
/// This checks for objc retain release marker which should be upgraded. It
|
||||
/// returns true if module is modified.
|
||||
bool UpgradeRetainReleaseMarker(Module &M);
|
||||
|
||||
void UpgradeSectionAttributes(Module &M);
|
||||
|
||||
/// If the given TBAA tag uses the scalar TBAA format, create a new node
|
||||
|
@ -4788,6 +4788,9 @@ Error BitcodeReader::materializeModule() {
|
||||
UpgradeDebugInfo(*TheModule);
|
||||
|
||||
UpgradeModuleFlags(*TheModule);
|
||||
|
||||
UpgradeRetainReleaseMarker(*TheModule);
|
||||
|
||||
return Error::success();
|
||||
}
|
||||
|
||||
|
@ -2685,6 +2685,30 @@ bool llvm::UpgradeDebugInfo(Module &M) {
|
||||
return Modified;
|
||||
}
|
||||
|
||||
bool llvm::UpgradeRetainReleaseMarker(Module &M) {
|
||||
bool Changed = false;
|
||||
NamedMDNode *ModRetainReleaseMarker =
|
||||
M.getNamedMetadata("clang.arc.retainAutoreleasedReturnValueMarker");
|
||||
if (ModRetainReleaseMarker) {
|
||||
MDNode *Op = ModRetainReleaseMarker->getOperand(0);
|
||||
if (Op) {
|
||||
MDString *ID = dyn_cast_or_null<MDString>(Op->getOperand(0));
|
||||
if (ID) {
|
||||
SmallVector<StringRef, 4> ValueComp;
|
||||
ID->getString().split(ValueComp, "#");
|
||||
if (ValueComp.size() == 2) {
|
||||
std::string NewValue = ValueComp[0].str() + ";" + ValueComp[1].str();
|
||||
Metadata *Ops[1] = {MDString::get(M.getContext(), NewValue)};
|
||||
ModRetainReleaseMarker->setOperand(0,
|
||||
MDNode::get(M.getContext(), Ops));
|
||||
Changed = true;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
return Changed;
|
||||
}
|
||||
|
||||
bool llvm::UpgradeModuleFlags(Module &M) {
|
||||
NamedMDNode *ModFlags = M.getModuleFlagsMetadata();
|
||||
if (!ModFlags)
|
||||
|
6
test/Bitcode/upgrade-objcretainrelease.ll
Normal file
6
test/Bitcode/upgrade-objcretainrelease.ll
Normal file
@ -0,0 +1,6 @@
|
||||
; Test that comment token for objc retain release is upgraded from '#' to ';'
|
||||
;
|
||||
; RUN: llvm-dis < %s.bc | FileCheck %s
|
||||
|
||||
; CHECK: "mov\09fp, fp\09\09; marker for objc_retainAutoreleaseReturnValue"
|
||||
|
BIN
test/Bitcode/upgrade-objcretainrelease.ll.bc
Normal file
BIN
test/Bitcode/upgrade-objcretainrelease.ll.bc
Normal file
Binary file not shown.
Loading…
x
Reference in New Issue
Block a user