Home | History | Annotate | Download | only in PowerPC
      1 ; RUN: llc -ppc-reduce-cr-logicals -verify-machineinstrs < %s | FileCheck %s
      2 ; RUN: llc -ppc-reduce-cr-logicals -verify-machineinstrs \
      3 ; RUN:   -ppc-gen-isel=false < %s | FileCheck --check-prefix=CHECK-NO-ISEL %s
      4 target datalayout = "E-m:e-i64:64-n32:64"
      5 target triple = "powerpc64-unknown-linux-gnu"
      6 
      7 ; FIXME: We should check the operands to the cr* logical operation itself, but
      8 ; unfortunately, FileCheck does not yet understand how to do arithmetic, so we
      9 ; can't do so without introducing a register-allocation dependency.
     10 
     11 define signext i32 @testi32slt(i32 signext %c1, i32 signext %c2, i32 signext %c3, i32 signext %c4, i32 signext %a1, i32 signext %a2) #0 {
     12 entry:
     13   %cmp1 = icmp eq i32 %c3, %c4
     14   %cmp3tmp = icmp eq i32 %c1, %c2
     15   %cmp3 = icmp slt i1 %cmp3tmp, %cmp1
     16   %cond = select i1 %cmp3, i32 %a1, i32 %a2
     17   ret i32 %cond
     18 
     19 ; CHECK-LABEL: @testi32slt
     20 ; CHECK-NO-ISEL-LABEL: @testi32slt
     21 ; CHECK-DAG: cmpw {{[0-9]+}}, 5, 6
     22 ; CHECK-DAG: cmpw {{[0-9]+}}, 3, 4
     23 ; CHECK: crandc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
     24 ; CHECK: isel 3, 7, 8, [[REG1]]
     25 ; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
     26 ; CHECK-NO-ISEL: ori 3, 8, 0
     27 ; CHECK-NO-ISEL-NEXT: blr
     28 ; CHECK-NO-ISEL: [[TRUE]]
     29 ; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
     30 ; CHECK-NO-ISEL-NEXT: blr
     31 ; CHECK: blr
     32 }
     33 
     34 define signext i32 @testi32ult(i32 signext %c1, i32 signext %c2, i32 signext %c3, i32 signext %c4, i32 signext %a1, i32 signext %a2) #0 {
     35 entry:
     36   %cmp1 = icmp eq i32 %c3, %c4
     37   %cmp3tmp = icmp eq i32 %c1, %c2
     38   %cmp3 = icmp ult i1 %cmp3tmp, %cmp1
     39   %cond = select i1 %cmp3, i32 %a1, i32 %a2
     40   ret i32 %cond
     41 
     42 ; CHECK-NO-ISEL-LABEL: @testi32ult
     43 ; CHECK-DAG: cmpw {{[0-9]+}}, 5, 6
     44 ; CHECK-DAG: cmpw {{[0-9]+}}, 3, 4
     45 ; CHECK: crandc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
     46 ; CHECK: isel 3, 7, 8, [[REG1]]
     47 ; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
     48 ; CHECK-NO-ISEL: ori 3, 8, 0
     49 ; CHECK-NO-ISEL-NEXT: blr
     50 ; CHECK-NO-ISEL: [[TRUE]]
     51 ; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
     52 ; CHECK-NO-ISEL-NEXT: blr
     53 ; CHECK: blr
     54 }
     55 
     56 define signext i32 @testi32sle(i32 signext %c1, i32 signext %c2, i32 signext %c3, i32 signext %c4, i32 signext %a1, i32 signext %a2) #0 {
     57 entry:
     58   %cmp1 = icmp eq i32 %c3, %c4
     59   %cmp3tmp = icmp eq i32 %c1, %c2
     60   %cmp3 = icmp sle i1 %cmp3tmp, %cmp1
     61   %cond = select i1 %cmp3, i32 %a1, i32 %a2
     62   ret i32 %cond
     63 
     64 ; CHECK-LABEL: @testi32sle
     65 ; CHECK-NO-ISEL-LABEL: @testi32sle
     66 ; CHECK-DAG: cmpw {{[0-9]+}}, 5, 6
     67 ; CHECK-DAG: cmpw {{[0-9]+}}, 3, 4
     68 ; CHECK: crorc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
     69 ; CHECK: isel 3, 7, 8, [[REG1]]
     70 ; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
     71 ; CHECK-NO-ISEL: ori 3, 8, 0
     72 ; CHECK-NO-ISEL-NEXT: blr
     73 ; CHECK-NO-ISEL: [[TRUE]]
     74 ; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
     75 ; CHECK-NO-ISEL-NEXT: blr
     76 ; CHECK: blr
     77 }
     78 
     79 define signext i32 @testi32ule(i32 signext %c1, i32 signext %c2, i32 signext %c3, i32 signext %c4, i32 signext %a1, i32 signext %a2) #0 {
     80 entry:
     81   %cmp1 = icmp eq i32 %c3, %c4
     82   %cmp3tmp = icmp eq i32 %c1, %c2
     83   %cmp3 = icmp ule i1 %cmp3tmp, %cmp1
     84   %cond = select i1 %cmp3, i32 %a1, i32 %a2
     85   ret i32 %cond
     86 
     87 ; CHECK-LABEL: @testi32ule
     88 ; CHECK-NO-ISEL-LABEL: @testi32ule
     89 ; CHECK-DAG: cmpw {{[0-9]+}}, 5, 6
     90 ; CHECK-DAG: cmpw {{[0-9]+}}, 3, 4
     91 ; CHECK: crorc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
     92 ; CHECK: isel 3, 7, 8, [[REG1]]
     93 ; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
     94 ; CHECK-NO-ISEL: ori 3, 8, 0
     95 ; CHECK-NO-ISEL-NEXT: blr
     96 ; CHECK-NO-ISEL: [[TRUE]]
     97 ; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
     98 ; CHECK-NO-ISEL-NEXT: blr
     99 ; CHECK: blr
    100 }
    101 
    102 define signext i32 @testi32eq(i32 signext %c1, i32 signext %c2, i32 signext %c3, i32 signext %c4, i32 signext %a1, i32 signext %a2) #0 {
    103 entry:
    104   %cmp1 = icmp eq i32 %c3, %c4
    105   %cmp3tmp = icmp eq i32 %c1, %c2
    106   %cmp3 = icmp eq i1 %cmp3tmp, %cmp1
    107   %cond = select i1 %cmp3, i32 %a1, i32 %a2
    108   ret i32 %cond
    109 
    110 ; CHECK-LABEL: @testi32eq
    111 ; CHECK-NO-ISEL-LABEL: @testi32eq
    112 ; CHECK-DAG: cmpw {{[0-9]+}}, 5, 6
    113 ; CHECK-DAG: cmpw {{[0-9]+}}, 3, 4
    114 ; CHECK: creqv [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
    115 ; CHECK: isel 3, 7, 8, [[REG1]]
    116 ; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
    117 ; CHECK-NO-ISEL: ori 3, 8, 0
    118 ; CHECK-NO-ISEL-NEXT: blr
    119 ; CHECK-NO-ISEL: [[TRUE]]
    120 ; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
    121 ; CHECK-NO-ISEL-NEXT: blr
    122 ; CHECK: blr
    123 }
    124 
    125 define signext i32 @testi32sge(i32 signext %c1, i32 signext %c2, i32 signext %c3, i32 signext %c4, i32 signext %a1, i32 signext %a2) #0 {
    126 entry:
    127   %cmp1 = icmp eq i32 %c3, %c4
    128   %cmp3tmp = icmp eq i32 %c1, %c2
    129   %cmp3 = icmp sge i1 %cmp3tmp, %cmp1
    130   %cond = select i1 %cmp3, i32 %a1, i32 %a2
    131   ret i32 %cond
    132 
    133 ; CHECK-LABEL: @testi32sge
    134 ; CHECK-NO-ISEL-LABEL: @testi32sge
    135 ; CHECK-DAG: cmpw {{[0-9]+}}, 5, 6
    136 ; CHECK-DAG: cmpw {{[0-9]+}}, 3, 4
    137 ; CHECK: crorc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
    138 ; CHECK: isel 3, 7, 8, [[REG1]]
    139 ; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
    140 ; CHECK-NO-ISEL: ori 3, 8, 0
    141 ; CHECK-NO-ISEL-NEXT: blr
    142 ; CHECK-NO-ISEL: [[TRUE]]
    143 ; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
    144 ; CHECK-NO-ISEL-NEXT: blr
    145 ; CHECK: blr
    146 }
    147 
    148 define signext i32 @testi32uge(i32 signext %c1, i32 signext %c2, i32 signext %c3, i32 signext %c4, i32 signext %a1, i32 signext %a2) #0 {
    149 entry:
    150   %cmp1 = icmp eq i32 %c3, %c4
    151   %cmp3tmp = icmp eq i32 %c1, %c2
    152   %cmp3 = icmp uge i1 %cmp3tmp, %cmp1
    153   %cond = select i1 %cmp3, i32 %a1, i32 %a2
    154   ret i32 %cond
    155 
    156 ; CHECK-LABEL: @testi32uge
    157 ; CHECK-NO-ISEL-LABEL: @testi32uge
    158 ; CHECK-DAG: cmpw {{[0-9]+}}, 5, 6
    159 ; CHECK-DAG: cmpw {{[0-9]+}}, 3, 4
    160 ; CHECK: crorc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
    161 ; CHECK: isel 3, 7, 8, [[REG1]]
    162 ; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
    163 ; CHECK-NO-ISEL: ori 3, 8, 0
    164 ; CHECK-NO-ISEL-NEXT: blr
    165 ; CHECK-NO-ISEL: [[TRUE]]
    166 ; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
    167 ; CHECK-NO-ISEL-NEXT: blr
    168 ; CHECK: blr
    169 }
    170 
    171 define signext i32 @testi32sgt(i32 signext %c1, i32 signext %c2, i32 signext %c3, i32 signext %c4, i32 signext %a1, i32 signext %a2) #0 {
    172 entry:
    173   %cmp1 = icmp eq i32 %c3, %c4
    174   %cmp3tmp = icmp eq i32 %c1, %c2
    175   %cmp3 = icmp sgt i1 %cmp3tmp, %cmp1
    176   %cond = select i1 %cmp3, i32 %a1, i32 %a2
    177   ret i32 %cond
    178 
    179 ; CHECK-LABEL: @testi32sgt
    180 ; CHECK-NO-ISEL-LABEL: @testi32sgt
    181 ; CHECK-DAG: cmpw {{[0-9]+}}, 5, 6
    182 ; CHECK-DAG: cmpw {{[0-9]+}}, 3, 4
    183 ; CHECK: crandc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
    184 ; CHECK: isel 3, 7, 8, [[REG1]]
    185 ; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
    186 ; CHECK-NO-ISEL: ori 3, 8, 0
    187 ; CHECK-NO-ISEL-NEXT: blr
    188 ; CHECK-NO-ISEL: [[TRUE]]
    189 ; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
    190 ; CHECK-NO-ISEL-NEXT: blr
    191 ; CHECK: blr
    192 }
    193 
    194 define signext i32 @testi32ugt(i32 signext %c1, i32 signext %c2, i32 signext %c3, i32 signext %c4, i32 signext %a1, i32 signext %a2) #0 {
    195 entry:
    196   %cmp1 = icmp eq i32 %c3, %c4
    197   %cmp3tmp = icmp eq i32 %c1, %c2
    198   %cmp3 = icmp ugt i1 %cmp3tmp, %cmp1
    199   %cond = select i1 %cmp3, i32 %a1, i32 %a2
    200   ret i32 %cond
    201 
    202 ; CHECK-LABEL: @testi32ugt
    203 ; CHECK-NO-ISEL-LABEL: @testi32ugt
    204 ; CHECK-DAG: cmpw {{[0-9]+}}, 5, 6
    205 ; CHECK-DAG: cmpw {{[0-9]+}}, 3, 4
    206 ; CHECK: crandc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
    207 ; CHECK: isel 3, 7, 8, [[REG1]]
    208 ; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
    209 ; CHECK-NO-ISEL: ori 3, 8, 0
    210 ; CHECK-NO-ISEL-NEXT: blr
    211 ; CHECK-NO-ISEL: [[TRUE]]
    212 ; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
    213 ; CHECK-NO-ISEL-NEXT: blr
    214 ; CHECK: blr
    215 }
    216 
    217 define signext i32 @testi32ne(i32 signext %c1, i32 signext %c2, i32 signext %c3, i32 signext %c4, i32 signext %a1, i32 signext %a2) #0 {
    218 entry:
    219   %cmp1 = icmp eq i32 %c3, %c4
    220   %cmp3tmp = icmp eq i32 %c1, %c2
    221   %cmp3 = icmp ne i1 %cmp3tmp, %cmp1
    222   %cond = select i1 %cmp3, i32 %a1, i32 %a2
    223   ret i32 %cond
    224 
    225 ; CHECK-LABEL: @testi32ne
    226 ; CHECK-NO-ISEL-LABEL: @testi32ne
    227 ; CHECK-DAG: cmpw {{[0-9]+}}, 5, 6
    228 ; CHECK-DAG: cmpw {{[0-9]+}}, 3, 4
    229 ; CHECK: crxor [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
    230 ; CHECK: isel 3, 7, 8, [[REG1]]
    231 ; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
    232 ; CHECK-NO-ISEL: ori 3, 8, 0
    233 ; CHECK-NO-ISEL-NEXT: blr
    234 ; CHECK-NO-ISEL: [[TRUE]]
    235 ; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
    236 ; CHECK-NO-ISEL-NEXT: blr
    237 ; CHECK: blr
    238 }
    239 
    240 define i64 @testi64slt(i64 %c1, i64 %c2, i64 %c3, i64 %c4, i64 %a1, i64 %a2) #0 {
    241 entry:
    242   %cmp1 = icmp eq i64 %c3, %c4
    243   %cmp3tmp = icmp eq i64 %c1, %c2
    244   %cmp3 = icmp slt i1 %cmp3tmp, %cmp1
    245   %cond = select i1 %cmp3, i64 %a1, i64 %a2
    246   ret i64 %cond
    247 
    248 ; CHECK-LABEL: @testi64slt
    249 ; CHECK-NO-ISEL-LABEL: @testi64slt
    250 ; CHECK-DAG: cmpd {{([0-9]+, )?}}5, 6
    251 ; CHECK-DAG: cmpd {{([0-9]+, )?}}3, 4
    252 ; CHECK: crandc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
    253 ; CHECK: isel 3, 7, 8, [[REG1]]
    254 ; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
    255 ; CHECK-NO-ISEL: ori 3, 8, 0
    256 ; CHECK-NO-ISEL-NEXT: blr
    257 ; CHECK-NO-ISEL: [[TRUE]]
    258 ; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
    259 ; CHECK-NO-ISEL-NEXT: blr
    260 ; CHECK: blr
    261 }
    262 
    263 define i64 @testi64ult(i64 %c1, i64 %c2, i64 %c3, i64 %c4, i64 %a1, i64 %a2) #0 {
    264 entry:
    265   %cmp1 = icmp eq i64 %c3, %c4
    266   %cmp3tmp = icmp eq i64 %c1, %c2
    267   %cmp3 = icmp ult i1 %cmp3tmp, %cmp1
    268   %cond = select i1 %cmp3, i64 %a1, i64 %a2
    269   ret i64 %cond
    270 
    271 ; CHECK-LABEL: @testi64ult
    272 ; CHECK-NO-ISEL-LABEL: @testi64ult
    273 ; CHECK-DAG: cmpd {{([0-9]+, )?}}5, 6
    274 ; CHECK-DAG: cmpd {{([0-9]+, )?}}3, 4
    275 ; CHECK: crandc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
    276 ; CHECK: isel 3, 7, 8, [[REG1]]
    277 ; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
    278 ; CHECK-NO-ISEL: ori 3, 8, 0
    279 ; CHECK-NO-ISEL-NEXT: blr
    280 ; CHECK-NO-ISEL: [[TRUE]]
    281 ; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
    282 ; CHECK-NO-ISEL-NEXT: blr
    283 ; CHECK: blr
    284 }
    285 
    286 define i64 @testi64sle(i64 %c1, i64 %c2, i64 %c3, i64 %c4, i64 %a1, i64 %a2) #0 {
    287 entry:
    288   %cmp1 = icmp eq i64 %c3, %c4
    289   %cmp3tmp = icmp eq i64 %c1, %c2
    290   %cmp3 = icmp sle i1 %cmp3tmp, %cmp1
    291   %cond = select i1 %cmp3, i64 %a1, i64 %a2
    292   ret i64 %cond
    293 
    294 ; CHECK-LABEL: @testi64sle
    295 ; CHECK-NO-ISEL-LABEL: @testi64sle
    296 ; CHECK-DAG: cmpd {{([0-9]+, )?}}5, 6
    297 ; CHECK-DAG: cmpd {{([0-9]+, )?}}3, 4
    298 ; CHECK: crorc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
    299 ; CHECK: isel 3, 7, 8, [[REG1]]
    300 ; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
    301 ; CHECK-NO-ISEL: ori 3, 8, 0
    302 ; CHECK-NO-ISEL-NEXT: blr
    303 ; CHECK-NO-ISEL: [[TRUE]]
    304 ; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
    305 ; CHECK-NO-ISEL-NEXT: blr
    306 ; CHECK: blr
    307 }
    308 
    309 define i64 @testi64ule(i64 %c1, i64 %c2, i64 %c3, i64 %c4, i64 %a1, i64 %a2) #0 {
    310 entry:
    311   %cmp1 = icmp eq i64 %c3, %c4
    312   %cmp3tmp = icmp eq i64 %c1, %c2
    313   %cmp3 = icmp ule i1 %cmp3tmp, %cmp1
    314   %cond = select i1 %cmp3, i64 %a1, i64 %a2
    315   ret i64 %cond
    316 
    317 ; CHECK-LABEL: @testi64ule
    318 ; CHECK-NO-ISEL-LABEL: @testi64ule
    319 ; CHECK-DAG: cmpd {{([0-9]+, )?}}5, 6
    320 ; CHECK-DAG: cmpd {{([0-9]+, )?}}3, 4
    321 ; CHECK: crorc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
    322 ; CHECK: isel 3, 7, 8, [[REG1]]
    323 ; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
    324 ; CHECK-NO-ISEL: ori 3, 8, 0
    325 ; CHECK-NO-ISEL-NEXT: blr
    326 ; CHECK-NO-ISEL: [[TRUE]]
    327 ; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
    328 ; CHECK-NO-ISEL-NEXT: blr
    329 ; CHECK: blr
    330 }
    331 
    332 define i64 @testi64eq(i64 %c1, i64 %c2, i64 %c3, i64 %c4, i64 %a1, i64 %a2) #0 {
    333 entry:
    334   %cmp1 = icmp eq i64 %c3, %c4
    335   %cmp3tmp = icmp eq i64 %c1, %c2
    336   %cmp3 = icmp eq i1 %cmp3tmp, %cmp1
    337   %cond = select i1 %cmp3, i64 %a1, i64 %a2
    338   ret i64 %cond
    339 
    340 ; CHECK-LABEL: @testi64eq
    341 ; CHECK-NO-ISEL-LABEL: @testi64eq
    342 ; CHECK-DAG: cmpd {{([0-9]+, )?}}5, 6
    343 ; CHECK-DAG: cmpd {{([0-9]+, )?}}3, 4
    344 ; CHECK: creqv [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
    345 ; CHECK: isel 3, 7, 8, [[REG1]]
    346 ; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
    347 ; CHECK-NO-ISEL: ori 3, 8, 0
    348 ; CHECK-NO-ISEL-NEXT: blr
    349 ; CHECK-NO-ISEL: [[TRUE]]
    350 ; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
    351 ; CHECK-NO-ISEL-NEXT: blr
    352 ; CHECK: blr
    353 }
    354 
    355 define i64 @testi64sge(i64 %c1, i64 %c2, i64 %c3, i64 %c4, i64 %a1, i64 %a2) #0 {
    356 entry:
    357   %cmp1 = icmp eq i64 %c3, %c4
    358   %cmp3tmp = icmp eq i64 %c1, %c2
    359   %cmp3 = icmp sge i1 %cmp3tmp, %cmp1
    360   %cond = select i1 %cmp3, i64 %a1, i64 %a2
    361   ret i64 %cond
    362 
    363 ; CHECK-LABEL: @testi64sge
    364 ; CHECK-NO-ISEL-LABEL: @testi64sge
    365 ; CHECK-DAG: cmpd {{([0-9]+, )?}}5, 6
    366 ; CHECK-DAG: cmpd {{([0-9]+, )?}}3, 4
    367 ; CHECK: crorc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
    368 ; CHECK: isel 3, 7, 8, [[REG1]]
    369 ; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
    370 ; CHECK-NO-ISEL: ori 3, 8, 0
    371 ; CHECK-NO-ISEL-NEXT: blr
    372 ; CHECK-NO-ISEL: [[TRUE]]
    373 ; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
    374 ; CHECK-NO-ISEL-NEXT: blr
    375 ; CHECK: blr
    376 }
    377 
    378 define i64 @testi64uge(i64 %c1, i64 %c2, i64 %c3, i64 %c4, i64 %a1, i64 %a2) #0 {
    379 entry:
    380   %cmp1 = icmp eq i64 %c3, %c4
    381   %cmp3tmp = icmp eq i64 %c1, %c2
    382   %cmp3 = icmp uge i1 %cmp3tmp, %cmp1
    383   %cond = select i1 %cmp3, i64 %a1, i64 %a2
    384   ret i64 %cond
    385 
    386 ; CHECK-LABEL: @testi64uge
    387 ; CHECK-NO-ISEL-LABEL: @testi64uge
    388 ; CHECK-DAG: cmpd {{([0-9]+, )?}}5, 6
    389 ; CHECK-DAG: cmpd {{([0-9]+, )?}}3, 4
    390 ; CHECK: crorc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
    391 ; CHECK: isel 3, 7, 8, [[REG1]]
    392 ; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
    393 ; CHECK-NO-ISEL: ori 3, 8, 0
    394 ; CHECK-NO-ISEL-NEXT: blr
    395 ; CHECK-NO-ISEL: [[TRUE]]
    396 ; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
    397 ; CHECK-NO-ISEL-NEXT: blr
    398 ; CHECK: blr
    399 }
    400 
    401 define i64 @testi64sgt(i64 %c1, i64 %c2, i64 %c3, i64 %c4, i64 %a1, i64 %a2) #0 {
    402 entry:
    403   %cmp1 = icmp eq i64 %c3, %c4
    404   %cmp3tmp = icmp eq i64 %c1, %c2
    405   %cmp3 = icmp sgt i1 %cmp3tmp, %cmp1
    406   %cond = select i1 %cmp3, i64 %a1, i64 %a2
    407   ret i64 %cond
    408 
    409 ; CHECK-LABEL: @testi64sgt
    410 ; CHECK-NO-ISEL-LABEL: @testi64sgt
    411 ; CHECK-DAG: cmpd {{([0-9]+, )?}}5, 6
    412 ; CHECK-DAG: cmpd {{([0-9]+, )?}}3, 4
    413 ; CHECK: crandc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
    414 ; CHECK: isel 3, 7, 8, [[REG1]]
    415 ; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
    416 ; CHECK-NO-ISEL: ori 3, 8, 0
    417 ; CHECK-NO-ISEL-NEXT: blr
    418 ; CHECK-NO-ISEL: [[TRUE]]
    419 ; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
    420 ; CHECK-NO-ISEL-NEXT: blr
    421 ; CHECK: blr
    422 }
    423 
    424 define i64 @testi64ugt(i64 %c1, i64 %c2, i64 %c3, i64 %c4, i64 %a1, i64 %a2) #0 {
    425 entry:
    426   %cmp1 = icmp eq i64 %c3, %c4
    427   %cmp3tmp = icmp eq i64 %c1, %c2
    428   %cmp3 = icmp ugt i1 %cmp3tmp, %cmp1
    429   %cond = select i1 %cmp3, i64 %a1, i64 %a2
    430   ret i64 %cond
    431 
    432 ; CHECK-LABEL: @testi64ugt
    433 ; CHECK-NO-ISEL-LABEL: @testi64ugt
    434 ; CHECK-DAG: cmpd {{([0-9]+, )?}}5, 6
    435 ; CHECK-DAG: cmpd {{([0-9]+, )?}}3, 4
    436 ; CHECK: crandc [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
    437 ; CHECK: isel 3, 7, 8, [[REG1]]
    438 ; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
    439 ; CHECK-NO-ISEL: ori 3, 8, 0
    440 ; CHECK-NO-ISEL-NEXT: blr
    441 ; CHECK-NO-ISEL: [[TRUE]]
    442 ; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
    443 ; CHECK-NO-ISEL-NEXT: blr
    444 ; CHECK: blr
    445 }
    446 
    447 define i64 @testi64ne(i64 %c1, i64 %c2, i64 %c3, i64 %c4, i64 %a1, i64 %a2) #0 {
    448 entry:
    449   %cmp1 = icmp eq i64 %c3, %c4
    450   %cmp3tmp = icmp eq i64 %c1, %c2
    451   %cmp3 = icmp ne i1 %cmp3tmp, %cmp1
    452   %cond = select i1 %cmp3, i64 %a1, i64 %a2
    453   ret i64 %cond
    454 
    455 ; CHECK-LABEL: @testi64ne
    456 ; CHECK-NO-ISEL-LABEL: @testi64ne
    457 ; CHECK-DAG: cmpd {{([0-9]+, )?}}5, 6
    458 ; CHECK-DAG: cmpd {{([0-9]+, )?}}3, 4
    459 ; CHECK: crxor [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
    460 ; CHECK: isel 3, 7, 8, [[REG1]]
    461 ; CHECK-NO-ISEL: bc 12, 20, [[TRUE:.LBB[0-9]+]]
    462 ; CHECK-NO-ISEL: ori 3, 8, 0
    463 ; CHECK-NO-ISEL-NEXT: blr
    464 ; CHECK-NO-ISEL: [[TRUE]]
    465 ; CHECK-NO-ISEL-NEXT: addi 3, 7, 0
    466 ; CHECK-NO-ISEL-NEXT: blr
    467 ; CHECK: blr
    468 }
    469 
    470 define float @testfloatslt(float %c1, float %c2, float %c3, float %c4, float %a1, float %a2) #0 {
    471 entry:
    472   %cmp1 = fcmp oeq float %c3, %c4
    473   %cmp3tmp = fcmp oeq float %c1, %c2
    474   %cmp3 = icmp slt i1 %cmp3tmp, %cmp1
    475   %cond = select i1 %cmp3, float %a1, float %a2
    476   ret float %cond
    477 
    478 ; CHECK-LABEL: @testfloatslt
    479 ; CHECK: fcmpu {{[0-9]+}}, 3, 4
    480 ; CHECK: bc 12, 2, .LBB[[BB1:[0-9_]+]]
    481 ; CHECK: fcmpu {{[0-9]+}}, 1, 2
    482 ; CHECK: bc 12, 2, .LBB[[BB2:[0-9_]+]]
    483 ; CHECK: .LBB[[BB1]]:
    484 ; CHECK: fmr 5, 6
    485 ; CHECK: .LBB[[BB2]]:
    486 ; CHECK: fmr 1, 5
    487 ; CHECK: blr
    488 }
    489 
    490 define float @testfloatult(float %c1, float %c2, float %c3, float %c4, float %a1, float %a2) #0 {
    491 entry:
    492   %cmp1 = fcmp oeq float %c3, %c4
    493   %cmp3tmp = fcmp oeq float %c1, %c2
    494   %cmp3 = icmp ult i1 %cmp3tmp, %cmp1
    495   %cond = select i1 %cmp3, float %a1, float %a2
    496   ret float %cond
    497 
    498 ; CHECK-LABEL: @testfloatult
    499 ; CHECK: fcmpu {{[0-9]+}}, 3, 4
    500 ; CHECK: bc 4, 2, .LBB[[BB1:[0-9_]+]]
    501 ; CHECK: fcmpu {{[0-9]+}}, 1, 2
    502 ; CHECK: bc 4, 2, .LBB[[BB2:[0-9_]+]]
    503 ; CHECK: .LBB[[BB1]]:
    504 ; CHECK: fmr 5, 6
    505 ; CHECK: .LBB[[BB2]]:
    506 ; CHECK: fmr 1, 5
    507 ; CHECK: blr
    508 }
    509 
    510 define float @testfloatsle(float %c1, float %c2, float %c3, float %c4, float %a1, float %a2) #0 {
    511 entry:
    512   %cmp1 = fcmp oeq float %c3, %c4
    513   %cmp3tmp = fcmp oeq float %c1, %c2
    514   %cmp3 = icmp sle i1 %cmp3tmp, %cmp1
    515   %cond = select i1 %cmp3, float %a1, float %a2
    516   ret float %cond
    517 
    518 ; CHECK-LABEL: @testfloatsle
    519 ; CHECK: fcmpu {{[0-9]+}}, 3, 4
    520 ; CHECK: bc 4, 2, .LBB[[BB:[0-9_]+]]
    521 ; CHECK: fcmpu {{[0-9]+}}, 1, 2
    522 ; CHECK: bc 12, 2, .LBB[[BB]]
    523 ; CHECK: fmr 5, 6
    524 ; CHECK: .LBB[[BB]]:
    525 ; CHECK: fmr 1, 5
    526 ; CHECK: blr
    527 }
    528 
    529 define float @testfloatule(float %c1, float %c2, float %c3, float %c4, float %a1, float %a2) #0 {
    530 entry:
    531   %cmp1 = fcmp oeq float %c3, %c4
    532   %cmp3tmp = fcmp oeq float %c1, %c2
    533   %cmp3 = icmp ule i1 %cmp3tmp, %cmp1
    534   %cond = select i1 %cmp3, float %a1, float %a2
    535   ret float %cond
    536 
    537 ; CHECK-LABEL: @testfloatule
    538 ; CHECK: fcmpu {{[0-9]+}}, 3, 4
    539 ; CHECK: bc 12, 2, .LBB[[BB:[0-9_]+]]
    540 ; CHECK: fcmpu {{[0-9]+}}, 1, 2
    541 ; CHECK: bc 4, 2, .LBB[[BB]]
    542 ; CHECK: fmr 5, 6
    543 ; CHECK: .LBB[[BB]]:
    544 ; CHECK: fmr 1, 5
    545 ; CHECK: blr
    546 }
    547 
    548 define float @testfloateq(float %c1, float %c2, float %c3, float %c4, float %a1, float %a2) #0 {
    549 entry:
    550   %cmp1 = fcmp oeq float %c3, %c4
    551   %cmp3tmp = fcmp oeq float %c1, %c2
    552   %cmp3 = icmp eq i1 %cmp3tmp, %cmp1
    553   %cond = select i1 %cmp3, float %a1, float %a2
    554   ret float %cond
    555 
    556 ; CHECK-LABEL: @testfloateq
    557 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
    558 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
    559 ; CHECK: creqv [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
    560 ; CHECK: bclr 12, [[REG1]], 0
    561 ; CHECK: fmr 1, 6
    562 ; CHECK: blr
    563 }
    564 
    565 define float @testfloatsge(float %c1, float %c2, float %c3, float %c4, float %a1, float %a2) #0 {
    566 entry:
    567   %cmp1 = fcmp oeq float %c3, %c4
    568   %cmp3tmp = fcmp oeq float %c1, %c2
    569   %cmp3 = icmp sge i1 %cmp3tmp, %cmp1
    570   %cond = select i1 %cmp3, float %a1, float %a2
    571   ret float %cond
    572 
    573 ; CHECK-LABEL: @testfloatsge
    574 ; CHECK: fcmpu {{[0-9]+}}, 3, 4
    575 ; CHECK: bc 12, 2, .LBB[[BB:[0-9_]+]]
    576 ; CHECK: fcmpu {{[0-9]+}}, 1, 2
    577 ; CHECK: bc 4, 2, .LBB[[BB]]
    578 ; CHECK: fmr 5, 6
    579 ; CHECK: .LBB[[BB]]:
    580 ; CHECK: fmr 1, 5
    581 ; CHECK: blr
    582 }
    583 
    584 define float @testfloatuge(float %c1, float %c2, float %c3, float %c4, float %a1, float %a2) #0 {
    585 entry:
    586   %cmp1 = fcmp oeq float %c3, %c4
    587   %cmp3tmp = fcmp oeq float %c1, %c2
    588   %cmp3 = icmp uge i1 %cmp3tmp, %cmp1
    589   %cond = select i1 %cmp3, float %a1, float %a2
    590   ret float %cond
    591 
    592 ; CHECK-LABEL: @testfloatuge
    593 ; CHECK: fcmpu {{[0-9]+}}, 3, 4
    594 ; CHECK: bc 4, 2, .LBB[[BB:[0-9_]+]]
    595 ; CHECK: fcmpu {{[0-9]+}}, 1, 2
    596 ; CHECK: bc 12, 2, .LBB[[BB]]
    597 ; CHECK: fmr 5, 6
    598 ; CHECK: .LBB[[BB]]:
    599 ; CHECK: fmr 1, 5
    600 ; CHECK: blr
    601 }
    602 
    603 define float @testfloatsgt(float %c1, float %c2, float %c3, float %c4, float %a1, float %a2) #0 {
    604 entry:
    605   %cmp1 = fcmp oeq float %c3, %c4
    606   %cmp3tmp = fcmp oeq float %c1, %c2
    607   %cmp3 = icmp sgt i1 %cmp3tmp, %cmp1
    608   %cond = select i1 %cmp3, float %a1, float %a2
    609   ret float %cond
    610 
    611 ; CHECK-LABEL: @testfloatsgt
    612 ; CHECK: fcmpu {{[0-9]+}}, 3, 4
    613 ; CHECK: bc 4, 2, .LBB[[BB1:[0-9_]+]]
    614 ; CHECK: fcmpu {{[0-9]+}}, 1, 2
    615 ; CHECK: bc 4, 2, .LBB[[BB2:[0-9_]+]]
    616 ; CHECK: .LBB[[BB1]]:
    617 ; CHECK: fmr 5, 6
    618 ; CHECK: .LBB[[BB2]]:
    619 ; CHECK: fmr 1, 5
    620 ; CHECK: blr
    621 }
    622 
    623 define float @testfloatugt(float %c1, float %c2, float %c3, float %c4, float %a1, float %a2) #0 {
    624 entry:
    625   %cmp1 = fcmp oeq float %c3, %c4
    626   %cmp3tmp = fcmp oeq float %c1, %c2
    627   %cmp3 = icmp ugt i1 %cmp3tmp, %cmp1
    628   %cond = select i1 %cmp3, float %a1, float %a2
    629   ret float %cond
    630 
    631 ; CHECK-LABEL: @testfloatugt
    632 ; CHECK: fcmpu {{[0-9]+}}, 3, 4
    633 ; CHECK: bc 12, 2, .LBB[[BB1:[0-9_]+]]
    634 ; CHECK: fcmpu {{[0-9]+}}, 1, 2
    635 ; CHECK: bc 12, 2, .LBB[[BB2:[0-9_]+]]
    636 ; CHECK: .LBB[[BB1]]:
    637 ; CHECK: fmr 5, 6
    638 ; CHECK: .LBB[[BB2]]:
    639 ; CHECK: fmr 1, 5
    640 ; CHECK: blr
    641 }
    642 
    643 define float @testfloatne(float %c1, float %c2, float %c3, float %c4, float %a1, float %a2) #0 {
    644 entry:
    645   %cmp1 = fcmp oeq float %c3, %c4
    646   %cmp3tmp = fcmp oeq float %c1, %c2
    647   %cmp3 = icmp ne i1 %cmp3tmp, %cmp1
    648   %cond = select i1 %cmp3, float %a1, float %a2
    649   ret float %cond
    650 
    651 ; CHECK-LABEL: @testfloatne
    652 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
    653 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
    654 ; CHECK: crxor [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
    655 ; CHECK: bclr 12, [[REG1]], 0
    656 ; CHECK: fmr 1, 6
    657 ; CHECK: blr
    658 }
    659 
    660 define double @testdoubleslt(double %c1, double %c2, double %c3, double %c4, double %a1, double %a2) #0 {
    661 entry:
    662   %cmp1 = fcmp oeq double %c3, %c4
    663   %cmp3tmp = fcmp oeq double %c1, %c2
    664   %cmp3 = icmp slt i1 %cmp3tmp, %cmp1
    665   %cond = select i1 %cmp3, double %a1, double %a2
    666   ret double %cond
    667 
    668 ; CHECK-LABEL: @testdoubleslt
    669 ; CHECK: fcmpu {{[0-9]+}}, 3, 4
    670 ; CHECK: bc 12, 2, .LBB[[BB1:[0-9_]+]]
    671 ; CHECK: fcmpu {{[0-9]+}}, 1, 2
    672 ; CHECK: bc 12, 2, .LBB[[BB2:[0-9_]+]]
    673 ; CHECK: .LBB[[BB1]]:
    674 ; CHECK: fmr 5, 6
    675 ; CHECK: .LBB[[BB2]]:
    676 ; CHECK: fmr 1, 5
    677 ; CHECK: blr
    678 }
    679 
    680 define double @testdoubleult(double %c1, double %c2, double %c3, double %c4, double %a1, double %a2) #0 {
    681 entry:
    682   %cmp1 = fcmp oeq double %c3, %c4
    683   %cmp3tmp = fcmp oeq double %c1, %c2
    684   %cmp3 = icmp ult i1 %cmp3tmp, %cmp1
    685   %cond = select i1 %cmp3, double %a1, double %a2
    686   ret double %cond
    687 
    688 ; CHECK-LABEL: @testdoubleult
    689 ; CHECK: fcmpu {{[0-9]+}}, 3, 4
    690 ; CHECK: bc 4, 2, .LBB[[BB1:[0-9_]+]]
    691 ; CHECK: fcmpu {{[0-9]+}}, 1, 2
    692 ; CHECK: bc 4, 2, .LBB[[BB2:[0-9_]+]]
    693 ; CHECK: .LBB[[BB1]]:
    694 ; CHECK: fmr 5, 6
    695 ; CHECK: .LBB[[BB2]]:
    696 ; CHECK: fmr 1, 5
    697 ; CHECK: blr
    698 }
    699 
    700 define double @testdoublesle(double %c1, double %c2, double %c3, double %c4, double %a1, double %a2) #0 {
    701 entry:
    702   %cmp1 = fcmp oeq double %c3, %c4
    703   %cmp3tmp = fcmp oeq double %c1, %c2
    704   %cmp3 = icmp sle i1 %cmp3tmp, %cmp1
    705   %cond = select i1 %cmp3, double %a1, double %a2
    706   ret double %cond
    707 
    708 ; CHECK-LABEL: @testdoublesle
    709 ; CHECK: fcmpu {{[0-9]+}}, 3, 4
    710 ; CHECK: bc 4, 2, .LBB[[BB:[0-9_]+]]
    711 ; CHECK: fcmpu {{[0-9]+}}, 1, 2
    712 ; CHECK: bc 12, 2, .LBB[[BB]]
    713 ; CHECK: fmr 5, 6
    714 ; CHECK: .LBB[[BB]]:
    715 ; CHECK: fmr 1, 5
    716 ; CHECK: blr
    717 }
    718 
    719 define double @testdoubleule(double %c1, double %c2, double %c3, double %c4, double %a1, double %a2) #0 {
    720 entry:
    721   %cmp1 = fcmp oeq double %c3, %c4
    722   %cmp3tmp = fcmp oeq double %c1, %c2
    723   %cmp3 = icmp ule i1 %cmp3tmp, %cmp1
    724   %cond = select i1 %cmp3, double %a1, double %a2
    725   ret double %cond
    726 
    727 ; CHECK-LABEL: @testdoubleule
    728 ; CHECK: fcmpu {{[0-9]+}}, 3, 4
    729 ; CHECK: bc 12, 2, .LBB[[BB:[0-9_]+]]
    730 ; CHECK: fcmpu {{[0-9]+}}, 1, 2
    731 ; CHECK: bc 4, 2, .LBB[[BB]]
    732 ; CHECK: fmr 5, 6
    733 ; CHECK: .LBB[[BB]]:
    734 ; CHECK: fmr 1, 5
    735 ; CHECK: blr
    736 }
    737 
    738 define double @testdoubleeq(double %c1, double %c2, double %c3, double %c4, double %a1, double %a2) #0 {
    739 entry:
    740   %cmp1 = fcmp oeq double %c3, %c4
    741   %cmp3tmp = fcmp oeq double %c1, %c2
    742   %cmp3 = icmp eq i1 %cmp3tmp, %cmp1
    743   %cond = select i1 %cmp3, double %a1, double %a2
    744   ret double %cond
    745 
    746 ; CHECK-LABEL: @testdoubleeq
    747 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
    748 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
    749 ; CHECK: creqv [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
    750 ; CHECK: bclr 12, [[REG1]], 0
    751 ; CHECK: fmr 1, 6
    752 ; CHECK: blr
    753 }
    754 
    755 define double @testdoublesge(double %c1, double %c2, double %c3, double %c4, double %a1, double %a2) #0 {
    756 entry:
    757   %cmp1 = fcmp oeq double %c3, %c4
    758   %cmp3tmp = fcmp oeq double %c1, %c2
    759   %cmp3 = icmp sge i1 %cmp3tmp, %cmp1
    760   %cond = select i1 %cmp3, double %a1, double %a2
    761   ret double %cond
    762 
    763 ; CHECK-LABEL: @testdoublesge
    764 ; CHECK: fcmpu {{[0-9]+}}, 3, 4
    765 ; CHECK: bc 12, 2, .LBB[[BB:[0-9_]+]]
    766 ; CHECK: fcmpu {{[0-9]+}}, 1, 2
    767 ; CHECK: bc 4, 2, .LBB[[BB]]
    768 ; CHECK: fmr 5, 6
    769 ; CHECK: .LBB[[BB]]:
    770 ; CHECK: fmr 1, 5
    771 ; CHECK: blr
    772 }
    773 
    774 define double @testdoubleuge(double %c1, double %c2, double %c3, double %c4, double %a1, double %a2) #0 {
    775 entry:
    776   %cmp1 = fcmp oeq double %c3, %c4
    777   %cmp3tmp = fcmp oeq double %c1, %c2
    778   %cmp3 = icmp uge i1 %cmp3tmp, %cmp1
    779   %cond = select i1 %cmp3, double %a1, double %a2
    780   ret double %cond
    781 
    782 ; CHECK-LABEL: @testdoubleuge
    783 ; CHECK: fcmpu {{[0-9]+}}, 3, 4
    784 ; CHECK: bc 4, 2, .LBB[[BB:[0-9_]+]]
    785 ; CHECK: fcmpu {{[0-9]+}}, 1, 2
    786 ; CHECK: bc 12, 2, .LBB[[BB]]
    787 ; CHECK: fmr 5, 6
    788 ; CHECK: .LBB[[BB]]:
    789 ; CHECK: fmr 1, 5
    790 ; CHECK: blr
    791 }
    792 
    793 define double @testdoublesgt(double %c1, double %c2, double %c3, double %c4, double %a1, double %a2) #0 {
    794 entry:
    795   %cmp1 = fcmp oeq double %c3, %c4
    796   %cmp3tmp = fcmp oeq double %c1, %c2
    797   %cmp3 = icmp sgt i1 %cmp3tmp, %cmp1
    798   %cond = select i1 %cmp3, double %a1, double %a2
    799   ret double %cond
    800 
    801 ; CHECK-LABEL: @testdoublesgt
    802 ; CHECK: fcmpu {{[0-9]+}}, 3, 4
    803 ; CHECK: bc 4, 2, .LBB[[BB1:[0-9_]+]]
    804 ; CHECK: fcmpu {{[0-9]+}}, 1, 2
    805 ; CHECK: bc 4, 2, .LBB[[BB2:[0-9_]+]]
    806 ; CHECK: .LBB[[BB1]]:
    807 ; CHECK: fmr 5, 6
    808 ; CHECK: .LBB[[BB2]]:
    809 ; CHECK: fmr 1, 5
    810 ; CHECK: blr
    811 }
    812 
    813 define double @testdoubleugt(double %c1, double %c2, double %c3, double %c4, double %a1, double %a2) #0 {
    814 entry:
    815   %cmp1 = fcmp oeq double %c3, %c4
    816   %cmp3tmp = fcmp oeq double %c1, %c2
    817   %cmp3 = icmp ugt i1 %cmp3tmp, %cmp1
    818   %cond = select i1 %cmp3, double %a1, double %a2
    819   ret double %cond
    820 
    821 ; CHECK-LABEL: @testdoubleugt
    822 ; CHECK: fcmpu {{[0-9]+}}, 3, 4
    823 ; CHECK: bc 12, 2, .LBB[[BB1:[0-9_]+]]
    824 ; CHECK: fcmpu {{[0-9]+}}, 1, 2
    825 ; CHECK: bc 12, 2, .LBB[[BB2:[0-9_]+]]
    826 ; CHECK: .LBB[[BB1]]:
    827 ; CHECK: fmr 5, 6
    828 ; CHECK: .LBB[[BB2]]:
    829 ; CHECK: fmr 1, 5
    830 ; CHECK: blr
    831 }
    832 
    833 define double @testdoublene(double %c1, double %c2, double %c3, double %c4, double %a1, double %a2) #0 {
    834 entry:
    835   %cmp1 = fcmp oeq double %c3, %c4
    836   %cmp3tmp = fcmp oeq double %c1, %c2
    837   %cmp3 = icmp ne i1 %cmp3tmp, %cmp1
    838   %cond = select i1 %cmp3, double %a1, double %a2
    839   ret double %cond
    840 
    841 ; CHECK-LABEL: @testdoublene
    842 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
    843 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
    844 ; CHECK: crxor [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
    845 ; CHECK: bclr 12, [[REG1]], 0
    846 ; CHECK: fmr 1, 6
    847 ; CHECK: blr
    848 }
    849 
    850 define <4 x float> @testv4floatslt(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #0 {
    851 entry:
    852   %cmp1 = fcmp oeq float %c3, %c4
    853   %cmp3tmp = fcmp oeq float %c1, %c2
    854   %cmp3 = icmp slt i1 %cmp3tmp, %cmp1
    855   %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
    856   ret <4 x float> %cond
    857 
    858 ; CHECK-LABEL: @testv4floatslt
    859 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
    860 ; CHECK: bc 12, 2, .LBB[[BB:[0-9_]+]]
    861 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
    862 ; CHECK: bclr 12, 2, 0
    863 ; CHECK: .LBB[[BB]]:
    864 ; CHECK: vmr 2, 3
    865 ; CHECK: blr
    866 }
    867 
    868 define <4 x float> @testv4floatult(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #0 {
    869 entry:
    870   %cmp1 = fcmp oeq float %c3, %c4
    871   %cmp3tmp = fcmp oeq float %c1, %c2
    872   %cmp3 = icmp ult i1 %cmp3tmp, %cmp1
    873   %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
    874   ret <4 x float> %cond
    875 
    876 ; CHECK-LABEL: @testv4floatult
    877 ; CHECK: fcmpu {{[0-9]+}}, 3, 4
    878 ; CHECK: bc 4, 2, .LBB[[BB:[0-9_]+]]
    879 ; CHECK: fcmpu {{[0-9]+}}, 1, 2
    880 ; CHECK: bclr 4, 2, 0
    881 ; CHECK: .LBB[[BB]]:
    882 ; CHECK: vmr 2, 3
    883 ; CHECK: blr
    884 }
    885 
    886 define <4 x float> @testv4floatsle(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #0 {
    887 entry:
    888   %cmp1 = fcmp oeq float %c3, %c4
    889   %cmp3tmp = fcmp oeq float %c1, %c2
    890   %cmp3 = icmp sle i1 %cmp3tmp, %cmp1
    891   %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
    892   ret <4 x float> %cond
    893 
    894 ; CHECK-LABEL: @testv4floatsle
    895 ; CHECK: fcmpu {{[0-9]+}}, 3, 4
    896 ; CHECK: bclr 4, 2, 0
    897 ; CHECK: fcmpu {{[0-9]+}}, 1, 2
    898 ; CHECK: bclr 12, 2, 0
    899 ; CHECK: vmr 2, 3
    900 ; CHECK: blr
    901 }
    902 
    903 define <4 x float> @testv4floatule(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #0 {
    904 entry:
    905   %cmp1 = fcmp oeq float %c3, %c4
    906   %cmp3tmp = fcmp oeq float %c1, %c2
    907   %cmp3 = icmp ule i1 %cmp3tmp, %cmp1
    908   %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
    909   ret <4 x float> %cond
    910 
    911 ; CHECK-LABEL: @testv4floatule
    912 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
    913 ; CHECK: bclr 12, 2, 0
    914 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
    915 ; CHECK: bclr 4, 2, 0
    916 ; CHECK: vmr 2, 3
    917 ; CHECK: blr
    918 }
    919 
    920 define <4 x float> @testv4floateq(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #0 {
    921 entry:
    922   %cmp1 = fcmp oeq float %c3, %c4
    923   %cmp3tmp = fcmp oeq float %c1, %c2
    924   %cmp3 = icmp eq i1 %cmp3tmp, %cmp1
    925   %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
    926   ret <4 x float> %cond
    927 
    928 ; CHECK-LABEL: @testv4floateq
    929 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
    930 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
    931 ; CHECK: crxor [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
    932 ; CHECK: bc 12, [[REG1]], .LBB[[BB1:[0-9_]+]]
    933 ; CHECK: vmr 3, 2
    934 ; CHECK: .LBB[[BB1]]
    935 ; CHECK: vmr 2, 3
    936 ; CHECK: blr
    937 }
    938 
    939 define <4 x float> @testv4floatsge(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #0 {
    940 entry:
    941   %cmp1 = fcmp oeq float %c3, %c4
    942   %cmp3tmp = fcmp oeq float %c1, %c2
    943   %cmp3 = icmp sge i1 %cmp3tmp, %cmp1
    944   %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
    945   ret <4 x float> %cond
    946 
    947 ; CHECK-LABEL: @testv4floatsge
    948 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
    949 ; CHECK: bclr 12, 2, 0
    950 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
    951 ; CHECK: bclr 4, 2, 0
    952 ; CHECK: vmr 2, 3
    953 ; CHECK: blr
    954 }
    955 
    956 define <4 x float> @testv4floatuge(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #0 {
    957 entry:
    958   %cmp1 = fcmp oeq float %c3, %c4
    959   %cmp3tmp = fcmp oeq float %c1, %c2
    960   %cmp3 = icmp uge i1 %cmp3tmp, %cmp1
    961   %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
    962   ret <4 x float> %cond
    963 
    964 ; CHECK-LABEL: @testv4floatuge
    965 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
    966 ; CHECK: bclr 4, 2, 0
    967 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
    968 ; CHECK: bclr 12, 2, 0
    969 ; CHECK: vmr 2, 3
    970 ; CHECK: blr
    971 }
    972 
    973 define <4 x float> @testv4floatsgt(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #0 {
    974 entry:
    975   %cmp1 = fcmp oeq float %c3, %c4
    976   %cmp3tmp = fcmp oeq float %c1, %c2
    977   %cmp3 = icmp sgt i1 %cmp3tmp, %cmp1
    978   %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
    979   ret <4 x float> %cond
    980 
    981 ; CHECK-LABEL: @testv4floatsgt
    982 ; CHECK: fcmpu {{[0-9]+}}, 3, 4
    983 ; CHECK: bc 4, 2, .LBB[[BB1:[0-9_]+]]
    984 ; CHECK: fcmpu {{[0-9]+}}, 1, 2
    985 ; CHECK: bclr 4, 2, 0
    986 ; CHECK: vmr 2, 3
    987 ; CHECK: blr
    988 }
    989 
    990 define <4 x float> @testv4floatugt(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #0 {
    991 entry:
    992   %cmp1 = fcmp oeq float %c3, %c4
    993   %cmp3tmp = fcmp oeq float %c1, %c2
    994   %cmp3 = icmp ugt i1 %cmp3tmp, %cmp1
    995   %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
    996   ret <4 x float> %cond
    997 
    998 ; CHECK-LABEL: @testv4floatugt
    999 ; CHECK: fcmpu {{[0-9]+}}, 3, 4
   1000 ; CHECK: bc 12, 2, .LBB[[BB:[0-9_]+]]
   1001 ; CHECK: fcmpu {{[0-9]+}}, 1, 2
   1002 ; CHECK: bclr 12, 2, 0
   1003 ; CHECK: .LBB[[BB]]
   1004 ; CHECK: vmr 2, 3
   1005 ; CHECK: blr
   1006 }
   1007 
   1008 define <4 x float> @testv4floatne(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #0 {
   1009 entry:
   1010   %cmp1 = fcmp oeq float %c3, %c4
   1011   %cmp3tmp = fcmp oeq float %c1, %c2
   1012   %cmp3 = icmp ne i1 %cmp3tmp, %cmp1
   1013   %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
   1014   ret <4 x float> %cond
   1015 
   1016 ; CHECK-LABEL: @testv4floatne
   1017 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
   1018 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
   1019 ; CHECK: crxor [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
   1020 ; CHECK: bclr 12, [[REG1]], 0
   1021 ; CHECK: vmr 2, 3
   1022 ; CHECK: blr
   1023 }
   1024 
   1025 define ppc_fp128 @testppc_fp128eq(ppc_fp128 %c1, ppc_fp128 %c2, ppc_fp128 %c3, ppc_fp128 %c4, ppc_fp128 %a1, ppc_fp128 %a2) #0 {
   1026 entry:
   1027   %cmp1 = fcmp oeq ppc_fp128 %c3, %c4
   1028   %cmp3tmp = fcmp oeq ppc_fp128 %c1, %c2
   1029   %cmp3 = icmp eq i1 %cmp3tmp, %cmp1
   1030   %cond = select i1 %cmp3, ppc_fp128 %a1, ppc_fp128 %a2
   1031   ret ppc_fp128 %cond
   1032 
   1033 ; FIXME: Because of the way that the late SELECT_* pseudo-instruction expansion
   1034 ; works, we end up with two blocks with the same predicate. These could be
   1035 ; combined.
   1036 
   1037 ; CHECK-LABEL: @testppc_fp128eq
   1038 ; CHECK-DAG: fcmpu {{[0-9]+}}, 6, 8
   1039 ; CHECK-DAG: fcmpu {{[0-9]+}}, 5, 7
   1040 ; CHECK-DAG: fcmpu {{[0-9]+}}, 2, 4
   1041 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 3
   1042 ; CHECK: crand [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
   1043 ; CHECK: crand [[REG2:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
   1044 ; CHECK: crxor [[REG3:[0-9]+]], [[REG2]], [[REG1]]
   1045 ; CHECK: bc 12, [[REG3]], .LBB[[BB1:[0-9_]+]]
   1046 ; CHECK: fmr 11, 9
   1047 ; CHECK: .LBB[[BB1]]:
   1048 ; CHECK: bc 12, [[REG3]], .LBB[[BB2:[0-9_]+]]
   1049 ; CHECK: fmr 12, 10
   1050 ; CHECK: .LBB[[BB2]]:
   1051 ; CHECK-DAG: fmr 1, 11
   1052 ; CHECK-DAG: fmr 2, 12
   1053 ; CHECK: blr
   1054 }
   1055 
   1056 define <2 x double> @testv2doubleslt(float %c1, float %c2, float %c3, float %c4, <2 x double> %a1, <2 x double> %a2) #0 {
   1057 entry:
   1058   %cmp1 = fcmp oeq float %c3, %c4
   1059   %cmp3tmp = fcmp oeq float %c1, %c2
   1060   %cmp3 = icmp slt i1 %cmp3tmp, %cmp1
   1061   %cond = select i1 %cmp3, <2 x double> %a1, <2 x double> %a2
   1062   ret <2 x double> %cond
   1063 
   1064 ; CHECK-LABEL: @testv2doubleslt
   1065 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
   1066 ; CHECK: bc 12, 2, .LBB[[BB:[0-9_]+]]
   1067 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
   1068 ; CHECK: bc 4, 2, .LBB[[BB]]
   1069 ; CHECK: .LBB[[BB]]:
   1070 ; CHECK: vmr 2, 3
   1071 ; CHECK: blr
   1072 }
   1073 
   1074 define <2 x double> @testv2doubleult(float %c1, float %c2, float %c3, float %c4, <2 x double> %a1, <2 x double> %a2) #0 {
   1075 entry:
   1076   %cmp1 = fcmp oeq float %c3, %c4
   1077   %cmp3tmp = fcmp oeq float %c1, %c2
   1078   %cmp3 = icmp ult i1 %cmp3tmp, %cmp1
   1079   %cond = select i1 %cmp3, <2 x double> %a1, <2 x double> %a2
   1080   ret <2 x double> %cond
   1081 
   1082 ; CHECK-LABEL: @testv2doubleult
   1083 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
   1084 ; CHECK: bc 4, 2, .LBB[[BB:[0-9_]+]]
   1085 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
   1086 ; CHECK: bc 12, 2, .LBB[[BB]]
   1087 ; CHECK: .LBB[[BB]]:
   1088 ; CHECK: vmr 2, 3
   1089 ; CHECK: blr
   1090 }
   1091 
   1092 define <2 x double> @testv2doublesle(float %c1, float %c2, float %c3, float %c4, <2 x double> %a1, <2 x double> %a2) #0 {
   1093 entry:
   1094   %cmp1 = fcmp oeq float %c3, %c4
   1095   %cmp3tmp = fcmp oeq float %c1, %c2
   1096   %cmp3 = icmp sle i1 %cmp3tmp, %cmp1
   1097   %cond = select i1 %cmp3, <2 x double> %a1, <2 x double> %a2
   1098   ret <2 x double> %cond
   1099 
   1100 ; CHECK-LABEL: @testv2doublesle
   1101 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
   1102 ; CHECK: bclr 4, 2, 0
   1103 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
   1104 ; CHECK: bclr 12, 2, 0
   1105 ; CHECK: vmr 2, 3
   1106 ; CHECK: blr
   1107 }
   1108 
   1109 define <2 x double> @testv2doubleule(float %c1, float %c2, float %c3, float %c4, <2 x double> %a1, <2 x double> %a2) #0 {
   1110 entry:
   1111   %cmp1 = fcmp oeq float %c3, %c4
   1112   %cmp3tmp = fcmp oeq float %c1, %c2
   1113   %cmp3 = icmp ule i1 %cmp3tmp, %cmp1
   1114   %cond = select i1 %cmp3, <2 x double> %a1, <2 x double> %a2
   1115   ret <2 x double> %cond
   1116 
   1117 ; CHECK-LABEL: @testv2doubleule
   1118 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
   1119 ; CHECK: bclr 12, 2, 0
   1120 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
   1121 ; CHECK: bclr 4, 2, 0
   1122 ; CHECK: vmr 2, 3
   1123 ; CHECK: blr
   1124 }
   1125 
   1126 define <2 x double> @testv2doubleeq(float %c1, float %c2, float %c3, float %c4, <2 x double> %a1, <2 x double> %a2) #0 {
   1127 entry:
   1128   %cmp1 = fcmp oeq float %c3, %c4
   1129   %cmp3tmp = fcmp oeq float %c1, %c2
   1130   %cmp3 = icmp eq i1 %cmp3tmp, %cmp1
   1131   %cond = select i1 %cmp3, <2 x double> %a1, <2 x double> %a2
   1132   ret <2 x double> %cond
   1133 
   1134 ; CHECK-LABEL: @testv2doubleeq
   1135 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
   1136 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
   1137 ; CHECK: crxor [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
   1138 ; CHECK: bc 12, [[REG1]], .LBB[[BB55:[0-9_]+]]
   1139 ; CHECK: vmr 3, 2
   1140 ; CHECK: .LBB[[BB55]]
   1141 ; CHECK: vmr 2, 3
   1142 ; CHECK: blr
   1143 }
   1144 
   1145 define <2 x double> @testv2doublesge(float %c1, float %c2, float %c3, float %c4, <2 x double> %a1, <2 x double> %a2) #0 {
   1146 entry:
   1147   %cmp1 = fcmp oeq float %c3, %c4
   1148   %cmp3tmp = fcmp oeq float %c1, %c2
   1149   %cmp3 = icmp sge i1 %cmp3tmp, %cmp1
   1150   %cond = select i1 %cmp3, <2 x double> %a1, <2 x double> %a2
   1151   ret <2 x double> %cond
   1152 
   1153 ; CHECK-LABEL: @testv2doublesge
   1154 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
   1155 ; CHECK: bclr 12, 2, 0
   1156 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
   1157 ; CHECK: bclr 4, 2, 0
   1158 ; CHECK: vmr 2, 3
   1159 ; CHECK: blr
   1160 }
   1161 
   1162 define <2 x double> @testv2doubleuge(float %c1, float %c2, float %c3, float %c4, <2 x double> %a1, <2 x double> %a2) #0 {
   1163 entry:
   1164   %cmp1 = fcmp oeq float %c3, %c4
   1165   %cmp3tmp = fcmp oeq float %c1, %c2
   1166   %cmp3 = icmp uge i1 %cmp3tmp, %cmp1
   1167   %cond = select i1 %cmp3, <2 x double> %a1, <2 x double> %a2
   1168   ret <2 x double> %cond
   1169 
   1170 ; CHECK-LABEL: @testv2doubleuge
   1171 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
   1172 ; CHECK: bclr 4, 2, 0
   1173 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
   1174 ; CHECK: bclr 12, 2, 0
   1175 ; CHECK: vmr 2, 3
   1176 ; CHECK: blr
   1177 }
   1178 
   1179 define <2 x double> @testv2doublesgt(float %c1, float %c2, float %c3, float %c4, <2 x double> %a1, <2 x double> %a2) #0 {
   1180 entry:
   1181   %cmp1 = fcmp oeq float %c3, %c4
   1182   %cmp3tmp = fcmp oeq float %c1, %c2
   1183   %cmp3 = icmp sgt i1 %cmp3tmp, %cmp1
   1184   %cond = select i1 %cmp3, <2 x double> %a1, <2 x double> %a2
   1185   ret <2 x double> %cond
   1186 
   1187 ; CHECK-LABEL: @testv2doublesgt
   1188 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
   1189 ; CHECK: bc 4, 2, .LBB[[BB:[0-9_]+]]
   1190 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
   1191 ; CHECK: bc 12, 2, .LBB[[BB]]
   1192 ; CHECK: .LBB[[BB]]
   1193 ; CHECK: vmr 2, 3
   1194 ; CHECK: blr
   1195 }
   1196 
   1197 define <2 x double> @testv2doubleugt(float %c1, float %c2, float %c3, float %c4, <2 x double> %a1, <2 x double> %a2) #0 {
   1198 entry:
   1199   %cmp1 = fcmp oeq float %c3, %c4
   1200   %cmp3tmp = fcmp oeq float %c1, %c2
   1201   %cmp3 = icmp ugt i1 %cmp3tmp, %cmp1
   1202   %cond = select i1 %cmp3, <2 x double> %a1, <2 x double> %a2
   1203   ret <2 x double> %cond
   1204 
   1205 ; CHECK-LABEL: @testv2doubleugt
   1206 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
   1207 ; CHECK: bc 12, 2, .LBB[[BB:[0-9_]+]]
   1208 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
   1209 ; CHECK: bc 4, 2, .LBB[[BB]]
   1210 ; CHECK: .LBB[[BB]]
   1211 ; CHECK: vmr 2, 3
   1212 ; CHECK: blr
   1213 }
   1214 
   1215 define <2 x double> @testv2doublene(float %c1, float %c2, float %c3, float %c4, <2 x double> %a1, <2 x double> %a2) #0 {
   1216 entry:
   1217   %cmp1 = fcmp oeq float %c3, %c4
   1218   %cmp3tmp = fcmp oeq float %c1, %c2
   1219   %cmp3 = icmp ne i1 %cmp3tmp, %cmp1
   1220   %cond = select i1 %cmp3, <2 x double> %a1, <2 x double> %a2
   1221   ret <2 x double> %cond
   1222 
   1223 ; CHECK-LABEL: @testv2doublene
   1224 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
   1225 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
   1226 ; CHECK: crxor [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
   1227 ; CHECK: bclr 12, [[REG1]], 0
   1228 ; CHECK: vmr 2, 3
   1229 ; CHECK: blr
   1230 }
   1231 
   1232 define <4 x double> @testqv4doubleslt(float %c1, float %c2, float %c3, float %c4, <4 x double> %a1, <4 x double> %a2) #1 {
   1233 entry:
   1234   %cmp1 = fcmp oeq float %c3, %c4
   1235   %cmp3tmp = fcmp oeq float %c1, %c2
   1236   %cmp3 = icmp slt i1 %cmp3tmp, %cmp1
   1237   %cond = select i1 %cmp3, <4 x double> %a1, <4 x double> %a2
   1238   ret <4 x double> %cond
   1239 
   1240 ; CHECK-LABEL: @testqv4doubleslt
   1241 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
   1242 ; CHECK: bc 12, 2, .LBB[[BB1:[0-9_]+]]
   1243 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
   1244 ; CHECK: bc 12, 2, .LBB[[BB2:[0-9_]+]]
   1245 ; CHECK: .LBB[[BB1]]:
   1246 ; CHECK: qvfmr 5, 6
   1247 ; CHECK: .LBB[[BB2]]:
   1248 ; CHECK: qvfmr 1, 5
   1249 ; CHECK: blr
   1250 }
   1251 
   1252 define <4 x double> @testqv4doubleult(float %c1, float %c2, float %c3, float %c4, <4 x double> %a1, <4 x double> %a2) #1 {
   1253 entry:
   1254   %cmp1 = fcmp oeq float %c3, %c4
   1255   %cmp3tmp = fcmp oeq float %c1, %c2
   1256   %cmp3 = icmp ult i1 %cmp3tmp, %cmp1
   1257   %cond = select i1 %cmp3, <4 x double> %a1, <4 x double> %a2
   1258   ret <4 x double> %cond
   1259 
   1260 ; CHECK-LABEL: @testqv4doubleult
   1261 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
   1262 ; CHECK: bc 4, 2, .LBB[[BB1:[0-9_]+]]
   1263 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
   1264 ; CHECK: bc 4, 2, .LBB[[BB2:[0-9_]+]]
   1265 ; CHECK: .LBB[[BB1]]:
   1266 ; CHECK: qvfmr 5, 6
   1267 ; CHECK: .LBB[[BB2]]:
   1268 ; CHECK: qvfmr 1, 5
   1269 ; CHECK: blr
   1270 }
   1271 
   1272 define <4 x double> @testqv4doublesle(float %c1, float %c2, float %c3, float %c4, <4 x double> %a1, <4 x double> %a2) #1 {
   1273 entry:
   1274   %cmp1 = fcmp oeq float %c3, %c4
   1275   %cmp3tmp = fcmp oeq float %c1, %c2
   1276   %cmp3 = icmp sle i1 %cmp3tmp, %cmp1
   1277   %cond = select i1 %cmp3, <4 x double> %a1, <4 x double> %a2
   1278   ret <4 x double> %cond
   1279 
   1280 ; CHECK-LABEL: @testqv4doublesle
   1281 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
   1282 ; CHECK: bc 4, 2, .LBB[[BB:[0-9_]+]]
   1283 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
   1284 ; CHECK: bc 12, 2, .LBB[[BB]]
   1285 ; CHECK: qvfmr 5, 6
   1286 ; CHECK: .LBB[[BB]]:
   1287 ; CHECK: qvfmr 1, 5
   1288 ; CHECK: blr
   1289 }
   1290 
   1291 define <4 x double> @testqv4doubleule(float %c1, float %c2, float %c3, float %c4, <4 x double> %a1, <4 x double> %a2) #1 {
   1292 entry:
   1293   %cmp1 = fcmp oeq float %c3, %c4
   1294   %cmp3tmp = fcmp oeq float %c1, %c2
   1295   %cmp3 = icmp ule i1 %cmp3tmp, %cmp1
   1296   %cond = select i1 %cmp3, <4 x double> %a1, <4 x double> %a2
   1297   ret <4 x double> %cond
   1298 
   1299 ; CHECK-LABEL: @testqv4doubleule
   1300 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
   1301 ; CHECK: bc 12, 2, .LBB[[BB:[0-9_]+]]
   1302 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
   1303 ; CHECK: bc 4, 2, .LBB[[BB]]
   1304 ; CHECK: qvfmr 5, 6
   1305 ; CHECK: .LBB[[BB]]:
   1306 ; CHECK: qvfmr 1, 5
   1307 ; CHECK: blr
   1308 }
   1309 
   1310 define <4 x double> @testqv4doubleeq(float %c1, float %c2, float %c3, float %c4, <4 x double> %a1, <4 x double> %a2) #1 {
   1311 entry:
   1312   %cmp1 = fcmp oeq float %c3, %c4
   1313   %cmp3tmp = fcmp oeq float %c1, %c2
   1314   %cmp3 = icmp eq i1 %cmp3tmp, %cmp1
   1315   %cond = select i1 %cmp3, <4 x double> %a1, <4 x double> %a2
   1316   ret <4 x double> %cond
   1317 
   1318 ; CHECK-LABEL: @testqv4doubleeq
   1319 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
   1320 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
   1321 ; CHECK: creqv [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
   1322 ; CHECK: bclr 12, [[REG1]], 0
   1323 ; CHECK: qvfmr 1, 6
   1324 ; CHECK: blr
   1325 }
   1326 
   1327 define <4 x double> @testqv4doublesge(float %c1, float %c2, float %c3, float %c4, <4 x double> %a1, <4 x double> %a2) #1 {
   1328 entry:
   1329   %cmp1 = fcmp oeq float %c3, %c4
   1330   %cmp3tmp = fcmp oeq float %c1, %c2
   1331   %cmp3 = icmp sge i1 %cmp3tmp, %cmp1
   1332   %cond = select i1 %cmp3, <4 x double> %a1, <4 x double> %a2
   1333   ret <4 x double> %cond
   1334 
   1335 ; CHECK-LABEL: @testqv4doublesge
   1336 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
   1337 ; CHECK: bc 12, 2, .LBB[[BB:[0-9_]+]]
   1338 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
   1339 ; CHECK: bc 4, 2, .LBB[[BB]]
   1340 ; CHECK: qvfmr 5, 6
   1341 ; CHECK: .LBB[[BB]]:
   1342 ; CHECK: qvfmr 1, 5
   1343 ; CHECK: blr
   1344 }
   1345 
   1346 define <4 x double> @testqv4doubleuge(float %c1, float %c2, float %c3, float %c4, <4 x double> %a1, <4 x double> %a2) #1 {
   1347 entry:
   1348   %cmp1 = fcmp oeq float %c3, %c4
   1349   %cmp3tmp = fcmp oeq float %c1, %c2
   1350   %cmp3 = icmp uge i1 %cmp3tmp, %cmp1
   1351   %cond = select i1 %cmp3, <4 x double> %a1, <4 x double> %a2
   1352   ret <4 x double> %cond
   1353 
   1354 ; CHECK-LABEL: @testqv4doubleuge
   1355 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
   1356 ; CHECK: bc 4, 2, .LBB[[BB:[0-9_]+]]
   1357 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
   1358 ; CHECK: bc 12, 2, .LBB[[BB]]
   1359 ; CHECK: qvfmr 5, 6
   1360 ; CHECK: .LBB[[BB]]:
   1361 ; CHECK: qvfmr 1, 5
   1362 ; CHECK: blr
   1363 }
   1364 
   1365 define <4 x double> @testqv4doublesgt(float %c1, float %c2, float %c3, float %c4, <4 x double> %a1, <4 x double> %a2) #1 {
   1366 entry:
   1367   %cmp1 = fcmp oeq float %c3, %c4
   1368   %cmp3tmp = fcmp oeq float %c1, %c2
   1369   %cmp3 = icmp sgt i1 %cmp3tmp, %cmp1
   1370   %cond = select i1 %cmp3, <4 x double> %a1, <4 x double> %a2
   1371   ret <4 x double> %cond
   1372 
   1373 ; CHECK-LABEL: @testqv4doublesgt
   1374 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
   1375 ; CHECK: bc 4, 2, .LBB[[BB1:[0-9_]+]]
   1376 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
   1377 ; CHECK: bc 4, 2, .LBB[[BB2:[0-9_]+]]
   1378 ; CHECK: .LBB[[BB1]]:
   1379 ; CHECK: qvfmr 5, 6
   1380 ; CHECK: .LBB[[BB2]]:
   1381 ; CHECK: qvfmr 1, 5
   1382 ; CHECK: blr
   1383 }
   1384 
   1385 define <4 x double> @testqv4doubleugt(float %c1, float %c2, float %c3, float %c4, <4 x double> %a1, <4 x double> %a2) #1 {
   1386 entry:
   1387   %cmp1 = fcmp oeq float %c3, %c4
   1388   %cmp3tmp = fcmp oeq float %c1, %c2
   1389   %cmp3 = icmp ugt i1 %cmp3tmp, %cmp1
   1390   %cond = select i1 %cmp3, <4 x double> %a1, <4 x double> %a2
   1391   ret <4 x double> %cond
   1392 
   1393 ; CHECK-LABEL: @testqv4doubleugt
   1394 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
   1395 ; CHECK: bc 12, 2, .LBB[[BB1:[0-9_]+]]
   1396 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
   1397 ; CHECK: bc 12, 2, .LBB[[BB2:[0-9_]+]]
   1398 ; CHECK: .LBB[[BB1]]:
   1399 ; CHECK: qvfmr 5, 6
   1400 ; CHECK: .LBB[[BB2]]:
   1401 ; CHECK: qvfmr 1, 5
   1402 ; CHECK: blr
   1403 }
   1404 
   1405 define <4 x double> @testqv4doublene(float %c1, float %c2, float %c3, float %c4, <4 x double> %a1, <4 x double> %a2) #1 {
   1406 entry:
   1407   %cmp1 = fcmp oeq float %c3, %c4
   1408   %cmp3tmp = fcmp oeq float %c1, %c2
   1409   %cmp3 = icmp ne i1 %cmp3tmp, %cmp1
   1410   %cond = select i1 %cmp3, <4 x double> %a1, <4 x double> %a2
   1411   ret <4 x double> %cond
   1412 
   1413 ; CHECK-LABEL: @testqv4doublene
   1414 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
   1415 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
   1416 ; CHECK: crxor [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
   1417 ; CHECK: bclr 12, [[REG1]], 0
   1418 ; CHECK: qvfmr 1, 6
   1419 ; CHECK: blr
   1420 }
   1421 
   1422 define <4 x float> @testqv4floatslt(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #1 {
   1423 entry:
   1424   %cmp1 = fcmp oeq float %c3, %c4
   1425   %cmp3tmp = fcmp oeq float %c1, %c2
   1426   %cmp3 = icmp slt i1 %cmp3tmp, %cmp1
   1427   %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
   1428   ret <4 x float> %cond
   1429 
   1430 ; CHECK-LABEL: @testqv4floatslt
   1431 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
   1432 ; CHECK: bc 12, 2, .LBB[[BB1:[0-9_]+]]
   1433 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
   1434 ; CHECK: bc 12, 2, .LBB[[BB2:[0-9_]+]]
   1435 ; CHECK: .LBB[[BB1]]:
   1436 ; CHECK: qvfmr 5, 6
   1437 ; CHECK: .LBB[[BB2]]:
   1438 ; CHECK: qvfmr 1, 5
   1439 ; CHECK: blr
   1440 }
   1441 
   1442 define <4 x float> @testqv4floatult(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #1 {
   1443 entry:
   1444   %cmp1 = fcmp oeq float %c3, %c4
   1445   %cmp3tmp = fcmp oeq float %c1, %c2
   1446   %cmp3 = icmp ult i1 %cmp3tmp, %cmp1
   1447   %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
   1448   ret <4 x float> %cond
   1449 
   1450 ; CHECK-LABEL: @testqv4floatult
   1451 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
   1452 ; CHECK: bc 4, 2, .LBB[[BB1:[0-9_]+]]
   1453 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
   1454 ; CHECK: bc 4, 2, .LBB[[BB2:[0-9_]+]]
   1455 ; CHECK: .LBB[[BB1]]:
   1456 ; CHECK: qvfmr 5, 6
   1457 ; CHECK: .LBB[[BB2]]:
   1458 ; CHECK: qvfmr 1, 5
   1459 ; CHECK: blr
   1460 }
   1461 
   1462 define <4 x float> @testqv4floatsle(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #1 {
   1463 entry:
   1464   %cmp1 = fcmp oeq float %c3, %c4
   1465   %cmp3tmp = fcmp oeq float %c1, %c2
   1466   %cmp3 = icmp sle i1 %cmp3tmp, %cmp1
   1467   %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
   1468   ret <4 x float> %cond
   1469 
   1470 ; CHECK-LABEL: @testqv4floatsle
   1471 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
   1472 ; CHECK: bc 4, 2, .LBB[[BB:[0-9_]+]]
   1473 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
   1474 ; CHECK: bc 12, 2, .LBB[[BB]]
   1475 ; CHECK: qvfmr 5, 6
   1476 ; CHECK: .LBB[[BB]]:
   1477 ; CHECK: qvfmr 1, 5
   1478 ; CHECK: blr
   1479 }
   1480 
   1481 define <4 x float> @testqv4floatule(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #1 {
   1482 entry:
   1483   %cmp1 = fcmp oeq float %c3, %c4
   1484   %cmp3tmp = fcmp oeq float %c1, %c2
   1485   %cmp3 = icmp ule i1 %cmp3tmp, %cmp1
   1486   %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
   1487   ret <4 x float> %cond
   1488 
   1489 ; CHECK-LABEL: @testqv4floatule
   1490 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
   1491 ; CHECK: bc 12, 2, .LBB[[BB:[0-9_]+]]
   1492 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
   1493 ; CHECK: bc 4, 2, .LBB[[BB]]
   1494 ; CHECK: qvfmr 5, 6
   1495 ; CHECK: .LBB[[BB]]:
   1496 ; CHECK: qvfmr 1, 5
   1497 ; CHECK: blr
   1498 }
   1499 
   1500 define <4 x float> @testqv4floateq(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #1 {
   1501 entry:
   1502   %cmp1 = fcmp oeq float %c3, %c4
   1503   %cmp3tmp = fcmp oeq float %c1, %c2
   1504   %cmp3 = icmp eq i1 %cmp3tmp, %cmp1
   1505   %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
   1506   ret <4 x float> %cond
   1507 
   1508 ; CHECK-LABEL: @testqv4floateq
   1509 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
   1510 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
   1511 ; CHECK: creqv [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
   1512 ; CHECK: bclr 12, [[REG1]], 0
   1513 ; CHECK: qvfmr 1, 6
   1514 ; CHECK: blr
   1515 }
   1516 
   1517 define <4 x float> @testqv4floatsge(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #1 {
   1518 entry:
   1519   %cmp1 = fcmp oeq float %c3, %c4
   1520   %cmp3tmp = fcmp oeq float %c1, %c2
   1521   %cmp3 = icmp sge i1 %cmp3tmp, %cmp1
   1522   %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
   1523   ret <4 x float> %cond
   1524 
   1525 ; CHECK-LABEL: @testqv4floatsge
   1526 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
   1527 ; CHECK: bc 12, 2, .LBB[[BB:[0-9_]+]]
   1528 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
   1529 ; CHECK: bc 4, 2, .LBB[[BB]]
   1530 ; CHECK: qvfmr 5, 6
   1531 ; CHECK: .LBB[[BB]]:
   1532 ; CHECK: qvfmr 1, 5
   1533 ; CHECK: blr
   1534 }
   1535 
   1536 define <4 x float> @testqv4floatuge(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #1 {
   1537 entry:
   1538   %cmp1 = fcmp oeq float %c3, %c4
   1539   %cmp3tmp = fcmp oeq float %c1, %c2
   1540   %cmp3 = icmp uge i1 %cmp3tmp, %cmp1
   1541   %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
   1542   ret <4 x float> %cond
   1543 
   1544 ; CHECK-LABEL: @testqv4floatuge
   1545 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
   1546 ; CHECK: bc 4, 2, .LBB[[BB:[0-9_]+]]
   1547 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
   1548 ; CHECK: bc 12, 2, .LBB[[BB]]
   1549 ; CHECK: qvfmr 5, 6
   1550 ; CHECK: .LBB[[BB]]:
   1551 ; CHECK: qvfmr 1, 5
   1552 ; CHECK: blr
   1553 }
   1554 
   1555 define <4 x float> @testqv4floatsgt(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #1 {
   1556 entry:
   1557   %cmp1 = fcmp oeq float %c3, %c4
   1558   %cmp3tmp = fcmp oeq float %c1, %c2
   1559   %cmp3 = icmp sgt i1 %cmp3tmp, %cmp1
   1560   %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
   1561   ret <4 x float> %cond
   1562 
   1563 ; CHECK-LABEL: @testqv4floatsgt
   1564 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
   1565 ; CHECK: bc 4, 2, .LBB[[BB1:[0-9_]+]]
   1566 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
   1567 ; CHECK: bc 4, 2, .LBB[[BB2:[0-9_]+]]
   1568 ; CHECK: .LBB[[BB1]]:
   1569 ; CHECK: qvfmr 5, 6
   1570 ; CHECK: .LBB[[BB2]]:
   1571 ; CHECK: qvfmr 1, 5
   1572 ; CHECK: blr
   1573 }
   1574 
   1575 define <4 x float> @testqv4floatugt(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #1 {
   1576 entry:
   1577   %cmp1 = fcmp oeq float %c3, %c4
   1578   %cmp3tmp = fcmp oeq float %c1, %c2
   1579   %cmp3 = icmp ugt i1 %cmp3tmp, %cmp1
   1580   %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
   1581   ret <4 x float> %cond
   1582 
   1583 ; CHECK-LABEL: @testqv4floatugt
   1584 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
   1585 ; CHECK: bc 12, 2, .LBB[[BB1:[0-9_]+]]
   1586 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
   1587 ; CHECK: bc 12, 2, .LBB[[BB2:[0-9_]+]]
   1588 ; CHECK: .LBB[[BB1]]:
   1589 ; CHECK: qvfmr 5, 6
   1590 ; CHECK: .LBB[[BB2]]:
   1591 ; CHECK: qvfmr 1, 5
   1592 ; CHECK: blr
   1593 }
   1594 
   1595 define <4 x float> @testqv4floatne(float %c1, float %c2, float %c3, float %c4, <4 x float> %a1, <4 x float> %a2) #1 {
   1596 entry:
   1597   %cmp1 = fcmp oeq float %c3, %c4
   1598   %cmp3tmp = fcmp oeq float %c1, %c2
   1599   %cmp3 = icmp ne i1 %cmp3tmp, %cmp1
   1600   %cond = select i1 %cmp3, <4 x float> %a1, <4 x float> %a2
   1601   ret <4 x float> %cond
   1602 
   1603 ; CHECK-LABEL: @testqv4floatne
   1604 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
   1605 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
   1606 ; CHECK: crxor [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
   1607 ; CHECK: bclr 12, [[REG1]], 0
   1608 ; CHECK: qvfmr 1, 6
   1609 ; CHECK: blr
   1610 }
   1611 
   1612 define <4 x i1> @testqv4i1slt(float %c1, float %c2, float %c3, float %c4, <4 x i1> %a1, <4 x i1> %a2) #1 {
   1613 entry:
   1614   %cmp1 = fcmp oeq float %c3, %c4
   1615   %cmp3tmp = fcmp oeq float %c1, %c2
   1616   %cmp3 = icmp slt i1 %cmp3tmp, %cmp1
   1617   %cond = select i1 %cmp3, <4 x i1> %a1, <4 x i1> %a2
   1618   ret <4 x i1> %cond
   1619 
   1620 ; CHECK-LABEL: @testqv4i1slt
   1621 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
   1622 ; CHECK: bc 12, 2, .LBB[[BB1:[0-9_]+]]
   1623 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
   1624 ; CHECK: bc 12, 2, .LBB[[BB2:[0-9_]+]]
   1625 ; CHECK: .LBB[[BB1]]:
   1626 ; CHECK: qvfmr 5, 6
   1627 ; CHECK: .LBB[[BB2]]:
   1628 ; CHECK: qvfmr 1, 5
   1629 ; CHECK: blr
   1630 }
   1631 
   1632 define <4 x i1> @testqv4i1ult(float %c1, float %c2, float %c3, float %c4, <4 x i1> %a1, <4 x i1> %a2) #1 {
   1633 entry:
   1634   %cmp1 = fcmp oeq float %c3, %c4
   1635   %cmp3tmp = fcmp oeq float %c1, %c2
   1636   %cmp3 = icmp ult i1 %cmp3tmp, %cmp1
   1637   %cond = select i1 %cmp3, <4 x i1> %a1, <4 x i1> %a2
   1638   ret <4 x i1> %cond
   1639 
   1640 ; CHECK-LABEL: @testqv4i1ult
   1641 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
   1642 ; CHECK: bc 4, 2, .LBB[[BB1:[0-9_]+]]
   1643 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
   1644 ; CHECK: bc 4, 2, .LBB[[BB2:[0-9_]+]]
   1645 ; CHECK: .LBB[[BB1]]:
   1646 ; CHECK: qvfmr 5, 6
   1647 ; CHECK: .LBB[[BB2]]:
   1648 ; CHECK: qvfmr 1, 5
   1649 ; CHECK: blr
   1650 }
   1651 
   1652 define <4 x i1> @testqv4i1sle(float %c1, float %c2, float %c3, float %c4, <4 x i1> %a1, <4 x i1> %a2) #1 {
   1653 entry:
   1654   %cmp1 = fcmp oeq float %c3, %c4
   1655   %cmp3tmp = fcmp oeq float %c1, %c2
   1656   %cmp3 = icmp sle i1 %cmp3tmp, %cmp1
   1657   %cond = select i1 %cmp3, <4 x i1> %a1, <4 x i1> %a2
   1658   ret <4 x i1> %cond
   1659 
   1660 ; CHECK-LABEL: @testqv4i1sle
   1661 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
   1662 ; CHECK: bc 4, 2, .LBB[[BB:[0-9_]+]]
   1663 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
   1664 ; CHECK: bc 12, 2, .LBB[[BB]]
   1665 ; CHECK: qvfmr 5, 6
   1666 ; CHECK: .LBB[[BB]]:
   1667 ; CHECK: qvfmr 1, 5
   1668 ; CHECK: blr
   1669 }
   1670 
   1671 define <4 x i1> @testqv4i1ule(float %c1, float %c2, float %c3, float %c4, <4 x i1> %a1, <4 x i1> %a2) #1 {
   1672 entry:
   1673   %cmp1 = fcmp oeq float %c3, %c4
   1674   %cmp3tmp = fcmp oeq float %c1, %c2
   1675   %cmp3 = icmp ule i1 %cmp3tmp, %cmp1
   1676   %cond = select i1 %cmp3, <4 x i1> %a1, <4 x i1> %a2
   1677   ret <4 x i1> %cond
   1678 
   1679 ; CHECK-LABEL: @testqv4i1ule
   1680 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
   1681 ; CHECK: bc 12, 2, .LBB[[BB:[0-9_]+]]
   1682 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
   1683 ; CHECK: bc 4, 2, .LBB[[BB]]
   1684 ; CHECK: qvfmr 5, 6
   1685 ; CHECK: .LBB[[BB]]:
   1686 ; CHECK: qvfmr 1, 5
   1687 ; CHECK: blr
   1688 }
   1689 
   1690 define <4 x i1> @testqv4i1eq(float %c1, float %c2, float %c3, float %c4, <4 x i1> %a1, <4 x i1> %a2) #1 {
   1691 entry:
   1692   %cmp1 = fcmp oeq float %c3, %c4
   1693   %cmp3tmp = fcmp oeq float %c1, %c2
   1694   %cmp3 = icmp eq i1 %cmp3tmp, %cmp1
   1695   %cond = select i1 %cmp3, <4 x i1> %a1, <4 x i1> %a2
   1696   ret <4 x i1> %cond
   1697 
   1698 ; CHECK-LABEL: @testqv4i1eq
   1699 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
   1700 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
   1701 ; CHECK: creqv [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
   1702 ; CHECK: bclr 12, [[REG1]], 0
   1703 ; CHECK: qvfmr 1, 6
   1704 ; CHECK: blr
   1705 }
   1706 
   1707 define <4 x i1> @testqv4i1sge(float %c1, float %c2, float %c3, float %c4, <4 x i1> %a1, <4 x i1> %a2) #1 {
   1708 entry:
   1709   %cmp1 = fcmp oeq float %c3, %c4
   1710   %cmp3tmp = fcmp oeq float %c1, %c2
   1711   %cmp3 = icmp sge i1 %cmp3tmp, %cmp1
   1712   %cond = select i1 %cmp3, <4 x i1> %a1, <4 x i1> %a2
   1713   ret <4 x i1> %cond
   1714 
   1715 ; CHECK-LABEL: @testqv4i1sge
   1716 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
   1717 ; CHECK: bc 12, 2, .LBB[[BB:[0-9_]+]]
   1718 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
   1719 ; CHECK: bc 4, 2, .LBB[[BB]]
   1720 ; CHECK: qvfmr 5, 6
   1721 ; CHECK: .LBB[[BB]]:
   1722 ; CHECK: qvfmr 1, 5
   1723 ; CHECK: blr
   1724 }
   1725 
   1726 define <4 x i1> @testqv4i1uge(float %c1, float %c2, float %c3, float %c4, <4 x i1> %a1, <4 x i1> %a2) #1 {
   1727 entry:
   1728   %cmp1 = fcmp oeq float %c3, %c4
   1729   %cmp3tmp = fcmp oeq float %c1, %c2
   1730   %cmp3 = icmp uge i1 %cmp3tmp, %cmp1
   1731   %cond = select i1 %cmp3, <4 x i1> %a1, <4 x i1> %a2
   1732   ret <4 x i1> %cond
   1733 
   1734 ; CHECK-LABEL: @testqv4i1uge
   1735 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
   1736 ; CHECK: bc 4, 2, .LBB[[BB:[0-9_]+]]
   1737 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
   1738 ; CHECK: bc 12, 2, .LBB[[BB]]
   1739 ; CHECK: qvfmr 5, 6
   1740 ; CHECK: .LBB[[BB]]:
   1741 ; CHECK: qvfmr 1, 5
   1742 ; CHECK: blr
   1743 }
   1744 
   1745 define <4 x i1> @testqv4i1sgt(float %c1, float %c2, float %c3, float %c4, <4 x i1> %a1, <4 x i1> %a2) #1 {
   1746 entry:
   1747   %cmp1 = fcmp oeq float %c3, %c4
   1748   %cmp3tmp = fcmp oeq float %c1, %c2
   1749   %cmp3 = icmp sgt i1 %cmp3tmp, %cmp1
   1750   %cond = select i1 %cmp3, <4 x i1> %a1, <4 x i1> %a2
   1751   ret <4 x i1> %cond
   1752 
   1753 ; CHECK-LABEL: @testqv4i1sgt
   1754 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
   1755 ; CHECK: bc 4, 2, .LBB[[BB1:[0-9_]+]]
   1756 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
   1757 ; CHECK: bc 4, 2, .LBB[[BB2:[0-9_]+]]
   1758 ; CHECK: .LBB[[BB1]]:
   1759 ; CHECK: qvfmr 5, 6
   1760 ; CHECK: .LBB[[BB2]]:
   1761 ; CHECK: qvfmr 1, 5
   1762 ; CHECK: blr
   1763 }
   1764 
   1765 define <4 x i1> @testqv4i1ugt(float %c1, float %c2, float %c3, float %c4, <4 x i1> %a1, <4 x i1> %a2) #1 {
   1766 entry:
   1767   %cmp1 = fcmp oeq float %c3, %c4
   1768   %cmp3tmp = fcmp oeq float %c1, %c2
   1769   %cmp3 = icmp ugt i1 %cmp3tmp, %cmp1
   1770   %cond = select i1 %cmp3, <4 x i1> %a1, <4 x i1> %a2
   1771   ret <4 x i1> %cond
   1772 
   1773 ; CHECK-LABEL: @testqv4i1ugt
   1774 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
   1775 ; CHECK: bc 12, 2, .LBB[[BB1:[0-9_]+]]
   1776 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
   1777 ; CHECK: bc 12, 2, .LBB[[BB2:[0-9_]+]]
   1778 ; CHECK: .LBB[[BB1]]:
   1779 ; CHECK: qvfmr 5, 6
   1780 ; CHECK: .LBB[[BB2]]:
   1781 ; CHECK: qvfmr 1, 5
   1782 ; CHECK: blr
   1783 }
   1784 
   1785 define <4 x i1> @testqv4i1ne(float %c1, float %c2, float %c3, float %c4, <4 x i1> %a1, <4 x i1> %a2) #1 {
   1786 entry:
   1787   %cmp1 = fcmp oeq float %c3, %c4
   1788   %cmp3tmp = fcmp oeq float %c1, %c2
   1789   %cmp3 = icmp ne i1 %cmp3tmp, %cmp1
   1790   %cond = select i1 %cmp3, <4 x i1> %a1, <4 x i1> %a2
   1791   ret <4 x i1> %cond
   1792 
   1793 ; CHECK-LABEL: @testqv4i1ne
   1794 ; CHECK-DAG: fcmpu {{[0-9]+}}, 3, 4
   1795 ; CHECK-DAG: fcmpu {{[0-9]+}}, 1, 2
   1796 ; CHECK: crxor [[REG1:[0-9]+]], {{[0-9]+}}, {{[0-9]+}}
   1797 ; CHECK: bclr 12, [[REG1]], 0
   1798 ; CHECK: qvfmr 1, 6
   1799 ; CHECK: blr
   1800 }
   1801 
   1802 attributes #0 = { nounwind readnone "target-cpu"="pwr7" }
   1803 attributes #1 = { nounwind readnone "target-cpu"="a2q" }
   1804 
   1805