Home | History | Annotate | Download | only in llvm2ice_tests
      1 ; Tests for conditional branch instructions
      2 
      3 ; RUN: %if --need=allow_dump --need=target_MIPS32 --command %p2i \
      4 ; RUN:   --filetype=asm --target mips32 -i %s --args -O2 \
      5 ; RUN:   -allow-externally-defined-symbols \
      6 ; RUN:   | %if --need=allow_dump --need=target_MIPS32 --command FileCheck %s \
      7 ; RUN:   --check-prefix=COMMON --check-prefix=MIPS32
      8 
      9 ; RUN: %if --need=allow_dump --need=target_MIPS32 --command %p2i \
     10 ; RUN:   --filetype=asm --target mips32 -i %s --args -Om1 \
     11 ; RUN:   -allow-externally-defined-symbols \
     12 ; RUN:   | %if --need=allow_dump --need=target_MIPS32 --command FileCheck %s \
     13 ; RUN:   --check-prefix=COMMON --check-prefix=MIPS32-OM1
     14 
     15 define internal i32 @cond_br_eq(i32 %arg1, i32 %arg2) {
     16 entry:
     17   %cmp1 = icmp eq i32 %arg1, %arg2
     18   br i1 %cmp1, label %branch1, label %branch2
     19 branch1:
     20   ret i32 1
     21 branch2:
     22   ret i32 2
     23 }
     24 ; COMMON-LABEL: cond_br_eq
     25 ; MIPS32: bne {{.*}} .Lcond_br_eq$branch2
     26 ; MIPS32-NEXT: .Lcond_br_eq$branch1
     27 ; MIPS32-OM1: xor
     28 ; MIPS32-OM1: sltiu {{.*}}, {{.*}}, 1
     29 ; MIPS32-OM1: beqz {{.*}} .Lcond_br_eq$branch2
     30 ; MIPS32-OM1-NEXT: b .Lcond_br_eq$branch1
     31 
     32 define internal i32 @cond_br_ne(i32 %arg1, i32 %arg2) {
     33 entry:
     34   %cmp1 = icmp ne i32 %arg1, %arg2
     35   br i1 %cmp1, label %branch1, label %branch2
     36 branch1:
     37   ret i32 1
     38 branch2:
     39   ret i32 2
     40 }
     41 ; COMMON-LABEL: cond_br_ne
     42 ; MIPS32: beq {{.*}} .Lcond_br_ne$branch2
     43 ; MIPS32-NEXT: .Lcond_br_ne$branch1
     44 ; MIPS32-OM1: xor
     45 ; MIPS32-OM1: sltu {{.*}}, $zero, {{.*}}
     46 ; MIPS32-OM1: beqz {{.*}} .Lcond_br_ne$branch2
     47 ; MIPS32-OM1-NEXT: b .Lcond_br_ne$branch1
     48 
     49 define internal i32 @cond_br_slt(i32 %arg1, i32 %arg2) {
     50 entry:
     51   %cmp1 = icmp slt i32 %arg1, %arg2
     52   br i1 %cmp1, label %branch1, label %branch2
     53 branch1:
     54   ret i32 1
     55 branch2:
     56   ret i32 2
     57 }
     58 ; COMMON-LABEL: cond_br_slt
     59 ; MIPS32: slt
     60 ; MIPS32: beqz {{.*}} .Lcond_br_slt$branch2
     61 ; MIPS32-NEXT: .Lcond_br_slt$branch1
     62 ; MIPS32-OM1: slt
     63 ; MIPS32-OM1: beqz {{.*}} .Lcond_br_slt$branch2
     64 ; MIPS32-OM1-NEXT: b .Lcond_br_slt$branch1
     65 
     66 define internal i32 @cond_br_sle(i32 %arg1, i32 %arg2) {
     67 entry:
     68   %cmp1 = icmp sle i32 %arg1, %arg2
     69   br i1 %cmp1, label %branch1, label %branch2
     70 branch1:
     71   ret i32 1
     72 branch2:
     73   ret i32 2
     74 }
     75 ; COMMON-LABEL: cond_br_sle
     76 ; MIPS32: slt
     77 ; MIPS32: bnez {{.*}} .Lcond_br_sle$branch2
     78 ; MIPS32-NEXT: .Lcond_br_sle$branch1
     79 ; MIPS32-OM1: slt
     80 ; MIPS32-OM1: xori {{.*}}, {{.*}}, 1
     81 ; MIPS32-OM1: beqz {{.*}} .Lcond_br_sle$branch2
     82 ; MIPS32-OM1-NEXT: b .Lcond_br_sle$branch1
     83 
     84 define internal i32 @cond_br_sgt(i32 %arg1, i32 %arg2) {
     85 entry:
     86   %cmp1 = icmp sgt i32 %arg1, %arg2
     87   br i1 %cmp1, label %branch1, label %branch2
     88 branch1:
     89   ret i32 1
     90 branch2:
     91   ret i32 2
     92 }
     93 ; COMMON-LABEL: cond_br_sgt
     94 ; MIPS32: slt
     95 ; MIPS32-NEXT: beqz {{.*}} .Lcond_br_sgt$branch2
     96 ; MIPS32-NEXT: .Lcond_br_sgt$branch1
     97 ; MIPS32-OM1: slt
     98 ; MIPS32-OM1: beqz {{.*}} .Lcond_br_sgt$branch2
     99 ; MIPS32-OM1-NEXT: b .Lcond_br_sgt$branch1
    100 
    101 define internal i32 @cond_br_sge(i32 %arg1, i32 %arg2) {
    102 entry:
    103   %cmp1 = icmp sge i32 %arg1, %arg2
    104   br i1 %cmp1, label %branch1, label %branch2
    105 branch1:
    106   ret i32 1
    107 branch2:
    108   ret i32 2
    109 }
    110 ; COMMON-LABEL: cond_br_sge
    111 ; MIPS32: slt
    112 ; MIPS32: bnez {{.*}} .Lcond_br_sge$branch2
    113 ; MIPS32-NEXT: .Lcond_br_sge$branch1
    114 ; MIPS32-OM1: slt
    115 ; MIPS32-OM1: xori {{.*}}, {{.*}}, 1
    116 ; MIPS32-OM1: beqz {{.*}} .Lcond_br_sge$branch2
    117 ; MIPS32-OM1-NEXT: b .Lcond_br_sge$branch1
    118 
    119 define internal i32 @cond_br_ugt(i32 %arg1, i32 %arg2) {
    120 entry:
    121   %cmp1 = icmp ugt i32 %arg1, %arg2
    122   br i1 %cmp1, label %branch1, label %branch2
    123 branch1:
    124   ret i32 1
    125 branch2:
    126   ret i32 2
    127 }
    128 ; COMMON-LABEL: cond_br_ugt
    129 ; MIPS32: sltu
    130 ; MIPS32: beqz {{.*}} .Lcond_br_ugt$branch2
    131 ; MIPS32-NEXT: .Lcond_br_ugt$branch1
    132 ; MIPS32-OM1: sltu
    133 ; MIPS32-OM1: beqz {{.*}} .Lcond_br_ugt$branch2
    134 ; MIPS32-OM1-NEXT: b .Lcond_br_ugt$branch1
    135 
    136 define internal i32 @cond_br_uge(i32 %arg1, i32 %arg2) {
    137 entry:
    138   %cmp1 = icmp uge i32 %arg1, %arg2
    139   br i1 %cmp1, label %branch1, label %branch2
    140 branch1:
    141   ret i32 1
    142 branch2:
    143   ret i32 2
    144 }
    145 ; COMMON-LABEL: cond_br_uge
    146 ; MIPS32: sltu
    147 ; MIPS32: bnez {{.*}} .Lcond_br_uge$branch2
    148 ; MIPS32-NEXT: .Lcond_br_uge$branch1
    149 ; MIPS32-OM1: sltu
    150 ; MIPS32-OM1: xori {{.*}}, {{.*}}, 1
    151 ; MIPS32-OM1: beqz {{.*}} .Lcond_br_uge$branch2
    152 ; MIPS32-OM1-NEXT: b .Lcond_br_uge$branch1
    153 
    154 define internal i32 @cond_br_ult(i32 %arg1, i32 %arg2) {
    155 entry:
    156   %cmp1 = icmp ult i32 %arg1, %arg2
    157   br i1 %cmp1, label %branch1, label %branch2
    158 branch1:
    159   ret i32 1
    160 branch2:
    161   ret i32 2
    162 }
    163 ; COMMON-LABEL: cond_br_ult
    164 ; MIPS32: sltu
    165 ; MIPS32: beqz {{.*}} .Lcond_br_ult$branch2
    166 ; MIPS32-NEXT: .Lcond_br_ult$branch1
    167 ; MIPS32-OM1: sltu
    168 ; MIPS32-OM1: beqz {{.*}} .Lcond_br_ult$branch2
    169 ; MIPS32-OM1-NEXT: b .Lcond_br_ult$branch1
    170 
    171 define internal i32 @cond_br_ule(i32 %arg1, i32 %arg2) {
    172 entry:
    173   %cmp1 = icmp ule i32 %arg1, %arg2
    174   br i1 %cmp1, label %branch1, label %branch2
    175 branch1:
    176   ret i32 1
    177 branch2:
    178   ret i32 2
    179 }
    180 ; COMMON-LABEL: cond_br_ule
    181 ; MIPS32: sltu
    182 ; MIPS32: bnez {{.*}} .Lcond_br_ule$branch2
    183 ; MIPS32-NEXT: .Lcond_br_ule$branch1
    184 ; MIPS32-OM1: sltu
    185 ; MIPS32-OM1: xori {{.*}}, {{.*}}, 1
    186 ; MIPS32-OM1: beqz {{.*}} .Lcond_br_ule$branch2
    187 ; MIPS32-OM1-NEXT: b .Lcond_br_ule$branch1
    188