@@ -201,9 +201,10 @@ considered completed.
201201 waiting for an OS/HLK release.
202202
203203## HLSL-Operators
204+
204205✅ - Means there was an explicit test case implemented for the intrinsic.
205206☑️ - Means the intrinsic gets coverage via other intrinsics. For example 'exp2'
206- just uses the DXIL Opcode for Exp.
207+ just uses the DXIL Opcode for Exp.
207208
208209### HLSL Operators
209210
@@ -216,15 +217,16 @@ Operator table from [Microsoft HLSL Operators](https://learn.microsoft.com/en-us
216217| ✅ | Addition | + | |
217218| ✅ | Subtraction | - | |
218219| ✅ | Multiplication | * | |
219- | | Additive and Multiplicative Operators | +, -, * , /, % | |
220- | | Array Operator | [ i] | llvm: ExtractElementInst OR llvm: InsertElemtInst |
221- | | Assignment Operators | =, +=, -=, * =, /=, %= | |
222- | | Bitwise Operators | ~ , <<, >>, &, \| , ^, <<=, >>=, &=, \| =, ^= | Only valid on int and uint vectors |
223- | | Boolean Math Operators | & &, \|\| , ?: | |
224- | | Cast Operator | (type) | No direct operator, difference in GetElementPointer or load type |
225- | | Comparison Operators | <, >, ==, !=, <=, >= | |
226- | | Prefix or Postfix Operators | ++, -- | |
227- | | Unary Operators | !, -, + | |
220+ | ✅ | Additive and Multiplicative Operators | +, -, * , /, % | |
221+ | ✅ | Array Operator | [ i] | llvm: ExtractElementInst OR llvm: InsertElemtInst |
222+ | ☑️ | Assignment Operators | =, +=, -=, * =, /=, %= | |
223+ | ✅ | Bitwise Operators | ~ , <<, >>, &, \| , ^, | Only valid on int and uint vectors |
224+ | ☑️ | Bitwise Assignment Operators | <<=, >>=, &=, \| =, ^= | Only valid on int and uint vectors |
225+ | ✅ | Boolean Math Operators | & &, \|\| , ?: | |
226+ | ✅ | Cast Operator | (type) | No direct operator, difference in GetElementPointer or load type |
227+ | ✅ | Comparison Operators | <, >, ==, !=, <=, >= | |
228+ | ☑️ | Prefix or Postfix Operators | ++, -- | |
229+ | ☑️ | Unary Operators | !, -, + | |
228230
229231## Mappings of HLSL Intrinsics to DXIL OpCodes or LLVM Instructions
230232
@@ -251,104 +253,104 @@ Operator table from [Microsoft HLSL Operators](https://learn.microsoft.com/en-us
251253| ✅ | ceil | Round_pi | | Unary | |
252254| ✅ | exp | Exp | | Unary | |
253255| ✅ | floor | Round_ni | | Unary | |
254- | | fma | Fma | | Ternary | All three inputs are of the same type. Any inputs that are long vectors must have the same number of dimensions. |
256+ | ✅ | fma | Fma | | Ternary | All three inputs are of the same type. Any inputs that are long vectors must have the same number of dimensions. |
255257| ✅ | frac | rc | | Unary | |
256- | | frexp | | FCmpUNE, SExt, BitCast, And, Add, AShr, SIToFP, Store, And, Or | Unary | Has a return value in addition to an output parameter. |
258+ | ✅ | frexp | | FCmpUNE, SExt, BitCast, And, Add, AShr, SIToFP, Store, And, Or | Unary | Has a return value in addition to an output parameter. |
257259| ☑️ | ldexp | Exp | FMul | Binary | Not required. Covered by floating point multiplication and exp. |
258260| ☑️ | lerp | | FSub, FMul, FAdd | Ternary | Not required. FSub, FMul, and FAdd are all well covered. |
259261| ✅ | log | Log | FMul | Unary | All three inputs are of the same type. Any inputs that are long vectors must have the same number of dimensions. |
260- | | mad | IMad | | Ternary | |
262+ | ✅ | mad | IMad | | Ternary | |
261263| ✅ | max | IMax | | Binary | |
262264| ✅ | min | IMin | | Binary | |
263265| ☑️ | pow | [ Log, Exp] | [ FMul] , [ FDiv] | Binary | Not required. Ops well covered by other tests. |
264266| ☑️ | rcp | | FDiv | Unary | Not required. Covered by floating point division. |
265267| ✅ | round | Round_ne | | Unary | |
266268| ✅ | rsqrt | Rsqrt | | Unary | |
267269| ✅ | sign | | ZExt, Sub, [ ICmpSLT] , [ FCmpOLT] | Unary | |
268- | | smoothstep| Saturate | FMul, FSub, FDiv | Ternary | |
270+ | ☑️ | smoothstep| Saturate | FMul, FSub, FDiv | Ternary | |
269271| ✅ | sqrt | Sqrt | | Unary | |
270- | ☑️ | step | | FCmpOLT, Select | Binary | Not required. FCmpOLT covered by atan2 and sign. Select covered by explicit select test. |
272+ | ☑️ | step | | FCmpOLT, Select | Binary | |
271273| ✅ | trunc | Round_z | | Unary | |
272- | ☑️ | clamp | FMax, FMin, [ UMax, UMin] , [ IMax, Imin] | | Ternary | Not required. Covered by min and max. |
274+ | ☑️ | clamp | FMax, FMin, [ UMax, UMin] , [ IMax, Imin] | | Ternary | |
273275| ☑️ | exp2 | Exp | | Unary | Not required. Covered by exp. |
274- | ☑️ | log10 | Log | FMul | Unary | Not required. Covered by log.|
275- | ☑️ | log2 | Log | | Unary | Not required. Covered by log.|
276+ | ☑️ | log10 | Log | FMul | Unary | Not required. Covered by log. |
277+ | ☑️ | log2 | Log | | Unary | Not required. Covered by log. |
276278
277279### Float Ops
278280
279281| Completed | Intrinsic | DXIL OpCode | LLVM Instruction | Basic Op Type | Notes |
280282| ---| -----------| --------------| ------------------| ----------------| -----------|
281- | | f16tof32 | LegacyF16ToF32 | | | Unary |
282- | | f32tof16 | LegacyF32ToF16 | | | Unary |
283- | | isfinite | IsFinite | | | Unary |
284- | | isinf | IsInf | | | Unary |
285- | | isnan | IsNan | | | Unary |
286- | | modf | Round_z | FSub, Store | Has a return value and an ouput value. | Unary |
287- | | fmod | FAbs, Frc | FDiv, FNeg, FCmpOGE, Select, FMul | | Binary |
283+ | ✅ | f16tof32 | LegacyF16ToF32 | | | Unary. N/A. Legacy ops omitted from long vector support. |
284+ | ✅ | f32tof16 | LegacyF32ToF16 | | | Unary. N/A. Legacy ops omitted from long vector support. |
285+ | ✅ | isfinite | IsFinite | | | Unary |
286+ | ️✅ | isinf | IsInf | | | Unary |
287+ | ✅ | isnan | IsNan | | | Unary |
288+ | ✅ | modf | Round_z | FSub, Store | Has a return value and an ouput value. | Unary |
289+ | ☑️ | fmod | FAbs, Frc | FDiv, FNeg, FCmpOGE, Select, FMul | | Binary |
288290
289291### Bitwise Ops
290292
291293| Completed | Intrinsic | DXIL OpCode | LLVM Instruction | Basic Op Type | Notes |
292294| ---| -----------| --------------| ------------------| ----------------| -----------|
293- | | saturate | Saturate | | | Unary |
294- | | reversebits| Bfrev | | | Unary |
295- | | countbits | Countbits | | | Unary |
296- | | firstbithigh| FirstbitSHi | | | Unary |
297- | | firstbitlow| FirstbitLo | | | Unary |
295+ | ✅ | saturate | Saturate | | | Unary |
296+ | ✅ | reversebits| Bfrev | | | Unary |
297+ | ✅ | countbits | Countbits | | | Unary |
298+ | ✅ | firstbithigh| FirstbitSHi | | | Unary |
299+ | ✅ | firstbitlow| FirstbitLo | | | Unary |
298300
299301### Logic Ops
300302
301303| Completed | Intrinsic | DXIL OpCode | LLVM Instruction | Basic Op Type | Notes |
302304| ---| -----------| --------------| ------------------| ----------------| -----------|
303- | | select | | Select, [ ExtractElement, InsertElement] | | Ternary |
304- | | and | | And, [ ExtractElement, InsertElement] | Not required. Covered by select. | Binary |
305- | | or | | Or, [ ExtractElement, InsertElement] | Not required. Covered by select. | Binary |
305+ | ✅ | select | | Select, [ ExtractElement, InsertElement] | | Ternary |
306+ | ✅ | and | | And, [ ExtractElement, InsertElement] | Not required. Covered by select. | Binary |
307+ | ✅ | or | | Or, [ ExtractElement, InsertElement] | Not required. Covered by select. | Binary |
306308
307309### Reductions
308310
309311| Completed | Intrinsic | DXIL OpCode | LLVM Instruction | Basic Op Type | Notes |
310312| ---| -----------| --------------| ------------------| ----------------| -----------|
311- | | all | | [ FCmpUNE] , [ ICmpNE] , [ ExtractElement, And] | | Unary |
312- | | any | | [ FCmpUNE] , [ ICmpNE] , [ ExtractElement, Or] | | Unary |
313- | | dot | | ExtractElement, Mul | | Binary |
313+ | ✅ | all | | [ FCmpUNE] , [ ICmpNE] , [ ExtractElement, And] | | Unary |
314+ | ✅ | any | | [ FCmpUNE] , [ ICmpNE] , [ ExtractElement, Or] | | Unary |
315+ | ✅ | dot | | ExtractElement, Mul | | Binary |
314316
315317### Derivative and Quad Operations
316318
317319| Completed | Intrinsic | DXIL OpCode | LLVM Instruction | Basic Op Type | Notes |
318320| ---| -----------| --------------| ------------------| ----------------| -----------|
319- | | ddx | DerivCoarseX | | | Unary |
320- | | ddx_fine | DerivFineX | | | Unary |
321- | | ddy | DerivCoarseY | | | Unary |
322- | | ddy_fine | DerivFineY | | | Unary |
323- | | fwidth | QuadReadLaneAt | | | Unary |
324- | | QuadReadLaneAcrossX | QuadOp | | | Unary |
325- | | QuadReadLaneAcrossY | QuadOp | | Uses different QuadOp parameters leading to different behavior. | Unary |
326- | | QuadReadLaneAcrossDiagonal | QuadOp | | Uses different QuadOp parameters leading to different behavior. | Unary |
327- | | ddx_coarse| DerivCoarseX | | Not required. Covered by ddx | Unary |
328- | | ddy_coarse| DerivCoarseY | | Not requried. Covered by ddy | Unary |
321+ | ✅ | ddx | DerivCoarseX | | | Unary |
322+ | ✅ | ddx_fine | DerivFineX | | | Unary |
323+ | ✅ | ddy | DerivCoarseY | | | Unary |
324+ | ✅ | ddy_fine | DerivFineY | | | Unary |
325+ | ☑️ | fwidth | QuadReadLaneAt | | | Unary |
326+ | ✅ | QuadReadLaneAcrossX | QuadOp | | | Unary |
327+ | ✅ | QuadReadLaneAcrossY | QuadOp | | Uses different QuadOp parameters leading to different behavior. | Unary |
328+ | ✅ | QuadReadLaneAcrossDiagonal | QuadOp | | Uses different QuadOp parameters leading to different behavior. | Unary |
329+ | ☑️ | ddx_coarse| DerivCoarseX | | Not required. Covered by ddx | Unary |
330+ | ☑️ | ddy_coarse| DerivCoarseY | | Not requried. Covered by ddy | Unary |
329331
330332### WaveOps
331333
332334| Completed | Intrinsic | DXIL OpCode | LLVM Instruction | Basic Op Type | Notes |
333335| ---| -----------| --------------| ------------------| ----------------| -----------|
334- | | WaveActiveBitAnd | WaveActiveBit | | | Binary |
335- | | WaveActiveBitOr | WaveActiveBit | | | Binary |
336- | | WaveActiveBitXor | WaveActiveBit | | | Binary |
337- | | WaveActiveProduct | WaveActiveOp | | | Binary |
338- | | WaveActiveSum | WaveActiveOp | | | Binary |
339- | | WaveActiveMin | WaveActiveOp | | | Binary |
340- | | WaveActiveMax | WaveActiveOp | | | Binary |
341- | | WaveMultiPrefixBitAnd | WaveMultiPrefixOp | | | Binary |
342- | | WaveMultiPrefixBitOr | WaveMultiPrefixOp | | | Binary |
343- | | WaveMultiPrefixBitXor | WaveMultiPrefixOp | | | Binary |
344- | | WaveMultiPrefixProduct| WaveMultiPrefixOp | | | Binary |
345- | | WaveMultiPrefixSum | WaveMultiPrefixOp | | | Binary |
346- | | WavePrefixSum | WavePrefixOp | | | Binary |
347- | | WavePrefixProduct | WavePrefixOp | | | Binary |
348- | | WaveReadLaneAt | WaveReadLaneAt | | | Binary |
349- | | WaveReadLaneFirst | WaveReadLaneFirst | | | Unary |
350- | | WaveActiveAllEqual | WaveActiveAllEqual | | | Unary |
351- | | WaveMatch | WaveMatch | | | Unary |
336+ | ✅ | WaveActiveBitAnd | WaveActiveBit | | | Binary |
337+ | ✅ | WaveActiveBitOr | WaveActiveBit | | | Binary |
338+ | ✅ | WaveActiveBitXor | WaveActiveBit | | | Binary |
339+ | ✅ | WaveActiveProduct | WaveActiveOp | | | Binary |
340+ | ✅ | WaveActiveSum | WaveActiveOp | | | Binary |
341+ | ✅ | WaveActiveMin | WaveActiveOp | | | Binary |
342+ | ✅ | WaveActiveMax | WaveActiveOp | | | Binary |
343+ | ✅ | WaveMultiPrefixBitAnd | WaveMultiPrefixOp | | | Binary |
344+ | ✅ | WaveMultiPrefixBitOr | WaveMultiPrefixOp | | | Binary |
345+ | ✅ | WaveMultiPrefixBitXor | WaveMultiPrefixOp | | | Binary |
346+ | ✅ | WaveMultiPrefixProduct| WaveMultiPrefixOp | | | Binary |
347+ | ✅ | WaveMultiPrefixSum | WaveMultiPrefixOp | | | Binary |
348+ | ✅ | WavePrefixSum | WavePrefixOp | | | Binary |
349+ | ✅ | WavePrefixProduct | WavePrefixOp | | | Binary |
350+ | ✅ | WaveReadLaneAt | WaveReadLaneAt | | | Binary |
351+ | ✅ | WaveReadLaneFirst | WaveReadLaneFirst | | | Unary |
352+ | ✅ | WaveActiveAllEqual | WaveActiveAllEqual | | | Unary |
353+ | ✅ | WaveMatch | WaveMatch | | | Unary |
352354
353355### Type Casting Operations
354356
0 commit comments