brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.1 KiB · d94da34 Raw
309 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc --mtriple=loongarch64 -mattr=+d < %s | FileCheck %s3 4declare void @llvm.loongarch.cacop.d(i64, i64, i64)5declare i32 @llvm.loongarch.crc.w.b.w(i32, i32)6declare i32 @llvm.loongarch.crc.w.h.w(i32, i32)7declare i32 @llvm.loongarch.crc.w.w.w(i32, i32)8declare i32 @llvm.loongarch.crc.w.d.w(i64, i32)9declare i32 @llvm.loongarch.crcc.w.b.w(i32, i32)10declare i32 @llvm.loongarch.crcc.w.h.w(i32, i32)11declare i32 @llvm.loongarch.crcc.w.w.w(i32, i32)12declare i32 @llvm.loongarch.crcc.w.d.w(i64, i32)13declare i64 @llvm.loongarch.csrrd.d(i32 immarg)14declare i64 @llvm.loongarch.csrwr.d(i64, i32 immarg)15declare i64 @llvm.loongarch.csrxchg.d(i64, i64, i32 immarg)16declare i64 @llvm.loongarch.iocsrrd.d(i32)17declare void @llvm.loongarch.iocsrwr.d(i64, i32)18declare void @llvm.loongarch.asrtle.d(i64, i64)19declare void @llvm.loongarch.asrtgt.d(i64, i64)20declare i64 @llvm.loongarch.lddir.d(i64, i64)21declare void @llvm.loongarch.ldpte.d(i64, i64)22 23define i32 @crc_w_b_w(i32 %a, i32 %b) nounwind {24; CHECK-LABEL: crc_w_b_w:25; CHECK:       # %bb.0:26; CHECK-NEXT:    crc.w.b.w $a0, $a0, $a127; CHECK-NEXT:    ret28  %res = call i32 @llvm.loongarch.crc.w.b.w(i32 %a, i32 %b)29  ret i32 %res30}31 32define void @crc_w_b_w_noret(i32 %a, i32 %b) nounwind {33; CHECK-LABEL: crc_w_b_w_noret:34; CHECK:       # %bb.0:35; CHECK-NEXT:    ret36  %res = call i32 @llvm.loongarch.crc.w.b.w(i32 %a, i32 %b)37  ret void38}39 40define i32 @crc_w_h_w(i32 %a, i32 %b) nounwind {41; CHECK-LABEL: crc_w_h_w:42; CHECK:       # %bb.0:43; CHECK-NEXT:    crc.w.h.w $a0, $a0, $a144; CHECK-NEXT:    ret45  %res = call i32 @llvm.loongarch.crc.w.h.w(i32 %a, i32 %b)46  ret i32 %res47}48 49define void @crc_w_h_w_noret(i32 %a, i32 %b) nounwind {50; CHECK-LABEL: crc_w_h_w_noret:51; CHECK:       # %bb.0:52; CHECK-NEXT:    ret53  %res = call i32 @llvm.loongarch.crc.w.h.w(i32 %a, i32 %b)54  ret void55}56 57define i32 @crc_w_w_w(i32 %a, i32 %b) nounwind {58; CHECK-LABEL: crc_w_w_w:59; CHECK:       # %bb.0:60; CHECK-NEXT:    crc.w.w.w $a0, $a0, $a161; CHECK-NEXT:    ret62  %res = call i32 @llvm.loongarch.crc.w.w.w(i32 %a, i32 %b)63  ret i32 %res64}65 66define void @crc_w_w_w_noret(i32 %a, i32 %b) nounwind {67; CHECK-LABEL: crc_w_w_w_noret:68; CHECK:       # %bb.0:69; CHECK-NEXT:    ret70  %res = call i32 @llvm.loongarch.crc.w.w.w(i32 %a, i32 %b)71  ret void72}73 74define void @cacop_d(i64 %a) nounwind {75; CHECK-LABEL: cacop_d:76; CHECK:       # %bb.0:77; CHECK-NEXT:    cacop 1, $a0, 478; CHECK-NEXT:    ret79  call void @llvm.loongarch.cacop.d(i64 1, i64 %a, i64 4)80  ret void81}82 83define i32 @crc_w_d_w(i64 %a, i32 %b) nounwind {84; CHECK-LABEL: crc_w_d_w:85; CHECK:       # %bb.0:86; CHECK-NEXT:    crc.w.d.w $a0, $a0, $a187; CHECK-NEXT:    ret88  %res = call i32 @llvm.loongarch.crc.w.d.w(i64 %a, i32 %b)89  ret i32 %res90}91 92define void @crc_w_d_w_noret(i64 %a, i32 %b) nounwind {93; CHECK-LABEL: crc_w_d_w_noret:94; CHECK:       # %bb.0:95; CHECK-NEXT:    ret96  %res = call i32 @llvm.loongarch.crc.w.d.w(i64 %a, i32 %b)97  ret void98}99 100define i32 @crcc_w_b_w(i32 %a, i32 %b) nounwind {101; CHECK-LABEL: crcc_w_b_w:102; CHECK:       # %bb.0:103; CHECK-NEXT:    crcc.w.b.w $a0, $a0, $a1104; CHECK-NEXT:    ret105  %res = call i32 @llvm.loongarch.crcc.w.b.w(i32 %a, i32 %b)106  ret i32 %res107}108 109define void @crcc_w_b_w_noret(i32 %a, i32 %b) nounwind {110; CHECK-LABEL: crcc_w_b_w_noret:111; CHECK:       # %bb.0:112; CHECK-NEXT:    ret113  %res = call i32 @llvm.loongarch.crcc.w.b.w(i32 %a, i32 %b)114  ret void115}116 117define i32 @crcc_w_h_w(i32 %a, i32 %b) nounwind {118; CHECK-LABEL: crcc_w_h_w:119; CHECK:       # %bb.0:120; CHECK-NEXT:    crcc.w.h.w $a0, $a0, $a1121; CHECK-NEXT:    ret122  %res = call i32 @llvm.loongarch.crcc.w.h.w(i32 %a, i32 %b)123  ret i32 %res124}125 126define void @crcc_w_h_w_noret(i32 %a, i32 %b) nounwind {127; CHECK-LABEL: crcc_w_h_w_noret:128; CHECK:       # %bb.0:129; CHECK-NEXT:    ret130  %res = call i32 @llvm.loongarch.crcc.w.h.w(i32 %a, i32 %b)131  ret void132}133 134define i32 @crcc_w_w_w(i32 %a, i32 %b) nounwind {135; CHECK-LABEL: crcc_w_w_w:136; CHECK:       # %bb.0:137; CHECK-NEXT:    crcc.w.w.w $a0, $a0, $a1138; CHECK-NEXT:    ret139  %res = call i32 @llvm.loongarch.crcc.w.w.w(i32 %a, i32 %b)140  ret i32 %res141}142 143define void @crcc_w_w_w_noret(i32 %a, i32 %b) nounwind {144; CHECK-LABEL: crcc_w_w_w_noret:145; CHECK:       # %bb.0:146; CHECK-NEXT:    ret147  %res = call i32 @llvm.loongarch.crcc.w.w.w(i32 %a, i32 %b)148  ret void149}150 151define i32 @crcc_w_d_w(i64 %a, i32 %b) nounwind {152; CHECK-LABEL: crcc_w_d_w:153; CHECK:       # %bb.0:154; CHECK-NEXT:    crcc.w.d.w $a0, $a0, $a1155; CHECK-NEXT:    ret156  %res = call i32 @llvm.loongarch.crcc.w.d.w(i64 %a, i32 %b)157  ret i32 %res158}159 160define void @crcc_w_d_w_noret(i64 %a, i32 %b) nounwind {161; CHECK-LABEL: crcc_w_d_w_noret:162; CHECK:       # %bb.0:163; CHECK-NEXT:    ret164  %res = call i32 @llvm.loongarch.crcc.w.d.w(i64 %a, i32 %b)165  ret void166}167 168define i64 @csrrd_d() {169; CHECK-LABEL: csrrd_d:170; CHECK:       # %bb.0: # %entry171; CHECK-NEXT:    csrrd $a0, 1172; CHECK-NEXT:    ret173entry:174  %0 = tail call i64 @llvm.loongarch.csrrd.d(i32 1)175  ret i64 %0176}177 178define void @csrrd_d_noret() {179; CHECK-LABEL: csrrd_d_noret:180; CHECK:       # %bb.0: # %entry181; CHECK-NEXT:    csrrd $zero, 1182; CHECK-NEXT:    ret183entry:184  %0 = tail call i64 @llvm.loongarch.csrrd.d(i32 1)185  ret void186}187 188define i64 @csrwr_d(i64 %a) {189; CHECK-LABEL: csrwr_d:190; CHECK:       # %bb.0: # %entry191; CHECK-NEXT:    csrwr $a0, 1192; CHECK-NEXT:    ret193entry:194  %0 = tail call i64 @llvm.loongarch.csrwr.d(i64 %a, i32 1)195  ret i64 %0196}197 198;; Check that csrwr is emitted even if the return value of the intrinsic is not used.199define void @csrwr_d_noret(i64 %a) {200; CHECK-LABEL: csrwr_d_noret:201; CHECK:       # %bb.0: # %entry202; CHECK-NEXT:    csrwr $a0, 1203; CHECK-NEXT:    ret204entry:205  %0 = tail call i64 @llvm.loongarch.csrwr.d(i64 %a, i32 1)206  ret void207}208 209define i64 @csrxchg_d(i64 %a, i64 %b) {210; CHECK-LABEL: csrxchg_d:211; CHECK:       # %bb.0: # %entry212; CHECK-NEXT:    csrxchg $a0, $a1, 1213; CHECK-NEXT:    ret214entry:215  %0 = tail call i64 @llvm.loongarch.csrxchg.d(i64 %a, i64 %b, i32 1)216  ret i64 %0217}218 219;; Check that csrxchg is emitted even if the return value of the intrinsic is not used.220define void @csrxchg_d_noret(i64 %a, i64 %b) {221; CHECK-LABEL: csrxchg_d_noret:222; CHECK:       # %bb.0: # %entry223; CHECK-NEXT:    csrxchg $a0, $a1, 1224; CHECK-NEXT:    ret225entry:226  %0 = tail call i64 @llvm.loongarch.csrxchg.d(i64 %a, i64 %b, i32 1)227  ret void228}229 230define i64 @iocsrrd_d(i32 %a) {231; CHECK-LABEL: iocsrrd_d:232; CHECK:       # %bb.0: # %entry233; CHECK-NEXT:    iocsrrd.d $a0, $a0234; CHECK-NEXT:    ret235entry:236  %0 = tail call i64 @llvm.loongarch.iocsrrd.d(i32 %a)237  ret i64 %0238}239 240define void @iocsrrd_d_noret(i32 %a) {241; CHECK-LABEL: iocsrrd_d_noret:242; CHECK:       # %bb.0: # %entry243; CHECK-NEXT:    iocsrrd.d $zero, $a0244; CHECK-NEXT:    ret245entry:246  %0 = tail call i64 @llvm.loongarch.iocsrrd.d(i32 %a)247  ret void248}249 250define void @iocsrwr_d(i64 %a, i32 signext %b) {251; CHECK-LABEL: iocsrwr_d:252; CHECK:       # %bb.0: # %entry253; CHECK-NEXT:    iocsrwr.d $a0, $a1254; CHECK-NEXT:    ret255entry:256  tail call void @llvm.loongarch.iocsrwr.d(i64 %a, i32 %b)257  ret void258}259 260define void @asrtle_d(i64 %a, i64 %b) {261; CHECK-LABEL: asrtle_d:262; CHECK:       # %bb.0: # %entry263; CHECK-NEXT:    asrtle.d $a0, $a1264; CHECK-NEXT:    ret265entry:266  tail call void @llvm.loongarch.asrtle.d(i64 %a, i64 %b)267  ret void268}269 270define void @asrtgt_d(i64 %a, i64 %b) {271; CHECK-LABEL: asrtgt_d:272; CHECK:       # %bb.0: # %entry273; CHECK-NEXT:    asrtgt.d $a0, $a1274; CHECK-NEXT:    ret275entry:276  tail call void @llvm.loongarch.asrtgt.d(i64 %a, i64 %b)277  ret void278}279 280define i64 @lddir_d(i64 %a) {281; CHECK-LABEL: lddir_d:282; CHECK:       # %bb.0: # %entry283; CHECK-NEXT:    lddir $a0, $a0, 1284; CHECK-NEXT:    ret285entry:286  %0 = tail call i64 @llvm.loongarch.lddir.d(i64 %a, i64 1)287  ret i64 %0288}289 290define void @lddir_d_noret(i64 %a) {291; CHECK-LABEL: lddir_d_noret:292; CHECK:       # %bb.0: # %entry293; CHECK-NEXT:    lddir $zero, $a0, 1294; CHECK-NEXT:    ret295entry:296  %0 = tail call i64 @llvm.loongarch.lddir.d(i64 %a, i64 1)297  ret void298}299 300define void @ldpte_d(i64 %a) {301; CHECK-LABEL: ldpte_d:302; CHECK:       # %bb.0: # %entry303; CHECK-NEXT:    ldpte $a0, 1304; CHECK-NEXT:    ret305entry:306  tail call void @llvm.loongarch.ldpte.d(i64 %a, i64 1)307  ret void308}309