Home | History | Annotate | Download | only in AMDGPU
      1 ; RUN: llc -verify-machineinstrs -march=amdgcn -mcpu=SI < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
      2 ; RUN: llc -verify-machineinstrs -march=amdgcn -mcpu=tonga < %s | FileCheck -check-prefix=SI -check-prefix=FUNC %s
      3 
      4 ; Test expansion of scalar selects on vectors.
      5 ; Evergreen not enabled since it seems to be having problems with doubles.
      6 
      7 
      8 ; FUNC-LABEL: {{^}}select_v4i8:
      9 ; SI: v_cndmask_b32_e32
     10 ; SI: v_cndmask_b32_e32
     11 ; SI: v_cndmask_b32_e32
     12 ; SI: v_cndmask_b32_e32
     13 define void @select_v4i8(<4 x i8> addrspace(1)* %out, <4 x i8> %a, <4 x i8> %b, i8 %c) nounwind {
     14   %cmp = icmp eq i8 %c, 0
     15   %select = select i1 %cmp, <4 x i8> %a, <4 x i8> %b
     16   store <4 x i8> %select, <4 x i8> addrspace(1)* %out, align 4
     17   ret void
     18 }
     19 
     20 ; FUNC-LABEL: {{^}}select_v4i16:
     21 ; SI: v_cndmask_b32_e32
     22 ; SI: v_cndmask_b32_e32
     23 ; SI: v_cndmask_b32_e32
     24 ; SI: v_cndmask_b32_e32
     25 define void @select_v4i16(<4 x i16> addrspace(1)* %out, <4 x i16> %a, <4 x i16> %b, i32 %c) nounwind {
     26   %cmp = icmp eq i32 %c, 0
     27   %select = select i1 %cmp, <4 x i16> %a, <4 x i16> %b
     28   store <4 x i16> %select, <4 x i16> addrspace(1)* %out, align 4
     29   ret void
     30 }
     31 
     32 ; FUNC-LABEL: {{^}}select_v2i32:
     33 ; SI: v_cndmask_b32_e32
     34 ; SI: v_cndmask_b32_e32
     35 ; SI: buffer_store_dwordx2
     36 define void @select_v2i32(<2 x i32> addrspace(1)* %out, <2 x i32> %a, <2 x i32> %b, i32 %c) nounwind {
     37   %cmp = icmp eq i32 %c, 0
     38   %select = select i1 %cmp, <2 x i32> %a, <2 x i32> %b
     39   store <2 x i32> %select, <2 x i32> addrspace(1)* %out, align 8
     40   ret void
     41 }
     42 
     43 ; FUNC-LABEL: {{^}}select_v4i32:
     44 ; SI: v_cndmask_b32_e32
     45 ; SI: v_cndmask_b32_e32
     46 ; SI: v_cndmask_b32_e32
     47 ; SI: v_cndmask_b32_e32
     48 ; SI: buffer_store_dwordx4
     49 define void @select_v4i32(<4 x i32> addrspace(1)* %out, <4 x i32> %a, <4 x i32> %b, i32 %c) nounwind {
     50   %cmp = icmp eq i32 %c, 0
     51   %select = select i1 %cmp, <4 x i32> %a, <4 x i32> %b
     52   store <4 x i32> %select, <4 x i32> addrspace(1)* %out, align 16
     53   ret void
     54 }
     55 
     56 ; FUNC-LABEL: {{^}}select_v8i32:
     57 ; SI: v_cndmask_b32_e32
     58 ; SI: v_cndmask_b32_e32
     59 ; SI: v_cndmask_b32_e32
     60 ; SI: v_cndmask_b32_e32
     61 ; SI: v_cndmask_b32_e32
     62 ; SI: v_cndmask_b32_e32
     63 ; SI: v_cndmask_b32_e32
     64 ; SI: v_cndmask_b32_e32
     65 define void @select_v8i32(<8 x i32> addrspace(1)* %out, <8 x i32> %a, <8 x i32> %b, i32 %c) nounwind {
     66   %cmp = icmp eq i32 %c, 0
     67   %select = select i1 %cmp, <8 x i32> %a, <8 x i32> %b
     68   store <8 x i32> %select, <8 x i32> addrspace(1)* %out, align 16
     69   ret void
     70 }
     71 
     72 ; FUNC-LABEL: {{^}}select_v2f32:
     73 ; SI: buffer_store_dwordx2
     74 define void @select_v2f32(<2 x float> addrspace(1)* %out, <2 x float> %a, <2 x float> %b, i32 %c) nounwind {
     75   %cmp = icmp eq i32 %c, 0
     76   %select = select i1 %cmp, <2 x float> %a, <2 x float> %b
     77   store <2 x float> %select, <2 x float> addrspace(1)* %out, align 16
     78   ret void
     79 }
     80 
     81 ; FUNC-LABEL: {{^}}select_v4f32:
     82 ; SI: buffer_store_dwordx4
     83 define void @select_v4f32(<4 x float> addrspace(1)* %out, <4 x float> %a, <4 x float> %b, i32 %c) nounwind {
     84   %cmp = icmp eq i32 %c, 0
     85   %select = select i1 %cmp, <4 x float> %a, <4 x float> %b
     86   store <4 x float> %select, <4 x float> addrspace(1)* %out, align 16
     87   ret void
     88 }
     89 
     90 ; FUNC-LABEL: {{^}}select_v8f32:
     91 ; SI: v_cndmask_b32_e32
     92 ; SI: v_cndmask_b32_e32
     93 ; SI: v_cndmask_b32_e32
     94 ; SI: v_cndmask_b32_e32
     95 ; SI: v_cndmask_b32_e32
     96 ; SI: v_cndmask_b32_e32
     97 ; SI: v_cndmask_b32_e32
     98 ; SI: v_cndmask_b32_e32
     99 define void @select_v8f32(<8 x float> addrspace(1)* %out, <8 x float> %a, <8 x float> %b, i32 %c) nounwind {
    100   %cmp = icmp eq i32 %c, 0
    101   %select = select i1 %cmp, <8 x float> %a, <8 x float> %b
    102   store <8 x float> %select, <8 x float> addrspace(1)* %out, align 16
    103   ret void
    104 }
    105 
    106 ; FUNC-LABEL: {{^}}select_v2f64:
    107 ; SI: v_cndmask_b32_e32
    108 ; SI: v_cndmask_b32_e32
    109 ; SI: v_cndmask_b32_e32
    110 ; SI: v_cndmask_b32_e32
    111 define void @select_v2f64(<2 x double> addrspace(1)* %out, <2 x double> %a, <2 x double> %b, i32 %c) nounwind {
    112   %cmp = icmp eq i32 %c, 0
    113   %select = select i1 %cmp, <2 x double> %a, <2 x double> %b
    114   store <2 x double> %select, <2 x double> addrspace(1)* %out, align 16
    115   ret void
    116 }
    117 
    118 ; FUNC-LABEL: {{^}}select_v4f64:
    119 ; SI: v_cndmask_b32_e32
    120 ; SI: v_cndmask_b32_e32
    121 ; SI: v_cndmask_b32_e32
    122 ; SI: v_cndmask_b32_e32
    123 ; SI: v_cndmask_b32_e32
    124 ; SI: v_cndmask_b32_e32
    125 ; SI: v_cndmask_b32_e32
    126 ; SI: v_cndmask_b32_e32
    127 define void @select_v4f64(<4 x double> addrspace(1)* %out, <4 x double> %a, <4 x double> %b, i32 %c) nounwind {
    128   %cmp = icmp eq i32 %c, 0
    129   %select = select i1 %cmp, <4 x double> %a, <4 x double> %b
    130   store <4 x double> %select, <4 x double> addrspace(1)* %out, align 16
    131   ret void
    132 }
    133 
    134 ; FUNC-LABEL: {{^}}select_v8f64:
    135 ; SI: v_cndmask_b32_e32
    136 ; SI: v_cndmask_b32_e32
    137 ; SI: v_cndmask_b32_e32
    138 ; SI: v_cndmask_b32_e32
    139 ; SI: v_cndmask_b32_e32
    140 ; SI: v_cndmask_b32_e32
    141 ; SI: v_cndmask_b32_e32
    142 ; SI: v_cndmask_b32_e32
    143 ; SI: v_cndmask_b32_e32
    144 ; SI: v_cndmask_b32_e32
    145 ; SI: v_cndmask_b32_e32
    146 ; SI: v_cndmask_b32_e32
    147 ; SI: v_cndmask_b32_e32
    148 ; SI: v_cndmask_b32_e32
    149 ; SI: v_cndmask_b32_e32
    150 ; SI: v_cndmask_b32_e32
    151 define void @select_v8f64(<8 x double> addrspace(1)* %out, <8 x double> %a, <8 x double> %b, i32 %c) nounwind {
    152   %cmp = icmp eq i32 %c, 0
    153   %select = select i1 %cmp, <8 x double> %a, <8 x double> %b
    154   store <8 x double> %select, <8 x double> addrspace(1)* %out, align 16
    155   ret void
    156 }
    157