246 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py2; RUN: llc --mtriple=loongarch32 -mattr=+d < %s | FileCheck %s --check-prefix=LA323; RUN: llc --mtriple=loongarch64 -mattr=+d < %s | FileCheck %s --check-prefix=LA644 5;; Exercise the 'icmp' LLVM IR: https://llvm.org/docs/LangRef.html#icmp-instruction6 7define i1 @icmp_eq(i32 signext %a, i32 signext %b) {8; LA32-LABEL: icmp_eq:9; LA32: # %bb.0:10; LA32-NEXT: xor $a0, $a0, $a111; LA32-NEXT: sltui $a0, $a0, 112; LA32-NEXT: ret13;14; LA64-LABEL: icmp_eq:15; LA64: # %bb.0:16; LA64-NEXT: xor $a0, $a0, $a117; LA64-NEXT: sltui $a0, $a0, 118; LA64-NEXT: ret19 %res = icmp eq i32 %a, %b20 ret i1 %res21}22 23define i1 @icmp_ne(i32 signext %a, i32 signext %b) {24; LA32-LABEL: icmp_ne:25; LA32: # %bb.0:26; LA32-NEXT: xor $a0, $a0, $a127; LA32-NEXT: sltu $a0, $zero, $a028; LA32-NEXT: ret29;30; LA64-LABEL: icmp_ne:31; LA64: # %bb.0:32; LA64-NEXT: xor $a0, $a0, $a133; LA64-NEXT: sltu $a0, $zero, $a034; LA64-NEXT: ret35 %res = icmp ne i32 %a, %b36 ret i1 %res37}38 39define i1 @icmp_ugt(i32 signext %a, i32 signext %b) {40; LA32-LABEL: icmp_ugt:41; LA32: # %bb.0:42; LA32-NEXT: sltu $a0, $a1, $a043; LA32-NEXT: ret44;45; LA64-LABEL: icmp_ugt:46; LA64: # %bb.0:47; LA64-NEXT: sltu $a0, $a1, $a048; LA64-NEXT: ret49 %res = icmp ugt i32 %a, %b50 ret i1 %res51}52 53define i1 @icmp_uge(i32 signext %a, i32 signext %b) {54; LA32-LABEL: icmp_uge:55; LA32: # %bb.0:56; LA32-NEXT: sltu $a0, $a0, $a157; LA32-NEXT: xori $a0, $a0, 158; LA32-NEXT: ret59;60; LA64-LABEL: icmp_uge:61; LA64: # %bb.0:62; LA64-NEXT: sltu $a0, $a0, $a163; LA64-NEXT: xori $a0, $a0, 164; LA64-NEXT: ret65 %res = icmp uge i32 %a, %b66 ret i1 %res67}68 69define i1 @icmp_ult(i32 signext %a, i32 signext %b) {70; LA32-LABEL: icmp_ult:71; LA32: # %bb.0:72; LA32-NEXT: sltu $a0, $a0, $a173; LA32-NEXT: ret74;75; LA64-LABEL: icmp_ult:76; LA64: # %bb.0:77; LA64-NEXT: sltu $a0, $a0, $a178; LA64-NEXT: ret79 %res = icmp ult i32 %a, %b80 ret i1 %res81}82 83define i1 @icmp_ule(i32 signext %a, i32 signext %b) {84; LA32-LABEL: icmp_ule:85; LA32: # %bb.0:86; LA32-NEXT: sltu $a0, $a1, $a087; LA32-NEXT: xori $a0, $a0, 188; LA32-NEXT: ret89;90; LA64-LABEL: icmp_ule:91; LA64: # %bb.0:92; LA64-NEXT: sltu $a0, $a1, $a093; LA64-NEXT: xori $a0, $a0, 194; LA64-NEXT: ret95 %res = icmp ule i32 %a, %b96 ret i1 %res97}98 99define i1 @icmp_sgt(i32 signext %a, i32 signext %b) {100; LA32-LABEL: icmp_sgt:101; LA32: # %bb.0:102; LA32-NEXT: slt $a0, $a1, $a0103; LA32-NEXT: ret104;105; LA64-LABEL: icmp_sgt:106; LA64: # %bb.0:107; LA64-NEXT: slt $a0, $a1, $a0108; LA64-NEXT: ret109 %res = icmp sgt i32 %a, %b110 ret i1 %res111}112 113define i1 @icmp_sge(i32 signext %a, i32 signext %b) {114; LA32-LABEL: icmp_sge:115; LA32: # %bb.0:116; LA32-NEXT: slt $a0, $a0, $a1117; LA32-NEXT: xori $a0, $a0, 1118; LA32-NEXT: ret119;120; LA64-LABEL: icmp_sge:121; LA64: # %bb.0:122; LA64-NEXT: slt $a0, $a0, $a1123; LA64-NEXT: xori $a0, $a0, 1124; LA64-NEXT: ret125 %res = icmp sge i32 %a, %b126 ret i1 %res127}128 129define i1 @icmp_slt(i32 signext %a, i32 signext %b) {130; LA32-LABEL: icmp_slt:131; LA32: # %bb.0:132; LA32-NEXT: slt $a0, $a0, $a1133; LA32-NEXT: ret134;135; LA64-LABEL: icmp_slt:136; LA64: # %bb.0:137; LA64-NEXT: slt $a0, $a0, $a1138; LA64-NEXT: ret139 %res = icmp slt i32 %a, %b140 ret i1 %res141}142 143define i1 @icmp_sle(i32 signext %a, i32 signext %b) {144; LA32-LABEL: icmp_sle:145; LA32: # %bb.0:146; LA32-NEXT: slt $a0, $a1, $a0147; LA32-NEXT: xori $a0, $a0, 1148; LA32-NEXT: ret149;150; LA64-LABEL: icmp_sle:151; LA64: # %bb.0:152; LA64-NEXT: slt $a0, $a1, $a0153; LA64-NEXT: xori $a0, $a0, 1154; LA64-NEXT: ret155 %res = icmp sle i32 %a, %b156 ret i1 %res157}158 159define i1 @icmp_slt_3(i32 signext %a) {160; LA32-LABEL: icmp_slt_3:161; LA32: # %bb.0:162; LA32-NEXT: slti $a0, $a0, 3163; LA32-NEXT: ret164;165; LA64-LABEL: icmp_slt_3:166; LA64: # %bb.0:167; LA64-NEXT: slti $a0, $a0, 3168; LA64-NEXT: ret169 %res = icmp slt i32 %a, 3170 ret i1 %res171}172 173define i1 @icmp_ult_3(i32 signext %a) {174; LA32-LABEL: icmp_ult_3:175; LA32: # %bb.0:176; LA32-NEXT: sltui $a0, $a0, 3177; LA32-NEXT: ret178;179; LA64-LABEL: icmp_ult_3:180; LA64: # %bb.0:181; LA64-NEXT: sltui $a0, $a0, 3182; LA64-NEXT: ret183 %res = icmp ult i32 %a, 3184 ret i1 %res185}186 187define i1 @icmp_eq_0(i32 signext %a) {188; LA32-LABEL: icmp_eq_0:189; LA32: # %bb.0:190; LA32-NEXT: sltui $a0, $a0, 1191; LA32-NEXT: ret192;193; LA64-LABEL: icmp_eq_0:194; LA64: # %bb.0:195; LA64-NEXT: sltui $a0, $a0, 1196; LA64-NEXT: ret197 %res = icmp eq i32 %a, 0198 ret i1 %res199}200 201define i1 @icmp_eq_3(i32 signext %a) {202; LA32-LABEL: icmp_eq_3:203; LA32: # %bb.0:204; LA32-NEXT: addi.w $a0, $a0, -3205; LA32-NEXT: sltui $a0, $a0, 1206; LA32-NEXT: ret207;208; LA64-LABEL: icmp_eq_3:209; LA64: # %bb.0:210; LA64-NEXT: addi.d $a0, $a0, -3211; LA64-NEXT: sltui $a0, $a0, 1212; LA64-NEXT: ret213 %res = icmp eq i32 %a, 3214 ret i1 %res215}216 217define i1 @icmp_ne_0(i32 signext %a) {218; LA32-LABEL: icmp_ne_0:219; LA32: # %bb.0:220; LA32-NEXT: sltu $a0, $zero, $a0221; LA32-NEXT: ret222;223; LA64-LABEL: icmp_ne_0:224; LA64: # %bb.0:225; LA64-NEXT: sltu $a0, $zero, $a0226; LA64-NEXT: ret227 %res = icmp ne i32 %a, 0228 ret i1 %res229}230 231define i1 @icmp_ne_3(i32 signext %a) {232; LA32-LABEL: icmp_ne_3:233; LA32: # %bb.0:234; LA32-NEXT: addi.w $a0, $a0, -3235; LA32-NEXT: sltu $a0, $zero, $a0236; LA32-NEXT: ret237;238; LA64-LABEL: icmp_ne_3:239; LA64: # %bb.0:240; LA64-NEXT: addi.d $a0, $a0, -3241; LA64-NEXT: sltu $a0, $zero, $a0242; LA64-NEXT: ret243 %res = icmp ne i32 %a, 3244 ret i1 %res245}246