================
@@ -160,19 +160,37 @@ static Value *handleHlslSplitdouble(const CallExpr *E,
CodeGenFunction *CGF) {
return LastInst;
}
-static Value *handleHlslWaveActiveBallot(const CallExpr *E,
- CodeGenFunction *CGF) {
- Value *Cond = CGF->EmitScalarExpr(E->getArg(0));
- llvm::Type *I32 = CGF->Int32Ty;
+static Value *handleHlslWaveActiveBallot(CodeGenFunction &CGF,
+ const CallExpr *E) {
+ Value *Cond = CGF.EmitScalarExpr(E->getArg(0));
+ llvm::Type *I32 = CGF.Int32Ty;
+
+ llvm::Type *Vec4I32 = llvm::FixedVectorType::get(I32, 4);
+ llvm::StructType *Struct4I32 =
+ llvm::StructType::get(CGF.getLLVMContext(), {I32, I32, I32, I32});
+
+ if (CGF.CGM.getTarget().getTriple().isDXIL()) {
+ // Call DXIL intrinsic: returns { i32, i32, i32, i32 }
+ llvm::Function *Fn = CGF.CGM.getIntrinsic(Intrinsic::dx_wave_ballot,
{I32});
+
+ Value *StructVal = CGF.EmitRuntimeCall(Fn, Cond);
+ assert(StructVal->getType() == Struct4I32 &&
+ "dx.wave.ballot must return {i32,i32,i32,i32}");
+
+ // Reassemble struct to <4 x i32>
+ llvm::Value *VecVal = llvm::PoisonValue::get(Vec4I32);
+ for (unsigned i = 0; i < 4; ++i) {
----------------
farzonl wrote:
use clang-tidy to capitalize the I. the clangd extention for vscode should help
here.
https://github.com/llvm/llvm-project/pull/175105
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits