130 lines · plain
1; RUN: llc < %s -mtriple=thumbv7s-apple-ios7.0.0 | FileCheck %s2 3define arm_aapcs_vfpcc { <8 x half>, <8 x half> } @f1() {4; CHECK-LABEL: _f15; CHECK: vpush {d8, d9, d10, d11}6; CHECK-NEXT: vmov.i32 q8, #0x07; CHECK-NEXT: vmov.u16 r0, d16[0]8; CHECK-NEXT: vmov d4, r0, r09; CHECK-NEXT: vmov.u16 r0, d16[1]10; CHECK-NEXT: vmov d8, r0, r011; CHECK-NEXT: vmov.u16 r0, d16[2]12; CHECK-NEXT: vmov d5, r0, r013; CHECK-NEXT: vmov.u16 r0, d16[3]14; CHECK-NEXT: vmov d9, r0, r015; CHECK-NEXT: vmov.u16 r0, d17[0]16; CHECK-NEXT: vmov d6, r0, r017; CHECK-NEXT: vmov.u16 r0, d17[1]18; CHECK-NEXT: vmov d10, r0, r019; CHECK-NEXT: vmov.u16 r0, d17[2]20; CHECK-NEXT: vmov d7, r0, r021; CHECK-NEXT: vmov.u16 r0, d17[3]22; CHECK-NEXT: vmov d11, r0, r023; CHECK: vmov.f32 s0, s824; CHECK: vmov.f32 s1, s1625; CHECK: vmov.f32 s2, s1026; CHECK: vmov.f32 s3, s1827; CHECK: vmov.f32 s4, s1228; CHECK: vmov.f32 s5, s2029; CHECK: vmov.f32 s6, s1430; CHECK: vmov.f32 s7, s2231; CHECK: vmov.f32 s9, s1632; CHECK: vmov.f32 s11, s1833; CHECK: vmov.f32 s13, s2034; CHECK: vmov.f32 s15, s2235; CHECK: vpop {d8, d9, d10, d11}36; CHECK-NEXT: bx lr37 38 ret { <8 x half>, <8 x half> } zeroinitializer39}40 41define swiftcc { <8 x half>, <8 x half> } @f2() {42; CHECK-LABEL: _f243; CHECK: vpush {d8, d9, d10, d11}44; CHECK-NEXT: vmov.i32 q8, #0x045; CHECK-NEXT: vmov.u16 r0, d16[0]46; CHECK-NEXT: vmov d4, r0, r047; CHECK-NEXT: vmov.u16 r0, d16[1]48; CHECK-NEXT: vmov d8, r0, r049; CHECK-NEXT: vmov.u16 r0, d16[2]50; CHECK-NEXT: vmov d5, r0, r051; CHECK-NEXT: vmov.u16 r0, d16[3]52; CHECK-NEXT: vmov d9, r0, r053; CHECK-NEXT: vmov.u16 r0, d17[0]54; CHECK-NEXT: vmov d6, r0, r055; CHECK-NEXT: vmov.u16 r0, d17[1]56; CHECK-NEXT: vmov d10, r0, r057; CHECK-NEXT: vmov.u16 r0, d17[2]58; CHECK-NEXT: vmov d7, r0, r059; CHECK-NEXT: vmov.u16 r0, d17[3]60; CHECK-NEXT: vmov d11, r0, r061; CHECK: vmov.f32 s0, s862; CHECK: vmov.f32 s1, s1663; CHECK: vmov.f32 s2, s1064; CHECK: vmov.f32 s3, s1865; CHECK: vmov.f32 s4, s1266; CHECK: vmov.f32 s5, s2067; CHECK: vmov.f32 s6, s1468; CHECK: vmov.f32 s7, s2269; CHECK: vmov.f32 s9, s1670; CHECK: vmov.f32 s11, s1871; CHECK: vmov.f32 s13, s2072; CHECK: vmov.f32 s15, s2273; CHECK-NEXT: vpop {d8, d9, d10, d11}74; CHECK-NEXT: bx lr75 76 ret { <8 x half>, <8 x half> } zeroinitializer77}78 79define fastcc { <8 x half>, <8 x half> } @f3() {80; CHECK-LABEL: _f381; CHECK: vpush {d8, d9, d10, d11}82; CHECK-NEXT: vmov.i32 q8, #0x083; CHECK-NEXT: vmov.u16 r0, d16[0]84; CHECK-NEXT: vmov d4, r0, r085; CHECK-NEXT: vmov.u16 r0, d16[1]86; CHECK-NEXT: vmov d8, r0, r087; CHECK-NEXT: vmov.u16 r0, d16[2]88; CHECK-NEXT: vmov d5, r0, r089; CHECK-NEXT: vmov.u16 r0, d16[3]90; CHECK-NEXT: vmov d9, r0, r091; CHECK-NEXT: vmov.u16 r0, d17[0]92; CHECK-NEXT: vmov d6, r0, r093; CHECK-NEXT: vmov.u16 r0, d17[1]94; CHECK-NEXT: vmov d10, r0, r095; CHECK-NEXT: vmov.u16 r0, d17[2]96; CHECK-NEXT: vmov d7, r0, r097; CHECK-NEXT: vmov.u16 r0, d17[3]98; CHECK-NEXT: vmov d11, r0, r099; CHECK: vmov.f32 s0, s8100; CHECK: vmov.f32 s1, s16101; CHECK: vmov.f32 s2, s10102; CHECK: vmov.f32 s3, s18103; CHECK: vmov.f32 s4, s12104; CHECK: vmov.f32 s5, s20105; CHECK: vmov.f32 s6, s14106; CHECK: vmov.f32 s7, s22107; CHECK: vmov.f32 s9, s16108; CHECK: vmov.f32 s11, s18109; CHECK: vmov.f32 s13, s20110; CHECK: vmov.f32 s15, s22111; CHECK-NEXT: vpop {d8, d9, d10, d11}112; CHECK-NEXT: bx lr113 114 ret { <8 x half>, <8 x half> } zeroinitializer115}116 117define void @extract_insert(ptr %dst) optnone noinline {118; CHECK-LABEL: extract_insert:119; CHECK: vmov.i32 d0, #0x0120; CHECK: vcvtb.f16.f32 s0, s0121; CHECK: vmov r1, s0122; CHECK: strh r1, [r0]123 %splat.splatinsert = insertelement <1 x half> zeroinitializer, half 0xH0000, i32 0124 br label %next125 126next:127 store <1 x half> %splat.splatinsert, ptr %dst128 ret void129}130