1c01b5bbbSNathan Gauër; RUN: llc -O0 -mtriple=spirv-unknown-unknown %s -o - | FileCheck %s 2c01b5bbbSNathan Gauër 3*59e5cb7bSMichal Paszkowski; CHECK-DAG: [[uint:%[0-9]+]] = OpTypeInt 32 0 4c01b5bbbSNathan Gauër 5c01b5bbbSNathan Gauër%A = type { 6c01b5bbbSNathan Gauër i32, 7c01b5bbbSNathan Gauër i32 8c01b5bbbSNathan Gauër} 9*59e5cb7bSMichal Paszkowski; CHECK-DAG: [[A:%[0-9]+]] = OpTypeStruct [[uint]] [[uint]] 10c01b5bbbSNathan Gauër 11c01b5bbbSNathan Gauër%B = type { 12c01b5bbbSNathan Gauër %A, 13c01b5bbbSNathan Gauër i32, 14c01b5bbbSNathan Gauër %A 15c01b5bbbSNathan Gauër} 16*59e5cb7bSMichal Paszkowski; CHECK-DAG: [[B:%[0-9]+]] = OpTypeStruct [[A]] [[uint]] [[A]] 17c01b5bbbSNathan Gauër 18*59e5cb7bSMichal Paszkowski; CHECK-DAG: [[uint_0:%[0-9]+]] = OpConstant [[uint]] 0 19*59e5cb7bSMichal Paszkowski; CHECK-DAG: [[uint_1:%[0-9]+]] = OpConstant [[uint]] 1 20*59e5cb7bSMichal Paszkowski; CHECK-DAG: [[uint_2:%[0-9]+]] = OpConstant [[uint]] 2 21c01b5bbbSNathan Gauër 22*59e5cb7bSMichal Paszkowski; CHECK-DAG: [[ptr_uint:%[0-9]+]] = OpTypePointer Function [[uint]] 23*59e5cb7bSMichal Paszkowski; CHECK-DAG: [[ptr_A:%[0-9]+]] = OpTypePointer Function [[A]] 24*59e5cb7bSMichal Paszkowski; CHECK-DAG: [[ptr_B:%[0-9]+]] = OpTypePointer Function [[B]] 25c01b5bbbSNathan Gauër 26c01b5bbbSNathan Gauërdefine void @main() #1 { 27c01b5bbbSNathan Gauërentry: 28c01b5bbbSNathan Gauër %0 = alloca %B, align 4 29c01b5bbbSNathan Gauër; CHECK: [[tmp:%[0-9]+]] = OpVariable [[ptr_B]] Function 30c01b5bbbSNathan Gauër 31c01b5bbbSNathan Gauër %1 = getelementptr %B, ptr %0, i32 0, i32 0 32c01b5bbbSNathan Gauër; CHECK: {{%[0-9]+}} = OpAccessChain [[ptr_A]] [[tmp]] [[uint_0]] 33c01b5bbbSNathan Gauër %2 = getelementptr inbounds %B, ptr %0, i32 0, i32 0 34c01b5bbbSNathan Gauër; CHECK: {{%[0-9]+}} = OpInBoundsAccessChain [[ptr_A]] [[tmp]] [[uint_0]] 35c01b5bbbSNathan Gauër 36c01b5bbbSNathan Gauër %3 = getelementptr %B, ptr %0, i32 0, i32 1 37c01b5bbbSNathan Gauër; CHECK: {{%[0-9]+}} = OpAccessChain [[ptr_uint]] [[tmp]] [[uint_1]] 38c01b5bbbSNathan Gauër %4 = getelementptr inbounds %B, ptr %0, i32 0, i32 1 39c01b5bbbSNathan Gauër; CHECK: {{%[0-9]+}} = OpInBoundsAccessChain [[ptr_uint]] [[tmp]] [[uint_1]] 40c01b5bbbSNathan Gauër 41c01b5bbbSNathan Gauër %5 = getelementptr %B, ptr %0, i32 0, i32 2 42c01b5bbbSNathan Gauër; CHECK: {{%[0-9]+}} = OpAccessChain [[ptr_A]] [[tmp]] [[uint_2]] 43c01b5bbbSNathan Gauër %6 = getelementptr inbounds %B, ptr %0, i32 0, i32 2 44c01b5bbbSNathan Gauër; CHECK: {{%[0-9]+}} = OpInBoundsAccessChain [[ptr_A]] [[tmp]] [[uint_2]] 45c01b5bbbSNathan Gauër 46c01b5bbbSNathan Gauër %7 = getelementptr %B, ptr %0, i32 0, i32 2, i32 1 47c01b5bbbSNathan Gauër; CHECK: {{%[0-9]+}} = OpAccessChain [[ptr_uint]] [[tmp]] [[uint_2]] [[uint_1]] 48c01b5bbbSNathan Gauër %8 = getelementptr inbounds %B, ptr %0, i32 0, i32 2, i32 1 49c01b5bbbSNathan Gauër; CHECK: {{%[0-9]+}} = OpInBoundsAccessChain [[ptr_uint]] [[tmp]] [[uint_2]] [[uint_1]] 50c01b5bbbSNathan Gauër 51c01b5bbbSNathan Gauër %9 = getelementptr %B, ptr %0, i32 0, i32 2 52c01b5bbbSNathan Gauër %10 = getelementptr %A, ptr %9, i32 0, i32 1 53c01b5bbbSNathan Gauër; CHECK: [[x:%[0-9]+]] = OpAccessChain [[ptr_A]] [[tmp]] [[uint_2]] 54c01b5bbbSNathan Gauër; CHECK: {{%[0-9]+}} = OpAccessChain [[ptr_uint]] [[x]] [[uint_1]] 55c01b5bbbSNathan Gauër 56c01b5bbbSNathan Gauër ret void 57c01b5bbbSNathan Gauër} 58c01b5bbbSNathan Gauër 59c01b5bbbSNathan Gauërattributes #1 = { "hlsl.numthreads"="4,8,16" "hlsl.shader"="compute" } 60