[llvm] Remove the optional bitcast between a musttail call and its ret (PR #201280)
Arseniy Obolenskiy via llvm-commits
llvm-commits at lists.llvm.org
Wed Jun 3 05:50:28 PDT 2026
================
@@ -4287,32 +4275,21 @@ void Verifier::verifyMustTailCall(CallInst &CI) {
FunctionType *CalleeTy = CI.getFunctionType();
Check(CallerTy->isVarArg() == CalleeTy->isVarArg(),
"cannot guarantee tail call due to mismatched varargs", &CI);
- Check(isTypeCongruent(CallerTy->getReturnType(), CalleeTy->getReturnType()),
+ Check(CallerTy->getReturnType() == CalleeTy->getReturnType(),
"cannot guarantee tail call due to mismatched return types", &CI);
// - The calling conventions of the caller and callee must match.
Check(F->getCallingConv() == CI.getCallingConv(),
"cannot guarantee tail call due to mismatched calling conv", &CI);
- // - The call must immediately precede a :ref:`ret <i_ret>` instruction,
- // or a pointer bitcast followed by a ret instruction.
- // - The ret instruction must return the (possibly bitcasted) value
- // produced by the call or void.
- Value *RetVal = &CI;
+ // - The call must immediately precede a :ref:`ret <i_ret>` instruction.
+ // - The ret instruction must return the value produced by the call or void.
Instruction *Next = CI.getNextNode();
- // Handle the optional bitcast.
- if (BitCastInst *BI = dyn_cast_or_null<BitCastInst>(Next)) {
- Check(BI->getOperand(0) == RetVal,
- "bitcast following musttail call must use the call", BI);
- RetVal = BI;
- Next = BI->getNextNode();
----------------
aobolensk wrote:
Added, please check
https://github.com/llvm/llvm-project/pull/201280
More information about the llvm-commits
mailing list