brintos

brintos / llvm-project-archived public Read only

0
0
Text · 8.1 KiB · e20aba8 Raw
221 lines · plain
1; RUN: llc -verify-machineinstrs -O0 -mtriple=spirv-unknown-vulkan-compute %s -o - | FileCheck %s2; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv-unknown-vulkan %s -o - -filetype=obj | spirv-val %}3 4; CHECK-DAG:    %[[#uint:]] = OpTypeInt 32 05; CHECK-DAG: %[[#uint_pp:]] = OpTypePointer Private %[[#uint]]6; CHECK-DAG: %[[#uint_fp:]] = OpTypePointer Function %[[#uint]]7; CHECK-DAG:  %[[#uint_0:]] = OpConstant %[[#uint]] 08; CHECK-DAG:  %[[#uint_1:]] = OpConstant %[[#uint]] 19; CHECK-DAG:  %[[#uint_2:]] = OpConstant %[[#uint]] 210; CHECK-DAG:      %[[#v2:]] = OpTypeVector %[[#uint]] 211; CHECK-DAG:      %[[#v3:]] = OpTypeVector %[[#uint]] 312; CHECK-DAG:      %[[#v4:]] = OpTypeVector %[[#uint]] 413; CHECK-DAG:   %[[#v2_01:]] = OpConstantComposite %[[#v2]] %[[#uint_0]] %[[#uint_1]]14; CHECK-DAG:  %[[#v3_012:]] = OpConstantComposite %[[#v3]] %[[#uint_0]] %[[#uint_1]] %[[#uint_2]]15; CHECK-DAG:   %[[#v4_pp:]] = OpTypePointer Private %[[#v4]]16; CHECK-DAG:   %[[#v4_fp:]] = OpTypePointer Function %[[#v4]]17 18define internal spir_func <3 x i32> @foo(ptr addrspace(10) %a) {19 20  %1 = getelementptr inbounds <4 x i32>, ptr addrspace(10) %a, i64 021; CHECK: %[[#tmp:]]  = OpInBoundsAccessChain %[[#v4_pp]] %[[#]]22 23  ; partial loading of a vector: v4 -> v3.24  %2 = load <3 x i32>, ptr addrspace(10) %1, align 1625; CHECK: %[[#load:]] = OpLoad %[[#v4]] %[[#tmp]] Aligned 1626; CHECK: %[[#val:]] = OpVectorShuffle %[[#v3]] %[[#load]] %[[#load]] 0 1 227 28  ret <3 x i32> %229; CHECK: OpReturnValue %[[#val]]30}31 32define internal spir_func <3 x i32> @fooDefault(ptr %a) {33 34  %1 = getelementptr inbounds <4 x i32>, ptr %a, i64 035; CHECK: %[[#tmp:]]  = OpInBoundsAccessChain %[[#v4_fp]] %[[#]]36 37  ; partial loading of a vector: v4 -> v3.38  %2 = load <3 x i32>, ptr %1, align 1639; CHECK: %[[#load:]] = OpLoad %[[#v4]] %[[#tmp]] Aligned 1640; CHECK: %[[#val:]] = OpVectorShuffle %[[#v3]] %[[#load]] %[[#load]] 0 1 241 42  ret <3 x i32> %243; CHECK: OpReturnValue %[[#val]]44}45 46define internal spir_func <3 x i32> @fooBounds(ptr %a) {47 48  %1 = getelementptr <4 x i32>, ptr %a, i64 049; CHECK: %[[#tmp:]]  = OpAccessChain %[[#v4_fp]] %[[#]]50 51  ; partial loading of a vector: v4 -> v3.52  %2 = load <3 x i32>, ptr %1, align 1653; CHECK: %[[#load:]] = OpLoad %[[#v4]] %[[#tmp]] Aligned 1654; CHECK: %[[#val:]] = OpVectorShuffle %[[#v3]] %[[#load]] %[[#load]] 0 1 255 56  ret <3 x i32> %257; CHECK: OpReturnValue %[[#val]]58}59 60define internal spir_func <2 x i32> @bar(ptr addrspace(10) %a) {61 62  %1 = getelementptr inbounds <4 x i32>, ptr addrspace(10) %a, i64 063; CHECK: %[[#tmp:]]  = OpInBoundsAccessChain %[[#v4_pp]] %[[#]]64 65  ; partial loading of a vector: v4 -> v2.66  %2 = load <2 x i32>, ptr addrspace(10) %1, align 1667; CHECK: %[[#load:]] = OpLoad %[[#v4]] %[[#tmp]] Aligned 1668; CHECK: %[[#val:]] = OpVectorShuffle %[[#v2]] %[[#load]] %[[#load]] 0 169 70  ret <2 x i32> %271; CHECK: OpReturnValue %[[#val]]72}73 74define internal spir_func i32 @baz(ptr addrspace(10) %a) {75 76  %1 = getelementptr inbounds <4 x i32>, ptr addrspace(10) %a, i64 077; CHECK: %[[#tmp:]]  = OpInBoundsAccessChain %[[#v4_pp]] %[[#]]78 79  ; Loading of the first scalar of a vector: v4 -> int.80  %2 = load i32, ptr addrspace(10) %1, align 1681; CHECK: %[[#ptr:]] = OpAccessChain %[[#uint_pp]] %[[#tmp]] %[[#uint_0]]82; CHECK: %[[#val:]] = OpLoad %[[#uint]] %[[#ptr]] Aligned 1683 84  ret i32 %285; CHECK: OpReturnValue %[[#val]]86}87 88define internal spir_func i32 @bazDefault(ptr %a) {89 90  %1 = getelementptr inbounds <4 x i32>, ptr %a, i64 091; CHECK: %[[#tmp:]]  = OpInBoundsAccessChain %[[#v4_fp]] %[[#]]92 93  ; Loading of the first scalar of a vector: v4 -> int.94  %2 = load i32, ptr %1, align 1695; CHECK: %[[#ptr:]] = OpAccessChain %[[#uint_fp]] %[[#tmp]] %[[#uint_0]]96; CHECK: %[[#val:]] = OpLoad %[[#uint]] %[[#ptr]] Aligned 1697 98  ret i32 %299; CHECK: OpReturnValue %[[#val]]100}101 102define internal spir_func i32 @bazBounds(ptr %a) {103 104  %1 = getelementptr <4 x i32>, ptr %a, i64 0105; CHECK: %[[#tmp:]]  = OpAccessChain %[[#v4_fp]] %[[#]]106 107  ; Loading of the first scalar of a vector: v4 -> int.108  %2 = load i32, ptr %1, align 16109; CHECK: %[[#ptr:]]  = OpAccessChain %[[#uint_fp]] %[[#tmp]] %[[#uint_0]]110; CHECK: %[[#val:]] = OpLoad %[[#uint]] %[[#ptr]] Aligned 16111 112  ret i32 %2113; CHECK: OpReturnValue %[[#val]]114}115 116define internal spir_func void @foos(ptr addrspace(10) %a) {117 118  %1 = getelementptr inbounds <4 x i32>, ptr addrspace(10) %a, i64 0119; CHECK: %[[#ptr:]]  = OpInBoundsAccessChain %[[#v4_pp]] %[[#]]120 121  store <3 x i32> <i32 0, i32 1, i32 2>, ptr addrspace(10) %1, align 16122; CHECK: %[[#out0:]] = OpLoad %[[#v4]] %[[#ptr]] Aligned 16123; CHECK:    %[[#A:]] = OpCompositeExtract %[[#uint]] %[[#v3_012]] 0124; CHECK: %[[#out1:]] = OpCompositeInsert %[[#v4]] %[[#A]] %[[#out0]] 0125; CHECK:    %[[#B:]] = OpCompositeExtract %[[#uint]] %[[#v3_012]] 1126; CHECK: %[[#out2:]] = OpCompositeInsert %[[#v4]] %[[#B]] %[[#out1]] 1127; CHECK:    %[[#C:]] = OpCompositeExtract %[[#uint]] %[[#v3_012]] 2128; CHECK: %[[#out3:]] = OpCompositeInsert %[[#v4]] %[[#C]] %[[#out2]] 2129; CHECK: OpStore %[[#ptr]] %[[#out3]] Aligned 16130 131  ret void132}133 134define internal spir_func void @foosDefault(ptr %a) {135 136  %1 = getelementptr inbounds <4 x i32>, ptr %a, i64 0137; CHECK: %[[#ptr:]]  = OpInBoundsAccessChain %[[#v4_fp]] %[[#]]138 139  store <3 x i32> <i32 0, i32 1, i32 2>, ptr %1, align 16140; CHECK: %[[#out0:]] = OpLoad %[[#v4]] %[[#ptr]] Aligned 16141; CHECK:    %[[#A:]] = OpCompositeExtract %[[#uint]] %[[#v3_012]] 0142; CHECK: %[[#out1:]] = OpCompositeInsert %[[#v4]] %[[#A]] %[[#out0]] 0143; CHECK:    %[[#B:]] = OpCompositeExtract %[[#uint]] %[[#v3_012]] 1144; CHECK: %[[#out2:]] = OpCompositeInsert %[[#v4]] %[[#B]] %[[#out1]] 1145; CHECK:    %[[#C:]] = OpCompositeExtract %[[#uint]] %[[#v3_012]] 2146; CHECK: %[[#out3:]] = OpCompositeInsert %[[#v4]] %[[#C]] %[[#out2]] 2147; CHECK: OpStore %[[#ptr]] %[[#out3]] Aligned 16148 149  ret void150}151 152define internal spir_func void @foosBounds(ptr %a) {153 154  %1 = getelementptr <4 x i32>, ptr %a, i64 0155; CHECK: %[[#ptr:]]  = OpAccessChain %[[#v4_fp]] %[[#]]156 157  store <3 x i32> <i32 0, i32 1, i32 2>, ptr %1, align 64158; CHECK: %[[#out0:]] = OpLoad %[[#v4]] %[[#ptr]] Aligned 64159; CHECK:    %[[#A:]] = OpCompositeExtract %[[#uint]] %[[#v3_012]] 0160; CHECK: %[[#out1:]] = OpCompositeInsert %[[#v4]] %[[#A]] %[[#out0]] 0161; CHECK:    %[[#B:]] = OpCompositeExtract %[[#uint]] %[[#v3_012]] 1162; CHECK: %[[#out2:]] = OpCompositeInsert %[[#v4]] %[[#B]] %[[#out1]] 1163; CHECK:    %[[#C:]] = OpCompositeExtract %[[#uint]] %[[#v3_012]] 2164; CHECK: %[[#out3:]] = OpCompositeInsert %[[#v4]] %[[#C]] %[[#out2]] 2165; CHECK: OpStore %[[#ptr]] %[[#out3]] Aligned 64166 167  ret void168}169 170define internal spir_func void @bars(ptr addrspace(10) %a) {171 172  %1 = getelementptr <4 x i32>, ptr addrspace(10) %a, i64 0173; CHECK: %[[#ptr:]]  = OpAccessChain %[[#v4_pp]] %[[#]]174 175  store <2 x i32> <i32 0, i32 1>, ptr addrspace(10) %1, align 16176; CHECK: %[[#out0:]] = OpLoad %[[#v4]] %[[#ptr]] Aligned 16177; CHECK:    %[[#A:]] = OpCompositeExtract %[[#uint]] %[[#v2_01]] 0178; CHECK: %[[#out1:]] = OpCompositeInsert %[[#v4]] %[[#A]] %[[#out0]] 0179; CHECK:    %[[#B:]] = OpCompositeExtract %[[#uint]] %[[#v2_01]] 1180; CHECK: %[[#out2:]] = OpCompositeInsert %[[#v4]] %[[#B]] %[[#out1]] 1181; CHECK: OpStore %[[#ptr]] %[[#out2]] Aligned 1182 183  ret void184}185 186define internal spir_func void @bazs(ptr addrspace(10) %a) {187 188  %1 = getelementptr <4 x i32>, ptr addrspace(10) %a, i64 0189; CHECK: %[[#ptr:]]  = OpAccessChain %[[#v4_pp]] %[[#]]190 191  store i32 0, ptr addrspace(10) %1, align 32192; CHECK:  %[[#tmp:]] = OpInBoundsAccessChain %[[#uint_pp]] %[[#ptr]] %[[#uint_0]]193; CHECK: OpStore %[[#tmp]] %[[#uint_0]] Aligned 32194 195  ret void196}197 198define internal spir_func void @bazsDefault(ptr %a) {199 200  %1 = getelementptr inbounds <4 x i32>, ptr %a, i64 0201; CHECK: %[[#ptr:]]  = OpInBoundsAccessChain %[[#v4_fp]] %[[#]]202 203  store i32 0, ptr %1, align 16204; CHECK:  %[[#tmp:]] = OpInBoundsAccessChain %[[#uint_fp]] %[[#ptr]] %[[#uint_0]]205; CHECK: OpStore %[[#tmp]] %[[#uint_0]] Aligned 16206 207  ret void208}209 210define internal spir_func void @bazsBounds(ptr %a) {211 212  %1 = getelementptr <4 x i32>, ptr %a, i64 0213; CHECK: %[[#ptr:]]  = OpAccessChain %[[#v4_fp]] %[[#]]214 215  store i32 0, ptr %1, align 16216; CHECK:  %[[#tmp:]] = OpInBoundsAccessChain %[[#uint_fp]] %[[#ptr]] %[[#uint_0]]217; CHECK: OpStore %[[#tmp]] %[[#uint_0]] Aligned 16218 219  ret void220}221