From 762f1b17b2815ccdfb4e5cb5412cb6210db92f73 Mon Sep 17 00:00:00 2001 From: Sarah Spall Date: Thu, 9 Jan 2025 08:00:05 -0800 Subject: [PATCH] [HLSL] Make fast math the default for HLSL (#119820) Make fast math the default for HLSL Repair test cases broken by this change. Closes #108597 --- clang/include/clang/Driver/Options.td | 2 +- clang/test/CodeGenHLSL/ArrayTemporary.hlsl | 4 +- .../BasicFeatures/OutputArguments.hlsl | 4 +- .../standard_conversion_sequences.hlsl | 6 +- .../CodeGenHLSL/builtins/ScalarSwizzles.hlsl | 2 +- .../StructuredBuffers-methods-lib.hlsl | 6 +- .../StructuredBuffers-methods-ps.hlsl | 2 +- .../CodeGenHLSL/builtins/WaveReadLaneAt.hlsl | 12 +-- clang/test/CodeGenHLSL/builtins/abs.hlsl | 64 ++++++------- clang/test/CodeGenHLSL/builtins/acos.hlsl | 24 ++--- clang/test/CodeGenHLSL/builtins/asdouble.hlsl | 4 +- clang/test/CodeGenHLSL/builtins/asin.hlsl | 24 ++--- clang/test/CodeGenHLSL/builtins/atan.hlsl | 24 ++--- clang/test/CodeGenHLSL/builtins/atan2.hlsl | 24 ++--- clang/test/CodeGenHLSL/builtins/ceil.hlsl | 48 +++++----- clang/test/CodeGenHLSL/builtins/clamp.hlsl | 72 +++++++------- clang/test/CodeGenHLSL/builtins/clip.hlsl | 8 +- clang/test/CodeGenHLSL/builtins/cos.hlsl | 48 +++++----- clang/test/CodeGenHLSL/builtins/cosh.hlsl | 24 ++--- clang/test/CodeGenHLSL/builtins/cross.hlsl | 14 +-- clang/test/CodeGenHLSL/builtins/degrees.hlsl | 32 +++---- .../CodeGenHLSL/builtins/dot-builtin.hlsl | 16 ++-- clang/test/CodeGenHLSL/builtins/dot.hlsl | 26 ++--- clang/test/CodeGenHLSL/builtins/exp.hlsl | 48 +++++----- clang/test/CodeGenHLSL/builtins/exp2.hlsl | 48 +++++----- clang/test/CodeGenHLSL/builtins/floor.hlsl | 48 +++++----- clang/test/CodeGenHLSL/builtins/fmod.hlsl | 24 ++--- clang/test/CodeGenHLSL/builtins/frac.hlsl | 32 +++---- clang/test/CodeGenHLSL/builtins/length.hlsl | 40 ++++---- .../CodeGenHLSL/builtins/lerp-builtin.hlsl | 4 +- clang/test/CodeGenHLSL/builtins/lerp.hlsl | 32 +++---- clang/test/CodeGenHLSL/builtins/log.hlsl | 48 +++++----- clang/test/CodeGenHLSL/builtins/log10.hlsl | 48 +++++----- clang/test/CodeGenHLSL/builtins/log2.hlsl | 48 +++++----- clang/test/CodeGenHLSL/builtins/mad.hlsl | 32 +++---- clang/test/CodeGenHLSL/builtins/max.hlsl | 64 ++++++------- clang/test/CodeGenHLSL/builtins/min.hlsl | 64 ++++++------- .../test/CodeGenHLSL/builtins/normalize.hlsl | 32 +++---- clang/test/CodeGenHLSL/builtins/pow.hlsl | 48 +++++----- clang/test/CodeGenHLSL/builtins/radians.hlsl | 32 +++---- clang/test/CodeGenHLSL/builtins/rcp.hlsl | 96 +++++++++---------- clang/test/CodeGenHLSL/builtins/round.hlsl | 48 +++++----- clang/test/CodeGenHLSL/builtins/rsqrt.hlsl | 32 +++---- clang/test/CodeGenHLSL/builtins/saturate.hlsl | 32 +++---- clang/test/CodeGenHLSL/builtins/sin.hlsl | 48 +++++----- clang/test/CodeGenHLSL/builtins/sinh.hlsl | 24 ++--- clang/test/CodeGenHLSL/builtins/sqrt.hlsl | 48 +++++----- clang/test/CodeGenHLSL/builtins/step.hlsl | 32 +++---- clang/test/CodeGenHLSL/builtins/tan.hlsl | 24 ++--- clang/test/CodeGenHLSL/builtins/tanh.hlsl | 24 ++--- clang/test/CodeGenHLSL/builtins/trunc.hlsl | 48 +++++----- clang/test/CodeGenHLSL/float3.hlsl | 2 +- clang/test/CodeGenHLSL/this-reference.hlsl | 2 +- 53 files changed, 821 insertions(+), 821 deletions(-) diff --git a/clang/include/clang/Driver/Options.td b/clang/include/clang/Driver/Options.td index 52823430919de4..eb860f73121fd7 100644 --- a/clang/include/clang/Driver/Options.td +++ b/clang/include/clang/Driver/Options.td @@ -2285,7 +2285,7 @@ def ffp_exception_behavior_EQ : Joined<["-"], "ffp-exception-behavior=">, Group< NormalizedValues<["FPE_Ignore", "FPE_MayTrap", "FPE_Strict"]>, MarshallingInfoEnum, "FPE_Default">; defm fast_math : BoolFOption<"fast-math", - LangOpts<"FastMath">, DefaultFalse, + LangOpts<"FastMath">, Default, PosFlag, diff --git a/clang/test/CodeGenHLSL/ArrayTemporary.hlsl b/clang/test/CodeGenHLSL/ArrayTemporary.hlsl index 7d77c0aff736cc..e5db7eac37a428 100644 --- a/clang/test/CodeGenHLSL/ArrayTemporary.hlsl +++ b/clang/test/CodeGenHLSL/ArrayTemporary.hlsl @@ -90,11 +90,11 @@ void template_call(float FA2[2], float FA4[4], int IA3[3]) { // CHECK: [[Addr:%.*]] = getelementptr inbounds [2 x float], ptr [[FA2]], i32 0, i32 0 // CHECK: [[Tmp:%.*]] = load float, ptr [[Addr]] -// CHECK: call void @_Z11template_fnIfEvT_(float noundef [[Tmp]]) +// CHECK: call void @_Z11template_fnIfEvT_(float noundef nofpclass(nan inf) [[Tmp]]) // CHECK: [[Idx0:%.*]] = getelementptr inbounds [2 x float], ptr [[FA2]], i32 0, i32 0 // CHECK: [[Val0:%.*]] = load float, ptr [[Idx0]] -// CHECK: [[Sum:%.*]] = fadd float [[Val0]], 5.000000e+00 +// CHECK: [[Sum:%.*]] = fadd reassoc nnan ninf nsz arcp afn float [[Val0]], 5.000000e+00 // CHECK: [[Idx1:%.*]] = getelementptr inbounds [2 x float], ptr [[FA2]], i32 0, i32 1 // CHECK: store float [[Sum]], ptr [[Idx1]] diff --git a/clang/test/CodeGenHLSL/BasicFeatures/OutputArguments.hlsl b/clang/test/CodeGenHLSL/BasicFeatures/OutputArguments.hlsl index 6afead4f233660..289bbb959e8a40 100644 --- a/clang/test/CodeGenHLSL/BasicFeatures/OutputArguments.hlsl +++ b/clang/test/CodeGenHLSL/BasicFeatures/OutputArguments.hlsl @@ -9,7 +9,7 @@ // CHECK: define void {{.*}}trunc_Param{{.*}}(ptr noalias noundef nonnull align 4 dereferenceable(4) {{%.*}}) void trunc_Param(inout int X) {} -// ALL-LABEL: define noundef float {{.*}}case1 +// ALL-LABEL: define noundef nofpclass(nan inf) float {{.*}}case1 // CHECK: [[F:%.*]] = alloca float // CHECK: [[ArgTmp:%.*]] = alloca i32 // CHECK: [[FVal:%.*]] = load float, ptr {{.*}} @@ -197,7 +197,7 @@ export int case7() { // CHECK: define void {{.*}}trunc_vec{{.*}}(ptr noalias noundef nonnull align 16 dereferenceable(16) {{%.*}}) void trunc_vec(inout int3 V) {} -// ALL-LABEL: define noundef <3 x float> {{.*}}case8 +// ALL-LABEL: define noundef nofpclass(nan inf) <3 x float> {{.*}}case8 // CHECK: [[V:%.*]] = alloca <3 x float> // CHECK: [[Tmp:%.*]] = alloca <3 x i32> diff --git a/clang/test/CodeGenHLSL/BasicFeatures/standard_conversion_sequences.hlsl b/clang/test/CodeGenHLSL/BasicFeatures/standard_conversion_sequences.hlsl index dd7dfd17697037..1665a0260ab054 100644 --- a/clang/test/CodeGenHLSL/BasicFeatures/standard_conversion_sequences.hlsl +++ b/clang/test/CodeGenHLSL/BasicFeatures/standard_conversion_sequences.hlsl @@ -6,7 +6,7 @@ // CHECK: store <3 x float> splat (float 1.000000e+00), ptr [[f3]] // CHECK: [[vecf3:%.*]] = load <3 x float>, ptr [[f3]] // CHECK: [[vecf4:%.*]] = shufflevector <3 x float> [[vecf3]], <3 x float> poison, <4 x i32> -// CHECK: [[vecd4:%.*]] = fpext <4 x float> [[vecf4]] to <4 x double> +// CHECK: [[vecd4:%.*]] = fpext reassoc nnan ninf nsz arcp afn <4 x float> [[vecf4]] to <4 x double> // CHECK: store <4 x double> [[vecd4]], ptr [[d4]] void f3_to_d4() { vector f3 = 1.0; @@ -30,7 +30,7 @@ void f3_to_f2() { // CHECK: [[f2:%.*]] = alloca <2 x float> // CHECK: store <4 x double> splat (double 3.000000e+00), ptr [[d4]] // CHECK: [[vecd4:%.*]] = load <4 x double>, ptr [[d4]] -// CHECK: [[vecf4:%.*]] = fptrunc <4 x double> [[vecd4]] to <4 x float> +// CHECK: [[vecf4:%.*]] = fptrunc reassoc nnan ninf nsz arcp afn <4 x double> [[vecd4]] to <4 x float> // CHECK: [[vecf2:%.*]] = shufflevector <4 x float> [[vecf4]], <4 x float> poison, <2 x i32> // CHECK: store <2 x float> [[vecf2]], ptr [[f2]] void d4_to_f2() { @@ -108,7 +108,7 @@ void i2_to_b2() { // CHECK: [[b2:%.*]] = alloca i8 // CHECK: store <4 x double> splat (double 9.000000e+00), ptr [[d4]] // CHECK: [[vecd4:%.*]] = load <4 x double>, ptr [[d4]] -// CHECK: [[vecb4:%.*]] = fcmp une <4 x double> [[vecd4]], zeroinitializer +// CHECK: [[vecb4:%.*]] = fcmp reassoc nnan ninf nsz arcp afn une <4 x double> [[vecd4]], zeroinitializer // CHECK: [[vecd2:%.*]] = shufflevector <4 x i1> [[vecb4]], <4 x i1> poison, <2 x i32> // CHECK: [[vecb8:%.*]] = shufflevector <2 x i1> [[vecd2]], <2 x i1> poison, <8 x i32> // CHECK: [[i8:%.*]] = bitcast <8 x i1> [[vecb8]] to i8 diff --git a/clang/test/CodeGenHLSL/builtins/ScalarSwizzles.hlsl b/clang/test/CodeGenHLSL/builtins/ScalarSwizzles.hlsl index 94a95107eea69c..97711c9ee25a10 100644 --- a/clang/test/CodeGenHLSL/builtins/ScalarSwizzles.hlsl +++ b/clang/test/CodeGenHLSL/builtins/ScalarSwizzles.hlsl @@ -119,7 +119,7 @@ float2 HowManyFloats(float V) { // CHECK: store <1 x double> splat (double 1.000000e+00), ptr [[Tmp]], align 8 // CHECK: [[vec1:%.*]] = load <1 x double>, ptr [[Tmp]], align 8 // CHECK: [[vec3:%.*]] = shufflevector <1 x double> [[vec1]], <1 x double> poison, <3 x i32> zeroinitializer -// CHECK: [[vec3f:%.*]] = fptrunc <3 x double> [[vec3]] to <3 x float> +// CHECK: [[vec3f:%.*]] = fptrunc reassoc nnan ninf nsz arcp afn <3 x double> [[vec3]] to <3 x float> // CHECK: ret <3 x float> [[vec3f]] float3 AllRighty() { diff --git a/clang/test/CodeGenHLSL/builtins/StructuredBuffers-methods-lib.hlsl b/clang/test/CodeGenHLSL/builtins/StructuredBuffers-methods-lib.hlsl index 383f591f676d91..93aa218f63ecf5 100644 --- a/clang/test/CodeGenHLSL/builtins/StructuredBuffers-methods-lib.hlsl +++ b/clang/test/CodeGenHLSL/builtins/StructuredBuffers-methods-lib.hlsl @@ -33,7 +33,7 @@ export void TestAppend(float value) { ASB.Append(value); } -// CHECK: define void @_Z10TestAppendf(float noundef %value) +// CHECK: define void @_Z10TestAppendf(float noundef nofpclass(nan inf) %value) // CHECK-DXIL: %[[VALUE:.*]] = load float, ptr %value.addr, align 4 // CHECK-DXIL: %[[INDEX:.*]] = call i32 @llvm.dx.resource.updatecounter.tdx.RawBuffer_f32_1_0t(target("dx.RawBuffer", float, 1, 0) %{{[0-9]+}}, i8 1) // CHECK-DXIL: %[[RESPTR:.*]] = call ptr @llvm.dx.resource.getpointer.p0.tdx.RawBuffer_f32_1_0t(target("dx.RawBuffer", float, 1, 0) %{{[0-9]+}}, i32 %[[INDEX]]) @@ -43,7 +43,7 @@ export float TestConsume() { return CSB.Consume(); } -// CHECK: define noundef float @_Z11TestConsumev() +// CHECK: define noundef nofpclass(nan inf) float @_Z11TestConsumev() // CHECK-DXIL: %[[INDEX:.*]] = call i32 @llvm.dx.resource.updatecounter.tdx.RawBuffer_f32_1_0t(target("dx.RawBuffer", float, 1, 0) %1, i8 -1) // CHECK-DXIL: %[[RESPTR:.*]] = call ptr @llvm.dx.resource.getpointer.p0.tdx.RawBuffer_f32_1_0t(target("dx.RawBuffer", float, 1, 0) %0, i32 %[[INDEX]]) // CHECK-DXIL: %[[VALUE:.*]] = load float, ptr %[[RESPTR]], align 4 @@ -53,7 +53,7 @@ export float TestLoad() { return RWSB1.Load(1) + SB1.Load(2); } -// CHECK: define noundef float @_Z8TestLoadv() +// CHECK: define noundef nofpclass(nan inf) float @_Z8TestLoadv() // CHECK: %[[PTR1:.*]] = call ptr @llvm.dx.resource.getpointer.p0.tdx.RawBuffer_f32_1_0t(target("dx.RawBuffer", float, 1, 0) %{{[0-9]+}}, i32 %{{[0-9]+}}) // CHECK: %[[VALUE1:.*]] = load float, ptr %[[PTR1]] // CHECK: %[[PTR2:.*]] = call ptr @llvm.dx.resource.getpointer.p0.tdx.RawBuffer_f32_0_0t(target("dx.RawBuffer", float, 0, 0) %{{[0-9]+}}, i32 %{{[0-9]+}}) diff --git a/clang/test/CodeGenHLSL/builtins/StructuredBuffers-methods-ps.hlsl b/clang/test/CodeGenHLSL/builtins/StructuredBuffers-methods-ps.hlsl index 3d9f4f68ec7d21..5b1d8e3052eae4 100644 --- a/clang/test/CodeGenHLSL/builtins/StructuredBuffers-methods-ps.hlsl +++ b/clang/test/CodeGenHLSL/builtins/StructuredBuffers-methods-ps.hlsl @@ -28,7 +28,7 @@ export float TestLoad() { return ROSB1.Load(10); } -// CHECK: define noundef float @_Z8TestLoadv() +// CHECK: define noundef nofpclass(nan inf) float @_Z8TestLoadv() // CHECK: %[[PTR1:.*]] = call ptr @llvm.dx.resource.getpointer.p0.tdx.RawBuffer_f32_1_1t(target("dx.RawBuffer", float, 1, 1) %{{[0-9]+}}, i32 %{{[0-9]+}}) // CHECK: %[[VALUE1:.*]] = load float, ptr %[[PTR1]] diff --git a/clang/test/CodeGenHLSL/builtins/WaveReadLaneAt.hlsl b/clang/test/CodeGenHLSL/builtins/WaveReadLaneAt.hlsl index 093a199a32bdc8..d56a6af26896bf 100644 --- a/clang/test/CodeGenHLSL/builtins/WaveReadLaneAt.hlsl +++ b/clang/test/CodeGenHLSL/builtins/WaveReadLaneAt.hlsl @@ -38,8 +38,8 @@ int16_t test_int16(int16_t expr, uint idx) { // CHECK-LABEL: test_half half test_half(half expr, uint idx) { // CHECK-SPIRV: %[[#entry_tok2:]] = call token @llvm.experimental.convergence.entry() - // CHECK-SPIRV: %[[RET:.*]] = call spir_func [[TY:.*]] @llvm.spv.wave.readlane.f16([[TY]] %[[#]], i32 %[[#]]) [ "convergencectrl"(token %[[#entry_tok2]]) ] - // CHECK-DXIL: %[[RET:.*]] = call [[TY:.*]] @llvm.dx.wave.readlane.f16([[TY]] %[[#]], i32 %[[#]]) + // CHECK-SPIRV: %[[RET:.*]] = call reassoc nnan ninf nsz arcp afn spir_func [[TY:.*]] @llvm.spv.wave.readlane.f16([[TY]] %[[#]], i32 %[[#]]) [ "convergencectrl"(token %[[#entry_tok2]]) ] + // CHECK-DXIL: %[[RET:.*]] = call reassoc nnan ninf nsz arcp afn [[TY:.*]] @llvm.dx.wave.readlane.f16([[TY]] %[[#]], i32 %[[#]]) // CHECK: ret [[TY]] %[[RET]] return WaveReadLaneAt(expr, idx); } @@ -50,8 +50,8 @@ half test_half(half expr, uint idx) { // CHECK-LABEL: test_double double test_double(double expr, uint idx) { // CHECK-SPIRV: %[[#entry_tok3:]] = call token @llvm.experimental.convergence.entry() - // CHECK-SPIRV: %[[RET:.*]] = call spir_func [[TY:.*]] @llvm.spv.wave.readlane.f64([[TY]] %[[#]], i32 %[[#]]) [ "convergencectrl"(token %[[#entry_tok3]]) ] - // CHECK-DXIL: %[[RET:.*]] = call [[TY:.*]] @llvm.dx.wave.readlane.f64([[TY]] %[[#]], i32 %[[#]]) + // CHECK-SPIRV: %[[RET:.*]] = call reassoc nnan ninf nsz arcp afn spir_func [[TY:.*]] @llvm.spv.wave.readlane.f64([[TY]] %[[#]], i32 %[[#]]) [ "convergencectrl"(token %[[#entry_tok3]]) ] + // CHECK-DXIL: %[[RET:.*]] = call reassoc nnan ninf nsz arcp afn [[TY:.*]] @llvm.dx.wave.readlane.f64([[TY]] %[[#]], i32 %[[#]]) // CHECK: ret [[TY]] %[[RET]] return WaveReadLaneAt(expr, idx); } @@ -62,8 +62,8 @@ double test_double(double expr, uint idx) { // CHECK-LABEL: test_floatv4 float4 test_floatv4(float4 expr, uint idx) { // CHECK-SPIRV: %[[#entry_tok4:]] = call token @llvm.experimental.convergence.entry() - // CHECK-SPIRV: %[[RET1:.*]] = call spir_func [[TY1:.*]] @llvm.spv.wave.readlane.v4f32([[TY1]] %[[#]], i32 %[[#]]) [ "convergencectrl"(token %[[#entry_tok4]]) ] - // CHECK-DXIL: %[[RET1:.*]] = call [[TY1:.*]] @llvm.dx.wave.readlane.v4f32([[TY1]] %[[#]], i32 %[[#]]) + // CHECK-SPIRV: %[[RET1:.*]] = call reassoc nnan ninf nsz arcp afn spir_func [[TY1:.*]] @llvm.spv.wave.readlane.v4f32([[TY1]] %[[#]], i32 %[[#]]) [ "convergencectrl"(token %[[#entry_tok4]]) ] + // CHECK-DXIL: %[[RET1:.*]] = call reassoc nnan ninf nsz arcp afn [[TY1:.*]] @llvm.dx.wave.readlane.v4f32([[TY1]] %[[#]], i32 %[[#]]) // CHECK: ret [[TY1]] %[[RET1]] return WaveReadLaneAt(expr, idx); } diff --git a/clang/test/CodeGenHLSL/builtins/abs.hlsl b/clang/test/CodeGenHLSL/builtins/abs.hlsl index 912e8a28347237..a8456a715082eb 100644 --- a/clang/test/CodeGenHLSL/builtins/abs.hlsl +++ b/clang/test/CodeGenHLSL/builtins/abs.hlsl @@ -22,25 +22,25 @@ int16_t3 test_abs_int16_t3(int16_t3 p0) { return abs(p0); } int16_t4 test_abs_int16_t4(int16_t4 p0) { return abs(p0); } #endif // __HLSL_ENABLE_16_BIT -// NATIVE_HALF-LABEL: define noundef half @_Z13test_abs_half -// NATIVE_HALF: call half @llvm.fabs.f16( -// NO_HALF-LABEL: define noundef float @_Z13test_abs_half -// NO_HALF: call float @llvm.fabs.f32(float %0) +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) half @_Z13test_abs_half +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn half @llvm.fabs.f16( +// NO_HALF-LABEL: define noundef nofpclass(nan inf) float @_Z13test_abs_half +// NO_HALF: call reassoc nnan ninf nsz arcp afn float @llvm.fabs.f32(float %0) half test_abs_half(half p0) { return abs(p0); } -// NATIVE_HALF-LABEL: define noundef <2 x half> @_Z14test_abs_half2 -// NATIVE_HALF: call <2 x half> @llvm.fabs.v2f16( -// NO_HALF-LABEL: define noundef <2 x float> @_Z14test_abs_half2 -// NO_HALF: call <2 x float> @llvm.fabs.v2f32( +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) <2 x half> @_Z14test_abs_half2 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <2 x half> @llvm.fabs.v2f16( +// NO_HALF-LABEL: define noundef nofpclass(nan inf) <2 x float> @_Z14test_abs_half2 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.fabs.v2f32( half2 test_abs_half2(half2 p0) { return abs(p0); } -// NATIVE_HALF-LABEL: define noundef <3 x half> @_Z14test_abs_half3 -// NATIVE_HALF: call <3 x half> @llvm.fabs.v3f16( -// NO_HALF-LABEL: define noundef <3 x float> @_Z14test_abs_half3 -// NO_HALF: call <3 x float> @llvm.fabs.v3f32( +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) <3 x half> @_Z14test_abs_half3 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <3 x half> @llvm.fabs.v3f16( +// NO_HALF-LABEL: define noundef nofpclass(nan inf) <3 x float> @_Z14test_abs_half3 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.fabs.v3f32( half3 test_abs_half3(half3 p0) { return abs(p0); } -// NATIVE_HALF-LABEL: define noundef <4 x half> @_Z14test_abs_half4 -// NATIVE_HALF: call <4 x half> @llvm.fabs.v4f16( -// NO_HALF-LABEL: define noundef <4 x float> @_Z14test_abs_half4 -// NO_HALF: call <4 x float> @llvm.fabs.v4f32( +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) <4 x half> @_Z14test_abs_half4 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <4 x half> @llvm.fabs.v4f16( +// NO_HALF-LABEL: define noundef nofpclass(nan inf) <4 x float> @_Z14test_abs_half4 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.fabs.v4f32( half4 test_abs_half4(half4 p0) { return abs(p0); } // CHECK-LABEL: define noundef i32 @_Z12test_abs_int @@ -56,17 +56,17 @@ int3 test_abs_int3(int3 p0) { return abs(p0); } // CHECK: call <4 x i32> @llvm.abs.v4i32( int4 test_abs_int4(int4 p0) { return abs(p0); } -// CHECK-LABEL: define noundef float @_Z14test_abs_float -// CHECK: call float @llvm.fabs.f32( +// CHECK-LABEL: define noundef nofpclass(nan inf) float @_Z14test_abs_float +// CHECK: call reassoc nnan ninf nsz arcp afn float @llvm.fabs.f32( float test_abs_float(float p0) { return abs(p0); } -// CHECK-LABEL: define noundef <2 x float> @_Z15test_abs_float2 -// CHECK: call <2 x float> @llvm.fabs.v2f32( +// CHECK-LABEL: define noundef nofpclass(nan inf) <2 x float> @_Z15test_abs_float2 +// CHECK: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.fabs.v2f32( float2 test_abs_float2(float2 p0) { return abs(p0); } -// CHECK-LABEL: define noundef <3 x float> @_Z15test_abs_float3 -// CHECK: call <3 x float> @llvm.fabs.v3f32( +// CHECK-LABEL: define noundef nofpclass(nan inf) <3 x float> @_Z15test_abs_float3 +// CHECK: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.fabs.v3f32( float3 test_abs_float3(float3 p0) { return abs(p0); } -// CHECK-LABEL: define noundef <4 x float> @_Z15test_abs_float4 -// CHECK: call <4 x float> @llvm.fabs.v4f32( +// CHECK-LABEL: define noundef nofpclass(nan inf) <4 x float> @_Z15test_abs_float4 +// CHECK: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.fabs.v4f32( float4 test_abs_float4(float4 p0) { return abs(p0); } // CHECK-LABEL: define noundef i64 @_Z16test_abs_int64_t @@ -82,15 +82,15 @@ int64_t3 test_abs_int64_t3(int64_t3 p0) { return abs(p0); } // CHECK: call <4 x i64> @llvm.abs.v4i64( int64_t4 test_abs_int64_t4(int64_t4 p0) { return abs(p0); } -// CHECK-LABEL: define noundef double @_Z15test_abs_double -// CHECK: call double @llvm.fabs.f64( +// CHECK-LABEL: define noundef nofpclass(nan inf) double @_Z15test_abs_double +// CHECK: call reassoc nnan ninf nsz arcp afn double @llvm.fabs.f64( double test_abs_double(double p0) { return abs(p0); } -// CHECK-LABEL: define noundef <2 x double> @_Z16test_abs_double2 -// CHECK: call <2 x double> @llvm.fabs.v2f64( +// CHECK-LABEL: define noundef nofpclass(nan inf) <2 x double> @_Z16test_abs_double2 +// CHECK: call reassoc nnan ninf nsz arcp afn <2 x double> @llvm.fabs.v2f64( double2 test_abs_double2(double2 p0) { return abs(p0); } -// CHECK-LABEL: define noundef <3 x double> @_Z16test_abs_double3 -// CHECK: call <3 x double> @llvm.fabs.v3f64( +// CHECK-LABEL: define noundef nofpclass(nan inf) <3 x double> @_Z16test_abs_double3 +// CHECK: call reassoc nnan ninf nsz arcp afn <3 x double> @llvm.fabs.v3f64( double3 test_abs_double3(double3 p0) { return abs(p0); } -// CHECK-LABEL: define noundef <4 x double> @_Z16test_abs_double4 -// CHECK: call <4 x double> @llvm.fabs.v4f64( +// CHECK-LABEL: define noundef nofpclass(nan inf) <4 x double> @_Z16test_abs_double4 +// CHECK: call reassoc nnan ninf nsz arcp afn <4 x double> @llvm.fabs.v4f64( double4 test_abs_double4(double4 p0) { return abs(p0); } diff --git a/clang/test/CodeGenHLSL/builtins/acos.hlsl b/clang/test/CodeGenHLSL/builtins/acos.hlsl index 78a05cadfcd431..8152339a34e87f 100644 --- a/clang/test/CodeGenHLSL/builtins/acos.hlsl +++ b/clang/test/CodeGenHLSL/builtins/acos.hlsl @@ -7,53 +7,53 @@ // RUN: -o - | FileCheck %s --check-prefixes=CHECK,NO_HALF // CHECK-LABEL: test_acos_half -// NATIVE_HALF: call half @llvm.acos.f16 -// NO_HALF: call float @llvm.acos.f32 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn half @llvm.acos.f16 +// NO_HALF: call reassoc nnan ninf nsz arcp afn float @llvm.acos.f32 half test_acos_half ( half p0 ) { return acos ( p0 ); } // CHECK-LABEL: test_acos_half2 -// NATIVE_HALF: call <2 x half> @llvm.acos.v2f16 -// NO_HALF: call <2 x float> @llvm.acos.v2f32 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <2 x half> @llvm.acos.v2f16 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.acos.v2f32 half2 test_acos_half2 ( half2 p0 ) { return acos ( p0 ); } // CHECK-LABEL: test_acos_half3 -// NATIVE_HALF: call <3 x half> @llvm.acos.v3f16 -// NO_HALF: call <3 x float> @llvm.acos.v3f32 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <3 x half> @llvm.acos.v3f16 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.acos.v3f32 half3 test_acos_half3 ( half3 p0 ) { return acos ( p0 ); } // CHECK-LABEL: test_acos_half4 -// NATIVE_HALF: call <4 x half> @llvm.acos.v4f16 -// NO_HALF: call <4 x float> @llvm.acos.v4f32 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <4 x half> @llvm.acos.v4f16 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.acos.v4f32 half4 test_acos_half4 ( half4 p0 ) { return acos ( p0 ); } // CHECK-LABEL: test_acos_float -// CHECK: call float @llvm.acos.f32 +// CHECK: call reassoc nnan ninf nsz arcp afn float @llvm.acos.f32 float test_acos_float ( float p0 ) { return acos ( p0 ); } // CHECK-LABEL: test_acos_float2 -// CHECK: call <2 x float> @llvm.acos.v2f32 +// CHECK: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.acos.v2f32 float2 test_acos_float2 ( float2 p0 ) { return acos ( p0 ); } // CHECK-LABEL: test_acos_float3 -// CHECK: call <3 x float> @llvm.acos.v3f32 +// CHECK: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.acos.v3f32 float3 test_acos_float3 ( float3 p0 ) { return acos ( p0 ); } // CHECK-LABEL: test_acos_float4 -// CHECK: call <4 x float> @llvm.acos.v4f32 +// CHECK: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.acos.v4f32 float4 test_acos_float4 ( float4 p0 ) { return acos ( p0 ); } diff --git a/clang/test/CodeGenHLSL/builtins/asdouble.hlsl b/clang/test/CodeGenHLSL/builtins/asdouble.hlsl index f1c31107cdcad6..bfc7fc97854c57 100644 --- a/clang/test/CodeGenHLSL/builtins/asdouble.hlsl +++ b/clang/test/CodeGenHLSL/builtins/asdouble.hlsl @@ -18,7 +18,7 @@ double test_uint(uint low, uint high) { // CHECK-SPV-SAME: {{.*}} // CHECK-SPV: bitcast <2 x i32> %[[SHUFFLE0]] to double - // CHECK-DXIL: call double @llvm.dx.asdouble.i32 + // CHECK-DXIL: call reassoc nnan ninf nsz arcp afn double @llvm.dx.asdouble.i32 return asdouble(low, high); } @@ -30,7 +30,7 @@ double3 test_vuint(uint3 low, uint3 high) { // CHECK-SPV-SAME: {{.*}} // CHECK-SPV: bitcast <6 x i32> %[[SHUFFLE1]] to <3 x double> - // CHECK-DXIL: call <3 x double> @llvm.dx.asdouble.v3i32 + // CHECK-DXIL: call reassoc nnan ninf nsz arcp afn <3 x double> @llvm.dx.asdouble.v3i32 return asdouble(low, high); } diff --git a/clang/test/CodeGenHLSL/builtins/asin.hlsl b/clang/test/CodeGenHLSL/builtins/asin.hlsl index 1d0b457e336f53..16efbba79670e7 100644 --- a/clang/test/CodeGenHLSL/builtins/asin.hlsl +++ b/clang/test/CodeGenHLSL/builtins/asin.hlsl @@ -7,53 +7,53 @@ // RUN: -o - | FileCheck %s --check-prefixes=CHECK,NO_HALF // CHECK-LABEL: test_asin_half -// NATIVE_HALF: call half @llvm.asin.f16 -// NO_HALF: call float @llvm.asin.f32 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn half @llvm.asin.f16 +// NO_HALF: call reassoc nnan ninf nsz arcp afn float @llvm.asin.f32 half test_asin_half ( half p0 ) { return asin ( p0 ); } // CHECK-LABEL: test_asin_half2 -// NATIVE_HALF: call <2 x half> @llvm.asin.v2f16 -// NO_HALF: call <2 x float> @llvm.asin.v2f32 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <2 x half> @llvm.asin.v2f16 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.asin.v2f32 half2 test_asin_half2 ( half2 p0 ) { return asin ( p0 ); } // CHECK-LABEL: test_asin_half3 -// NATIVE_HALF: call <3 x half> @llvm.asin.v3f16 -// NO_HALF: call <3 x float> @llvm.asin.v3f32 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <3 x half> @llvm.asin.v3f16 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.asin.v3f32 half3 test_asin_half3 ( half3 p0 ) { return asin ( p0 ); } // CHECK-LABEL: test_asin_half4 -// NATIVE_HALF: call <4 x half> @llvm.asin.v4f16 -// NO_HALF: call <4 x float> @llvm.asin.v4f32 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <4 x half> @llvm.asin.v4f16 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.asin.v4f32 half4 test_asin_half4 ( half4 p0 ) { return asin ( p0 ); } // CHECK-LABEL: test_asin_float -// CHECK: call float @llvm.asin.f32 +// CHECK: call reassoc nnan ninf nsz arcp afn float @llvm.asin.f32 float test_asin_float ( float p0 ) { return asin ( p0 ); } // CHECK-LABEL: test_asin_float2 -// CHECK: call <2 x float> @llvm.asin.v2f32 +// CHECK: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.asin.v2f32 float2 test_asin_float2 ( float2 p0 ) { return asin ( p0 ); } // CHECK-LABEL: test_asin_float3 -// CHECK: call <3 x float> @llvm.asin.v3f32 +// CHECK: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.asin.v3f32 float3 test_asin_float3 ( float3 p0 ) { return asin ( p0 ); } // CHECK-LABEL: test_asin_float4 -// CHECK: call <4 x float> @llvm.asin.v4f32 +// CHECK: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.asin.v4f32 float4 test_asin_float4 ( float4 p0 ) { return asin ( p0 ); } diff --git a/clang/test/CodeGenHLSL/builtins/atan.hlsl b/clang/test/CodeGenHLSL/builtins/atan.hlsl index faee1227f35952..437835a8637032 100644 --- a/clang/test/CodeGenHLSL/builtins/atan.hlsl +++ b/clang/test/CodeGenHLSL/builtins/atan.hlsl @@ -7,53 +7,53 @@ // RUN: -o - | FileCheck %s --check-prefixes=CHECK,NO_HALF // CHECK-LABEL: test_atan_half -// NATIVE_HALF: call half @llvm.atan.f16 -// NO_HALF: call float @llvm.atan.f32 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn half @llvm.atan.f16 +// NO_HALF: call reassoc nnan ninf nsz arcp afn float @llvm.atan.f32 half test_atan_half ( half p0 ) { return atan ( p0 ); } // CHECK-LABEL: test_atan_half2 -// NATIVE_HALF: call <2 x half> @llvm.atan.v2f16 -// NO_HALF: call <2 x float> @llvm.atan.v2f32 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <2 x half> @llvm.atan.v2f16 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.atan.v2f32 half2 test_atan_half2 ( half2 p0 ) { return atan ( p0 ); } // CHECK-LABEL: test_atan_half3 -// NATIVE_HALF: call <3 x half> @llvm.atan.v3f16 -// NO_HALF: call <3 x float> @llvm.atan.v3f32 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <3 x half> @llvm.atan.v3f16 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.atan.v3f32 half3 test_atan_half3 ( half3 p0 ) { return atan ( p0 ); } // CHECK-LABEL: test_atan_half4 -// NATIVE_HALF: call <4 x half> @llvm.atan.v4f16 -// NO_HALF: call <4 x float> @llvm.atan.v4f32 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <4 x half> @llvm.atan.v4f16 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.atan.v4f32 half4 test_atan_half4 ( half4 p0 ) { return atan ( p0 ); } // CHECK-LABEL: test_atan_float -// CHECK: call float @llvm.atan.f32 +// CHECK: call reassoc nnan ninf nsz arcp afn float @llvm.atan.f32 float test_atan_float ( float p0 ) { return atan ( p0 ); } // CHECK-LABEL: test_atan_float2 -// CHECK: call <2 x float> @llvm.atan.v2f32 +// CHECK: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.atan.v2f32 float2 test_atan_float2 ( float2 p0 ) { return atan ( p0 ); } // CHECK-LABEL: test_atan_float3 -// CHECK: call <3 x float> @llvm.atan.v3f32 +// CHECK: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.atan.v3f32 float3 test_atan_float3 ( float3 p0 ) { return atan ( p0 ); } // CHECK-LABEL: test_atan_float4 -// CHECK: call <4 x float> @llvm.atan.v4f32 +// CHECK: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.atan.v4f32 float4 test_atan_float4 ( float4 p0 ) { return atan ( p0 ); } diff --git a/clang/test/CodeGenHLSL/builtins/atan2.hlsl b/clang/test/CodeGenHLSL/builtins/atan2.hlsl index 40796052e608fe..53d115641e72f4 100644 --- a/clang/test/CodeGenHLSL/builtins/atan2.hlsl +++ b/clang/test/CodeGenHLSL/builtins/atan2.hlsl @@ -7,53 +7,53 @@ // RUN: -o - | FileCheck %s --check-prefixes=CHECK,NO_HALF // CHECK-LABEL: test_atan2_half -// NATIVE_HALF: call half @llvm.atan2.f16 -// NO_HALF: call float @llvm.atan2.f32 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn half @llvm.atan2.f16 +// NO_HALF: call reassoc nnan ninf nsz arcp afn float @llvm.atan2.f32 half test_atan2_half (half p0, half p1) { return atan2(p0, p1); } // CHECK-LABEL: test_atan2_half2 -// NATIVE_HALF: call <2 x half> @llvm.atan2.v2f16 -// NO_HALF: call <2 x float> @llvm.atan2.v2f32 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <2 x half> @llvm.atan2.v2f16 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.atan2.v2f32 half2 test_atan2_half2 (half2 p0, half2 p1) { return atan2(p0, p1); } // CHECK-LABEL: test_atan2_half3 -// NATIVE_HALF: call <3 x half> @llvm.atan2.v3f16 -// NO_HALF: call <3 x float> @llvm.atan2.v3f32 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <3 x half> @llvm.atan2.v3f16 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.atan2.v3f32 half3 test_atan2_half3 (half3 p0, half3 p1) { return atan2(p0, p1); } // CHECK-LABEL: test_atan2_half4 -// NATIVE_HALF: call <4 x half> @llvm.atan2.v4f16 -// NO_HALF: call <4 x float> @llvm.atan2.v4f32 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <4 x half> @llvm.atan2.v4f16 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.atan2.v4f32 half4 test_atan2_half4 (half4 p0, half4 p1) { return atan2(p0, p1); } // CHECK-LABEL: test_atan2_float -// CHECK: call float @llvm.atan2.f32 +// CHECK: call reassoc nnan ninf nsz arcp afn float @llvm.atan2.f32 float test_atan2_float (float p0, float p1) { return atan2(p0, p1); } // CHECK-LABEL: test_atan2_float2 -// CHECK: call <2 x float> @llvm.atan2.v2f32 +// CHECK: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.atan2.v2f32 float2 test_atan2_float2 (float2 p0, float2 p1) { return atan2(p0, p1); } // CHECK-LABEL: test_atan2_float3 -// CHECK: call <3 x float> @llvm.atan2.v3f32 +// CHECK: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.atan2.v3f32 float3 test_atan2_float3 (float3 p0, float3 p1) { return atan2(p0, p1); } // CHECK-LABEL: test_atan2_float4 -// CHECK: call <4 x float> @llvm.atan2.v4f32 +// CHECK: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.atan2.v4f32 float4 test_atan2_float4 (float4 p0, float4 p1) { return atan2(p0, p1); } diff --git a/clang/test/CodeGenHLSL/builtins/ceil.hlsl b/clang/test/CodeGenHLSL/builtins/ceil.hlsl index 3aa78ec0ebcca3..fe0b8f8983838a 100644 --- a/clang/test/CodeGenHLSL/builtins/ceil.hlsl +++ b/clang/test/CodeGenHLSL/builtins/ceil.hlsl @@ -7,36 +7,36 @@ using hlsl::ceil; -// NATIVE_HALF-LABEL: define noundef half @_Z14test_ceil_half -// NATIVE_HALF: call half @llvm.ceil.f16( -// NO_HALF-LABEL: define noundef float @_Z14test_ceil_half -// NO_HALF: call float @llvm.ceil.f32(float %0) +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) half @_Z14test_ceil_half +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn half @llvm.ceil.f16( +// NO_HALF-LABEL: define noundef nofpclass(nan inf) float @_Z14test_ceil_half +// NO_HALF: call reassoc nnan ninf nsz arcp afn float @llvm.ceil.f32(float %0) half test_ceil_half(half p0) { return ceil(p0); } -// NATIVE_HALF-LABEL: define noundef <2 x half> @_Z15test_ceil_half2 -// NATIVE_HALF: call <2 x half> @llvm.ceil.v2f16( -// NO_HALF-LABEL: define noundef <2 x float> @_Z15test_ceil_half2 -// NO_HALF: call <2 x float> @llvm.ceil.v2f32( +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) <2 x half> @_Z15test_ceil_half2 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <2 x half> @llvm.ceil.v2f16( +// NO_HALF-LABEL: define noundef nofpclass(nan inf) <2 x float> @_Z15test_ceil_half2 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.ceil.v2f32( half2 test_ceil_half2(half2 p0) { return ceil(p0); } -// NATIVE_HALF-LABEL: define noundef <3 x half> @_Z15test_ceil_half3 -// NATIVE_HALF: call <3 x half> @llvm.ceil.v3f16( -// NO_HALF-LABEL: define noundef <3 x float> @_Z15test_ceil_half3 -// NO_HALF: call <3 x float> @llvm.ceil.v3f32( +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) <3 x half> @_Z15test_ceil_half3 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <3 x half> @llvm.ceil.v3f16( +// NO_HALF-LABEL: define noundef nofpclass(nan inf) <3 x float> @_Z15test_ceil_half3 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.ceil.v3f32( half3 test_ceil_half3(half3 p0) { return ceil(p0); } -// NATIVE_HALF-LABEL: define noundef <4 x half> @_Z15test_ceil_half4 -// NATIVE_HALF: call <4 x half> @llvm.ceil.v4f16( -// NO_HALF-LABEL: define noundef <4 x float> @_Z15test_ceil_half4 -// NO_HALF: call <4 x float> @llvm.ceil.v4f32( +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) <4 x half> @_Z15test_ceil_half4 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <4 x half> @llvm.ceil.v4f16( +// NO_HALF-LABEL: define noundef nofpclass(nan inf) <4 x float> @_Z15test_ceil_half4 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.ceil.v4f32( half4 test_ceil_half4(half4 p0) { return ceil(p0); } -// CHECK-LABEL: define noundef float @_Z15test_ceil_float -// CHECK: call float @llvm.ceil.f32( +// CHECK-LABEL: define noundef nofpclass(nan inf) float @_Z15test_ceil_float +// CHECK: call reassoc nnan ninf nsz arcp afn float @llvm.ceil.f32( float test_ceil_float(float p0) { return ceil(p0); } -// CHECK-LABEL: define noundef <2 x float> @_Z16test_ceil_float2 -// CHECK: call <2 x float> @llvm.ceil.v2f32( +// CHECK-LABEL: define noundef nofpclass(nan inf) <2 x float> @_Z16test_ceil_float2 +// CHECK: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.ceil.v2f32( float2 test_ceil_float2(float2 p0) { return ceil(p0); } -// CHECK-LABEL: define noundef <3 x float> @_Z16test_ceil_float3 -// CHECK: call <3 x float> @llvm.ceil.v3f32( +// CHECK-LABEL: define noundef nofpclass(nan inf) <3 x float> @_Z16test_ceil_float3 +// CHECK: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.ceil.v3f32( float3 test_ceil_float3(float3 p0) { return ceil(p0); } -// CHECK-LABEL: define noundef <4 x float> @_Z16test_ceil_float4 -// CHECK: call <4 x float> @llvm.ceil.v4f32( +// CHECK-LABEL: define noundef nofpclass(nan inf) <4 x float> @_Z16test_ceil_float4 +// CHECK: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.ceil.v4f32( float4 test_ceil_float4(float4 p0) { return ceil(p0); } diff --git a/clang/test/CodeGenHLSL/builtins/clamp.hlsl b/clang/test/CodeGenHLSL/builtins/clamp.hlsl index 3489f3d3e2b09e..d01c2a45c43c8f 100644 --- a/clang/test/CodeGenHLSL/builtins/clamp.hlsl +++ b/clang/test/CodeGenHLSL/builtins/clamp.hlsl @@ -1,19 +1,19 @@ // RUN: %clang_cc1 -finclude-default-header -triple dxil-pc-shadermodel6.3-library %s \ // RUN: -fnative-half-type -emit-llvm -disable-llvm-passes -o - | \ // RUN: FileCheck %s --check-prefixes=CHECK,NATIVE_HALF \ -// RUN: -DTARGET=dx -DFNATTRS=noundef +// RUN: -DTARGET=dx -DFNATTRS=noundef -DFFNATTRS="nofpclass(nan inf)" // RUN: %clang_cc1 -finclude-default-header -triple dxil-pc-shadermodel6.3-library %s \ // RUN: -emit-llvm -disable-llvm-passes -o - | \ // RUN: FileCheck %s --check-prefixes=CHECK,NO_HALF \ -// RUN: -DTARGET=dx -DFNATTRS=noundef +// RUN: -DTARGET=dx -DFNATTRS=noundef -DFFNATTRS="nofpclass(nan inf)" // RUN: %clang_cc1 -finclude-default-header -triple spirv-unknown-vulkan-compute %s \ // RUN: -fnative-half-type -emit-llvm -disable-llvm-passes -o - | \ // RUN: FileCheck %s --check-prefixes=CHECK,NATIVE_HALF \ -// RUN: -DTARGET=spv -DFNATTRS="spir_func noundef" +// RUN: -DTARGET=spv -DFNATTRS="spir_func noundef" -DFFNATTRS="nofpclass(nan inf)" // RUN: %clang_cc1 -finclude-default-header -triple spirv-unknown-vulkan-compute %s \ // RUN: -emit-llvm -disable-llvm-passes -o - | \ // RUN: FileCheck %s --check-prefixes=CHECK,NO_HALF \ -// RUN: -DTARGET=spv -DFNATTRS="spir_func noundef" +// RUN: -DTARGET=spv -DFNATTRS="spir_func noundef" -DFFNATTRS="nofpclass(nan inf)" #ifdef __HLSL_ENABLE_16_BIT // NATIVE_HALF: define [[FNATTRS]] i16 @_Z16test_clamp_short @@ -95,49 +95,49 @@ uint64_t3 test_clamp_ulong3(uint64_t3 p0, uint64_t3 p1) { return clamp(p0, p1,p1 // CHECK: call <4 x i64> @llvm.[[TARGET]].uclamp.v4i64 uint64_t4 test_clamp_ulong4(uint64_t4 p0, uint64_t4 p1) { return clamp(p0, p1,p1); } -// NATIVE_HALF: define [[FNATTRS]] half @_Z15test_clamp_half -// NATIVE_HALF: call half @llvm.[[TARGET]].nclamp.f16( -// NO_HALF: define [[FNATTRS]] float @_Z15test_clamp_half -// NO_HALF: call float @llvm.[[TARGET]].nclamp.f32( +// NATIVE_HALF: define [[FNATTRS]] [[FFNATTRS]] half @_Z15test_clamp_half +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn half @llvm.[[TARGET]].nclamp.f16( +// NO_HALF: define [[FNATTRS]] [[FFNATTRS]] float @_Z15test_clamp_half +// NO_HALF: call reassoc nnan ninf nsz arcp afn float @llvm.[[TARGET]].nclamp.f32( half test_clamp_half(half p0, half p1) { return clamp(p0, p1,p1); } -// NATIVE_HALF: define [[FNATTRS]] <2 x half> @_Z16test_clamp_half2 -// NATIVE_HALF: call <2 x half> @llvm.[[TARGET]].nclamp.v2f16 -// NO_HALF: define [[FNATTRS]] <2 x float> @_Z16test_clamp_half2 -// NO_HALF: call <2 x float> @llvm.[[TARGET]].nclamp.v2f32( +// NATIVE_HALF: define [[FNATTRS]] [[FFNATTRS]] <2 x half> @_Z16test_clamp_half2 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <2 x half> @llvm.[[TARGET]].nclamp.v2f16 +// NO_HALF: define [[FNATTRS]] [[FFNATTRS]] <2 x float> @_Z16test_clamp_half2 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.[[TARGET]].nclamp.v2f32( half2 test_clamp_half2(half2 p0, half2 p1) { return clamp(p0, p1,p1); } -// NATIVE_HALF: define [[FNATTRS]] <3 x half> @_Z16test_clamp_half3 -// NATIVE_HALF: call <3 x half> @llvm.[[TARGET]].nclamp.v3f16 -// NO_HALF: define [[FNATTRS]] <3 x float> @_Z16test_clamp_half3 -// NO_HALF: call <3 x float> @llvm.[[TARGET]].nclamp.v3f32( +// NATIVE_HALF: define [[FNATTRS]] [[FFNATTRS]] <3 x half> @_Z16test_clamp_half3 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <3 x half> @llvm.[[TARGET]].nclamp.v3f16 +// NO_HALF: define [[FNATTRS]] [[FFNATTRS]] <3 x float> @_Z16test_clamp_half3 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.[[TARGET]].nclamp.v3f32( half3 test_clamp_half3(half3 p0, half3 p1) { return clamp(p0, p1,p1); } -// NATIVE_HALF: define [[FNATTRS]] <4 x half> @_Z16test_clamp_half4 -// NATIVE_HALF: call <4 x half> @llvm.[[TARGET]].nclamp.v4f16 -// NO_HALF: define [[FNATTRS]] <4 x float> @_Z16test_clamp_half4 -// NO_HALF: call <4 x float> @llvm.[[TARGET]].nclamp.v4f32( +// NATIVE_HALF: define [[FNATTRS]] [[FFNATTRS]] <4 x half> @_Z16test_clamp_half4 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <4 x half> @llvm.[[TARGET]].nclamp.v4f16 +// NO_HALF: define [[FNATTRS]] [[FFNATTRS]] <4 x float> @_Z16test_clamp_half4 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.[[TARGET]].nclamp.v4f32( half4 test_clamp_half4(half4 p0, half4 p1) { return clamp(p0, p1,p1); } -// CHECK: define [[FNATTRS]] float @_Z16test_clamp_float -// CHECK: call float @llvm.[[TARGET]].nclamp.f32( +// CHECK: define [[FNATTRS]] [[FFNATTRS]] float @_Z16test_clamp_float +// CHECK: call reassoc nnan ninf nsz arcp afn float @llvm.[[TARGET]].nclamp.f32( float test_clamp_float(float p0, float p1) { return clamp(p0, p1,p1); } -// CHECK: define [[FNATTRS]] <2 x float> @_Z17test_clamp_float2 -// CHECK: call <2 x float> @llvm.[[TARGET]].nclamp.v2f32 +// CHECK: define [[FNATTRS]] [[FFNATTRS]] <2 x float> @_Z17test_clamp_float2 +// CHECK: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.[[TARGET]].nclamp.v2f32 float2 test_clamp_float2(float2 p0, float2 p1) { return clamp(p0, p1,p1); } -// CHECK: define [[FNATTRS]] <3 x float> @_Z17test_clamp_float3 -// CHECK: call <3 x float> @llvm.[[TARGET]].nclamp.v3f32 +// CHECK: define [[FNATTRS]] [[FFNATTRS]] <3 x float> @_Z17test_clamp_float3 +// CHECK: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.[[TARGET]].nclamp.v3f32 float3 test_clamp_float3(float3 p0, float3 p1) { return clamp(p0, p1,p1); } -// CHECK: define [[FNATTRS]] <4 x float> @_Z17test_clamp_float4 -// CHECK: call <4 x float> @llvm.[[TARGET]].nclamp.v4f32 +// CHECK: define [[FNATTRS]] [[FFNATTRS]] <4 x float> @_Z17test_clamp_float4 +// CHECK: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.[[TARGET]].nclamp.v4f32 float4 test_clamp_float4(float4 p0, float4 p1) { return clamp(p0, p1,p1); } -// CHECK: define [[FNATTRS]] double @_Z17test_clamp_double -// CHECK: call double @llvm.[[TARGET]].nclamp.f64( +// CHECK: define [[FNATTRS]] [[FFNATTRS]] double @_Z17test_clamp_double +// CHECK: call reassoc nnan ninf nsz arcp afn double @llvm.[[TARGET]].nclamp.f64( double test_clamp_double(double p0, double p1) { return clamp(p0, p1,p1); } -// CHECK: define [[FNATTRS]] <2 x double> @_Z18test_clamp_double2 -// CHECK: call <2 x double> @llvm.[[TARGET]].nclamp.v2f64 +// CHECK: define [[FNATTRS]] [[FFNATTRS]] <2 x double> @_Z18test_clamp_double2 +// CHECK: call reassoc nnan ninf nsz arcp afn <2 x double> @llvm.[[TARGET]].nclamp.v2f64 double2 test_clamp_double2(double2 p0, double2 p1) { return clamp(p0, p1,p1); } -// CHECK: define [[FNATTRS]] <3 x double> @_Z18test_clamp_double3 -// CHECK: call <3 x double> @llvm.[[TARGET]].nclamp.v3f64 +// CHECK: define [[FNATTRS]] [[FFNATTRS]] <3 x double> @_Z18test_clamp_double3 +// CHECK: call reassoc nnan ninf nsz arcp afn <3 x double> @llvm.[[TARGET]].nclamp.v3f64 double3 test_clamp_double3(double3 p0, double3 p1) { return clamp(p0, p1,p1); } -// CHECK: define [[FNATTRS]] <4 x double> @_Z18test_clamp_double4 -// CHECK: call <4 x double> @llvm.[[TARGET]].nclamp.v4f64 +// CHECK: define [[FNATTRS]] [[FFNATTRS]] <4 x double> @_Z18test_clamp_double4 +// CHECK: call reassoc nnan ninf nsz arcp afn <4 x double> @llvm.[[TARGET]].nclamp.v4f64 double4 test_clamp_double4(double4 p0, double4 p1) { return clamp(p0, p1,p1); } diff --git a/clang/test/CodeGenHLSL/builtins/clip.hlsl b/clang/test/CodeGenHLSL/builtins/clip.hlsl index 63843c151e3ac5..5a1753766a8a16 100644 --- a/clang/test/CodeGenHLSL/builtins/clip.hlsl +++ b/clang/test/CodeGenHLSL/builtins/clip.hlsl @@ -5,13 +5,13 @@ void test_scalar(float Buf) { // CHECK: define void @{{.*}}test_scalar{{.*}}(float {{.*}} [[VALP:%.*]]) // CHECK: [[LOAD:%.*]] = load float, ptr [[VALP]].addr, align 4 - // CHECK-NEXT: [[FCMP:%.*]] = fcmp olt float [[LOAD]], 0.000000e+00 + // CHECK-NEXT: [[FCMP:%.*]] = fcmp reassoc nnan ninf nsz arcp afn olt float [[LOAD]], 0.000000e+00 // CHECK-NO: call i1 @llvm.dx.any // CHECK-NEXT: call void @llvm.dx.discard(i1 [[FCMP]]) // // SPIRV: define spir_func void @{{.*}}test_scalar{{.*}}(float {{.*}} [[VALP:%.*]]) // SPIRV: [[LOAD:%.*]] = load float, ptr [[VALP]].addr, align 4 - // SPIRV-NEXT: [[FCMP:%.*]] = fcmp olt float [[LOAD]], 0.000000e+00 + // SPIRV-NEXT: [[FCMP:%.*]] = fcmp reassoc nnan ninf nsz arcp afn olt float [[LOAD]], 0.000000e+00 // SPIRV-NO: call i1 @llvm.spv.any // SPIRV-NEXT: br i1 [[FCMP]], label %[[LTL:.*]], label %[[ENDL:.*]] // SPIRV: [[LTL]]: ; preds = %entry @@ -23,13 +23,13 @@ void test_scalar(float Buf) { void test_vector4(float4 Buf) { // CHECK: define void @{{.*}}test_vector{{.*}}(<4 x float> {{.*}} [[VALP:%.*]]) // CHECK: [[LOAD:%.*]] = load <4 x float>, ptr [[VALP]].addr, align 16 - // CHECK-NEXT: [[FCMP:%.*]] = fcmp olt <4 x float> [[LOAD]], zeroinitializer + // CHECK-NEXT: [[FCMP:%.*]] = fcmp reassoc nnan ninf nsz arcp afn olt <4 x float> [[LOAD]], zeroinitializer // CHECK-NEXT: [[ANYC:%.*]] = call i1 @llvm.dx.any.v4i1(<4 x i1> [[FCMP]]) // CHECK-NEXT: call void @llvm.dx.discard(i1 [[ANYC]]) // // SPIRV: define spir_func void @{{.*}}test_vector{{.*}}(<4 x float> {{.*}} [[VALP:%.*]]) // SPIRV: [[LOAD:%.*]] = load <4 x float>, ptr [[VALP]].addr, align 16 - // SPIRV-NEXT: [[FCMP:%.*]] = fcmp olt <4 x float> [[LOAD]], zeroinitializer + // SPIRV-NEXT: [[FCMP:%.*]] = fcmp reassoc nnan ninf nsz arcp afn olt <4 x float> [[LOAD]], zeroinitializer // SPIRV-NEXT: [[ANYC:%.*]] = call i1 @llvm.spv.any.v4i1(<4 x i1> [[FCMP]]) // SPIRV-NEXT: br i1 [[ANYC]], label %[[LTL:.*]], label %[[ENDL:.*]] // SPIRV: [[LTL]]: ; preds = %entry diff --git a/clang/test/CodeGenHLSL/builtins/cos.hlsl b/clang/test/CodeGenHLSL/builtins/cos.hlsl index 4a41a9ec4a7cac..5f993d50498bf2 100644 --- a/clang/test/CodeGenHLSL/builtins/cos.hlsl +++ b/clang/test/CodeGenHLSL/builtins/cos.hlsl @@ -5,36 +5,36 @@ // RUN: -emit-llvm -disable-llvm-passes -o - | \ // RUN: FileCheck %s --check-prefixes=CHECK,NO_HALF -// NATIVE_HALF-LABEL: define noundef half @_Z13test_cos_half -// NATIVE_HALF: call half @llvm.cos.f16( -// NO_HALF-LABEL: define noundef float @_Z13test_cos_half -// NO_HALF: call float @llvm.cos.f32( +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) half @_Z13test_cos_half +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn half @llvm.cos.f16( +// NO_HALF-LABEL: define noundef nofpclass(nan inf) float @_Z13test_cos_half +// NO_HALF: call reassoc nnan ninf nsz arcp afn float @llvm.cos.f32( half test_cos_half(half p0) { return cos(p0); } -// NATIVE_HALF-LABEL: define noundef <2 x half> @_Z14test_cos_half2 -// NATIVE_HALF: call <2 x half> @llvm.cos.v2f16 -// NO_HALF-LABEL: define noundef <2 x float> @_Z14test_cos_half2 -// NO_HALF: call <2 x float> @llvm.cos.v2f32( +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) <2 x half> @_Z14test_cos_half2 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <2 x half> @llvm.cos.v2f16 +// NO_HALF-LABEL: define noundef nofpclass(nan inf) <2 x float> @_Z14test_cos_half2 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.cos.v2f32( half2 test_cos_half2(half2 p0) { return cos(p0); } -// NATIVE_HALF-LABEL: define noundef <3 x half> @_Z14test_cos_half3 -// NATIVE_HALF: call <3 x half> @llvm.cos.v3f16 -// NO_HALF-LABEL: define noundef <3 x float> @_Z14test_cos_half3 -// NO_HALF: call <3 x float> @llvm.cos.v3f32( +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) <3 x half> @_Z14test_cos_half3 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <3 x half> @llvm.cos.v3f16 +// NO_HALF-LABEL: define noundef nofpclass(nan inf) <3 x float> @_Z14test_cos_half3 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.cos.v3f32( half3 test_cos_half3(half3 p0) { return cos(p0); } -// NATIVE_HALF-LABEL: define noundef <4 x half> @_Z14test_cos_half4 -// NATIVE_HALF: call <4 x half> @llvm.cos.v4f16 -// NO_HALF-LABEL: define noundef <4 x float> @_Z14test_cos_half4 -// NO_HALF: call <4 x float> @llvm.cos.v4f32( +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) <4 x half> @_Z14test_cos_half4 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <4 x half> @llvm.cos.v4f16 +// NO_HALF-LABEL: define noundef nofpclass(nan inf) <4 x float> @_Z14test_cos_half4 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.cos.v4f32( half4 test_cos_half4(half4 p0) { return cos(p0); } -// CHECK-LABEL: define noundef float @_Z14test_cos_float -// CHECK: call float @llvm.cos.f32( +// CHECK-LABEL: define noundef nofpclass(nan inf) float @_Z14test_cos_float +// CHECK: call reassoc nnan ninf nsz arcp afn float @llvm.cos.f32( float test_cos_float(float p0) { return cos(p0); } -// CHECK-LABEL: define noundef <2 x float> @_Z15test_cos_float2 -// CHECK: call <2 x float> @llvm.cos.v2f32 +// CHECK-LABEL: define noundef nofpclass(nan inf) <2 x float> @_Z15test_cos_float2 +// CHECK: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.cos.v2f32 float2 test_cos_float2(float2 p0) { return cos(p0); } -// CHECK-LABEL: define noundef <3 x float> @_Z15test_cos_float3 -// CHECK: call <3 x float> @llvm.cos.v3f32 +// CHECK-LABEL: define noundef nofpclass(nan inf) <3 x float> @_Z15test_cos_float3 +// CHECK: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.cos.v3f32 float3 test_cos_float3(float3 p0) { return cos(p0); } -// CHECK-LABEL: define noundef <4 x float> @_Z15test_cos_float4 -// CHECK: call <4 x float> @llvm.cos.v4f32 +// CHECK-LABEL: define noundef nofpclass(nan inf) <4 x float> @_Z15test_cos_float4 +// CHECK: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.cos.v4f32 float4 test_cos_float4(float4 p0) { return cos(p0); } diff --git a/clang/test/CodeGenHLSL/builtins/cosh.hlsl b/clang/test/CodeGenHLSL/builtins/cosh.hlsl index a19240497b8315..07c64206412db0 100644 --- a/clang/test/CodeGenHLSL/builtins/cosh.hlsl +++ b/clang/test/CodeGenHLSL/builtins/cosh.hlsl @@ -7,53 +7,53 @@ // RUN: -o - | FileCheck %s --check-prefixes=CHECK,NO_HALF // CHECK-LABEL: test_cosh_half -// NATIVE_HALF: call half @llvm.cosh.f16 -// NO_HALF: call float @llvm.cosh.f32 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn half @llvm.cosh.f16 +// NO_HALF: call reassoc nnan ninf nsz arcp afn float @llvm.cosh.f32 half test_cosh_half ( half p0 ) { return cosh ( p0 ); } // CHECK-LABEL: test_cosh_half2 -// NATIVE_HALF: call <2 x half> @llvm.cosh.v2f16 -// NO_HALF: call <2 x float> @llvm.cosh.v2f32 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <2 x half> @llvm.cosh.v2f16 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.cosh.v2f32 half2 test_cosh_half2 ( half2 p0 ) { return cosh ( p0 ); } // CHECK-LABEL: test_cosh_half3 -// NATIVE_HALF: call <3 x half> @llvm.cosh.v3f16 -// NO_HALF: call <3 x float> @llvm.cosh.v3f32 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <3 x half> @llvm.cosh.v3f16 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.cosh.v3f32 half3 test_cosh_half3 ( half3 p0 ) { return cosh ( p0 ); } // CHECK-LABEL: test_cosh_half4 -// NATIVE_HALF: call <4 x half> @llvm.cosh.v4f16 -// NO_HALF: call <4 x float> @llvm.cosh.v4f32 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <4 x half> @llvm.cosh.v4f16 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.cosh.v4f32 half4 test_cosh_half4 ( half4 p0 ) { return cosh ( p0 ); } // CHECK-LABEL: test_cosh_float -// CHECK: call float @llvm.cosh.f32 +// CHECK: call reassoc nnan ninf nsz arcp afn float @llvm.cosh.f32 float test_cosh_float ( float p0 ) { return cosh ( p0 ); } // CHECK-LABEL: test_cosh_float2 -// CHECK: call <2 x float> @llvm.cosh.v2f32 +// CHECK: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.cosh.v2f32 float2 test_cosh_float2 ( float2 p0 ) { return cosh ( p0 ); } // CHECK-LABEL: test_cosh_float3 -// CHECK: call <3 x float> @llvm.cosh.v3f32 +// CHECK: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.cosh.v3f32 float3 test_cosh_float3 ( float3 p0 ) { return cosh ( p0 ); } // CHECK-LABEL: test_cosh_float4 -// CHECK: call <4 x float> @llvm.cosh.v4f32 +// CHECK: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.cosh.v4f32 float4 test_cosh_float4 ( float4 p0 ) { return cosh ( p0 ); } diff --git a/clang/test/CodeGenHLSL/builtins/cross.hlsl b/clang/test/CodeGenHLSL/builtins/cross.hlsl index 514e57d36b2016..b2a1d6316787d9 100644 --- a/clang/test/CodeGenHLSL/builtins/cross.hlsl +++ b/clang/test/CodeGenHLSL/builtins/cross.hlsl @@ -2,26 +2,26 @@ // RUN: dxil-pc-shadermodel6.3-library %s -fnative-half-type \ // RUN: -emit-llvm -disable-llvm-passes -o - | FileCheck %s \ // RUN: --check-prefixes=CHECK,NATIVE_HALF \ -// RUN: -DFNATTRS=noundef -DTARGET=dx +// RUN: -DFNATTRS="noundef nofpclass(nan inf)" -DTARGET=dx // RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \ // RUN: dxil-pc-shadermodel6.3-library %s -emit-llvm -disable-llvm-passes \ // RUN: -o - | FileCheck %s --check-prefixes=CHECK,NO_HALF \ -// RUN: -DFNATTRS=noundef -DTARGET=dx +// RUN: -DFNATTRS="noundef nofpclass(nan inf)" -DTARGET=dx // RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \ // RUN: spirv-unknown-vulkan-compute %s -fnative-half-type \ // RUN: -emit-llvm -disable-llvm-passes -o - | FileCheck %s \ // RUN: --check-prefixes=CHECK,NATIVE_HALF \ -// RUN: -DFNATTRS="spir_func noundef" -DTARGET=spv +// RUN: -DFNATTRS="spir_func noundef nofpclass(nan inf)" -DTARGET=spv // RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \ // RUN: spirv-unknown-vulkan-compute %s -emit-llvm -disable-llvm-passes \ // RUN: -o - | FileCheck %s --check-prefixes=CHECK,NO_HALF \ -// RUN: -DFNATTRS="spir_func noundef" -DTARGET=spv +// RUN: -DFNATTRS="spir_func noundef nofpclass(nan inf)" -DTARGET=spv // NATIVE_HALF: define [[FNATTRS]] <3 x half> @ -// NATIVE_HALF: call <3 x half> @llvm.[[TARGET]].cross.v3f16(<3 x half> +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <3 x half> @llvm.[[TARGET]].cross.v3f16(<3 x half> // NATIVE_HALF: ret <3 x half> %hlsl.cross // NO_HALF: define [[FNATTRS]] <3 x float> @ -// NO_HALF: call <3 x float> @llvm.[[TARGET]].cross.v3f32(<3 x float> +// NO_HALF: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.[[TARGET]].cross.v3f32(<3 x float> // NO_HALF: ret <3 x float> %hlsl.cross half3 test_cross_half3(half3 p0, half3 p1) { @@ -29,7 +29,7 @@ half3 test_cross_half3(half3 p0, half3 p1) } // CHECK: define [[FNATTRS]] <3 x float> @ -// CHECK: %hlsl.cross = call <3 x float> @llvm.[[TARGET]].cross.v3f32( +// CHECK: %hlsl.cross = call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.[[TARGET]].cross.v3f32( // CHECK: ret <3 x float> %hlsl.cross float3 test_cross_float3(float3 p0, float3 p1) { diff --git a/clang/test/CodeGenHLSL/builtins/degrees.hlsl b/clang/test/CodeGenHLSL/builtins/degrees.hlsl index 9e131f4badc19a..64531dd2785ebf 100644 --- a/clang/test/CodeGenHLSL/builtins/degrees.hlsl +++ b/clang/test/CodeGenHLSL/builtins/degrees.hlsl @@ -2,63 +2,63 @@ // RUN: dxil-pc-shadermodel6.3-library %s -fnative-half-type \ // RUN: -emit-llvm -disable-llvm-passes -o - | FileCheck %s \ // RUN: --check-prefixes=CHECK,NATIVE_HALF \ -// RUN: -DFNATTRS=noundef -DTARGET=dx +// RUN: -DFNATTRS="noundef nofpclass(nan inf)" -DTARGET=dx // RUN: %clang_cc1 -finclude-default-header -triple \ // RUN: dxil-pc-shadermodel6.3-library %s -emit-llvm -disable-llvm-passes \ // RUN: -o - | FileCheck %s --check-prefixes=CHECK,NO_HALF \ -// RUN: -DFNATTRS=noundef -DTARGET=dx +// RUN: -DFNATTRS="noundef nofpclass(nan inf)" -DTARGET=dx // RUN: %clang_cc1 -finclude-default-header -triple \ // RUN: spirv-unknown-vulkan-compute %s -fnative-half-type \ // RUN: -emit-llvm -disable-llvm-passes -o - | FileCheck %s \ // RUN: --check-prefixes=CHECK,NATIVE_HALF \ -// RUN: -DFNATTRS="spir_func noundef" -DTARGET=spv +// RUN: -DFNATTRS="spir_func noundef nofpclass(nan inf)" -DTARGET=spv // RUN: %clang_cc1 -finclude-default-header -triple \ // RUN: spirv-unknown-vulkan-compute %s -emit-llvm -disable-llvm-passes \ // RUN: -o - | FileCheck %s --check-prefixes=CHECK,NO_HALF \ -// RUN: -DFNATTRS="spir_func noundef" -DTARGET=spv +// RUN: -DFNATTRS="spir_func noundef nofpclass(nan inf)" -DTARGET=spv // NATIVE_HALF: define [[FNATTRS]] half @ -// NATIVE_HALF: %hlsl.degrees = call half @llvm.[[TARGET]].degrees.f16( +// NATIVE_HALF: %hlsl.degrees = call reassoc nnan ninf nsz arcp afn half @llvm.[[TARGET]].degrees.f16( // NATIVE_HALF: ret half %hlsl.degrees // NO_HALF: define [[FNATTRS]] float @ -// NO_HALF: %hlsl.degrees = call float @llvm.[[TARGET]].degrees.f32( +// NO_HALF: %hlsl.degrees = call reassoc nnan ninf nsz arcp afn float @llvm.[[TARGET]].degrees.f32( // NO_HALF: ret float %hlsl.degrees half test_degrees_half(half p0) { return degrees(p0); } // NATIVE_HALF: define [[FNATTRS]] <2 x half> @ -// NATIVE_HALF: %hlsl.degrees = call <2 x half> @llvm.[[TARGET]].degrees.v2f16 +// NATIVE_HALF: %hlsl.degrees = call reassoc nnan ninf nsz arcp afn <2 x half> @llvm.[[TARGET]].degrees.v2f16 // NATIVE_HALF: ret <2 x half> %hlsl.degrees // NO_HALF: define [[FNATTRS]] <2 x float> @ -// NO_HALF: %hlsl.degrees = call <2 x float> @llvm.[[TARGET]].degrees.v2f32( +// NO_HALF: %hlsl.degrees = call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.[[TARGET]].degrees.v2f32( // NO_HALF: ret <2 x float> %hlsl.degrees half2 test_degrees_half2(half2 p0) { return degrees(p0); } // NATIVE_HALF: define [[FNATTRS]] <3 x half> @ -// NATIVE_HALF: %hlsl.degrees = call <3 x half> @llvm.[[TARGET]].degrees.v3f16 +// NATIVE_HALF: %hlsl.degrees = call reassoc nnan ninf nsz arcp afn <3 x half> @llvm.[[TARGET]].degrees.v3f16 // NATIVE_HALF: ret <3 x half> %hlsl.degrees // NO_HALF: define [[FNATTRS]] <3 x float> @ -// NO_HALF: %hlsl.degrees = call <3 x float> @llvm.[[TARGET]].degrees.v3f32( +// NO_HALF: %hlsl.degrees = call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.[[TARGET]].degrees.v3f32( // NO_HALF: ret <3 x float> %hlsl.degrees half3 test_degrees_half3(half3 p0) { return degrees(p0); } // NATIVE_HALF: define [[FNATTRS]] <4 x half> @ -// NATIVE_HALF: %hlsl.degrees = call <4 x half> @llvm.[[TARGET]].degrees.v4f16 +// NATIVE_HALF: %hlsl.degrees = call reassoc nnan ninf nsz arcp afn <4 x half> @llvm.[[TARGET]].degrees.v4f16 // NATIVE_HALF: ret <4 x half> %hlsl.degrees // NO_HALF: define [[FNATTRS]] <4 x float> @ -// NO_HALF: %hlsl.degrees = call <4 x float> @llvm.[[TARGET]].degrees.v4f32( +// NO_HALF: %hlsl.degrees = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.[[TARGET]].degrees.v4f32( // NO_HALF: ret <4 x float> %hlsl.degrees half4 test_degrees_half4(half4 p0) { return degrees(p0); } // CHECK: define [[FNATTRS]] float @ -// CHECK: %hlsl.degrees = call float @llvm.[[TARGET]].degrees.f32( +// CHECK: %hlsl.degrees = call reassoc nnan ninf nsz arcp afn float @llvm.[[TARGET]].degrees.f32( // CHECK: ret float %hlsl.degrees float test_degrees_float(float p0) { return degrees(p0); } // CHECK: define [[FNATTRS]] <2 x float> @ -// CHECK: %hlsl.degrees = call <2 x float> @llvm.[[TARGET]].degrees.v2f32 +// CHECK: %hlsl.degrees = call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.[[TARGET]].degrees.v2f32 // CHECK: ret <2 x float> %hlsl.degrees float2 test_degrees_float2(float2 p0) { return degrees(p0); } // CHECK: define [[FNATTRS]] <3 x float> @ -// CHECK: %hlsl.degrees = call <3 x float> @llvm.[[TARGET]].degrees.v3f32 +// CHECK: %hlsl.degrees = call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.[[TARGET]].degrees.v3f32 // CHECK: ret <3 x float> %hlsl.degrees float3 test_degrees_float3(float3 p0) { return degrees(p0); } // CHECK: define [[FNATTRS]] <4 x float> @ -// CHECK: %hlsl.degrees = call <4 x float> @llvm.[[TARGET]].degrees.v4f32 +// CHECK: %hlsl.degrees = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.[[TARGET]].degrees.v4f32 // CHECK: ret <4 x float> %hlsl.degrees float4 test_degrees_float4(float4 p0) { return degrees(p0); } diff --git a/clang/test/CodeGenHLSL/builtins/dot-builtin.hlsl b/clang/test/CodeGenHLSL/builtins/dot-builtin.hlsl index 482f089d4770fd..4045169d6516cb 100644 --- a/clang/test/CodeGenHLSL/builtins/dot-builtin.hlsl +++ b/clang/test/CodeGenHLSL/builtins/dot-builtin.hlsl @@ -2,8 +2,8 @@ // CHECK-LABEL: builtin_bool_to_float_type_promotion // CHECK: %conv1 = uitofp i1 %loadedv to double -// CHECK: %hlsl.dot = fmul double %conv, %conv1 -// CHECK: %conv2 = fptrunc double %hlsl.dot to float +// CHECK: %hlsl.dot = fmul reassoc nnan ninf nsz arcp afn double %conv, %conv1 +// CHECK: %conv2 = fptrunc reassoc nnan ninf nsz arcp afn double %hlsl.dot to float // CHECK: ret float %conv2 float builtin_bool_to_float_type_promotion ( float p0, bool p1 ) { return __builtin_hlsl_dot ( p0, p1 ); @@ -11,19 +11,19 @@ float builtin_bool_to_float_type_promotion ( float p0, bool p1 ) { // CHECK-LABEL: builtin_bool_to_float_arg1_type_promotion // CHECK: %conv = uitofp i1 %loadedv to double -// CHECK: %conv1 = fpext float %1 to double -// CHECK: %hlsl.dot = fmul double %conv, %conv1 -// CHECK: %conv2 = fptrunc double %hlsl.dot to float +// CHECK: %conv1 = fpext reassoc nnan ninf nsz arcp afn float %1 to double +// CHECK: %hlsl.dot = fmul reassoc nnan ninf nsz arcp afn double %conv, %conv1 +// CHECK: %conv2 = fptrunc reassoc nnan ninf nsz arcp afn double %hlsl.dot to float // CHECK: ret float %conv2 float builtin_bool_to_float_arg1_type_promotion ( bool p0, float p1 ) { return __builtin_hlsl_dot ( p0, p1 ); } // CHECK-LABEL: builtin_dot_int_to_float_promotion -// CHECK: %conv = fpext float %0 to double +// CHECK: %conv = fpext reassoc nnan ninf nsz arcp afn float %0 to double // CHECK: %conv1 = sitofp i32 %1 to double -// CHECK: dot = fmul double %conv, %conv1 -// CHECK: %conv2 = fptrunc double %hlsl.dot to float +// CHECK: dot = fmul reassoc nnan ninf nsz arcp afn double %conv, %conv1 +// CHECK: %conv2 = fptrunc reassoc nnan ninf nsz arcp afn double %hlsl.dot to float // CHECK: ret float %conv2 float builtin_dot_int_to_float_promotion ( float p0, int p1 ) { return __builtin_hlsl_dot ( p0, p1 ); diff --git a/clang/test/CodeGenHLSL/builtins/dot.hlsl b/clang/test/CodeGenHLSL/builtins/dot.hlsl index 3f6be04a595e23..7064066780da64 100644 --- a/clang/test/CodeGenHLSL/builtins/dot.hlsl +++ b/clang/test/CodeGenHLSL/builtins/dot.hlsl @@ -115,46 +115,46 @@ uint16_t test_dot_ushort3(uint16_t3 p0, uint16_t3 p1) { return dot(p0, p1); } uint16_t test_dot_ushort4(uint16_t4 p0, uint16_t4 p1) { return dot(p0, p1); } #endif -// NATIVE_HALF: %hlsl.dot = fmul half +// NATIVE_HALF: %hlsl.dot = fmul reassoc nnan ninf nsz arcp afn half // NATIVE_HALF: ret half %hlsl.dot -// NO_HALF: %hlsl.dot = fmul float +// NO_HALF: %hlsl.dot = fmul reassoc nnan ninf nsz arcp afn float // NO_HALF: ret float %hlsl.dot half test_dot_half(half p0, half p1) { return dot(p0, p1); } -// NATIVE_HALF: %hlsl.dot = call half @llvm.[[ICF]].fdot.v2f16(<2 x half> +// NATIVE_HALF: %hlsl.dot = call reassoc nnan ninf nsz arcp afn half @llvm.[[ICF]].fdot.v2f16(<2 x half> // NATIVE_HALF: ret half %hlsl.dot -// NO_HALF: %hlsl.dot = call float @llvm.[[ICF]].fdot.v2f32(<2 x float> +// NO_HALF: %hlsl.dot = call reassoc nnan ninf nsz arcp afn float @llvm.[[ICF]].fdot.v2f32(<2 x float> // NO_HALF: ret float %hlsl.dot half test_dot_half2(half2 p0, half2 p1) { return dot(p0, p1); } -// NATIVE_HALF: %hlsl.dot = call half @llvm.[[ICF]].fdot.v3f16(<3 x half> +// NATIVE_HALF: %hlsl.dot = call reassoc nnan ninf nsz arcp afn half @llvm.[[ICF]].fdot.v3f16(<3 x half> // NATIVE_HALF: ret half %hlsl.dot -// NO_HALF: %hlsl.dot = call float @llvm.[[ICF]].fdot.v3f32(<3 x float> +// NO_HALF: %hlsl.dot = call reassoc nnan ninf nsz arcp afn float @llvm.[[ICF]].fdot.v3f32(<3 x float> // NO_HALF: ret float %hlsl.dot half test_dot_half3(half3 p0, half3 p1) { return dot(p0, p1); } -// NATIVE_HALF: %hlsl.dot = call half @llvm.[[ICF]].fdot.v4f16(<4 x half> +// NATIVE_HALF: %hlsl.dot = call reassoc nnan ninf nsz arcp afn half @llvm.[[ICF]].fdot.v4f16(<4 x half> // NATIVE_HALF: ret half %hlsl.dot -// NO_HALF: %hlsl.dot = call float @llvm.[[ICF]].fdot.v4f32(<4 x float> +// NO_HALF: %hlsl.dot = call reassoc nnan ninf nsz arcp afn float @llvm.[[ICF]].fdot.v4f32(<4 x float> // NO_HALF: ret float %hlsl.dot half test_dot_half4(half4 p0, half4 p1) { return dot(p0, p1); } -// CHECK: %hlsl.dot = fmul float +// CHECK: %hlsl.dot = fmul reassoc nnan ninf nsz arcp afn float // CHECK: ret float %hlsl.dot float test_dot_float(float p0, float p1) { return dot(p0, p1); } -// CHECK: %hlsl.dot = call float @llvm.[[ICF]].fdot.v2f32(<2 x float> +// CHECK: %hlsl.dot = call reassoc nnan ninf nsz arcp afn float @llvm.[[ICF]].fdot.v2f32(<2 x float> // CHECK: ret float %hlsl.dot float test_dot_float2(float2 p0, float2 p1) { return dot(p0, p1); } -// CHECK: %hlsl.dot = call float @llvm.[[ICF]].fdot.v3f32(<3 x float> +// CHECK: %hlsl.dot = call reassoc nnan ninf nsz arcp afn float @llvm.[[ICF]].fdot.v3f32(<3 x float> // CHECK: ret float %hlsl.dot float test_dot_float3(float3 p0, float3 p1) { return dot(p0, p1); } -// CHECK: %hlsl.dot = call float @llvm.[[ICF]].fdot.v4f32(<4 x float> +// CHECK: %hlsl.dot = call reassoc nnan ninf nsz arcp afn float @llvm.[[ICF]].fdot.v4f32(<4 x float> // CHECK: ret float %hlsl.dot float test_dot_float4(float4 p0, float4 p1) { return dot(p0, p1); } -// CHECK: %hlsl.dot = fmul double +// CHECK: %hlsl.dot = fmul reassoc nnan ninf nsz arcp afn double // CHECK: ret double %hlsl.dot double test_dot_double(double p0, double p1) { return dot(p0, p1); } diff --git a/clang/test/CodeGenHLSL/builtins/exp.hlsl b/clang/test/CodeGenHLSL/builtins/exp.hlsl index 3445cfd2e71f60..6ed40ed8f433c2 100644 --- a/clang/test/CodeGenHLSL/builtins/exp.hlsl +++ b/clang/test/CodeGenHLSL/builtins/exp.hlsl @@ -5,48 +5,48 @@ // RUN: -emit-llvm -disable-llvm-passes -o - | \ // RUN: FileCheck %s --check-prefixes=CHECK,NO_HALF -// NATIVE_HALF-LABEL: define noundef half @_Z13test_exp_half -// NATIVE_HALF: %elt.exp = call half @llvm.exp.f16( +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) half @_Z13test_exp_half +// NATIVE_HALF: %elt.exp = call reassoc nnan ninf nsz arcp afn half @llvm.exp.f16( // NATIVE_HALF: ret half %elt.exp -// NO_HALF-LABEL: define noundef float @_Z13test_exp_half -// NO_HALF: %elt.exp = call float @llvm.exp.f32( +// NO_HALF-LABEL: define noundef nofpclass(nan inf) float @_Z13test_exp_half +// NO_HALF: %elt.exp = call reassoc nnan ninf nsz arcp afn float @llvm.exp.f32( // NO_HALF: ret float %elt.exp half test_exp_half(half p0) { return exp(p0); } -// NATIVE_HALF-LABEL: define noundef <2 x half> @_Z14test_exp_half2 -// NATIVE_HALF: %elt.exp = call <2 x half> @llvm.exp.v2f16 +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) <2 x half> @_Z14test_exp_half2 +// NATIVE_HALF: %elt.exp = call reassoc nnan ninf nsz arcp afn <2 x half> @llvm.exp.v2f16 // NATIVE_HALF: ret <2 x half> %elt.exp -// NO_HALF-LABEL: define noundef <2 x float> @_Z14test_exp_half2 -// NO_HALF: %elt.exp = call <2 x float> @llvm.exp.v2f32( +// NO_HALF-LABEL: define noundef nofpclass(nan inf) <2 x float> @_Z14test_exp_half2 +// NO_HALF: %elt.exp = call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.exp.v2f32( // NO_HALF: ret <2 x float> %elt.exp half2 test_exp_half2(half2 p0) { return exp(p0); } -// NATIVE_HALF-LABEL: define noundef <3 x half> @_Z14test_exp_half3 -// NATIVE_HALF: %elt.exp = call <3 x half> @llvm.exp.v3f16 +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) <3 x half> @_Z14test_exp_half3 +// NATIVE_HALF: %elt.exp = call reassoc nnan ninf nsz arcp afn <3 x half> @llvm.exp.v3f16 // NATIVE_HALF: ret <3 x half> %elt.exp -// NO_HALF-LABEL: define noundef <3 x float> @_Z14test_exp_half3 -// NO_HALF: %elt.exp = call <3 x float> @llvm.exp.v3f32( +// NO_HALF-LABEL: define noundef nofpclass(nan inf) <3 x float> @_Z14test_exp_half3 +// NO_HALF: %elt.exp = call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.exp.v3f32( // NO_HALF: ret <3 x float> %elt.exp half3 test_exp_half3(half3 p0) { return exp(p0); } -// NATIVE_HALF-LABEL: define noundef <4 x half> @_Z14test_exp_half4 -// NATIVE_HALF: %elt.exp = call <4 x half> @llvm.exp.v4f16 +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) <4 x half> @_Z14test_exp_half4 +// NATIVE_HALF: %elt.exp = call reassoc nnan ninf nsz arcp afn <4 x half> @llvm.exp.v4f16 // NATIVE_HALF: ret <4 x half> %elt.exp -// NO_HALF-LABEL: define noundef <4 x float> @_Z14test_exp_half4 -// NO_HALF: %elt.exp = call <4 x float> @llvm.exp.v4f32( +// NO_HALF-LABEL: define noundef nofpclass(nan inf) <4 x float> @_Z14test_exp_half4 +// NO_HALF: %elt.exp = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.exp.v4f32( // NO_HALF: ret <4 x float> %elt.exp half4 test_exp_half4(half4 p0) { return exp(p0); } -// CHECK-LABEL: define noundef float @_Z14test_exp_float -// CHECK: %elt.exp = call float @llvm.exp.f32( +// CHECK-LABEL: define noundef nofpclass(nan inf) float @_Z14test_exp_float +// CHECK: %elt.exp = call reassoc nnan ninf nsz arcp afn float @llvm.exp.f32( // CHECK: ret float %elt.exp float test_exp_float(float p0) { return exp(p0); } -// CHECK-LABEL: define noundef <2 x float> @_Z15test_exp_float2 -// CHECK: %elt.exp = call <2 x float> @llvm.exp.v2f32 +// CHECK-LABEL: define noundef nofpclass(nan inf) <2 x float> @_Z15test_exp_float2 +// CHECK: %elt.exp = call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.exp.v2f32 // CHECK: ret <2 x float> %elt.exp float2 test_exp_float2(float2 p0) { return exp(p0); } -// CHECK-LABEL: define noundef <3 x float> @_Z15test_exp_float3 -// CHECK: %elt.exp = call <3 x float> @llvm.exp.v3f32 +// CHECK-LABEL: define noundef nofpclass(nan inf) <3 x float> @_Z15test_exp_float3 +// CHECK: %elt.exp = call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.exp.v3f32 // CHECK: ret <3 x float> %elt.exp float3 test_exp_float3(float3 p0) { return exp(p0); } -// CHECK-LABEL: define noundef <4 x float> @_Z15test_exp_float4 -// CHECK: %elt.exp = call <4 x float> @llvm.exp.v4f32 +// CHECK-LABEL: define noundef nofpclass(nan inf) <4 x float> @_Z15test_exp_float4 +// CHECK: %elt.exp = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.exp.v4f32 // CHECK: ret <4 x float> %elt.exp float4 test_exp_float4(float4 p0) { return exp(p0); } diff --git a/clang/test/CodeGenHLSL/builtins/exp2.hlsl b/clang/test/CodeGenHLSL/builtins/exp2.hlsl index 7bfc897beee16d..b067427e46368a 100644 --- a/clang/test/CodeGenHLSL/builtins/exp2.hlsl +++ b/clang/test/CodeGenHLSL/builtins/exp2.hlsl @@ -5,48 +5,48 @@ // RUN: -emit-llvm -disable-llvm-passes -o - | \ // RUN: FileCheck %s --check-prefixes=CHECK,NO_HALF -// NATIVE_HALF-LABEL: define noundef half @_Z14test_exp2_half -// NATIVE_HALF: %elt.exp2 = call half @llvm.exp2.f16( +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) half @_Z14test_exp2_half +// NATIVE_HALF: %elt.exp2 = call reassoc nnan ninf nsz arcp afn half @llvm.exp2.f16( // NATIVE_HALF: ret half %elt.exp2 -// NO_HALF-LABEL: define noundef float @_Z14test_exp2_half -// NO_HALF: %elt.exp2 = call float @llvm.exp2.f32( +// NO_HALF-LABEL: define noundef nofpclass(nan inf) float @_Z14test_exp2_half +// NO_HALF: %elt.exp2 = call reassoc nnan ninf nsz arcp afn float @llvm.exp2.f32( // NO_HALF: ret float %elt.exp2 half test_exp2_half(half p0) { return exp2(p0); } -// NATIVE_HALF-LABEL: define noundef <2 x half> @_Z15test_exp2_half2 -// NATIVE_HALF: %elt.exp2 = call <2 x half> @llvm.exp2.v2f16 +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) <2 x half> @_Z15test_exp2_half2 +// NATIVE_HALF: %elt.exp2 = call reassoc nnan ninf nsz arcp afn <2 x half> @llvm.exp2.v2f16 // NATIVE_HALF: ret <2 x half> %elt.exp2 -// NO_HALF-LABEL: define noundef <2 x float> @_Z15test_exp2_half2 -// NO_HALF: %elt.exp2 = call <2 x float> @llvm.exp2.v2f32( +// NO_HALF-LABEL: define noundef nofpclass(nan inf) <2 x float> @_Z15test_exp2_half2 +// NO_HALF: %elt.exp2 = call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.exp2.v2f32( // NO_HALF: ret <2 x float> %elt.exp2 half2 test_exp2_half2(half2 p0) { return exp2(p0); } -// NATIVE_HALF-LABEL: define noundef <3 x half> @_Z15test_exp2_half3 -// NATIVE_HALF: %elt.exp2 = call <3 x half> @llvm.exp2.v3f16 +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) <3 x half> @_Z15test_exp2_half3 +// NATIVE_HALF: %elt.exp2 = call reassoc nnan ninf nsz arcp afn <3 x half> @llvm.exp2.v3f16 // NATIVE_HALF: ret <3 x half> %elt.exp2 -// NO_HALF-LABEL: define noundef <3 x float> @_Z15test_exp2_half3 -// NO_HALF: %elt.exp2 = call <3 x float> @llvm.exp2.v3f32( +// NO_HALF-LABEL: define noundef nofpclass(nan inf) <3 x float> @_Z15test_exp2_half3 +// NO_HALF: %elt.exp2 = call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.exp2.v3f32( // NO_HALF: ret <3 x float> %elt.exp2 half3 test_exp2_half3(half3 p0) { return exp2(p0); } -// NATIVE_HALF-LABEL: define noundef <4 x half> @_Z15test_exp2_half4 -// NATIVE_HALF: %elt.exp2 = call <4 x half> @llvm.exp2.v4f16 +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) <4 x half> @_Z15test_exp2_half4 +// NATIVE_HALF: %elt.exp2 = call reassoc nnan ninf nsz arcp afn <4 x half> @llvm.exp2.v4f16 // NATIVE_HALF: ret <4 x half> %elt.exp2 -// NO_HALF-LABEL: define noundef <4 x float> @_Z15test_exp2_half4 -// NO_HALF: %elt.exp2 = call <4 x float> @llvm.exp2.v4f32( +// NO_HALF-LABEL: define noundef nofpclass(nan inf) <4 x float> @_Z15test_exp2_half4 +// NO_HALF: %elt.exp2 = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.exp2.v4f32( // NO_HALF: ret <4 x float> %elt.exp2 half4 test_exp2_half4(half4 p0) { return exp2(p0); } -// CHECK-LABEL: define noundef float @_Z15test_exp2_float -// CHECK: %elt.exp2 = call float @llvm.exp2.f32( +// CHECK-LABEL: define noundef nofpclass(nan inf) float @_Z15test_exp2_float +// CHECK: %elt.exp2 = call reassoc nnan ninf nsz arcp afn float @llvm.exp2.f32( // CHECK: ret float %elt.exp2 float test_exp2_float(float p0) { return exp2(p0); } -// CHECK-LABEL: define noundef <2 x float> @_Z16test_exp2_float2 -// CHECK: %elt.exp2 = call <2 x float> @llvm.exp2.v2f32 +// CHECK-LABEL: define noundef nofpclass(nan inf) <2 x float> @_Z16test_exp2_float2 +// CHECK: %elt.exp2 = call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.exp2.v2f32 // CHECK: ret <2 x float> %elt.exp2 float2 test_exp2_float2(float2 p0) { return exp2(p0); } -// CHECK-LABEL: define noundef <3 x float> @_Z16test_exp2_float3 -// CHECK: %elt.exp2 = call <3 x float> @llvm.exp2.v3f32 +// CHECK-LABEL: define noundef nofpclass(nan inf) <3 x float> @_Z16test_exp2_float3 +// CHECK: %elt.exp2 = call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.exp2.v3f32 // CHECK: ret <3 x float> %elt.exp2 float3 test_exp2_float3(float3 p0) { return exp2(p0); } -// CHECK-LABEL: define noundef <4 x float> @_Z16test_exp2_float4 -// CHECK: %elt.exp2 = call <4 x float> @llvm.exp2.v4f32 +// CHECK-LABEL: define noundef nofpclass(nan inf) <4 x float> @_Z16test_exp2_float4 +// CHECK: %elt.exp2 = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.exp2.v4f32 // CHECK: ret <4 x float> %elt.exp2 float4 test_exp2_float4(float4 p0) { return exp2(p0); } diff --git a/clang/test/CodeGenHLSL/builtins/floor.hlsl b/clang/test/CodeGenHLSL/builtins/floor.hlsl index c2d6f1bcc335c9..f610baeeefd482 100644 --- a/clang/test/CodeGenHLSL/builtins/floor.hlsl +++ b/clang/test/CodeGenHLSL/builtins/floor.hlsl @@ -7,36 +7,36 @@ using hlsl::floor; -// NATIVE_HALF-LABEL: define noundef half @_Z15test_floor_half -// NATIVE_HALF: call half @llvm.floor.f16( -// NO_HALF-LABEL: define noundef float @_Z15test_floor_half -// NO_HALF: call float @llvm.floor.f32(float %0) +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) half @_Z15test_floor_half +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn half @llvm.floor.f16( +// NO_HALF-LABEL: define noundef nofpclass(nan inf) float @_Z15test_floor_half +// NO_HALF: call reassoc nnan ninf nsz arcp afn float @llvm.floor.f32(float %0) half test_floor_half(half p0) { return floor(p0); } -// NATIVE_HALF-LABEL: define noundef <2 x half> @_Z16test_floor_half2 -// NATIVE_HALF: call <2 x half> @llvm.floor.v2f16( -// NO_HALF-LABEL: define noundef <2 x float> @_Z16test_floor_half2 -// NO_HALF: call <2 x float> @llvm.floor.v2f32( +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) <2 x half> @_Z16test_floor_half2 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <2 x half> @llvm.floor.v2f16( +// NO_HALF-LABEL: define noundef nofpclass(nan inf) <2 x float> @_Z16test_floor_half2 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.floor.v2f32( half2 test_floor_half2(half2 p0) { return floor(p0); } -// NATIVE_HALF-LABEL: define noundef <3 x half> @_Z16test_floor_half3 -// NATIVE_HALF: call <3 x half> @llvm.floor.v3f16( -// NO_HALF-LABEL: define noundef <3 x float> @_Z16test_floor_half3 -// NO_HALF: call <3 x float> @llvm.floor.v3f32( +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) <3 x half> @_Z16test_floor_half3 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <3 x half> @llvm.floor.v3f16( +// NO_HALF-LABEL: define noundef nofpclass(nan inf) <3 x float> @_Z16test_floor_half3 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.floor.v3f32( half3 test_floor_half3(half3 p0) { return floor(p0); } -// NATIVE_HALF-LABEL: define noundef <4 x half> @_Z16test_floor_half4 -// NATIVE_HALF: call <4 x half> @llvm.floor.v4f16( -// NO_HALF-LABEL: define noundef <4 x float> @_Z16test_floor_half4 -// NO_HALF: call <4 x float> @llvm.floor.v4f32( +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) <4 x half> @_Z16test_floor_half4 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <4 x half> @llvm.floor.v4f16( +// NO_HALF-LABEL: define noundef nofpclass(nan inf) <4 x float> @_Z16test_floor_half4 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.floor.v4f32( half4 test_floor_half4(half4 p0) { return floor(p0); } -// CHECK-LABEL: define noundef float @_Z16test_floor_float -// CHECK: call float @llvm.floor.f32( +// CHECK-LABEL: define noundef nofpclass(nan inf) float @_Z16test_floor_float +// CHECK: call reassoc nnan ninf nsz arcp afn float @llvm.floor.f32( float test_floor_float(float p0) { return floor(p0); } -// CHECK-LABEL: define noundef <2 x float> @_Z17test_floor_float2 -// CHECK: call <2 x float> @llvm.floor.v2f32( +// CHECK-LABEL: define noundef nofpclass(nan inf) <2 x float> @_Z17test_floor_float2 +// CHECK: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.floor.v2f32( float2 test_floor_float2(float2 p0) { return floor(p0); } -// CHECK-LABEL: define noundef <3 x float> @_Z17test_floor_float3 -// CHECK: call <3 x float> @llvm.floor.v3f32( +// CHECK-LABEL: define noundef nofpclass(nan inf) <3 x float> @_Z17test_floor_float3 +// CHECK: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.floor.v3f32( float3 test_floor_float3(float3 p0) { return floor(p0); } -// CHECK-LABEL: define noundef <4 x float> @_Z17test_floor_float4 -// CHECK: call <4 x float> @llvm.floor.v4f32( +// CHECK-LABEL: define noundef nofpclass(nan inf) <4 x float> @_Z17test_floor_float4 +// CHECK: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.floor.v4f32( float4 test_floor_float4(float4 p0) { return floor(p0); } diff --git a/clang/test/CodeGenHLSL/builtins/fmod.hlsl b/clang/test/CodeGenHLSL/builtins/fmod.hlsl index 708779daaa7b60..b62967114d456e 100644 --- a/clang/test/CodeGenHLSL/builtins/fmod.hlsl +++ b/clang/test/CodeGenHLSL/builtins/fmod.hlsl @@ -5,7 +5,7 @@ // RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \ // RUN: dxil-pc-shadermodel6.3-library %s -fnative-half-type \ // RUN: -emit-llvm -disable-llvm-passes -o - | FileCheck %s \ -// RUN: -DFNATTRS=noundef -DTYPE=half +// RUN: -DFNATTRS="noundef nofpclass(nan inf)" -DTYPE=half // // ---------- No Native Half support test ----------- @@ -13,7 +13,7 @@ // RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \ // RUN: dxil-pc-shadermodel6.3-library %s -emit-llvm -disable-llvm-passes \ // RUN: -o - | FileCheck %s \ -// RUN: -DFNATTRS=noundef -DTYPE=float +// RUN: -DFNATTRS="noundef nofpclass(nan inf)" -DTYPE=float // Spirv target: @@ -23,7 +23,7 @@ // RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \ // RUN: spirv-unknown-vulkan-compute %s -fnative-half-type \ // RUN: -emit-llvm -disable-llvm-passes -o - | FileCheck %s \ -// RUN: -DFNATTRS="spir_func noundef" -DTYPE=half +// RUN: -DFNATTRS="spir_func noundef nofpclass(nan inf)" -DTYPE=half // // ---------- No Native Half support test ----------- @@ -31,47 +31,47 @@ // RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \ // RUN: spirv-unknown-vulkan-compute %s -emit-llvm -disable-llvm-passes \ // RUN: -o - | FileCheck %s \ -// RUN: -DFNATTRS="spir_func noundef" -DTYPE=float +// RUN: -DFNATTRS="spir_func noundef nofpclass(nan inf)" -DTYPE=float // CHECK: define [[FNATTRS]] [[TYPE]] @ -// CHECK: %fmod = frem [[TYPE]] +// CHECK: %fmod = frem reassoc nnan ninf nsz arcp afn [[TYPE]] // CHECK: ret [[TYPE]] %fmod half test_fmod_half(half p0, half p1) { return fmod(p0, p1); } // CHECK: define [[FNATTRS]] <2 x [[TYPE]]> @ -// CHECK: %fmod = frem <2 x [[TYPE]]> +// CHECK: %fmod = frem reassoc nnan ninf nsz arcp afn <2 x [[TYPE]]> // CHECK: ret <2 x [[TYPE]]> %fmod half2 test_fmod_half2(half2 p0, half2 p1) { return fmod(p0, p1); } // CHECK: define [[FNATTRS]] <3 x [[TYPE]]> @ -// CHECK: %fmod = frem <3 x [[TYPE]]> +// CHECK: %fmod = frem reassoc nnan ninf nsz arcp afn <3 x [[TYPE]]> // CHECK: ret <3 x [[TYPE]]> %fmod half3 test_fmod_half3(half3 p0, half3 p1) { return fmod(p0, p1); } // CHECK: define [[FNATTRS]] <4 x [[TYPE]]> @ -// CHECK: %fmod = frem <4 x [[TYPE]]> +// CHECK: %fmod = frem reassoc nnan ninf nsz arcp afn <4 x [[TYPE]]> // CHECK: ret <4 x [[TYPE]]> %fmod half4 test_fmod_half4(half4 p0, half4 p1) { return fmod(p0, p1); } // CHECK: define [[FNATTRS]] float @ -// CHECK: %fmod = frem float +// CHECK: %fmod = frem reassoc nnan ninf nsz arcp afn float // CHECK: ret float %fmod float test_fmod_float(float p0, float p1) { return fmod(p0, p1); } // CHECK: define [[FNATTRS]] <2 x float> @ -// CHECK: %fmod = frem <2 x float> +// CHECK: %fmod = frem reassoc nnan ninf nsz arcp afn <2 x float> // CHECK: ret <2 x float> %fmod float2 test_fmod_float2(float2 p0, float2 p1) { return fmod(p0, p1); } // CHECK: define [[FNATTRS]] <3 x float> @ -// CHECK: %fmod = frem <3 x float> +// CHECK: %fmod = frem reassoc nnan ninf nsz arcp afn <3 x float> // CHECK: ret <3 x float> %fmod float3 test_fmod_float3(float3 p0, float3 p1) { return fmod(p0, p1); } // CHECK: define [[FNATTRS]] <4 x float> @ -// CHECK: %fmod = frem <4 x float> +// CHECK: %fmod = frem reassoc nnan ninf nsz arcp afn <4 x float> // CHECK: ret <4 x float> %fmod float4 test_fmod_float4(float4 p0, float4 p1) { return fmod(p0, p1); } diff --git a/clang/test/CodeGenHLSL/builtins/frac.hlsl b/clang/test/CodeGenHLSL/builtins/frac.hlsl index f0fbba978c0237..7b105ce84359f1 100644 --- a/clang/test/CodeGenHLSL/builtins/frac.hlsl +++ b/clang/test/CodeGenHLSL/builtins/frac.hlsl @@ -2,63 +2,63 @@ // RUN: dxil-pc-shadermodel6.3-library %s -fnative-half-type \ // RUN: -emit-llvm -disable-llvm-passes -o - | FileCheck %s \ // RUN: --check-prefixes=CHECK,NATIVE_HALF \ -// RUN: -DFNATTRS=noundef -DTARGET=dx +// RUN: -DFNATTRS="noundef nofpclass(nan inf)" -DTARGET=dx // RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \ // RUN: dxil-pc-shadermodel6.3-library %s -emit-llvm -disable-llvm-passes \ // RUN: -o - | FileCheck %s --check-prefixes=CHECK,NO_HALF \ -// RUN: -DFNATTRS=noundef -DTARGET=dx +// RUN: -DFNATTRS="noundef nofpclass(nan inf)" -DTARGET=dx // RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \ // RUN: spirv-unknown-vulkan-compute %s -fnative-half-type \ // RUN: -emit-llvm -disable-llvm-passes -o - | FileCheck %s \ // RUN: --check-prefixes=CHECK,NATIVE_HALF \ -// RUN: -DFNATTRS="spir_func noundef" -DTARGET=spv +// RUN: -DFNATTRS="spir_func noundef nofpclass(nan inf)" -DTARGET=spv // RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \ // RUN: spirv-unknown-vulkan-compute %s -emit-llvm -disable-llvm-passes \ // RUN: -o - | FileCheck %s --check-prefixes=CHECK,NO_HALF \ -// RUN: -DFNATTRS="spir_func noundef" -DTARGET=spv +// RUN: -DFNATTRS="spir_func noundef nofpclass(nan inf)" -DTARGET=spv // NATIVE_HALF: define [[FNATTRS]] half @ -// NATIVE_HALF: %hlsl.frac = call half @llvm.[[TARGET]].frac.f16( +// NATIVE_HALF: %hlsl.frac = call reassoc nnan ninf nsz arcp afn half @llvm.[[TARGET]].frac.f16( // NATIVE_HALF: ret half %hlsl.frac // NO_HALF: define [[FNATTRS]] float @ -// NO_HALF: %hlsl.frac = call float @llvm.[[TARGET]].frac.f32( +// NO_HALF: %hlsl.frac = call reassoc nnan ninf nsz arcp afn float @llvm.[[TARGET]].frac.f32( // NO_HALF: ret float %hlsl.frac half test_frac_half(half p0) { return frac(p0); } // NATIVE_HALF: define [[FNATTRS]] <2 x half> @ -// NATIVE_HALF: %hlsl.frac = call <2 x half> @llvm.[[TARGET]].frac.v2f16 +// NATIVE_HALF: %hlsl.frac = call reassoc nnan ninf nsz arcp afn <2 x half> @llvm.[[TARGET]].frac.v2f16 // NATIVE_HALF: ret <2 x half> %hlsl.frac // NO_HALF: define [[FNATTRS]] <2 x float> @ -// NO_HALF: %hlsl.frac = call <2 x float> @llvm.[[TARGET]].frac.v2f32( +// NO_HALF: %hlsl.frac = call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.[[TARGET]].frac.v2f32( // NO_HALF: ret <2 x float> %hlsl.frac half2 test_frac_half2(half2 p0) { return frac(p0); } // NATIVE_HALF: define [[FNATTRS]] <3 x half> @ -// NATIVE_HALF: %hlsl.frac = call <3 x half> @llvm.[[TARGET]].frac.v3f16 +// NATIVE_HALF: %hlsl.frac = call reassoc nnan ninf nsz arcp afn <3 x half> @llvm.[[TARGET]].frac.v3f16 // NATIVE_HALF: ret <3 x half> %hlsl.frac // NO_HALF: define [[FNATTRS]] <3 x float> @ -// NO_HALF: %hlsl.frac = call <3 x float> @llvm.[[TARGET]].frac.v3f32( +// NO_HALF: %hlsl.frac = call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.[[TARGET]].frac.v3f32( // NO_HALF: ret <3 x float> %hlsl.frac half3 test_frac_half3(half3 p0) { return frac(p0); } // NATIVE_HALF: define [[FNATTRS]] <4 x half> @ -// NATIVE_HALF: %hlsl.frac = call <4 x half> @llvm.[[TARGET]].frac.v4f16 +// NATIVE_HALF: %hlsl.frac = call reassoc nnan ninf nsz arcp afn <4 x half> @llvm.[[TARGET]].frac.v4f16 // NATIVE_HALF: ret <4 x half> %hlsl.frac // NO_HALF: define [[FNATTRS]] <4 x float> @ -// NO_HALF: %hlsl.frac = call <4 x float> @llvm.[[TARGET]].frac.v4f32( +// NO_HALF: %hlsl.frac = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.[[TARGET]].frac.v4f32( // NO_HALF: ret <4 x float> %hlsl.frac half4 test_frac_half4(half4 p0) { return frac(p0); } // CHECK: define [[FNATTRS]] float @ -// CHECK: %hlsl.frac = call float @llvm.[[TARGET]].frac.f32( +// CHECK: %hlsl.frac = call reassoc nnan ninf nsz arcp afn float @llvm.[[TARGET]].frac.f32( // CHECK: ret float %hlsl.frac float test_frac_float(float p0) { return frac(p0); } // CHECK: define [[FNATTRS]] <2 x float> @ -// CHECK: %hlsl.frac = call <2 x float> @llvm.[[TARGET]].frac.v2f32 +// CHECK: %hlsl.frac = call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.[[TARGET]].frac.v2f32 // CHECK: ret <2 x float> %hlsl.frac float2 test_frac_float2(float2 p0) { return frac(p0); } // CHECK: define [[FNATTRS]] <3 x float> @ -// CHECK: %hlsl.frac = call <3 x float> @llvm.[[TARGET]].frac.v3f32 +// CHECK: %hlsl.frac = call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.[[TARGET]].frac.v3f32 // CHECK: ret <3 x float> %hlsl.frac float3 test_frac_float3(float3 p0) { return frac(p0); } // CHECK: define [[FNATTRS]] <4 x float> @ -// CHECK: %hlsl.frac = call <4 x float> @llvm.[[TARGET]].frac.v4f32 +// CHECK: %hlsl.frac = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.[[TARGET]].frac.v4f32 // CHECK: ret <4 x float> %hlsl.frac float4 test_frac_float4(float4 p0) { return frac(p0); } diff --git a/clang/test/CodeGenHLSL/builtins/length.hlsl b/clang/test/CodeGenHLSL/builtins/length.hlsl index 1c23b0df04df98..a24f01d275440a 100644 --- a/clang/test/CodeGenHLSL/builtins/length.hlsl +++ b/clang/test/CodeGenHLSL/builtins/length.hlsl @@ -6,36 +6,36 @@ // RUN: dxil-pc-shadermodel6.3-library %s -emit-llvm -disable-llvm-passes \ // RUN: -o - | FileCheck %s --check-prefixes=CHECK,NO_HALF -// NATIVE_HALF: define noundef half @ -// NATIVE_HALF: call half @llvm.fabs.f16(half -// NO_HALF: call float @llvm.fabs.f32(float +// NATIVE_HALF: define noundef nofpclass(nan inf) half @ +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn half @llvm.fabs.f16(half +// NO_HALF: call reassoc nnan ninf nsz arcp afn float @llvm.fabs.f32(float // NATIVE_HALF: ret half // NO_HALF: ret float half test_length_half(half p0) { return length(p0); } -// NATIVE_HALF: define noundef half @ -// NATIVE_HALF: %hlsl.length = call half @llvm.dx.length.v2f16 -// NO_HALF: %hlsl.length = call float @llvm.dx.length.v2f32( +// NATIVE_HALF: define noundef nofpclass(nan inf) half @ +// NATIVE_HALF: %hlsl.length = call reassoc nnan ninf nsz arcp afn half @llvm.dx.length.v2f16 +// NO_HALF: %hlsl.length = call reassoc nnan ninf nsz arcp afn float @llvm.dx.length.v2f32( // NATIVE_HALF: ret half %hlsl.length // NO_HALF: ret float %hlsl.length half test_length_half2(half2 p0) { return length(p0); } -// NATIVE_HALF: define noundef half @ -// NATIVE_HALF: %hlsl.length = call half @llvm.dx.length.v3f16 -// NO_HALF: %hlsl.length = call float @llvm.dx.length.v3f32( +// NATIVE_HALF: define noundef nofpclass(nan inf) half @ +// NATIVE_HALF: %hlsl.length = call reassoc nnan ninf nsz arcp afn half @llvm.dx.length.v3f16 +// NO_HALF: %hlsl.length = call reassoc nnan ninf nsz arcp afn float @llvm.dx.length.v3f32( // NATIVE_HALF: ret half %hlsl.length // NO_HALF: ret float %hlsl.length half test_length_half3(half3 p0) { return length(p0); } -// NATIVE_HALF: define noundef half @ -// NATIVE_HALF: %hlsl.length = call half @llvm.dx.length.v4f16 -// NO_HALF: %hlsl.length = call float @llvm.dx.length.v4f32( +// NATIVE_HALF: define noundef nofpclass(nan inf) half @ +// NATIVE_HALF: %hlsl.length = call reassoc nnan ninf nsz arcp afn half @llvm.dx.length.v4f16 +// NO_HALF: %hlsl.length = call reassoc nnan ninf nsz arcp afn float @llvm.dx.length.v4f32( // NATIVE_HALF: ret half %hlsl.length // NO_HALF: ret float %hlsl.length half test_length_half4(half4 p0) @@ -43,29 +43,29 @@ half test_length_half4(half4 p0) return length(p0); } -// CHECK: define noundef float @ -// CHECK: call float @llvm.fabs.f32(float +// CHECK: define noundef nofpclass(nan inf) float @ +// CHECK: call reassoc nnan ninf nsz arcp afn float @llvm.fabs.f32(float // CHECK: ret float float test_length_float(float p0) { return length(p0); } -// CHECK: define noundef float @ -// CHECK: %hlsl.length = call float @llvm.dx.length.v2f32( +// CHECK: define noundef nofpclass(nan inf) float @ +// CHECK: %hlsl.length = call reassoc nnan ninf nsz arcp afn float @llvm.dx.length.v2f32( // CHECK: ret float %hlsl.length float test_length_float2(float2 p0) { return length(p0); } -// CHECK: define noundef float @ -// CHECK: %hlsl.length = call float @llvm.dx.length.v3f32( +// CHECK: define noundef nofpclass(nan inf) float @ +// CHECK: %hlsl.length = call reassoc nnan ninf nsz arcp afn float @llvm.dx.length.v3f32( // CHECK: ret float %hlsl.length float test_length_float3(float3 p0) { return length(p0); } -// CHECK: define noundef float @ -// CHECK: %hlsl.length = call float @llvm.dx.length.v4f32( +// CHECK: define noundef nofpclass(nan inf) float @ +// CHECK: %hlsl.length = call reassoc nnan ninf nsz arcp afn float @llvm.dx.length.v4f32( // CHECK: ret float %hlsl.length float test_length_float4(float4 p0) { diff --git a/clang/test/CodeGenHLSL/builtins/lerp-builtin.hlsl b/clang/test/CodeGenHLSL/builtins/lerp-builtin.hlsl index f9b3cbcddfb695..c98693f32c834b 100644 --- a/clang/test/CodeGenHLSL/builtins/lerp-builtin.hlsl +++ b/clang/test/CodeGenHLSL/builtins/lerp-builtin.hlsl @@ -1,14 +1,14 @@ // RUN: %clang_cc1 -finclude-default-header -x hlsl -triple dxil-pc-shadermodel6.3-library %s -fnative-half-type -emit-llvm -disable-llvm-passes -o - | FileCheck %s // CHECK-LABEL: builtin_lerp_half_vector -// CHECK: %hlsl.lerp = call <3 x half> @llvm.dx.lerp.v3f16(<3 x half> %0, <3 x half> %1, <3 x half> %2) +// CHECK: %hlsl.lerp = call reassoc nnan ninf nsz arcp afn <3 x half> @llvm.dx.lerp.v3f16(<3 x half> %0, <3 x half> %1, <3 x half> %2) // CHECK: ret <3 x half> %hlsl.lerp half3 builtin_lerp_half_vector (half3 p0) { return __builtin_hlsl_lerp ( p0, p0, p0 ); } // CHECK-LABEL: builtin_lerp_floar_vector -// CHECK: %hlsl.lerp = call <2 x float> @llvm.dx.lerp.v2f32(<2 x float> %0, <2 x float> %1, <2 x float> %2) +// CHECK: %hlsl.lerp = call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.dx.lerp.v2f32(<2 x float> %0, <2 x float> %1, <2 x float> %2) // CHECK: ret <2 x float> %hlsl.lerp float2 builtin_lerp_floar_vector ( float2 p0) { return __builtin_hlsl_lerp ( p0, p0, p0 ); diff --git a/clang/test/CodeGenHLSL/builtins/lerp.hlsl b/clang/test/CodeGenHLSL/builtins/lerp.hlsl index b11046894bd889..d7a7113de48786 100644 --- a/clang/test/CodeGenHLSL/builtins/lerp.hlsl +++ b/clang/test/CodeGenHLSL/builtins/lerp.hlsl @@ -2,57 +2,57 @@ // RUN: dxil-pc-shadermodel6.3-library %s -fnative-half-type \ // RUN: -emit-llvm -disable-llvm-passes -o - | FileCheck %s \ // RUN: --check-prefixes=CHECK,NATIVE_HALF \ -// RUN: -DFNATTRS=noundef -DTARGET=dx +// RUN: -DFNATTRS="noundef nofpclass(nan inf)" -DTARGET=dx // RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \ // RUN: dxil-pc-shadermodel6.3-library %s -emit-llvm -disable-llvm-passes \ // RUN: -o - | FileCheck %s --check-prefixes=CHECK,NO_HALF \ -// RUN: -DFNATTRS=noundef -DTARGET=dx +// RUN: -DFNATTRS="noundef nofpclass(nan inf)" -DTARGET=dx // RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \ // RUN: spirv-unknown-vulkan-compute %s -fnative-half-type \ // RUN: -emit-llvm -disable-llvm-passes -o - | FileCheck %s \ // RUN: --check-prefixes=CHECK,NATIVE_HALF \ -// RUN: -DFNATTRS="spir_func noundef" -DTARGET=spv +// RUN: -DFNATTRS="spir_func noundef nofpclass(nan inf)" -DTARGET=spv // RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \ // RUN: spirv-unknown-vulkan-compute %s -emit-llvm -disable-llvm-passes \ // RUN: -o - | FileCheck %s --check-prefixes=CHECK,NO_HALF \ -// RUN: -DFNATTRS="spir_func noundef" -DTARGET=spv +// RUN: -DFNATTRS="spir_func noundef nofpclass(nan inf)" -DTARGET=spv -// NATIVE_HALF: %hlsl.lerp = call half @llvm.[[TARGET]].lerp.f16(half %{{.*}}, half %{{.*}}, half %{{.*}}) +// NATIVE_HALF: %hlsl.lerp = call reassoc nnan ninf nsz arcp afn half @llvm.[[TARGET]].lerp.f16(half %{{.*}}, half %{{.*}}, half %{{.*}}) // NATIVE_HALF: ret half %hlsl.lerp -// NO_HALF: %hlsl.lerp = call float @llvm.[[TARGET]].lerp.f32(float %{{.*}}, float %{{.*}}, float %{{.*}}) +// NO_HALF: %hlsl.lerp = call reassoc nnan ninf nsz arcp afn float @llvm.[[TARGET]].lerp.f32(float %{{.*}}, float %{{.*}}, float %{{.*}}) // NO_HALF: ret float %hlsl.lerp half test_lerp_half(half p0) { return lerp(p0, p0, p0); } -// NATIVE_HALF: %hlsl.lerp = call <2 x half> @llvm.[[TARGET]].lerp.v2f16(<2 x half> %{{.*}}, <2 x half> %{{.*}}, <2 x half> %{{.*}}) +// NATIVE_HALF: %hlsl.lerp = call reassoc nnan ninf nsz arcp afn <2 x half> @llvm.[[TARGET]].lerp.v2f16(<2 x half> %{{.*}}, <2 x half> %{{.*}}, <2 x half> %{{.*}}) // NATIVE_HALF: ret <2 x half> %hlsl.lerp -// NO_HALF: %hlsl.lerp = call <2 x float> @llvm.[[TARGET]].lerp.v2f32(<2 x float> %{{.*}}, <2 x float> %{{.*}}, <2 x float> %{{.*}}) +// NO_HALF: %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> %{{.*}}) // NO_HALF: ret <2 x float> %hlsl.lerp half2 test_lerp_half2(half2 p0) { return lerp(p0, p0, p0); } -// NATIVE_HALF: %hlsl.lerp = call <3 x half> @llvm.[[TARGET]].lerp.v3f16(<3 x half> %{{.*}}, <3 x half> %{{.*}}, <3 x half> %{{.*}}) +// NATIVE_HALF: %hlsl.lerp = call reassoc nnan ninf nsz arcp afn <3 x half> @llvm.[[TARGET]].lerp.v3f16(<3 x half> %{{.*}}, <3 x half> %{{.*}}, <3 x half> %{{.*}}) // NATIVE_HALF: ret <3 x half> %hlsl.lerp -// NO_HALF: %hlsl.lerp = call <3 x float> @llvm.[[TARGET]].lerp.v3f32(<3 x float> %{{.*}}, <3 x float> %{{.*}}, <3 x float> %{{.*}}) +// NO_HALF: %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> %{{.*}}) // NO_HALF: ret <3 x float> %hlsl.lerp half3 test_lerp_half3(half3 p0) { return lerp(p0, p0, p0); } -// NATIVE_HALF: %hlsl.lerp = call <4 x half> @llvm.[[TARGET]].lerp.v4f16(<4 x half> %{{.*}}, <4 x half> %{{.*}}, <4 x half> %{{.*}}) +// NATIVE_HALF: %hlsl.lerp = call reassoc nnan ninf nsz arcp afn <4 x half> @llvm.[[TARGET]].lerp.v4f16(<4 x half> %{{.*}}, <4 x half> %{{.*}}, <4 x half> %{{.*}}) // NATIVE_HALF: ret <4 x half> %hlsl.lerp -// NO_HALF: %hlsl.lerp = call <4 x float> @llvm.[[TARGET]].lerp.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}) +// NO_HALF: %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> %{{.*}}) // NO_HALF: ret <4 x float> %hlsl.lerp half4 test_lerp_half4(half4 p0) { return lerp(p0, p0, p0); } -// CHECK: %hlsl.lerp = call float @llvm.[[TARGET]].lerp.f32(float %{{.*}}, float %{{.*}}, float %{{.*}}) +// CHECK: %hlsl.lerp = call reassoc nnan ninf nsz arcp afn float @llvm.[[TARGET]].lerp.f32(float %{{.*}}, float %{{.*}}, float %{{.*}}) // CHECK: ret float %hlsl.lerp float test_lerp_float(float p0) { return lerp(p0, p0, p0); } -// CHECK: %hlsl.lerp = call <2 x float> @llvm.[[TARGET]].lerp.v2f32(<2 x float> %{{.*}}, <2 x float> %{{.*}}, <2 x float> %{{.*}}) +// 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> %{{.*}}) // CHECK: ret <2 x float> %hlsl.lerp float2 test_lerp_float2(float2 p0) { return lerp(p0, p0, p0); } -// CHECK: %hlsl.lerp = call <3 x float> @llvm.[[TARGET]].lerp.v3f32(<3 x float> %{{.*}}, <3 x float> %{{.*}}, <3 x float> %{{.*}}) +// 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> %{{.*}}) // CHECK: ret <3 x float> %hlsl.lerp float3 test_lerp_float3(float3 p0) { return lerp(p0, p0, p0); } -// CHECK: %hlsl.lerp = call <4 x float> @llvm.[[TARGET]].lerp.v4f32(<4 x float> %{{.*}}, <4 x float> %{{.*}}, <4 x float> %{{.*}}) +// 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> %{{.*}}) // CHECK: ret <4 x float> %hlsl.lerp float4 test_lerp_float4(float4 p0) { return lerp(p0, p0, p0); } diff --git a/clang/test/CodeGenHLSL/builtins/log.hlsl b/clang/test/CodeGenHLSL/builtins/log.hlsl index 71ce502eb8c4a8..e489939594a53c 100644 --- a/clang/test/CodeGenHLSL/builtins/log.hlsl +++ b/clang/test/CodeGenHLSL/builtins/log.hlsl @@ -5,36 +5,36 @@ // RUN: -emit-llvm -disable-llvm-passes -o - | \ // RUN: FileCheck %s --check-prefixes=CHECK,NO_HALF -// NATIVE_HALF-LABEL: define noundef half @_Z13test_log_half -// NATIVE_HALF: call half @llvm.log.f16( -// NO_HALF-LABEL: define noundef float @_Z13test_log_half -// NO_HALF: call float @llvm.log.f32( +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) half @_Z13test_log_half +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn half @llvm.log.f16( +// NO_HALF-LABEL: define noundef nofpclass(nan inf) float @_Z13test_log_half +// NO_HALF: call reassoc nnan ninf nsz arcp afn float @llvm.log.f32( half test_log_half(half p0) { return log(p0); } -// NATIVE_HALF-LABEL: define noundef <2 x half> @_Z14test_log_half2 -// NATIVE_HALF: call <2 x half> @llvm.log.v2f16 -// NO_HALF-LABEL: define noundef <2 x float> @_Z14test_log_half2 -// NO_HALF: call <2 x float> @llvm.log.v2f32( +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) <2 x half> @_Z14test_log_half2 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <2 x half> @llvm.log.v2f16 +// NO_HALF-LABEL: define noundef nofpclass(nan inf) <2 x float> @_Z14test_log_half2 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.log.v2f32( half2 test_log_half2(half2 p0) { return log(p0); } -// NATIVE_HALF-LABEL: define noundef <3 x half> @_Z14test_log_half3 -// NATIVE_HALF: call <3 x half> @llvm.log.v3f16 -// NO_HALF-LABEL: define noundef <3 x float> @_Z14test_log_half3 -// NO_HALF: call <3 x float> @llvm.log.v3f32( +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) <3 x half> @_Z14test_log_half3 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <3 x half> @llvm.log.v3f16 +// NO_HALF-LABEL: define noundef nofpclass(nan inf) <3 x float> @_Z14test_log_half3 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.log.v3f32( half3 test_log_half3(half3 p0) { return log(p0); } -// NATIVE_HALF-LABEL: define noundef <4 x half> @_Z14test_log_half4 -// NATIVE_HALF: call <4 x half> @llvm.log.v4f16 -// NO_HALF-LABEL: define noundef <4 x float> @_Z14test_log_half4 -// NO_HALF: call <4 x float> @llvm.log.v4f32( +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) <4 x half> @_Z14test_log_half4 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <4 x half> @llvm.log.v4f16 +// NO_HALF-LABEL: define noundef nofpclass(nan inf) <4 x float> @_Z14test_log_half4 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.log.v4f32( half4 test_log_half4(half4 p0) { return log(p0); } -// CHECK-LABEL: define noundef float @_Z14test_log_float -// CHECK: call float @llvm.log.f32( +// CHECK-LABEL: define noundef nofpclass(nan inf) float @_Z14test_log_float +// CHECK: call reassoc nnan ninf nsz arcp afn float @llvm.log.f32( float test_log_float(float p0) { return log(p0); } -// CHECK-LABEL: define noundef <2 x float> @_Z15test_log_float2 -// CHECK: call <2 x float> @llvm.log.v2f32 +// CHECK-LABEL: define noundef nofpclass(nan inf) <2 x float> @_Z15test_log_float2 +// CHECK: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.log.v2f32 float2 test_log_float2(float2 p0) { return log(p0); } -// CHECK-LABEL: define noundef <3 x float> @_Z15test_log_float3 -// CHECK: call <3 x float> @llvm.log.v3f32 +// CHECK-LABEL: define noundef nofpclass(nan inf) <3 x float> @_Z15test_log_float3 +// CHECK: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.log.v3f32 float3 test_log_float3(float3 p0) { return log(p0); } -// CHECK-LABEL: define noundef <4 x float> @_Z15test_log_float4 -// CHECK: call <4 x float> @llvm.log.v4f32 +// CHECK-LABEL: define noundef nofpclass(nan inf) <4 x float> @_Z15test_log_float4 +// CHECK: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.log.v4f32 float4 test_log_float4(float4 p0) { return log(p0); } diff --git a/clang/test/CodeGenHLSL/builtins/log10.hlsl b/clang/test/CodeGenHLSL/builtins/log10.hlsl index e15b6f5747b0a8..37c8e837c45a3e 100644 --- a/clang/test/CodeGenHLSL/builtins/log10.hlsl +++ b/clang/test/CodeGenHLSL/builtins/log10.hlsl @@ -5,36 +5,36 @@ // RUN: -emit-llvm -disable-llvm-passes -o - | \ // RUN: FileCheck %s --check-prefixes=CHECK,NO_HALF -// NATIVE_HALF-LABEL: define noundef half @_Z15test_log10_half -// NATIVE_HALF: call half @llvm.log10.f16( -// NO_HALF-LABEL: define noundef float @_Z15test_log10_half -// NO_HALF: call float @llvm.log10.f32( +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) half @_Z15test_log10_half +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn half @llvm.log10.f16( +// NO_HALF-LABEL: define noundef nofpclass(nan inf) float @_Z15test_log10_half +// NO_HALF: call reassoc nnan ninf nsz arcp afn float @llvm.log10.f32( half test_log10_half(half p0) { return log10(p0); } -// NATIVE_HALF-LABEL: define noundef <2 x half> @_Z16test_log10_half2 -// NATIVE_HALF: call <2 x half> @llvm.log10.v2f16 -// NO_HALF-LABEL: define noundef <2 x float> @_Z16test_log10_half2 -// NO_HALF: call <2 x float> @llvm.log10.v2f32( +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) <2 x half> @_Z16test_log10_half2 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <2 x half> @llvm.log10.v2f16 +// NO_HALF-LABEL: define noundef nofpclass(nan inf) <2 x float> @_Z16test_log10_half2 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.log10.v2f32( half2 test_log10_half2(half2 p0) { return log10(p0); } -// NATIVE_HALF-LABEL: define noundef <3 x half> @_Z16test_log10_half3 -// NATIVE_HALF: call <3 x half> @llvm.log10.v3f16 -// NO_HALF-LABEL: define noundef <3 x float> @_Z16test_log10_half3 -// NO_HALF: call <3 x float> @llvm.log10.v3f32( +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) <3 x half> @_Z16test_log10_half3 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <3 x half> @llvm.log10.v3f16 +// NO_HALF-LABEL: define noundef nofpclass(nan inf) <3 x float> @_Z16test_log10_half3 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.log10.v3f32( half3 test_log10_half3(half3 p0) { return log10(p0); } -// NATIVE_HALF-LABEL: define noundef <4 x half> @_Z16test_log10_half4 -// NATIVE_HALF: call <4 x half> @llvm.log10.v4f16 -// NO_HALF-LABEL: define noundef <4 x float> @_Z16test_log10_half4 -// NO_HALF: call <4 x float> @llvm.log10.v4f32( +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) <4 x half> @_Z16test_log10_half4 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <4 x half> @llvm.log10.v4f16 +// NO_HALF-LABEL: define noundef nofpclass(nan inf) <4 x float> @_Z16test_log10_half4 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.log10.v4f32( half4 test_log10_half4(half4 p0) { return log10(p0); } -// CHECK-LABEL: define noundef float @_Z16test_log10_float -// CHECK: call float @llvm.log10.f32( +// CHECK-LABEL: define noundef nofpclass(nan inf) float @_Z16test_log10_float +// CHECK: call reassoc nnan ninf nsz arcp afn float @llvm.log10.f32( float test_log10_float(float p0) { return log10(p0); } -// CHECK-LABEL: define noundef <2 x float> @_Z17test_log10_float2 -// CHECK: call <2 x float> @llvm.log10.v2f32 +// CHECK-LABEL: define noundef nofpclass(nan inf) <2 x float> @_Z17test_log10_float2 +// CHECK: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.log10.v2f32 float2 test_log10_float2(float2 p0) { return log10(p0); } -// CHECK-LABEL: define noundef <3 x float> @_Z17test_log10_float3 -// CHECK: call <3 x float> @llvm.log10.v3f32 +// CHECK-LABEL: define noundef nofpclass(nan inf) <3 x float> @_Z17test_log10_float3 +// CHECK: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.log10.v3f32 float3 test_log10_float3(float3 p0) { return log10(p0); } -// CHECK-LABEL: define noundef <4 x float> @_Z17test_log10_float4 -// CHECK: call <4 x float> @llvm.log10.v4f32 +// CHECK-LABEL: define noundef nofpclass(nan inf) <4 x float> @_Z17test_log10_float4 +// CHECK: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.log10.v4f32 float4 test_log10_float4(float4 p0) { return log10(p0); } diff --git a/clang/test/CodeGenHLSL/builtins/log2.hlsl b/clang/test/CodeGenHLSL/builtins/log2.hlsl index 575761a5f637c0..5159d5bb0fa4e3 100644 --- a/clang/test/CodeGenHLSL/builtins/log2.hlsl +++ b/clang/test/CodeGenHLSL/builtins/log2.hlsl @@ -5,36 +5,36 @@ // RUN: -emit-llvm -disable-llvm-passes -o - | \ // RUN: FileCheck %s --check-prefixes=CHECK,NO_HALF -// NATIVE_HALF-LABEL: define noundef half @_Z14test_log2_half -// NATIVE_HALF: call half @llvm.log2.f16( -// NO_HALF-LABEL: define noundef float @_Z14test_log2_half -// NO_HALF: call float @llvm.log2.f32( +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) half @_Z14test_log2_half +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn half @llvm.log2.f16( +// NO_HALF-LABEL: define noundef nofpclass(nan inf) float @_Z14test_log2_half +// NO_HALF: call reassoc nnan ninf nsz arcp afn float @llvm.log2.f32( half test_log2_half(half p0) { return log2(p0); } -// NATIVE_HALF-LABEL: define noundef <2 x half> @_Z15test_log2_half2 -// NATIVE_HALF: call <2 x half> @llvm.log2.v2f16 -// NO_HALF-LABEL: define noundef <2 x float> @_Z15test_log2_half2 -// NO_HALF: call <2 x float> @llvm.log2.v2f32( +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) <2 x half> @_Z15test_log2_half2 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <2 x half> @llvm.log2.v2f16 +// NO_HALF-LABEL: define noundef nofpclass(nan inf) <2 x float> @_Z15test_log2_half2 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.log2.v2f32( half2 test_log2_half2(half2 p0) { return log2(p0); } -// NATIVE_HALF-LABEL: define noundef <3 x half> @_Z15test_log2_half3 -// NATIVE_HALF: call <3 x half> @llvm.log2.v3f16 -// NO_HALF-LABEL: define noundef <3 x float> @_Z15test_log2_half3 -// NO_HALF: call <3 x float> @llvm.log2.v3f32( +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) <3 x half> @_Z15test_log2_half3 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <3 x half> @llvm.log2.v3f16 +// NO_HALF-LABEL: define noundef nofpclass(nan inf) <3 x float> @_Z15test_log2_half3 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.log2.v3f32( half3 test_log2_half3(half3 p0) { return log2(p0); } -// NATIVE_HALF-LABEL: define noundef <4 x half> @_Z15test_log2_half4 -// NATIVE_HALF: call <4 x half> @llvm.log2.v4f16 -// NO_HALF-LABEL: define noundef <4 x float> @_Z15test_log2_half4 -// NO_HALF: call <4 x float> @llvm.log2.v4f32( +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) <4 x half> @_Z15test_log2_half4 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <4 x half> @llvm.log2.v4f16 +// NO_HALF-LABEL: define noundef nofpclass(nan inf) <4 x float> @_Z15test_log2_half4 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.log2.v4f32( half4 test_log2_half4(half4 p0) { return log2(p0); } -// CHECK-LABEL: define noundef float @_Z15test_log2_float -// CHECK: call float @llvm.log2.f32( +// CHECK-LABEL: define noundef nofpclass(nan inf) float @_Z15test_log2_float +// CHECK: call reassoc nnan ninf nsz arcp afn float @llvm.log2.f32( float test_log2_float(float p0) { return log2(p0); } -// CHECK-LABEL: define noundef <2 x float> @_Z16test_log2_float2 -// CHECK: call <2 x float> @llvm.log2.v2f32 +// CHECK-LABEL: define noundef nofpclass(nan inf) <2 x float> @_Z16test_log2_float2 +// CHECK: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.log2.v2f32 float2 test_log2_float2(float2 p0) { return log2(p0); } -// CHECK-LABEL: define noundef <3 x float> @_Z16test_log2_float3 -// CHECK: call <3 x float> @llvm.log2.v3f32 +// CHECK-LABEL: define noundef nofpclass(nan inf) <3 x float> @_Z16test_log2_float3 +// CHECK: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.log2.v3f32 float3 test_log2_float3(float3 p0) { return log2(p0); } -// CHECK-LABEL: define noundef <4 x float> @_Z16test_log2_float4 -// CHECK: call <4 x float> @llvm.log2.v4f32 +// CHECK-LABEL: define noundef nofpclass(nan inf) <4 x float> @_Z16test_log2_float4 +// CHECK: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.log2.v4f32 float4 test_log2_float4(float4 p0) { return log2(p0); } diff --git a/clang/test/CodeGenHLSL/builtins/mad.hlsl b/clang/test/CodeGenHLSL/builtins/mad.hlsl index 265a2552c80fb4..e764e20748d585 100644 --- a/clang/test/CodeGenHLSL/builtins/mad.hlsl +++ b/clang/test/CodeGenHLSL/builtins/mad.hlsl @@ -67,104 +67,104 @@ int16_t4 test_mad_int16_t4(int16_t4 p0, int16_t4 p1, int16_t4 p2) { return mad(p // NATIVE_HALF: %[[p0:.*]] = load half, ptr %p0.addr, align 2 // NATIVE_HALF: %[[p1:.*]] = load half, ptr %p1.addr, align 2 // NATIVE_HALF: %[[p2:.*]] = load half, ptr %p2.addr, align 2 -// NATIVE_HALF: %hlsl.fmad = call half @llvm.fmuladd.f16(half %[[p0]], half %[[p1]], half %[[p2]]) +// NATIVE_HALF: %hlsl.fmad = call reassoc nnan ninf nsz arcp afn half @llvm.fmuladd.f16(half %[[p0]], half %[[p1]], half %[[p2]]) // NATIVE_HALF: ret half %hlsl.fmad // NO_HALF: %[[p0:.*]] = load float, ptr %p0.addr, align 4 // NO_HALF: %[[p1:.*]] = load float, ptr %p1.addr, align 4 // NO_HALF: %[[p2:.*]] = load float, ptr %p2.addr, align 4 -// NO_HALF: %hlsl.fmad = call float @llvm.fmuladd.f32(float %[[p0]], float %[[p1]], float %[[p2]]) +// NO_HALF: %hlsl.fmad = call reassoc nnan ninf nsz arcp afn float @llvm.fmuladd.f32(float %[[p0]], float %[[p1]], float %[[p2]]) // NO_HALF: ret float %hlsl.fmad half test_mad_half(half p0, half p1, half p2) { return mad(p0, p1, p2); } // NATIVE_HALF: %[[p0:.*]] = load <2 x half>, ptr %p0.addr, align 4 // NATIVE_HALF: %[[p1:.*]] = load <2 x half>, ptr %p1.addr, align 4 // NATIVE_HALF: %[[p2:.*]] = load <2 x half>, ptr %p2.addr, align 4 -// NATIVE_HALF: %hlsl.fmad = call <2 x half> @llvm.fmuladd.v2f16(<2 x half> %[[p0]], <2 x half> %[[p1]], <2 x half> %[[p2]]) +// NATIVE_HALF: %hlsl.fmad = call reassoc nnan ninf nsz arcp afn <2 x half> @llvm.fmuladd.v2f16(<2 x half> %[[p0]], <2 x half> %[[p1]], <2 x half> %[[p2]]) // NATIVE_HALF: ret <2 x half> %hlsl.fmad // NO_HALF: %[[p0:.*]] = load <2 x float>, ptr %p0.addr, align 8 // NO_HALF: %[[p1:.*]] = load <2 x float>, ptr %p1.addr, align 8 // NO_HALF: %[[p2:.*]] = load <2 x float>, ptr %p2.addr, align 8 -// NO_HALF: %hlsl.fmad = call <2 x float> @llvm.fmuladd.v2f32(<2 x float> %[[p0]], <2 x float> %[[p1]], <2 x float> %[[p2]]) +// NO_HALF: %hlsl.fmad = call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.fmuladd.v2f32(<2 x float> %[[p0]], <2 x float> %[[p1]], <2 x float> %[[p2]]) // NO_HALF: ret <2 x float> %hlsl.fmad half2 test_mad_half2(half2 p0, half2 p1, half2 p2) { return mad(p0, p1, p2); } // NATIVE_HALF: %[[p0:.*]] = load <3 x half>, ptr %p0.addr, align 8 // NATIVE_HALF: %[[p1:.*]] = load <3 x half>, ptr %p1.addr, align 8 // NATIVE_HALF: %[[p2:.*]] = load <3 x half>, ptr %p2.addr, align 8 -// NATIVE_HALF: %hlsl.fmad = call <3 x half> @llvm.fmuladd.v3f16(<3 x half> %[[p0]], <3 x half> %[[p1]], <3 x half> %[[p2]]) +// NATIVE_HALF: %hlsl.fmad = call reassoc nnan ninf nsz arcp afn <3 x half> @llvm.fmuladd.v3f16(<3 x half> %[[p0]], <3 x half> %[[p1]], <3 x half> %[[p2]]) // NATIVE_HALF: ret <3 x half> %hlsl.fmad // NO_HALF: %[[p0:.*]] = load <3 x float>, ptr %p0.addr, align 16 // NO_HALF: %[[p1:.*]] = load <3 x float>, ptr %p1.addr, align 16 // NO_HALF: %[[p2:.*]] = load <3 x float>, ptr %p2.addr, align 16 -// NO_HALF: %hlsl.fmad = call <3 x float> @llvm.fmuladd.v3f32(<3 x float> %[[p0]], <3 x float> %[[p1]], <3 x float> %[[p2]]) +// NO_HALF: %hlsl.fmad = call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.fmuladd.v3f32(<3 x float> %[[p0]], <3 x float> %[[p1]], <3 x float> %[[p2]]) // NO_HALF: ret <3 x float> %hlsl.fmad half3 test_mad_half3(half3 p0, half3 p1, half3 p2) { return mad(p0, p1, p2); } // NATIVE_HALF: %[[p0:.*]] = load <4 x half>, ptr %p0.addr, align 8 // NATIVE_HALF: %[[p1:.*]] = load <4 x half>, ptr %p1.addr, align 8 // NATIVE_HALF: %[[p2:.*]] = load <4 x half>, ptr %p2.addr, align 8 -// NATIVE_HALF: %hlsl.fmad = call <4 x half> @llvm.fmuladd.v4f16(<4 x half> %[[p0]], <4 x half> %[[p1]], <4 x half> %[[p2]]) +// NATIVE_HALF: %hlsl.fmad = call reassoc nnan ninf nsz arcp afn <4 x half> @llvm.fmuladd.v4f16(<4 x half> %[[p0]], <4 x half> %[[p1]], <4 x half> %[[p2]]) // NATIVE_HALF: ret <4 x half> %hlsl.fmad // NO_HALF: %[[p0:.*]] = load <4 x float>, ptr %p0.addr, align 16 // NO_HALF: %[[p1:.*]] = load <4 x float>, ptr %p1.addr, align 16 // NO_HALF: %[[p2:.*]] = load <4 x float>, ptr %p2.addr, align 16 -// NO_HALF: %hlsl.fmad = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %[[p0]], <4 x float> %[[p1]], <4 x float> %[[p2]]) +// NO_HALF: %hlsl.fmad = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.fmuladd.v4f32(<4 x float> %[[p0]], <4 x float> %[[p1]], <4 x float> %[[p2]]) // NO_HALF: ret <4 x float> %hlsl.fmad half4 test_mad_half4(half4 p0, half4 p1, half4 p2) { return mad(p0, p1, p2); } // CHECK: %[[p0:.*]] = load float, ptr %p0.addr, align 4 // CHECK: %[[p1:.*]] = load float, ptr %p1.addr, align 4 // CHECK: %[[p2:.*]] = load float, ptr %p2.addr, align 4 -// CHECK: %hlsl.fmad = call float @llvm.fmuladd.f32(float %[[p0]], float %[[p1]], float %[[p2]]) +// CHECK: %hlsl.fmad = call reassoc nnan ninf nsz arcp afn float @llvm.fmuladd.f32(float %[[p0]], float %[[p1]], float %[[p2]]) // CHECK: ret float %hlsl.fmad float test_mad_float(float p0, float p1, float p2) { return mad(p0, p1, p2); } // CHECK: %[[p0:.*]] = load <2 x float>, ptr %p0.addr, align 8 // CHECK: %[[p1:.*]] = load <2 x float>, ptr %p1.addr, align 8 // CHECK: %[[p2:.*]] = load <2 x float>, ptr %p2.addr, align 8 -// CHECK: %hlsl.fmad = call <2 x float> @llvm.fmuladd.v2f32(<2 x float> %[[p0]], <2 x float> %[[p1]], <2 x float> %[[p2]]) +// CHECK: %hlsl.fmad = call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.fmuladd.v2f32(<2 x float> %[[p0]], <2 x float> %[[p1]], <2 x float> %[[p2]]) // CHECK: ret <2 x float> %hlsl.fmad float2 test_mad_float2(float2 p0, float2 p1, float2 p2) { return mad(p0, p1, p2); } // CHECK: %[[p0:.*]] = load <3 x float>, ptr %p0.addr, align 16 // CHECK: %[[p1:.*]] = load <3 x float>, ptr %p1.addr, align 16 // CHECK: %[[p2:.*]] = load <3 x float>, ptr %p2.addr, align 16 -// CHECK: %hlsl.fmad = call <3 x float> @llvm.fmuladd.v3f32(<3 x float> %[[p0]], <3 x float> %[[p1]], <3 x float> %[[p2]]) +// CHECK: %hlsl.fmad = call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.fmuladd.v3f32(<3 x float> %[[p0]], <3 x float> %[[p1]], <3 x float> %[[p2]]) // CHECK: ret <3 x float> %hlsl.fmad float3 test_mad_float3(float3 p0, float3 p1, float3 p2) { return mad(p0, p1, p2); } // CHECK: %[[p0:.*]] = load <4 x float>, ptr %p0.addr, align 16 // CHECK: %[[p1:.*]] = load <4 x float>, ptr %p1.addr, align 16 // CHECK: %[[p2:.*]] = load <4 x float>, ptr %p2.addr, align 16 -// CHECK: %hlsl.fmad = call <4 x float> @llvm.fmuladd.v4f32(<4 x float> %[[p0]], <4 x float> %[[p1]], <4 x float> %[[p2]]) +// CHECK: %hlsl.fmad = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.fmuladd.v4f32(<4 x float> %[[p0]], <4 x float> %[[p1]], <4 x float> %[[p2]]) // CHECK: ret <4 x float> %hlsl.fmad float4 test_mad_float4(float4 p0, float4 p1, float4 p2) { return mad(p0, p1, p2); } // CHECK: %[[p0:.*]] = load double, ptr %p0.addr, align 8 // CHECK: %[[p1:.*]] = load double, ptr %p1.addr, align 8 // CHECK: %[[p2:.*]] = load double, ptr %p2.addr, align 8 -// CHECK: %hlsl.fmad = call double @llvm.fmuladd.f64(double %[[p0]], double %[[p1]], double %[[p2]]) +// CHECK: %hlsl.fmad = call reassoc nnan ninf nsz arcp afn double @llvm.fmuladd.f64(double %[[p0]], double %[[p1]], double %[[p2]]) // CHECK: ret double %hlsl.fmad double test_mad_double(double p0, double p1, double p2) { return mad(p0, p1, p2); } // CHECK: %[[p0:.*]] = load <2 x double>, ptr %p0.addr, align 16 // CHECK: %[[p1:.*]] = load <2 x double>, ptr %p1.addr, align 16 // CHECK: %[[p2:.*]] = load <2 x double>, ptr %p2.addr, align 16 -// CHECK: %hlsl.fmad = call <2 x double> @llvm.fmuladd.v2f64(<2 x double> %[[p0]], <2 x double> %[[p1]], <2 x double> %[[p2]]) +// CHECK: %hlsl.fmad = call reassoc nnan ninf nsz arcp afn <2 x double> @llvm.fmuladd.v2f64(<2 x double> %[[p0]], <2 x double> %[[p1]], <2 x double> %[[p2]]) // CHECK: ret <2 x double> %hlsl.fmad double2 test_mad_double2(double2 p0, double2 p1, double2 p2) { return mad(p0, p1, p2); } // CHECK: %[[p0:.*]] = load <3 x double>, ptr %p0.addr, align 32 // CHECK: %[[p1:.*]] = load <3 x double>, ptr %p1.addr, align 32 // CHECK: %[[p2:.*]] = load <3 x double>, ptr %p2.addr, align 32 -// CHECK: %hlsl.fmad = call <3 x double> @llvm.fmuladd.v3f64(<3 x double> %[[p0]], <3 x double> %[[p1]], <3 x double> %[[p2]]) +// CHECK: %hlsl.fmad = call reassoc nnan ninf nsz arcp afn <3 x double> @llvm.fmuladd.v3f64(<3 x double> %[[p0]], <3 x double> %[[p1]], <3 x double> %[[p2]]) // CHECK: ret <3 x double> %hlsl.fmad double3 test_mad_double3(double3 p0, double3 p1, double3 p2) { return mad(p0, p1, p2); } // CHECK: %[[p0:.*]] = load <4 x double>, ptr %p0.addr, align 32 // CHECK: %[[p1:.*]] = load <4 x double>, ptr %p1.addr, align 32 // CHECK: %[[p2:.*]] = load <4 x double>, ptr %p2.addr, align 32 -// CHECK: %hlsl.fmad = call <4 x double> @llvm.fmuladd.v4f64(<4 x double> %[[p0]], <4 x double> %[[p1]], <4 x double> %[[p2]]) +// CHECK: %hlsl.fmad = call reassoc nnan ninf nsz arcp afn <4 x double> @llvm.fmuladd.v4f64(<4 x double> %[[p0]], <4 x double> %[[p1]], <4 x double> %[[p2]]) // CHECK: ret <4 x double> %hlsl.fmad double4 test_mad_double4(double4 p0, double4 p1, double4 p2) { return mad(p0, p1, p2); } diff --git a/clang/test/CodeGenHLSL/builtins/max.hlsl b/clang/test/CodeGenHLSL/builtins/max.hlsl index d462fda2ccb09f..0b767335556ee5 100644 --- a/clang/test/CodeGenHLSL/builtins/max.hlsl +++ b/clang/test/CodeGenHLSL/builtins/max.hlsl @@ -85,49 +85,49 @@ uint64_t3 test_max_ulong3(uint64_t3 p0, uint64_t3 p1) { return max(p0, p1); } // CHECK: call <4 x i64> @llvm.umax.v4i64 uint64_t4 test_max_ulong4(uint64_t4 p0, uint64_t4 p1) { return max(p0, p1); } -// NATIVE_HALF-LABEL: define noundef half @_Z13test_max_half -// NATIVE_HALF: call half @llvm.maxnum.f16( -// NO_HALF-LABEL: define noundef float @_Z13test_max_half -// NO_HALF: call float @llvm.maxnum.f32( +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) half @_Z13test_max_half +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn half @llvm.maxnum.f16( +// NO_HALF-LABEL: define noundef nofpclass(nan inf) float @_Z13test_max_half +// NO_HALF: call reassoc nnan ninf nsz arcp afn float @llvm.maxnum.f32( half test_max_half(half p0, half p1) { return max(p0, p1); } -// NATIVE_HALF-LABEL: define noundef <2 x half> @_Z14test_max_half2 -// NATIVE_HALF: call <2 x half> @llvm.maxnum.v2f16 -// NO_HALF-LABEL: define noundef <2 x float> @_Z14test_max_half2 -// NO_HALF: call <2 x float> @llvm.maxnum.v2f32( +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) <2 x half> @_Z14test_max_half2 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <2 x half> @llvm.maxnum.v2f16 +// NO_HALF-LABEL: define noundef nofpclass(nan inf) <2 x float> @_Z14test_max_half2 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.maxnum.v2f32( half2 test_max_half2(half2 p0, half2 p1) { return max(p0, p1); } -// NATIVE_HALF-LABEL: define noundef <3 x half> @_Z14test_max_half3 -// NATIVE_HALF: call <3 x half> @llvm.maxnum.v3f16 -// NO_HALF-LABEL: define noundef <3 x float> @_Z14test_max_half3 -// NO_HALF: call <3 x float> @llvm.maxnum.v3f32( +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) <3 x half> @_Z14test_max_half3 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <3 x half> @llvm.maxnum.v3f16 +// NO_HALF-LABEL: define noundef nofpclass(nan inf) <3 x float> @_Z14test_max_half3 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.maxnum.v3f32( half3 test_max_half3(half3 p0, half3 p1) { return max(p0, p1); } -// NATIVE_HALF-LABEL: define noundef <4 x half> @_Z14test_max_half4 -// NATIVE_HALF: call <4 x half> @llvm.maxnum.v4f16 -// NO_HALF-LABEL: define noundef <4 x float> @_Z14test_max_half4 -// NO_HALF: call <4 x float> @llvm.maxnum.v4f32( +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) <4 x half> @_Z14test_max_half4 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <4 x half> @llvm.maxnum.v4f16 +// NO_HALF-LABEL: define noundef nofpclass(nan inf) <4 x float> @_Z14test_max_half4 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.maxnum.v4f32( half4 test_max_half4(half4 p0, half4 p1) { return max(p0, p1); } -// CHECK-LABEL: define noundef float @_Z14test_max_float -// CHECK: call float @llvm.maxnum.f32( +// CHECK-LABEL: define noundef nofpclass(nan inf) float @_Z14test_max_float +// CHECK: call reassoc nnan ninf nsz arcp afn float @llvm.maxnum.f32( float test_max_float(float p0, float p1) { return max(p0, p1); } -// CHECK-LABEL: define noundef <2 x float> @_Z15test_max_float2 -// CHECK: call <2 x float> @llvm.maxnum.v2f32 +// CHECK-LABEL: define noundef nofpclass(nan inf) <2 x float> @_Z15test_max_float2 +// CHECK: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.maxnum.v2f32 float2 test_max_float2(float2 p0, float2 p1) { return max(p0, p1); } -// CHECK-LABEL: define noundef <3 x float> @_Z15test_max_float3 -// CHECK: call <3 x float> @llvm.maxnum.v3f32 +// CHECK-LABEL: define noundef nofpclass(nan inf) <3 x float> @_Z15test_max_float3 +// CHECK: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.maxnum.v3f32 float3 test_max_float3(float3 p0, float3 p1) { return max(p0, p1); } -// CHECK-LABEL: define noundef <4 x float> @_Z15test_max_float4 -// CHECK: call <4 x float> @llvm.maxnum.v4f32 +// CHECK-LABEL: define noundef nofpclass(nan inf) <4 x float> @_Z15test_max_float4 +// CHECK: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.maxnum.v4f32 float4 test_max_float4(float4 p0, float4 p1) { return max(p0, p1); } -// CHECK-LABEL: define noundef double @_Z15test_max_double -// CHECK: call double @llvm.maxnum.f64( +// CHECK-LABEL: define noundef nofpclass(nan inf) double @_Z15test_max_double +// CHECK: call reassoc nnan ninf nsz arcp afn double @llvm.maxnum.f64( double test_max_double(double p0, double p1) { return max(p0, p1); } -// CHECK-LABEL: define noundef <2 x double> @_Z16test_max_double2 -// CHECK: call <2 x double> @llvm.maxnum.v2f64 +// CHECK-LABEL: define noundef nofpclass(nan inf) <2 x double> @_Z16test_max_double2 +// CHECK: call reassoc nnan ninf nsz arcp afn <2 x double> @llvm.maxnum.v2f64 double2 test_max_double2(double2 p0, double2 p1) { return max(p0, p1); } -// CHECK-LABEL: define noundef <3 x double> @_Z16test_max_double3 -// CHECK: call <3 x double> @llvm.maxnum.v3f64 +// CHECK-LABEL: define noundef nofpclass(nan inf) <3 x double> @_Z16test_max_double3 +// CHECK: call reassoc nnan ninf nsz arcp afn <3 x double> @llvm.maxnum.v3f64 double3 test_max_double3(double3 p0, double3 p1) { return max(p0, p1); } -// CHECK-LABEL: define noundef <4 x double> @_Z16test_max_double4 -// CHECK: call <4 x double> @llvm.maxnum.v4f64 +// CHECK-LABEL: define noundef nofpclass(nan inf) <4 x double> @_Z16test_max_double4 +// CHECK: call reassoc nnan ninf nsz arcp afn <4 x double> @llvm.maxnum.v4f64 double4 test_max_double4(double4 p0, double4 p1) { return max(p0, p1); } diff --git a/clang/test/CodeGenHLSL/builtins/min.hlsl b/clang/test/CodeGenHLSL/builtins/min.hlsl index 02d20d13f916de..a352c72f29542c 100644 --- a/clang/test/CodeGenHLSL/builtins/min.hlsl +++ b/clang/test/CodeGenHLSL/builtins/min.hlsl @@ -85,49 +85,49 @@ uint64_t3 test_min_ulong3(uint64_t3 p0, uint64_t3 p1) { return min(p0, p1); } // CHECK: call <4 x i64> @llvm.umin.v4i64 uint64_t4 test_min_ulong4(uint64_t4 p0, uint64_t4 p1) { return min(p0, p1); } -// NATIVE_HALF-LABEL: define noundef half @_Z13test_min_half -// NATIVE_HALF: call half @llvm.minnum.f16( -// NO_HALF-LABEL: define noundef float @_Z13test_min_half -// NO_HALF: call float @llvm.minnum.f32( +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) half @_Z13test_min_half +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn half @llvm.minnum.f16( +// NO_HALF-LABEL: define noundef nofpclass(nan inf) float @_Z13test_min_half +// NO_HALF: call reassoc nnan ninf nsz arcp afn float @llvm.minnum.f32( half test_min_half(half p0, half p1) { return min(p0, p1); } -// NATIVE_HALF-LABEL: define noundef <2 x half> @_Z14test_min_half2 -// NATIVE_HALF: call <2 x half> @llvm.minnum.v2f16 -// NO_HALF-LABEL: define noundef <2 x float> @_Z14test_min_half2 -// NO_HALF: call <2 x float> @llvm.minnum.v2f32( +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) <2 x half> @_Z14test_min_half2 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <2 x half> @llvm.minnum.v2f16 +// NO_HALF-LABEL: define noundef nofpclass(nan inf) <2 x float> @_Z14test_min_half2 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.minnum.v2f32( half2 test_min_half2(half2 p0, half2 p1) { return min(p0, p1); } -// NATIVE_HALF-LABEL: define noundef <3 x half> @_Z14test_min_half3 -// NATIVE_HALF: call <3 x half> @llvm.minnum.v3f16 -// NO_HALF-LABEL: define noundef <3 x float> @_Z14test_min_half3 -// NO_HALF: call <3 x float> @llvm.minnum.v3f32( +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) <3 x half> @_Z14test_min_half3 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <3 x half> @llvm.minnum.v3f16 +// NO_HALF-LABEL: define noundef nofpclass(nan inf) <3 x float> @_Z14test_min_half3 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.minnum.v3f32( half3 test_min_half3(half3 p0, half3 p1) { return min(p0, p1); } -// NATIVE_HALF-LABEL: define noundef <4 x half> @_Z14test_min_half4 -// NATIVE_HALF: call <4 x half> @llvm.minnum.v4f16 -// NO_HALF-LABEL: define noundef <4 x float> @_Z14test_min_half4 -// NO_HALF: call <4 x float> @llvm.minnum.v4f32( +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) <4 x half> @_Z14test_min_half4 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <4 x half> @llvm.minnum.v4f16 +// NO_HALF-LABEL: define noundef nofpclass(nan inf) <4 x float> @_Z14test_min_half4 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.minnum.v4f32( half4 test_min_half4(half4 p0, half4 p1) { return min(p0, p1); } -// CHECK-LABEL: define noundef float @_Z14test_min_float -// CHECK: call float @llvm.minnum.f32( +// CHECK-LABEL: define noundef nofpclass(nan inf) float @_Z14test_min_float +// CHECK: call reassoc nnan ninf nsz arcp afn float @llvm.minnum.f32( float test_min_float(float p0, float p1) { return min(p0, p1); } -// CHECK-LABEL: define noundef <2 x float> @_Z15test_min_float2 -// CHECK: call <2 x float> @llvm.minnum.v2f32 +// CHECK-LABEL: define noundef nofpclass(nan inf) <2 x float> @_Z15test_min_float2 +// CHECK: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.minnum.v2f32 float2 test_min_float2(float2 p0, float2 p1) { return min(p0, p1); } -// CHECK-LABEL: define noundef <3 x float> @_Z15test_min_float3 -// CHECK: call <3 x float> @llvm.minnum.v3f32 +// CHECK-LABEL: define noundef nofpclass(nan inf) <3 x float> @_Z15test_min_float3 +// CHECK: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.minnum.v3f32 float3 test_min_float3(float3 p0, float3 p1) { return min(p0, p1); } -// CHECK-LABEL: define noundef <4 x float> @_Z15test_min_float4 -// CHECK: call <4 x float> @llvm.minnum.v4f32 +// CHECK-LABEL: define noundef nofpclass(nan inf) <4 x float> @_Z15test_min_float4 +// CHECK: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.minnum.v4f32 float4 test_min_float4(float4 p0, float4 p1) { return min(p0, p1); } -// CHECK-LABEL: define noundef double @_Z15test_min_double -// CHECK: call double @llvm.minnum.f64( +// CHECK-LABEL: define noundef nofpclass(nan inf) double @_Z15test_min_double +// CHECK: call reassoc nnan ninf nsz arcp afn double @llvm.minnum.f64( double test_min_double(double p0, double p1) { return min(p0, p1); } -// CHECK-LABEL: define noundef <2 x double> @_Z16test_min_double2 -// CHECK: call <2 x double> @llvm.minnum.v2f64 +// CHECK-LABEL: define noundef nofpclass(nan inf) <2 x double> @_Z16test_min_double2 +// CHECK: call reassoc nnan ninf nsz arcp afn <2 x double> @llvm.minnum.v2f64 double2 test_min_double2(double2 p0, double2 p1) { return min(p0, p1); } -// CHECK-LABEL: define noundef <3 x double> @_Z16test_min_double3 -// CHECK: call <3 x double> @llvm.minnum.v3f64 +// CHECK-LABEL: define noundef nofpclass(nan inf) <3 x double> @_Z16test_min_double3 +// CHECK: call reassoc nnan ninf nsz arcp afn <3 x double> @llvm.minnum.v3f64 double3 test_min_double3(double3 p0, double3 p1) { return min(p0, p1); } -// CHECK-LABEL: define noundef <4 x double> @_Z16test_min_double4 -// CHECK: call <4 x double> @llvm.minnum.v4f64 +// CHECK-LABEL: define noundef nofpclass(nan inf) <4 x double> @_Z16test_min_double4 +// CHECK: call reassoc nnan ninf nsz arcp afn <4 x double> @llvm.minnum.v4f64 double4 test_min_double4(double4 p0, double4 p1) { return min(p0, p1); } diff --git a/clang/test/CodeGenHLSL/builtins/normalize.hlsl b/clang/test/CodeGenHLSL/builtins/normalize.hlsl index 83ad607c14a607..830fc26b7acf0a 100644 --- a/clang/test/CodeGenHLSL/builtins/normalize.hlsl +++ b/clang/test/CodeGenHLSL/builtins/normalize.hlsl @@ -2,24 +2,24 @@ // RUN: dxil-pc-shadermodel6.3-library %s -fnative-half-type \ // RUN: -emit-llvm -disable-llvm-passes -o - | FileCheck %s \ // RUN: --check-prefixes=CHECK,NATIVE_HALF \ -// RUN: -DFNATTRS=noundef -DTARGET=dx +// RUN: -DFNATTRS="noundef nofpclass(nan inf)" -DTARGET=dx // RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \ // RUN: dxil-pc-shadermodel6.3-library %s -emit-llvm -disable-llvm-passes \ // RUN: -o - | FileCheck %s --check-prefixes=CHECK,NO_HALF \ -// RUN: -DFNATTRS=noundef -DTARGET=dx +// RUN: -DFNATTRS="noundef nofpclass(nan inf)" -DTARGET=dx // RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \ // RUN: spirv-unknown-vulkan-compute %s -fnative-half-type \ // RUN: -emit-llvm -disable-llvm-passes -o - | FileCheck %s \ // RUN: --check-prefixes=CHECK,NATIVE_HALF \ -// RUN: -DFNATTRS="spir_func noundef" -DTARGET=spv +// RUN: -DFNATTRS="spir_func noundef nofpclass(nan inf)" -DTARGET=spv // RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \ // RUN: spirv-unknown-vulkan-compute %s -emit-llvm -disable-llvm-passes \ // RUN: -o - | FileCheck %s --check-prefixes=CHECK,NO_HALF \ -// RUN: -DFNATTRS="spir_func noundef" -DTARGET=spv +// RUN: -DFNATTRS="spir_func noundef nofpclass(nan inf)" -DTARGET=spv // NATIVE_HALF: define [[FNATTRS]] half @ -// NATIVE_HALF: call half @llvm.[[TARGET]].normalize.f16(half -// NO_HALF: call float @llvm.[[TARGET]].normalize.f32(float +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn half @llvm.[[TARGET]].normalize.f16(half +// NO_HALF: call reassoc nnan ninf nsz arcp afn float @llvm.[[TARGET]].normalize.f32(float // NATIVE_HALF: ret half // NO_HALF: ret float half test_normalize_half(half p0) @@ -27,8 +27,8 @@ half test_normalize_half(half p0) return normalize(p0); } // NATIVE_HALF: define [[FNATTRS]] <2 x half> @ -// NATIVE_HALF: call <2 x half> @llvm.[[TARGET]].normalize.v2f16(<2 x half> -// NO_HALF: call <2 x float> @llvm.[[TARGET]].normalize.v2f32(<2 x float> +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <2 x half> @llvm.[[TARGET]].normalize.v2f16(<2 x half> +// NO_HALF: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.[[TARGET]].normalize.v2f32(<2 x float> // NATIVE_HALF: ret <2 x half> %hlsl.normalize // NO_HALF: ret <2 x float> %hlsl.normalize half2 test_normalize_half2(half2 p0) @@ -36,8 +36,8 @@ half2 test_normalize_half2(half2 p0) return normalize(p0); } // NATIVE_HALF: define [[FNATTRS]] <3 x half> @ -// NATIVE_HALF: call <3 x half> @llvm.[[TARGET]].normalize.v3f16(<3 x half> -// NO_HALF: call <3 x float> @llvm.[[TARGET]].normalize.v3f32(<3 x float> +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <3 x half> @llvm.[[TARGET]].normalize.v3f16(<3 x half> +// NO_HALF: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.[[TARGET]].normalize.v3f32(<3 x float> // NATIVE_HALF: ret <3 x half> %hlsl.normalize // NO_HALF: ret <3 x float> %hlsl.normalize half3 test_normalize_half3(half3 p0) @@ -45,8 +45,8 @@ half3 test_normalize_half3(half3 p0) return normalize(p0); } // NATIVE_HALF: define [[FNATTRS]] <4 x half> @ -// NATIVE_HALF: call <4 x half> @llvm.[[TARGET]].normalize.v4f16(<4 x half> -// NO_HALF: call <4 x float> @llvm.[[TARGET]].normalize.v4f32(<4 x float> +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <4 x half> @llvm.[[TARGET]].normalize.v4f16(<4 x half> +// NO_HALF: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.[[TARGET]].normalize.v4f32(<4 x float> // NATIVE_HALF: ret <4 x half> %hlsl.normalize // NO_HALF: ret <4 x float> %hlsl.normalize half4 test_normalize_half4(half4 p0) @@ -55,14 +55,14 @@ half4 test_normalize_half4(half4 p0) } // CHECK: define [[FNATTRS]] float @ -// CHECK: call float @llvm.[[TARGET]].normalize.f32(float +// CHECK: call reassoc nnan ninf nsz arcp afn float @llvm.[[TARGET]].normalize.f32(float // CHECK: ret float float test_normalize_float(float p0) { return normalize(p0); } // CHECK: define [[FNATTRS]] <2 x float> @ -// CHECK: %hlsl.normalize = call <2 x float> @llvm.[[TARGET]].normalize.v2f32(<2 x float> +// CHECK: %hlsl.normalize = call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.[[TARGET]].normalize.v2f32(<2 x float> // CHECK: ret <2 x float> %hlsl.normalize float2 test_normalize_float2(float2 p0) @@ -70,14 +70,14 @@ float2 test_normalize_float2(float2 p0) return normalize(p0); } // CHECK: define [[FNATTRS]] <3 x float> @ -// CHECK: %hlsl.normalize = call <3 x float> @llvm.[[TARGET]].normalize.v3f32( +// CHECK: %hlsl.normalize = call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.[[TARGET]].normalize.v3f32( // CHECK: ret <3 x float> %hlsl.normalize float3 test_normalize_float3(float3 p0) { return normalize(p0); } // CHECK: define [[FNATTRS]] <4 x float> @ -// CHECK: %hlsl.normalize = call <4 x float> @llvm.[[TARGET]].normalize.v4f32( +// CHECK: %hlsl.normalize = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.[[TARGET]].normalize.v4f32( // CHECK: ret <4 x float> %hlsl.normalize float4 test_length_float4(float4 p0) { diff --git a/clang/test/CodeGenHLSL/builtins/pow.hlsl b/clang/test/CodeGenHLSL/builtins/pow.hlsl index 4e184807633438..fd21f1b94c57e9 100644 --- a/clang/test/CodeGenHLSL/builtins/pow.hlsl +++ b/clang/test/CodeGenHLSL/builtins/pow.hlsl @@ -5,36 +5,36 @@ // RUN: -emit-llvm -disable-llvm-passes -o - | \ // RUN: FileCheck %s --check-prefixes=CHECK,NO_HALF -// NATIVE_HALF-LABEL: define noundef half @_Z13test_pow_half -// NATIVE_HALF: call half @llvm.pow.f16( -// NO_HALF-LABEL: define noundef float @_Z13test_pow_half -// NO_HALF: call float @llvm.pow.f32( +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) half @_Z13test_pow_half +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn half @llvm.pow.f16( +// NO_HALF-LABEL: define noundef nofpclass(nan inf) float @_Z13test_pow_half +// NO_HALF: call reassoc nnan ninf nsz arcp afn float @llvm.pow.f32( half test_pow_half(half p0, half p1) { return pow(p0, p1); } -// NATIVE_HALF-LABEL: define noundef <2 x half> @_Z14test_pow_half2 -// NATIVE_HALF: call <2 x half> @llvm.pow.v2f16 -// NO_HALF-LABEL: define noundef <2 x float> @_Z14test_pow_half2 -// NO_HALF: call <2 x float> @llvm.pow.v2f32( +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) <2 x half> @_Z14test_pow_half2 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <2 x half> @llvm.pow.v2f16 +// NO_HALF-LABEL: define noundef nofpclass(nan inf) <2 x float> @_Z14test_pow_half2 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.pow.v2f32( half2 test_pow_half2(half2 p0, half2 p1) { return pow(p0, p1); } -// NATIVE_HALF-LABEL: define noundef <3 x half> @_Z14test_pow_half3 -// NATIVE_HALF: call <3 x half> @llvm.pow.v3f16 -// NO_HALF-LABEL: define noundef <3 x float> @_Z14test_pow_half3 -// NO_HALF: call <3 x float> @llvm.pow.v3f32( +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) <3 x half> @_Z14test_pow_half3 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <3 x half> @llvm.pow.v3f16 +// NO_HALF-LABEL: define noundef nofpclass(nan inf) <3 x float> @_Z14test_pow_half3 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.pow.v3f32( half3 test_pow_half3(half3 p0, half3 p1) { return pow(p0, p1); } -// NATIVE_HALF-LABEL: define noundef <4 x half> @_Z14test_pow_half4 -// NATIVE_HALF: call <4 x half> @llvm.pow.v4f16 -// NO_HALF-LABEL: define noundef <4 x float> @_Z14test_pow_half4 -// NO_HALF: call <4 x float> @llvm.pow.v4f32( +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) <4 x half> @_Z14test_pow_half4 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <4 x half> @llvm.pow.v4f16 +// NO_HALF-LABEL: define noundef nofpclass(nan inf) <4 x float> @_Z14test_pow_half4 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.pow.v4f32( half4 test_pow_half4(half4 p0, half4 p1) { return pow(p0, p1); } -// CHECK-LABEL: define noundef float @_Z14test_pow_float -// CHECK: call float @llvm.pow.f32( +// CHECK-LABEL: define noundef nofpclass(nan inf) float @_Z14test_pow_float +// CHECK: call reassoc nnan ninf nsz arcp afn float @llvm.pow.f32( float test_pow_float(float p0, float p1) { return pow(p0, p1); } -// CHECK-LABEL: define noundef <2 x float> @_Z15test_pow_float2 -// CHECK: call <2 x float> @llvm.pow.v2f32 +// CHECK-LABEL: define noundef nofpclass(nan inf) <2 x float> @_Z15test_pow_float2 +// CHECK: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.pow.v2f32 float2 test_pow_float2(float2 p0, float2 p1) { return pow(p0, p1); } -// CHECK-LABEL: define noundef <3 x float> @_Z15test_pow_float3 -// CHECK: call <3 x float> @llvm.pow.v3f32 +// CHECK-LABEL: define noundef nofpclass(nan inf) <3 x float> @_Z15test_pow_float3 +// CHECK: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.pow.v3f32 float3 test_pow_float3(float3 p0, float3 p1) { return pow(p0, p1); } -// CHECK-LABEL: define noundef <4 x float> @_Z15test_pow_float4 -// CHECK: call <4 x float> @llvm.pow.v4f32 +// CHECK-LABEL: define noundef nofpclass(nan inf) <4 x float> @_Z15test_pow_float4 +// CHECK: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.pow.v4f32 float4 test_pow_float4(float4 p0, float4 p1) { return pow(p0, p1); } diff --git a/clang/test/CodeGenHLSL/builtins/radians.hlsl b/clang/test/CodeGenHLSL/builtins/radians.hlsl index 774300525dbf02..b2b6190ea90f6b 100644 --- a/clang/test/CodeGenHLSL/builtins/radians.hlsl +++ b/clang/test/CodeGenHLSL/builtins/radians.hlsl @@ -2,65 +2,65 @@ // RUN: dxil-pc-shadermodel6.3-library %s -fnative-half-type \ // RUN: -emit-llvm -disable-llvm-passes -o - | FileCheck %s \ // RUN: --check-prefixes=CHECK,NATIVE_HALF \ -// RUN: -DTARGET=dx -DFNATTRS=noundef +// RUN: -DTARGET=dx -DFNATTRS="noundef nofpclass(nan inf)" // RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \ // RUN: dxil-pc-shadermodel6.3-library %s -emit-llvm -disable-llvm-passes \ // RUN: -o - | FileCheck %s --check-prefixes=CHECK,NO_HALF \ -// RUN: -DTARGET=dx -DFNATTRS=noundef +// RUN: -DTARGET=dx -DFNATTRS="noundef nofpclass(nan inf)" // RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \ // RUN: spirv-unknown-vulkan-compute %s -fnative-half-type \ // RUN: -emit-llvm -disable-llvm-passes -o - | FileCheck %s \ // RUN: --check-prefixes=CHECK,NATIVE_HALF \ -// RUN: -DTARGET=spv -DFNATTRS="spir_func noundef" +// RUN: -DTARGET=spv -DFNATTRS="spir_func noundef nofpclass(nan inf)" // RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \ // RUN: spirv-unknown-vulkan-compute %s -emit-llvm -disable-llvm-passes \ // RUN: -o - | FileCheck %s --check-prefixes=CHECK,NO_HALF \ -// RUN: -DTARGET=spv -DFNATTRS="spir_func noundef" +// RUN: -DTARGET=spv -DFNATTRS="spir_func noundef nofpclass(nan inf)" // NATIVE_HALF: define [[FNATTRS]] half @ -// NATIVE_HALF: %{{.*}} = call half @llvm.[[TARGET]].radians.f16( +// NATIVE_HALF: %{{.*}} = call reassoc nnan ninf nsz arcp afn half @llvm.[[TARGET]].radians.f16( // NATIVE_HALF: ret half %{{.*}} // NO_HALF: define [[FNATTRS]] float @ -// NO_HALF: %{{.*}} = call float @llvm.[[TARGET]].radians.f32( +// NO_HALF: %{{.*}} = call reassoc nnan ninf nsz arcp afn float @llvm.[[TARGET]].radians.f32( // NO_HALF: ret float %{{.*}} half test_radians_half(half p0) { return radians(p0); } // NATIVE_HALF: define [[FNATTRS]] <2 x half> @ -// NATIVE_HALF: %{{.*}} = call <2 x half> @llvm.[[TARGET]].radians.v2f16 +// NATIVE_HALF: %{{.*}} = call reassoc nnan ninf nsz arcp afn <2 x half> @llvm.[[TARGET]].radians.v2f16 // NATIVE_HALF: ret <2 x half> %{{.*}} // NO_HALF: define [[FNATTRS]] <2 x float> @ -// NO_HALF: %{{.*}} = call <2 x float> @llvm.[[TARGET]].radians.v2f32( +// NO_HALF: %{{.*}} = call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.[[TARGET]].radians.v2f32( // NO_HALF: ret <2 x float> %{{.*}} half2 test_radians_half2(half2 p0) { return radians(p0); } // NATIVE_HALF: define [[FNATTRS]] <3 x half> @ -// NATIVE_HALF: %{{.*}} = call <3 x half> @llvm.[[TARGET]].radians.v3f16 +// NATIVE_HALF: %{{.*}} = call reassoc nnan ninf nsz arcp afn <3 x half> @llvm.[[TARGET]].radians.v3f16 // NATIVE_HALF: ret <3 x half> %{{.*}} // NO_HALF: define [[FNATTRS]] <3 x float> @ -// NO_HALF: %{{.*}} = call <3 x float> @llvm.[[TARGET]].radians.v3f32( +// NO_HALF: %{{.*}} = call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.[[TARGET]].radians.v3f32( // NO_HALF: ret <3 x float> %{{.*}} half3 test_radians_half3(half3 p0) { return radians(p0); } // NATIVE_HALF: define [[FNATTRS]] <4 x half> @ -// NATIVE_HALF: %{{.*}} = call <4 x half> @llvm.[[TARGET]].radians.v4f16 +// NATIVE_HALF: %{{.*}} = call reassoc nnan ninf nsz arcp afn <4 x half> @llvm.[[TARGET]].radians.v4f16 // NATIVE_HALF: ret <4 x half> %{{.*}} // NO_HALF: define [[FNATTRS]] <4 x float> @ -// NO_HALF: %{{.*}} = call <4 x float> @llvm.[[TARGET]].radians.v4f32( +// NO_HALF: %{{.*}} = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.[[TARGET]].radians.v4f32( // NO_HALF: ret <4 x float> %{{.*}} half4 test_radians_half4(half4 p0) { return radians(p0); } // CHECK: define [[FNATTRS]] float @ -// CHECK: %{{.*}} = call float @llvm.[[TARGET]].radians.f32( +// CHECK: %{{.*}} = call reassoc nnan ninf nsz arcp afn float @llvm.[[TARGET]].radians.f32( // CHECK: ret float %{{.*}} float test_radians_float(float p0) { return radians(p0); } // CHECK: define [[FNATTRS]] <2 x float> @ -// CHECK: %{{.*}} = call <2 x float> @llvm.[[TARGET]].radians.v2f32 +// CHECK: %{{.*}} = call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.[[TARGET]].radians.v2f32 // CHECK: ret <2 x float> %{{.*}} float2 test_radians_float2(float2 p0) { return radians(p0); } // CHECK: define [[FNATTRS]] <3 x float> @ -// CHECK: %{{.*}} = call <3 x float> @llvm.[[TARGET]].radians.v3f32 +// CHECK: %{{.*}} = call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.[[TARGET]].radians.v3f32 // CHECK: ret <3 x float> %{{.*}} float3 test_radians_float3(float3 p0) { return radians(p0); } // CHECK: define [[FNATTRS]] <4 x float> @ -// CHECK: %{{.*}} = call <4 x float> @llvm.[[TARGET]].radians.v4f32 +// CHECK: %{{.*}} = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.[[TARGET]].radians.v4f32 // CHECK: ret <4 x float> %{{.*}} float4 test_radians_float4(float4 p0) { return radians(p0); } diff --git a/clang/test/CodeGenHLSL/builtins/rcp.hlsl b/clang/test/CodeGenHLSL/builtins/rcp.hlsl index 83fe33406c7c89..8f07f3a031531e 100644 --- a/clang/test/CodeGenHLSL/builtins/rcp.hlsl +++ b/clang/test/CodeGenHLSL/builtins/rcp.hlsl @@ -13,90 +13,90 @@ // RUN: spirv-unknown-vulkan-compute %s -emit-llvm -disable-llvm-passes \ // RUN: -o - | FileCheck %s --check-prefixes=CHECK,NO_HALF,SPIR_NO_HALF,SPIR_CHECK -// DXIL_NATIVE_HALF: define noundef half @ -// SPIR_NATIVE_HALF: define spir_func noundef half @ -// NATIVE_HALF: %hlsl.rcp = fdiv half 0xH3C00, %{{.*}} +// DXIL_NATIVE_HALF: define noundef nofpclass(nan inf) half @ +// SPIR_NATIVE_HALF: define spir_func noundef nofpclass(nan inf) half @ +// NATIVE_HALF: %hlsl.rcp = fdiv reassoc nnan ninf nsz arcp afn half 0xH3C00, %{{.*}} // NATIVE_HALF: ret half %hlsl.rcp -// DXIL_NO_HALF: define noundef float @ -// SPIR_NO_HALF: define spir_func noundef float @ -// NO_HALF: %hlsl.rcp = fdiv float 1.000000e+00, %{{.*}} +// DXIL_NO_HALF: define noundef nofpclass(nan inf) float @ +// SPIR_NO_HALF: define spir_func noundef nofpclass(nan inf) float @ +// NO_HALF: %hlsl.rcp = fdiv reassoc nnan ninf nsz arcp afn float 1.000000e+00, %{{.*}} // NO_HALF: ret float %hlsl.rcp half test_rcp_half(half p0) { return rcp(p0); } -// DXIL_NATIVE_HALF: define noundef <2 x half> @ -// SPIR_NATIVE_HALF: define spir_func noundef <2 x half> @ -// NATIVE_HALF: %hlsl.rcp = fdiv <2 x half> splat (half 0xH3C00), %{{.*}} +// DXIL_NATIVE_HALF: define noundef nofpclass(nan inf) <2 x half> @ +// SPIR_NATIVE_HALF: define spir_func noundef nofpclass(nan inf) <2 x half> @ +// NATIVE_HALF: %hlsl.rcp = fdiv reassoc nnan ninf nsz arcp afn <2 x half> splat (half 0xH3C00), %{{.*}} // NATIVE_HALF: ret <2 x half> %hlsl.rcp -// DXIL_NO_HALF: define noundef <2 x float> @ -// SPIR_NO_HALF: define spir_func noundef <2 x float> @ -// NO_HALF: %hlsl.rcp = fdiv <2 x float> splat (float 1.000000e+00), %{{.*}} +// DXIL_NO_HALF: define noundef nofpclass(nan inf) <2 x float> @ +// SPIR_NO_HALF: define spir_func noundef nofpclass(nan inf) <2 x float> @ +// NO_HALF: %hlsl.rcp = fdiv reassoc nnan ninf nsz arcp afn <2 x float> splat (float 1.000000e+00), %{{.*}} // NO_HALF: ret <2 x float> %hlsl.rcp half2 test_rcp_half2(half2 p0) { return rcp(p0); } -// DXIL_NATIVE_HALF: define noundef <3 x half> @ -// SPIR_NATIVE_HALF: define spir_func noundef <3 x half> @ -// NATIVE_HALF: %hlsl.rcp = fdiv <3 x half> splat (half 0xH3C00), %{{.*}} +// DXIL_NATIVE_HALF: define noundef nofpclass(nan inf) <3 x half> @ +// SPIR_NATIVE_HALF: define spir_func noundef nofpclass(nan inf) <3 x half> @ +// NATIVE_HALF: %hlsl.rcp = fdiv reassoc nnan ninf nsz arcp afn <3 x half> splat (half 0xH3C00), %{{.*}} // NATIVE_HALF: ret <3 x half> %hlsl.rcp -// DXIL_NO_HALF: define noundef <3 x float> @ -// SPIR_NO_HALF: define spir_func noundef <3 x float> @ -// NO_HALF: %hlsl.rcp = fdiv <3 x float> splat (float 1.000000e+00), %{{.*}} +// DXIL_NO_HALF: define noundef nofpclass(nan inf) <3 x float> @ +// SPIR_NO_HALF: define spir_func noundef nofpclass(nan inf) <3 x float> @ +// NO_HALF: %hlsl.rcp = fdiv reassoc nnan ninf nsz arcp afn <3 x float> splat (float 1.000000e+00), %{{.*}} // NO_HALF: ret <3 x float> %hlsl.rcp half3 test_rcp_half3(half3 p0) { return rcp(p0); } -// DXIL_NATIVE_HALF: define noundef <4 x half> @ -// SPIR_NATIVE_HALF: define spir_func noundef <4 x half> @ -// NATIVE_HALF: %hlsl.rcp = fdiv <4 x half> splat (half 0xH3C00), %{{.*}} +// DXIL_NATIVE_HALF: define noundef nofpclass(nan inf) <4 x half> @ +// SPIR_NATIVE_HALF: define spir_func noundef nofpclass(nan inf) <4 x half> @ +// NATIVE_HALF: %hlsl.rcp = fdiv reassoc nnan ninf nsz arcp afn <4 x half> splat (half 0xH3C00), %{{.*}} // NATIVE_HALF: ret <4 x half> %hlsl.rcp -// DXIL_NO_HALF: define noundef <4 x float> @ -// SPIR_NO_HALF: define spir_func noundef <4 x float> @ -// NO_HALF: %hlsl.rcp = fdiv <4 x float> splat (float 1.000000e+00), %{{.*}} +// DXIL_NO_HALF: define noundef nofpclass(nan inf) <4 x float> @ +// SPIR_NO_HALF: define spir_func noundef nofpclass(nan inf) <4 x float> @ +// NO_HALF: %hlsl.rcp = fdiv reassoc nnan ninf nsz arcp afn <4 x float> splat (float 1.000000e+00), %{{.*}} // NO_HALF: ret <4 x float> %hlsl.rcp half4 test_rcp_half4(half4 p0) { return rcp(p0); } -// DXIL_CHECK: define noundef float @ -// SPIR_CHECK: define spir_func noundef float @ -// CHECK: %hlsl.rcp = fdiv float 1.000000e+00, %{{.*}} +// DXIL_CHECK: define noundef nofpclass(nan inf) float @ +// SPIR_CHECK: define spir_func noundef nofpclass(nan inf) float @ +// CHECK: %hlsl.rcp = fdiv reassoc nnan ninf nsz arcp afn float 1.000000e+00, %{{.*}} // CHECK: ret float %hlsl.rcp float test_rcp_float(float p0) { return rcp(p0); } -// DXIL_CHECK: define noundef <2 x float> @ -// SPIR_CHECK: define spir_func noundef <2 x float> @ -// CHECK: %hlsl.rcp = fdiv <2 x float> splat (float 1.000000e+00), %{{.*}} +// DXIL_CHECK: define noundef nofpclass(nan inf) <2 x float> @ +// SPIR_CHECK: define spir_func noundef nofpclass(nan inf) <2 x float> @ +// CHECK: %hlsl.rcp = fdiv reassoc nnan ninf nsz arcp afn <2 x float> splat (float 1.000000e+00), %{{.*}} // CHECK: ret <2 x float> %hlsl.rcp float2 test_rcp_float2(float2 p0) { return rcp(p0); } -// DXIL_CHECK: define noundef <3 x float> @ -// SPIR_CHECK: define spir_func noundef <3 x float> @ -// CHECK: %hlsl.rcp = fdiv <3 x float> splat (float 1.000000e+00), %{{.*}} +// DXIL_CHECK: define noundef nofpclass(nan inf) <3 x float> @ +// SPIR_CHECK: define spir_func noundef nofpclass(nan inf) <3 x float> @ +// CHECK: %hlsl.rcp = fdiv reassoc nnan ninf nsz arcp afn <3 x float> splat (float 1.000000e+00), %{{.*}} // CHECK: ret <3 x float> %hlsl.rcp float3 test_rcp_float3(float3 p0) { return rcp(p0); } -// DXIL_CHECK: define noundef <4 x float> @ -// SPIR_CHECK: define spir_func noundef <4 x float> @ -// CHECK: %hlsl.rcp = fdiv <4 x float> splat (float 1.000000e+00), %{{.*}} +// DXIL_CHECK: define noundef nofpclass(nan inf) <4 x float> @ +// SPIR_CHECK: define spir_func noundef nofpclass(nan inf) <4 x float> @ +// CHECK: %hlsl.rcp = fdiv reassoc nnan ninf nsz arcp afn <4 x float> splat (float 1.000000e+00), %{{.*}} // CHECK: ret <4 x float> %hlsl.rcp float4 test_rcp_float4(float4 p0) { return rcp(p0); } -// DXIL_CHECK: define noundef double @ -// SPIR_CHECK: define spir_func noundef double @ -// CHECK: %hlsl.rcp = fdiv double 1.000000e+00, %{{.*}} +// DXIL_CHECK: define noundef nofpclass(nan inf) double @ +// SPIR_CHECK: define spir_func noundef nofpclass(nan inf) double @ +// CHECK: %hlsl.rcp = fdiv reassoc nnan ninf nsz arcp afn double 1.000000e+00, %{{.*}} // CHECK: ret double %hlsl.rcp double test_rcp_double(double p0) { return rcp(p0); } -// DXIL_CHECK: define noundef <2 x double> @ -// SPIR_CHECK: define spir_func noundef <2 x double> @ -// CHECK: %hlsl.rcp = fdiv <2 x double> splat (double 1.000000e+00), %{{.*}} +// DXIL_CHECK: define noundef nofpclass(nan inf) <2 x double> @ +// SPIR_CHECK: define spir_func noundef nofpclass(nan inf) <2 x double> @ +// CHECK: %hlsl.rcp = fdiv reassoc nnan ninf nsz arcp afn <2 x double> splat (double 1.000000e+00), %{{.*}} // CHECK: ret <2 x double> %hlsl.rcp double2 test_rcp_double2(double2 p0) { return rcp(p0); } -// DXIL_CHECK: define noundef <3 x double> @ -// SPIR_CHECK: define spir_func noundef <3 x double> @ -// CHECK: %hlsl.rcp = fdiv <3 x double> splat (double 1.000000e+00), %{{.*}} +// DXIL_CHECK: define noundef nofpclass(nan inf) <3 x double> @ +// SPIR_CHECK: define spir_func noundef nofpclass(nan inf) <3 x double> @ +// CHECK: %hlsl.rcp = fdiv reassoc nnan ninf nsz arcp afn <3 x double> splat (double 1.000000e+00), %{{.*}} // CHECK: ret <3 x double> %hlsl.rcp double3 test_rcp_double3(double3 p0) { return rcp(p0); } -// DXIL_CHECK: define noundef <4 x double> @ -// SPIR_CHECK: define spir_func noundef <4 x double> @ -// CHECK: %hlsl.rcp = fdiv <4 x double> splat (double 1.000000e+00), %{{.*}} +// DXIL_CHECK: define noundef nofpclass(nan inf) <4 x double> @ +// SPIR_CHECK: define spir_func noundef nofpclass(nan inf) <4 x double> @ +// CHECK: %hlsl.rcp = fdiv reassoc nnan ninf nsz arcp afn <4 x double> splat (double 1.000000e+00), %{{.*}} // CHECK: ret <4 x double> %hlsl.rcp double4 test_rcp_double4(double4 p0) { return rcp(p0); } diff --git a/clang/test/CodeGenHLSL/builtins/round.hlsl b/clang/test/CodeGenHLSL/builtins/round.hlsl index 6da63a394a8fdc..a945a9677abbb5 100644 --- a/clang/test/CodeGenHLSL/builtins/round.hlsl +++ b/clang/test/CodeGenHLSL/builtins/round.hlsl @@ -5,48 +5,48 @@ // RUN: -emit-llvm -disable-llvm-passes -o - | \ // RUN: FileCheck %s --check-prefixes=CHECK,NO_HALF -// NATIVE_HALF-LABEL: define noundef half @_Z15test_round_half -// NATIVE_HALF: %elt.roundeven = call half @llvm.roundeven.f16( +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) half @_Z15test_round_half +// NATIVE_HALF: %elt.roundeven = call reassoc nnan ninf nsz arcp afn half @llvm.roundeven.f16( // NATIVE_HALF: ret half %elt.roundeven -// NO_HALF-LABEL: define noundef float @_Z15test_round_half -// NO_HALF: %elt.roundeven = call float @llvm.roundeven.f32( +// NO_HALF-LABEL: define noundef nofpclass(nan inf) float @_Z15test_round_half +// NO_HALF: %elt.roundeven = call reassoc nnan ninf nsz arcp afn float @llvm.roundeven.f32( // NO_HALF: ret float %elt.roundeven half test_round_half(half p0) { return round(p0); } -// NATIVE_HALF-LABEL: define noundef <2 x half> @_Z16test_round_half2 -// NATIVE_HALF: %elt.roundeven = call <2 x half> @llvm.roundeven.v2f16 +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) <2 x half> @_Z16test_round_half2 +// NATIVE_HALF: %elt.roundeven = call reassoc nnan ninf nsz arcp afn <2 x half> @llvm.roundeven.v2f16 // NATIVE_HALF: ret <2 x half> %elt.roundeven -// NO_HALF-LABEL: define noundef <2 x float> @_Z16test_round_half2 -// NO_HALF: %elt.roundeven = call <2 x float> @llvm.roundeven.v2f32( +// NO_HALF-LABEL: define noundef nofpclass(nan inf) <2 x float> @_Z16test_round_half2 +// NO_HALF: %elt.roundeven = call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.roundeven.v2f32( // NO_HALF: ret <2 x float> %elt.roundeven half2 test_round_half2(half2 p0) { return round(p0); } -// NATIVE_HALF-LABEL: define noundef <3 x half> @_Z16test_round_half3 -// NATIVE_HALF: %elt.roundeven = call <3 x half> @llvm.roundeven.v3f16 +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) <3 x half> @_Z16test_round_half3 +// NATIVE_HALF: %elt.roundeven = call reassoc nnan ninf nsz arcp afn <3 x half> @llvm.roundeven.v3f16 // NATIVE_HALF: ret <3 x half> %elt.roundeven -// NO_HALF-LABEL: define noundef <3 x float> @_Z16test_round_half3 -// NO_HALF: %elt.roundeven = call <3 x float> @llvm.roundeven.v3f32( +// NO_HALF-LABEL: define noundef nofpclass(nan inf) <3 x float> @_Z16test_round_half3 +// NO_HALF: %elt.roundeven = call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.roundeven.v3f32( // NO_HALF: ret <3 x float> %elt.roundeven half3 test_round_half3(half3 p0) { return round(p0); } -// NATIVE_HALF-LABEL: define noundef <4 x half> @_Z16test_round_half4 -// NATIVE_HALF: %elt.roundeven = call <4 x half> @llvm.roundeven.v4f16 +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) <4 x half> @_Z16test_round_half4 +// NATIVE_HALF: %elt.roundeven = call reassoc nnan ninf nsz arcp afn <4 x half> @llvm.roundeven.v4f16 // NATIVE_HALF: ret <4 x half> %elt.roundeven -// NO_HALF-LABEL: define noundef <4 x float> @_Z16test_round_half4 -// NO_HALF: %elt.roundeven = call <4 x float> @llvm.roundeven.v4f32( +// NO_HALF-LABEL: define noundef nofpclass(nan inf) <4 x float> @_Z16test_round_half4 +// NO_HALF: %elt.roundeven = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.roundeven.v4f32( // NO_HALF: ret <4 x float> %elt.roundeven half4 test_round_half4(half4 p0) { return round(p0); } -// CHECK-LABEL: define noundef float @_Z16test_round_float -// CHECK: %elt.roundeven = call float @llvm.roundeven.f32( +// CHECK-LABEL: define noundef nofpclass(nan inf) float @_Z16test_round_float +// CHECK: %elt.roundeven = call reassoc nnan ninf nsz arcp afn float @llvm.roundeven.f32( // CHECK: ret float %elt.roundeven float test_round_float(float p0) { return round(p0); } -// CHECK-LABEL: define noundef <2 x float> @_Z17test_round_float2 -// CHECK: %elt.roundeven = call <2 x float> @llvm.roundeven.v2f32 +// CHECK-LABEL: define noundef nofpclass(nan inf) <2 x float> @_Z17test_round_float2 +// CHECK: %elt.roundeven = call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.roundeven.v2f32 // CHECK: ret <2 x float> %elt.roundeven float2 test_round_float2(float2 p0) { return round(p0); } -// CHECK-LABEL: define noundef <3 x float> @_Z17test_round_float3 -// CHECK: %elt.roundeven = call <3 x float> @llvm.roundeven.v3f32 +// CHECK-LABEL: define noundef nofpclass(nan inf) <3 x float> @_Z17test_round_float3 +// CHECK: %elt.roundeven = call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.roundeven.v3f32 // CHECK: ret <3 x float> %elt.roundeven float3 test_round_float3(float3 p0) { return round(p0); } -// CHECK-LABEL: define noundef <4 x float> @_Z17test_round_float4 -// CHECK: %elt.roundeven = call <4 x float> @llvm.roundeven.v4f32 +// CHECK-LABEL: define noundef nofpclass(nan inf) <4 x float> @_Z17test_round_float4 +// CHECK: %elt.roundeven = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.roundeven.v4f32 // CHECK: ret <4 x float> %elt.roundeven float4 test_round_float4(float4 p0) { return round(p0); } diff --git a/clang/test/CodeGenHLSL/builtins/rsqrt.hlsl b/clang/test/CodeGenHLSL/builtins/rsqrt.hlsl index b1b53fc187da67..6c9b1f643713b9 100644 --- a/clang/test/CodeGenHLSL/builtins/rsqrt.hlsl +++ b/clang/test/CodeGenHLSL/builtins/rsqrt.hlsl @@ -2,63 +2,63 @@ // RUN: dxil-pc-shadermodel6.3-library %s -fnative-half-type \ // RUN: -emit-llvm -disable-llvm-passes -o - | FileCheck %s \ // RUN: --check-prefixes=CHECK,NATIVE_HALF \ -// RUN: -DFNATTRS=noundef -DTARGET=dx +// RUN: -DFNATTRS="noundef nofpclass(nan inf)" -DTARGET=dx // RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \ // RUN: dxil-pc-shadermodel6.3-library %s -emit-llvm -disable-llvm-passes \ // RUN: -o - | FileCheck %s --check-prefixes=CHECK,NO_HALF \ -// RUN: -DFNATTRS=noundef -DTARGET=dx +// RUN: -DFNATTRS="noundef nofpclass(nan inf)" -DTARGET=dx // RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \ // RUN: spirv-unknown-vulkan-compute %s -fnative-half-type \ // RUN: -emit-llvm -disable-llvm-passes -o - | FileCheck %s \ // RUN: --check-prefixes=CHECK,NATIVE_HALF \ -// RUN: -DFNATTRS="spir_func noundef" -DTARGET=spv +// RUN: -DFNATTRS="spir_func noundef nofpclass(nan inf)" -DTARGET=spv // RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \ // RUN: spirv-unknown-vulkan-compute %s -emit-llvm -disable-llvm-passes \ // RUN: -o - | FileCheck %s --check-prefixes=CHECK,NO_HALF \ -// RUN: -DFNATTRS="spir_func noundef" -DTARGET=spv +// RUN: -DFNATTRS="spir_func noundef nofpclass(nan inf)" -DTARGET=spv // NATIVE_HALF: define [[FNATTRS]] half @ -// NATIVE_HALF: %hlsl.rsqrt = call half @llvm.[[TARGET]].rsqrt.f16( +// NATIVE_HALF: %hlsl.rsqrt = call reassoc nnan ninf nsz arcp afn half @llvm.[[TARGET]].rsqrt.f16( // NATIVE_HALF: ret half %hlsl.rsqrt // NO_HALF: define [[FNATTRS]] float @ -// NO_HALF: %hlsl.rsqrt = call float @llvm.[[TARGET]].rsqrt.f32( +// NO_HALF: %hlsl.rsqrt = call reassoc nnan ninf nsz arcp afn float @llvm.[[TARGET]].rsqrt.f32( // NO_HALF: ret float %hlsl.rsqrt half test_rsqrt_half(half p0) { return rsqrt(p0); } // NATIVE_HALF: define [[FNATTRS]] <2 x half> @ -// NATIVE_HALF: %hlsl.rsqrt = call <2 x half> @llvm.[[TARGET]].rsqrt.v2f16 +// NATIVE_HALF: %hlsl.rsqrt = call reassoc nnan ninf nsz arcp afn <2 x half> @llvm.[[TARGET]].rsqrt.v2f16 // NATIVE_HALF: ret <2 x half> %hlsl.rsqrt // NO_HALF: define [[FNATTRS]] <2 x float> @ -// NO_HALF: %hlsl.rsqrt = call <2 x float> @llvm.[[TARGET]].rsqrt.v2f32( +// NO_HALF: %hlsl.rsqrt = call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.[[TARGET]].rsqrt.v2f32( // NO_HALF: ret <2 x float> %hlsl.rsqrt half2 test_rsqrt_half2(half2 p0) { return rsqrt(p0); } // NATIVE_HALF: define [[FNATTRS]] <3 x half> @ -// NATIVE_HALF: %hlsl.rsqrt = call <3 x half> @llvm.[[TARGET]].rsqrt.v3f16 +// NATIVE_HALF: %hlsl.rsqrt = call reassoc nnan ninf nsz arcp afn <3 x half> @llvm.[[TARGET]].rsqrt.v3f16 // NATIVE_HALF: ret <3 x half> %hlsl.rsqrt // NO_HALF: define [[FNATTRS]] <3 x float> @ -// NO_HALF: %hlsl.rsqrt = call <3 x float> @llvm.[[TARGET]].rsqrt.v3f32( +// NO_HALF: %hlsl.rsqrt = call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.[[TARGET]].rsqrt.v3f32( // NO_HALF: ret <3 x float> %hlsl.rsqrt half3 test_rsqrt_half3(half3 p0) { return rsqrt(p0); } // NATIVE_HALF: define [[FNATTRS]] <4 x half> @ -// NATIVE_HALF: %hlsl.rsqrt = call <4 x half> @llvm.[[TARGET]].rsqrt.v4f16 +// NATIVE_HALF: %hlsl.rsqrt = call reassoc nnan ninf nsz arcp afn <4 x half> @llvm.[[TARGET]].rsqrt.v4f16 // NATIVE_HALF: ret <4 x half> %hlsl.rsqrt // NO_HALF: define [[FNATTRS]] <4 x float> @ -// NO_HALF: %hlsl.rsqrt = call <4 x float> @llvm.[[TARGET]].rsqrt.v4f32( +// NO_HALF: %hlsl.rsqrt = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.[[TARGET]].rsqrt.v4f32( // NO_HALF: ret <4 x float> %hlsl.rsqrt half4 test_rsqrt_half4(half4 p0) { return rsqrt(p0); } // CHECK: define [[FNATTRS]] float @ -// CHECK: %hlsl.rsqrt = call float @llvm.[[TARGET]].rsqrt.f32( +// CHECK: %hlsl.rsqrt = call reassoc nnan ninf nsz arcp afn float @llvm.[[TARGET]].rsqrt.f32( // CHECK: ret float %hlsl.rsqrt float test_rsqrt_float(float p0) { return rsqrt(p0); } // CHECK: define [[FNATTRS]] <2 x float> @ -// CHECK: %hlsl.rsqrt = call <2 x float> @llvm.[[TARGET]].rsqrt.v2f32 +// CHECK: %hlsl.rsqrt = call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.[[TARGET]].rsqrt.v2f32 // CHECK: ret <2 x float> %hlsl.rsqrt float2 test_rsqrt_float2(float2 p0) { return rsqrt(p0); } // CHECK: define [[FNATTRS]] <3 x float> @ -// CHECK: %hlsl.rsqrt = call <3 x float> @llvm.[[TARGET]].rsqrt.v3f32 +// CHECK: %hlsl.rsqrt = call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.[[TARGET]].rsqrt.v3f32 // CHECK: ret <3 x float> %hlsl.rsqrt float3 test_rsqrt_float3(float3 p0) { return rsqrt(p0); } // CHECK: define [[FNATTRS]] <4 x float> @ -// CHECK: %hlsl.rsqrt = call <4 x float> @llvm.[[TARGET]].rsqrt.v4f32 +// CHECK: %hlsl.rsqrt = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.[[TARGET]].rsqrt.v4f32 // CHECK: ret <4 x float> %hlsl.rsqrt float4 test_rsqrt_float4(float4 p0) { return rsqrt(p0); } diff --git a/clang/test/CodeGenHLSL/builtins/saturate.hlsl b/clang/test/CodeGenHLSL/builtins/saturate.hlsl index c221f6e0f2c36f..3304073d9b5018 100644 --- a/clang/test/CodeGenHLSL/builtins/saturate.hlsl +++ b/clang/test/CodeGenHLSL/builtins/saturate.hlsl @@ -13,48 +13,48 @@ // RUN: FileCheck %s --check-prefixes=CHECK,NO_HALF -Dtar=spv // NATIVE_HALF-LABEL: define{{.*}} half @_Z18test_saturate_halfDh -// NATIVE_HALF: call half @llvm.[[tar]].saturate.f16( +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn half @llvm.[[tar]].saturate.f16( // NO_HALF-LABEL: define{{.*}} float @_Z18test_saturate_halfDh -// NO_HALF: call float @llvm.[[tar]].saturate.f32( +// NO_HALF: call reassoc nnan ninf nsz arcp afn float @llvm.[[tar]].saturate.f32( half test_saturate_half(half p0) { return saturate(p0); } // NATIVE_HALF-LABEL: define{{.*}} <2 x half> @_Z19test_saturate_half2Dv2_Dh -// NATIVE_HALF: call <2 x half> @llvm.[[tar]].saturate.v2f16 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <2 x half> @llvm.[[tar]].saturate.v2f16 // NO_HALF-LABEL: define{{.*}} <2 x float> @_Z19test_saturate_half2Dv2_Dh -// NO_HALF: call <2 x float> @llvm.[[tar]].saturate.v2f32( +// NO_HALF: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.[[tar]].saturate.v2f32( half2 test_saturate_half2(half2 p0) { return saturate(p0); } // NATIVE_HALF-LABEL: define{{.*}} <3 x half> @_Z19test_saturate_half3Dv3_Dh( -// NATIVE_HALF: call <3 x half> @llvm.[[tar]].saturate.v3f16 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <3 x half> @llvm.[[tar]].saturate.v3f16 // NO_HALF-LABEL: define{{.*}} <3 x float> @_Z19test_saturate_half3Dv3_Dh(<3 x float> -// NO_HALF: call <3 x float> @llvm.[[tar]].saturate.v3f32( +// NO_HALF: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.[[tar]].saturate.v3f32( half3 test_saturate_half3(half3 p0) { return saturate(p0); } // NATIVE_HALF-LABEL: define{{.*}} <4 x half> @_Z19test_saturate_half4Dv4_Dh( -// NATIVE_HALF: call <4 x half> @llvm.[[tar]].saturate.v4f16 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <4 x half> @llvm.[[tar]].saturate.v4f16 // NO_HALF-LABEL: define{{.*}} <4 x float> @_Z19test_saturate_half4Dv4_Dh(<4 x float> -// NO_HALF: call <4 x float> @llvm.[[tar]].saturate.v4f32( +// NO_HALF: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.[[tar]].saturate.v4f32( half4 test_saturate_half4(half4 p0) { return saturate(p0); } // CHECK-LABEL: define{{.*}} float @_Z19test_saturate_floatf( -// CHECK: call float @llvm.[[tar]].saturate.f32( +// CHECK: call reassoc nnan ninf nsz arcp afn float @llvm.[[tar]].saturate.f32( float test_saturate_float(float p0) { return saturate(p0); } // CHECK-LABEL: define{{.*}} <2 x float> @_Z20test_saturate_float2Dv2_f(<2 x float> -// CHECK: call <2 x float> @llvm.[[tar]].saturate.v2f32 +// CHECK: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.[[tar]].saturate.v2f32 float2 test_saturate_float2(float2 p0) { return saturate(p0); } // CHECK-LABEL: define{{.*}} <3 x float> @_Z20test_saturate_float3Dv3_f(<3 x float> -// CHECK: call <3 x float> @llvm.[[tar]].saturate.v3f32 +// CHECK: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.[[tar]].saturate.v3f32 float3 test_saturate_float3(float3 p0) { return saturate(p0); } // CHECK-LABEL: define{{.*}} <4 x float> @_Z20test_saturate_float4Dv4_f(<4 x float> -// CHECK: call <4 x float> @llvm.[[tar]].saturate.v4f32 +// CHECK: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.[[tar]].saturate.v4f32 float4 test_saturate_float4(float4 p0) { return saturate(p0); } // CHECK-LABEL: define{{.*}} double @_Z20test_saturate_doubled(double -// CHECK: call double @llvm.[[tar]].saturate.f64( +// CHECK: call reassoc nnan ninf nsz arcp afn double @llvm.[[tar]].saturate.f64( double test_saturate_double(double p0) { return saturate(p0); } // CHECK-LABEL: define{{.*}} <2 x double> @_Z21test_saturate_double2Dv2_d(<2 x double> -// CHECK: call <2 x double> @llvm.[[tar]].saturate.v2f64 +// CHECK: call reassoc nnan ninf nsz arcp afn <2 x double> @llvm.[[tar]].saturate.v2f64 double2 test_saturate_double2(double2 p0) { return saturate(p0); } // CHECK-LABEL: define{{.*}} <3 x double> @_Z21test_saturate_double3Dv3_d(<3 x double> -// CHECK: call <3 x double> @llvm.[[tar]].saturate.v3f64 +// CHECK: call reassoc nnan ninf nsz arcp afn <3 x double> @llvm.[[tar]].saturate.v3f64 double3 test_saturate_double3(double3 p0) { return saturate(p0); } // CHECK-LABEL: define{{.*}} <4 x double> @_Z21test_saturate_double4Dv4_d(<4 x double> -// CHECK: call <4 x double> @llvm.[[tar]].saturate.v4f64 +// CHECK: call reassoc nnan ninf nsz arcp afn <4 x double> @llvm.[[tar]].saturate.v4f64 double4 test_saturate_double4(double4 p0) { return saturate(p0); } diff --git a/clang/test/CodeGenHLSL/builtins/sin.hlsl b/clang/test/CodeGenHLSL/builtins/sin.hlsl index 9f7fa5043bdc7d..69c657239ef95b 100644 --- a/clang/test/CodeGenHLSL/builtins/sin.hlsl +++ b/clang/test/CodeGenHLSL/builtins/sin.hlsl @@ -5,36 +5,36 @@ // RUN: -emit-llvm -disable-llvm-passes -o - | \ // RUN: FileCheck %s --check-prefixes=CHECK,NO_HALF -// NATIVE_HALF-LABEL: define noundef half @_Z13test_sin_half -// NATIVE_HALF: call half @llvm.sin.f16( -// NO_HALF-LABEL: define noundef float @_Z13test_sin_half -// NO_HALF: call float @llvm.sin.f32( +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) half @_Z13test_sin_half +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn half @llvm.sin.f16( +// NO_HALF-LABEL: define noundef nofpclass(nan inf) float @_Z13test_sin_half +// NO_HALF: call reassoc nnan ninf nsz arcp afn float @llvm.sin.f32( half test_sin_half(half p0) { return sin(p0); } -// NATIVE_HALF-LABEL: define noundef <2 x half> @_Z14test_sin_half2 -// NATIVE_HALF: call <2 x half> @llvm.sin.v2f16 -// NO_HALF-LABEL: define noundef <2 x float> @_Z14test_sin_half2 -// NO_HALF: call <2 x float> @llvm.sin.v2f32( +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) <2 x half> @_Z14test_sin_half2 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <2 x half> @llvm.sin.v2f16 +// NO_HALF-LABEL: define noundef nofpclass(nan inf) <2 x float> @_Z14test_sin_half2 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.sin.v2f32( half2 test_sin_half2(half2 p0) { return sin(p0); } -// NATIVE_HALF-LABEL: define noundef <3 x half> @_Z14test_sin_half3 -// NATIVE_HALF: call <3 x half> @llvm.sin.v3f16 -// NO_HALF-LABEL: define noundef <3 x float> @_Z14test_sin_half3 -// NO_HALF: call <3 x float> @llvm.sin.v3f32( +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) <3 x half> @_Z14test_sin_half3 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <3 x half> @llvm.sin.v3f16 +// NO_HALF-LABEL: define noundef nofpclass(nan inf) <3 x float> @_Z14test_sin_half3 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.sin.v3f32( half3 test_sin_half3(half3 p0) { return sin(p0); } -// NATIVE_HALF-LABEL: define noundef <4 x half> @_Z14test_sin_half4 -// NATIVE_HALF: call <4 x half> @llvm.sin.v4f16 -// NO_HALF-LABEL: define noundef <4 x float> @_Z14test_sin_half4 -// NO_HALF: call <4 x float> @llvm.sin.v4f32( +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) <4 x half> @_Z14test_sin_half4 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <4 x half> @llvm.sin.v4f16 +// NO_HALF-LABEL: define noundef nofpclass(nan inf) <4 x float> @_Z14test_sin_half4 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.sin.v4f32( half4 test_sin_half4(half4 p0) { return sin(p0); } -// CHECK-LABEL: define noundef float @_Z14test_sin_float -// CHECK: call float @llvm.sin.f32( +// CHECK-LABEL: define noundef nofpclass(nan inf) float @_Z14test_sin_float +// CHECK: call reassoc nnan ninf nsz arcp afn float @llvm.sin.f32( float test_sin_float(float p0) { return sin(p0); } -// CHECK-LABEL: define noundef <2 x float> @_Z15test_sin_float2 -// CHECK: call <2 x float> @llvm.sin.v2f32 +// CHECK-LABEL: define noundef nofpclass(nan inf) <2 x float> @_Z15test_sin_float2 +// CHECK: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.sin.v2f32 float2 test_sin_float2(float2 p0) { return sin(p0); } -// CHECK-LABEL: define noundef <3 x float> @_Z15test_sin_float3 -// CHECK: call <3 x float> @llvm.sin.v3f32 +// CHECK-LABEL: define noundef nofpclass(nan inf) <3 x float> @_Z15test_sin_float3 +// CHECK: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.sin.v3f32 float3 test_sin_float3(float3 p0) { return sin(p0); } -// CHECK-LABEL: define noundef <4 x float> @_Z15test_sin_float4 -// CHECK: call <4 x float> @llvm.sin.v4f32 +// CHECK-LABEL: define noundef nofpclass(nan inf) <4 x float> @_Z15test_sin_float4 +// CHECK: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.sin.v4f32 float4 test_sin_float4(float4 p0) { return sin(p0); } diff --git a/clang/test/CodeGenHLSL/builtins/sinh.hlsl b/clang/test/CodeGenHLSL/builtins/sinh.hlsl index 167f6f22422357..d55d60515418cc 100644 --- a/clang/test/CodeGenHLSL/builtins/sinh.hlsl +++ b/clang/test/CodeGenHLSL/builtins/sinh.hlsl @@ -7,53 +7,53 @@ // RUN: -o - | FileCheck %s --check-prefixes=CHECK,NO_HALF // CHECK-LABEL: test_sinh_half -// NATIVE_HALF: call half @llvm.sinh.f16 -// NO_HALF: call float @llvm.sinh.f32 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn half @llvm.sinh.f16 +// NO_HALF: call reassoc nnan ninf nsz arcp afn float @llvm.sinh.f32 half test_sinh_half ( half p0 ) { return sinh ( p0 ); } // CHECK-LABEL: test_sinh_half2 -// NATIVE_HALF: call <2 x half> @llvm.sinh.v2f16 -// NO_HALF: call <2 x float> @llvm.sinh.v2f32 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <2 x half> @llvm.sinh.v2f16 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.sinh.v2f32 half2 test_sinh_half2 ( half2 p0 ) { return sinh ( p0 ); } // CHECK-LABEL: test_sinh_half3 -// NATIVE_HALF: call <3 x half> @llvm.sinh.v3f16 -// NO_HALF: call <3 x float> @llvm.sinh.v3f32 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <3 x half> @llvm.sinh.v3f16 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.sinh.v3f32 half3 test_sinh_half3 ( half3 p0 ) { return sinh ( p0 ); } // CHECK-LABEL: test_sinh_half4 -// NATIVE_HALF: call <4 x half> @llvm.sinh.v4f16 -// NO_HALF: call <4 x float> @llvm.sinh.v4f32 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <4 x half> @llvm.sinh.v4f16 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.sinh.v4f32 half4 test_sinh_half4 ( half4 p0 ) { return sinh ( p0 ); } // CHECK-LABEL: test_sinh_float -// CHECK: call float @llvm.sinh.f32 +// CHECK: call reassoc nnan ninf nsz arcp afn float @llvm.sinh.f32 float test_sinh_float ( float p0 ) { return sinh ( p0 ); } // CHECK-LABEL: test_sinh_float2 -// CHECK: call <2 x float> @llvm.sinh.v2f32 +// CHECK: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.sinh.v2f32 float2 test_sinh_float2 ( float2 p0 ) { return sinh ( p0 ); } // CHECK-LABEL: test_sinh_float3 -// CHECK: call <3 x float> @llvm.sinh.v3f32 +// CHECK: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.sinh.v3f32 float3 test_sinh_float3 ( float3 p0 ) { return sinh ( p0 ); } // CHECK-LABEL: test_sinh_float4 -// CHECK: call <4 x float> @llvm.sinh.v4f32 +// CHECK: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.sinh.v4f32 float4 test_sinh_float4 ( float4 p0 ) { return sinh ( p0 ); } diff --git a/clang/test/CodeGenHLSL/builtins/sqrt.hlsl b/clang/test/CodeGenHLSL/builtins/sqrt.hlsl index 63454cea3fe6fb..94d966f0bef8a4 100644 --- a/clang/test/CodeGenHLSL/builtins/sqrt.hlsl +++ b/clang/test/CodeGenHLSL/builtins/sqrt.hlsl @@ -5,48 +5,48 @@ // RUN: -emit-llvm -disable-llvm-passes -o - | \ // RUN: FileCheck %s --check-prefixes=CHECK,NO_HALF -// NATIVE_HALF-LABEL: define noundef half @_Z14test_sqrt_half -// NATIVE_HALF: %{{.*}} = call half @llvm.sqrt.f16( +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) half @_Z14test_sqrt_half +// NATIVE_HALF: %{{.*}} = call reassoc nnan ninf nsz arcp afn half @llvm.sqrt.f16( // NATIVE_HALF: ret half %{{.*}} -// NO_HALF-LABEL: define noundef float @_Z14test_sqrt_half -// NO_HALF: %{{.*}} = call float @llvm.sqrt.f32( +// NO_HALF-LABEL: define noundef nofpclass(nan inf) float @_Z14test_sqrt_half +// NO_HALF: %{{.*}} = call reassoc nnan ninf nsz arcp afn float @llvm.sqrt.f32( // NO_HALF: ret float %{{.*}} half test_sqrt_half(half p0) { return sqrt(p0); } -// NATIVE_HALF-LABEL: define noundef <2 x half> @_Z15test_sqrt_half2 -// NATIVE_HALF: %{{.*}} = call <2 x half> @llvm.sqrt.v2f16 +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) <2 x half> @_Z15test_sqrt_half2 +// NATIVE_HALF: %{{.*}} = call reassoc nnan ninf nsz arcp afn <2 x half> @llvm.sqrt.v2f16 // NATIVE_HALF: ret <2 x half> %{{.*}} -// NO_HALF-LABEL: define noundef <2 x float> @_Z15test_sqrt_half2 -// NO_HALF: %{{.*}} = call <2 x float> @llvm.sqrt.v2f32( +// NO_HALF-LABEL: define noundef nofpclass(nan inf) <2 x float> @_Z15test_sqrt_half2 +// NO_HALF: %{{.*}} = call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.sqrt.v2f32( // NO_HALF: ret <2 x float> %{{.*}} half2 test_sqrt_half2(half2 p0) { return sqrt(p0); } -// NATIVE_HALF-LABEL: define noundef <3 x half> @_Z15test_sqrt_half3 -// NATIVE_HALF: %{{.*}} = call <3 x half> @llvm.sqrt.v3f16 +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) <3 x half> @_Z15test_sqrt_half3 +// NATIVE_HALF: %{{.*}} = call reassoc nnan ninf nsz arcp afn <3 x half> @llvm.sqrt.v3f16 // NATIVE_HALF: ret <3 x half> %{{.*}} -// NO_HALF-LABEL: define noundef <3 x float> @_Z15test_sqrt_half3 -// NO_HALF: %{{.*}} = call <3 x float> @llvm.sqrt.v3f32( +// NO_HALF-LABEL: define noundef nofpclass(nan inf) <3 x float> @_Z15test_sqrt_half3 +// NO_HALF: %{{.*}} = call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.sqrt.v3f32( // NO_HALF: ret <3 x float> %{{.*}} half3 test_sqrt_half3(half3 p0) { return sqrt(p0); } -// NATIVE_HALF-LABEL: define noundef <4 x half> @_Z15test_sqrt_half4 -// NATIVE_HALF: %{{.*}} = call <4 x half> @llvm.sqrt.v4f16 +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) <4 x half> @_Z15test_sqrt_half4 +// NATIVE_HALF: %{{.*}} = call reassoc nnan ninf nsz arcp afn <4 x half> @llvm.sqrt.v4f16 // NATIVE_HALF: ret <4 x half> %{{.*}} -// NO_HALF-LABEL: define noundef <4 x float> @_Z15test_sqrt_half4 -// NO_HALF: %{{.*}} = call <4 x float> @llvm.sqrt.v4f32( +// NO_HALF-LABEL: define noundef nofpclass(nan inf) <4 x float> @_Z15test_sqrt_half4 +// NO_HALF: %{{.*}} = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.sqrt.v4f32( // NO_HALF: ret <4 x float> %{{.*}} half4 test_sqrt_half4(half4 p0) { return sqrt(p0); } -// CHECK-LABEL: define noundef float @_Z15test_sqrt_float -// CHECK: %{{.*}} = call float @llvm.sqrt.f32( +// CHECK-LABEL: define noundef nofpclass(nan inf) float @_Z15test_sqrt_float +// CHECK: %{{.*}} = call reassoc nnan ninf nsz arcp afn float @llvm.sqrt.f32( // CHECK: ret float %{{.*}} float test_sqrt_float(float p0) { return sqrt(p0); } -// CHECK-LABEL: define noundef <2 x float> @_Z16test_sqrt_float2 -// CHECK: %{{.*}} = call <2 x float> @llvm.sqrt.v2f32 +// CHECK-LABEL: define noundef nofpclass(nan inf) <2 x float> @_Z16test_sqrt_float2 +// CHECK: %{{.*}} = call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.sqrt.v2f32 // CHECK: ret <2 x float> %{{.*}} float2 test_sqrt_float2(float2 p0) { return sqrt(p0); } -// CHECK-LABEL: define noundef <3 x float> @_Z16test_sqrt_float3 -// CHECK: %{{.*}} = call <3 x float> @llvm.sqrt.v3f32 +// CHECK-LABEL: define noundef nofpclass(nan inf) <3 x float> @_Z16test_sqrt_float3 +// CHECK: %{{.*}} = call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.sqrt.v3f32 // CHECK: ret <3 x float> %{{.*}} float3 test_sqrt_float3(float3 p0) { return sqrt(p0); } -// CHECK-LABEL: define noundef <4 x float> @_Z16test_sqrt_float4 -// CHECK: %{{.*}} = call <4 x float> @llvm.sqrt.v4f32 +// CHECK-LABEL: define noundef nofpclass(nan inf) <4 x float> @_Z16test_sqrt_float4 +// CHECK: %{{.*}} = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.sqrt.v4f32 // CHECK: ret <4 x float> %{{.*}} float4 test_sqrt_float4(float4 p0) { return sqrt(p0); } diff --git a/clang/test/CodeGenHLSL/builtins/step.hlsl b/clang/test/CodeGenHLSL/builtins/step.hlsl index 442f4930ca579c..49d09e5c6fe6f7 100644 --- a/clang/test/CodeGenHLSL/builtins/step.hlsl +++ b/clang/test/CodeGenHLSL/builtins/step.hlsl @@ -2,24 +2,24 @@ // RUN: dxil-pc-shadermodel6.3-library %s -fnative-half-type \ // RUN: -emit-llvm -disable-llvm-passes -o - | FileCheck %s \ // RUN: --check-prefixes=CHECK,NATIVE_HALF \ -// RUN: -DFNATTRS=noundef -DTARGET=dx +// RUN: -DFNATTRS="noundef nofpclass(nan inf)" -DTARGET=dx // RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \ // RUN: dxil-pc-shadermodel6.3-library %s -emit-llvm -disable-llvm-passes \ // RUN: -o - | FileCheck %s --check-prefixes=CHECK,NO_HALF \ -// RUN: -DFNATTRS=noundef -DTARGET=dx +// RUN: -DFNATTRS="noundef nofpclass(nan inf)" -DTARGET=dx // RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \ // RUN: spirv-unknown-vulkan-compute %s -fnative-half-type \ // RUN: -emit-llvm -disable-llvm-passes -o - | FileCheck %s \ // RUN: --check-prefixes=CHECK,NATIVE_HALF \ -// RUN: -DFNATTRS="spir_func noundef" -DTARGET=spv +// RUN: -DFNATTRS="spir_func noundef nofpclass(nan inf)" -DTARGET=spv // RUN: %clang_cc1 -finclude-default-header -x hlsl -triple \ // RUN: spirv-unknown-vulkan-compute %s -emit-llvm -disable-llvm-passes \ // RUN: -o - | FileCheck %s --check-prefixes=CHECK,NO_HALF \ -// RUN: -DFNATTRS="spir_func noundef" -DTARGET=spv +// RUN: -DFNATTRS="spir_func noundef nofpclass(nan inf)" -DTARGET=spv // NATIVE_HALF: define [[FNATTRS]] half @ -// NATIVE_HALF: call half @llvm.[[TARGET]].step.f16(half -// NO_HALF: call float @llvm.[[TARGET]].step.f32(float +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn half @llvm.[[TARGET]].step.f16(half +// NO_HALF: call reassoc nnan ninf nsz arcp afn float @llvm.[[TARGET]].step.f32(float // NATIVE_HALF: ret half // NO_HALF: ret float half test_step_half(half p0, half p1) @@ -27,8 +27,8 @@ half test_step_half(half p0, half p1) return step(p0, p1); } // NATIVE_HALF: define [[FNATTRS]] <2 x half> @ -// NATIVE_HALF: call <2 x half> @llvm.[[TARGET]].step.v2f16(<2 x half> -// NO_HALF: call <2 x float> @llvm.[[TARGET]].step.v2f32(<2 x float> +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <2 x half> @llvm.[[TARGET]].step.v2f16(<2 x half> +// NO_HALF: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.[[TARGET]].step.v2f32(<2 x float> // NATIVE_HALF: ret <2 x half> %hlsl.step // NO_HALF: ret <2 x float> %hlsl.step half2 test_step_half2(half2 p0, half2 p1) @@ -36,8 +36,8 @@ half2 test_step_half2(half2 p0, half2 p1) return step(p0, p1); } // NATIVE_HALF: define [[FNATTRS]] <3 x half> @ -// NATIVE_HALF: call <3 x half> @llvm.[[TARGET]].step.v3f16(<3 x half> -// NO_HALF: call <3 x float> @llvm.[[TARGET]].step.v3f32(<3 x float> +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <3 x half> @llvm.[[TARGET]].step.v3f16(<3 x half> +// NO_HALF: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.[[TARGET]].step.v3f32(<3 x float> // NATIVE_HALF: ret <3 x half> %hlsl.step // NO_HALF: ret <3 x float> %hlsl.step half3 test_step_half3(half3 p0, half3 p1) @@ -45,8 +45,8 @@ half3 test_step_half3(half3 p0, half3 p1) return step(p0, p1); } // NATIVE_HALF: define [[FNATTRS]] <4 x half> @ -// NATIVE_HALF: call <4 x half> @llvm.[[TARGET]].step.v4f16(<4 x half> -// NO_HALF: call <4 x float> @llvm.[[TARGET]].step.v4f32(<4 x float> +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <4 x half> @llvm.[[TARGET]].step.v4f16(<4 x half> +// NO_HALF: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.[[TARGET]].step.v4f32(<4 x float> // NATIVE_HALF: ret <4 x half> %hlsl.step // NO_HALF: ret <4 x float> %hlsl.step half4 test_step_half4(half4 p0, half4 p1) @@ -55,28 +55,28 @@ half4 test_step_half4(half4 p0, half4 p1) } // CHECK: define [[FNATTRS]] float @ -// CHECK: call float @llvm.[[TARGET]].step.f32(float +// CHECK: call reassoc nnan ninf nsz arcp afn float @llvm.[[TARGET]].step.f32(float // CHECK: ret float float test_step_float(float p0, float p1) { return step(p0, p1); } // CHECK: define [[FNATTRS]] <2 x float> @ -// CHECK: %hlsl.step = call <2 x float> @llvm.[[TARGET]].step.v2f32( +// CHECK: %hlsl.step = call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.[[TARGET]].step.v2f32( // CHECK: ret <2 x float> %hlsl.step float2 test_step_float2(float2 p0, float2 p1) { return step(p0, p1); } // CHECK: define [[FNATTRS]] <3 x float> @ -// CHECK: %hlsl.step = call <3 x float> @llvm.[[TARGET]].step.v3f32( +// CHECK: %hlsl.step = call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.[[TARGET]].step.v3f32( // CHECK: ret <3 x float> %hlsl.step float3 test_step_float3(float3 p0, float3 p1) { return step(p0, p1); } // CHECK: define [[FNATTRS]] <4 x float> @ -// CHECK: %hlsl.step = call <4 x float> @llvm.[[TARGET]].step.v4f32( +// CHECK: %hlsl.step = call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.[[TARGET]].step.v4f32( // CHECK: ret <4 x float> %hlsl.step float4 test_step_float4(float4 p0, float4 p1) { diff --git a/clang/test/CodeGenHLSL/builtins/tan.hlsl b/clang/test/CodeGenHLSL/builtins/tan.hlsl index aa542fac226d0b..c8c948624a6136 100644 --- a/clang/test/CodeGenHLSL/builtins/tan.hlsl +++ b/clang/test/CodeGenHLSL/builtins/tan.hlsl @@ -7,53 +7,53 @@ // RUN: -o - | FileCheck %s --check-prefixes=CHECK,NO_HALF // CHECK-LABEL: test_tan_half -// NATIVE_HALF: call half @llvm.tan.f16 -// NO_HALF: call float @llvm.tan.f32 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn half @llvm.tan.f16 +// NO_HALF: call reassoc nnan ninf nsz arcp afn float @llvm.tan.f32 half test_tan_half ( half p0 ) { return tan ( p0 ); } // CHECK-LABEL: test_tan_half2 -// NATIVE_HALF: call <2 x half> @llvm.tan.v2f16 -// NO_HALF: call <2 x float> @llvm.tan.v2f32 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <2 x half> @llvm.tan.v2f16 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.tan.v2f32 half2 test_tan_half2 ( half2 p0 ) { return tan ( p0 ); } // CHECK-LABEL: test_tan_half3 -// NATIVE_HALF: call <3 x half> @llvm.tan.v3f16 -// NO_HALF: call <3 x float> @llvm.tan.v3f32 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <3 x half> @llvm.tan.v3f16 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.tan.v3f32 half3 test_tan_half3 ( half3 p0 ) { return tan ( p0 ); } // CHECK-LABEL: test_tan_half4 -// NATIVE_HALF: call <4 x half> @llvm.tan.v4f16 -// NO_HALF: call <4 x float> @llvm.tan.v4f32 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <4 x half> @llvm.tan.v4f16 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.tan.v4f32 half4 test_tan_half4 ( half4 p0 ) { return tan ( p0 ); } // CHECK-LABEL: test_tan_float -// CHECK: call float @llvm.tan.f32 +// CHECK: call reassoc nnan ninf nsz arcp afn float @llvm.tan.f32 float test_tan_float ( float p0 ) { return tan ( p0 ); } // CHECK-LABEL: test_tan_float2 -// CHECK: call <2 x float> @llvm.tan.v2f32 +// CHECK: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.tan.v2f32 float2 test_tan_float2 ( float2 p0 ) { return tan ( p0 ); } // CHECK-LABEL: test_tan_float3 -// CHECK: call <3 x float> @llvm.tan.v3f32 +// CHECK: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.tan.v3f32 float3 test_tan_float3 ( float3 p0 ) { return tan ( p0 ); } // CHECK-LABEL: test_tan_float4 -// CHECK: call <4 x float> @llvm.tan.v4f32 +// CHECK: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.tan.v4f32 float4 test_tan_float4 ( float4 p0 ) { return tan ( p0 ); } diff --git a/clang/test/CodeGenHLSL/builtins/tanh.hlsl b/clang/test/CodeGenHLSL/builtins/tanh.hlsl index 6d09c8b819f91b..f947c7f53b110c 100644 --- a/clang/test/CodeGenHLSL/builtins/tanh.hlsl +++ b/clang/test/CodeGenHLSL/builtins/tanh.hlsl @@ -7,53 +7,53 @@ // RUN: -o - | FileCheck %s --check-prefixes=CHECK,NO_HALF // CHECK-LABEL: test_tanh_half -// NATIVE_HALF: call half @llvm.tanh.f16 -// NO_HALF: call float @llvm.tanh.f32 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn half @llvm.tanh.f16 +// NO_HALF: call reassoc nnan ninf nsz arcp afn float @llvm.tanh.f32 half test_tanh_half ( half p0 ) { return tanh ( p0 ); } // CHECK-LABEL: test_tanh_half2 -// NATIVE_HALF: call <2 x half> @llvm.tanh.v2f16 -// NO_HALF: call <2 x float> @llvm.tanh.v2f32 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <2 x half> @llvm.tanh.v2f16 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.tanh.v2f32 half2 test_tanh_half2 ( half2 p0 ) { return tanh ( p0 ); } // CHECK-LABEL: test_tanh_half3 -// NATIVE_HALF: call <3 x half> @llvm.tanh.v3f16 -// NO_HALF: call <3 x float> @llvm.tanh.v3f32 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <3 x half> @llvm.tanh.v3f16 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.tanh.v3f32 half3 test_tanh_half3 ( half3 p0 ) { return tanh ( p0 ); } // CHECK-LABEL: test_tanh_half4 -// NATIVE_HALF: call <4 x half> @llvm.tanh.v4f16 -// NO_HALF: call <4 x float> @llvm.tanh.v4f32 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <4 x half> @llvm.tanh.v4f16 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.tanh.v4f32 half4 test_tanh_half4 ( half4 p0 ) { return tanh ( p0 ); } // CHECK-LABEL: test_tanh_float -// CHECK: call float @llvm.tanh.f32 +// CHECK: call reassoc nnan ninf nsz arcp afn float @llvm.tanh.f32 float test_tanh_float ( float p0 ) { return tanh ( p0 ); } // CHECK-LABEL: test_tanh_float2 -// CHECK: call <2 x float> @llvm.tanh.v2f32 +// CHECK: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.tanh.v2f32 float2 test_tanh_float2 ( float2 p0 ) { return tanh ( p0 ); } // CHECK-LABEL: test_tanh_float3 -// CHECK: call <3 x float> @llvm.tanh.v3f32 +// CHECK: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.tanh.v3f32 float3 test_tanh_float3 ( float3 p0 ) { return tanh ( p0 ); } // CHECK-LABEL: test_tanh_float4 -// CHECK: call <4 x float> @llvm.tanh.v4f32 +// CHECK: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.tanh.v4f32 float4 test_tanh_float4 ( float4 p0 ) { return tanh ( p0 ); } diff --git a/clang/test/CodeGenHLSL/builtins/trunc.hlsl b/clang/test/CodeGenHLSL/builtins/trunc.hlsl index 3da12c88aa7fec..26de5bf94c3ccb 100644 --- a/clang/test/CodeGenHLSL/builtins/trunc.hlsl +++ b/clang/test/CodeGenHLSL/builtins/trunc.hlsl @@ -5,42 +5,42 @@ // RUN: -emit-llvm -disable-llvm-passes -o - | \ // RUN: FileCheck %s --check-prefixes=CHECK,NO_HALF -// NATIVE_HALF-LABEL: define noundef half @_Z15test_trunc_half -// NATIVE_HALF: call half @llvm.trunc.f16( -// NO_HALF-LABEL: define noundef float @_Z15test_trunc_half -// NO_HALF: call float @llvm.trunc.f32( +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) half @_Z15test_trunc_half +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn half @llvm.trunc.f16( +// NO_HALF-LABEL: define noundef nofpclass(nan inf) float @_Z15test_trunc_half +// NO_HALF: call reassoc nnan ninf nsz arcp afn float @llvm.trunc.f32( half test_trunc_half(half p0) { return trunc(p0); } -// NATIVE_HALF-LABEL: define noundef <2 x half> @_Z16test_trunc_half2 -// NATIVE_HALF: call <2 x half> @llvm.trunc.v2f16 -// NO_HALF-LABEL: define noundef <2 x float> @_Z16test_trunc_half2 -// NO_HALF: call <2 x float> @llvm.trunc.v2f32( +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) <2 x half> @_Z16test_trunc_half2 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <2 x half> @llvm.trunc.v2f16 +// NO_HALF-LABEL: define noundef nofpclass(nan inf) <2 x float> @_Z16test_trunc_half2 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.trunc.v2f32( half2 test_trunc_half2(half2 p0) { return trunc(p0); } -// NATIVE_HALF-LABEL: define noundef <3 x half> @_Z16test_trunc_half3 -// NATIVE_HALF: call <3 x half> @llvm.trunc.v3f16 -// NO_HALF-LABEL: define noundef <3 x float> @_Z16test_trunc_half3 -// NO_HALF: call <3 x float> @llvm.trunc.v3f32( +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) <3 x half> @_Z16test_trunc_half3 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <3 x half> @llvm.trunc.v3f16 +// NO_HALF-LABEL: define noundef nofpclass(nan inf) <3 x float> @_Z16test_trunc_half3 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.trunc.v3f32( half3 test_trunc_half3(half3 p0) { return trunc(p0); } -// NATIVE_HALF-LABEL: define noundef <4 x half> @_Z16test_trunc_half4 -// NATIVE_HALF: call <4 x half> @llvm.trunc.v4f16 -// NO_HALF-LABEL: define noundef <4 x float> @_Z16test_trunc_half4 -// NO_HALF: call <4 x float> @llvm.trunc.v4f32( +// NATIVE_HALF-LABEL: define noundef nofpclass(nan inf) <4 x half> @_Z16test_trunc_half4 +// NATIVE_HALF: call reassoc nnan ninf nsz arcp afn <4 x half> @llvm.trunc.v4f16 +// NO_HALF-LABEL: define noundef nofpclass(nan inf) <4 x float> @_Z16test_trunc_half4 +// NO_HALF: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.trunc.v4f32( half4 test_trunc_half4(half4 p0) { return trunc(p0); } -// CHECK-LABEL: define noundef float @_Z16test_trunc_float -// CHECK: call float @llvm.trunc.f32( +// CHECK-LABEL: define noundef nofpclass(nan inf) float @_Z16test_trunc_float +// CHECK: call reassoc nnan ninf nsz arcp afn float @llvm.trunc.f32( float test_trunc_float(float p0) { return trunc(p0); } -// CHECK-LABEL: define noundef <2 x float> @_Z17test_trunc_float2 -// CHECK: call <2 x float> @llvm.trunc.v2f32 +// CHECK-LABEL: define noundef nofpclass(nan inf) <2 x float> @_Z17test_trunc_float2 +// CHECK: call reassoc nnan ninf nsz arcp afn <2 x float> @llvm.trunc.v2f32 float2 test_trunc_float2(float2 p0) { return trunc(p0); } -// CHECK-LABEL: define noundef <3 x float> @_Z17test_trunc_float3 -// CHECK: call <3 x float> @llvm.trunc.v3f32 +// CHECK-LABEL: define noundef nofpclass(nan inf) <3 x float> @_Z17test_trunc_float3 +// CHECK: call reassoc nnan ninf nsz arcp afn <3 x float> @llvm.trunc.v3f32 float3 test_trunc_float3(float3 p0) { return trunc(p0); } -// CHECK-LABEL: define noundef <4 x float> @_Z17test_trunc_float4 -// CHECK: call <4 x float> @llvm.trunc.v4f32 +// CHECK-LABEL: define noundef nofpclass(nan inf) <4 x float> @_Z17test_trunc_float4 +// CHECK: call reassoc nnan ninf nsz arcp afn <4 x float> @llvm.trunc.v4f32 float4 test_trunc_float4(float4 p0) { return trunc(p0); } diff --git a/clang/test/CodeGenHLSL/float3.hlsl b/clang/test/CodeGenHLSL/float3.hlsl index 767720b049152d..4f03464586bf00 100644 --- a/clang/test/CodeGenHLSL/float3.hlsl +++ b/clang/test/CodeGenHLSL/float3.hlsl @@ -3,7 +3,7 @@ // RUN: -emit-llvm -disable-llvm-passes -o - | FileCheck %s // Make sure float3 is not changed into float4. -// CHECK:<3 x float> @_Z3fooDv3_f(<3 x float> noundef %[[PARAM:[0-9a-zA-Z]+]]) +// CHECK:<3 x float> @_Z3fooDv3_f(<3 x float> noundef nofpclass(nan inf) %[[PARAM:[0-9a-zA-Z]+]]) // CHECK:%[[A_ADDR:.+]] = alloca <3 x float>, align 16 // CHECK-NEXT:store <3 x float> %[[PARAM]], ptr %[[A_ADDR]], align 16 // CHECK-NEXT:%[[V:[0-9]+]] = load <3 x float>, ptr %[[A_ADDR]], align 16 diff --git a/clang/test/CodeGenHLSL/this-reference.hlsl b/clang/test/CodeGenHLSL/this-reference.hlsl index 66b79d42500122..71a33f4a271a2a 100644 --- a/clang/test/CodeGenHLSL/this-reference.hlsl +++ b/clang/test/CodeGenHLSL/this-reference.hlsl @@ -24,7 +24,7 @@ void main() { // CHECK: %call = call noundef i32 @_ZN4Pair8getFirstEv(ptr noundef nonnull align 4 dereferenceable(8) %Vals) // CHECK-NEXT: %First = getelementptr inbounds nuw %struct.Pair, ptr %Vals, i32 0, i32 0 // CHECK-NEXT: store i32 %call, ptr %First, align 4 - // CHECK-NEXT: %call1 = call noundef float @_ZN4Pair9getSecondEv(ptr noundef nonnull align 4 dereferenceable(8) %Vals) + // CHECK-NEXT: %call1 = call reassoc nnan ninf nsz arcp afn noundef nofpclass(nan inf) float @_ZN4Pair9getSecondEv(ptr noundef nonnull align 4 dereferenceable(8) %Vals) // CHECK-NEXT: %Second = getelementptr inbounds nuw %struct.Pair, ptr %Vals, i32 0, i32 1 // CHECK: [[Pair:![0-9]+]] = distinct !DICompositeType(tag: DW_TAG_structure_type, name: "Pair"