================
@@ -19,6 +19,7 @@ bool DirectXTTIImpl::isTargetIntrinsicWithScalarOpAtArg(
     Intrinsic::ID ID, unsigned ScalarOpdIdx) const {
   switch (ID) {
   case Intrinsic::dx_wave_readlane:
+  case Intrinsic::dx_quad_read_lane_at:
----------------
kcloudy0717 wrote:

I did some digging and yes, this is required for QuadReadLaneAt intrinsic. 
`isTargetIntrinsicWithScalarOpAtArg` is called by the Scalarizer pass: 
https://github.com/llvm/llvm-project/blob/797ead5fc79645a09a22d72e13912bf7e7c8d884/llvm/lib/Transforms/Scalar/Scalarizer.cpp#L792-L798
Without the case, the function returns false for operand 1 (the index param), 
and the Scalarizer would fall into the else branch — but the i32 %idx operand 
was never scattered (it's not a vector), so Scattered[J] is an empty Scatterer 
and indexing it causes access violation.

https://github.com/llvm/llvm-project/pull/205735
_______________________________________________
cfe-commits mailing list
[email protected]
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to