79 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			LLVM
		
	
	
	
			
		
		
	
	
			79 lines
		
	
	
		
			3.7 KiB
		
	
	
	
		
			LLVM
		
	
	
	
| ; 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
 | |
| ; RUN: sed -e s/.T4:// %s | not opt -verify -disable-output 2>&1 | FileCheck --check-prefix=CHECK4 %s
 | |
| ; RUN: sed -e s/.T5:// %s | not opt -verify -disable-output 2>&1 | FileCheck --check-prefix=CHECK5 %s
 | |
| 
 | |
| ; Common declarations used for all runs.
 | |
| declare double @llvm.experimental.constrained.fadd.f64(double, double, metadata, metadata)
 | |
| declare double @llvm.experimental.constrained.sqrt.f64(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: declare double @llvm.experimental.constrained.sqrt.f64(double, metadata, metadata) #[[ATTR]]
 | |
| ; 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
 | |
| }
 | |
| 
 | |
| define double @f1u(double %a) {
 | |
| entry:
 | |
|   %fsqrt = call double @llvm.experimental.constrained.sqrt.f64(
 | |
|                                                double %a,
 | |
|                                                metadata !"round.dynamic",
 | |
|                                                metadata !"fpexcept.strict")
 | |
|   ret double %fsqrt
 | |
| }
 | |
| 
 | |
| ; 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 @f3(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: }
 | |
| 
 | |
| ; Test an illegal value for the rounding mode argument.
 | |
| ; CHECK4: invalid rounding mode argument
 | |
| ;T4: define double @f4(double %a) {
 | |
| ;T4: entry:
 | |
| ;T4:   %fadd = call double @llvm.experimental.constrained.sqrt.f64(
 | |
| ;T4:                                           double %a,
 | |
| ;T4:                                           metadata !"round.dynomite",
 | |
| ;T4:                                           metadata !"fpexcept.strict")
 | |
| ;T4:   ret double %fadd
 | |
| ;T4: }
 | |
| 
 | |
| ; Test an illegal value for the exception behavior argument.
 | |
| ; CHECK5: invalid exception behavior argument
 | |
| ;T5: define double @f5(double %a) {
 | |
| ;T5: entry:
 | |
| ;T5:   %fadd = call double @llvm.experimental.constrained.sqrt.f64(
 | |
| ;T5:                                         double %a,
 | |
| ;T5:                                         metadata !"round.dynamic",
 | |
| ;T5:                                         metadata !"fpexcept.restrict")
 | |
| ;T5:   ret double %fadd
 | |
| ;T5: }
 |