1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py
2 ; RUN: not llc --mtriple=loongarch64 -mattr=+d < %s 2>&1 | FileCheck %s
4 declare void @llvm.loongarch.cacop.w(i32, i32, i32)
5 declare void @llvm.loongarch.cacop.d(i64, i64, i64)
6 declare i64 @llvm.loongarch.csrrd.d(i32 immarg)
7 declare i64 @llvm.loongarch.csrwr.d(i64, i32 immarg)
8 declare i64 @llvm.loongarch.csrxchg.d(i64, i64, i32 immarg)
10 define i64 @csrrd_d_imm_out_of_hi_range() nounwind {
11 ; CHECK: llvm.loongarch.csrrd.d: argument out of range
13 %0 = call i64 @llvm.loongarch.csrrd.d(i32 16384)
17 define i64 @csrrd_d_imm_out_of_lo_range() nounwind {
18 ; CHECK: llvm.loongarch.csrrd.d: argument out of range
20 %0 = call i64 @llvm.loongarch.csrrd.d(i32 -1)
24 define i64 @csrwr_d_imm_out_of_hi_range(i64 %a) nounwind {
25 ; CHECK: llvm.loongarch.csrwr.d: argument out of range
27 %0 = call i64 @llvm.loongarch.csrwr.d(i64 %a, i32 16384)
31 define i64 @csrwr_d_imm_out_of_lo_range(i64 %a) nounwind {
32 ; CHECK: llvm.loongarch.csrwr.d: argument out of range
34 %0 = call i64 @llvm.loongarch.csrwr.d(i64 %a, i32 -1)
38 define i64 @csrxchg_d_imm_out_of_hi_range(i64 %a, i64 %b) nounwind {
39 ; CHECK: llvm.loongarch.csrxchg.d: argument out of range
41 %0 = call i64 @llvm.loongarch.csrxchg.d(i64 %a, i64 %b, i32 16384)
45 define i64 @csrxchg_d_imm_out_of_lo_range(i64 %a, i64 %b) nounwind {
46 ; CHECK: llvm.loongarch.csrxchg.d: argument out of range
48 %0 = call i64 @llvm.loongarch.csrxchg.d(i64 %a, i64 %b, i32 -1)
52 define void @cacop_w(i32 %a) nounwind {
53 ; CHECK: llvm.loongarch.cacop.w: requires loongarch32
54 call void @llvm.loongarch.cacop.w(i32 1, i32 %a, i32 4)
58 define void @cacop_arg0_out_of_hi_range(i64 %a) nounwind {
59 ; CHECK: llvm.loongarch.cacop.d: argument out of range
61 call void @llvm.loongarch.cacop.d(i64 32, i64 %a, i64 1024)
65 define void @cacop_arg0_out_of_lo_range(i64 %a) nounwind {
66 ; CHECK: llvm.loongarch.cacop.d: argument out of range
68 call void @llvm.loongarch.cacop.d(i64 -1, i64 %a, i64 1024)
72 define void @cacop_arg2_out_of_hi_range(i64 %a) nounwind {
73 ; CHECK: llvm.loongarch.cacop.d: argument out of range
75 call void @llvm.loongarch.cacop.d(i64 1, i64 %a, i64 4096)
79 define void @cacop_arg2_out_of_lo_range(i64 %a) nounwind {
80 ; CHECK: llvm.loongarch.cacop.d: argument out of range
82 call void @llvm.loongarch.cacop.d(i64 1, i64 %a, i64 -4096)