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 4 declare void @llvm.amdgcn.exp.f32(i32, i32, float, float, float, float, i1, i1) #1 5 declare void @llvm.amdgcn.exp.i32(i32, i32, i32, i32, i32, i32, i1, i1) #1 6 7 ; GCN-LABEL: {{^}}test_export_zeroes_f32: 8 ; GCN: exp mrt0 off, off, off, off{{$}} 9 ; GCN: exp mrt0 off, off, off, off done{{$}} 10 define amdgpu_kernel void @test_export_zeroes_f32() #0 { 11 12 call void @llvm.amdgcn.exp.f32(i32 0, i32 0, float 0.0, float 0.0, float 0.0, float 0.0, i1 false, i1 false) 13 call void @llvm.amdgcn.exp.f32(i32 0, i32 0, float 0.0, float 0.0, float 0.0, float 0.0, i1 true, i1 false) 14 ret void 15 } 16 17 ; FIXME: Should not set up registers for the unused source registers. 18 19 ; GCN-LABEL: {{^}}test_export_en_src0_f32: 20 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1.0 21 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2.0 22 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 0.5 23 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4.0 24 ; GCN: exp mrt0 [[SRC0]], off, off, off done{{$}} 25 define amdgpu_kernel void @test_export_en_src0_f32() #0 { 26 call void @llvm.amdgcn.exp.f32(i32 0, i32 1, float 1.0, float 2.0, float 0.5, float 4.0, i1 true, i1 false) 27 ret void 28 } 29 30 ; GCN-LABEL: {{^}}test_export_en_src1_f32: 31 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1.0 32 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2.0 33 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 0.5 34 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4.0 35 ; GCN: exp mrt0 off, [[SRC1]], off, off done{{$}} 36 define amdgpu_kernel void @test_export_en_src1_f32() #0 { 37 call void @llvm.amdgcn.exp.f32(i32 0, i32 2, float 1.0, float 2.0, float 0.5, float 4.0, i1 true, i1 false) 38 ret void 39 } 40 41 ; GCN-LABEL: {{^}}test_export_en_src2_f32: 42 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1.0 43 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2.0 44 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 0.5 45 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4.0 46 ; GCN: exp mrt0 off, off, [[SRC2]], off done{{$}} 47 define amdgpu_kernel void @test_export_en_src2_f32() #0 { 48 call void @llvm.amdgcn.exp.f32(i32 0, i32 4, float 1.0, float 2.0, float 0.5, float 4.0, i1 true, i1 false) 49 ret void 50 } 51 52 ; GCN-LABEL: {{^}}test_export_en_src3_f32: 53 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1.0 54 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2.0 55 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 0.5 56 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4.0 57 ; GCN: exp mrt0 off, off, off, [[SRC3]] done{{$}} 58 define amdgpu_kernel void @test_export_en_src3_f32() #0 { 59 call void @llvm.amdgcn.exp.f32(i32 0, i32 8, float 1.0, float 2.0, float 0.5, float 4.0, i1 true, i1 false) 60 ret void 61 } 62 63 ; GCN-LABEL: {{^}}test_export_en_src0_src1_f32: 64 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1.0 65 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2.0 66 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 0.5 67 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4.0 68 ; GCN: exp mrt0 [[SRC0]], [[SRC1]], off, off done{{$}} 69 define amdgpu_kernel void @test_export_en_src0_src1_f32() #0 { 70 call void @llvm.amdgcn.exp.f32(i32 0, i32 3, float 1.0, float 2.0, float 0.5, float 4.0, i1 true, i1 false) 71 ret void 72 } 73 74 ; GCN-LABEL: {{^}}test_export_en_src0_src2_f32: 75 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1.0 76 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2.0 77 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 0.5 78 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4.0 79 ; GCN: exp mrt0 [[SRC0]], off, [[SRC2]], off done{{$}} 80 define amdgpu_kernel void @test_export_en_src0_src2_f32() #0 { 81 call void @llvm.amdgcn.exp.f32(i32 0, i32 5, float 1.0, float 2.0, float 0.5, float 4.0, i1 true, i1 false) 82 ret void 83 } 84 85 ; GCN-LABEL: {{^}}test_export_en_src0_src3_f32: 86 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1.0 87 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2.0 88 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 0.5 89 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4.0 90 ; GCN: exp mrt0 [[SRC0]], off, off, [[SRC3]]{{$}} 91 ; GCN: exp mrt0 [[SRC0]], off, off, [[SRC3]] done{{$}} 92 define amdgpu_kernel void @test_export_en_src0_src3_f32() #0 { 93 call void @llvm.amdgcn.exp.f32(i32 0, i32 9, float 1.0, float 2.0, float 0.5, float 4.0, i1 false, i1 false) 94 call void @llvm.amdgcn.exp.f32(i32 0, i32 9, float 1.0, float 2.0, float 0.5, float 4.0, i1 true, i1 false) 95 ret void 96 } 97 98 ; GCN-LABEL: {{^}}test_export_en_src0_src1_src2_src3_f32: 99 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1.0 100 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2.0 101 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 0.5 102 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4.0 103 ; GCN: exp mrt0 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]]{{$}} 104 ; GCN: exp mrt0 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]] done{{$}} 105 define amdgpu_kernel void @test_export_en_src0_src1_src2_src3_f32() #0 { 106 call void @llvm.amdgcn.exp.f32(i32 0, i32 15, float 1.0, float 2.0, float 0.5, float 4.0, i1 false, i1 false) 107 call void @llvm.amdgcn.exp.f32(i32 0, i32 15, float 1.0, float 2.0, float 0.5, float 4.0, i1 true, i1 false) 108 ret void 109 } 110 111 ; GCN-LABEL: {{^}}test_export_mrt7_f32: 112 ; GCN-DAG: v_mov_b32_e32 [[VHALF:v[0-9]+]], 0.5 113 ; GCN: exp mrt7 [[VHALF]], [[VHALF]], [[VHALF]], [[VHALF]]{{$}} 114 ; GCN: exp mrt7 [[VHALF]], [[VHALF]], [[VHALF]], [[VHALF]] done{{$}} 115 define amdgpu_kernel void @test_export_mrt7_f32() #0 { 116 call void @llvm.amdgcn.exp.f32(i32 7, i32 15, float 0.5, float 0.5, float 0.5, float 0.5, i1 false, i1 false) 117 call void @llvm.amdgcn.exp.f32(i32 7, i32 15, float 0.5, float 0.5, float 0.5, float 0.5, i1 true, i1 false) 118 ret void 119 } 120 121 ; GCN-LABEL: {{^}}test_export_z_f32: 122 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1.0 123 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2.0 124 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 0.5 125 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4.0 126 ; GCN: exp mrtz [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]]{{$}} 127 ; GCN: exp mrtz [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]] done{{$}} 128 define amdgpu_kernel void @test_export_z_f32() #0 { 129 call void @llvm.amdgcn.exp.f32(i32 8, i32 15, float 1.0, float 2.0, float 0.5, float 4.0, i1 false, i1 false) 130 call void @llvm.amdgcn.exp.f32(i32 8, i32 15, float 1.0, float 2.0, float 0.5, float 4.0, i1 true, i1 false) 131 ret void 132 } 133 134 ; GCN-LABEL: {{^}}test_export_null_f32: 135 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1.0 136 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2.0 137 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 0.5 138 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4.0 139 ; GCN: exp null [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]]{{$}} 140 ; GCN: exp null [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]] done{{$}} 141 define amdgpu_kernel void @test_export_null_f32() #0 { 142 call void @llvm.amdgcn.exp.f32(i32 9, i32 15, float 1.0, float 2.0, float 0.5, float 4.0, i1 false, i1 false) 143 call void @llvm.amdgcn.exp.f32(i32 9, i32 15, float 1.0, float 2.0, float 0.5, float 4.0, i1 true, i1 false) 144 ret void 145 } 146 147 ; GCN-LABEL: {{^}}test_export_reserved10_f32: 148 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1.0 149 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2.0 150 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 0.5 151 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4.0 152 ; GCN: exp invalid_target_10 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]]{{$}} 153 ; GCN: exp invalid_target_10 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]] done{{$}} 154 define amdgpu_kernel void @test_export_reserved10_f32() #0 { 155 call void @llvm.amdgcn.exp.f32(i32 10, i32 15, float 1.0, float 2.0, float 0.5, float 4.0, i1 false, i1 false) 156 call void @llvm.amdgcn.exp.f32(i32 10, i32 15, float 1.0, float 2.0, float 0.5, float 4.0, i1 true, i1 false) 157 ret void 158 } 159 160 ; GCN-LABEL: {{^}}test_export_reserved11_f32: 161 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1.0 162 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2.0 163 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 0.5 164 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4.0 165 ; GCN: exp invalid_target_11 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]]{{$}} 166 ; GCN: exp invalid_target_11 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]] done{{$}} 167 define amdgpu_kernel void @test_export_reserved11_f32() #0 { 168 call void @llvm.amdgcn.exp.f32(i32 11, i32 15, float 1.0, float 2.0, float 0.5, float 4.0, i1 false, i1 false) 169 call void @llvm.amdgcn.exp.f32(i32 11, i32 15, float 1.0, float 2.0, float 0.5, float 4.0, i1 true, i1 false) 170 ret void 171 } 172 173 ; GCN-LABEL: {{^}}test_export_pos0_f32: 174 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1.0 175 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2.0 176 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 0.5 177 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4.0 178 ; GCN: exp pos0 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]]{{$}} 179 ; GCN: exp pos0 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]] done{{$}} 180 define amdgpu_kernel void @test_export_pos0_f32() #0 { 181 call void @llvm.amdgcn.exp.f32(i32 12, i32 15, float 1.0, float 2.0, float 0.5, float 4.0, i1 false, i1 false) 182 call void @llvm.amdgcn.exp.f32(i32 12, i32 15, float 1.0, float 2.0, float 0.5, float 4.0, i1 true, i1 false) 183 ret void 184 } 185 186 ; GCN-LABEL: {{^}}test_export_pos3_f32: 187 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1.0 188 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2.0 189 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 0.5 190 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4.0 191 ; GCN: exp pos3 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]]{{$}} 192 ; GCN: exp pos3 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]] done{{$}} 193 define amdgpu_kernel void @test_export_pos3_f32() #0 { 194 call void @llvm.amdgcn.exp.f32(i32 15, i32 15, float 1.0, float 2.0, float 0.5, float 4.0, i1 false, i1 false) 195 call void @llvm.amdgcn.exp.f32(i32 15, i32 15, float 1.0, float 2.0, float 0.5, float 4.0, i1 true, i1 false) 196 ret void 197 } 198 199 ; GCN-LABEL: {{^}}test_export_param0_f32: 200 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1.0 201 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2.0 202 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 0.5 203 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4.0 204 ; GCN: exp param0 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]]{{$}} 205 ; GCN: exp param0 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]] done{{$}} 206 define amdgpu_kernel void @test_export_param0_f32() #0 { 207 call void @llvm.amdgcn.exp.f32(i32 32, i32 15, float 1.0, float 2.0, float 0.5, float 4.0, i1 false, i1 false) 208 call void @llvm.amdgcn.exp.f32(i32 32, i32 15, float 1.0, float 2.0, float 0.5, float 4.0, i1 true, i1 false) 209 ret void 210 } 211 212 ; GCN-LABEL: {{^}}test_export_param31_f32: 213 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1.0 214 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2.0 215 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 0.5 216 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4.0 217 ; GCN: exp param31 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]]{{$}} 218 ; GCN: exp param31 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]] done{{$}} 219 define amdgpu_kernel void @test_export_param31_f32() #0 { 220 call void @llvm.amdgcn.exp.f32(i32 63, i32 15, float 1.0, float 2.0, float 0.5, float 4.0, i1 false, i1 false) 221 call void @llvm.amdgcn.exp.f32(i32 63, i32 15, float 1.0, float 2.0, float 0.5, float 4.0, i1 true, i1 false) 222 ret void 223 } 224 225 ; GCN-LABEL: {{^}}test_export_vm_f32: 226 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1.0 227 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2.0 228 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 0.5 229 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4.0 230 ; GCN: exp mrt0 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]] vm{{$}} 231 ; GCN: exp mrt0 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]] done vm{{$}} 232 define amdgpu_kernel void @test_export_vm_f32() #0 { 233 call void @llvm.amdgcn.exp.f32(i32 0, i32 15, float 1.0, float 2.0, float 0.5, float 4.0, i1 false, i1 true) 234 call void @llvm.amdgcn.exp.f32(i32 0, i32 15, float 1.0, float 2.0, float 0.5, float 4.0, i1 true, i1 true) 235 ret void 236 } 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 ; GCN-LABEL: {{^}}test_export_zeroes_i32: 253 ; GCN: exp mrt0 off, off, off, off{{$}} 254 ; GCN: exp mrt0 off, off, off, off done{{$}} 255 define amdgpu_kernel void @test_export_zeroes_i32() #0 { 256 257 call void @llvm.amdgcn.exp.i32(i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i1 false, i1 false) 258 call void @llvm.amdgcn.exp.i32(i32 0, i32 0, i32 0, i32 0, i32 0, i32 0, i1 true, i1 false) 259 ret void 260 } 261 262 ; FIXME: Should not set up registers for the unused source registers. 263 264 ; GCN-LABEL: {{^}}test_export_en_src0_i32: 265 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1 266 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2 267 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 5 268 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4 269 ; GCN: exp mrt0 [[SRC0]], off, off, off done{{$}} 270 define amdgpu_kernel void @test_export_en_src0_i32() #0 { 271 call void @llvm.amdgcn.exp.i32(i32 0, i32 1, i32 1, i32 2, i32 5, i32 4, i1 true, i1 false) 272 ret void 273 } 274 275 ; GCN-LABEL: {{^}}test_export_en_src1_i32: 276 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1 277 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2 278 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 5 279 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4 280 ; GCN: exp mrt0 off, [[SRC1]], off, off done{{$}} 281 define amdgpu_kernel void @test_export_en_src1_i32() #0 { 282 call void @llvm.amdgcn.exp.i32(i32 0, i32 2, i32 1, i32 2, i32 5, i32 4, i1 true, i1 false) 283 ret void 284 } 285 286 ; GCN-LABEL: {{^}}test_export_en_src2_i32: 287 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1 288 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2 289 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 5 290 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4 291 ; GCN: exp mrt0 off, off, [[SRC2]], off done{{$}} 292 define amdgpu_kernel void @test_export_en_src2_i32() #0 { 293 call void @llvm.amdgcn.exp.i32(i32 0, i32 4, i32 1, i32 2, i32 5, i32 4, i1 true, i1 false) 294 ret void 295 } 296 297 ; GCN-LABEL: {{^}}test_export_en_src3_i32: 298 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1 299 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2 300 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 5 301 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4 302 ; GCN: exp mrt0 off, off, off, [[SRC3]] done{{$}} 303 define amdgpu_kernel void @test_export_en_src3_i32() #0 { 304 call void @llvm.amdgcn.exp.i32(i32 0, i32 8, i32 1, i32 2, i32 5, i32 4, i1 true, i1 false) 305 ret void 306 } 307 308 ; GCN-LABEL: {{^}}test_export_en_src0_src1_i32: 309 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1 310 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2 311 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 5 312 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4 313 ; GCN: exp mrt0 [[SRC0]], [[SRC1]], off, off done{{$}} 314 define amdgpu_kernel void @test_export_en_src0_src1_i32() #0 { 315 call void @llvm.amdgcn.exp.i32(i32 0, i32 3, i32 1, i32 2, i32 5, i32 4, i1 true, i1 false) 316 ret void 317 } 318 319 ; GCN-LABEL: {{^}}test_export_en_src0_src2_i32: 320 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1 321 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2 322 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 5 323 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4 324 ; GCN: exp mrt0 [[SRC0]], off, [[SRC2]], off done{{$}} 325 define amdgpu_kernel void @test_export_en_src0_src2_i32() #0 { 326 call void @llvm.amdgcn.exp.i32(i32 0, i32 5, i32 1, i32 2, i32 5, i32 4, i1 true, i1 false) 327 ret void 328 } 329 330 ; GCN-LABEL: {{^}}test_export_en_src0_src3_i32: 331 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1 332 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2 333 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 5 334 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4 335 ; GCN: exp mrt0 [[SRC0]], off, off, [[SRC3]]{{$}} 336 ; GCN: exp mrt0 [[SRC0]], off, off, [[SRC3]] done{{$}} 337 define amdgpu_kernel void @test_export_en_src0_src3_i32() #0 { 338 call void @llvm.amdgcn.exp.i32(i32 0, i32 9, i32 1, i32 2, i32 5, i32 4, i1 false, i1 false) 339 call void @llvm.amdgcn.exp.i32(i32 0, i32 9, i32 1, i32 2, i32 5, i32 4, i1 true, i1 false) 340 ret void 341 } 342 343 ; GCN-LABEL: {{^}}test_export_en_src0_src1_src2_src3_i32: 344 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1 345 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2 346 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 5 347 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4 348 ; GCN: exp mrt0 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]]{{$}} 349 ; GCN: exp mrt0 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]] done{{$}} 350 define amdgpu_kernel void @test_export_en_src0_src1_src2_src3_i32() #0 { 351 call void @llvm.amdgcn.exp.i32(i32 0, i32 15, i32 1, i32 2, i32 5, i32 4, i1 false, i1 false) 352 call void @llvm.amdgcn.exp.i32(i32 0, i32 15, i32 1, i32 2, i32 5, i32 4, i1 true, i1 false) 353 ret void 354 } 355 356 ; GCN-LABEL: {{^}}test_export_mrt7_i32: 357 ; GCN-DAG: v_mov_b32_e32 [[VHALF:v[0-9]+]], 5 358 ; GCN: exp mrt7 [[VHALF]], [[VHALF]], [[VHALF]], [[VHALF]]{{$}} 359 ; GCN: exp mrt7 [[VHALF]], [[VHALF]], [[VHALF]], [[VHALF]] done{{$}} 360 define amdgpu_kernel void @test_export_mrt7_i32() #0 { 361 call void @llvm.amdgcn.exp.i32(i32 7, i32 15, i32 5, i32 5, i32 5, i32 5, i1 false, i1 false) 362 call void @llvm.amdgcn.exp.i32(i32 7, i32 15, i32 5, i32 5, i32 5, i32 5, i1 true, i1 false) 363 ret void 364 } 365 366 ; GCN-LABEL: {{^}}test_export_z_i32: 367 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1 368 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2 369 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 5 370 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4 371 ; GCN: exp mrtz [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]]{{$}} 372 ; GCN: exp mrtz [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]] done{{$}} 373 define amdgpu_kernel void @test_export_z_i32() #0 { 374 call void @llvm.amdgcn.exp.i32(i32 8, i32 15, i32 1, i32 2, i32 5, i32 4, i1 false, i1 false) 375 call void @llvm.amdgcn.exp.i32(i32 8, i32 15, i32 1, i32 2, i32 5, i32 4, i1 true, i1 false) 376 ret void 377 } 378 379 ; GCN-LABEL: {{^}}test_export_null_i32: 380 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1 381 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2 382 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 5 383 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4 384 ; GCN: exp null [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]]{{$}} 385 ; GCN: exp null [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]] done{{$}} 386 define amdgpu_kernel void @test_export_null_i32() #0 { 387 call void @llvm.amdgcn.exp.i32(i32 9, i32 15, i32 1, i32 2, i32 5, i32 4, i1 false, i1 false) 388 call void @llvm.amdgcn.exp.i32(i32 9, i32 15, i32 1, i32 2, i32 5, i32 4, i1 true, i1 false) 389 ret void 390 } 391 392 ; GCN-LABEL: {{^}}test_export_reserved10_i32: 393 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1 394 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2 395 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 5 396 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4 397 ; GCN: exp invalid_target_10 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]]{{$}} 398 ; GCN: exp invalid_target_10 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]] done{{$}} 399 define amdgpu_kernel void @test_export_reserved10_i32() #0 { 400 call void @llvm.amdgcn.exp.i32(i32 10, i32 15, i32 1, i32 2, i32 5, i32 4, i1 false, i1 false) 401 call void @llvm.amdgcn.exp.i32(i32 10, i32 15, i32 1, i32 2, i32 5, i32 4, i1 true, i1 false) 402 ret void 403 } 404 405 ; GCN-LABEL: {{^}}test_export_reserved11_i32: 406 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1 407 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2 408 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 5 409 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4 410 ; GCN: exp invalid_target_11 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]]{{$}} 411 ; GCN: exp invalid_target_11 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]] done{{$}} 412 define amdgpu_kernel void @test_export_reserved11_i32() #0 { 413 call void @llvm.amdgcn.exp.i32(i32 11, i32 15, i32 1, i32 2, i32 5, i32 4, i1 false, i1 false) 414 call void @llvm.amdgcn.exp.i32(i32 11, i32 15, i32 1, i32 2, i32 5, i32 4, i1 true, i1 false) 415 ret void 416 } 417 418 ; GCN-LABEL: {{^}}test_export_pos0_i32: 419 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1 420 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2 421 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 5 422 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4 423 ; GCN: exp pos0 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]]{{$}} 424 ; GCN: exp pos0 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]] done{{$}} 425 define amdgpu_kernel void @test_export_pos0_i32() #0 { 426 call void @llvm.amdgcn.exp.i32(i32 12, i32 15, i32 1, i32 2, i32 5, i32 4, i1 false, i1 false) 427 call void @llvm.amdgcn.exp.i32(i32 12, i32 15, i32 1, i32 2, i32 5, i32 4, i1 true, i1 false) 428 ret void 429 } 430 431 ; GCN-LABEL: {{^}}test_export_pos3_i32: 432 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1 433 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2 434 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 5 435 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4 436 ; GCN: exp pos3 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]]{{$}} 437 ; GCN: exp pos3 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]] done{{$}} 438 define amdgpu_kernel void @test_export_pos3_i32() #0 { 439 call void @llvm.amdgcn.exp.i32(i32 15, i32 15, i32 1, i32 2, i32 5, i32 4, i1 false, i1 false) 440 call void @llvm.amdgcn.exp.i32(i32 15, i32 15, i32 1, i32 2, i32 5, i32 4, i1 true, i1 false) 441 ret void 442 } 443 444 ; GCN-LABEL: {{^}}test_export_param0_i32: 445 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1 446 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2 447 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 5 448 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4 449 ; GCN: exp param0 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]]{{$}} 450 ; GCN: exp param0 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]] done{{$}} 451 define amdgpu_kernel void @test_export_param0_i32() #0 { 452 call void @llvm.amdgcn.exp.i32(i32 32, i32 15, i32 1, i32 2, i32 5, i32 4, i1 false, i1 false) 453 call void @llvm.amdgcn.exp.i32(i32 32, i32 15, i32 1, i32 2, i32 5, i32 4, i1 true, i1 false) 454 ret void 455 } 456 457 ; GCN-LABEL: {{^}}test_export_param31_i32: 458 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1 459 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2 460 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 5 461 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4 462 ; GCN: exp param31 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]]{{$}} 463 ; GCN: exp param31 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]] done{{$}} 464 define amdgpu_kernel void @test_export_param31_i32() #0 { 465 call void @llvm.amdgcn.exp.i32(i32 63, i32 15, i32 1, i32 2, i32 5, i32 4, i1 false, i1 false) 466 call void @llvm.amdgcn.exp.i32(i32 63, i32 15, i32 1, i32 2, i32 5, i32 4, i1 true, i1 false) 467 ret void 468 } 469 470 ; GCN-LABEL: {{^}}test_export_vm_i32: 471 ; GCN-DAG: v_mov_b32_e32 [[SRC0:v[0-9]+]], 1 472 ; GCN-DAG: v_mov_b32_e32 [[SRC1:v[0-9]+]], 2 473 ; GCN-DAG: v_mov_b32_e32 [[SRC2:v[0-9]+]], 5 474 ; GCN-DAG: v_mov_b32_e32 [[SRC3:v[0-9]+]], 4 475 ; GCN: exp mrt0 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]] vm{{$}} 476 ; GCN: exp mrt0 [[SRC0]], [[SRC1]], [[SRC2]], [[SRC3]] done vm{{$}} 477 define amdgpu_kernel void @test_export_vm_i32() #0 { 478 call void @llvm.amdgcn.exp.i32(i32 0, i32 15, i32 1, i32 2, i32 5, i32 4, i1 false, i1 true) 479 call void @llvm.amdgcn.exp.i32(i32 0, i32 15, i32 1, i32 2, i32 5, i32 4, i1 true, i1 true) 480 ret void 481 } 482 483 ; GCN-LABEL: {{^}}test_if_export_f32: 484 ; GCN: s_cbranch_execz 485 ; GCN: exp 486 define amdgpu_ps void @test_if_export_f32(i32 %flag, float %x, float %y, float %z, float %w) #0 { 487 %cc = icmp eq i32 %flag, 0 488 br i1 %cc, label %end, label %exp 489 490 exp: 491 call void @llvm.amdgcn.exp.f32(i32 0, i32 15, float %x, float %y, float %z, float %w, i1 false, i1 false) 492 br label %end 493 494 end: 495 ret void 496 } 497 498 ; GCN-LABEL: {{^}}test_if_export_vm_f32: 499 ; GCN: s_cbranch_execz 500 ; GCN: exp 501 define amdgpu_ps void @test_if_export_vm_f32(i32 %flag, float %x, float %y, float %z, float %w) #0 { 502 %cc = icmp eq i32 %flag, 0 503 br i1 %cc, label %end, label %exp 504 505 exp: 506 call void @llvm.amdgcn.exp.f32(i32 0, i32 15, float %x, float %y, float %z, float %w, i1 false, i1 true) 507 br label %end 508 509 end: 510 ret void 511 } 512 513 ; GCN-LABEL: {{^}}test_if_export_done_f32: 514 ; GCN: s_cbranch_execz 515 ; GCN: exp 516 define amdgpu_ps void @test_if_export_done_f32(i32 %flag, float %x, float %y, float %z, float %w) #0 { 517 %cc = icmp eq i32 %flag, 0 518 br i1 %cc, label %end, label %exp 519 520 exp: 521 call void @llvm.amdgcn.exp.f32(i32 0, i32 15, float %x, float %y, float %z, float %w, i1 true, i1 false) 522 br label %end 523 524 end: 525 ret void 526 } 527 528 ; GCN-LABEL: {{^}}test_if_export_vm_done_f32: 529 ; GCN: s_cbranch_execz 530 ; GCN: exp 531 define amdgpu_ps void @test_if_export_vm_done_f32(i32 %flag, float %x, float %y, float %z, float %w) #0 { 532 %cc = icmp eq i32 %flag, 0 533 br i1 %cc, label %end, label %exp 534 535 exp: 536 call void @llvm.amdgcn.exp.f32(i32 0, i32 15, float %x, float %y, float %z, float %w, i1 true, i1 true) 537 br label %end 538 539 end: 540 ret void 541 } 542 543 attributes #0 = { nounwind } 544 attributes #1 = { nounwind inaccessiblememonly } 545