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

Some typos are also fixed. Address
https://github.com/llvm/llvm-project/pull/112067#pullrequestreview-2363722447.
This commit is contained in:
Yingwei Zheng
2024-10-15 17:32:16 +08:00
committed by GitHub
parent 9efb07f261
commit 8d8bb4032b
7 changed files with 39 additions and 6 deletions

View File

@@ -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(

View File

@@ -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}

View File

@@ -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 }

View File

@@ -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: {{.*}}

View File

@@ -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: {{.*}}

View File

@@ -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" }

View File

@@ -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
}