MergeFunc patch from Björn Steinbrink.

Phabricator ticket: D4246, Don't merge functions with different range metadata on call/invoke.
Thanks!



git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@213060 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Stepan Dyatkovskiy
2014-07-15 10:46:51 +00:00
parent fbb631183a
commit 99904d296d
2 changed files with 103 additions and 2 deletions

View File

@@ -766,13 +766,23 @@ int FunctionComparator::cmpOperation(const Instruction *L,
if (int Res = cmpNumbers(CI->getCallingConv(),
cast<CallInst>(R)->getCallingConv()))
return Res;
return cmpAttrs(CI->getAttributes(), cast<CallInst>(R)->getAttributes());
if (int Res =
cmpAttrs(CI->getAttributes(), cast<CallInst>(R)->getAttributes()))
return Res;
return cmpNumbers(
(uint64_t)CI->getMetadata(LLVMContext::MD_range),
(uint64_t)cast<CallInst>(R)->getMetadata(LLVMContext::MD_range));
}
if (const InvokeInst *CI = dyn_cast<InvokeInst>(L)) {
if (int Res = cmpNumbers(CI->getCallingConv(),
cast<InvokeInst>(R)->getCallingConv()))
return Res;
return cmpAttrs(CI->getAttributes(), cast<InvokeInst>(R)->getAttributes());
if (int Res =
cmpAttrs(CI->getAttributes(), cast<InvokeInst>(R)->getAttributes()))
return Res;
return cmpNumbers(
(uint64_t)CI->getMetadata(LLVMContext::MD_range),
(uint64_t)cast<InvokeInst>(R)->getMetadata(LLVMContext::MD_range));
}
if (const InsertValueInst *IVI = dyn_cast<InsertValueInst>(L)) {
ArrayRef<unsigned> LIndices = IVI->getIndices();