185 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 i32 @llvm.loongarch.iocsrrd.b(i32) nounwind5declare void @llvm.loongarch.iocsrwr.b(i32, i32) nounwind6declare i32 @llvm.loongarch.iocsrrd.h(i32) nounwind7declare void @llvm.loongarch.iocsrwr.h(i32, i32) nounwind8declare i32 @llvm.loongarch.iocsrrd.w(i32) nounwind9declare void @llvm.loongarch.iocsrwr.w(i32, i32) nounwind10declare i64 @llvm.loongarch.iocsrrd.d(i32) nounwind11declare void @llvm.loongarch.iocsrwr.d(i64, i32) nounwind12declare void @bug()13 14define dso_local void @test_b(i32 noundef signext %flag) nounwind {15; CHECK-LABEL: test_b:16; CHECK: # %bb.0: # %entry17; CHECK-NEXT: beqz $a0, .LBB0_218; CHECK-NEXT: # %bb.1: # %if.then19; CHECK-NEXT: ori $a0, $zero, 220; CHECK-NEXT: iocsrrd.b $a1, $a021; CHECK-NEXT: ori $a1, $a1, 122; CHECK-NEXT: iocsrwr.b $a1, $a023; CHECK-NEXT: .LBB0_2: # %if.end24; CHECK-NEXT: ori $a0, $zero, 225; CHECK-NEXT: iocsrrd.b $a0, $a026; CHECK-NEXT: andi $a0, $a0, 127; CHECK-NEXT: bnez $a0, .LBB0_428; CHECK-NEXT: # %bb.3: # %if.then229; CHECK-NEXT: pcaddu18i $t8, %call36(bug)30; CHECK-NEXT: jr $t831; CHECK-NEXT: .LBB0_4: # %if.end332; CHECK-NEXT: ret33entry:34 %tobool.not = icmp eq i32 %flag, 035 br i1 %tobool.not, label %if.end, label %if.then36 37if.then: ; preds = %entry38 %0 = tail call i32 @llvm.loongarch.iocsrrd.b(i32 2)39 %or = or i32 %0, 140 tail call void @llvm.loongarch.iocsrwr.b(i32 %or, i32 2)41 br label %if.end42 43if.end: ; preds = %if.then, %entry44 %1 = tail call i32 @llvm.loongarch.iocsrrd.b(i32 2)45 %and = and i32 %1, 146 %tobool1.not = icmp eq i32 %and, 047 br i1 %tobool1.not, label %if.then2, label %if.end348 49if.then2: ; preds = %if.end50 tail call void @bug()51 br label %if.end352 53if.end3: ; preds = %if.then2, %if.end54 ret void55}56 57define dso_local void @test_h(i32 noundef signext %flag) nounwind {58; CHECK-LABEL: test_h:59; CHECK: # %bb.0: # %entry60; CHECK-NEXT: beqz $a0, .LBB1_261; CHECK-NEXT: # %bb.1: # %if.then62; CHECK-NEXT: ori $a0, $zero, 263; CHECK-NEXT: iocsrrd.h $a1, $a064; CHECK-NEXT: ori $a1, $a1, 165; CHECK-NEXT: iocsrwr.h $a1, $a066; CHECK-NEXT: .LBB1_2: # %if.end67; CHECK-NEXT: ori $a0, $zero, 268; CHECK-NEXT: iocsrrd.h $a0, $a069; CHECK-NEXT: andi $a0, $a0, 170; CHECK-NEXT: bnez $a0, .LBB1_471; CHECK-NEXT: # %bb.3: # %if.then272; CHECK-NEXT: pcaddu18i $t8, %call36(bug)73; CHECK-NEXT: jr $t874; CHECK-NEXT: .LBB1_4: # %if.end375; CHECK-NEXT: ret76entry:77 %tobool.not = icmp eq i32 %flag, 078 br i1 %tobool.not, label %if.end, label %if.then79 80if.then: ; preds = %entry81 %0 = tail call i32 @llvm.loongarch.iocsrrd.h(i32 2)82 %or = or i32 %0, 183 tail call void @llvm.loongarch.iocsrwr.h(i32 %or, i32 2)84 br label %if.end85 86if.end: ; preds = %if.then, %entry87 %1 = tail call i32 @llvm.loongarch.iocsrrd.h(i32 2)88 %and = and i32 %1, 189 %tobool1.not = icmp eq i32 %and, 090 br i1 %tobool1.not, label %if.then2, label %if.end391 92if.then2: ; preds = %if.end93 tail call void @bug()94 br label %if.end395 96if.end3: ; preds = %if.then2, %if.end97 ret void98}99 100define dso_local void @test_w(i32 noundef signext %flag) nounwind {101; CHECK-LABEL: test_w:102; CHECK: # %bb.0: # %entry103; CHECK-NEXT: beqz $a0, .LBB2_2104; CHECK-NEXT: # %bb.1: # %if.then105; CHECK-NEXT: ori $a0, $zero, 2106; CHECK-NEXT: iocsrrd.w $a1, $a0107; CHECK-NEXT: ori $a1, $a1, 1108; CHECK-NEXT: iocsrwr.w $a1, $a0109; CHECK-NEXT: .LBB2_2: # %if.end110; CHECK-NEXT: ori $a0, $zero, 2111; CHECK-NEXT: iocsrrd.w $a0, $a0112; CHECK-NEXT: andi $a0, $a0, 1113; CHECK-NEXT: bnez $a0, .LBB2_4114; CHECK-NEXT: # %bb.3: # %if.then2115; CHECK-NEXT: pcaddu18i $t8, %call36(bug)116; CHECK-NEXT: jr $t8117; CHECK-NEXT: .LBB2_4: # %if.end3118; CHECK-NEXT: ret119entry:120 %tobool.not = icmp eq i32 %flag, 0121 br i1 %tobool.not, label %if.end, label %if.then122 123if.then: ; preds = %entry124 %0 = tail call i32 @llvm.loongarch.iocsrrd.w(i32 2)125 %or = or i32 %0, 1126 tail call void @llvm.loongarch.iocsrwr.w(i32 %or, i32 2)127 br label %if.end128 129if.end: ; preds = %if.then, %entry130 %1 = tail call i32 @llvm.loongarch.iocsrrd.w(i32 2)131 %and = and i32 %1, 1132 %tobool1.not = icmp eq i32 %and, 0133 br i1 %tobool1.not, label %if.then2, label %if.end3134 135if.then2: ; preds = %if.end136 tail call void @bug()137 br label %if.end3138 139if.end3: ; preds = %if.then2, %if.end140 ret void141}142 143define dso_local void @test_d(i32 noundef signext %flag) nounwind {144; CHECK-LABEL: test_d:145; CHECK: # %bb.0: # %entry146; CHECK-NEXT: beqz $a0, .LBB3_2147; CHECK-NEXT: # %bb.1: # %if.then148; CHECK-NEXT: ori $a0, $zero, 2149; CHECK-NEXT: iocsrrd.d $a1, $a0150; CHECK-NEXT: ori $a1, $a1, 1151; CHECK-NEXT: iocsrwr.d $a1, $a0152; CHECK-NEXT: .LBB3_2: # %if.end153; CHECK-NEXT: ori $a0, $zero, 2154; CHECK-NEXT: iocsrrd.d $a0, $a0155; CHECK-NEXT: andi $a0, $a0, 1156; CHECK-NEXT: bnez $a0, .LBB3_4157; CHECK-NEXT: # %bb.3: # %if.then2158; CHECK-NEXT: pcaddu18i $t8, %call36(bug)159; CHECK-NEXT: jr $t8160; CHECK-NEXT: .LBB3_4: # %if.end3161; CHECK-NEXT: ret162entry:163 %tobool.not = icmp eq i32 %flag, 0164 br i1 %tobool.not, label %if.end, label %if.then165 166if.then: ; preds = %entry167 %0 = tail call i64 @llvm.loongarch.iocsrrd.d(i32 2)168 %or = or i64 %0, 1169 tail call void @llvm.loongarch.iocsrwr.d(i64 %or, i32 2)170 br label %if.end171 172if.end: ; preds = %if.then, %entry173 %1 = tail call i64 @llvm.loongarch.iocsrrd.d(i32 2)174 %and = and i64 %1, 1175 %tobool1.not = icmp eq i64 %and, 0176 br i1 %tobool1.not, label %if.then2, label %if.end3177 178if.then2: ; preds = %if.end179 tail call void @bug()180 br label %if.end3181 182if.end3: ; preds = %if.then2, %if.end183 ret void184}185