Changeset View
Changeset View
Standalone View
Standalone View
test/Verifier/fp-intrinsics.ll
; RUN: opt -verify -S < %s 2>&1 | FileCheck --check-prefix=CHECK1 %s | |||||
; RUN: sed -e s/.T2:// %s | not opt -verify -disable-output 2>&1 | FileCheck --check-prefix=CHECK2 %s | |||||
; RUN: sed -e s/.T3:// %s | not opt -verify -disable-output 2>&1 | FileCheck --check-prefix=CHECK3 %s | |||||
; Common declaration used for all runs. | |||||
declare double @llvm.experimental.constrained.fadd.f64(double, double, metadata, metadata) | |||||
; Test that the verifier accepts legal code, and that the correct attributes are | |||||
; attached to the FP intrinsic. | |||||
; CHECK1: declare double @llvm.experimental.constrained.fadd.f64(double, double, metadata, metadata) #[[ATTR:[0-9]+]] | |||||
; CHECK1: attributes #[[ATTR]] = { inaccessiblememonly nounwind } | |||||
; Note: FP exceptions aren't usually caught through normal unwind mechanisms, | |||||
; but we may want to revisit this for asynchronous exception handling. | |||||
define double @f1(double %a, double %b) { | |||||
entry: | |||||
%fadd = call double @llvm.experimental.constrained.fadd.f64( | |||||
double %a, double %b, | |||||
metadata !"round.dynamic", | |||||
metadata !"fpexcept.strict") | |||||
ret double %fadd | |||||
} | |||||
; Test an illegal value for the rounding mode argument. | |||||
; CHECK2: invalid rounding mode argument | |||||
;T2: define double @f2(double %a, double %b) { | |||||
;T2: entry: | |||||
;T2: %fadd = call double @llvm.experimental.constrained.fadd.f64( | |||||
;T2: double %a, double %b, | |||||
;T2: metadata !"round.dynomite", | |||||
;T2: metadata !"fpexcept.strict") | |||||
;T2: ret double %fadd | |||||
;T2: } | |||||
; Test an illegal value for the exception behavior argument. | |||||
; CHECK3: invalid exception behavior argument | |||||
;T3: define double @f2(double %a, double %b) { | |||||
;T3: entry: | |||||
;T3: %fadd = call double @llvm.experimental.constrained.fadd.f64( | |||||
;T3: double %a, double %b, | |||||
;T3: metadata !"round.dynamic", | |||||
;T3: metadata !"fpexcept.restrict") | |||||
;T3: ret double %fadd | |||||
;T3: } |