mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2024-12-20 09:30:43 +00:00
2bea947207
It is tempting to mark the fixed stack slot used to store the return address as immutable when lowering @llvm.returnaddress(i32 0). Unfortunately, within the function, it is not completely immutable: it is written during the function prologue. When using post-RA instruction scheduling, the prologue instructions are available for scheduling, and we're not free to interchange the order of a particular store in the prologue with loads from that stack location. Fixes PR21976. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@224761 91177308-0d34-0410-b5e6-96231b3b80d8
26 lines
589 B
LLVM
26 lines
589 B
LLVM
; RUN: llc -mcpu=pwr7 < %s | FileCheck %s
|
|
target datalayout = "E-m:e-i64:64-n32:64"
|
|
target triple = "powerpc64-unknown-linux-gnu"
|
|
|
|
; Function Attrs: nounwind readnone
|
|
define i8* @test1() #0 {
|
|
entry:
|
|
%0 = tail call i8* @llvm.returnaddress(i32 0)
|
|
ret i8* %0
|
|
}
|
|
|
|
; CHECK-LABEL: @test1
|
|
; CHECK: mflr 0
|
|
; CHECK: std 0, 16(1)
|
|
; FIXME: These next two lines don't both need to load the same value.
|
|
; CHECK-DAG: ld 3, 16(1)
|
|
; CHECK-DAG: ld 0, 16(1)
|
|
; CHECK: mtlr 0
|
|
; CHECK: blr
|
|
|
|
; Function Attrs: nounwind readnone
|
|
declare i8* @llvm.returnaddress(i32) #0
|
|
|
|
attributes #0 = { nounwind readnone }
|
|
|