Home | History | Annotate | Download | only in R600
      1 ; RUN: llc < %s -march=r600 -mcpu=redwood | FileCheck %s
      2 
      3 ; These tests check that floating point comparisons which are used by select
      4 ; to store integer true (-1) and false (0) values are lowered to one of the
      5 ; SET*DX10 instructions.
      6 
      7 ; CHECK: @fcmp_une_select_fptosi
      8 ; CHECK: SETNE_DX10 * T{{[0-9]+\.[XYZW]}}, KC0[2].Z, literal.x,
      9 ; CHECK-NEXT: 1084227584(5.000000e+00)
     10 define void @fcmp_une_select_fptosi(i32 addrspace(1)* %out, float %in) {
     11 entry:
     12   %0 = fcmp une float %in, 5.0
     13   %1 = select i1 %0, float 1.000000e+00, float 0.000000e+00
     14   %2 = fsub float -0.000000e+00, %1
     15   %3 = fptosi float %2 to i32
     16   store i32 %3, i32 addrspace(1)* %out
     17   ret void
     18 }
     19 
     20 ; CHECK: @fcmp_une_select_i32
     21 ; CHECK: SETNE_DX10 * T{{[0-9]+\.[XYZW]}}, KC0[2].Z, literal.x,
     22 ; CHECK-NEXT: 1084227584(5.000000e+00)
     23 define void @fcmp_une_select_i32(i32 addrspace(1)* %out, float %in) {
     24 entry:
     25   %0 = fcmp une float %in, 5.0
     26   %1 = select i1 %0, i32 -1, i32 0
     27   store i32 %1, i32 addrspace(1)* %out
     28   ret void
     29 }
     30 
     31 ; CHECK: @fcmp_ueq_select_fptosi
     32 ; CHECK: SETE_DX10 * T{{[0-9]+\.[XYZW]}}, KC0[2].Z, literal.x,
     33 ; CHECK-NEXT: 1084227584(5.000000e+00)
     34 define void @fcmp_ueq_select_fptosi(i32 addrspace(1)* %out, float %in) {
     35 entry:
     36   %0 = fcmp ueq float %in, 5.0
     37   %1 = select i1 %0, float 1.000000e+00, float 0.000000e+00
     38   %2 = fsub float -0.000000e+00, %1
     39   %3 = fptosi float %2 to i32
     40   store i32 %3, i32 addrspace(1)* %out
     41   ret void
     42 }
     43 
     44 ; CHECK: @fcmp_ueq_select_i32
     45 ; CHECK: SETE_DX10 * T{{[0-9]+\.[XYZW]}}, KC0[2].Z, literal.x,
     46 ; CHECK-NEXT: 1084227584(5.000000e+00)
     47 define void @fcmp_ueq_select_i32(i32 addrspace(1)* %out, float %in) {
     48 entry:
     49   %0 = fcmp ueq float %in, 5.0
     50   %1 = select i1 %0, i32 -1, i32 0
     51   store i32 %1, i32 addrspace(1)* %out
     52   ret void
     53 }
     54 
     55 ; CHECK: @fcmp_ugt_select_fptosi
     56 ; CHECK: SETGT_DX10 * T{{[0-9]+\.[XYZW]}}, KC0[2].Z, literal.x,
     57 ; CHECK-NEXT: 1084227584(5.000000e+00)
     58 define void @fcmp_ugt_select_fptosi(i32 addrspace(1)* %out, float %in) {
     59 entry:
     60   %0 = fcmp ugt float %in, 5.0
     61   %1 = select i1 %0, float 1.000000e+00, float 0.000000e+00
     62   %2 = fsub float -0.000000e+00, %1
     63   %3 = fptosi float %2 to i32
     64   store i32 %3, i32 addrspace(1)* %out
     65   ret void
     66 }
     67 
     68 ; CHECK: @fcmp_ugt_select_i32
     69 ; CHECK: SETGT_DX10 * T{{[0-9]+\.[XYZW]}}, KC0[2].Z, literal.x,
     70 ; CHECK-NEXT: 1084227584(5.000000e+00)
     71 define void @fcmp_ugt_select_i32(i32 addrspace(1)* %out, float %in) {
     72 entry:
     73   %0 = fcmp ugt float %in, 5.0
     74   %1 = select i1 %0, i32 -1, i32 0
     75   store i32 %1, i32 addrspace(1)* %out
     76   ret void
     77 }
     78 
     79 ; CHECK: @fcmp_uge_select_fptosi
     80 ; CHECK: SETGE_DX10 * T{{[0-9]+\.[XYZW]}}, KC0[2].Z, literal.x,
     81 ; CHECK-NEXT: 1084227584(5.000000e+00)
     82 define void @fcmp_uge_select_fptosi(i32 addrspace(1)* %out, float %in) {
     83 entry:
     84   %0 = fcmp uge float %in, 5.0
     85   %1 = select i1 %0, float 1.000000e+00, float 0.000000e+00
     86   %2 = fsub float -0.000000e+00, %1
     87   %3 = fptosi float %2 to i32
     88   store i32 %3, i32 addrspace(1)* %out
     89   ret void
     90 }
     91 
     92 ; CHECK: @fcmp_uge_select_i32
     93 ; CHECK: SETGE_DX10 * T{{[0-9]+\.[XYZW]}}, KC0[2].Z, literal.x,
     94 ; CHECK-NEXT: 1084227584(5.000000e+00)
     95 define void @fcmp_uge_select_i32(i32 addrspace(1)* %out, float %in) {
     96 entry:
     97   %0 = fcmp uge float %in, 5.0
     98   %1 = select i1 %0, i32 -1, i32 0
     99   store i32 %1, i32 addrspace(1)* %out
    100   ret void
    101 }
    102 
    103 ; CHECK: @fcmp_ule_select_fptosi
    104 ; CHECK: SETGE_DX10 * T{{[0-9]+\.[XYZW]}}, literal.x, KC0[2].Z,
    105 ; CHECK-NEXT: 1084227584(5.000000e+00)
    106 define void @fcmp_ule_select_fptosi(i32 addrspace(1)* %out, float %in) {
    107 entry:
    108   %0 = fcmp ule float %in, 5.0
    109   %1 = select i1 %0, float 1.000000e+00, float 0.000000e+00
    110   %2 = fsub float -0.000000e+00, %1
    111   %3 = fptosi float %2 to i32
    112   store i32 %3, i32 addrspace(1)* %out
    113   ret void
    114 }
    115 
    116 ; CHECK: @fcmp_ule_select_i32
    117 ; CHECK: SETGE_DX10 * T{{[0-9]+\.[XYZW]}}, literal.x, KC0[2].Z,
    118 ; CHECK-NEXT: 1084227584(5.000000e+00)
    119 define void @fcmp_ule_select_i32(i32 addrspace(1)* %out, float %in) {
    120 entry:
    121   %0 = fcmp ule float %in, 5.0
    122   %1 = select i1 %0, i32 -1, i32 0
    123   store i32 %1, i32 addrspace(1)* %out
    124   ret void
    125 }
    126 
    127 ; CHECK: @fcmp_ult_select_fptosi
    128 ; CHECK: SETGT_DX10 * T{{[0-9]+\.[XYZW]}}, literal.x, KC0[2].Z,
    129 ; CHECK-NEXT: 1084227584(5.000000e+00)
    130 define void @fcmp_ult_select_fptosi(i32 addrspace(1)* %out, float %in) {
    131 entry:
    132   %0 = fcmp ult float %in, 5.0
    133   %1 = select i1 %0, float 1.000000e+00, float 0.000000e+00
    134   %2 = fsub float -0.000000e+00, %1
    135   %3 = fptosi float %2 to i32
    136   store i32 %3, i32 addrspace(1)* %out
    137   ret void
    138 }
    139 
    140 ; CHECK: @fcmp_ult_select_i32
    141 ; CHECK: SETGT_DX10 * T{{[0-9]+\.[XYZW]}}, literal.x, KC0[2].Z,
    142 ; CHECK-NEXT: 1084227584(5.000000e+00)
    143 define void @fcmp_ult_select_i32(i32 addrspace(1)* %out, float %in) {
    144 entry:
    145   %0 = fcmp ult float %in, 5.0
    146   %1 = select i1 %0, i32 -1, i32 0
    147   store i32 %1, i32 addrspace(1)* %out
    148   ret void
    149 }
    150