mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-02-24 12:29:33 +00:00
X86DAGToDAGISel::PreprocessISelDAG(), isel is moving load inside callseq_start / callseq_end so it can be folded into a call. This can create a cycle in the DAG when the call is glued to a copytoreg. We have been lucky this hasn't caused too many issues because the pre-ra scheduler has special handling of call sequences. However, it has caused a crash in a specific tailcall case. rdar://12393897 git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@165072 91177308-0d34-0410-b5e6-96231b3b80d8
17 lines
535 B
LLVM
17 lines
535 B
LLVM
; RUN: llc -mtriple=i386-apple-macosx -relocation-model=pic < %s
|
|
; rdar://12393897
|
|
|
|
%TRp = type { i32, %TRH*, i32, i32 }
|
|
%TRH = type { i8*, i8*, i8*, i8*, {}* }
|
|
|
|
define i32 @t(%TRp* inreg %rp) nounwind optsize ssp {
|
|
entry:
|
|
%handler = getelementptr inbounds %TRp* %rp, i32 0, i32 1
|
|
%0 = load %TRH** %handler, align 4
|
|
%sync = getelementptr inbounds %TRH* %0, i32 0, i32 4
|
|
%sync12 = load {}** %sync, align 4
|
|
%1 = bitcast {}* %sync12 to i32 (%TRp*)*
|
|
%call = tail call i32 %1(%TRp* inreg %rp) nounwind optsize
|
|
ret i32 %call
|
|
}
|