blob: ff00cd887fbdd036048fa3126e667c4a32233f26 [file] [log] [blame]
Mehdi Amini945a6602015-02-27 18:32:11 +00001; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort=1 -mtriple=armv7-apple-ios | FileCheck %s --check-prefix=DARWIN-ARM
2; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort=1 -mtriple=armv7-linux-gnueabi | FileCheck %s --check-prefix=LINUX-ARM
3; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort=1 -mtriple=thumbv7-apple-ios | FileCheck %s --check-prefix=DARWIN-THUMB2
4; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort=1 -mtriple=thumbv7-linux-gnueabi | FileCheck %s --check-prefix=LINUX-THUMB2
Chad Rosier820d248c2012-05-30 17:23:22 +00005
6define i8* @frameaddr_index0() nounwind {
7entry:
Stephen Lind24ab202013-07-14 06:24:09 +00008; DARWIN-ARM-LABEL: frameaddr_index0:
Oliver Stannard9aa6f012016-08-23 09:19:22 +00009; DARWIN-ARM: push {r7, lr}
Chad Rosier820d248c2012-05-30 17:23:22 +000010; DARWIN-ARM: mov r7, sp
11; DARWIN-ARM: mov r0, r7
12
Stephen Lind24ab202013-07-14 06:24:09 +000013; DARWIN-THUMB2-LABEL: frameaddr_index0:
Oliver Stannard9aa6f012016-08-23 09:19:22 +000014; DARWIN-THUMB2: push {r7, lr}
Chad Rosier820d248c2012-05-30 17:23:22 +000015; DARWIN-THUMB2: mov r7, sp
16; DARWIN-THUMB2: mov r0, r7
17
Stephen Lind24ab202013-07-14 06:24:09 +000018; LINUX-ARM-LABEL: frameaddr_index0:
Oliver Stannard9aa6f012016-08-23 09:19:22 +000019; LINUX-ARM: push {r11, lr}
Chad Rosier820d248c2012-05-30 17:23:22 +000020; LINUX-ARM: mov r11, sp
21; LINUX-ARM: mov r0, r11
22
Stephen Lind24ab202013-07-14 06:24:09 +000023; LINUX-THUMB2-LABEL: frameaddr_index0:
Oliver Stannard9aa6f012016-08-23 09:19:22 +000024; LINUX-THUMB2: push {r7, lr}
Chad Rosier820d248c2012-05-30 17:23:22 +000025; 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:
Stephen Lind24ab202013-07-14 06:24:09 +000034; DARWIN-ARM-LABEL: frameaddr_index1:
Oliver Stannard9aa6f012016-08-23 09:19:22 +000035; DARWIN-ARM: push {r7, lr}
Chad Rosier820d248c2012-05-30 17:23:22 +000036; DARWIN-ARM: mov r7, sp
Tim Northoverd6a729b2014-01-06 14:28:05 +000037; DARWIN-ARM: ldr r0, [r7]
Chad Rosier820d248c2012-05-30 17:23:22 +000038
Stephen Lind24ab202013-07-14 06:24:09 +000039; DARWIN-THUMB2-LABEL: frameaddr_index1:
Oliver Stannard9aa6f012016-08-23 09:19:22 +000040; DARWIN-THUMB2: push {r7, lr}
Chad Rosier820d248c2012-05-30 17:23:22 +000041; DARWIN-THUMB2: mov r7, sp
Tim Northoverd6a729b2014-01-06 14:28:05 +000042; DARWIN-THUMB2: ldr r0, [r7]
Chad Rosier820d248c2012-05-30 17:23:22 +000043
Stephen Lind24ab202013-07-14 06:24:09 +000044; LINUX-ARM-LABEL: frameaddr_index1:
Oliver Stannard9aa6f012016-08-23 09:19:22 +000045; LINUX-ARM: push {r11, lr}
Chad Rosier820d248c2012-05-30 17:23:22 +000046; LINUX-ARM: mov r11, sp
JF Bastien18db1f22013-06-14 02:49:43 +000047; LINUX-ARM: ldr r0, [r11]
Chad Rosier820d248c2012-05-30 17:23:22 +000048
Stephen Lind24ab202013-07-14 06:24:09 +000049; LINUX-THUMB2-LABEL: frameaddr_index1:
Oliver Stannard9aa6f012016-08-23 09:19:22 +000050; LINUX-THUMB2: push {r7, lr}
Chad Rosier820d248c2012-05-30 17:23:22 +000051; LINUX-THUMB2: mov r7, sp
52; LINUX-THUMB2: mov r0, r7
53; LINUX-THUMB2: ldr r0, [r0]
54
55 %0 = call i8* @llvm.frameaddress(i32 1)
56 ret i8* %0
57}
58
59define i8* @frameaddr_index3() nounwind {
60entry:
Stephen Lind24ab202013-07-14 06:24:09 +000061; DARWIN-ARM-LABEL: frameaddr_index3:
Oliver Stannard9aa6f012016-08-23 09:19:22 +000062; DARWIN-ARM: push {r7, lr}
Chad Rosier820d248c2012-05-30 17:23:22 +000063; DARWIN-ARM: mov r7, sp
Tim Northoverd6a729b2014-01-06 14:28:05 +000064; DARWIN-ARM: ldr r0, [r7]
Chad Rosier820d248c2012-05-30 17:23:22 +000065; DARWIN-ARM: ldr r0, [r0]
66; DARWIN-ARM: ldr r0, [r0]
67
Stephen Lind24ab202013-07-14 06:24:09 +000068; DARWIN-THUMB2-LABEL: frameaddr_index3:
Oliver Stannard9aa6f012016-08-23 09:19:22 +000069; DARWIN-THUMB2: push {r7, lr}
Chad Rosier820d248c2012-05-30 17:23:22 +000070; DARWIN-THUMB2: mov r7, sp
Tim Northoverd6a729b2014-01-06 14:28:05 +000071; DARWIN-THUMB2: ldr r0, [r7]
Chad Rosier820d248c2012-05-30 17:23:22 +000072; DARWIN-THUMB2: ldr r0, [r0]
73; DARWIN-THUMB2: ldr r0, [r0]
74
Stephen Lind24ab202013-07-14 06:24:09 +000075; LINUX-ARM-LABEL: frameaddr_index3:
Oliver Stannard9aa6f012016-08-23 09:19:22 +000076; LINUX-ARM: push {r11, lr}
Chad Rosier820d248c2012-05-30 17:23:22 +000077; LINUX-ARM: mov r11, sp
JF Bastien18db1f22013-06-14 02:49:43 +000078; LINUX-ARM: ldr r0, [r11]
Chad Rosier820d248c2012-05-30 17:23:22 +000079; LINUX-ARM: ldr r0, [r0]
80; LINUX-ARM: ldr r0, [r0]
81
Stephen Lind24ab202013-07-14 06:24:09 +000082; LINUX-THUMB2-LABEL: frameaddr_index3:
Oliver Stannard9aa6f012016-08-23 09:19:22 +000083; LINUX-THUMB2: push {r7, lr}
Chad Rosier820d248c2012-05-30 17:23:22 +000084; LINUX-THUMB2: mov r7, sp
85; LINUX-THUMB2: mov r0, r7
86; LINUX-THUMB2: ldr r0, [r0]
87; LINUX-THUMB2: ldr r0, [r0]
88; LINUX-THUMB2: ldr r0, [r0]
89
90 %0 = call i8* @llvm.frameaddress(i32 3)
91 ret i8* %0
92}
93
94declare i8* @llvm.frameaddress(i32) nounwind readnone