1; RUN: llc < %s -mtriple=thumbv7s-apple-ios7.0.0 | FileCheck %s 2 3define arm_aapcs_vfpcc { <8 x half>, <8 x half> } @f1() { 4; CHECK-LABEL: _f1 5; CHECK: vpush {d8, d9, d10, d11} 6; CHECK-NEXT: vmov.i32 q8, #0x0 7; CHECK-NEXT: vmov.u16 r0, d16[0] 8; CHECK-NEXT: vmov d4, r0, r0 9; CHECK-NEXT: vmov.u16 r0, d16[1] 10; CHECK-NEXT: vmov d8, r0, r0 11; CHECK-NEXT: vmov.u16 r0, d16[2] 12; CHECK-NEXT: vmov d5, r0, r0 13; CHECK-NEXT: vmov.u16 r0, d16[3] 14; CHECK-NEXT: vmov d9, r0, r0 15; CHECK-NEXT: vmov.u16 r0, d17[0] 16; CHECK-NEXT: vmov d6, r0, r0 17; CHECK-NEXT: vmov.u16 r0, d17[1] 18; CHECK-NEXT: vmov d10, r0, r0 19; CHECK-NEXT: vmov.u16 r0, d17[2] 20; CHECK-NEXT: vmov d7, r0, r0 21; CHECK-NEXT: vmov.u16 r0, d17[3] 22; CHECK-NEXT: vmov d11, r0, r0 23; CHECK: vmov.f32 s0, s8 24; CHECK: vmov.f32 s1, s16 25; CHECK: vmov.f32 s2, s10 26; CHECK: vmov.f32 s3, s18 27; CHECK: vmov.f32 s4, s12 28; CHECK: vmov.f32 s5, s20 29; CHECK: vmov.f32 s6, s14 30; CHECK: vmov.f32 s7, s22 31; CHECK: vmov.f32 s9, s16 32; CHECK: vmov.f32 s11, s18 33; CHECK: vmov.f32 s13, s20 34; CHECK: vmov.f32 s15, s22 35; CHECK: vpop {d8, d9, d10, d11} 36; CHECK-NEXT: bx lr 37 38 ret { <8 x half>, <8 x half> } zeroinitializer 39} 40 41define swiftcc { <8 x half>, <8 x half> } @f2() { 42; CHECK-LABEL: _f2 43; CHECK: vpush {d8, d9, d10, d11} 44; CHECK-NEXT: vmov.i32 q8, #0x0 45; CHECK-NEXT: vmov.u16 r0, d16[0] 46; CHECK-NEXT: vmov d4, r0, r0 47; CHECK-NEXT: vmov.u16 r0, d16[1] 48; CHECK-NEXT: vmov d8, r0, r0 49; CHECK-NEXT: vmov.u16 r0, d16[2] 50; CHECK-NEXT: vmov d5, r0, r0 51; CHECK-NEXT: vmov.u16 r0, d16[3] 52; CHECK-NEXT: vmov d9, r0, r0 53; CHECK-NEXT: vmov.u16 r0, d17[0] 54; CHECK-NEXT: vmov d6, r0, r0 55; CHECK-NEXT: vmov.u16 r0, d17[1] 56; CHECK-NEXT: vmov d10, r0, r0 57; CHECK-NEXT: vmov.u16 r0, d17[2] 58; CHECK-NEXT: vmov d7, r0, r0 59; CHECK-NEXT: vmov.u16 r0, d17[3] 60; CHECK-NEXT: vmov d11, r0, r0 61; CHECK: vmov.f32 s0, s8 62; CHECK: vmov.f32 s1, s16 63; CHECK: vmov.f32 s2, s10 64; CHECK: vmov.f32 s3, s18 65; CHECK: vmov.f32 s4, s12 66; CHECK: vmov.f32 s5, s20 67; CHECK: vmov.f32 s6, s14 68; CHECK: vmov.f32 s7, s22 69; CHECK: vmov.f32 s9, s16 70; CHECK: vmov.f32 s11, s18 71; CHECK: vmov.f32 s13, s20 72; CHECK: vmov.f32 s15, s22 73; CHECK-NEXT: vpop {d8, d9, d10, d11} 74; CHECK-NEXT: bx lr 75 76 ret { <8 x half>, <8 x half> } zeroinitializer 77} 78 79define fastcc { <8 x half>, <8 x half> } @f3() { 80; CHECK-LABEL: _f3 81; CHECK: vpush {d8, d9, d10, d11} 82; CHECK-NEXT: vmov.i32 q8, #0x0 83; CHECK-NEXT: vmov.u16 r0, d16[0] 84; CHECK-NEXT: vmov d4, r0, r0 85; CHECK-NEXT: vmov.u16 r0, d16[1] 86; CHECK-NEXT: vmov d8, r0, r0 87; CHECK-NEXT: vmov.u16 r0, d16[2] 88; CHECK-NEXT: vmov d5, r0, r0 89; CHECK-NEXT: vmov.u16 r0, d16[3] 90; CHECK-NEXT: vmov d9, r0, r0 91; CHECK-NEXT: vmov.u16 r0, d17[0] 92; CHECK-NEXT: vmov d6, r0, r0 93; CHECK-NEXT: vmov.u16 r0, d17[1] 94; CHECK-NEXT: vmov d10, r0, r0 95; CHECK-NEXT: vmov.u16 r0, d17[2] 96; CHECK-NEXT: vmov d7, r0, r0 97; CHECK-NEXT: vmov.u16 r0, d17[3] 98; CHECK-NEXT: vmov d11, r0, r0 99; CHECK: vmov.f32 s0, s8 100; CHECK: vmov.f32 s1, s16 101; CHECK: vmov.f32 s2, s10 102; CHECK: vmov.f32 s3, s18 103; CHECK: vmov.f32 s4, s12 104; CHECK: vmov.f32 s5, s20 105; CHECK: vmov.f32 s6, s14 106; CHECK: vmov.f32 s7, s22 107; CHECK: vmov.f32 s9, s16 108; CHECK: vmov.f32 s11, s18 109; CHECK: vmov.f32 s13, s20 110; CHECK: vmov.f32 s15, s22 111; CHECK-NEXT: vpop {d8, d9, d10, d11} 112; CHECK-NEXT: bx lr 113 114 ret { <8 x half>, <8 x half> } zeroinitializer 115} 116 117define void @extract_insert(ptr %dst) optnone noinline { 118; CHECK-LABEL: extract_insert: 119; CHECK: vmov.i32 d0, #0x0 120; CHECK: vcvtb.f16.f32 s0, s0 121; CHECK: vmov r1, s0 122; CHECK: strh r1, [r0] 123 %splat.splatinsert = insertelement <1 x half> zeroinitializer, half 0xH0000, i32 0 124 br label %next 125 126next: 127 store <1 x half> %splat.splatinsert, ptr %dst 128 ret void 129} 130