mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-30 17:33:24 +00:00
Completely disable tail calls when fast-isel is enabled, as fast-isel
doesn't currently support dealing with this. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@112341 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
7258df71fa
commit
badcda4afa
@ -4649,6 +4649,11 @@ void SelectionDAGBuilder::LowerCallTo(ImmutableCallSite CS, SDValue Callee,
|
||||
!isInTailCallPosition(CS, CS.getAttributes().getRetAttributes(), TLI))
|
||||
isTailCall = false;
|
||||
|
||||
// If there's a possibility that fast-isel has already selected some amount
|
||||
// of the current basic block, don't emit a tail call.
|
||||
if (isTailCall && EnableFastISel)
|
||||
isTailCall = false;
|
||||
|
||||
std::pair<SDValue,SDValue> Result =
|
||||
TLI.LowerCallTo(getRoot(), RetTy,
|
||||
CS.paramHasAttr(0, Attribute::SExt),
|
||||
|
@ -1,8 +1,6 @@
|
||||
; RUN: llc < %s -march=x86-64 -tailcallopt -fast-isel | grep TAILCALL
|
||||
; RUN: llc < %s -march=x86-64 -tailcallopt -fast-isel | not grep TAILCALL
|
||||
|
||||
; Fast-isel shouldn't attempt to handle this tail call, and it should
|
||||
; cleanly terminate instruction selection in the block after it's
|
||||
; done to avoid emitting invalid MachineInstrs.
|
||||
; Fast-isel shouldn't attempt to cope with tail calls.
|
||||
|
||||
%0 = type { i64, i32, i8* }
|
||||
|
||||
@ -11,3 +9,11 @@ fail: ; preds = %entry
|
||||
%tmp20 = tail call fastcc i8* @"visit_array_aux<`Reference>"(%0 %arg, i32 undef) ; <i8*> [#uses=1]
|
||||
ret i8* %tmp20
|
||||
}
|
||||
|
||||
define i32 @foo() nounwind {
|
||||
entry:
|
||||
%0 = tail call i32 (...)* @bar() nounwind ; <i32> [#uses=1]
|
||||
ret i32 %0
|
||||
}
|
||||
|
||||
declare i32 @bar(...) nounwind
|
||||
|
Loading…
Reference in New Issue
Block a user