Skip to content

Commit 98d43f2

Browse files
committed
address pr comments, add a truncation test case
1 parent 52cc44e commit 98d43f2

File tree

1 file changed

+25
-8
lines changed

1 file changed

+25
-8
lines changed

llvm/test/CodeGen/SPIRV/hlsl-resources/issue-146942-ptr-cast.ll

Lines changed: 25 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -2,14 +2,18 @@
22
; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv-unknown-vulkan %s -o - -filetype=obj | spirv-val %}
33

44
@.str = private unnamed_addr constant [4 x i8] c"In3\00", align 1
5-
@.str.2 = private unnamed_addr constant [5 x i8] c"Out3\00", align 1
5+
@.str.2 = private unnamed_addr constant [5 x i8] c"Out4\00", align 1
6+
@.str.3 = private unnamed_addr constant [5 x i8] c"Out3\00", align 1
67

7-
; Function Attrs: mustprogress nofree noinline norecurse nosync nounwind willreturn memory(readwrite, inaccessiblemem: none)
8-
define void @main() local_unnamed_addr #0 {
9-
; CHECK: %[[#INT32:]] = OpTypeInt 32 0
10-
; CHECK: %[[#INT4:]] = OpTypeVector %[[#INT32]] 4
11-
; CHECK: %[[#FLOAT:]] = OpTypeFloat 32
12-
; CHECK: %[[#FLOAT4:]] = OpTypeVector %[[#FLOAT]] 4
8+
9+
; CHECK-DAG: %[[#INT32:]] = OpTypeInt 32 0
10+
; CHECK-DAG: %[[#INT4:]] = OpTypeVector %[[#INT32]] 4
11+
; CHECK-DAG: %[[#FLOAT:]] = OpTypeFloat 32
12+
; CHECK-DAG: %[[#FLOAT4:]] = OpTypeVector %[[#FLOAT]] 4
13+
; CHECK-DAG: %[[#INT3:]] = OpTypeVector %[[#INT32]] 3
14+
; CHECK-DAG: %[[#UNDEF_INT4:]] = OpUndef %[[#INT4]]
15+
16+
define void @case1() local_unnamed_addr {
1317
; CHECK: %[[#BUFFER_LOAD:]] = OpLoad %[[#FLOAT4]] %{{[0-9]+}} Aligned 16
1418
; CHECK: %[[#CAST_LOAD:]] = OpBitcast %[[#INT4]] %[[#BUFFER_LOAD]]
1519
; CHECK: %[[#VEC_SHUFFLE:]] = OpVectorShuffle %[[#INT4]] %[[#CAST_LOAD]] %[[#CAST_LOAD]] 0 1 2 3
@@ -22,4 +26,17 @@ define void @main() local_unnamed_addr #0 {
2226
ret void
2327
}
2428

25-
attributes #0 = { mustprogress nofree noinline norecurse nosync nounwind willreturn memory(readwrite, inaccessiblemem: none) "approx-func-fp-math"="true" "frame-pointer"="all" "hlsl.numthreads"="1,1,1" "hlsl.shader"="compute" "no-infs-fp-math"="true" "no-nans-fp-math"="true" "no-signed-zeros-fp-math"="true" "no-trapping-math"="true" "stack-protector-buffer-size"="8" }
29+
define void @case2() local_unnamed_addr {
30+
; CHECK: %[[#BUFFER_LOAD:]] = OpLoad %[[#FLOAT4]] %{{[0-9]+}} Aligned 16
31+
; CHECK: %[[#CAST_LOAD:]] = OpBitcast %[[#INT4]] %[[#BUFFER_LOAD]]
32+
; CHECK: %[[#VEC_SHUFFLE:]] = OpVectorShuffle %[[#INT4]] %[[#CAST_LOAD]] %[[#CAST_LOAD]] 0 1 2 3
33+
; CHECK: %[[#VEC_TRUNCATE:]] = OpVectorShuffle %[[#INT3]] %[[#VEC_SHUFFLE]] %[[#UNDEF_INT4]] 0 1 2
34+
%1 = tail call target("spirv.VulkanBuffer", [0 x <4 x float>], 12, 0) @llvm.spv.resource.handlefrombinding.tspirv.VulkanBuffer_a0v4f32_12_0t(i32 0, i32 2, i32 1, i32 0, i1 false, ptr nonnull @.str)
35+
%2 = tail call target("spirv.VulkanBuffer", [0 x <3 x i32>], 12, 1) @llvm.spv.resource.handlefrombinding.tspirv.VulkanBuffer_a0v3i32_12_1t(i32 0, i32 5, i32 1, i32 0, i1 false, ptr nonnull @.str.3)
36+
%3 = tail call noundef align 16 dereferenceable(16) ptr addrspace(11) @llvm.spv.resource.getpointer.p11.tspirv.VulkanBuffer_a0v4f32_12_0t(target("spirv.VulkanBuffer", [0 x <4 x float>], 12, 0) %1, i32 0)
37+
%4 = load <4 x i32>, ptr addrspace(11) %3, align 16
38+
%5 = shufflevector <4 x i32> %4, <4 x i32> poison, <3 x i32> <i32 0, i32 1, i32 2>
39+
%6 = tail call noundef align 16 dereferenceable(16) ptr addrspace(11) @llvm.spv.resource.getpointer.p11.tspirv.VulkanBuffer_a0v3i32_12_1t(target("spirv.VulkanBuffer", [0 x <3 x i32>], 12, 1) %2, i32 0)
40+
store <3 x i32> %5, ptr addrspace(11) %6, align 16
41+
ret void
42+
}

0 commit comments

Comments
 (0)