1; RUN: not llc --mtriple=loongarch32 -mattr=+d < %s 2>&1 | FileCheck %s 2 3declare void @llvm.loongarch.cacop.w(i32, i32, i32) 4declare i32 @llvm.loongarch.crc.w.b.w(i32, i32) 5declare i32 @llvm.loongarch.crc.w.h.w(i32, i32) 6declare i32 @llvm.loongarch.crc.w.w.w(i32, i32) 7declare i32 @llvm.loongarch.crc.w.d.w(i64, i32) 8declare i32 @llvm.loongarch.crcc.w.b.w(i32, i32) 9declare i32 @llvm.loongarch.crcc.w.h.w(i32, i32) 10declare i32 @llvm.loongarch.crcc.w.w.w(i32, i32) 11declare i32 @llvm.loongarch.crcc.w.d.w(i64, i32) 12declare i64 @llvm.loongarch.csrrd.d(i32 immarg) 13declare i64 @llvm.loongarch.csrwr.d(i64, i32 immarg) 14declare i64 @llvm.loongarch.csrxchg.d(i64, i64, i32 immarg) 15declare i64 @llvm.loongarch.iocsrrd.d(i32) 16declare void @llvm.loongarch.iocsrwr.d(i64, i32) 17declare void @llvm.loongarch.asrtle.d(i64, i64) 18declare void @llvm.loongarch.asrtgt.d(i64, i64) 19declare i64 @llvm.loongarch.lddir.d(i64, i64 immarg) 20declare void @llvm.loongarch.ldpte.d(i64, i64 immarg) 21 22define void @cacop_arg0_out_of_hi_range(i32 %a) nounwind { 23; CHECK: llvm.loongarch.cacop.w: argument out of range 24entry: 25 call void @llvm.loongarch.cacop.w(i32 32, i32 %a, i32 1024) 26 ret void 27} 28 29define void @cacop_arg0_out_of_lo_range(i32 %a) nounwind { 30; CHECK: llvm.loongarch.cacop.w: argument out of range 31entry: 32 call void @llvm.loongarch.cacop.w(i32 -1, i32 %a, i32 1024) 33 ret void 34} 35 36define void @cacop_arg2_out_of_hi_range(i32 %a) nounwind { 37; CHECK: llvm.loongarch.cacop.w: argument out of range 38entry: 39 call void @llvm.loongarch.cacop.w(i32 1, i32 %a, i32 4096) 40 ret void 41} 42 43define void @cacop_arg2_out_of_lo_range(i32 %a) nounwind { 44; CHECK: llvm.loongarch.cacop.w: argument out of range 45entry: 46 call void @llvm.loongarch.cacop.w(i32 1, i32 %a, i32 -4096) 47 ret void 48} 49 50define i32 @crc_w_b_w(i32 %a, i32 %b) nounwind { 51; CHECK: llvm.loongarch.crc.w.b.w: requires loongarch64 52entry: 53 %res = call i32 @llvm.loongarch.crc.w.b.w(i32 %a, i32 %b) 54 ret i32 %res 55} 56 57define i32 @crc_w_h_w(i32 %a, i32 %b) nounwind { 58; CHECK: llvm.loongarch.crc.w.h.w: requires loongarch64 59entry: 60 %res = call i32 @llvm.loongarch.crc.w.h.w(i32 %a, i32 %b) 61 ret i32 %res 62} 63 64define i32 @crc_w_w_w(i32 %a, i32 %b) nounwind { 65; CHECK: llvm.loongarch.crc.w.w.w: requires loongarch64 66entry: 67 %res = call i32 @llvm.loongarch.crc.w.w.w(i32 %a, i32 %b) 68 ret i32 %res 69} 70 71define i32 @crc_w_d_w(i64 %a, i32 %b) nounwind { 72; CHECK: llvm.loongarch.crc.w.d.w: requires loongarch64 73entry: 74 %res = call i32 @llvm.loongarch.crc.w.d.w(i64 %a, i32 %b) 75 ret i32 %res 76} 77 78define i32 @crcc_w_b_w(i32 %a, i32 %b) nounwind { 79; CHECK: llvm.loongarch.crcc.w.b.w: requires loongarch64 80entry: 81 %res = call i32 @llvm.loongarch.crcc.w.b.w(i32 %a, i32 %b) 82 ret i32 %res 83} 84 85define i32 @crcc_w_h_w(i32 %a, i32 %b) nounwind { 86; CHECK: llvm.loongarch.crcc.w.h.w: requires loongarch64 87entry: 88 %res = call i32 @llvm.loongarch.crcc.w.h.w(i32 %a, i32 %b) 89 ret i32 %res 90} 91 92define i32 @crcc_w_w_w(i32 %a, i32 %b) nounwind { 93; CHECK: llvm.loongarch.crcc.w.w.w: requires loongarch64 94entry: 95 %res = call i32 @llvm.loongarch.crcc.w.w.w(i32 %a, i32 %b) 96 ret i32 %res 97} 98 99define i32 @crcc_w_d_w(i64 %a, i32 %b) nounwind { 100; CHECK: llvm.loongarch.crcc.w.d.w: requires loongarch64 101entry: 102 %res = call i32 @llvm.loongarch.crcc.w.d.w(i64 %a, i32 %b) 103 ret i32 %res 104} 105 106define i64 @csrrd_d() { 107; CHECK: llvm.loongarch.csrrd.d: requires loongarch64 108entry: 109 %0 = tail call i64 @llvm.loongarch.csrrd.d(i32 1) 110 ret i64 %0 111} 112 113define i64 @csrwr_d(i64 %a) { 114; CHECK: llvm.loongarch.csrwr.d: requires loongarch64 115entry: 116 %0 = tail call i64 @llvm.loongarch.csrwr.d(i64 %a, i32 1) 117 ret i64 %0 118} 119 120define i64 @csrxchg_d(i64 %a, i64 %b) { 121; CHECK: llvm.loongarch.csrxchg.d: requires loongarch64 122entry: 123 %0 = tail call i64 @llvm.loongarch.csrxchg.d(i64 %a, i64 %b, i32 1) 124 ret i64 %0 125} 126 127define i64 @iocsrrd_d(i32 %a) { 128; CHECK: llvm.loongarch.iocsrrd.d: requires loongarch64 129entry: 130 %0 = tail call i64 @llvm.loongarch.iocsrrd.d(i32 %a) 131 ret i64 %0 132} 133 134define void @iocsrwr_d(i64 %a, i32 signext %b) { 135; CHECK: llvm.loongarch.iocsrwr.d: requires loongarch64 136entry: 137 tail call void @llvm.loongarch.iocsrwr.d(i64 %a, i32 %b) 138 ret void 139} 140 141define void @asrtle_d(i64 %a, i64 %b) { 142; CHECK: llvm.loongarch.asrtle.d: requires loongarch64 143entry: 144 tail call void @llvm.loongarch.asrtle.d(i64 %a, i64 %b) 145 ret void 146} 147 148define void @asrtgt_d(i64 %a, i64 %b) { 149; CHECK: llvm.loongarch.asrtgt.d: requires loongarch64 150entry: 151 tail call void @llvm.loongarch.asrtgt.d(i64 %a, i64 %b) 152 ret void 153} 154 155define i64 @lddir_d(i64 %a) { 156; CHECK: llvm.loongarch.lddir.d: requires loongarch64 157entry: 158 %0 = tail call i64 @llvm.loongarch.lddir.d(i64 %a, i64 1) 159 ret i64 %0 160} 161 162define void @ldpte_d(i64 %a) { 163; CHECK: llvm.loongarch.ldpte.d: requires loongarch64 164entry: 165 tail call void @llvm.loongarch.ldpte.d(i64 %a, i64 1) 166 ret void 167} 168