1*9880d681SAndroid Build Coastguard Worker; Test the Test Data Class instruction, as used by fpclassify. 2*9880d681SAndroid Build Coastguard Worker; 3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -mtriple=s390x-linux-gnu | FileCheck %s 4*9880d681SAndroid Build Coastguard Worker; 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Workerdeclare float @llvm.fabs.f32(float) 7*9880d681SAndroid Build Coastguard Workerdeclare double @llvm.fabs.f64(double) 8*9880d681SAndroid Build Coastguard Workerdeclare fp128 @llvm.fabs.f128(fp128) 9*9880d681SAndroid Build Coastguard Worker 10*9880d681SAndroid Build Coastguard Workerdefine i32 @fpc(double %x) { 11*9880d681SAndroid Build Coastguard Workerentry: 12*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: fpc 13*9880d681SAndroid Build Coastguard Worker; CHECK: lhi %r2, 5 14*9880d681SAndroid Build Coastguard Worker; CHECK: ltdbr %f0, %f0 15*9880d681SAndroid Build Coastguard Worker; CHECK: je [[RET:.L.*]] 16*9880d681SAndroid Build Coastguard Worker %testeq = fcmp oeq double %x, 0.000000e+00 17*9880d681SAndroid Build Coastguard Worker br i1 %testeq, label %ret, label %nonzero 18*9880d681SAndroid Build Coastguard Worker 19*9880d681SAndroid Build Coastguard Workernonzero: 20*9880d681SAndroid Build Coastguard Worker; CHECK: lhi %r2, 1 21*9880d681SAndroid Build Coastguard Worker; CHECK: cdbr %f0, %f0 22*9880d681SAndroid Build Coastguard Worker; CHECK: jo [[RET]] 23*9880d681SAndroid Build Coastguard Worker %testnan = fcmp uno double %x, 0.000000e+00 24*9880d681SAndroid Build Coastguard Worker br i1 %testnan, label %ret, label %nonzeroord 25*9880d681SAndroid Build Coastguard Worker 26*9880d681SAndroid Build Coastguard Workernonzeroord: 27*9880d681SAndroid Build Coastguard Worker; CHECK: lhi %r2, 2 28*9880d681SAndroid Build Coastguard Worker; CHECK: tcdb %f0, 48 29*9880d681SAndroid Build Coastguard Worker; CHECK: jl [[RET]] 30*9880d681SAndroid Build Coastguard Worker %abs = tail call double @llvm.fabs.f64(double %x) 31*9880d681SAndroid Build Coastguard Worker %testinf = fcmp oeq double %abs, 0x7FF0000000000000 32*9880d681SAndroid Build Coastguard Worker br i1 %testinf, label %ret, label %finite 33*9880d681SAndroid Build Coastguard Worker 34*9880d681SAndroid Build Coastguard Workerfinite: 35*9880d681SAndroid Build Coastguard Worker; CHECK: lhi %r2, 3 36*9880d681SAndroid Build Coastguard Worker; CHECK: tcdb %f0, 831 37*9880d681SAndroid Build Coastguard Worker; CHECK: blr %r14 38*9880d681SAndroid Build Coastguard Worker; CHECK: lhi %r2, 4 39*9880d681SAndroid Build Coastguard Worker %testnormal = fcmp uge double %abs, 0x10000000000000 40*9880d681SAndroid Build Coastguard Worker %finres = select i1 %testnormal, i32 3, i32 4 41*9880d681SAndroid Build Coastguard Worker br label %ret 42*9880d681SAndroid Build Coastguard Worker 43*9880d681SAndroid Build Coastguard Workerret: 44*9880d681SAndroid Build Coastguard Worker; CHECK: [[RET]]: 45*9880d681SAndroid Build Coastguard Worker; CHECK: br %r14 46*9880d681SAndroid Build Coastguard Worker %res = phi i32 [ 5, %entry ], [ 1, %nonzero ], [ 2, %nonzeroord ], [ %finres, %finite ] 47*9880d681SAndroid Build Coastguard Worker ret i32 %res 48*9880d681SAndroid Build Coastguard Worker} 49