Home | History | Annotate | Download | only in AMDGPU
      1 ; RUN: llc -march=amdgcn -verify-machineinstrs < %s | FileCheck -strict-whitespace -check-prefix=GCN %s
      2 ; RUN: llc -march=amdgcn -mcpu=tonga -verify-machineinstrs < %s | FileCheck -strict-whitespace -check-prefix=GCN %s
      3 ; RUN: llc -march=amdgcn -mcpu=gfx900 -verify-machineinstrs < %s | FileCheck -strict-whitespace -check-prefix=GCN %s
      4 
      5 declare void @llvm.amdgcn.exp.compr.v2f16(i32, i32, <2 x half>, <2 x half>, i1, i1) #0
      6 declare void @llvm.amdgcn.exp.compr.v2i16(i32, i32, <2 x i16>, <2 x i16>, i1, i1) #0
      7 
      8 ; GCN-LABEL: {{^}}test_export_compr_zeroes_v2f16:
      9 ; GCN: exp mrt0 off, off, off, off compr{{$}}
     10 ; GCN: exp mrt0 off, off, off, off done compr{{$}}
     11 define amdgpu_kernel void @test_export_compr_zeroes_v2f16() #0 {
     12   call void @llvm.amdgcn.exp.compr.v2f16(i32 0, i32 0, <2 x half> zeroinitializer, <2 x half> zeroinitializer, i1 false, i1 false)
     13   call void @llvm.amdgcn.exp.compr.v2f16(i32 0, i32 0, <2 x half> zeroinitializer, <2 x half> zeroinitializer, i1 true, i1 false)
     14   ret void
     15 }
     16 
     17 ; GCN-LABEL: {{^}}test_export_compr_en_src0_v2f16:
     18 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 0x40003c00
     19 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 0x44003800
     20 ; GCN: exp mrt0 [[SRC0]], [[SRC0]], off, off done compr{{$}}
     21 define amdgpu_kernel void @test_export_compr_en_src0_v2f16() #0 {
     22   call void @llvm.amdgcn.exp.compr.v2f16(i32 0, i32 3, <2 x half> <half 1.0, half 2.0>, <2 x half> <half 0.5, half 4.0>, i1 true, i1 false)
     23   ret void
     24 }
     25 
     26 ; GCN-LABEL: {{^}}test_export_compr_en_src1_v2f16:
     27 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 0x40003c00
     28 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 0x44003800
     29 ; GCN: exp mrt0 off, off, [[SRC1]], [[SRC1]] done compr{{$}}
     30 define amdgpu_kernel void @test_export_compr_en_src1_v2f16() #0 {
     31   call void @llvm.amdgcn.exp.compr.v2f16(i32 0, i32 12, <2 x half> <half 1.0, half 2.0>, <2 x half> <half 0.5, half 4.0>, i1 true, i1 false)
     32   ret void
     33 }
     34 
     35 ; GCN-LABEL: {{^}}test_export_compr_en_src0_src1_v2f16:
     36 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 0x40003c00
     37 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 0x44003800
     38 ; GCN: exp mrt0 [[SRC0]], [[SRC0]], [[SRC1]], [[SRC1]] done compr{{$}}
     39 define amdgpu_kernel void @test_export_compr_en_src0_src1_v2f16() #0 {
     40   call void @llvm.amdgcn.exp.compr.v2f16(i32 0, i32 15, <2 x half> <half 1.0, half 2.0>, <2 x half> <half 0.5, half 4.0>, i1 true, i1 false)
     41   ret void
     42 }
     43 
     44 ; GCN-LABEL: {{^}}test_export_compr_en_invalid2_v2f16:
     45 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 0x40003c00
     46 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 0x44003800
     47 ; GCN: exp mrt0 off, [[SRC0]], off, off done compr{{$}}
     48 define amdgpu_kernel void @test_export_compr_en_invalid2_v2f16() #0 {
     49   call void @llvm.amdgcn.exp.compr.v2f16(i32 0, i32 2, <2 x half> <half 1.0, half 2.0>, <2 x half> <half 0.5, half 4.0>, i1 true, i1 false)
     50   ret void
     51 }
     52 
     53 ; GCN-LABEL: {{^}}test_export_compr_en_invalid10_v2f16:
     54 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 0x40003c00
     55 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 0x44003800
     56 ; GCN: exp mrt0 off, [[SRC0]], off, [[SRC1]] done compr{{$}}
     57 define amdgpu_kernel void @test_export_compr_en_invalid10_v2f16() #0 {
     58   call void @llvm.amdgcn.exp.compr.v2f16(i32 0, i32 10, <2 x half> <half 1.0, half 2.0>, <2 x half> <half 0.5, half 4.0>, i1 true, i1 false)
     59   ret void
     60 }
     61 
     62 ; GCN-LABEL: {{^}}test_export_compr_mrt7_v2f16:
     63 ; GCN-DAG: v_mov_b32_e32 [[VHALF:v[0-9]+]], 0x38003800
     64 ; GCN: exp mrt7 [[VHALF]], [[VHALF]], [[VHALF]], [[VHALF]] compr{{$}}
     65 ; GCN: exp mrt7 [[VHALF]], [[VHALF]], [[VHALF]], [[VHALF]] done compr{{$}}
     66 define amdgpu_kernel void @test_export_compr_mrt7_v2f16() #0 {
     67   call void @llvm.amdgcn.exp.compr.v2f16(i32 7, i32 15, <2 x half> <half 0.5, half 0.5>, <2 x half> <half 0.5, half 0.5>, i1 false, i1 false)
     68   call void @llvm.amdgcn.exp.compr.v2f16(i32 7, i32 15, <2 x half> <half 0.5, half 0.5>, <2 x half> <half 0.5, half 0.5>, i1 true, i1 false)
     69   ret void
     70 }
     71 
     72 ; GCN-LABEL: {{^}}test_export_compr_z_v2f16:
     73 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 0x40003c00
     74 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 0x44003800
     75 ; GCN: exp mrtz [[SRC0]], [[SRC0]], [[SRC1]], [[SRC1]] compr{{$}}
     76 ; GCN: exp mrtz [[SRC0]], [[SRC0]], [[SRC1]], [[SRC1]] done compr{{$}}
     77 define amdgpu_kernel void @test_export_compr_z_v2f16() #0 {
     78   call void @llvm.amdgcn.exp.compr.v2f16(i32 8, i32 15, <2 x half> <half 1.0, half 2.0>, <2 x half> <half 0.5, half 4.0>, i1 false, i1 false)
     79   call void @llvm.amdgcn.exp.compr.v2f16(i32 8, i32 15, <2 x half> <half 1.0, half 2.0>, <2 x half> <half 0.5, half 4.0>, i1 true, i1 false)
     80   ret void
     81 }
     82 
     83 ; GCN-LABEL: {{^}}test_export_compr_vm_v2f16:
     84 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 0x40003c00
     85 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 0x44003800
     86 ; GCN: exp mrt0 [[SRC0]], [[SRC0]], [[SRC1]], [[SRC1]] compr vm{{$}}
     87 ; GCN: exp mrt0 [[SRC0]], [[SRC0]], [[SRC1]], [[SRC1]] done compr vm{{$}}
     88 define amdgpu_kernel void @test_export_compr_vm_v2f16() #0 {
     89   call void @llvm.amdgcn.exp.compr.v2f16(i32 0, i32 15, <2 x half> <half 1.0, half 2.0>, <2 x half> <half 0.5, half 4.0>, i1 false, i1 true)
     90   call void @llvm.amdgcn.exp.compr.v2f16(i32 0, i32 15, <2 x half> <half 1.0, half 2.0>, <2 x half> <half 0.5, half 4.0>, i1 true, i1 true)
     91   ret void
     92 }
     93 
     94 ; GCN-LABEL: {{^}}test_export_compr_zeroes_v2i16:
     95 ; GCN: exp mrt0 off, off, off, off compr{{$}}
     96 ; GCN: exp mrt0 off, off, off, off done compr{{$}}
     97 define amdgpu_kernel void @test_export_compr_zeroes_v2i16() #0 {
     98   call void @llvm.amdgcn.exp.compr.v2i16(i32 0, i32 0, <2 x i16> zeroinitializer, <2 x i16> zeroinitializer, i1 false, i1 false)
     99   call void @llvm.amdgcn.exp.compr.v2i16(i32 0, i32 0, <2 x i16> zeroinitializer, <2 x i16> zeroinitializer, i1 true, i1 false)
    100   ret void
    101 }
    102 
    103 ; GCN-LABEL: {{^}}test_export_compr_en_src0_v2i16:
    104 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 0x20001
    105 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 0x40005
    106 ; GCN: exp mrt0 [[SRC0]], off, off, off done compr{{$}}
    107 define amdgpu_kernel void @test_export_compr_en_src0_v2i16() #0 {
    108   call void @llvm.amdgcn.exp.compr.v2i16(i32 0, i32 1, <2 x i16> <i16 1, i16 2>, <2 x i16> <i16 5, i16 4>, i1 true, i1 false)
    109   ret void
    110 }
    111 
    112 ; GCN-LABEL: {{^}}test_export_compr_en_src1_v2i16:
    113 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 0x20001
    114 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 0x40005
    115 ; GCN: exp mrt0 off, off, [[SRC1]], [[SRC1]] done compr{{$}}
    116 define amdgpu_kernel void @test_export_compr_en_src1_v2i16() #0 {
    117   call void @llvm.amdgcn.exp.compr.v2i16(i32 0, i32 12, <2 x i16> <i16 1, i16 2>, <2 x i16> <i16 5, i16 4>, i1 true, i1 false)
    118   ret void
    119 }
    120 
    121 ; GCN-LABEL: {{^}}test_export_compr_en_src0_src1_v2i16:
    122 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 0x20001
    123 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 0x40005
    124 ; GCN: exp mrt0 [[SRC0]], [[SRC0]], [[SRC1]], [[SRC1]] done compr{{$}}
    125 define amdgpu_kernel void @test_export_compr_en_src0_src1_v2i16() #0 {
    126   call void @llvm.amdgcn.exp.compr.v2i16(i32 0, i32 15, <2 x i16> <i16 1, i16 2>, <2 x i16> <i16 5, i16 4>, i1 true, i1 false)
    127   ret void
    128 }
    129 
    130 ; GCN-LABEL: {{^}}test_export_compr_mrt7_v2i16:
    131 ; GCN-DAG: v_mov_b32_e32 [[VI16:v[0-9]+]], 0x50005
    132 ; GCN: exp mrt7 [[VI16]], [[VI16]], [[VI16]], [[VI16]] compr{{$}}
    133 ; GCN: exp mrt7 [[VI16]], [[VI16]], [[VI16]], [[VI16]] done compr{{$}}
    134 define amdgpu_kernel void @test_export_compr_mrt7_v2i16() #0 {
    135   call void @llvm.amdgcn.exp.compr.v2i16(i32 7, i32 15, <2 x i16> <i16 5, i16 5>, <2 x i16> <i16 5, i16 5>, i1 false, i1 false)
    136   call void @llvm.amdgcn.exp.compr.v2i16(i32 7, i32 15, <2 x i16> <i16 5, i16 5>, <2 x i16> <i16 5, i16 5>, i1 true, i1 false)
    137   ret void
    138 }
    139 
    140 ; GCN-LABEL: {{^}}test_export_compr_z_v2i16:
    141 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 0x20001
    142 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 0x40005
    143 ; GCN: exp mrtz [[SRC0]], [[SRC0]], [[SRC1]], [[SRC1]] compr{{$}}
    144 ; GCN: exp mrtz [[SRC0]], [[SRC0]], [[SRC1]], [[SRC1]] done compr{{$}}
    145 define amdgpu_kernel void @test_export_compr_z_v2i16() #0 {
    146   call void @llvm.amdgcn.exp.compr.v2i16(i32 8, i32 15, <2 x i16> <i16 1, i16 2>, <2 x i16> <i16 5, i16 4>, i1 false, i1 false)
    147   call void @llvm.amdgcn.exp.compr.v2i16(i32 8, i32 15, <2 x i16> <i16 1, i16 2>, <2 x i16> <i16 5, i16 4>, i1 true, i1 false)
    148   ret void
    149 }
    150 
    151 ; GCN-LABEL: {{^}}test_export_compr_vm_v2i16:
    152 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 0x20001
    153 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 0x40005
    154 ; GCN: exp mrt0 [[SRC0]], [[SRC0]], [[SRC1]], [[SRC1]] compr vm{{$}}
    155 ; GCN: exp mrt0 [[SRC0]], [[SRC0]], [[SRC1]], [[SRC1]] done compr vm{{$}}
    156 define amdgpu_kernel void @test_export_compr_vm_v2i16() #0 {
    157   call void @llvm.amdgcn.exp.compr.v2i16(i32 0, i32 15, <2 x i16> <i16 1, i16 2>, <2 x i16> <i16 5, i16 4>, i1 false, i1 true)
    158   call void @llvm.amdgcn.exp.compr.v2i16(i32 0, i32 15, <2 x i16> <i16 1, i16 2>, <2 x i16> <i16 5, i16 4>, i1 true, i1 true)
    159   ret void
    160 }
    161 
    162 attributes #0 = { nounwind }
    163