51 lines · plain
1; RUN: llc -O0 -verify-machineinstrs -mtriple=spirv64-unknown-unknown %s -o - | FileCheck %s2; RUN: %if spirv-tools %{ llc -O0 -mtriple=spirv64-unknown-unknown %s -o - -filetype=obj | spirv-val %}3 4; CHECK: %[[#int32:]] = OpTypeInt 32 05; CHECK: %[[#int64:]] = OpTypeInt 64 06; CHECK: %[[#vec3:]] = OpTypeVector %[[#int64]] 37; CHECK: %[[#ptr_input_vec3:]] = OpTypePointer Input %[[#vec3]]8; CHECK: %[[#global_size_var:]] = OpVariable %[[#ptr_input_vec3]] Input9 10; CHECK: %[[#load_gs1:]] = OpLoad %[[#vec3]] %[[#global_size_var]] Aligned 111; CHECK: %[[#extract3:]] = OpCompositeExtract %[[#int64]] %[[#load_gs1]] 012 13; CHECK: %[[#bitcast1:]] = OpBitcast %[[#]] %[[#]]14; CHECK: %[[#load_out1:]] = OpLoad %[[#]] %[[#bitcast1]] Aligned 815; CHECK: %[[#gep1:]] = OpInBoundsPtrAccessChain %[[#]] %[[#load_out1]] %[[#]]16; CHECK: OpStore %[[#gep1]] %[[#extract3]] Aligned 817 18; CHECK: %[[#load_param_x:]] = OpLoad %[[#int32]] %[[#]]19; CHECK: %[[#load_gs2:]] = OpLoad %[[#vec3]] %[[#global_size_var]] Aligned 120; CHECK: %[[#dyn_extract:]] = OpVectorExtractDynamic %[[#int64]] %[[#load_gs2]] %[[#load_param_x]]21; CHECK: %[[#cmp:]] = OpULessThan %[[#]] %[[#load_param_x]] %[[#]]22; CHECK: %[[#select2:]] = OpSelect %[[#int64]] %[[#cmp]] %[[#dyn_extract]] %[[#]]23; CHECK: %[[#bitcast2:]] = OpBitcast %[[#]] %[[#]]24; CHECK: %[[#load_out2:]] = OpLoad %[[#]] %[[#bitcast2]] Aligned 825; CHECK: %[[#gep2:]] = OpInBoundsPtrAccessChain %[[#]] %[[#load_out2]] %[[#]]26; CHECK: OpStore %[[#gep2]] %[[#select2]] Aligned 827 28define dso_local spir_kernel void @ggs(ptr noundef align 8 %out, i32 noundef %x) {29entry:30 %out.addr = alloca ptr, align 831 %x.addr = alloca i32, align 432 store ptr %out, ptr %out.addr, align 833 store i32 %x, ptr %x.addr, align 434 %call = call i64 @_Z15get_global_sizej(i32 noundef 0)35 %0 = load ptr, ptr %out.addr, align 836 %arrayidx = getelementptr inbounds i64, ptr %0, i64 037 store i64 %call, ptr %arrayidx, align 838 %call1 = call i64 @_Z15get_global_sizej(i32 noundef 3)39 %1 = load ptr, ptr %out.addr, align 840 %arrayidx2 = getelementptr inbounds i64, ptr %1, i64 141 store i64 %call1, ptr %arrayidx2, align 842 %2 = load i32, ptr %x.addr, align 443 %call3 = call i64 @_Z15get_global_sizej(i32 noundef %2)44 %3 = load ptr, ptr %out.addr, align 845 %arrayidx4 = getelementptr inbounds i64, ptr %3, i64 246 store i64 %call3, ptr %arrayidx4, align 847 ret void48}49 50declare i64 @_Z15get_global_sizej(i32 noundef)51