95 lines · plain
1; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort=1 -mtriple=armv7-apple-ios | FileCheck %s --check-prefix=DARWIN-ARM2; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort=1 -mtriple=armv7-linux-gnueabi | FileCheck %s --check-prefix=LINUX-ARM3; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort=1 -mtriple=thumbv7-apple-ios | FileCheck %s --check-prefix=DARWIN-THUMB24; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort=1 -mtriple=thumbv7-linux-gnueabi | FileCheck %s --check-prefix=LINUX-THUMB25 6define ptr @frameaddr_index0() nounwind {7entry:8; DARWIN-ARM-LABEL: frameaddr_index0:9; DARWIN-ARM: push {r7, lr}10; DARWIN-ARM: mov r7, sp11; DARWIN-ARM: mov r0, r712 13; DARWIN-THUMB2-LABEL: frameaddr_index0:14; DARWIN-THUMB2: push {r7, lr}15; DARWIN-THUMB2: mov r7, sp16; DARWIN-THUMB2: mov r0, r717 18; LINUX-ARM-LABEL: frameaddr_index0:19; LINUX-ARM: push {r11}20; LINUX-ARM: mov r11, sp21; LINUX-ARM: mov r0, r1122 23; LINUX-THUMB2-LABEL: frameaddr_index0:24; LINUX-THUMB2: push {r7, lr}25; LINUX-THUMB2: mov r7, sp26; LINUX-THUMB2: mov r0, r727 28 %0 = call ptr @llvm.frameaddress(i32 0)29 ret ptr %030}31 32define ptr @frameaddr_index1() nounwind {33entry:34; DARWIN-ARM-LABEL: frameaddr_index1:35; DARWIN-ARM: push {r7, lr}36; DARWIN-ARM: mov r7, sp37; DARWIN-ARM: ldr r0, [r7]38 39; DARWIN-THUMB2-LABEL: frameaddr_index1:40; DARWIN-THUMB2: push {r7, lr}41; DARWIN-THUMB2: mov r7, sp42; DARWIN-THUMB2: ldr r0, [r7]43 44; LINUX-ARM-LABEL: frameaddr_index1:45; LINUX-ARM: push {r11}46; LINUX-ARM: mov r11, sp47; LINUX-ARM: ldr r0, [r11]48 49; LINUX-THUMB2-LABEL: frameaddr_index1:50; LINUX-THUMB2: push {r7, lr}51; LINUX-THUMB2: mov r7, sp52; LINUX-THUMB2: mov r0, r753; LINUX-THUMB2: ldr r0, [r0]54 55 %0 = call ptr @llvm.frameaddress(i32 1)56 ret ptr %057}58 59define ptr @frameaddr_index3() nounwind {60entry:61; DARWIN-ARM-LABEL: frameaddr_index3:62; DARWIN-ARM: push {r7, lr}63; DARWIN-ARM: mov r7, sp64; DARWIN-ARM: ldr r0, [r7]65; DARWIN-ARM: ldr r0, [r0]66; DARWIN-ARM: ldr r0, [r0]67 68; DARWIN-THUMB2-LABEL: frameaddr_index3:69; DARWIN-THUMB2: push {r7, lr}70; DARWIN-THUMB2: mov r7, sp71; DARWIN-THUMB2: ldr r0, [r7]72; DARWIN-THUMB2: ldr r0, [r0]73; DARWIN-THUMB2: ldr r0, [r0]74 75; LINUX-ARM-LABEL: frameaddr_index3:76; LINUX-ARM: push {r11}77; LINUX-ARM: mov r11, sp78; LINUX-ARM: ldr r0, [r11]79; LINUX-ARM: ldr r0, [r0]80; LINUX-ARM: ldr r0, [r0]81 82; LINUX-THUMB2-LABEL: frameaddr_index3:83; LINUX-THUMB2: push {r7, lr}84; LINUX-THUMB2: mov r7, sp85; LINUX-THUMB2: mov r0, r786; LINUX-THUMB2: ldr r0, [r0]87; LINUX-THUMB2: ldr r0, [r0]88; LINUX-THUMB2: ldr r0, [r0]89 90 %0 = call ptr @llvm.frameaddress(i32 3)91 ret ptr %092}93 94declare ptr @llvm.frameaddress(i32) nounwind readnone95