1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -O0 -fast-isel-abort=1 -relocation-model=dynamic-no-pic -mtriple=armv7-apple-ios -verify-machineinstrs | FileCheck %s --check-prefix=ARM --check-prefix=ARM-MACHO 2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -O0 -fast-isel-abort=1 -relocation-model=dynamic-no-pic -mtriple=armv7-linux-gnueabi -verify-machineinstrs | FileCheck %s --check-prefix=ARM --check-prefix=ARM-ELF 3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -O0 -fast-isel-abort=1 -relocation-model=dynamic-no-pic -mtriple=thumbv7-apple-ios -verify-machineinstrs | FileCheck %s --check-prefix=THUMB 4*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -O0 -fast-isel-abort=1 -relocation-model=dynamic-no-pic -mtriple=armv7-apple-ios -mattr=+long-calls -verify-machineinstrs | FileCheck %s --check-prefix=ARM-LONG --check-prefix=ARM-LONG-MACHO 5*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -O0 -fast-isel-abort=1 -relocation-model=dynamic-no-pic -mtriple=armv7-linux-gnueabi -mattr=+long-calls -verify-machineinstrs | FileCheck %s --check-prefix=ARM-LONG --check-prefix=ARM-LONG-ELF 6*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -O0 -fast-isel-abort=1 -relocation-model=dynamic-no-pic -mtriple=thumbv7-apple-ios -mattr=+long-calls -verify-machineinstrs | FileCheck %s --check-prefix=THUMB-LONG 7*9880d681SAndroid Build Coastguard Worker 8*9880d681SAndroid Build Coastguard Worker; Note that some of these tests assume that relocations are either 9*9880d681SAndroid Build Coastguard Worker; movw/movt or constant pool loads. Different platforms will select 10*9880d681SAndroid Build Coastguard Worker; different approaches. 11*9880d681SAndroid Build Coastguard Worker 12*9880d681SAndroid Build Coastguard Worker@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 13*9880d681SAndroid Build Coastguard Worker@temp = common global [60 x i8] zeroinitializer, align 1 14*9880d681SAndroid Build Coastguard Worker 15*9880d681SAndroid Build Coastguard Workerdefine void @t1() nounwind ssp { 16*9880d681SAndroid Build Coastguard Worker; ARM-LABEL: t1: 17*9880d681SAndroid Build Coastguard Worker; ARM: {{(movw r0, :lower16:_?message1)|(ldr r0, .LCPI)}} 18*9880d681SAndroid Build Coastguard Worker; ARM: {{(movt r0, :upper16:_?message1)|(ldr r0, \[r0\])}} 19*9880d681SAndroid Build Coastguard Worker; ARM: add r0, r0, #5 20*9880d681SAndroid Build Coastguard Worker; ARM: movw r1, #64 21*9880d681SAndroid Build Coastguard Worker; ARM: movw r2, #10 22*9880d681SAndroid Build Coastguard Worker; ARM: and r1, r1, #255 23*9880d681SAndroid Build Coastguard Worker; ARM: bl {{_?}}memset 24*9880d681SAndroid Build Coastguard Worker; ARM-LONG-LABEL: t1: 25*9880d681SAndroid Build Coastguard Worker 26*9880d681SAndroid Build Coastguard Worker; ARM-LONG-MACHO: {{(movw r3, :lower16:L_memset\$non_lazy_ptr)|(ldr r3, .LCPI)}} 27*9880d681SAndroid Build Coastguard Worker; ARM-LONG-MACHO: {{(movt r3, :upper16:L_memset\$non_lazy_ptr)?}} 28*9880d681SAndroid Build Coastguard Worker; ARM-LONG-MACHO: ldr r3, [r3] 29*9880d681SAndroid Build Coastguard Worker 30*9880d681SAndroid Build Coastguard Worker; ARM-LONG-ELF: movw r3, :lower16:memset 31*9880d681SAndroid Build Coastguard Worker; ARM-LONG-ELF: movt r3, :upper16:memset 32*9880d681SAndroid Build Coastguard Worker 33*9880d681SAndroid Build Coastguard Worker; ARM-LONG: blx r3 34*9880d681SAndroid Build Coastguard Worker; THUMB-LABEL: t1: 35*9880d681SAndroid Build Coastguard Worker; THUMB: {{(movw r0, :lower16:_?message1)|(ldr.n r0, .LCPI)}} 36*9880d681SAndroid Build Coastguard Worker; THUMB: {{(movt r0, :upper16:_?message1)|(ldr r0, \[r0\])}} 37*9880d681SAndroid Build Coastguard Worker; THUMB: adds r0, #5 38*9880d681SAndroid Build Coastguard Worker; THUMB: movs r1, #64 39*9880d681SAndroid Build Coastguard Worker; THUMB: movs r2, #10 40*9880d681SAndroid Build Coastguard Worker; THUMB: and r1, r1, #255 41*9880d681SAndroid Build Coastguard Worker; THUMB: bl {{_?}}memset 42*9880d681SAndroid Build Coastguard Worker; THUMB-LONG-LABEL: t1: 43*9880d681SAndroid Build Coastguard Worker; THUMB-LONG: movw r3, :lower16:L_memset$non_lazy_ptr 44*9880d681SAndroid Build Coastguard Worker; THUMB-LONG: movt r3, :upper16:L_memset$non_lazy_ptr 45*9880d681SAndroid Build Coastguard Worker; THUMB-LONG: ldr r3, [r3] 46*9880d681SAndroid Build Coastguard Worker; THUMB-LONG: blx r3 47*9880d681SAndroid Build Coastguard Worker call void @llvm.memset.p0i8.i32(i8* getelementptr inbounds ([60 x i8], [60 x i8]* @message1, i32 0, i32 5), i8 64, i32 10, i32 4, i1 false) 48*9880d681SAndroid Build Coastguard Worker ret void 49*9880d681SAndroid Build Coastguard Worker} 50*9880d681SAndroid Build Coastguard Worker 51*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.memset.p0i8.i32(i8* nocapture, i8, i32, i32, i1) nounwind 52*9880d681SAndroid Build Coastguard Worker 53*9880d681SAndroid Build Coastguard Workerdefine void @t2() nounwind ssp { 54*9880d681SAndroid Build Coastguard Worker; ARM-LABEL: t2: 55*9880d681SAndroid Build Coastguard Worker 56*9880d681SAndroid Build Coastguard Worker; ARM-MACHO: {{(movw r0, :lower16:L_temp\$non_lazy_ptr)|(ldr r0, .LCPI)}} 57*9880d681SAndroid Build Coastguard Worker; ARM-MACHO: {{(movt r0, :upper16:L_temp\$non_lazy_ptr)?}} 58*9880d681SAndroid Build Coastguard Worker; ARM-MACHO: ldr r0, [r0] 59*9880d681SAndroid Build Coastguard Worker 60*9880d681SAndroid Build Coastguard Worker; ARM-ELF: movw r0, :lower16:temp 61*9880d681SAndroid Build Coastguard Worker; ARM-ELF: movt r0, :upper16:temp 62*9880d681SAndroid Build Coastguard Worker 63*9880d681SAndroid Build Coastguard Worker; ARM: add r1, r0, #4 64*9880d681SAndroid Build Coastguard Worker; ARM: add r0, r0, #16 65*9880d681SAndroid Build Coastguard Worker; ARM: movw r2, #17 66*9880d681SAndroid Build Coastguard Worker; ARM: str r0, [sp[[SLOT:[, #0-9]*]]] @ 4-byte Spill 67*9880d681SAndroid Build Coastguard Worker; ARM: mov r0, r1 68*9880d681SAndroid Build Coastguard Worker; ARM: ldr r1, [sp[[SLOT]]] @ 4-byte Reload 69*9880d681SAndroid Build Coastguard Worker; ARM: bl {{_?}}memcpy 70*9880d681SAndroid Build Coastguard Worker; ARM-LONG-LABEL: t2: 71*9880d681SAndroid Build Coastguard Worker 72*9880d681SAndroid Build Coastguard Worker; ARM-LONG-MACHO: {{(movw r3, :lower16:L_memcpy\$non_lazy_ptr)|(ldr r3, .LCPI)}} 73*9880d681SAndroid Build Coastguard Worker; ARM-LONG-MACHO: {{(movt r3, :upper16:L_memcpy\$non_lazy_ptr)?}} 74*9880d681SAndroid Build Coastguard Worker; ARM-LONG-MACHO: ldr r3, [r3] 75*9880d681SAndroid Build Coastguard Worker 76*9880d681SAndroid Build Coastguard Worker; ARM-LONG-ELF: movw r3, :lower16:memcpy 77*9880d681SAndroid Build Coastguard Worker; ARM-LONG-ELF: movt r3, :upper16:memcpy 78*9880d681SAndroid Build Coastguard Worker 79*9880d681SAndroid Build Coastguard Worker; ARM-LONG: blx r3 80*9880d681SAndroid Build Coastguard Worker; THUMB-LABEL: t2: 81*9880d681SAndroid Build Coastguard Worker; THUMB: {{(movw r0, :lower16:L_temp\$non_lazy_ptr)|(ldr.n r0, .LCPI)}} 82*9880d681SAndroid Build Coastguard Worker; THUMB: {{(movt r0, :upper16:L_temp\$non_lazy_ptr)?}} 83*9880d681SAndroid Build Coastguard Worker; THUMB: ldr r0, [r0] 84*9880d681SAndroid Build Coastguard Worker; THUMB: adds r1, r0, #4 85*9880d681SAndroid Build Coastguard Worker; THUMB: adds r0, #16 86*9880d681SAndroid Build Coastguard Worker; THUMB: movs r2, #17 87*9880d681SAndroid Build Coastguard Worker; THUMB: str r0, [sp[[SLOT:[, #0-9]*]]] @ 4-byte Spill 88*9880d681SAndroid Build Coastguard Worker; THUMB: mov r0, r1 89*9880d681SAndroid Build Coastguard Worker; THUMB: ldr r1, [sp[[SLOT]]] @ 4-byte Reload 90*9880d681SAndroid Build Coastguard Worker; THUMB: bl {{_?}}memcpy 91*9880d681SAndroid Build Coastguard Worker; THUMB-LONG-LABEL: t2: 92*9880d681SAndroid Build Coastguard Worker; THUMB-LONG: movw r3, :lower16:L_memcpy$non_lazy_ptr 93*9880d681SAndroid Build Coastguard Worker; THUMB-LONG: movt r3, :upper16:L_memcpy$non_lazy_ptr 94*9880d681SAndroid Build Coastguard Worker; THUMB-LONG: ldr r3, [r3] 95*9880d681SAndroid Build Coastguard Worker; THUMB-LONG: blx r3 96*9880d681SAndroid Build Coastguard Worker call void @llvm.memcpy.p0i8.p0i8.i32(i8* getelementptr inbounds ([60 x i8], [60 x i8]* @temp, i32 0, i32 4), i8* getelementptr inbounds ([60 x i8], [60 x i8]* @temp, i32 0, i32 16), i32 17, i32 4, i1 false) 97*9880d681SAndroid Build Coastguard Worker ret void 98*9880d681SAndroid Build Coastguard Worker} 99*9880d681SAndroid Build Coastguard Worker 100*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.memcpy.p0i8.p0i8.i32(i8* nocapture, i8* nocapture, i32, i32, i1) nounwind 101*9880d681SAndroid Build Coastguard Worker 102*9880d681SAndroid Build Coastguard Workerdefine void @t3() nounwind ssp { 103*9880d681SAndroid Build Coastguard Worker; ARM-LABEL: t3: 104*9880d681SAndroid Build Coastguard Worker 105*9880d681SAndroid Build Coastguard Worker; ARM-MACHO: {{(movw r0, :lower16:L_temp\$non_lazy_ptr)|(ldr r0, .LCPI)}} 106*9880d681SAndroid Build Coastguard Worker; ARM-MACHO: {{(movt r0, :upper16:L_temp\$non_lazy_ptr)?}} 107*9880d681SAndroid Build Coastguard Worker; ARM-MACHO: ldr r0, [r0] 108*9880d681SAndroid Build Coastguard Worker 109*9880d681SAndroid Build Coastguard Worker; ARM-ELF: movw r0, :lower16:temp 110*9880d681SAndroid Build Coastguard Worker; ARM-ELF: movt r0, :upper16:temp 111*9880d681SAndroid Build Coastguard Worker 112*9880d681SAndroid Build Coastguard Worker 113*9880d681SAndroid Build Coastguard Worker; ARM: add r1, r0, #4 114*9880d681SAndroid Build Coastguard Worker; ARM: add r0, r0, #16 115*9880d681SAndroid Build Coastguard Worker; ARM: movw r2, #10 116*9880d681SAndroid Build Coastguard Worker; ARM: mov r0, r1 117*9880d681SAndroid Build Coastguard Worker; ARM: bl {{_?}}memmove 118*9880d681SAndroid Build Coastguard Worker; ARM-LONG-LABEL: t3: 119*9880d681SAndroid Build Coastguard Worker 120*9880d681SAndroid Build Coastguard Worker; ARM-LONG-MACHO: {{(movw r3, :lower16:L_memmove\$non_lazy_ptr)|(ldr r3, .LCPI)}} 121*9880d681SAndroid Build Coastguard Worker; ARM-LONG-MACHO: {{(movt r3, :upper16:L_memmove\$non_lazy_ptr)?}} 122*9880d681SAndroid Build Coastguard Worker; ARM-LONG-MACHO: ldr r3, [r3] 123*9880d681SAndroid Build Coastguard Worker 124*9880d681SAndroid Build Coastguard Worker; ARM-LONG-ELF: movw r3, :lower16:memmove 125*9880d681SAndroid Build Coastguard Worker; ARM-LONG-ELF: movt r3, :upper16:memmove 126*9880d681SAndroid Build Coastguard Worker 127*9880d681SAndroid Build Coastguard Worker; ARM-LONG: blx r3 128*9880d681SAndroid Build Coastguard Worker; THUMB-LABEL: t3: 129*9880d681SAndroid Build Coastguard Worker; THUMB: {{(movw r0, :lower16:L_temp\$non_lazy_ptr)|(ldr.n r0, .LCPI)}} 130*9880d681SAndroid Build Coastguard Worker; THUMB: {{(movt r0, :upper16:L_temp\$non_lazy_ptr)?}} 131*9880d681SAndroid Build Coastguard Worker; THUMB: ldr r0, [r0] 132*9880d681SAndroid Build Coastguard Worker; THUMB: adds r1, r0, #4 133*9880d681SAndroid Build Coastguard Worker; THUMB: adds r0, #16 134*9880d681SAndroid Build Coastguard Worker; THUMB: movs r2, #10 135*9880d681SAndroid Build Coastguard Worker; THUMB: str r0, [sp[[SLOT:[, #0-9]*]]] @ 4-byte Spill 136*9880d681SAndroid Build Coastguard Worker; THUMB: mov r0, r1 137*9880d681SAndroid Build Coastguard Worker; THUMB: ldr r1, [sp[[SLOT]]] @ 4-byte Reload 138*9880d681SAndroid Build Coastguard Worker; THUMB: bl {{_?}}memmove 139*9880d681SAndroid Build Coastguard Worker; THUMB-LONG-LABEL: t3: 140*9880d681SAndroid Build Coastguard Worker; THUMB-LONG: movw r3, :lower16:L_memmove$non_lazy_ptr 141*9880d681SAndroid Build Coastguard Worker; THUMB-LONG: movt r3, :upper16:L_memmove$non_lazy_ptr 142*9880d681SAndroid Build Coastguard Worker; THUMB-LONG: ldr r3, [r3] 143*9880d681SAndroid Build Coastguard Worker; THUMB-LONG: blx r3 144*9880d681SAndroid Build Coastguard Worker call void @llvm.memmove.p0i8.p0i8.i32(i8* getelementptr inbounds ([60 x i8], [60 x i8]* @temp, i32 0, i32 4), i8* getelementptr inbounds ([60 x i8], [60 x i8]* @temp, i32 0, i32 16), i32 10, i32 1, i1 false) 145*9880d681SAndroid Build Coastguard Worker ret void 146*9880d681SAndroid Build Coastguard Worker} 147*9880d681SAndroid Build Coastguard Worker 148*9880d681SAndroid Build Coastguard Workerdefine void @t4() nounwind ssp { 149*9880d681SAndroid Build Coastguard Worker; ARM-LABEL: t4: 150*9880d681SAndroid Build Coastguard Worker 151*9880d681SAndroid Build Coastguard Worker; ARM-MACHO: {{(movw r0, :lower16:L_temp\$non_lazy_ptr)|(ldr r0, .LCPI)}} 152*9880d681SAndroid Build Coastguard Worker; ARM-MACHO: {{(movt r0, :upper16:L_temp\$non_lazy_ptr)?}} 153*9880d681SAndroid Build Coastguard Worker; ARM-MACHO: ldr r0, [r0] 154*9880d681SAndroid Build Coastguard Worker 155*9880d681SAndroid Build Coastguard Worker; ARM-ELF: movw r0, :lower16:temp 156*9880d681SAndroid Build Coastguard Worker; ARM-ELF: movt r0, :upper16:temp 157*9880d681SAndroid Build Coastguard Worker 158*9880d681SAndroid Build Coastguard Worker; ARM: ldr r1, [r0, #16] 159*9880d681SAndroid Build Coastguard Worker; ARM: str r1, [r0, #4] 160*9880d681SAndroid Build Coastguard Worker; ARM: ldr r1, [r0, #20] 161*9880d681SAndroid Build Coastguard Worker; ARM: str r1, [r0, #8] 162*9880d681SAndroid Build Coastguard Worker; ARM: ldrh r1, [r0, #24] 163*9880d681SAndroid Build Coastguard Worker; ARM: strh r1, [r0, #12] 164*9880d681SAndroid Build Coastguard Worker; ARM: bx lr 165*9880d681SAndroid Build Coastguard Worker; THUMB-LABEL: t4: 166*9880d681SAndroid Build Coastguard Worker; THUMB: {{(movw r0, :lower16:L_temp\$non_lazy_ptr)|(ldr.n r0, .LCPI)}} 167*9880d681SAndroid Build Coastguard Worker; THUMB: {{(movt r0, :upper16:L_temp\$non_lazy_ptr)?}} 168*9880d681SAndroid Build Coastguard Worker; THUMB: ldr r0, [r0] 169*9880d681SAndroid Build Coastguard Worker; THUMB: ldr r1, [r0, #16] 170*9880d681SAndroid Build Coastguard Worker; THUMB: str r1, [r0, #4] 171*9880d681SAndroid Build Coastguard Worker; THUMB: ldr r1, [r0, #20] 172*9880d681SAndroid Build Coastguard Worker; THUMB: str r1, [r0, #8] 173*9880d681SAndroid Build Coastguard Worker; THUMB: ldrh r1, [r0, #24] 174*9880d681SAndroid Build Coastguard Worker; THUMB: strh r1, [r0, #12] 175*9880d681SAndroid Build Coastguard Worker; THUMB: bx lr 176*9880d681SAndroid Build Coastguard Worker call void @llvm.memcpy.p0i8.p0i8.i32(i8* getelementptr inbounds ([60 x i8], [60 x i8]* @temp, i32 0, i32 4), i8* getelementptr inbounds ([60 x i8], [60 x i8]* @temp, i32 0, i32 16), i32 10, i32 4, i1 false) 177*9880d681SAndroid Build Coastguard Worker ret void 178*9880d681SAndroid Build Coastguard Worker} 179*9880d681SAndroid Build Coastguard Worker 180*9880d681SAndroid Build Coastguard Workerdeclare void @llvm.memmove.p0i8.p0i8.i32(i8* nocapture, i8* nocapture, i32, i32, i1) nounwind 181*9880d681SAndroid Build Coastguard Worker 182*9880d681SAndroid Build Coastguard Workerdefine void @t5() nounwind ssp { 183*9880d681SAndroid Build Coastguard Worker; ARM-LABEL: t5: 184*9880d681SAndroid Build Coastguard Worker 185*9880d681SAndroid Build Coastguard Worker; ARM-MACHO: {{(movw r0, :lower16:L_temp\$non_lazy_ptr)|(ldr r0, .LCPI)}} 186*9880d681SAndroid Build Coastguard Worker; ARM-MACHO: {{(movt r0, :upper16:L_temp\$non_lazy_ptr)?}} 187*9880d681SAndroid Build Coastguard Worker; ARM-MACHO: ldr r0, [r0] 188*9880d681SAndroid Build Coastguard Worker 189*9880d681SAndroid Build Coastguard Worker; ARM-ELF: movw r0, :lower16:temp 190*9880d681SAndroid Build Coastguard Worker; ARM-ELF: movt r0, :upper16:temp 191*9880d681SAndroid Build Coastguard Worker 192*9880d681SAndroid Build Coastguard Worker; ARM: ldrh r1, [r0, #16] 193*9880d681SAndroid Build Coastguard Worker; ARM: strh r1, [r0, #4] 194*9880d681SAndroid Build Coastguard Worker; ARM: ldrh r1, [r0, #18] 195*9880d681SAndroid Build Coastguard Worker; ARM: strh r1, [r0, #6] 196*9880d681SAndroid Build Coastguard Worker; ARM: ldrh r1, [r0, #20] 197*9880d681SAndroid Build Coastguard Worker; ARM: strh r1, [r0, #8] 198*9880d681SAndroid Build Coastguard Worker; ARM: ldrh r1, [r0, #22] 199*9880d681SAndroid Build Coastguard Worker; ARM: strh r1, [r0, #10] 200*9880d681SAndroid Build Coastguard Worker; ARM: ldrh r1, [r0, #24] 201*9880d681SAndroid Build Coastguard Worker; ARM: strh r1, [r0, #12] 202*9880d681SAndroid Build Coastguard Worker; ARM: bx lr 203*9880d681SAndroid Build Coastguard Worker; THUMB-LABEL: t5: 204*9880d681SAndroid Build Coastguard Worker; THUMB: {{(movw r0, :lower16:L_temp\$non_lazy_ptr)|(ldr.n r0, .LCPI)}} 205*9880d681SAndroid Build Coastguard Worker; THUMB: {{(movt r0, :upper16:L_temp\$non_lazy_ptr)?}} 206*9880d681SAndroid Build Coastguard Worker; THUMB: ldr r0, [r0] 207*9880d681SAndroid Build Coastguard Worker; THUMB: ldrh r1, [r0, #16] 208*9880d681SAndroid Build Coastguard Worker; THUMB: strh r1, [r0, #4] 209*9880d681SAndroid Build Coastguard Worker; THUMB: ldrh r1, [r0, #18] 210*9880d681SAndroid Build Coastguard Worker; THUMB: strh r1, [r0, #6] 211*9880d681SAndroid Build Coastguard Worker; THUMB: ldrh r1, [r0, #20] 212*9880d681SAndroid Build Coastguard Worker; THUMB: strh r1, [r0, #8] 213*9880d681SAndroid Build Coastguard Worker; THUMB: ldrh r1, [r0, #22] 214*9880d681SAndroid Build Coastguard Worker; THUMB: strh r1, [r0, #10] 215*9880d681SAndroid Build Coastguard Worker; THUMB: ldrh r1, [r0, #24] 216*9880d681SAndroid Build Coastguard Worker; THUMB: strh r1, [r0, #12] 217*9880d681SAndroid Build Coastguard Worker; THUMB: bx lr 218*9880d681SAndroid Build Coastguard Worker call void @llvm.memcpy.p0i8.p0i8.i32(i8* getelementptr inbounds ([60 x i8], [60 x i8]* @temp, i32 0, i32 4), i8* getelementptr inbounds ([60 x i8], [60 x i8]* @temp, i32 0, i32 16), i32 10, i32 2, i1 false) 219*9880d681SAndroid Build Coastguard Worker ret void 220*9880d681SAndroid Build Coastguard Worker} 221*9880d681SAndroid Build Coastguard Worker 222*9880d681SAndroid Build Coastguard Workerdefine void @t6() nounwind ssp { 223*9880d681SAndroid Build Coastguard Worker; ARM-LABEL: t6: 224*9880d681SAndroid Build Coastguard Worker 225*9880d681SAndroid Build Coastguard Worker; ARM-MACHO: {{(movw r0, :lower16:L_temp\$non_lazy_ptr)|(ldr r0, .LCPI)}} 226*9880d681SAndroid Build Coastguard Worker; ARM-MACHO: {{(movt r0, :upper16:L_temp\$non_lazy_ptr)?}} 227*9880d681SAndroid Build Coastguard Worker; ARM-MACHO: ldr r0, [r0] 228*9880d681SAndroid Build Coastguard Worker 229*9880d681SAndroid Build Coastguard Worker; ARM-ELF: movw r0, :lower16:temp 230*9880d681SAndroid Build Coastguard Worker; ARM-ELF: movt r0, :upper16:temp 231*9880d681SAndroid Build Coastguard Worker 232*9880d681SAndroid Build Coastguard Worker; ARM: ldrb r1, [r0, #16] 233*9880d681SAndroid Build Coastguard Worker; ARM: strb r1, [r0, #4] 234*9880d681SAndroid Build Coastguard Worker; ARM: ldrb r1, [r0, #17] 235*9880d681SAndroid Build Coastguard Worker; ARM: strb r1, [r0, #5] 236*9880d681SAndroid Build Coastguard Worker; ARM: ldrb r1, [r0, #18] 237*9880d681SAndroid Build Coastguard Worker; ARM: strb r1, [r0, #6] 238*9880d681SAndroid Build Coastguard Worker; ARM: ldrb r1, [r0, #19] 239*9880d681SAndroid Build Coastguard Worker; ARM: strb r1, [r0, #7] 240*9880d681SAndroid Build Coastguard Worker; ARM: ldrb r1, [r0, #20] 241*9880d681SAndroid Build Coastguard Worker; ARM: strb r1, [r0, #8] 242*9880d681SAndroid Build Coastguard Worker; ARM: ldrb r1, [r0, #21] 243*9880d681SAndroid Build Coastguard Worker; ARM: strb r1, [r0, #9] 244*9880d681SAndroid Build Coastguard Worker; ARM: ldrb r1, [r0, #22] 245*9880d681SAndroid Build Coastguard Worker; ARM: strb r1, [r0, #10] 246*9880d681SAndroid Build Coastguard Worker; ARM: ldrb r1, [r0, #23] 247*9880d681SAndroid Build Coastguard Worker; ARM: strb r1, [r0, #11] 248*9880d681SAndroid Build Coastguard Worker; ARM: ldrb r1, [r0, #24] 249*9880d681SAndroid Build Coastguard Worker; ARM: strb r1, [r0, #12] 250*9880d681SAndroid Build Coastguard Worker; ARM: ldrb r1, [r0, #25] 251*9880d681SAndroid Build Coastguard Worker; ARM: strb r1, [r0, #13] 252*9880d681SAndroid Build Coastguard Worker; ARM: bx lr 253*9880d681SAndroid Build Coastguard Worker; THUMB-LABEL: t6: 254*9880d681SAndroid Build Coastguard Worker; THUMB: {{(movw r0, :lower16:L_temp\$non_lazy_ptr)|(ldr.n r0, .LCPI)}} 255*9880d681SAndroid Build Coastguard Worker; THUMB: {{(movt r0, :upper16:L_temp\$non_lazy_ptr)?}} 256*9880d681SAndroid Build Coastguard Worker; THUMB: ldr r0, [r0] 257*9880d681SAndroid Build Coastguard Worker; THUMB: ldrb r1, [r0, #16] 258*9880d681SAndroid Build Coastguard Worker; THUMB: strb r1, [r0, #4] 259*9880d681SAndroid Build Coastguard Worker; THUMB: ldrb r1, [r0, #17] 260*9880d681SAndroid Build Coastguard Worker; THUMB: strb r1, [r0, #5] 261*9880d681SAndroid Build Coastguard Worker; THUMB: ldrb r1, [r0, #18] 262*9880d681SAndroid Build Coastguard Worker; THUMB: strb r1, [r0, #6] 263*9880d681SAndroid Build Coastguard Worker; THUMB: ldrb r1, [r0, #19] 264*9880d681SAndroid Build Coastguard Worker; THUMB: strb r1, [r0, #7] 265*9880d681SAndroid Build Coastguard Worker; THUMB: ldrb r1, [r0, #20] 266*9880d681SAndroid Build Coastguard Worker; THUMB: strb r1, [r0, #8] 267*9880d681SAndroid Build Coastguard Worker; THUMB: ldrb r1, [r0, #21] 268*9880d681SAndroid Build Coastguard Worker; THUMB: strb r1, [r0, #9] 269*9880d681SAndroid Build Coastguard Worker; THUMB: ldrb r1, [r0, #22] 270*9880d681SAndroid Build Coastguard Worker; THUMB: strb r1, [r0, #10] 271*9880d681SAndroid Build Coastguard Worker; THUMB: ldrb r1, [r0, #23] 272*9880d681SAndroid Build Coastguard Worker; THUMB: strb r1, [r0, #11] 273*9880d681SAndroid Build Coastguard Worker; THUMB: ldrb r1, [r0, #24] 274*9880d681SAndroid Build Coastguard Worker; THUMB: strb r1, [r0, #12] 275*9880d681SAndroid Build Coastguard Worker; THUMB: ldrb r1, [r0, #25] 276*9880d681SAndroid Build Coastguard Worker; THUMB: strb r1, [r0, #13] 277*9880d681SAndroid Build Coastguard Worker; THUMB: bx lr 278*9880d681SAndroid Build Coastguard Worker call void @llvm.memcpy.p0i8.p0i8.i32(i8* getelementptr inbounds ([60 x i8], [60 x i8]* @temp, i32 0, i32 4), i8* getelementptr inbounds ([60 x i8], [60 x i8]* @temp, i32 0, i32 16), i32 10, i32 1, i1 false) 279*9880d681SAndroid Build Coastguard Worker ret void 280*9880d681SAndroid Build Coastguard Worker} 281*9880d681SAndroid Build Coastguard Worker 282*9880d681SAndroid Build Coastguard Worker; rdar://13202135 283*9880d681SAndroid Build Coastguard Workerdefine void @t7() nounwind ssp { 284*9880d681SAndroid Build Coastguard Worker; Just make sure this doesn't assert when we have an odd length and an alignment of 2. 285*9880d681SAndroid Build Coastguard Worker call void @llvm.memcpy.p0i8.p0i8.i32(i8* getelementptr inbounds ([60 x i8], [60 x i8]* @temp, i32 0, i32 4), i8* getelementptr inbounds ([60 x i8], [60 x i8]* @temp, i32 0, i32 16), i32 3, i32 2, i1 false) 286*9880d681SAndroid Build Coastguard Worker ret void 287*9880d681SAndroid Build Coastguard Worker} 288*9880d681SAndroid Build Coastguard Worker 289*9880d681SAndroid Build Coastguard Workerdefine i32 @t8(i32 %x) nounwind { 290*9880d681SAndroid Build Coastguard Workerentry: 291*9880d681SAndroid Build Coastguard Worker; ARM-LABEL: t8: 292*9880d681SAndroid Build Coastguard Worker; ARM-NOT: FastISel missed call: %expval = call i32 @llvm.expect.i32(i32 %x, i32 1) 293*9880d681SAndroid Build Coastguard Worker; THUMB-LABEL: t8: 294*9880d681SAndroid Build Coastguard Worker; THUMB-NOT: FastISel missed call: %expval = call i32 @llvm.expect.i32(i32 %x, i32 1) 295*9880d681SAndroid Build Coastguard Worker %expval = call i32 @llvm.expect.i32(i32 %x, i32 1) 296*9880d681SAndroid Build Coastguard Worker ret i32 %expval 297*9880d681SAndroid Build Coastguard Worker} 298*9880d681SAndroid Build Coastguard Worker 299*9880d681SAndroid Build Coastguard Workerdeclare i32 @llvm.expect.i32(i32, i32) nounwind readnone 300