summaryrefslogtreecommitdiffstats
path: root/llvm/test/Verifier
diff options
context:
space:
mode:
authorDuncan Sands <baldrick@free.fr>2012-04-16 16:28:59 +0000
committerDuncan Sands <baldrick@free.fr>2012-04-16 16:28:59 +0000
commit05f4df8d725c89708b1ac1394b695c9fc19c61b9 (patch)
treeddc53954bbd1c7afb505256055aeda02ad86b4be /llvm/test/Verifier
parent4190b507c58fc2e48f0f017f2109a29d99b0d54c (diff)
downloadbcm5719-llvm-05f4df8d725c89708b1ac1394b695c9fc19c61b9.tar.gz
bcm5719-llvm-05f4df8d725c89708b1ac1394b695c9fc19c61b9.zip
Make it possible to indicate relaxed floating point requirements at the IR level
through the use of 'fpmath' metadata. Currently this only provides a 'fpaccuracy' value, which may be a number in ULPs or the keyword 'fast', however the intent is that this will be extended with additional information about NaN's, infinities etc later. No optimizations have been hooked up to this so far. llvm-svn: 154822
Diffstat (limited to 'llvm/test/Verifier')
-rw-r--r--llvm/test/Verifier/fpmath.ll24
1 files changed, 18 insertions, 6 deletions
diff --git a/llvm/test/Verifier/fpmath.ll b/llvm/test/Verifier/fpmath.ll
index 4cfed2a3979..a7d3ea8e898 100644
--- a/llvm/test/Verifier/fpmath.ll
+++ b/llvm/test/Verifier/fpmath.ll
@@ -1,6 +1,6 @@
; RUN: not llvm-as < %s |& FileCheck %s
-define void @foo(i32 %i, float %f, <2 x float> %g) {
+define void @fpmath1(i32 %i, float %f, <2 x float> %g) {
%s = add i32 %i, %i, !fpmath !0
; CHECK: fpmath requires a floating point result!
%t = fadd float %f, %f, !fpmath !1
@@ -8,17 +8,27 @@ define void @foo(i32 %i, float %f, <2 x float> %g) {
%u = fadd float %f, %f, !fpmath !2
; CHECK: fpmath takes one operand!
%v = fadd float %f, %f, !fpmath !3
-; CHECK: fpmath ULPs not a floating point number!
+; CHECK: invalid fpmath accuracy!
%w = fadd float %f, %f, !fpmath !0
; Above line is correct.
%w2 = fadd <2 x float> %g, %g, !fpmath !0
; Above line is correct.
%x = fadd float %f, %f, !fpmath !4
-; CHECK: fpmath ULPs is negative!
+; CHECK: fpmath accuracy not a positive number!
%y = fadd float %f, %f, !fpmath !5
-; CHECK: fpmath ULPs is negative!
+; CHECK: fpmath accuracy not a positive number!
%z = fadd float %f, %f, !fpmath !6
-; CHECK: fpmath ULPs not a normal number!
+; CHECK: fpmath accuracy not a positive number!
+ ret void
+}
+
+define void @fpmath2(float %f, <2 x float> %g) {
+ %w = fadd float %f, %f, !fpmath !7
+; Above line is correct.
+ %w2 = fadd <2 x float> %g, %g, !fpmath !7
+; Above line is correct.
+ %x = fadd float %f, %f, !fpmath !8
+; CHECK: wrong fpmath accuracy keyword!
ret void
}
@@ -27,5 +37,7 @@ define void @foo(i32 %i, float %f, <2 x float> %g) {
!2 = metadata !{ float 1.0, float 1.0 }
!3 = metadata !{ i32 1 }
!4 = metadata !{ float -1.0 }
-!5 = metadata !{ float -0.0 }
+!5 = metadata !{ float 0.0 }
!6 = metadata !{ float 0x7FFFFFFF00000000 }
+!7 = metadata !{ metadata !"fast" }
+!8 = metadata !{ metadata !"slow" }
OpenPOWER on IntegriCloud