1; RUN: not llc --mtriple=loongarch64 --mattr=+lsx < %s 2>&1 | FileCheck %s 2 3declare void @llvm.loongarch.lsx.vstelm.b(<16 x i8>, ptr, i32, i32) 4 5define void @lsx_vstelm_b_lo(<16 x i8> %va, ptr %p) nounwind { 6; CHECK: llvm.loongarch.lsx.vstelm.b: argument out of range 7entry: 8 call void @llvm.loongarch.lsx.vstelm.b(<16 x i8> %va, ptr %p, i32 -129, i32 15) 9 ret void 10} 11 12define void @lsx_vstelm_b_hi(<16 x i8> %va, ptr %p) nounwind { 13; CHECK: llvm.loongarch.lsx.vstelm.b: argument out of range 14entry: 15 call void @llvm.loongarch.lsx.vstelm.b(<16 x i8> %va, ptr %p, i32 128, i32 15) 16 ret void 17} 18 19define void @lsx_vstelm_b_idx_lo(<16 x i8> %va, ptr %p) nounwind { 20; CHECK: llvm.loongarch.lsx.vstelm.b: argument out of range 21entry: 22 call void @llvm.loongarch.lsx.vstelm.b(<16 x i8> %va, ptr %p, i32 1, i32 -1) 23 ret void 24} 25 26define void @lsx_vstelm_b_idx_hi(<16 x i8> %va, ptr %p) nounwind { 27; CHECK: llvm.loongarch.lsx.vstelm.b: argument out of range 28entry: 29 call void @llvm.loongarch.lsx.vstelm.b(<16 x i8> %va, ptr %p, i32 1, i32 16) 30 ret void 31} 32 33declare void @llvm.loongarch.lsx.vstelm.h(<8 x i16>, ptr, i32, i32) 34 35define void @lsx_vstelm_h_lo(<8 x i16> %va, ptr %p) nounwind { 36; CHECK: llvm.loongarch.lsx.vstelm.h: argument out of range or not a multiple of 2. 37entry: 38 call void @llvm.loongarch.lsx.vstelm.h(<8 x i16> %va, ptr %p, i32 -258, i32 7) 39 ret void 40} 41 42define void @lsx_vstelm_h_hi(<8 x i16> %va, ptr %p) nounwind { 43; CHECK: llvm.loongarch.lsx.vstelm.h: argument out of range or not a multiple of 2. 44entry: 45 call void @llvm.loongarch.lsx.vstelm.h(<8 x i16> %va, ptr %p, i32 256, i32 7) 46 ret void 47} 48 49define void @lsx_vstelm_h_idx_lo(<8 x i16> %va, ptr %p) nounwind { 50; CHECK: llvm.loongarch.lsx.vstelm.h: argument out of range or not a multiple of 2. 51entry: 52 call void @llvm.loongarch.lsx.vstelm.h(<8 x i16> %va, ptr %p, i32 2, i32 -1) 53 ret void 54} 55 56define void @lsx_vstelm_h_idx_hi(<8 x i16> %va, ptr %p) nounwind { 57; CHECK: llvm.loongarch.lsx.vstelm.h: argument out of range or not a multiple of 2. 58entry: 59 call void @llvm.loongarch.lsx.vstelm.h(<8 x i16> %va, ptr %p, i32 2, i32 8) 60 ret void 61} 62 63declare void @llvm.loongarch.lsx.vstelm.w(<4 x i32>, ptr, i32, i32) 64 65define void @lsx_vstelm_w_lo(<4 x i32> %va, ptr %p) nounwind { 66; CHECK: llvm.loongarch.lsx.vstelm.w: argument out of range or not a multiple of 4. 67entry: 68 call void @llvm.loongarch.lsx.vstelm.w(<4 x i32> %va, ptr %p, i32 -516, i32 3) 69 ret void 70} 71 72define void @lsx_vstelm_w_hi(<4 x i32> %va, ptr %p) nounwind { 73; CHECK: llvm.loongarch.lsx.vstelm.w: argument out of range or not a multiple of 4. 74entry: 75 call void @llvm.loongarch.lsx.vstelm.w(<4 x i32> %va, ptr %p, i32 512, i32 3) 76 ret void 77} 78 79define void @lsx_vstelm_w_idx_lo(<4 x i32> %va, ptr %p) nounwind { 80; CHECK: llvm.loongarch.lsx.vstelm.w: argument out of range or not a multiple of 4. 81entry: 82 call void @llvm.loongarch.lsx.vstelm.w(<4 x i32> %va, ptr %p, i32 4, i32 -1) 83 ret void 84} 85 86define void @lsx_vstelm_w_idx_hi(<4 x i32> %va, ptr %p) nounwind { 87; CHECK: llvm.loongarch.lsx.vstelm.w: argument out of range or not a multiple of 4. 88entry: 89 call void @llvm.loongarch.lsx.vstelm.w(<4 x i32> %va, ptr %p, i32 4, i32 4) 90 ret void 91} 92 93declare void @llvm.loongarch.lsx.vstelm.d(<2 x i64>, ptr, i32, i32) 94 95define void @lsx_vstelm_d_lo(<2 x i64> %va, ptr %p) nounwind { 96; CHECK: llvm.loongarch.lsx.vstelm.d: argument out of range or not a multiple of 8. 97entry: 98 call void @llvm.loongarch.lsx.vstelm.d(<2 x i64> %va, ptr %p, i32 -1032, i32 1) 99 ret void 100} 101 102define void @lsx_vstelm_d_hi(<2 x i64> %va, ptr %p) nounwind { 103; CHECK: llvm.loongarch.lsx.vstelm.d: argument out of range or not a multiple of 8. 104entry: 105 call void @llvm.loongarch.lsx.vstelm.d(<2 x i64> %va, ptr %p, i32 1024, i32 1) 106 ret void 107} 108 109define void @lsx_vstelm_d_idx_lo(<2 x i64> %va, ptr %p) nounwind { 110; CHECK: llvm.loongarch.lsx.vstelm.d: argument out of range or not a multiple of 8. 111entry: 112 call void @llvm.loongarch.lsx.vstelm.d(<2 x i64> %va, ptr %p, i32 8, i32 -1) 113 ret void 114} 115 116define void @lsx_vstelm_d_idx_hi(<2 x i64> %va, ptr %p) nounwind { 117; CHECK: llvm.loongarch.lsx.vstelm.d: argument out of range or not a multiple of 8. 118entry: 119 call void @llvm.loongarch.lsx.vstelm.d(<2 x i64> %va, ptr %p, i32 8, i32 2) 120 ret void 121} 122