| 
 | 1 | +// DirectX target:  | 
 | 2 | +//  | 
 | 3 | +// ---------- Native Half support test -----------  | 
 | 4 | +//  | 
 | 5 | +// RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \  | 
 | 6 | +// RUN:   dxil-pc-shadermodel6.3-library %s -fnative-half-type \  | 
 | 7 | +// RUN:   -emit-llvm -disable-llvm-passes -o - | FileCheck %s \  | 
 | 8 | +// RUN:   -DFNATTRS=noundef -DTYPE=half  | 
 | 9 | + | 
 | 10 | +//  | 
 | 11 | +// ---------- No Native Half support test -----------  | 
 | 12 | +//  | 
 | 13 | +// RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \  | 
 | 14 | +// RUN:   dxil-pc-shadermodel6.3-library %s -emit-llvm -disable-llvm-passes \  | 
 | 15 | +// RUN:   -o - | FileCheck %s \  | 
 | 16 | +// RUN:   -DFNATTRS=noundef -DTYPE=float  | 
 | 17 | + | 
 | 18 | + | 
 | 19 | +// Spirv target:  | 
 | 20 | +//  | 
 | 21 | +// ---------- Native Half support test -----------  | 
 | 22 | +//  | 
 | 23 | +// RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \  | 
 | 24 | +// RUN:   spirv-unknown-vulkan-compute %s -fnative-half-type \  | 
 | 25 | +// RUN:   -emit-llvm -disable-llvm-passes -o - | FileCheck %s \  | 
 | 26 | +// RUN:   -DFNATTRS="spir_func noundef" -DTYPE=half  | 
 | 27 | + | 
 | 28 | +//  | 
 | 29 | +// ---------- No Native Half support test -----------  | 
 | 30 | +//  | 
 | 31 | +// RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \  | 
 | 32 | +// RUN:   spirv-unknown-vulkan-compute %s -emit-llvm -disable-llvm-passes \  | 
 | 33 | +// RUN:   -o - | FileCheck %s \  | 
 | 34 | +// RUN:   -DFNATTRS="spir_func noundef" -DTYPE=float  | 
 | 35 | + | 
 | 36 | + | 
 | 37 | + | 
 | 38 | +// CHECK: define [[FNATTRS]] [[TYPE]] @  | 
 | 39 | +// CHECK: %fmod = frem [[TYPE]]  | 
 | 40 | +// CHECK: ret [[TYPE]] %fmod  | 
 | 41 | +half test_fmod_half(half p0, half p1) { return fmod(p0, p1); }  | 
 | 42 | + | 
 | 43 | +// CHECK: define [[FNATTRS]] <2 x [[TYPE]]> @  | 
 | 44 | +// CHECK: %fmod = frem <2 x [[TYPE]]>  | 
 | 45 | +// CHECK: ret <2 x [[TYPE]]> %fmod  | 
 | 46 | +half2 test_fmod_half2(half2 p0, half2 p1) { return fmod(p0, p1); }  | 
 | 47 | + | 
 | 48 | +// CHECK: define [[FNATTRS]] <3 x [[TYPE]]> @  | 
 | 49 | +// CHECK: %fmod = frem <3 x [[TYPE]]>  | 
 | 50 | +// CHECK: ret <3 x [[TYPE]]> %fmod  | 
 | 51 | +half3 test_fmod_half3(half3 p0, half3 p1) { return fmod(p0, p1); }  | 
 | 52 | + | 
 | 53 | +// CHECK: define [[FNATTRS]] <4 x [[TYPE]]> @  | 
 | 54 | +// CHECK: %fmod = frem <4 x [[TYPE]]>  | 
 | 55 | +// CHECK: ret <4 x [[TYPE]]> %fmod  | 
 | 56 | +half4 test_fmod_half4(half4 p0, half4 p1) { return fmod(p0, p1); }  | 
 | 57 | + | 
 | 58 | +// CHECK: define [[FNATTRS]] float @  | 
 | 59 | +// CHECK: %fmod = frem float  | 
 | 60 | +// CHECK: ret float %fmod  | 
 | 61 | +float test_fmod_float(float p0, float p1) { return fmod(p0, p1); }  | 
 | 62 | + | 
 | 63 | +// CHECK: define [[FNATTRS]] <2 x float> @  | 
 | 64 | +// CHECK: %fmod = frem <2 x float>  | 
 | 65 | +// CHECK: ret <2 x float> %fmod  | 
 | 66 | +float2 test_fmod_float2(float2 p0, float2 p1) { return fmod(p0, p1); }  | 
 | 67 | + | 
 | 68 | +// CHECK: define [[FNATTRS]] <3 x float> @  | 
 | 69 | +// CHECK: %fmod = frem <3 x float>  | 
 | 70 | +// CHECK: ret <3 x float> %fmod  | 
 | 71 | +float3 test_fmod_float3(float3 p0, float3 p1) { return fmod(p0, p1); }  | 
 | 72 | + | 
 | 73 | +// CHECK: define [[FNATTRS]] <4 x float> @  | 
 | 74 | +// CHECK: %fmod = frem <4 x float>  | 
 | 75 | +// CHECK: ret <4 x float> %fmod  | 
 | 76 | +float4 test_fmod_float4(float4 p0, float4 p1) { return fmod(p0, p1); }  | 
 | 77 | + | 
0 commit comments