| ; RUN: split-file %s %t |
| ; RUN: not opt -S -dxil-legalize -mtriple=dxil-pc-shadermodel6.0-compute %t/half.ll 2>&1 | FileCheck %t/half.ll |
| ; RUN: not opt -S -dxil-legalize -mtriple=dxil-pc-shadermodel6.0-compute %t/fp128.ll 2>&1 | FileCheck %t/fp128.ll |
| |
| ; DXIL has 32-bit and 64-bit atomics only, so a float exchange of any other |
| ; width has no integer exchange to lower to. |
| |
| ;--- half.ll |
| |
| target triple = "dxil-pc-shadermodel6.0-compute" |
| |
| @gs = external addrspace(3) global half |
| |
| ; CHECK: DXIL atomic exchange requires a 32-bit or 64-bit floating-point value |
| define half @gs_xchg_half(half %val) { |
| %old = atomicrmw xchg ptr addrspace(3) @gs, half %val syncscope("workgroup") monotonic |
| ret half %old |
| } |
| |
| ;--- fp128.ll |
| |
| target triple = "dxil-pc-shadermodel6.0-compute" |
| |
| @gs = external addrspace(3) global fp128 |
| |
| ; CHECK: DXIL atomic exchange requires a 32-bit or 64-bit floating-point value |
| define fp128 @gs_xchg_fp128(fp128 %val) { |
| %old = atomicrmw xchg ptr addrspace(3) @gs, fp128 %val syncscope("workgroup") monotonic |
| ret fp128 %old |
| } |