| 
1 |  | -// RUN: %clang_cc1 -std=hlsl202x -finclude-default-header -x hlsl -triple \  | 
2 |  | -// RUN:   dxil-pc-shadermodel6.3-library %s -emit-llvm -disable-llvm-passes \  | 
3 |  | -// RUN:   -o - | FileCheck %s --check-prefixes=CHECK \  | 
4 |  | -// RUN:   -DFNATTRS="noundef nofpclass(nan inf)" -DTARGET=dx  | 
5 |  | -// RUN: %clang_cc1 -std=hlsl202x -finclude-default-header -x hlsl -triple \  | 
6 |  | -// RUN:   spirv-unknown-vulkan-compute %s -emit-llvm -disable-llvm-passes \  | 
7 |  | -// RUN:   -o - | FileCheck %s --check-prefixes=CHECK \  | 
8 |  | -// RUN:   -DFNATTRS="spir_func noundef nofpclass(nan inf)" -DTARGET=spv  | 
9 |  | - | 
10 |  | -// CHECK-LABEL: test_lerp_double  | 
11 |  | -// CHECK: %hlsl.lerp = call reassoc nnan ninf nsz arcp afn float @llvm.[[TARGET]].lerp.f32(float %{{.*}}, float %{{.*}}, float %{{.*}})  | 
12 |  | -// CHECK: ret float %hlsl.lerp  | 
 | 1 | +// RUN: %clang_cc1 -std=hlsl202x -finclude-default-header -x hlsl -triple  dxil-pc-shadermodel6.3-library %s -emit-llvm -o - | FileCheck %s --check-prefixes=CHECK -DFNATTRS="noundef nofpclass(nan inf)" -DTARGET=dx  | 
 | 2 | +// RUN: %clang_cc1 -std=hlsl202x -finclude-default-header -x hlsl -triple spirv-unknown-vulkan-compute %s -emit-llvm -o - | FileCheck %s --check-prefixes=CHECK -DFNATTRS="spir_func noundef nofpclass(nan inf)" -DTARGET=spv  | 
 | 3 | + | 
 | 4 | +// CHECK: define [[FNATTRS]] float @_Z16test_lerp_doubled(  | 
 | 5 | +// CHECK:    [[CONV0:%.*]] = fptrunc {{.*}} double %{{.*}} to float  | 
 | 6 | +// CHECK:    [[CONV1:%.*]] = fptrunc {{.*}} double %{{.*}} to float  | 
 | 7 | +// CHECK:    [[CONV2:%.*]] = fptrunc {{.*}} double %{{.*}} to float  | 
 | 8 | +// CHECK:    [[LERP:%.*]] = call {{.*}} float @llvm.[[TARGET]].lerp.f32(float [[CONV0]], float [[CONV1]], float [[CONV2]])  | 
 | 9 | +// CHECK:    ret float [[LERP]]  | 
13 | 10 | float test_lerp_double(double p0) { return lerp(p0, p0, p0); }  | 
14 | 11 | 
 
  | 
15 |  | -// CHECK-LABEL: test_lerp_double2  | 
16 |  | -// CHECK: %hlsl.lerp = call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.[[TARGET]].lerp.v2f32(<2 x float> %{{.*}}, <2 x float> %{{.*}}, <2 x float> %{{.*}})  | 
17 |  | -// CHECK: ret <2 x float> %hlsl.lerp  | 
 | 12 | +// CHECK: define [[FNATTRS]] <2 x float> @_Z17test_lerp_double2Dv2_d(  | 
 | 13 | +// CHECK:    [[CONV0:%.*]] = fptrunc {{.*}} <2 x double> %{{.*}} to <2 x float>  | 
 | 14 | +// CHECK:    [[CONV1:%.*]] = fptrunc {{.*}} <2 x double> %{{.*}} to <2 x float>  | 
 | 15 | +// CHECK:    [[CONV2:%.*]] = fptrunc {{.*}} <2 x double> %{{.*}} to <2 x float>  | 
 | 16 | +// CHECK:    [[LERP:%.*]] = call {{.*}} <2 x float> @llvm.[[TARGET]].lerp.v2f32(<2 x float> [[CONV0]], <2 x float> [[CONV1]], <2 x float> [[CONV2]])  | 
 | 17 | +// CHECK:    ret <2 x float> [[LERP]]  | 
18 | 18 | float2 test_lerp_double2(double2 p0) { return lerp(p0, p0, p0); }  | 
19 | 19 | 
 
  | 
20 |  | -// CHECK-LABEL: test_lerp_double3  | 
21 |  | -// CHECK: %hlsl.lerp = call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.[[TARGET]].lerp.v3f32(<3 x float> %{{.*}}, <3 x float> %{{.*}}, <3 x float> %{{.*}})  | 
22 |  | -// CHECK: ret <3 x float> %hlsl.lerp  | 
 | 20 | +// CHECK: define [[FNATTRS]] <3 x float> @_Z17test_lerp_double3Dv3_d(  | 
 | 21 | +// CHECK:    [[CONV0:%.*]] = fptrunc {{.*}} <3 x double> %{{.*}} to <3 x float>  | 
 | 22 | +// CHECK:    [[CONV1:%.*]] = fptrunc {{.*}} <3 x double> %{{.*}} to <3 x float>  | 
 | 23 | +// CHECK:    [[CONV2:%.*]] = fptrunc {{.*}} <3 x double> %{{.*}} to <3 x float>  | 
 | 24 | +// CHECK:    [[LERP:%.*]] = call {{.*}} <3 x float> @llvm.[[TARGET]].lerp.v3f32(<3 x float> [[CONV0]], <3 x float> [[CONV1]], <3 x float> [[CONV2]])  | 
 | 25 | +// CHECK:    ret <3 x float> [[LERP]]  | 
23 | 26 | float3 test_lerp_double3(double3 p0) { return lerp(p0, p0, p0); }  | 
24 | 27 | 
 
  | 
25 |  | -// CHECK-LABEL: test_lerp_double4  | 
26 |  | -// CHECK: %hlsl.lerp = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.[[TARGET]].lerp.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}})  | 
27 |  | -// CHECK: ret <4 x float> %hlsl.lerp  | 
 | 28 | +// CHECK: define [[FNATTRS]] <4 x float> @_Z17test_lerp_double4Dv4_d(  | 
 | 29 | +// CHECK:    [[CONV0:%.*]] = fptrunc {{.*}} <4 x double> %{{.*}} to <4 x float>  | 
 | 30 | +// CHECK:    [[CONV1:%.*]] = fptrunc {{.*}} <4 x double> %{{.*}} to <4 x float>  | 
 | 31 | +// CHECK:    [[CONV2:%.*]] = fptrunc {{.*}} <4 x double> %{{.*}} to <4 x float>  | 
 | 32 | +// CHECK:    [[LERP:%.*]] = call {{.*}} <4 x float> @llvm.[[TARGET]].lerp.v4f32(<4 x float> [[CONV0]], <4 x float> [[CONV1]], <4 x float> [[CONV2]])  | 
 | 33 | +// CHECK:    ret <4 x float> [[LERP]]  | 
28 | 34 | float4 test_lerp_double4(double4 p0) { return lerp(p0, p0, p0); }  | 
29 | 35 | 
 
  | 
30 |  | -// CHECK-LABEL: test_lerp_int  | 
31 |  | -// CHECK: %hlsl.lerp = call reassoc nnan ninf nsz arcp afn float @llvm.[[TARGET]].lerp.f32(float %{{.*}}, float %{{.*}}, float %{{.*}})  | 
32 |  | -// CHECK: ret float %hlsl.lerp  | 
 | 36 | +// CHECK: define [[FNATTRS]] float @_Z13test_lerp_inti(  | 
 | 37 | +// CHECK:    [[CONV0:%.*]] = sitofp i32 %{{.*}} to float  | 
 | 38 | +// CHECK:    [[CONV1:%.*]] = sitofp i32 %{{.*}} to float  | 
 | 39 | +// CHECK:    [[CONV2:%.*]] = sitofp i32 %{{.*}} to float  | 
 | 40 | +// CHECK:    [[LERP:%.*]] = call {{.*}} float @llvm.[[TARGET]].lerp.f32(float [[CONV0]], float [[CONV1]], float [[CONV2]])  | 
 | 41 | +// CHECK:    ret float [[LERP]]  | 
33 | 42 | float test_lerp_int(int p0) { return lerp(p0, p0, p0); }  | 
34 | 43 | 
 
  | 
35 |  | -// CHECK-LABEL: test_lerp_int2  | 
36 |  | -// CHECK: %hlsl.lerp = call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.[[TARGET]].lerp.v2f32(<2 x float> %{{.*}}, <2 x float> %{{.*}}, <2 x float> %{{.*}})  | 
37 |  | -// CHECK: ret <2 x float> %hlsl.lerp  | 
 | 44 | +// CHECK: define [[FNATTRS]] <2 x float> @_Z14test_lerp_int2Dv2_i(  | 
 | 45 | +// CHECK:    [[CONV0:%.*]] = sitofp <2 x i32> %{{.*}} to <2 x float>  | 
 | 46 | +// CHECK:    [[CONV1:%.*]] = sitofp <2 x i32> %{{.*}} to <2 x float>  | 
 | 47 | +// CHECK:    [[CONV2:%.*]] = sitofp <2 x i32> %{{.*}} to <2 x float>  | 
 | 48 | +// CHECK:    [[LERP:%.*]] = call {{.*}} <2 x float> @llvm.[[TARGET]].lerp.v2f32(<2 x float> [[CONV0]], <2 x float> [[CONV1]], <2 x float> [[CONV2]])  | 
 | 49 | +// CHECK:    ret <2 x float> [[LERP]]  | 
38 | 50 | float2 test_lerp_int2(int2 p0) { return lerp(p0, p0, p0); }  | 
39 | 51 | 
 
  | 
40 |  | -// CHECK-LABEL: test_lerp_int3  | 
41 |  | -// CHECK: %hlsl.lerp = call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.[[TARGET]].lerp.v3f32(<3 x float> %{{.*}}, <3 x float> %{{.*}}, <3 x float> %{{.*}})  | 
42 |  | -// CHECK: ret <3 x float> %hlsl.lerp  | 
 | 52 | +// CHECK: define [[FNATTRS]] <3 x float> @_Z14test_lerp_int3Dv3_i(  | 
 | 53 | +// CHECK:    [[CONV0:%.*]] = sitofp <3 x i32> %{{.*}} to <3 x float>  | 
 | 54 | +// CHECK:    [[CONV1:%.*]] = sitofp <3 x i32> %{{.*}} to <3 x float>  | 
 | 55 | +// CHECK:    [[CONV2:%.*]] = sitofp <3 x i32> %{{.*}} to <3 x float>  | 
 | 56 | +// CHECK:    [[LERP:%.*]] = call {{.*}} <3 x float> @llvm.[[TARGET]].lerp.v3f32(<3 x float> [[CONV0]], <3 x float> [[CONV1]], <3 x float> [[CONV2]])  | 
 | 57 | +// CHECK:    ret <3 x float> [[LERP]]  | 
43 | 58 | float3 test_lerp_int3(int3 p0) { return lerp(p0, p0, p0); }  | 
44 | 59 | 
 
  | 
45 |  | -// CHECK-LABEL: test_lerp_int4  | 
46 |  | -// CHECK: %hlsl.lerp = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.[[TARGET]].lerp.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}})  | 
47 |  | -// CHECK: ret <4 x float> %hlsl.lerp  | 
 | 60 | +// CHECK: define [[FNATTRS]] <4 x float> @_Z14test_lerp_int4Dv4_i(  | 
 | 61 | +// CHECK:    [[CONV0:%.*]] = sitofp <4 x i32> %{{.*}} to <4 x float>  | 
 | 62 | +// CHECK:    [[CONV1:%.*]] = sitofp <4 x i32> %{{.*}} to <4 x float>  | 
 | 63 | +// CHECK:    [[CONV2:%.*]] = sitofp <4 x i32> %{{.*}} to <4 x float>  | 
 | 64 | +// CHECK:    [[LERP:%.*]] = call {{.*}} <4 x float> @llvm.[[TARGET]].lerp.v4f32(<4 x float> [[CONV0]], <4 x float> [[CONV1]], <4 x float> [[CONV2]])  | 
 | 65 | +// CHECK:    ret <4 x float> [[LERP]]  | 
48 | 66 | float4 test_lerp_int4(int4 p0) { return lerp(p0, p0, p0); }  | 
49 | 67 | 
 
  | 
50 |  | -// CHECK-LABEL: test_lerp_uint  | 
51 |  | -// CHECK: %hlsl.lerp = call reassoc nnan ninf nsz arcp afn float @llvm.[[TARGET]].lerp.f32(float %{{.*}}, float %{{.*}}, float %{{.*}})  | 
52 |  | -// CHECK: ret float %hlsl.lerp  | 
 | 68 | +// CHECK: define [[FNATTRS]] float @_Z14test_lerp_uintj(  | 
 | 69 | +// CHECK:    [[CONV0:%.*]] = uitofp i32 %{{.*}} to float  | 
 | 70 | +// CHECK:    [[CONV1:%.*]] = uitofp i32 %{{.*}} to float  | 
 | 71 | +// CHECK:    [[CONV2:%.*]] = uitofp i32 %{{.*}} to float  | 
 | 72 | +// CHECK:    [[LERP:%.*]] = call {{.*}} float @llvm.[[TARGET]].lerp.f32(float [[CONV0]], float [[CONV1]], float [[CONV2]])  | 
 | 73 | +// CHECK:    ret float [[LERP]]  | 
53 | 74 | float test_lerp_uint(uint p0) { return lerp(p0, p0, p0); }  | 
54 | 75 | 
 
  | 
55 |  | -// CHECK-LABEL: test_lerp_uint2  | 
56 |  | -// CHECK: %hlsl.lerp = call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.[[TARGET]].lerp.v2f32(<2 x float> %{{.*}}, <2 x float> %{{.*}}, <2 x float> %{{.*}})  | 
57 |  | -// CHECK: ret <2 x float> %hlsl.lerp  | 
 | 76 | +// CHECK: define [[FNATTRS]] <2 x float> @_Z15test_lerp_uint2Dv2_j(  | 
 | 77 | +// CHECK:    [[CONV0:%.*]] = uitofp <2 x i32> %{{.*}} to <2 x float>  | 
 | 78 | +// CHECK:    [[CONV1:%.*]] = uitofp <2 x i32> %{{.*}} to <2 x float>  | 
 | 79 | +// CHECK:    [[CONV2:%.*]] = uitofp <2 x i32> %{{.*}} to <2 x float>  | 
 | 80 | +// CHECK:    [[LERP:%.*]] = call {{.*}} <2 x float> @llvm.[[TARGET]].lerp.v2f32(<2 x float> [[CONV0]], <2 x float> [[CONV1]], <2 x float> [[CONV2]])  | 
 | 81 | +// CHECK:    ret <2 x float> [[LERP]]  | 
58 | 82 | float2 test_lerp_uint2(uint2 p0) { return lerp(p0, p0, p0); }  | 
59 | 83 | 
 
  | 
60 |  | -// CHECK-LABEL: test_lerp_uint3  | 
61 |  | -// CHECK: %hlsl.lerp = call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.[[TARGET]].lerp.v3f32(<3 x float> %{{.*}}, <3 x float> %{{.*}}, <3 x float> %{{.*}})  | 
62 |  | -// CHECK: ret <3 x float> %hlsl.lerp  | 
 | 84 | +// CHECK: define [[FNATTRS]] <3 x float> @_Z15test_lerp_uint3Dv3_j(  | 
 | 85 | +// CHECK:    [[CONV0:%.*]] = uitofp <3 x i32> %{{.*}} to <3 x float>  | 
 | 86 | +// CHECK:    [[CONV1:%.*]] = uitofp <3 x i32> %{{.*}} to <3 x float>  | 
 | 87 | +// CHECK:    [[CONV2:%.*]] = uitofp <3 x i32> %{{.*}} to <3 x float>  | 
 | 88 | +// CHECK:    [[LERP:%.*]] = call {{.*}} <3 x float> @llvm.[[TARGET]].lerp.v3f32(<3 x float> [[CONV0]], <3 x float> [[CONV1]], <3 x float> [[CONV2]])  | 
 | 89 | +// CHECK:    ret <3 x float> [[LERP]]  | 
63 | 90 | float3 test_lerp_uint3(uint3 p0) { return lerp(p0, p0, p0); }  | 
64 | 91 | 
 
  | 
65 |  | -// CHECK-LABEL: test_lerp_uint4  | 
66 |  | -// CHECK: %hlsl.lerp = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.[[TARGET]].lerp.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}})  | 
67 |  | -// CHECK: ret <4 x float> %hlsl.lerp  | 
 | 92 | +// CHECK: define [[FNATTRS]] <4 x float> @_Z15test_lerp_uint4Dv4_j(  | 
 | 93 | +// CHECK:    [[CONV0:%.*]] = uitofp <4 x i32> %{{.*}} to <4 x float>  | 
 | 94 | +// CHECK:    [[CONV1:%.*]] = uitofp <4 x i32> %{{.*}} to <4 x float>  | 
 | 95 | +// CHECK:    [[CONV2:%.*]] = uitofp <4 x i32> %{{.*}} to <4 x float>  | 
 | 96 | +// CHECK:    [[LERP:%.*]] = call {{.*}} <4 x float> @llvm.[[TARGET]].lerp.v4f32(<4 x float> [[CONV0]], <4 x float> [[CONV1]], <4 x float> [[CONV2]])  | 
 | 97 | +// CHECK:    ret <4 x float> [[LERP]]  | 
68 | 98 | float4 test_lerp_uint4(uint4 p0) { return lerp(p0, p0, p0); }  | 
69 | 99 | 
 
  | 
70 |  | -// CHECK-LABEL: test_lerp_int64_t  | 
71 |  | -// CHECK: %hlsl.lerp = call reassoc nnan ninf nsz arcp afn float @llvm.[[TARGET]].lerp.f32(float %{{.*}}, float %{{.*}}, float %{{.*}})  | 
72 |  | -// CHECK: ret float %hlsl.lerp  | 
 | 100 | +// CHECK: define [[FNATTRS]] float @_Z17test_lerp_int64_tl(  | 
 | 101 | +// CHECK:    [[CONV0:%.*]] = sitofp i64 %{{.*}} to float  | 
 | 102 | +// CHECK:    [[CONV1:%.*]] = sitofp i64 %{{.*}} to float  | 
 | 103 | +// CHECK:    [[CONV2:%.*]] = sitofp i64 %{{.*}} to float  | 
 | 104 | +// CHECK:    [[LERP:%.*]] = call {{.*}} float @llvm.[[TARGET]].lerp.f32(float [[CONV0]], float [[CONV1]], float [[CONV2]])  | 
 | 105 | +// CHECK:    ret float [[LERP]]  | 
73 | 106 | float test_lerp_int64_t(int64_t p0) { return lerp(p0, p0, p0); }  | 
74 | 107 | 
 
  | 
75 |  | -// CHECK-LABEL: test_lerp_int64_t2  | 
76 |  | -// CHECK: %hlsl.lerp = call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.[[TARGET]].lerp.v2f32(<2 x float> %{{.*}}, <2 x float> %{{.*}}, <2 x float> %{{.*}})  | 
77 |  | -// CHECK: ret <2 x float> %hlsl.lerp  | 
 | 108 | +// CHECK: define [[FNATTRS]] <2 x float> @_Z18test_lerp_int64_t2Dv2_l(  | 
 | 109 | +// CHECK:    [[CONV0:%.*]] = sitofp <2 x i64> %{{.*}} to <2 x float>  | 
 | 110 | +// CHECK:    [[CONV1:%.*]] = sitofp <2 x i64> %{{.*}} to <2 x float>  | 
 | 111 | +// CHECK:    [[CONV2:%.*]] = sitofp <2 x i64> %{{.*}} to <2 x float>  | 
 | 112 | +// CHECK:    [[LERP:%.*]] = call {{.*}} <2 x float> @llvm.[[TARGET]].lerp.v2f32(<2 x float> [[CONV0]], <2 x float> [[CONV1]], <2 x float> [[CONV2]])  | 
 | 113 | +// CHECK:    ret <2 x float> [[LERP]]  | 
78 | 114 | float2 test_lerp_int64_t2(int64_t2 p0) { return lerp(p0, p0, p0); }  | 
79 | 115 | 
 
  | 
80 |  | -// CHECK-LABEL: test_lerp_int64_t3  | 
81 |  | -// CHECK: %hlsl.lerp = call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.[[TARGET]].lerp.v3f32(<3 x float> %{{.*}}, <3 x float> %{{.*}}, <3 x float> %{{.*}})  | 
82 |  | -// CHECK: ret <3 x float> %hlsl.lerp  | 
 | 116 | +// CHECK: define [[FNATTRS]] <3 x float> @_Z18test_lerp_int64_t3Dv3_l(  | 
 | 117 | +// CHECK:    [[CONV0:%.*]] = sitofp <3 x i64> %{{.*}} to <3 x float>  | 
 | 118 | +// CHECK:    [[CONV1:%.*]] = sitofp <3 x i64> %{{.*}} to <3 x float>  | 
 | 119 | +// CHECK:    [[CONV2:%.*]] = sitofp <3 x i64> %{{.*}} to <3 x float>  | 
 | 120 | +// CHECK:    [[LERP:%.*]] = call {{.*}} <3 x float> @llvm.[[TARGET]].lerp.v3f32(<3 x float> [[CONV0]], <3 x float> [[CONV1]], <3 x float> [[CONV2]])  | 
 | 121 | +// CHECK:    ret <3 x float> [[LERP]]  | 
83 | 122 | float3 test_lerp_int64_t3(int64_t3 p0) { return lerp(p0, p0, p0); }  | 
84 | 123 | 
 
  | 
85 |  | -// CHECK-LABEL: test_lerp_int64_t4  | 
86 |  | -// CHECK: %hlsl.lerp = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.[[TARGET]].lerp.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}})  | 
87 |  | -// CHECK: ret <4 x float> %hlsl.lerp  | 
 | 124 | +// CHECK: define [[FNATTRS]] <4 x float> @_Z18test_lerp_int64_t4Dv4_l(  | 
 | 125 | +// CHECK:    [[CONV0:%.*]] = sitofp <4 x i64> %{{.*}} to <4 x float>  | 
 | 126 | +// CHECK:    [[CONV1:%.*]] = sitofp <4 x i64> %{{.*}} to <4 x float>  | 
 | 127 | +// CHECK:    [[CONV2:%.*]] = sitofp <4 x i64> %{{.*}} to <4 x float>  | 
 | 128 | +// CHECK:    [[LERP:%.*]] = call {{.*}} <4 x float> @llvm.[[TARGET]].lerp.v4f32(<4 x float> [[CONV0]], <4 x float> [[CONV1]], <4 x float> [[CONV2]])  | 
 | 129 | +// CHECK:    ret <4 x float> [[LERP]]  | 
88 | 130 | float4 test_lerp_int64_t4(int64_t4 p0) { return lerp(p0, p0, p0); }  | 
89 | 131 | 
 
  | 
90 |  | -// CHECK-LABEL: test_lerp_uint64_t  | 
91 |  | -// CHECK: %hlsl.lerp = call reassoc nnan ninf nsz arcp afn float @llvm.[[TARGET]].lerp.f32(float %{{.*}}, float %{{.*}}, float %{{.*}})  | 
92 |  | -// CHECK: ret float %hlsl.lerp  | 
 | 132 | +// CHECK: define [[FNATTRS]] float @_Z18test_lerp_uint64_tm(  | 
 | 133 | +// CHECK:    [[CONV0:%.*]] = uitofp i64 %{{.*}} to float  | 
 | 134 | +// CHECK:    [[CONV1:%.*]] = uitofp i64 %{{.*}} to float  | 
 | 135 | +// CHECK:    [[CONV2:%.*]] = uitofp i64 %{{.*}} to float  | 
 | 136 | +// CHECK:    [[LERP:%.*]] = call {{.*}} float @llvm.[[TARGET]].lerp.f32(float [[CONV0]], float [[CONV1]], float [[CONV2]])  | 
 | 137 | +// CHECK:    ret float [[LERP]]  | 
93 | 138 | float test_lerp_uint64_t(uint64_t p0) { return lerp(p0, p0, p0); }  | 
94 | 139 | 
 
  | 
95 |  | -// CHECK-LABEL: test_lerp_uint64_t2  | 
96 |  | -// CHECK: %hlsl.lerp = call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.[[TARGET]].lerp.v2f32(<2 x float> %{{.*}}, <2 x float> %{{.*}}, <2 x float> %{{.*}})  | 
97 |  | -// CHECK: ret <2 x float> %hlsl.lerp  | 
 | 140 | +// CHECK: define [[FNATTRS]] <2 x float> @_Z19test_lerp_uint64_t2Dv2_m(  | 
 | 141 | +// CHECK:    [[CONV0:%.*]] = uitofp <2 x i64> %{{.*}} to <2 x float>  | 
 | 142 | +// CHECK:    [[CONV1:%.*]] = uitofp <2 x i64> %{{.*}} to <2 x float>  | 
 | 143 | +// CHECK:    [[CONV2:%.*]] = uitofp <2 x i64> %{{.*}} to <2 x float>  | 
 | 144 | +// CHECK:    [[LERP:%.*]] = call {{.*}} <2 x float> @llvm.[[TARGET]].lerp.v2f32(<2 x float> [[CONV0]], <2 x float> [[CONV1]], <2 x float> [[CONV2]])  | 
 | 145 | +// CHECK:    ret <2 x float> [[LERP]]  | 
98 | 146 | float2 test_lerp_uint64_t2(uint64_t2 p0) { return lerp(p0, p0, p0); }  | 
99 | 147 | 
 
  | 
100 |  | -// CHECK-LABEL: test_lerp_uint64_t3  | 
101 |  | -// CHECK: %hlsl.lerp = call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.[[TARGET]].lerp.v3f32(<3 x float> %{{.*}}, <3 x float> %{{.*}}, <3 x float> %{{.*}})  | 
102 |  | -// CHECK: ret <3 x float> %hlsl.lerp  | 
 | 148 | +// CHECK: define [[FNATTRS]] <3 x float> @_Z19test_lerp_uint64_t3Dv3_m(  | 
 | 149 | +// CHECK:    [[CONV0:%.*]] = uitofp <3 x i64> %{{.*}} to <3 x float>  | 
 | 150 | +// CHECK:    [[CONV1:%.*]] = uitofp <3 x i64> %{{.*}} to <3 x float>  | 
 | 151 | +// CHECK:    [[CONV2:%.*]] = uitofp <3 x i64> %{{.*}} to <3 x float>  | 
 | 152 | +// CHECK:    [[LERP:%.*]] = call {{.*}} <3 x float> @llvm.[[TARGET]].lerp.v3f32(<3 x float> [[CONV0]], <3 x float> [[CONV1]], <3 x float> [[CONV2]])  | 
 | 153 | +// CHECK:    ret <3 x float> [[LERP]]  | 
103 | 154 | float3 test_lerp_uint64_t3(uint64_t3 p0) { return lerp(p0, p0, p0); }  | 
104 | 155 | 
 
  | 
105 |  | -// CHECK-LABEL: test_lerp_uint64_t4  | 
106 |  | -// CHECK: %hlsl.lerp = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.[[TARGET]].lerp.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}})  | 
107 |  | -// CHECK: ret <4 x float> %hlsl.lerp  | 
 | 156 | +// CHECK: define [[FNATTRS]] <4 x float> @_Z19test_lerp_uint64_t4Dv4_m(  | 
 | 157 | +// CHECK:    [[CONV0:%.*]] = uitofp <4 x i64> %{{.*}} to <4 x float>  | 
 | 158 | +// CHECK:    [[CONV1:%.*]] = uitofp <4 x i64> %{{.*}} to <4 x float>  | 
 | 159 | +// CHECK:    [[CONV2:%.*]] = uitofp <4 x i64> %{{.*}} to <4 x float>  | 
 | 160 | +// CHECK:    [[LERP:%.*]] = call {{.*}} <4 x float> @llvm.[[TARGET]].lerp.v4f32(<4 x float> [[CONV0]], <4 x float> [[CONV1]], <4 x float> [[CONV2]])  | 
 | 161 | +// CHECK:    ret <4 x float> [[LERP]]  | 
108 | 162 | float4 test_lerp_uint64_t4(uint64_t4 p0) { return lerp(p0, p0, p0); }  | 
0 commit comments