Issue |
151691
|
Summary |
[SPIR-V][HLSL] Fix lowering of poison in shufflevector when swizzle are used
|
Labels |
backend:SPIR-V
|
Assignees |
Keenuts
|
Reporter |
Keenuts
|
Given the following sample
```hlsl
// RUN: %clang --driver-mode=dxc %s -T ps_6_8 -E main -O3 -spirv
/* Copyright (c) 2025, Sascha Willems
*
* SPDX-License-Identifier: Apache-2.0
*
* Licensed under the Apache License, Version 2.0 the "License";
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
struct VSOutput
{
float4 Position : SV_POSITION;
[[vk::location(0)]] float3 Color : COLOR0;
};
float4 main(VSOutput input) : SV_TARGET
{
return float4(input.Color, 1.0);
}
```
The generated IR is:
```llvm
%0 = load <3 x float>, ptr addrspace(7) @COLOR0, align 16
%1 = shufflevector <3 x float> %0, <3 x float> poison, <4 x i32> <i32 0, i32 1, i32 2, i32 poison>
%vecinit78.i = insertelement <4 x float> %1, float 1.000000e+00, i64 3
store <4 x float> %vecinit78.i, ptr addrspace(8) @SV_TARGET0, align 16
```
Issue is the poison being used in the shufflevector index.
This is lowered as a `-1` in the backend, which causes a validation error.
Emitting any other valid index like `0` should be fine since the value is overriden just after.
_______________________________________________
llvm-bugs mailing list
llvm-bugs@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-bugs