• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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