1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort=1 -mtriple=armv7-apple-ios | FileCheck %s --check-prefix=DARWIN-ARM 2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort=1 -mtriple=armv7-linux-gnueabi | FileCheck %s --check-prefix=LINUX-ARM 3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort=1 -mtriple=thumbv7-apple-ios | FileCheck %s --check-prefix=DARWIN-THUMB2 4*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort=1 -mtriple=thumbv7-linux-gnueabi | FileCheck %s --check-prefix=LINUX-THUMB2 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Workerdefine i8* @frameaddr_index0() nounwind { 7*9880d681SAndroid Build Coastguard Workerentry: 8*9880d681SAndroid Build Coastguard Worker; DARWIN-ARM-LABEL: frameaddr_index0: 9*9880d681SAndroid Build Coastguard Worker; DARWIN-ARM: push {r7} 10*9880d681SAndroid Build Coastguard Worker; DARWIN-ARM: mov r7, sp 11*9880d681SAndroid Build Coastguard Worker; DARWIN-ARM: mov r0, r7 12*9880d681SAndroid Build Coastguard Worker 13*9880d681SAndroid Build Coastguard Worker; DARWIN-THUMB2-LABEL: frameaddr_index0: 14*9880d681SAndroid Build Coastguard Worker; DARWIN-THUMB2: str r7, [sp, #-4]! 15*9880d681SAndroid Build Coastguard Worker; DARWIN-THUMB2: mov r7, sp 16*9880d681SAndroid Build Coastguard Worker; DARWIN-THUMB2: mov r0, r7 17*9880d681SAndroid Build Coastguard Worker 18*9880d681SAndroid Build Coastguard Worker; LINUX-ARM-LABEL: frameaddr_index0: 19*9880d681SAndroid Build Coastguard Worker; LINUX-ARM: push {r11} 20*9880d681SAndroid Build Coastguard Worker; LINUX-ARM: mov r11, sp 21*9880d681SAndroid Build Coastguard Worker; LINUX-ARM: mov r0, r11 22*9880d681SAndroid Build Coastguard Worker 23*9880d681SAndroid Build Coastguard Worker; LINUX-THUMB2-LABEL: frameaddr_index0: 24*9880d681SAndroid Build Coastguard Worker; LINUX-THUMB2: str r7, [sp, #-4]! 25*9880d681SAndroid Build Coastguard Worker; LINUX-THUMB2: mov r7, sp 26*9880d681SAndroid Build Coastguard Worker; LINUX-THUMB2: mov r0, r7 27*9880d681SAndroid Build Coastguard Worker 28*9880d681SAndroid Build Coastguard Worker %0 = call i8* @llvm.frameaddress(i32 0) 29*9880d681SAndroid Build Coastguard Worker ret i8* %0 30*9880d681SAndroid Build Coastguard Worker} 31*9880d681SAndroid Build Coastguard Worker 32*9880d681SAndroid Build Coastguard Workerdefine i8* @frameaddr_index1() nounwind { 33*9880d681SAndroid Build Coastguard Workerentry: 34*9880d681SAndroid Build Coastguard Worker; DARWIN-ARM-LABEL: frameaddr_index1: 35*9880d681SAndroid Build Coastguard Worker; DARWIN-ARM: push {r7} 36*9880d681SAndroid Build Coastguard Worker; DARWIN-ARM: mov r7, sp 37*9880d681SAndroid Build Coastguard Worker; DARWIN-ARM: ldr r0, [r7] 38*9880d681SAndroid Build Coastguard Worker 39*9880d681SAndroid Build Coastguard Worker; DARWIN-THUMB2-LABEL: frameaddr_index1: 40*9880d681SAndroid Build Coastguard Worker; DARWIN-THUMB2: str r7, [sp, #-4]! 41*9880d681SAndroid Build Coastguard Worker; DARWIN-THUMB2: mov r7, sp 42*9880d681SAndroid Build Coastguard Worker; DARWIN-THUMB2: ldr r0, [r7] 43*9880d681SAndroid Build Coastguard Worker 44*9880d681SAndroid Build Coastguard Worker; LINUX-ARM-LABEL: frameaddr_index1: 45*9880d681SAndroid Build Coastguard Worker; LINUX-ARM: push {r11} 46*9880d681SAndroid Build Coastguard Worker; LINUX-ARM: mov r11, sp 47*9880d681SAndroid Build Coastguard Worker; LINUX-ARM: ldr r0, [r11] 48*9880d681SAndroid Build Coastguard Worker 49*9880d681SAndroid Build Coastguard Worker; LINUX-THUMB2-LABEL: frameaddr_index1: 50*9880d681SAndroid Build Coastguard Worker; LINUX-THUMB2: str r7, [sp, #-4]! 51*9880d681SAndroid Build Coastguard Worker; LINUX-THUMB2: mov r7, sp 52*9880d681SAndroid Build Coastguard Worker; LINUX-THUMB2: mov r0, r7 53*9880d681SAndroid Build Coastguard Worker; LINUX-THUMB2: ldr r0, [r0] 54*9880d681SAndroid Build Coastguard Worker 55*9880d681SAndroid Build Coastguard Worker %0 = call i8* @llvm.frameaddress(i32 1) 56*9880d681SAndroid Build Coastguard Worker ret i8* %0 57*9880d681SAndroid Build Coastguard Worker} 58*9880d681SAndroid Build Coastguard Worker 59*9880d681SAndroid Build Coastguard Workerdefine i8* @frameaddr_index3() nounwind { 60*9880d681SAndroid Build Coastguard Workerentry: 61*9880d681SAndroid Build Coastguard Worker; DARWIN-ARM-LABEL: frameaddr_index3: 62*9880d681SAndroid Build Coastguard Worker; DARWIN-ARM: push {r7} 63*9880d681SAndroid Build Coastguard Worker; DARWIN-ARM: mov r7, sp 64*9880d681SAndroid Build Coastguard Worker; DARWIN-ARM: ldr r0, [r7] 65*9880d681SAndroid Build Coastguard Worker; DARWIN-ARM: ldr r0, [r0] 66*9880d681SAndroid Build Coastguard Worker; DARWIN-ARM: ldr r0, [r0] 67*9880d681SAndroid Build Coastguard Worker 68*9880d681SAndroid Build Coastguard Worker; DARWIN-THUMB2-LABEL: frameaddr_index3: 69*9880d681SAndroid Build Coastguard Worker; DARWIN-THUMB2: str r7, [sp, #-4]! 70*9880d681SAndroid Build Coastguard Worker; DARWIN-THUMB2: mov r7, sp 71*9880d681SAndroid Build Coastguard Worker; DARWIN-THUMB2: ldr r0, [r7] 72*9880d681SAndroid Build Coastguard Worker; DARWIN-THUMB2: ldr r0, [r0] 73*9880d681SAndroid Build Coastguard Worker; DARWIN-THUMB2: ldr r0, [r0] 74*9880d681SAndroid Build Coastguard Worker 75*9880d681SAndroid Build Coastguard Worker; LINUX-ARM-LABEL: frameaddr_index3: 76*9880d681SAndroid Build Coastguard Worker; LINUX-ARM: push {r11} 77*9880d681SAndroid Build Coastguard Worker; LINUX-ARM: mov r11, sp 78*9880d681SAndroid Build Coastguard Worker; LINUX-ARM: ldr r0, [r11] 79*9880d681SAndroid Build Coastguard Worker; LINUX-ARM: ldr r0, [r0] 80*9880d681SAndroid Build Coastguard Worker; LINUX-ARM: ldr r0, [r0] 81*9880d681SAndroid Build Coastguard Worker 82*9880d681SAndroid Build Coastguard Worker; LINUX-THUMB2-LABEL: frameaddr_index3: 83*9880d681SAndroid Build Coastguard Worker; LINUX-THUMB2: str r7, [sp, #-4]! 84*9880d681SAndroid Build Coastguard Worker; LINUX-THUMB2: mov r7, sp 85*9880d681SAndroid Build Coastguard Worker; LINUX-THUMB2: mov r0, r7 86*9880d681SAndroid Build Coastguard Worker; LINUX-THUMB2: ldr r0, [r0] 87*9880d681SAndroid Build Coastguard Worker; LINUX-THUMB2: ldr r0, [r0] 88*9880d681SAndroid Build Coastguard Worker; LINUX-THUMB2: ldr r0, [r0] 89*9880d681SAndroid Build Coastguard Worker 90*9880d681SAndroid Build Coastguard Worker %0 = call i8* @llvm.frameaddress(i32 3) 91*9880d681SAndroid Build Coastguard Worker ret i8* %0 92*9880d681SAndroid Build Coastguard Worker} 93*9880d681SAndroid Build Coastguard Worker 94*9880d681SAndroid Build Coastguard Workerdeclare i8* @llvm.frameaddress(i32) nounwind readnone 95