mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-12 13:30:51 +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))
|
!isInTailCallPosition(CS, CS.getAttributes().getRetAttributes(), TLI))
|
||||||
isTailCall = false;
|
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 =
|
std::pair<SDValue,SDValue> Result =
|
||||||
TLI.LowerCallTo(getRoot(), RetTy,
|
TLI.LowerCallTo(getRoot(), RetTy,
|
||||||
CS.paramHasAttr(0, Attribute::SExt),
|
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
|
; Fast-isel shouldn't attempt to cope with tail calls.
|
||||||
; cleanly terminate instruction selection in the block after it's
|
|
||||||
; done to avoid emitting invalid MachineInstrs.
|
|
||||||
|
|
||||||
%0 = type { i64, i32, i8* }
|
%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]
|
%tmp20 = tail call fastcc i8* @"visit_array_aux<`Reference>"(%0 %arg, i32 undef) ; <i8*> [#uses=1]
|
||||||
ret i8* %tmp20
|
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