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]}}, T{{[0-9]+\.[XYZW]}}, literal.x, 1084227584(5.000000e+00)
      9 define void @fcmp_une_select_fptosi(i32 addrspace(1)* %out, float %in) {
     10 entry:
     11   %0 = fcmp une float %in, 5.0
     12   %1 = select i1 %0, float 1.000000e+00, float 0.000000e+00
     13   %2 = fsub float -0.000000e+00, %1
     14   %3 = fptosi float %2 to i32
     15   store i32 %3, i32 addrspace(1)* %out
     16   ret void
     17 }
     18 
     19 ; CHECK: @fcmp_une_select_i32
     20 ; CHECK: SETNE_DX10 T{{[0-9]+\.[XYZW]}}, T{{[0-9]+\.[XYZW]}}, literal.x, 1084227584(5.000000e+00)
     21 define void @fcmp_une_select_i32(i32 addrspace(1)* %out, float %in) {
     22 entry:
     23   %0 = fcmp une float %in, 5.0
     24   %1 = select i1 %0, i32 -1, i32 0
     25   store i32 %1, i32 addrspace(1)* %out
     26   ret void
     27 }
     28 
     29 ; CHECK: @fcmp_ueq_select_fptosi
     30 ; CHECK: SETE_DX10 T{{[0-9]+\.[XYZW]}}, T{{[0-9]+\.[XYZW]}}, literal.x, 1084227584(5.000000e+00)
     31 define void @fcmp_ueq_select_fptosi(i32 addrspace(1)* %out, float %in) {
     32 entry:
     33   %0 = fcmp ueq float %in, 5.0
     34   %1 = select i1 %0, float 1.000000e+00, float 0.000000e+00
     35   %2 = fsub float -0.000000e+00, %1
     36   %3 = fptosi float %2 to i32
     37   store i32 %3, i32 addrspace(1)* %out
     38   ret void
     39 }
     40 
     41 ; CHECK: @fcmp_ueq_select_i32
     42 ; CHECK: SETE_DX10 T{{[0-9]+\.[XYZW]}}, T{{[0-9]+\.[XYZW]}}, literal.x, 1084227584(5.000000e+00)
     43 define void @fcmp_ueq_select_i32(i32 addrspace(1)* %out, float %in) {
     44 entry:
     45   %0 = fcmp ueq float %in, 5.0
     46   %1 = select i1 %0, i32 -1, i32 0
     47   store i32 %1, i32 addrspace(1)* %out
     48   ret void
     49 }
     50 
     51 ; CHECK: @fcmp_ugt_select_fptosi
     52 ; CHECK: SETGT_DX10 T{{[0-9]+\.[XYZW]}}, T{{[0-9]+\.[XYZW]}}, literal.x, 1084227584(5.000000e+00)
     53 define void @fcmp_ugt_select_fptosi(i32 addrspace(1)* %out, float %in) {
     54 entry:
     55   %0 = fcmp ugt float %in, 5.0
     56   %1 = select i1 %0, float 1.000000e+00, float 0.000000e+00
     57   %2 = fsub float -0.000000e+00, %1
     58   %3 = fptosi float %2 to i32
     59   store i32 %3, i32 addrspace(1)* %out
     60   ret void
     61 }
     62 
     63 ; CHECK: @fcmp_ugt_select_i32
     64 ; CHECK: SETGT_DX10 T{{[0-9]+\.[XYZW]}}, T{{[0-9]+\.[XYZW]}}, literal.x, 1084227584(5.000000e+00)
     65 define void @fcmp_ugt_select_i32(i32 addrspace(1)* %out, float %in) {
     66 entry:
     67   %0 = fcmp ugt float %in, 5.0
     68   %1 = select i1 %0, i32 -1, i32 0
     69   store i32 %1, i32 addrspace(1)* %out
     70   ret void
     71 }
     72 
     73 ; CHECK: @fcmp_uge_select_fptosi
     74 ; CHECK: SETGE_DX10 T{{[0-9]+\.[XYZW]}}, T{{[0-9]+\.[XYZW]}}, literal.x, 1084227584(5.000000e+00)
     75 define void @fcmp_uge_select_fptosi(i32 addrspace(1)* %out, float %in) {
     76 entry:
     77   %0 = fcmp uge float %in, 5.0
     78   %1 = select i1 %0, float 1.000000e+00, float 0.000000e+00
     79   %2 = fsub float -0.000000e+00, %1
     80   %3 = fptosi float %2 to i32
     81   store i32 %3, i32 addrspace(1)* %out
     82   ret void
     83 }
     84 
     85 ; CHECK: @fcmp_uge_select_i32
     86 ; CHECK: SETGE_DX10 T{{[0-9]+\.[XYZW]}}, T{{[0-9]+\.[XYZW]}}, literal.x, 1084227584(5.000000e+00)
     87 define void @fcmp_uge_select_i32(i32 addrspace(1)* %out, float %in) {
     88 entry:
     89   %0 = fcmp uge float %in, 5.0
     90   %1 = select i1 %0, i32 -1, i32 0
     91   store i32 %1, i32 addrspace(1)* %out
     92   ret void
     93 }
     94 
     95 ; CHECK: @fcmp_ule_select_fptosi
     96 ; CHECK: SETGE_DX10 T{{[0-9]+\.[XYZW]}}, literal.x, T{{[0-9]+\.[XYZW]}}, 1084227584(5.000000e+00)
     97 define void @fcmp_ule_select_fptosi(i32 addrspace(1)* %out, float %in) {
     98 entry:
     99   %0 = fcmp ule float %in, 5.0
    100   %1 = select i1 %0, float 1.000000e+00, float 0.000000e+00
    101   %2 = fsub float -0.000000e+00, %1
    102   %3 = fptosi float %2 to i32
    103   store i32 %3, i32 addrspace(1)* %out
    104   ret void
    105 }
    106 
    107 ; CHECK: @fcmp_ule_select_i32
    108 ; CHECK: SETGE_DX10 T{{[0-9]+\.[XYZW]}}, literal.x, T{{[0-9]+\.[XYZW]}}, 1084227584(5.000000e+00)
    109 define void @fcmp_ule_select_i32(i32 addrspace(1)* %out, float %in) {
    110 entry:
    111   %0 = fcmp ule float %in, 5.0
    112   %1 = select i1 %0, i32 -1, i32 0
    113   store i32 %1, i32 addrspace(1)* %out
    114   ret void
    115 }
    116 
    117 ; CHECK: @fcmp_ult_select_fptosi
    118 ; CHECK: SETGT_DX10 T{{[0-9]+\.[XYZW]}}, literal.x, T{{[0-9]+\.[XYZW]}}, 1084227584(5.000000e+00)
    119 define void @fcmp_ult_select_fptosi(i32 addrspace(1)* %out, float %in) {
    120 entry:
    121   %0 = fcmp ult float %in, 5.0
    122   %1 = select i1 %0, float 1.000000e+00, float 0.000000e+00
    123   %2 = fsub float -0.000000e+00, %1
    124   %3 = fptosi float %2 to i32
    125   store i32 %3, i32 addrspace(1)* %out
    126   ret void
    127 }
    128 
    129 ; CHECK: @fcmp_ult_select_i32
    130 ; CHECK: SETGT_DX10 T{{[0-9]+\.[XYZW]}}, literal.x, T{{[0-9]+\.[XYZW]}}, 1084227584(5.000000e+00)
    131 define void @fcmp_ult_select_i32(i32 addrspace(1)* %out, float %in) {
    132 entry:
    133   %0 = fcmp ult float %in, 5.0
    134   %1 = select i1 %0, i32 -1, i32 0
    135   store i32 %1, i32 addrspace(1)* %out
    136   ret void
    137 }
    138