Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
This change exposes the log library functions for HLSL,excluding long, int, and long long doubles. The log functions are supported for all scalar, vector, and matrix types. Long and long long double support is missing in this patch because those types don't exist in HLSL. Int is missing because the log functions only work on floating type arguments. The full documentation of the HLSL log functions are available here: https://docs.microsoft.com/en-us/windows/win32/direct3dhlsl/dx-graphics-hlsl-log https://docs.microsoft.com/en-us/windows/win32/direct3dhlsl/dx-graphics-hlsl-log2 https://docs.microsoft.com/en-us/windows/win32/direct3dhlsl/dx-graphics-hlsl-log10 Reviewed By: python3kgae Differential Revision: https://reviews.llvm.org/D144120
- Loading branch information
Showing
4 changed files
with
257 additions
and
0 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
// RUN: %clang_cc1 -std=hlsl2021 -finclude-default-header -x hlsl -triple \ | ||
// RUN: dxil-pc-shadermodel6.3-library %s -fnative-half-type \ | ||
// RUN: -emit-llvm -disable-llvm-passes -O3 -o - | FileCheck %s | ||
// RUN: %clang_cc1 -std=hlsl2021 -finclude-default-header -x hlsl -triple \ | ||
// RUN: dxil-pc-shadermodel6.3-library %s -emit-llvm -disable-llvm-passes \ | ||
// RUN: -D__HLSL_ENABLE_16_BIT -o - | FileCheck %s --check-prefix=NO_HALF | ||
|
||
// CHECK: define noundef half @ | ||
// CHECK: call half @llvm.log.f16( | ||
// NO_HALF: define noundef float @"?test_log_half@@YA$halff@$halff@@Z"( | ||
// NO_HALF: call float @llvm.log.f32( | ||
half test_log_half ( half p0 ) { | ||
return log ( p0 ); | ||
} | ||
// CHECK: define noundef <2 x half> @ | ||
// CHECK: call <2 x half> @llvm.log.v2f16 | ||
// NO_HALF: define noundef <2 x float> @"?test_log_float2@@YAT?$__vector@M$01@__clang@@T12@@Z"( | ||
// NO_HALF: call <2 x float> @llvm.log.v2f32( | ||
half2 test_log_half2 ( half2 p0 ) { | ||
return log ( p0 ); | ||
} | ||
// CHECK: define noundef <3 x half> @ | ||
// CHECK: call <3 x half> @llvm.log.v3f16 | ||
// NO_HALF: define noundef <3 x float> @"?test_log_float3@@YAT?$__vector@M$02@__clang@@T12@@Z"( | ||
// NO_HALF: call <3 x float> @llvm.log.v3f32( | ||
half3 test_log_half3 ( half3 p0 ) { | ||
return log ( p0 ); | ||
} | ||
// CHECK: define noundef <4 x half> @ | ||
// CHECK: call <4 x half> @llvm.log.v4f16 | ||
// NO_HALF: define noundef <4 x float> @"?test_log_float4@@YAT?$__vector@M$03@__clang@@T12@@Z"( | ||
// NO_HALF: call <4 x float> @llvm.log.v4f32( | ||
half4 test_log_half4 ( half4 p0 ) { | ||
return log ( p0 ); | ||
} | ||
|
||
// CHECK: define noundef float @ | ||
// CHECK: call float @llvm.log.f32( | ||
float test_log_float ( float p0 ) { | ||
return log ( p0 ); | ||
} | ||
// CHECK: define noundef <2 x float> @ | ||
// CHECK: call <2 x float> @llvm.log.v2f32 | ||
float2 test_log_float2 ( float2 p0 ) { | ||
return log ( p0 ); | ||
} | ||
// CHECK: define noundef <3 x float> @ | ||
// CHECK: call <3 x float> @llvm.log.v3f32 | ||
float3 test_log_float3 ( float3 p0 ) { | ||
return log ( p0 ); | ||
} | ||
// CHECK: define noundef <4 x float> @ | ||
// CHECK: call <4 x float> @llvm.log.v4f32 | ||
float4 test_log_float4 ( float4 p0 ) { | ||
return log ( p0 ); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
// RUN: %clang_cc1 -std=hlsl2021 -finclude-default-header -x hlsl -triple \ | ||
// RUN: dxil-pc-shadermodel6.3-library %s -fnative-half-type \ | ||
// RUN: -emit-llvm -disable-llvm-passes -O3 -o - | FileCheck %s | ||
// RUN: %clang_cc1 -std=hlsl2021 -finclude-default-header -x hlsl -triple \ | ||
// RUN: dxil-pc-shadermodel6.3-library %s -emit-llvm -disable-llvm-passes \ | ||
// RUN: -D__HLSL_ENABLE_16_BIT -o - | FileCheck %s --check-prefix=NO_HALF | ||
|
||
// CHECK: define noundef half @ | ||
// CHECK: call half @llvm.log10.f16( | ||
// NO_HALF: define noundef float @"?test_log10_half@@YA$halff@$halff@@Z"( | ||
// NO_HALF: call float @llvm.log10.f32( | ||
half test_log10_half ( half p0 ) { | ||
return log10 ( p0 ); | ||
} | ||
// CHECK: define noundef <2 x half> @ | ||
// CHECK: call <2 x half> @llvm.log10.v2f16 | ||
// NO_HALF: define noundef <2 x float> @"?test_log10_float2@@YAT?$__vector@M$01@__clang@@T12@@Z"( | ||
// NO_HALF: call <2 x float> @llvm.log10.v2f32( | ||
half2 test_log10_half2 ( half2 p0 ) { | ||
return log10 ( p0 ); | ||
} | ||
// CHECK: define noundef <3 x half> @ | ||
// CHECK: call <3 x half> @llvm.log10.v3f16 | ||
// NO_HALF: define noundef <3 x float> @"?test_log10_float3@@YAT?$__vector@M$02@__clang@@T12@@Z"( | ||
// NO_HALF: call <3 x float> @llvm.log10.v3f32( | ||
half3 test_log10_half3 ( half3 p0 ) { | ||
return log10 ( p0 ); | ||
} | ||
// CHECK: define noundef <4 x half> @ | ||
// CHECK: call <4 x half> @llvm.log10.v4f16 | ||
// NO_HALF: define noundef <4 x float> @"?test_log10_float4@@YAT?$__vector@M$03@__clang@@T12@@Z"( | ||
// NO_HALF: call <4 x float> @llvm.log10.v4f32( | ||
half4 test_log10_half4 ( half4 p0 ) { | ||
return log10 ( p0 ); | ||
} | ||
|
||
// CHECK: define noundef float @ | ||
// CHECK: call float @llvm.log10.f32( | ||
float test_log10_float ( float p0 ) { | ||
return log10 ( p0 ); | ||
} | ||
// CHECK: define noundef <2 x float> @ | ||
// CHECK: call <2 x float> @llvm.log10.v2f32 | ||
float2 test_log10_float2 ( float2 p0 ) { | ||
return log10 ( p0 ); | ||
} | ||
// CHECK: define noundef <3 x float> @ | ||
// CHECK: call <3 x float> @llvm.log10.v3f32 | ||
float3 test_log10_float3 ( float3 p0 ) { | ||
return log10 ( p0 ); | ||
} | ||
// CHECK: define noundef <4 x float> @ | ||
// CHECK: call <4 x float> @llvm.log10.v4f32 | ||
float4 test_log10_float4 ( float4 p0 ) { | ||
return log10 ( p0 ); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
// RUN: %clang_cc1 -std=hlsl2021 -finclude-default-header -x hlsl -triple \ | ||
// RUN: dxil-pc-shadermodel6.3-library %s -fnative-half-type \ | ||
// RUN: -emit-llvm -disable-llvm-passes -O3 -o - | FileCheck %s | ||
// RUN: %clang_cc1 -std=hlsl2021 -finclude-default-header -x hlsl -triple \ | ||
// RUN: dxil-pc-shadermodel6.3-library %s -emit-llvm -disable-llvm-passes \ | ||
// RUN: -D__HLSL_ENABLE_16_BIT -o - | FileCheck %s --check-prefix=NO_HALF | ||
|
||
// CHECK: define noundef half @ | ||
// CHECK: call half @llvm.log2.f16( | ||
// NO_HALF: define noundef float @"?test_log2_half@@YA$halff@$halff@@Z"( | ||
// NO_HALF: call float @llvm.log2.f32( | ||
half test_log2_half ( half p0 ) { | ||
return log2 ( p0 ); | ||
} | ||
// CHECK: define noundef <2 x half> @ | ||
// CHECK: call <2 x half> @llvm.log2.v2f16 | ||
// NO_HALF: define noundef <2 x float> @"?test_log2_float2@@YAT?$__vector@M$01@__clang@@T12@@Z"( | ||
// NO_HALF: call <2 x float> @llvm.log2.v2f32( | ||
half2 test_log2_half2 ( half2 p0 ) { | ||
return log2 ( p0 ); | ||
} | ||
// CHECK: define noundef <3 x half> @ | ||
// CHECK: call <3 x half> @llvm.log2.v3f16 | ||
// NO_HALF: define noundef <3 x float> @"?test_log2_float3@@YAT?$__vector@M$02@__clang@@T12@@Z"( | ||
// NO_HALF: call <3 x float> @llvm.log2.v3f32( | ||
half3 test_log2_half3 ( half3 p0 ) { | ||
return log2 ( p0 ); | ||
} | ||
// CHECK: define noundef <4 x half> @ | ||
// CHECK: call <4 x half> @llvm.log2.v4f16 | ||
// NO_HALF: define noundef <4 x float> @"?test_log2_float4@@YAT?$__vector@M$03@__clang@@T12@@Z"( | ||
// NO_HALF: call <4 x float> @llvm.log2.v4f32( | ||
half4 test_log2_half4 ( half4 p0 ) { | ||
return log2 ( p0 ); | ||
} | ||
|
||
// CHECK: define noundef float @ | ||
// CHECK: call float @llvm.log2.f32( | ||
float test_log2_float ( float p0 ) { | ||
return log2 ( p0 ); | ||
} | ||
// CHECK: define noundef <2 x float> @ | ||
// CHECK: call <2 x float> @llvm.log2.v2f32 | ||
float2 test_log2_float2 ( float2 p0 ) { | ||
return log2 ( p0 ); | ||
} | ||
// CHECK: define noundef <3 x float> @ | ||
// CHECK: call <3 x float> @llvm.log2.v3f32 | ||
float3 test_log2_float3 ( float3 p0 ) { | ||
return log2 ( p0 ); | ||
} | ||
// CHECK: define noundef <4 x float> @ | ||
// CHECK: call <4 x float> @llvm.log2.v4f32 | ||
float4 test_log2_float4 ( float4 p0 ) { | ||
return log2 ( p0 ); | ||
} |