[llvm] r351405 - [FunctionComparator] Consider tail call kinds
Vedant Kumar via llvm-commits
llvm-commits at lists.llvm.org
Wed Jan 16 16:29:14 PST 2019
Author: vedantk
Date: Wed Jan 16 16:29:14 2019
New Revision: 351405
URL: http://llvm.org/viewvc/llvm-project?rev=351405&view=rev
Log:
[FunctionComparator] Consider tail call kinds
Essentially, do not treat `call` and `musttail call` as the same thing.
As a drive-by, fold CallInst and InvokeInst handling together using the
CallSite helper.
Differential Revision: https://reviews.llvm.org/D56815
Added:
llvm/trunk/test/Transforms/MergeFunc/tailcall.ll
Modified:
llvm/trunk/lib/Transforms/Utils/FunctionComparator.cpp
Modified: llvm/trunk/lib/Transforms/Utils/FunctionComparator.cpp
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/lib/Transforms/Utils/FunctionComparator.cpp?rev=351405&r1=351404&r2=351405&view=diff
==============================================================================
--- llvm/trunk/lib/Transforms/Utils/FunctionComparator.cpp (original)
+++ llvm/trunk/lib/Transforms/Utils/FunctionComparator.cpp Wed Jan 16 16:29:14 2019
@@ -557,31 +557,20 @@ int FunctionComparator::cmpOperations(co
}
if (const CmpInst *CI = dyn_cast<CmpInst>(L))
return cmpNumbers(CI->getPredicate(), cast<CmpInst>(R)->getPredicate());
- if (const CallInst *CI = dyn_cast<CallInst>(L)) {
- if (int Res = cmpNumbers(CI->getCallingConv(),
- cast<CallInst>(R)->getCallingConv()))
- return Res;
- if (int Res =
- cmpAttrs(CI->getAttributes(), cast<CallInst>(R)->getAttributes()))
- return Res;
- if (int Res = cmpOperandBundlesSchema(CI, R))
- return Res;
- return cmpRangeMetadata(
- CI->getMetadata(LLVMContext::MD_range),
- cast<CallInst>(R)->getMetadata(LLVMContext::MD_range));
- }
- if (const InvokeInst *II = dyn_cast<InvokeInst>(L)) {
- if (int Res = cmpNumbers(II->getCallingConv(),
- cast<InvokeInst>(R)->getCallingConv()))
- return Res;
- if (int Res =
- cmpAttrs(II->getAttributes(), cast<InvokeInst>(R)->getAttributes()))
- return Res;
- if (int Res = cmpOperandBundlesSchema(II, R))
- return Res;
- return cmpRangeMetadata(
- II->getMetadata(LLVMContext::MD_range),
- cast<InvokeInst>(R)->getMetadata(LLVMContext::MD_range));
+ if (auto CSL = CallSite(const_cast<Instruction *>(L))) {
+ auto CSR = CallSite(const_cast<Instruction *>(R));
+ if (int Res = cmpNumbers(CSL.getCallingConv(), CSR.getCallingConv()))
+ return Res;
+ if (int Res = cmpAttrs(CSL.getAttributes(), CSR.getAttributes()))
+ return Res;
+ if (int Res = cmpOperandBundlesSchema(L, R))
+ return Res;
+ if (const CallInst *CI = dyn_cast<CallInst>(L))
+ if (int Res = cmpNumbers(CI->getTailCallKind(),
+ cast<CallInst>(R)->getTailCallKind()))
+ return Res;
+ return cmpRangeMetadata(L->getMetadata(LLVMContext::MD_range),
+ R->getMetadata(LLVMContext::MD_range));
}
if (const InsertValueInst *IVI = dyn_cast<InsertValueInst>(L)) {
ArrayRef<unsigned> LIndices = IVI->getIndices();
Added: llvm/trunk/test/Transforms/MergeFunc/tailcall.ll
URL: http://llvm.org/viewvc/llvm-project/llvm/trunk/test/Transforms/MergeFunc/tailcall.ll?rev=351405&view=auto
==============================================================================
--- llvm/trunk/test/Transforms/MergeFunc/tailcall.ll (added)
+++ llvm/trunk/test/Transforms/MergeFunc/tailcall.ll Wed Jan 16 16:29:14 2019
@@ -0,0 +1,21 @@
+; RUN: opt -mergefunc -S < %s | FileCheck %s
+
+declare void @dummy()
+
+; CHECK-LABEL: define{{.*}}@foo
+; CHECK: call {{.*}}@dummy
+; CHECK: musttail {{.*}}@dummy
+define void @foo() {
+ call void @dummy()
+ musttail call void @dummy()
+ ret void
+}
+
+; CHECK-LABEL: define{{.*}}@bar
+; CHECK: call {{.*}}@dummy
+; CHECK: call {{.*}}@dummy
+define void @bar() {
+ call void @dummy()
+ call void @dummy()
+ ret void
+}
More information about the llvm-commits
mailing list