|
32 | 32 | #include <optional> |
33 | 33 | #include <vector> |
34 | 34 |
|
| 35 | +#define GENERATE_HLSL_INTRINSIC_CASE(Arch, ArchPrefix, IntrinsicPostfix, HasUnsignedVariant) \ |
| 36 | + case llvm::Triple::Arch: { \ |
| 37 | + if (HasUnsignedVariant && QT->isUnsignedIntegerType()) \ |
| 38 | + return llvm::Intrinsic::##ArchPrefix##_u##IntrinsicPostfix; \ |
| 39 | + return llvm::Intrinsic::##ArchPrefix##_##IntrinsicPostfix; \ |
| 40 | + } |
| 41 | + |
| 42 | +#define GENERATE_DX_INTRINSIC_CASE(IntrinsicPostfix, HasUnsignedVariant) \ |
| 43 | + GENERATE_HLSL_INTRINSIC_CASE(dxil, dx, IntrinsicPostfix, HasUnsignedVariant) |
| 44 | + |
| 45 | +#define GENERATE_SPV_INTRINSIC_CASE(IntrinsicPostfix, HasUnsignedVariant) \ |
| 46 | + GENERATE_HLSL_INTRINSIC_CASE(spirv, spv, IntrinsicPostfix, HasUnsignedVariant) |
| 47 | + |
| 48 | +#define GENERATE_HLSL_INTRINSIC_FUNCTION_UNSIGNED(FunctionName, IntrinsicPostfix, DxHasUnsignedVariant, SpvHasUnsignedVariant) \ |
| 49 | + llvm::Intrinsic::ID get##FunctionName##Intrinsic(QualType QT) { \ |
| 50 | + llvm::Triple::ArchType Arch = getArch(); \ |
| 51 | + switch (Arch) { \ |
| 52 | + GENERATE_DX_INTRINSIC_CASE(IntrinsicPostfix, DxHasUnsignedVariant) \ |
| 53 | + GENERATE_SPV_INTRINSIC_CASE(IntrinsicPostfix, SpvHasUnsignedVariant) \ |
| 54 | + } \ |
| 55 | + } |
| 56 | + |
35 | 57 | // A function generator macro for picking the right intrinsic |
36 | 58 | // for the target backend |
37 | 59 | #define GENERATE_HLSL_INTRINSIC_FUNCTION(FunctionName, IntrinsicPostfix) \ |
@@ -146,7 +168,6 @@ class CGHLSLRuntime { |
146 | 168 | GENERATE_HLSL_INTRINSIC_FUNCTION(Dot4AddU8Packed, dot4add_u8packed) |
147 | 169 | GENERATE_HLSL_INTRINSIC_FUNCTION(WaveActiveAllTrue, wave_all) |
148 | 170 | GENERATE_HLSL_INTRINSIC_FUNCTION(WaveActiveAnyTrue, wave_any) |
149 | | - GENERATE_HLSL_INTRINSIC_FUNCTION(WaveActiveBitOr, wave_reduce_or) |
150 | 171 | GENERATE_HLSL_INTRINSIC_FUNCTION(WaveActiveCountBits, wave_active_countbits) |
151 | 172 | GENERATE_HLSL_INTRINSIC_FUNCTION(WaveIsFirstLane, wave_is_first_lane) |
152 | 173 | GENERATE_HLSL_INTRINSIC_FUNCTION(WaveGetLaneCount, wave_get_lane_count) |
|
0 commit comments