brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.7 KiB · 0f2444d Raw
57 lines · plain
1// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-vertex -x hlsl -emit-llvm -finclude-default-header -disable-llvm-passes -o - %s | FileCheck %s --check-prefixes=CHECK-DXIL,CHECK2// RUN: %clang_cc1 -triple spirv-linux-vulkan-vertex -x hlsl -emit-llvm -finclude-default-header -disable-llvm-passes -o - %s | FileCheck %s --check-prefixes=CHECK-SPIRV,CHECK3 4 5struct Input {6  // FIXME: change this once we have a valid system semantic as input for VS.7  float Idx : B2;8};9 10struct Output {11  float a : A4;12  float b : A2;13};14 15// CHECK-SPIRV-DAG:    @B2 = external hidden thread_local addrspace(7) externally_initialized constant float, !spirv.Decorations ![[#METADATA_0:]]16// CHECK-SPIRV-DAG:    @A4 = external hidden thread_local addrspace(8) global float, !spirv.Decorations ![[#METADATA_0:]]17// CHECK-SPIRV-DAG:    @A2 = external hidden thread_local addrspace(8) global float, !spirv.Decorations ![[#METADATA_2:]]18 19// CHECK: %Idx = getelementptr inbounds nuw %struct.Input, ptr %input, i32 0, i32 020// CHECK: %[[#tmp:]] = load float, ptr %Idx, align 121// CHECK: %a = getelementptr inbounds nuw %struct.Output, ptr %agg.result, i32 0, i32 022// CHECK: store float %[[#tmp]], ptr %a, align 123 24// CHECK: %Idx1 = getelementptr inbounds nuw %struct.Input, ptr %input, i32 0, i32 025// CHECK: %[[#tmp:]] = load float, ptr %Idx1, align 126// CHECK: %b = getelementptr inbounds nuw %struct.Output, ptr %agg.result, i32 0, i32 127// CHECK: store float %[[#tmp]], ptr %b, align 128 29Output main(Input input) {30  Output o;31  o.a = input.Idx;32  o.b = input.Idx;33  return o;34}35 36// Code generated in the entrypoint wrapper:37 38// CHECK: %[[#OUTPUT:]] = alloca %struct.Output, align 839 40// CHECK-SPIRV: call spir_func void @_Z4main5Input(ptr %[[#OUTPUT]], ptr %[[#]])41// CHECK-DXIL:  call void @_Z4main5Input(ptr %[[#OUTPUT]], ptr %[[#]])42 43// CHECK: %[[#TMP:]] = load %struct.Output, ptr %[[#OUTPUT]], align 444// CHECK: %[[#VAL:]] = extractvalue %struct.Output %[[#TMP]], 045// CHECK-SPIRV:        store float %[[#VAL]], ptr addrspace(8) @A4, align 446// CHECK-DXIL:         call void @llvm.dx.store.output.f32(i32 4, i32 0, i32 0, i8 0, i32 poison, float %[[#VAL]])47// CHECK: %[[#VAL:]] = extractvalue %struct.Output %[[#TMP]], 148// CHECK-SPIRV:        store float %[[#VAL]], ptr addrspace(8) @A2, align 449// CHECK-DXIL:         call void @llvm.dx.store.output.f32(i32 4, i32 0, i32 0, i8 0, i32 poison, float %[[#VAL]])50 51// CHECK-SPIRV-DAG: ![[#METADATA_0]] = !{![[#METADATA_1:]]}52// CHECK-SPIRV-DAG: ![[#METADATA_2]] = !{![[#METADATA_3:]]}53// CHECK-SPIRV-DAG: ![[#METADATA_1]] = !{i32 30, i32 0}54// CHECK-SPIRV-DAG: ![[#METADATA_3]] = !{i32 30, i32 1}55//                                            |      `- Location index56//                                            `-> Decoration "Location"57