brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.3 KiB · c632e79 Raw
97 lines · plain
1// RUN: %clang_cc1 -finclude-default-header -fnative-half-type  \2// RUN:   -triple dxil-pc-shadermodel6.3-library %s -disable-llvm-passes \3// RUN:   -emit-llvm -o - | FileCheck %s4 5// CHECK-LABEL: Single6 7// Setup local vars.8// CHECK: [[VecAddr:%.*]] = alloca <3 x i64>, align 329// CHECK-NEXT: [[AAddr:%.*]] = alloca i64, align 810// CHECK-NEXT: store <3 x i64> %vec, ptr [[VecAddr]], align 3211// CHECK-NEXT: store i64 %a, ptr [[AAddr]], align 812 13// Update single element of the vector.14// CHECK-NEXT: [[A:%.*]] = load i64, ptr [[AAddr]], align 815// CHECK-NEXT: [[Vy:%.*]] = getelementptr <3 x i64>, ptr [[VecAddr]], i32 0, i32 116// CHECK-NEXT: store i64 [[A]], ptr [[Vy]], align 817 18// Return.19// CHECK-NEXT: [[RetVal:%.*]] = load <3 x i64>, ptr [[VecAddr]], align 3220// CHECK-NEXT: ret <3 x i64> [[RetVal]]21uint64_t3 Single(uint64_t3 vec, uint64_t a){22    vec.y = a;23    return vec;24}25 26// CHECK-LABEL: Double27 28// Setup local vars.29// CHECK: [[VecAddr:%.*]] = alloca <3 x float>, align 1630// CHECK-NEXT: [[AAddr:%.*]] = alloca float, align 431// CHECK-NEXT: [[BAddr:%.*]] = alloca float, align 432// CHECK-NEXT: store <3 x float> %vec, ptr [[VecAddr]], align 1633// CHECK-NEXT: store float %a, ptr [[AAddr]], align 434// CHECK-NEXT: store float %b, ptr [[BAddr]], align 435 36// Create temporary vector {a, b}.37// CHECK-NEXT: [[A:%.*]] = load float, ptr [[AAddr]], align 438// CHECK-NEXT: [[TmpVec0:%.*]] = insertelement <2 x float> poison, float [[A]], i32 039// CHECK-NEXT: [[B:%.*]] = load float, ptr [[BAddr]], align 440// CHECK-NEXT: [[TmpVec1:%.*]] = insertelement <2 x float> [[TmpVec0]], float [[B]], i32 141 42// Update two elements of the vector from temporary vector.43// CHECK-NEXT: [[TmpX:%.*]] = extractelement <2 x float> [[TmpVec1]], i32 044// CHECK-NEXT: [[VecZ:%.*]] = getelementptr <3 x float>, ptr [[VecAddr]], i32 0, i32 245// CHECK-NEXT: store float [[TmpX]], ptr [[VecZ]], align 446// CHECK-NEXT: [[TmpY:%.*]] = extractelement <2 x float> [[TmpVec1]], i32 147// CHECK-NEXT: [[VecY:%.*]] = getelementptr <3 x float>, ptr [[VecAddr]], i32 0, i32 148// CHECK-NEXT: store float [[TmpY]], ptr [[VecY]], align 449 50// Return.51// CHECK-NEXT: [[RetVal:%.*]] = load <3 x float>, ptr [[VecAddr]], align 1652// CHECK-NEXT: ret <3 x float> [[RetVal]]53float3 Double(float3 vec, float a, float b) {54    vec.zy = {a, b};55    return vec;56}57 58// CHECK-LABEL: Shuffle59 60// Setup local vars.61// CHECK: [[VecAddr:%.*]] = alloca <4 x half>, align 862// CHECK-NEXT: [[AAddr:%.*]] = alloca half, align 263// CHECK-NEXT: [[BAddr:%.*]] = alloca half, align 264// CHECK-NEXT: store <4 x half> %vec, ptr [[VecAddr]], align 865// CHECK-NEXT: store half %a, ptr [[AAddr]], align 266// CHECK-NEXT: store half %b, ptr [[BAddr]], align 267 68// Create temporary vector {a, b, 13.74, a}.69// CHECK-NEXT: [[A:%.*]] = load half, ptr [[AAddr]], align 270// CHECK-NEXT: [[TmpVec0:%.*]] = insertelement <4 x half> poison, half [[A]], i32 071// CHECK-NEXT: [[B:%.*]] = load half, ptr [[BAddr]], align 272// CHECK-NEXT: [[TmpVec1:%.*]] = insertelement <4 x half> [[TmpVec0]], half [[B]], i32 173// CHECK-NEXT: [[TmpVec2:%.*]] = insertelement <4 x half> %vecinit1, half 0xH4ADF, i32 274// CHECK-NEXT: [[A:%.*]] = load half, ptr [[AAddr]], align 275// CHECK-NEXT: [[TmpVec3:%.*]] = insertelement <4 x half> [[TmpVec2]], half [[A]], i32 376 77// Update four elements of the vector via mixed up swizzle from the temporary vector.78// CHECK-NEXT: [[TmpX:%.*]] = extractelement <4 x half> [[TmpVec3]], i32 079// CHECK-NEXT: [[VecZ:%.*]] = getelementptr <4 x half>, ptr [[VecAddr]], i32 0, i32 280// CHECK-NEXT: store half [[TmpX]], ptr [[VecZ]], align 281// CHECK-NEXT: [[TmpY:%.*]] = extractelement <4 x half> [[TmpVec3]], i32 182// CHECK-NEXT: [[VecW:%.*]] = getelementptr <4 x half>, ptr [[VecAddr]], i32 0, i32 383// CHECK-NEXT: store half [[TmpY]], ptr [[VecW]], align 284// CHECK-NEXT: [[TmpZ:%.*]] = extractelement <4 x half> [[TmpVec3]], i32 285// CHECK-NEXT: store half [[TmpZ]], ptr [[VecAddr]], align 286// CHECK-NEXT: [[TmpW:%.*]] = extractelement <4 x half> [[TmpVec3]], i32 387// CHECK-NEXT: [[VecY:%.*]] = getelementptr <4 x half>, ptr [[VecAddr]], i32 0, i32 188// CHECK-NEXT: store half [[TmpW]], ptr [[VecY]], align 289 90// Return.91// CHECK-NEXT: [[RetVal:%.*]] = load <4 x half>, ptr [[VecAddr]], align 892// CHECK-NEXT: ret <4 x half> [[RetVal]]93half4 Shuffle(half4 vec, half a, half b) {94    vec.zwxy = {a, b, 13.74, a};95    return vec;96}97