-
Notifications
You must be signed in to change notification settings - Fork 13k
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Implement the WaveActiveAnyTrue
HLSL Function
#99160
Comments
Looking at this! |
@llvm/issue-subscribers-clang-codegen Author: Farzon Lotfi (farzonl)
- [ ] Implement `WaveActiveAnyTrue` clang builtin,
- [ ] Link `WaveActiveAnyTrue` clang builtin with `hlsl_intrinsics.h`
- [ ] Add sema checks for `WaveActiveAnyTrue` to `CheckHLSLBuiltinFunctionCall` in `SemaChecking.cpp`
- [ ] Add codegen for `WaveActiveAnyTrue` to `EmitHLSLBuiltinExpr` in `CGBuiltin.cpp`
- [ ] Add codegen tests to `clang/test/CodeGenHLSL/builtins/WaveActiveAnyTrue.hlsl`
- [ ] Add sema tests to `clang/test/SemaHLSL/BuiltIns/WaveActiveAnyTrue-errors.hlsl`
- [ ] Create the `int_dx_WaveActiveAnyTrue` intrinsic in `IntrinsicsDirectX.td`
- [ ] Create the `DXILOpMapping` of `int_dx_WaveActiveAnyTrue` to `113` in `DXIL.td`
- [ ] Create the `WaveActiveAnyTrue.ll` and `WaveActiveAnyTrue_errors.ll` tests in `llvm/test/CodeGen/DirectX/`
- [ ] Create the `int_spv_WaveActiveAnyTrue` intrinsic in `IntrinsicsSPIRV.td`
- [ ] In SPIRVInstructionSelector.cpp create the `WaveActiveAnyTrue` lowering and map it to `int_spv_WaveActiveAnyTrue` in `SPIRVInstructionSelector::selectIntrinsic`.
- [ ] Create SPIR-V backend test case in `llvm/test/CodeGen/SPIRV/hlsl-intrinsics/WaveActiveAnyTrue.ll`
DirectX
SPIR-VOpGroupNonUniformAny:Description:Evaluates a predicate for all active invocations in the group, Result Type must be a Boolean type. Execution is a Scope that identifies the group of Predicate must be a Boolean type. Capability: Missing before version 1.3. <table style="width:100%;"> Test Case(s)Example 1//dxc WaveActiveAnyTrue_test.hlsl -T lib_6_8 -enable-16bit-types -O0
export bool fn(bool p1) {
return WaveActiveAnyTrue(p1);
} HLSL:Returns true if the expression is true in any of the active lanes in the current wave. Syntaxbool WaveActiveAnyTrue(
bool expr
); Parameters<dl> <dt> expr The boolean expression to evaluate. </dd> </dl> Return valueTrue if the expression is true in any lane. RemarksThis function is supported from shader model 6.0 in all shader stages.
See also<dl> <dt> Overview of Shader Model 6 Shader Model 6 |
Resolves llvm/llvm-project#99160 - [x] Implement `WaveActiveAnyTrue` clang builtin, - [x] Link `WaveActiveAnyTrue` clang builtin with `hlsl_intrinsics.h` - [x] Add sema checks for `WaveActiveAnyTrue` to `CheckHLSLBuiltinFunctionCall` in `SemaChecking.cpp` - [x] Add codegen for `WaveActiveAnyTrue` to `EmitHLSLBuiltinExpr` in `CGBuiltin.cpp` - [x] Add codegen tests to `clang/test/CodeGenHLSL/builtins/WaveActiveAnyTrue.hlsl` - [x] Add sema tests to `clang/test/SemaHLSL/BuiltIns/WaveActiveAnyTrue-errors.hlsl` - [x] Create the `int_dx_WaveActiveAnyTrue` intrinsic in `IntrinsicsDirectX.td` - [x] Create the `DXILOpMapping` of `int_dx_WaveActiveAnyTrue` to `113` in `DXIL.td` - [x] Create the `WaveActiveAnyTrue.ll` and `WaveActiveAnyTrue_errors.ll` tests in `llvm/test/CodeGen/DirectX/` - [x] Create the `int_spv_WaveActiveAnyTrue` intrinsic in `IntrinsicsSPIRV.td` - [x] In SPIRVInstructionSelector.cpp create the `WaveActiveAnyTrue` lowering and map it to `int_spv_WaveActiveAnyTrue` in `SPIRVInstructionSelector::selectIntrinsic`. - [x] Create SPIR-V backend test case in `llvm/test/CodeGen/SPIRV/hlsl-intrinsics/WaveActiveAnyTrue.ll` --------- Co-authored-by: Finn Plummer <[email protected]> Co-authored-by: Greg Roth <[email protected]>
WaveActiveAnyTrue
clang builtin,WaveActiveAnyTrue
clang builtin withhlsl_intrinsics.h
WaveActiveAnyTrue
toCheckHLSLBuiltinFunctionCall
inSemaChecking.cpp
WaveActiveAnyTrue
toEmitHLSLBuiltinExpr
inCGBuiltin.cpp
clang/test/CodeGenHLSL/builtins/WaveActiveAnyTrue.hlsl
clang/test/SemaHLSL/BuiltIns/WaveActiveAnyTrue-errors.hlsl
int_dx_WaveActiveAnyTrue
intrinsic inIntrinsicsDirectX.td
DXILOpMapping
ofint_dx_WaveActiveAnyTrue
to113
inDXIL.td
WaveActiveAnyTrue.ll
andWaveActiveAnyTrue_errors.ll
tests inllvm/test/CodeGen/DirectX/
int_spv_WaveActiveAnyTrue
intrinsic inIntrinsicsSPIRV.td
WaveActiveAnyTrue
lowering and map it toint_spv_WaveActiveAnyTrue
inSPIRVInstructionSelector::selectIntrinsic
.llvm/test/CodeGen/SPIRV/hlsl-intrinsics/WaveActiveAnyTrue.ll
DirectX
SPIR-V
OpGroupNonUniformAny:
Description:
Evaluates a predicate for all active invocations in the group,
resulting in true if predicate evaluates to true for any active
invocation in the group, otherwise the result is
false.
Result Type must be a Boolean type.
Execution is a Scope that identifies the group of
invocations affected by this command. It must be Subgroup.
Predicate must be a Boolean type.
Capability:
GroupNonUniformVote
Missing before version 1.3.
5
335
<id>
Result Type
Result <id>
Scope <id>
Execution
<id>
Predicate
Test Case(s)
Example 1
HLSL:
Returns true if the expression is true in any of the active lanes in the current wave.
Syntax
Parameters
expr
The boolean expression to evaluate.
Return value
True if the expression is true in any lane.
Remarks
This function is supported from shader model 6.0 in all shader stages.
See also
Overview of Shader Model 6
Shader Model 6
The text was updated successfully, but these errors were encountered: