34 lines · plain
1// RUN: %clang_cc1 -std=hlsl2021 -finclude-default-header -triple dxil-pc-shadermodel6.3-library %s \2// RUN: -emit-llvm -disable-llvm-passes -o - | FileCheck %s --check-prefixes=CHECK-DX,CHECK3// RUN: %clang_cc1 -std=hlsl2021 -finclude-default-header -triple spirv-pc-vulkan-library %s \4// RUN: -emit-llvm -disable-llvm-passes -o - | FileCheck %s --check-prefixes=CHECK-VK,CHECK5 6struct S {7 float a : A4;8};9 10// CHECK-VK: @A4 = external hidden thread_local addrspace(8) global float, !spirv.Decorations ![[#ATTR0:]]11 12// Make sure sret parameter is generated.13// CHECK-DX: define internal void @_Z7vs_mainv(ptr dead_on_unwind noalias writable sret(%struct.S) align 1 %agg.result)14// CHECK-VK: define internal spir_func void @_Z7vs_mainv(ptr dead_on_unwind noalias writable sret(%struct.S) align 1 %agg.result)15 16[shader("vertex")]17S vs_main() {18 S s;19 s.a = 0;20 return s;21};22 23// CHECK: %[[#alloca:]] = alloca %struct.S, align 824// CHECK-DX: call void @_Z7vs_mainv(ptr %[[#alloca]])25// CHECK-VK: call spir_func void @_Z7vs_mainv(ptr %[[#alloca]])26// CHECK: %[[#a:]] = load %struct.S, ptr %[[#alloca]], align 427// CHECK: %[[#b:]] = extractvalue %struct.S %[[#a]], 028// CHECK-DX: call void @llvm.dx.store.output.f32(i32 4, i32 0, i32 0, i8 0, i32 poison, float %[[#b]])29// CHECK-VK: store float %3, ptr addrspace(8) @A4, align 430// CHECK: ret void31 32// CHECK-VK: ![[#ATTR0]] = !{![[#ATTR1:]]}33// CHECK-VK: ![[#ATTR1]] = !{i32 30, i32 0}34