[llvm] 8d8bb40 - [Verifier] Verify attribute `denormal-fp-math[-f32]` (#112310)

via llvm-commits llvm-commits at lists.llvm.org
Tue Oct 15 02:32:20 PDT 2024


Author: Yingwei Zheng
Date: 2024-10-15T17:32:16+08:00
New Revision: 8d8bb4032b7cf4151906e8bb3270c5952997a51a

URL: https://github.com/llvm/llvm-project/commit/8d8bb4032b7cf4151906e8bb3270c5952997a51a
DIFF: https://github.com/llvm/llvm-project/commit/8d8bb4032b7cf4151906e8bb3270c5952997a51a.diff

LOG: [Verifier] Verify attribute `denormal-fp-math[-f32]` (#112310)

Some typos are also fixed. Address
https://github.com/llvm/llvm-project/pull/112067#pullrequestreview-2363722447.

Added: 
    llvm/test/Verifier/denormal-fp-math.ll

Modified: 
    llvm/lib/IR/Verifier.cpp
    llvm/test/CodeGen/AMDGPU/clamp-modifier.ll
    llvm/test/DebugInfo/COFF/fortran-contained-proc.ll
    llvm/test/Transforms/Attributor/nofpclass-minimum-maximum.ll
    llvm/test/Transforms/Attributor/nofpclass-minnum-maxnum.ll
    llvm/test/Transforms/InstCombine/fcmp-denormals-are-zero.ll

Removed: 
    


################################################################################
diff  --git a/llvm/lib/IR/Verifier.cpp b/llvm/lib/IR/Verifier.cpp
index b89c9ce46e7d61..0412b93798b94d 100644
--- a/llvm/lib/IR/Verifier.cpp
+++ b/llvm/lib/IR/Verifier.cpp
@@ -2401,6 +2401,19 @@ void Verifier::verifyFunctionAttrs(FunctionType *FT, AttributeList Attrs,
     if (!Info)
       CheckFailed("invalid name for a VFABI variant: " + S, V);
   }
+
+  if (auto A = Attrs.getFnAttr("denormal-fp-math"); A.isValid()) {
+    StringRef S = A.getValueAsString();
+    if (!parseDenormalFPAttribute(S).isValid())
+      CheckFailed("invalid value for 'denormal-fp-math' attribute: " + S, V);
+  }
+
+  if (auto A = Attrs.getFnAttr("denormal-fp-math-f32"); A.isValid()) {
+    StringRef S = A.getValueAsString();
+    if (!parseDenormalFPAttribute(S).isValid())
+      CheckFailed("invalid value for 'denormal-fp-math-f32' attribute: " + S,
+                  V);
+  }
 }
 
 void Verifier::verifyFunctionMetadata(

diff  --git a/llvm/test/CodeGen/AMDGPU/clamp-modifier.ll b/llvm/test/CodeGen/AMDGPU/clamp-modifier.ll
index 45324392aacde2..bafbc9486a1c21 100644
--- a/llvm/test/CodeGen/AMDGPU/clamp-modifier.ll
+++ b/llvm/test/CodeGen/AMDGPU/clamp-modifier.ll
@@ -1657,7 +1657,7 @@ declare void @llvm.dbg.value(metadata, i64, metadata, metadata) #1
 
 attributes #0 = { nounwind "denormal-fp-math-f32"="preserve-sign,preserve-sign" }
 attributes #1 = { nounwind readnone }
-attributes #2 = { nounwind "denormal-fp-math-f32"="ieee.ieee" }
+attributes #2 = { nounwind "denormal-fp-math-f32"="ieee,ieee" }
 attributes #3 = { nounwind "denormal-fp-math-f32"="ieee,ieee" "denormal-fp-math"="preserve-sign,preserve-sign" }
 
 !llvm.dbg.cu = !{!0}

diff  --git a/llvm/test/DebugInfo/COFF/fortran-contained-proc.ll b/llvm/test/DebugInfo/COFF/fortran-contained-proc.ll
index f8b66aae212e79..82b39d4fa34cb0 100644
--- a/llvm/test/DebugInfo/COFF/fortran-contained-proc.ll
+++ b/llvm/test/DebugInfo/COFF/fortran-contained-proc.ll
@@ -74,8 +74,8 @@ declare void @llvm.dbg.declare(metadata, metadata, metadata) #3
 ; Function Attrs: mustprogress nofree nosync nounwind readnone speculatable willreturn
 declare void @llvm.dbg.value(metadata, metadata, metadata) #3
 
-attributes #0 = { nounwind uwtable "denormal-fp-math"="preserve_sign,preserve_sign" "frame-pointer"="none" "intel-lang"="fortran" "min-legal-vector-width"="0" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" }
-attributes #1 = { mustprogress nofree norecurse nosync nounwind uwtable willreturn writeonly "denormal-fp-math"="preserve_sign,preserve_sign" "frame-pointer"="none" "intel-lang"="fortran" "min-legal-vector-width"="0" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" }
+attributes #0 = { nounwind uwtable "denormal-fp-math"="preserve-sign,preserve-sign" "frame-pointer"="none" "intel-lang"="fortran" "min-legal-vector-width"="0" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" }
+attributes #1 = { mustprogress nofree norecurse nosync nounwind uwtable willreturn writeonly "denormal-fp-math"="preserve-sign,preserve-sign" "frame-pointer"="none" "intel-lang"="fortran" "min-legal-vector-width"="0" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" }
 attributes #2 = { nofree "intel-lang"="fortran" }
 attributes #3 = { mustprogress nofree nosync nounwind readnone speculatable willreturn }
 attributes #4 = { nounwind }

diff  --git a/llvm/test/Transforms/Attributor/nofpclass-minimum-maximum.ll b/llvm/test/Transforms/Attributor/nofpclass-minimum-maximum.ll
index f60581c0089afe..d9b1375d3c6337 100644
--- a/llvm/test/Transforms/Attributor/nofpclass-minimum-maximum.ll
+++ b/llvm/test/Transforms/Attributor/nofpclass-minimum-maximum.ll
@@ -511,6 +511,6 @@ attributes #3 = { "denormal-fp-math"="dynamic,dynamic" }
 attributes #4 = { "denormal-fp-math"="ieee,preserve-sign" }
 attributes #5 = { "denormal-fp-math"="preserve-sign,ieee" }
 attributes #6 = { "denormal-fp-math"="ieee,positive-zero" }
-attributes #7 = { "denormal-fp-math"="positive-zero-sign,ieee" }
+attributes #7 = { "denormal-fp-math"="positive-zero,ieee" }
 ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
 ; TUNIT: {{.*}}

diff  --git a/llvm/test/Transforms/Attributor/nofpclass-minnum-maxnum.ll b/llvm/test/Transforms/Attributor/nofpclass-minnum-maxnum.ll
index cea11a3c58e3c4..ddfddbc22a5179 100644
--- a/llvm/test/Transforms/Attributor/nofpclass-minnum-maxnum.ll
+++ b/llvm/test/Transforms/Attributor/nofpclass-minnum-maxnum.ll
@@ -511,6 +511,6 @@ attributes #3 = { "denormal-fp-math"="dynamic,dynamic" }
 attributes #4 = { "denormal-fp-math"="ieee,preserve-sign" }
 attributes #5 = { "denormal-fp-math"="preserve-sign,ieee" }
 attributes #6 = { "denormal-fp-math"="ieee,positive-zero" }
-attributes #7 = { "denormal-fp-math"="positive-zero-sign,ieee" }
+attributes #7 = { "denormal-fp-math"="positive-zero,ieee" }
 ;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line:
 ; TUNIT: {{.*}}

diff  --git a/llvm/test/Transforms/InstCombine/fcmp-denormals-are-zero.ll b/llvm/test/Transforms/InstCombine/fcmp-denormals-are-zero.ll
index 22c422c8160395..eea1dda6230a9d 100644
--- a/llvm/test/Transforms/InstCombine/fcmp-denormals-are-zero.ll
+++ b/llvm/test/Transforms/InstCombine/fcmp-denormals-are-zero.ll
@@ -350,5 +350,5 @@ declare <2 x double> @llvm.fabs.v2f64(<2 x double>)
 
 attributes #0 = { "denormal-fp-math"="ieee,preserve-sign" }
 attributes #1 = { "denormal-fp-math"="ieee,positive-zero" }
-attributes #2 = { "denormal-fp-math"="ieee,iee" }
+attributes #2 = { "denormal-fp-math"="ieee,ieee" }
 attributes #3 = { "denormal-fp-math-f32"="ieee,preserve-sign" }

diff  --git a/llvm/test/Verifier/denormal-fp-math.ll b/llvm/test/Verifier/denormal-fp-math.ll
new file mode 100644
index 00000000000000..f79f28a3669445
--- /dev/null
+++ b/llvm/test/Verifier/denormal-fp-math.ll
@@ -0,0 +1,20 @@
+; RUN: not llvm-as %s -o /dev/null 2>&1 | FileCheck --implicit-check-not="invalid value" %s
+
+define float @test_denormal_fp_math_valid() "denormal-fp-math"="ieee,ieee" {
+  ret float 1.0
+}
+
+; CHECK: invalid value for 'denormal-fp-math' attribute: foo,ieee
+define float @test_denormal_fp_math_invalid1() "denormal-fp-math"="foo,ieee" {
+  ret float 1.0
+}
+
+; CHECK: invalid value for 'denormal-fp-math' attribute: ieee,ieee,ieee
+define float @test_denormal_fp_math_invalid2() "denormal-fp-math"="ieee,ieee,ieee" {
+  ret float 1.0
+}
+
+; CHECK: invalid value for 'denormal-fp-math-f32' attribute: foo,ieee
+define float @test_denormal_fp_math_f32_invalid() "denormal-fp-math-f32"="foo,ieee" {
+  ret float 1.0
+}


        


More information about the llvm-commits mailing list