blob: 5bc35eea1e889c2b4b406c2e5fd25d54ac5b3f64 [file] [log] [blame]
Evan Chengafff9412011-12-20 18:26:50 +00001; RUN: llc < %s -O0 -fast-isel-abort -relocation-model=dynamic-no-pic -mtriple=armv7-apple-ios | FileCheck %s --check-prefix=ARM
2; RUN: llc < %s -O0 -fast-isel-abort -relocation-model=dynamic-no-pic -mtriple=thumbv7-apple-ios | FileCheck %s --check-prefix=THUMB
Chad Rosier11add262011-11-11 23:31:03 +00003
4@message1 = global [60 x i8] c"The LLVM Compiler Infrastructure\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00\00", align 1
5@temp = common global [60 x i8] zeroinitializer, align 1
6
7define void @t1() nounwind ssp {
8; ARM: t1
Jakob Stoklund Olesen45ca7c62012-01-07 01:47:05 +00009; ARM: movw r0, :lower16:_message1
10; ARM: movt r0, :upper16:_message1
Chad Rosier11add262011-11-11 23:31:03 +000011; ARM: add r0, r0, #5
12; ARM: movw r1, #64
13; ARM: movw r2, #10
14; ARM: uxtb r1, r1
Chad Rosier9eb67482011-11-13 09:44:21 +000015; ARM: bl _memset
Chad Rosier11add262011-11-11 23:31:03 +000016; THUMB: t1
Jakob Stoklund Olesen45ca7c62012-01-07 01:47:05 +000017; THUMB: movw r0, :lower16:_message1
18; THUMB: movt r0, :upper16:_message1
Chad Rosier11add262011-11-11 23:31:03 +000019; THUMB: adds r0, #5
20; THUMB: movs r1, #64
21; THUMB: movt r1, #0
22; THUMB: movs r2, #10
23; THUMB: movt r2, #0
24; THUMB: uxtb r1, r1
25; THUMB: bl _memset
26 call void @llvm.memset.p0i8.i32(i8* getelementptr inbounds ([60 x i8]* @message1, i32 0, i32 5), i8 64, i32 10, i32 1, i1 false)
27 ret void
28}
29
30declare void @llvm.memset.p0i8.i32(i8* nocapture, i8, i32, i32, i1) nounwind
31
32define void @t2() nounwind ssp {
33; ARM: t2
Jakob Stoklund Olesen45ca7c62012-01-07 01:47:05 +000034; ARM: movw r0, :lower16:L_temp$non_lazy_ptr
35; ARM: movt r0, :upper16:L_temp$non_lazy_ptr
Chad Rosier11add262011-11-11 23:31:03 +000036; ARM: ldr r0, [r0]
37; ARM: add r1, r0, #4
38; ARM: add r0, r0, #16
Chad Rosier909cb4f2011-11-14 22:46:17 +000039; ARM: movw r2, #17
Chad Rosier11add262011-11-11 23:31:03 +000040; ARM: str r0, [sp] @ 4-byte Spill
41; ARM: mov r0, r1
42; ARM: ldr r1, [sp] @ 4-byte Reload
Chad Rosier9eb67482011-11-13 09:44:21 +000043; ARM: bl _memcpy
Chad Rosier11add262011-11-11 23:31:03 +000044; THUMB: t2
Jakob Stoklund Olesen45ca7c62012-01-07 01:47:05 +000045; THUMB: movw r0, :lower16:L_temp$non_lazy_ptr
46; THUMB: movt r0, :upper16:L_temp$non_lazy_ptr
Chad Rosier11add262011-11-11 23:31:03 +000047; THUMB: ldr r0, [r0]
48; THUMB: adds r1, r0, #4
49; THUMB: adds r0, #16
Chad Rosier909cb4f2011-11-14 22:46:17 +000050; THUMB: movs r2, #17
Chad Rosier11add262011-11-11 23:31:03 +000051; THUMB: movt r2, #0
52; THUMB: mov r0, r1
53; THUMB: bl _memcpy
Chad Rosier909cb4f2011-11-14 22:46:17 +000054 call void @llvm.memcpy.p0i8.p0i8.i32(i8* getelementptr inbounds ([60 x i8]* @temp, i32 0, i32 4), i8* getelementptr inbounds ([60 x i8]* @temp, i32 0, i32 16), i32 17, i32 1, i1 false)
Chad Rosier11add262011-11-11 23:31:03 +000055 ret void
56}
57
58declare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture, i8* nocapture, i32, i32, i1) nounwind
59
60define void @t3() nounwind ssp {
61; ARM: t3
Jakob Stoklund Olesen45ca7c62012-01-07 01:47:05 +000062; ARM: movw r0, :lower16:L_temp$non_lazy_ptr
63; ARM: movt r0, :upper16:L_temp$non_lazy_ptr
Chad Rosier11add262011-11-11 23:31:03 +000064; ARM: ldr r0, [r0]
65; ARM: add r1, r0, #4
66; ARM: add r0, r0, #16
67; ARM: movw r2, #10
68; ARM: mov r0, r1
Chad Rosier9eb67482011-11-13 09:44:21 +000069; ARM: bl _memmove
Chad Rosier11add262011-11-11 23:31:03 +000070; THUMB: t3
Jakob Stoklund Olesen45ca7c62012-01-07 01:47:05 +000071; THUMB: movw r0, :lower16:L_temp$non_lazy_ptr
72; THUMB: movt r0, :upper16:L_temp$non_lazy_ptr
Chad Rosier11add262011-11-11 23:31:03 +000073; THUMB: ldr r0, [r0]
74; THUMB: adds r1, r0, #4
75; THUMB: adds r0, #16
76; THUMB: movs r2, #10
77; THUMB: movt r2, #0
78; THUMB: mov r0, r1
79; THUMB: bl _memmove
80 call void @llvm.memmove.p0i8.p0i8.i32(i8* getelementptr inbounds ([60 x i8]* @temp, i32 0, i32 4), i8* getelementptr inbounds ([60 x i8]* @temp, i32 0, i32 16), i32 10, i32 1, i1 false)
81 ret void
82}
83
Chad Rosier909cb4f2011-11-14 22:46:17 +000084define void @t4() nounwind ssp {
85; ARM: t4
Jakob Stoklund Olesen45ca7c62012-01-07 01:47:05 +000086; ARM: movw r0, :lower16:L_temp$non_lazy_ptr
87; ARM: movt r0, :upper16:L_temp$non_lazy_ptr
Chad Rosier909cb4f2011-11-14 22:46:17 +000088; ARM: ldr r0, [r0]
Jakob Stoklund Olesen45ca7c62012-01-07 01:47:05 +000089; ARM: movw r1, :lower16:L_temp$non_lazy_ptr
90; ARM: movt r1, :upper16:L_temp$non_lazy_ptr
Chad Rosier909cb4f2011-11-14 22:46:17 +000091; ARM: ldr r1, [r1]
92; ARM: ldr r2, [r1, #16]
93; ARM: str r2, [r0, #4]
94; ARM: ldr r2, [r1, #20]
95; ARM: str r2, [r0, #8]
96; ARM: ldrh r1, [r1, #24]
97; ARM: strh r1, [r0, #12]
98; ARM: bx lr
Jakob Stoklund Olesen45ca7c62012-01-07 01:47:05 +000099; THUMB: movw r0, :lower16:L_temp$non_lazy_ptr
100; THUMB: movt r0, :upper16:L_temp$non_lazy_ptr
Chad Rosier909cb4f2011-11-14 22:46:17 +0000101; THUMB: ldr r0, [r0]
Jakob Stoklund Olesen45ca7c62012-01-07 01:47:05 +0000102; THUMB: movw r1, :lower16:L_temp$non_lazy_ptr
103; THUMB: movt r1, :upper16:L_temp$non_lazy_ptr
Chad Rosier909cb4f2011-11-14 22:46:17 +0000104; THUMB: ldr r1, [r1]
105; THUMB: ldr r2, [r1, #16]
106; THUMB: str r2, [r0, #4]
107; THUMB: ldr r2, [r1, #20]
108; THUMB: str r2, [r0, #8]
109; THUMB: ldrh r1, [r1, #24]
110; THUMB: strh r1, [r0, #12]
111; THUMB: bx lr
112 call void @llvm.memcpy.p0i8.p0i8.i32(i8* getelementptr inbounds ([60 x i8]* @temp, i32 0, i32 4), i8* getelementptr inbounds ([60 x i8]* @temp, i32 0, i32 16), i32 10, i32 1, i1 false)
113 ret void
114}
115
Chad Rosier11add262011-11-11 23:31:03 +0000116declare void @llvm.memmove.p0i8.p0i8.i32(i8* nocapture, i8* nocapture, i32, i32, i1) nounwind