brintos

brintos / llvm-project-archived public Read only

0
0
Text · 3.5 KiB · 518e011 Raw
110 lines · plain
1; RUN: llc -O0 -mtriple=spirv-unknown-vulkan1.3-compute %s -o - | FileCheck %s2 3; CHECK-DAG: [[uint:%[0-9]+]] = OpTypeInt 32 04 5%A = type {6  i32,7  i328}9; CHECK-DAG:    [[A:%[0-9]+]] = OpTypeStruct [[uint]] [[uint]]10 11%B = type {12  %A,13  i32,14  %A15}16; CHECK-DAG:    [[B:%[0-9]+]] = OpTypeStruct [[A]] [[uint]] [[A]]17 18; CHECK-DAG: [[uint_0:%[0-9]+]] = OpConstant [[uint]] 019; CHECK-DAG: [[uint_1:%[0-9]+]] = OpConstant [[uint]] 120; CHECK-DAG: [[uint_2:%[0-9]+]] = OpConstant [[uint]] 221 22; CHECK-DAG: [[ptr_uint:%[0-9]+]] = OpTypePointer Function [[uint]]23; CHECK-DAG:    [[ptr_A:%[0-9]+]] = OpTypePointer Function [[A]]24; CHECK-DAG:    [[ptr_B:%[0-9]+]] = OpTypePointer Function [[B]]25 26define internal ptr @gep_B_0(ptr %base) {27; CHECK: [[tmp:%[0-9]+]] = OpFunctionParameter [[ptr_B]]28; CHECK: {{%[0-9]+}} = OpAccessChain [[ptr_A]] [[tmp]] [[uint_0]]29  %res = getelementptr %B, ptr %base, i32 0, i32 030  ret ptr %res31}32 33define internal ptr @gep_inbounds_B_0(ptr %base) {34; CHECK: [[tmp:%[0-9]+]] = OpFunctionParameter [[ptr_B]]35; CHECK: {{%[0-9]+}} = OpInBoundsAccessChain [[ptr_A]] [[tmp]] [[uint_0]]36  %res = getelementptr inbounds %B, ptr %base, i32 0, i32 037  ret ptr %res38}39 40define internal ptr @gep_B_1(ptr %base) {41; CHECK: [[tmp:%[0-9]+]] = OpFunctionParameter [[ptr_B]]42; CHECK: {{%[0-9]+}} = OpAccessChain [[ptr_uint]] [[tmp]] [[uint_1]]43  %res = getelementptr %B, ptr %base, i32 0, i32 144  ret ptr %res45}46 47define internal ptr @gep_inbounds_B_1(ptr %base) {48; CHECK: [[tmp:%[0-9]+]] = OpFunctionParameter [[ptr_B]]49; CHECK: {{%[0-9]+}} = OpInBoundsAccessChain [[ptr_uint]] [[tmp]] [[uint_1]]50  %res = getelementptr inbounds %B, ptr %base, i32 0, i32 151  ret ptr %res52}53 54define internal ptr @gep_B_2(ptr %base) {55; CHECK: [[tmp:%[0-9]+]] = OpFunctionParameter [[ptr_B]]56; CHECK: {{%[0-9]+}} = OpAccessChain [[ptr_A]] [[tmp]] [[uint_2]]57  %res = getelementptr %B, ptr %base, i32 0, i32 258  ret ptr %res59}60 61define internal ptr @gep_inbounds_B_2(ptr %base) {62; CHECK: [[tmp:%[0-9]+]] = OpFunctionParameter [[ptr_B]]63; CHECK: {{%[0-9]+}} = OpInBoundsAccessChain [[ptr_A]] [[tmp]] [[uint_2]]64  %res = getelementptr inbounds %B, ptr %base, i32 0, i32 265  ret ptr %res66}67 68define internal ptr @gep_B_2_1(ptr %base) {69; CHECK: [[tmp:%[0-9]+]] = OpFunctionParameter [[ptr_B]]70; CHECK: {{%[0-9]+}} = OpAccessChain [[ptr_uint]] [[tmp]] [[uint_2]] [[uint_1]]71  %res = getelementptr %B, ptr %base, i32 0, i32 2, i32 172  ret ptr %res73}74 75define internal ptr @gep_inbounds_B_2_1(ptr %base) {76; CHECK: [[tmp:%[0-9]+]] = OpFunctionParameter [[ptr_B]]77; CHECK: {{%[0-9]+}} = OpInBoundsAccessChain [[ptr_uint]] [[tmp]] [[uint_2]] [[uint_1]]78  %res = getelementptr inbounds %B, ptr %base, i32 0, i32 2, i32 179  ret ptr %res80}81 82define internal ptr @gep_B_2_A_1(ptr %base) {83; CHECK: [[tmp:%[0-9]+]] = OpFunctionParameter [[ptr_B]]84; CHECK: [[x:%[0-9]+]] = OpAccessChain [[ptr_A]] [[tmp]] [[uint_2]]85; CHECK:   {{%[0-9]+}} = OpAccessChain [[ptr_uint]] [[x]] [[uint_1]]86  %x = getelementptr %B, ptr %base, i32 0, i32 287  %res = getelementptr %A, ptr %x, i32 0, i32 188  ret ptr %res89}90 91define void @main() #1 {92entry:93  %0 = alloca %B, align 494; CHECK: [[tmp:%[0-9]+]] = OpVariable [[ptr_B]] Function95 96  %1 = call ptr @gep_B_0(ptr %0)97  %2 = call ptr @gep_inbounds_B_0(ptr %0)98  %3 = call ptr @gep_B_1(ptr %0)99  %4 = call ptr @gep_inbounds_B_1(ptr %0)100  %5 = call ptr @gep_B_2(ptr %0)101  %6 = call ptr @gep_inbounds_B_2(ptr %0)102  %7 = call ptr @gep_B_2_1(ptr %0)103  %8 = call ptr @gep_inbounds_B_2_1(ptr %0)104  %10 = call ptr @gep_B_2_A_1(ptr %0)105 106  ret void107}108 109attributes #1 = { "hlsl.numthreads"="4,8,16" "hlsl.shader"="compute" }110