================ @@ -0,0 +1,229 @@ +// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-library -fnative-half-type -finclude-default-header -Wconversion -verify -o - %s +// RUN: %clang_cc1 -triple dxil-pc-shadermodel6.3-library -fnative-half-type -finclude-default-header -ast-dump %s | FileCheck %s + +// This test verifies floating point type implicit conversion ranks for overload +// resolution. In HLSL the built-in type ranks are half < float < double. This +// applies to both scalar and vector types. + +// HLSL allows implicit truncation fo types, so it differentiates between +// promotions (converting to larger types) and conversions (converting to +// smaller types). Promotions are preferred over conversions. Promotions prefer +// promoting to the next lowest type in the ranking order. Conversions prefer +// converting to the next highest type in the ranking order. + +void HalfFloatDouble(double D); +void HalfFloatDouble(float F); +void HalfFloatDouble(half H); + +// CHECK: FunctionDecl {{.*}} used HalfFloatDouble 'void (double)' +// CHECK: FunctionDecl {{.*}} used HalfFloatDouble 'void (float)' +// CHECK: FunctionDecl {{.*}} used HalfFloatDouble 'void (half)' + +void FloatDouble(double D); +void FloatDouble(float F); + +// CHECK: FunctionDecl {{.*}} used FloatDouble 'void (double)' +// CHECK: FunctionDecl {{.*}} used FloatDouble 'void (float)' + +void HalfDouble(double D); +void HalfDouble(half H); + +// CHECK: FunctionDecl {{.*}} used HalfDouble 'void (double)' +// CHECK: FunctionDecl {{.*}} used HalfDouble 'void (half)' + +void HalfFloat(float F); +void HalfFloat(half H); + +// CHECK: FunctionDecl {{.*}} used HalfFloat 'void (float)' +// CHECK: FunctionDecl {{.*}} used HalfFloat 'void (half)' + +void Double(double D); +void Float(float F); +void Half(half H); + +// CHECK: FunctionDecl {{.*}} used Double 'void (double)' +// CHECK: FunctionDecl {{.*}} used Float 'void (float)' +// CHECK: FunctionDecl {{.*}} used Half 'void (half)' + + +// Case 1: A function declared with overloads for half float and double types. +// (a) When called with half, it will resolve to half because half is an exact +// match. +// (b) When called with float it will resolve to float because float is an +// exact match. +// (c) When called with double it will resolve to double because it is an +// exact match. + +// CHECK: FunctionDecl {{.*}} Case1 'void (half, float, double)' ---------------- llvm-beanz wrote:
Yea, I wasn't relying on any match variables, which is what I usually use `CHECK-LABEL` for, but it could result in better output on error. I'll make that update. https://github.com/llvm/llvm-project/pull/90222 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits