1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py 2; RUN: llc < %s -mtriple=ve-unknown-unknown -mattr=+vpu | FileCheck %s 3 4declare void @llvm.experimental.vp.strided.store.v256f32.p0.i64(<256 x float> %val, ptr %ptr, i64 %stride, <256 x i1> %mask, i32 %evl) 5 6define fastcc void @vp_strided_store_v256f32_rrm(<256 x float> %val, ptr %ptr, i64 %stride, <256 x i1> %mask, i32 %evl) { 7; CHECK-LABEL: vp_strided_store_v256f32_rrm: 8; CHECK: # %bb.0: 9; CHECK-NEXT: and %s2, %s2, (32)0 10; CHECK-NEXT: lvl %s2 11; CHECK-NEXT: vstu %v0, %s1, %s0, %vm1 12; CHECK-NEXT: b.l.t (, %s10) 13 call void @llvm.experimental.vp.strided.store.v256f32.p0.i64(<256 x float> %val, ptr %ptr, i64 %stride, <256 x i1> %mask, i32 %evl) 14 ret void 15} 16 17define fastcc void @vp_strided_store_v256f32_rr(<256 x float> %val, ptr %ptr, i64 %stride, i32 %evl) { 18; CHECK-LABEL: vp_strided_store_v256f32_rr: 19; CHECK: # %bb.0: 20; CHECK-NEXT: and %s2, %s2, (32)0 21; CHECK-NEXT: lvl %s2 22; CHECK-NEXT: vstu %v0, %s1, %s0 23; CHECK-NEXT: b.l.t (, %s10) 24 %one = insertelement <256 x i1> undef, i1 1, i32 0 25 %allones = shufflevector <256 x i1> %one, <256 x i1> undef, <256 x i32> zeroinitializer 26 call void @llvm.experimental.vp.strided.store.v256f32.p0.i64(<256 x float> %val, ptr %ptr, i64 %stride, <256 x i1> %allones, i32 %evl) 27 ret void 28} 29 30define fastcc void @vp_strided_store_v256f32_ri(<256 x float> %val, ptr %ptr, i32 %evl) { 31; CHECK-LABEL: vp_strided_store_v256f32_ri: 32; CHECK: # %bb.0: 33; CHECK-NEXT: and %s1, %s1, (32)0 34; CHECK-NEXT: lvl %s1 35; CHECK-NEXT: vstu %v0, 24, %s0 36; CHECK-NEXT: b.l.t (, %s10) 37 %one = insertelement <256 x i1> undef, i1 1, i32 0 38 %allones = shufflevector <256 x i1> %one, <256 x i1> undef, <256 x i32> zeroinitializer 39 call void @llvm.experimental.vp.strided.store.v256f32.p0.i64(<256 x float> %val, ptr %ptr, i64 24, <256 x i1> %allones, i32 %evl) 40 ret void 41} 42 43declare void @llvm.experimental.vp.strided.store.v256i32.p0.i64(<256 x i32> %val, ptr %ptr, i64 %stride, <256 x i1> %mask, i32 %evl) 44 45define fastcc void @vp_strided_store_v256i32_rrm(<256 x i32> %val, ptr %ptr, i64 %stride, <256 x i1> %mask, i32 %evl) { 46; CHECK-LABEL: vp_strided_store_v256i32_rrm: 47; CHECK: # %bb.0: 48; CHECK-NEXT: and %s2, %s2, (32)0 49; CHECK-NEXT: lvl %s2 50; CHECK-NEXT: vstl %v0, %s1, %s0, %vm1 51; CHECK-NEXT: b.l.t (, %s10) 52 call void @llvm.experimental.vp.strided.store.v256i32.p0.i64(<256 x i32> %val, ptr %ptr, i64 %stride, <256 x i1> %mask, i32 %evl) 53 ret void 54} 55 56define fastcc void @vp_strided_store_v256i32_rr(<256 x i32> %val, ptr %ptr, i64 %stride, i32 %evl) { 57; CHECK-LABEL: vp_strided_store_v256i32_rr: 58; CHECK: # %bb.0: 59; CHECK-NEXT: and %s2, %s2, (32)0 60; CHECK-NEXT: lvl %s2 61; CHECK-NEXT: vstl %v0, %s1, %s0 62; CHECK-NEXT: b.l.t (, %s10) 63 %one = insertelement <256 x i1> undef, i1 1, i32 0 64 %allones = shufflevector <256 x i1> %one, <256 x i1> undef, <256 x i32> zeroinitializer 65 call void @llvm.experimental.vp.strided.store.v256i32.p0.i64(<256 x i32> %val, ptr %ptr, i64 %stride, <256 x i1> %allones, i32 %evl) 66 ret void 67} 68 69define fastcc void @vp_strided_store_v256i32_ri(<256 x i32> %val, ptr %ptr, i32 %evl) { 70; CHECK-LABEL: vp_strided_store_v256i32_ri: 71; CHECK: # %bb.0: 72; CHECK-NEXT: and %s1, %s1, (32)0 73; CHECK-NEXT: lvl %s1 74; CHECK-NEXT: vstl %v0, 24, %s0 75; CHECK-NEXT: b.l.t (, %s10) 76 %one = insertelement <256 x i1> undef, i1 1, i32 0 77 %allones = shufflevector <256 x i1> %one, <256 x i1> undef, <256 x i32> zeroinitializer 78 call void @llvm.experimental.vp.strided.store.v256i32.p0.i64(<256 x i32> %val, ptr %ptr, i64 24, <256 x i1> %allones, i32 %evl) 79 ret void 80} 81 82declare void @llvm.experimental.vp.strided.store.v256f64.p0.i64(<256 x double> %val, ptr %ptr, i64 %stride, <256 x i1> %mask, i32 %evl) 83 84define fastcc void @vp_strided_store_v256f64_rrm(<256 x double> %val, ptr %ptr, i64 %stride, <256 x i1> %mask, i32 %evl) { 85; CHECK-LABEL: vp_strided_store_v256f64_rrm: 86; CHECK: # %bb.0: 87; CHECK-NEXT: and %s2, %s2, (32)0 88; CHECK-NEXT: lvl %s2 89; CHECK-NEXT: vst %v0, %s1, %s0, %vm1 90; CHECK-NEXT: b.l.t (, %s10) 91 call void @llvm.experimental.vp.strided.store.v256f64.p0.i64(<256 x double> %val, ptr %ptr, i64 %stride, <256 x i1> %mask, i32 %evl) 92 ret void 93} 94 95define fastcc void @vp_strided_store_v256f64_rr(<256 x double> %val, ptr %ptr, i64 %stride, i32 %evl) { 96; CHECK-LABEL: vp_strided_store_v256f64_rr: 97; CHECK: # %bb.0: 98; CHECK-NEXT: and %s2, %s2, (32)0 99; CHECK-NEXT: lvl %s2 100; CHECK-NEXT: vst %v0, %s1, %s0 101; CHECK-NEXT: b.l.t (, %s10) 102 %one = insertelement <256 x i1> undef, i1 1, i32 0 103 %allones = shufflevector <256 x i1> %one, <256 x i1> undef, <256 x i32> zeroinitializer 104 call void @llvm.experimental.vp.strided.store.v256f64.p0.i64(<256 x double> %val, ptr %ptr, i64 %stride, <256 x i1> %allones, i32 %evl) 105 ret void 106} 107 108define fastcc void @vp_strided_store_v256f64_ri(<256 x double> %val, ptr %ptr, i32 %evl) { 109; CHECK-LABEL: vp_strided_store_v256f64_ri: 110; CHECK: # %bb.0: 111; CHECK-NEXT: and %s1, %s1, (32)0 112; CHECK-NEXT: lvl %s1 113; CHECK-NEXT: vst %v0, 24, %s0 114; CHECK-NEXT: b.l.t (, %s10) 115 %one = insertelement <256 x i1> undef, i1 1, i32 0 116 %allones = shufflevector <256 x i1> %one, <256 x i1> undef, <256 x i32> zeroinitializer 117 call void @llvm.experimental.vp.strided.store.v256f64.p0.i64(<256 x double> %val, ptr %ptr, i64 24, <256 x i1> %allones, i32 %evl) 118 ret void 119} 120 121declare void @llvm.experimental.vp.strided.store.v256i64.p0.i64(<256 x i64> %val, ptr %ptr, i64 %stride, <256 x i1> %mask, i32 %evl) 122 123define fastcc void @vp_strided_store_v256i64_rrm(<256 x i64> %val, ptr %ptr, i64 %stride, <256 x i1> %mask, i32 %evl) { 124; CHECK-LABEL: vp_strided_store_v256i64_rrm: 125; CHECK: # %bb.0: 126; CHECK-NEXT: and %s2, %s2, (32)0 127; CHECK-NEXT: lvl %s2 128; CHECK-NEXT: vst %v0, %s1, %s0, %vm1 129; CHECK-NEXT: b.l.t (, %s10) 130 call void @llvm.experimental.vp.strided.store.v256i64.p0.i64(<256 x i64> %val, ptr %ptr, i64 %stride, <256 x i1> %mask, i32 %evl) 131 ret void 132} 133 134define fastcc void @vp_strided_store_v256i64_rr(<256 x i64> %val, ptr %ptr, i64 %stride, i32 %evl) { 135; CHECK-LABEL: vp_strided_store_v256i64_rr: 136; CHECK: # %bb.0: 137; CHECK-NEXT: and %s2, %s2, (32)0 138; CHECK-NEXT: lvl %s2 139; CHECK-NEXT: vst %v0, %s1, %s0 140; CHECK-NEXT: b.l.t (, %s10) 141 %one = insertelement <256 x i1> undef, i1 1, i32 0 142 %allones = shufflevector <256 x i1> %one, <256 x i1> undef, <256 x i32> zeroinitializer 143 call void @llvm.experimental.vp.strided.store.v256i64.p0.i64(<256 x i64> %val, ptr %ptr, i64 %stride, <256 x i1> %allones, i32 %evl) 144 ret void 145} 146 147define fastcc void @vp_strided_store_v256i64_ri(<256 x i64> %val, ptr %ptr, i32 %evl) { 148; CHECK-LABEL: vp_strided_store_v256i64_ri: 149; CHECK: # %bb.0: 150; CHECK-NEXT: and %s1, %s1, (32)0 151; CHECK-NEXT: lvl %s1 152; CHECK-NEXT: vst %v0, 24, %s0 153; CHECK-NEXT: b.l.t (, %s10) 154 %one = insertelement <256 x i1> undef, i1 1, i32 0 155 %allones = shufflevector <256 x i1> %one, <256 x i1> undef, <256 x i32> zeroinitializer 156 call void @llvm.experimental.vp.strided.store.v256i64.p0.i64(<256 x i64> %val, ptr %ptr, i64 24, <256 x i1> %allones, i32 %evl) 157 ret void 158} 159