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