You've already forked linux-packaging-mono
							
							
		
			
	
	
		
			51 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			LLVM
		
	
	
	
	
	
		
		
			
		
	
	
			51 lines
		
	
	
		
			1.3 KiB
		
	
	
	
		
			LLVM
		
	
	
	
	
	
|   | ; Test the Test Data Class instruction, as used by fpclassify.
 | ||
|  | ;
 | ||
|  | ; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s
 | ||
|  | ;
 | ||
|  | 
 | ||
|  | declare float @llvm.fabs.f32(float) | ||
|  | declare double @llvm.fabs.f64(double) | ||
|  | declare fp128 @llvm.fabs.f128(fp128) | ||
|  | 
 | ||
|  | define i32 @fpc(double %x) { | ||
|  | entry: | ||
|  | ; CHECK-LABEL: fpc
 | ||
|  | ; CHECK-DAG: lhi %r2, 5
 | ||
|  | ; CHECK-DAG: ltdbr %f0, %f0
 | ||
|  | ; CHECK: je [[RET:.L.*]]
 | ||
|  |   %testeq = fcmp oeq double %x, 0.000000e+00 | ||
|  |   br i1 %testeq, label %ret, label %nonzero, !prof !1 | ||
|  | 
 | ||
|  | nonzero: | ||
|  | ; CHECK-DAG: lhi %r2, 1
 | ||
|  | ; CHECK-DAG: cdbr %f0, %f0
 | ||
|  | ; CHECK: jo [[RET]]
 | ||
|  |   %testnan = fcmp uno double %x, 0.000000e+00 | ||
|  |   br i1 %testnan, label %ret, label %nonzeroord, !prof !1 | ||
|  | 
 | ||
|  | nonzeroord: | ||
|  | ; CHECK-DAG: lhi %r2, 2
 | ||
|  | ; CHECK-DAG: tcdb %f0, 48
 | ||
|  | ; CHECK: jl [[RET]]
 | ||
|  |   %abs = tail call double @llvm.fabs.f64(double %x) | ||
|  |   %testinf = fcmp oeq double %abs, 0x7FF0000000000000 | ||
|  |   br i1 %testinf, label %ret, label %finite, !prof !1 | ||
|  | 
 | ||
|  | finite: | ||
|  | ; CHECK-DAG: lhi %r2, 3
 | ||
|  | ; CHECK-DAG: tcdb %f0, 831
 | ||
|  | ; CHECK: blr %r14
 | ||
|  | ; CHECK: lhi %r2, 4
 | ||
|  |   %testnormal = fcmp uge double %abs, 0x10000000000000 | ||
|  |   %finres = select i1 %testnormal, i32 3, i32 4 | ||
|  |   br label %ret | ||
|  | 
 | ||
|  | ret: | ||
|  | ; CHECK: [[RET]]:
 | ||
|  | ; CHECK: br %r14
 | ||
|  |   %res = phi i32 [ 5, %entry ], [ 1, %nonzero ], [ 2, %nonzeroord ], [ %finres, %finite ] | ||
|  |   ret i32 %res | ||
|  | } | ||
|  | 
 | ||
|  | !1 = !{!"branch_weights", i32 1, i32 1} |