diff --git a/llvm/lib/Transforms/IPO/MergeFunctions.cpp b/llvm/lib/Transforms/IPO/MergeFunctions.cpp index 132b5872fbe4..8a209a18c540 100644 --- a/llvm/lib/Transforms/IPO/MergeFunctions.cpp +++ b/llvm/lib/Transforms/IPO/MergeFunctions.cpp @@ -974,17 +974,17 @@ int FunctionComparator::cmpOperations(const Instruction *L, CI->getMetadata(LLVMContext::MD_range), cast(R)->getMetadata(LLVMContext::MD_range)); } - if (const InvokeInst *CI = dyn_cast(L)) { - if (int Res = cmpNumbers(CI->getCallingConv(), + if (const InvokeInst *II = dyn_cast(L)) { + if (int Res = cmpNumbers(II->getCallingConv(), cast(R)->getCallingConv())) return Res; if (int Res = - cmpAttrs(CI->getAttributes(), cast(R)->getAttributes())) + cmpAttrs(II->getAttributes(), cast(R)->getAttributes())) return Res; - if (int Res = cmpOperandBundlesSchema(CI, R)) + if (int Res = cmpOperandBundlesSchema(II, R)) return Res; return cmpRangeMetadata( - CI->getMetadata(LLVMContext::MD_range), + II->getMetadata(LLVMContext::MD_range), cast(R)->getMetadata(LLVMContext::MD_range)); } if (const InsertValueInst *IVI = dyn_cast(L)) { diff --git a/llvm/test/Feature/OperandBundles/merge-func.ll b/llvm/test/Feature/OperandBundles/merge-func.ll index aad9262c9010..1fa6eb093084 100644 --- a/llvm/test/Feature/OperandBundles/merge-func.ll +++ b/llvm/test/Feature/OperandBundles/merge-func.ll @@ -32,3 +32,33 @@ define i32 @g() { ret i32 %v2 } + +define i32 @f.invoke() personality i8 3 { +; CHECK-LABEL: @f.invoke( + entry: +; CHECK: %v0 = invoke i32 (...) @foo(i32 10) [ "foo"(i32 20) ] + %v0 = invoke i32 (...) @foo(i32 10) [ "foo"(i32 20) ] + to label %normal unwind label %exception + + normal: + ret i32 %v0 + + exception: + %cleanup = landingpad i8 cleanup + ret i32 0 +} + +define i32 @g.invoke() personality i8 3 { +; CHECK-LABEL: @g.invoke( + entry: +; CHECK: %v0 = invoke i32 (...) @foo() [ "foo"(i32 10, i32 20) ] + %v0 = invoke i32 (...) @foo() [ "foo"(i32 10, i32 20) ] + to label %normal unwind label %exception + + normal: + ret i32 %v0 + + exception: + %cleanup = landingpad i8 cleanup + ret i32 0 +}