mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-04 23:32:00 +00:00
Stop putting operations after a tail call.
This prevents the emission of DAG-generated vreg definitions after a tail call be dropping them entirely (on the grounds that nothing could use them anyway, and they interfere with O0 CodeGen). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@185754 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
8064628379
commit
e5a81a130f
@ -5357,6 +5357,10 @@ void SelectionDAGBuilder::LowerCallTo(ImmutableCallSite CS, SDValue Callee,
|
||||
// As a special case, a null chain means that a tail call has been emitted and
|
||||
// the DAG root is already updated.
|
||||
HasTailCall = true;
|
||||
|
||||
// Since there's no actual continuation from this block, nothing can be
|
||||
// relying on us setting vregs for them.
|
||||
PendingExports.clear();
|
||||
} else {
|
||||
DAG.setRoot(Result.second);
|
||||
}
|
||||
|
16
test/CodeGen/ARM/fast-tail-call.ll
Normal file
16
test/CodeGen/ARM/fast-tail-call.ll
Normal file
@ -0,0 +1,16 @@
|
||||
; RUN: llc -mtriple=thumbv7-linux-gnueabi -O0 -arm-tail-calls < %s | FileCheck %s
|
||||
|
||||
; Primarily a non-crash test: Thumbv7 Linux does not have FastISel support,
|
||||
; which led (via a convoluted route) to DAG nodes after a TC_RETURN that
|
||||
; couldn't possibly work.
|
||||
|
||||
declare i8* @g(i8*)
|
||||
|
||||
define i8* @f(i8* %a) {
|
||||
entry:
|
||||
%0 = tail call i8* @g(i8* %a)
|
||||
ret i8* %0
|
||||
; CHECK: b g
|
||||
; CHECK-NOT: ldr
|
||||
; CHECK-NOT: str
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user