1*9880d681SAndroid Build Coastguard Worker;RUN: llc -march=sparc < %s | FileCheck %s -check-prefix=V8 2*9880d681SAndroid Build Coastguard Worker;RUN: llc -march=sparc -mattr=v9 < %s | FileCheck %s -check-prefix=V9 3*9880d681SAndroid Build Coastguard Worker;RUN: llc -march=sparc -regalloc=basic < %s | FileCheck %s -check-prefix=V8 4*9880d681SAndroid Build Coastguard Worker;RUN: llc -march=sparc -regalloc=basic -mattr=v9 < %s | FileCheck %s -check-prefix=V9 5*9880d681SAndroid Build Coastguard Worker;RUN: llc -march=sparcv9 < %s | FileCheck %s -check-prefix=SPARC64 6*9880d681SAndroid Build Coastguard Worker 7*9880d681SAndroid Build Coastguard Worker 8*9880d681SAndroid Build Coastguard Workerdefine i8* @frameaddr() nounwind readnone { 9*9880d681SAndroid Build Coastguard Workerentry: 10*9880d681SAndroid Build Coastguard Worker;V8-LABEL: frameaddr: 11*9880d681SAndroid Build Coastguard Worker;V8: save %sp, -96, %sp 12*9880d681SAndroid Build Coastguard Worker;V8: ret 13*9880d681SAndroid Build Coastguard Worker;V8: restore %g0, %fp, %o0 14*9880d681SAndroid Build Coastguard Worker 15*9880d681SAndroid Build Coastguard Worker;V9-LABEL: frameaddr: 16*9880d681SAndroid Build Coastguard Worker;V9: save %sp, -96, %sp 17*9880d681SAndroid Build Coastguard Worker;V9: ret 18*9880d681SAndroid Build Coastguard Worker;V9: restore %g0, %fp, %o0 19*9880d681SAndroid Build Coastguard Worker 20*9880d681SAndroid Build Coastguard Worker;SPARC64-LABEL: frameaddr 21*9880d681SAndroid Build Coastguard Worker;SPARC64: save %sp, -128, %sp 22*9880d681SAndroid Build Coastguard Worker;SPARC64: add %fp, 2047, %i0 23*9880d681SAndroid Build Coastguard Worker;SPARC64: ret 24*9880d681SAndroid Build Coastguard Worker;SPARC64-NOT: restore %g0, %g0, %g0 25*9880d681SAndroid Build Coastguard Worker;SPARC64: restore 26*9880d681SAndroid Build Coastguard Worker 27*9880d681SAndroid Build Coastguard Worker %0 = tail call i8* @llvm.frameaddress(i32 0) 28*9880d681SAndroid Build Coastguard Worker ret i8* %0 29*9880d681SAndroid Build Coastguard Worker} 30*9880d681SAndroid Build Coastguard Worker 31*9880d681SAndroid Build Coastguard Workerdefine i8* @frameaddr2() nounwind readnone { 32*9880d681SAndroid Build Coastguard Workerentry: 33*9880d681SAndroid Build Coastguard Worker;V8-LABEL: frameaddr2: 34*9880d681SAndroid Build Coastguard Worker;V8: ta 3 35*9880d681SAndroid Build Coastguard Worker;V8: ld [%fp+56], {{.+}} 36*9880d681SAndroid Build Coastguard Worker;V8: ld [{{.+}}+56], {{.+}} 37*9880d681SAndroid Build Coastguard Worker;V8: ld [{{.+}}+56], {{.+}} 38*9880d681SAndroid Build Coastguard Worker 39*9880d681SAndroid Build Coastguard Worker;V9-LABEL: frameaddr2: 40*9880d681SAndroid Build Coastguard Worker;V9: flushw 41*9880d681SAndroid Build Coastguard Worker;V9: ld [%fp+56], {{.+}} 42*9880d681SAndroid Build Coastguard Worker;V9: ld [{{.+}}+56], {{.+}} 43*9880d681SAndroid Build Coastguard Worker;V9: ld [{{.+}}+56], {{.+}} 44*9880d681SAndroid Build Coastguard Worker 45*9880d681SAndroid Build Coastguard Worker;SPARC64-LABEL: frameaddr2 46*9880d681SAndroid Build Coastguard Worker;SPARC64: flushw 47*9880d681SAndroid Build Coastguard Worker;SPARC64: ldx [%fp+2159], %[[R0:[goli][0-7]]] 48*9880d681SAndroid Build Coastguard Worker;SPARC64: ldx [%[[R0]]+2159], %[[R1:[goli][0-7]]] 49*9880d681SAndroid Build Coastguard Worker;SPARC64: ldx [%[[R1]]+2159], %[[R2:[goli][0-7]]] 50*9880d681SAndroid Build Coastguard Worker;SPARC64: add %[[R2]], 2047, {{.+}} 51*9880d681SAndroid Build Coastguard Worker 52*9880d681SAndroid Build Coastguard Worker %0 = tail call i8* @llvm.frameaddress(i32 3) 53*9880d681SAndroid Build Coastguard Worker ret i8* %0 54*9880d681SAndroid Build Coastguard Worker} 55*9880d681SAndroid Build Coastguard Worker 56*9880d681SAndroid Build Coastguard Workerdeclare i8* @llvm.frameaddress(i32) nounwind readnone 57*9880d681SAndroid Build Coastguard Worker 58*9880d681SAndroid Build Coastguard Worker 59*9880d681SAndroid Build Coastguard Worker 60*9880d681SAndroid Build Coastguard Workerdefine i8* @retaddr() nounwind readnone { 61*9880d681SAndroid Build Coastguard Workerentry: 62*9880d681SAndroid Build Coastguard Worker;V8-LABEL: retaddr: 63*9880d681SAndroid Build Coastguard Worker;V8: mov %o7, {{.+}} 64*9880d681SAndroid Build Coastguard Worker 65*9880d681SAndroid Build Coastguard Worker;V9-LABEL: retaddr: 66*9880d681SAndroid Build Coastguard Worker;V9: mov %o7, {{.+}} 67*9880d681SAndroid Build Coastguard Worker 68*9880d681SAndroid Build Coastguard Worker;SPARC64-LABEL: retaddr 69*9880d681SAndroid Build Coastguard Worker;SPARC64: mov %o7, {{.+}} 70*9880d681SAndroid Build Coastguard Worker 71*9880d681SAndroid Build Coastguard Worker %0 = tail call i8* @llvm.returnaddress(i32 0) 72*9880d681SAndroid Build Coastguard Worker ret i8* %0 73*9880d681SAndroid Build Coastguard Worker} 74*9880d681SAndroid Build Coastguard Worker 75*9880d681SAndroid Build Coastguard Workerdefine i8* @retaddr2() nounwind readnone { 76*9880d681SAndroid Build Coastguard Workerentry: 77*9880d681SAndroid Build Coastguard Worker;V8-LABEL: retaddr2: 78*9880d681SAndroid Build Coastguard Worker;V8: ta 3 79*9880d681SAndroid Build Coastguard Worker;V8: ld [%fp+56], {{.+}} 80*9880d681SAndroid Build Coastguard Worker;V8: ld [{{.+}}+56], {{.+}} 81*9880d681SAndroid Build Coastguard Worker;V8: ld [{{.+}}+60], {{.+}} 82*9880d681SAndroid Build Coastguard Worker 83*9880d681SAndroid Build Coastguard Worker;V9-LABEL: retaddr2: 84*9880d681SAndroid Build Coastguard Worker;V9: flushw 85*9880d681SAndroid Build Coastguard Worker;V9: ld [%fp+56], {{.+}} 86*9880d681SAndroid Build Coastguard Worker;V9: ld [{{.+}}+56], {{.+}} 87*9880d681SAndroid Build Coastguard Worker;V9: ld [{{.+}}+60], {{.+}} 88*9880d681SAndroid Build Coastguard Worker 89*9880d681SAndroid Build Coastguard Worker;SPARC64-LABEL: retaddr2 90*9880d681SAndroid Build Coastguard Worker;SPARC64: flushw 91*9880d681SAndroid Build Coastguard Worker;SPARC64: ldx [%fp+2159], %[[R0:[goli][0-7]]] 92*9880d681SAndroid Build Coastguard Worker;SPARC64: ldx [%[[R0]]+2159], %[[R1:[goli][0-7]]] 93*9880d681SAndroid Build Coastguard Worker;SPARC64: ldx [%[[R1]]+2167], {{.+}} 94*9880d681SAndroid Build Coastguard Worker 95*9880d681SAndroid Build Coastguard Worker %0 = tail call i8* @llvm.returnaddress(i32 3) 96*9880d681SAndroid Build Coastguard Worker ret i8* %0 97*9880d681SAndroid Build Coastguard Worker} 98*9880d681SAndroid Build Coastguard Worker 99*9880d681SAndroid Build Coastguard Workerdeclare i8* @llvm.returnaddress(i32) nounwind readnone 100