diff options
-rw-r--r-- | llvm/lib/Transforms/IPO/MergeFunctions.cpp | 10 | ||||
-rw-r--r-- | llvm/test/Feature/OperandBundles/merge-func.ll | 30 |
2 files changed, 35 insertions, 5 deletions
diff --git a/llvm/lib/Transforms/IPO/MergeFunctions.cpp b/llvm/lib/Transforms/IPO/MergeFunctions.cpp index 132b5872fbe..8a209a18c54 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<CallInst>(R)->getMetadata(LLVMContext::MD_range)); } - if (const InvokeInst *CI = dyn_cast<InvokeInst>(L)) { - if (int Res = cmpNumbers(CI->getCallingConv(), + if (const InvokeInst *II = dyn_cast<InvokeInst>(L)) { + if (int Res = cmpNumbers(II->getCallingConv(), cast<InvokeInst>(R)->getCallingConv())) return Res; if (int Res = - cmpAttrs(CI->getAttributes(), cast<InvokeInst>(R)->getAttributes())) + cmpAttrs(II->getAttributes(), cast<InvokeInst>(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<InvokeInst>(R)->getMetadata(LLVMContext::MD_range)); } if (const InsertValueInst *IVI = dyn_cast<InsertValueInst>(L)) { diff --git a/llvm/test/Feature/OperandBundles/merge-func.ll b/llvm/test/Feature/OperandBundles/merge-func.ll index aad9262c901..1fa6eb09308 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 +} |