forked from llvm/llvm-project
-
Notifications
You must be signed in to change notification settings - Fork 55
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
This PR is implementing `asfloat` for HLSL. Fixes: llvm#70098 Co-authored-by: Joao Saffran <[email protected]>
- Loading branch information
1 parent
e5271fe
commit 1bfc3d0
Showing
3 changed files
with
92 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,40 @@ | ||
// RUN: %clang_cc1 -finclude-default-header -x hlsl -triple dxil-pc-shadermodel6.3-library %s -fnative-half-type -emit-llvm -O1 -o - | FileCheck %s | ||
|
||
// CHECK: define {{.*}}test_uint{{.*}}(i32 {{.*}} [[VAL:%.*]]){{.*}} | ||
// CHECK: bitcast i32 [[VAL]] to float | ||
float test_uint(uint p0) { | ||
return asfloat(p0); | ||
} | ||
|
||
// CHECK: define {{.*}}test_int{{.*}}(i32 {{.*}} [[VAL:%.*]]){{.*}} | ||
// CHECK: bitcast i32 [[VAL]] to float | ||
float test_int(int p0) { | ||
return asfloat(p0); | ||
} | ||
|
||
// CHECK: define {{.*}}test_float{{.*}}(float {{.*}} [[VAL:%.*]]){{.*}} | ||
// CHECK-NOT: bitcast | ||
// CHECK: ret float [[VAL]] | ||
float test_float(float p0) { | ||
return asfloat(p0); | ||
} | ||
|
||
// CHECK: define {{.*}}test_vector_uint{{.*}}(<4 x i32> {{.*}} [[VAL:%.*]]){{.*}} | ||
// CHECK: bitcast <4 x i32> [[VAL]] to <4 x float> | ||
|
||
float4 test_vector_uint(uint4 p0) { | ||
return asfloat(p0); | ||
} | ||
|
||
// CHECK: define {{.*}}test_vector_int{{.*}}(<4 x i32> {{.*}} [[VAL:%.*]]){{.*}} | ||
// CHECK: bitcast <4 x i32> [[VAL]] to <4 x float> | ||
float4 test_vector_int(int4 p0) { | ||
return asfloat(p0); | ||
} | ||
|
||
// CHECK: define {{.*}}test_vector_float{{.*}}(<4 x float> {{.*}} [[VAL:%.*]]){{.*}} | ||
// CHECK-NOT: bitcast | ||
// CHECK: ret <4 x float> [[VAL]] | ||
float4 test_vector_float(float4 p0) { | ||
return asfloat(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,35 @@ | ||
// RUN: %clang_cc1 -finclude-default-header -triple dxil-pc-shadermodel6.6-library %s -fnative-half-type -verify | ||
|
||
|
||
float4 test_float_too_many_arg(float p0, float p1) { | ||
return asfloat(p0, p1); | ||
// expected-error@-1 {{no matching function for call to 'asfloat'}} | ||
// expected-note@hlsl/hlsl_intrinsics.h:* {{candidate function template not viable: requires single argument 'V', but 2 arguments were provided}} | ||
// expected-note@hlsl/hlsl_intrinsics.h:* {{candidate function template not viable: requires single argument 'F', but 2 arguments were provided}} | ||
} | ||
|
||
|
||
float test_float_double(double p1) { | ||
return asfloat(p1); | ||
// expected-error@hlsl/hlsl_intrinsics.h:* {{no matching function for call to 'bit_cast'}} | ||
// expected-note@-2 {{in instantiation of function template specialization 'hlsl::asfloat<double>'}} | ||
// expected-note@hlsl/hlsl_detail.h:* {{candidate template ignored: could not match 'vector<double, N>' against 'double'}} | ||
// expected-note@hlsl/hlsl_detail.h:* {{candidate template ignored: substitution failure [with U = float, T = double]: no type named 'Type'}} | ||
} | ||
|
||
float test_float_half(half p1) { | ||
return asfloat(p1); | ||
// expected-error@hlsl/hlsl_intrinsics.h:* {{no matching function for call to 'bit_cast'}} | ||
// expected-note@-2 {{in instantiation of function template specialization 'hlsl::asfloat<half>'}} | ||
// expected-note@hlsl/hlsl_detail.h:* {{candidate template ignored: could not match 'vector<half, N>' against 'half'}} | ||
// expected-note@hlsl/hlsl_detail.h:* {{candidate template ignored: substitution failure [with U = float, T = half]: no type named 'Type'}} | ||
} | ||
|
||
|
||
float test_float_half(bool p1) { | ||
return asfloat(p1); | ||
// expected-error@hlsl/hlsl_intrinsics.h:* {{no matching function for call to 'bit_cast'}} | ||
// expected-note@-2 {{in instantiation of function template specialization 'hlsl::asfloat<bool>'}} | ||
// expected-note@hlsl/hlsl_detail.h:* {{candidate template ignored: could not match 'vector<bool, N>' against 'bool'}} | ||
// expected-note@hlsl/hlsl_detail.h:* {{candidate template ignored: substitution failure [with U = float, T = bool]: no type named 'Type'}} | ||
} |