1*9880d681SAndroid Build Coastguard Worker; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2*9880d681SAndroid Build Coastguard Worker; RUN: opt < %s -instcombine -S | FileCheck %s 3*9880d681SAndroid Build Coastguard Worker 4*9880d681SAndroid Build Coastguard Worker; Infinity 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Workerdefine i1 @inf0(double %arg) { 7*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @inf0( 8*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 false 9*9880d681SAndroid Build Coastguard Worker; 10*9880d681SAndroid Build Coastguard Worker %tmp = fcmp ogt double %arg, 0x7FF0000000000000 11*9880d681SAndroid Build Coastguard Worker ret i1 %tmp 12*9880d681SAndroid Build Coastguard Worker} 13*9880d681SAndroid Build Coastguard Worker 14*9880d681SAndroid Build Coastguard Workerdefine i1 @inf1(double %arg) { 15*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @inf1( 16*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 true 17*9880d681SAndroid Build Coastguard Worker; 18*9880d681SAndroid Build Coastguard Worker %tmp = fcmp ule double %arg, 0x7FF0000000000000 19*9880d681SAndroid Build Coastguard Worker ret i1 %tmp 20*9880d681SAndroid Build Coastguard Worker} 21*9880d681SAndroid Build Coastguard Worker 22*9880d681SAndroid Build Coastguard Worker; Negative infinity 23*9880d681SAndroid Build Coastguard Worker 24*9880d681SAndroid Build Coastguard Workerdefine i1 @ninf0(double %arg) { 25*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @ninf0( 26*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 false 27*9880d681SAndroid Build Coastguard Worker; 28*9880d681SAndroid Build Coastguard Worker %tmp = fcmp olt double %arg, 0xFFF0000000000000 29*9880d681SAndroid Build Coastguard Worker ret i1 %tmp 30*9880d681SAndroid Build Coastguard Worker} 31*9880d681SAndroid Build Coastguard Worker 32*9880d681SAndroid Build Coastguard Workerdefine i1 @ninf1(double %arg) { 33*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @ninf1( 34*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 true 35*9880d681SAndroid Build Coastguard Worker; 36*9880d681SAndroid Build Coastguard Worker %tmp = fcmp uge double %arg, 0xFFF0000000000000 37*9880d681SAndroid Build Coastguard Worker ret i1 %tmp 38*9880d681SAndroid Build Coastguard Worker} 39*9880d681SAndroid Build Coastguard Worker 40*9880d681SAndroid Build Coastguard Worker; NaNs 41*9880d681SAndroid Build Coastguard Worker 42*9880d681SAndroid Build Coastguard Workerdefine i1 @nan0(double %arg) { 43*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @nan0( 44*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 false 45*9880d681SAndroid Build Coastguard Worker; 46*9880d681SAndroid Build Coastguard Worker %tmp = fcmp ord double %arg, 0x7FF00000FFFFFFFF 47*9880d681SAndroid Build Coastguard Worker ret i1 %tmp 48*9880d681SAndroid Build Coastguard Worker} 49*9880d681SAndroid Build Coastguard Worker 50*9880d681SAndroid Build Coastguard Workerdefine i1 @nan1(double %arg) { 51*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @nan1( 52*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 false 53*9880d681SAndroid Build Coastguard Worker; 54*9880d681SAndroid Build Coastguard Worker %tmp = fcmp oeq double %arg, 0x7FF00000FFFFFFFF 55*9880d681SAndroid Build Coastguard Worker ret i1 %tmp 56*9880d681SAndroid Build Coastguard Worker} 57*9880d681SAndroid Build Coastguard Worker 58*9880d681SAndroid Build Coastguard Workerdefine i1 @nan2(double %arg) { 59*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @nan2( 60*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 false 61*9880d681SAndroid Build Coastguard Worker; 62*9880d681SAndroid Build Coastguard Worker %tmp = fcmp olt double %arg, 0x7FF00000FFFFFFFF 63*9880d681SAndroid Build Coastguard Worker ret i1 %tmp 64*9880d681SAndroid Build Coastguard Worker} 65*9880d681SAndroid Build Coastguard Worker 66*9880d681SAndroid Build Coastguard Workerdefine i1 @nan3(double %arg) { 67*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @nan3( 68*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 true 69*9880d681SAndroid Build Coastguard Worker; 70*9880d681SAndroid Build Coastguard Worker %tmp = fcmp uno double %arg, 0x7FF00000FFFFFFFF 71*9880d681SAndroid Build Coastguard Worker ret i1 %tmp 72*9880d681SAndroid Build Coastguard Worker} 73*9880d681SAndroid Build Coastguard Worker 74*9880d681SAndroid Build Coastguard Workerdefine i1 @nan4(double %arg) { 75*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @nan4( 76*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 true 77*9880d681SAndroid Build Coastguard Worker; 78*9880d681SAndroid Build Coastguard Worker %tmp = fcmp une double %arg, 0x7FF00000FFFFFFFF 79*9880d681SAndroid Build Coastguard Worker ret i1 %tmp 80*9880d681SAndroid Build Coastguard Worker} 81*9880d681SAndroid Build Coastguard Worker 82*9880d681SAndroid Build Coastguard Workerdefine i1 @nan5(double %arg) { 83*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @nan5( 84*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 true 85*9880d681SAndroid Build Coastguard Worker; 86*9880d681SAndroid Build Coastguard Worker %tmp = fcmp ult double %arg, 0x7FF00000FFFFFFFF 87*9880d681SAndroid Build Coastguard Worker ret i1 %tmp 88*9880d681SAndroid Build Coastguard Worker} 89*9880d681SAndroid Build Coastguard Worker 90*9880d681SAndroid Build Coastguard Worker; Negative NaN. 91*9880d681SAndroid Build Coastguard Worker 92*9880d681SAndroid Build Coastguard Workerdefine i1 @nnan0(double %arg) { 93*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @nnan0( 94*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 false 95*9880d681SAndroid Build Coastguard Worker; 96*9880d681SAndroid Build Coastguard Worker %tmp = fcmp ord double %arg, 0xFFF00000FFFFFFFF 97*9880d681SAndroid Build Coastguard Worker ret i1 %tmp 98*9880d681SAndroid Build Coastguard Worker} 99*9880d681SAndroid Build Coastguard Worker 100*9880d681SAndroid Build Coastguard Workerdefine i1 @nnan1(double %arg) { 101*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @nnan1( 102*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 false 103*9880d681SAndroid Build Coastguard Worker; 104*9880d681SAndroid Build Coastguard Worker %tmp = fcmp oeq double %arg, 0xFFF00000FFFFFFFF 105*9880d681SAndroid Build Coastguard Worker ret i1 %tmp 106*9880d681SAndroid Build Coastguard Worker} 107*9880d681SAndroid Build Coastguard Worker 108*9880d681SAndroid Build Coastguard Workerdefine i1 @nnan2(double %arg) { 109*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @nnan2( 110*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 false 111*9880d681SAndroid Build Coastguard Worker; 112*9880d681SAndroid Build Coastguard Worker %tmp = fcmp olt double %arg, 0xFFF00000FFFFFFFF 113*9880d681SAndroid Build Coastguard Worker ret i1 %tmp 114*9880d681SAndroid Build Coastguard Worker} 115*9880d681SAndroid Build Coastguard Worker 116*9880d681SAndroid Build Coastguard Workerdefine i1 @nnan3(double %arg) { 117*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @nnan3( 118*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 true 119*9880d681SAndroid Build Coastguard Worker; 120*9880d681SAndroid Build Coastguard Worker %tmp = fcmp uno double %arg, 0xFFF00000FFFFFFFF 121*9880d681SAndroid Build Coastguard Worker ret i1 %tmp 122*9880d681SAndroid Build Coastguard Worker} 123*9880d681SAndroid Build Coastguard Worker 124*9880d681SAndroid Build Coastguard Workerdefine i1 @nnan4(double %arg) { 125*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @nnan4( 126*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 true 127*9880d681SAndroid Build Coastguard Worker; 128*9880d681SAndroid Build Coastguard Worker %tmp = fcmp une double %arg, 0xFFF00000FFFFFFFF 129*9880d681SAndroid Build Coastguard Worker ret i1 %tmp 130*9880d681SAndroid Build Coastguard Worker} 131*9880d681SAndroid Build Coastguard Worker 132*9880d681SAndroid Build Coastguard Workerdefine i1 @nnan5(double %arg) { 133*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @nnan5( 134*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 true 135*9880d681SAndroid Build Coastguard Worker; 136*9880d681SAndroid Build Coastguard Worker %tmp = fcmp ult double %arg, 0xFFF00000FFFFFFFF 137*9880d681SAndroid Build Coastguard Worker ret i1 %tmp 138*9880d681SAndroid Build Coastguard Worker} 139*9880d681SAndroid Build Coastguard Worker 140*9880d681SAndroid Build Coastguard Worker; Negative zero. 141*9880d681SAndroid Build Coastguard Worker 142*9880d681SAndroid Build Coastguard Workerdefine i1 @nzero0() { 143*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @nzero0( 144*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 true 145*9880d681SAndroid Build Coastguard Worker; 146*9880d681SAndroid Build Coastguard Worker %tmp = fcmp oeq double 0.0, -0.0 147*9880d681SAndroid Build Coastguard Worker ret i1 %tmp 148*9880d681SAndroid Build Coastguard Worker} 149*9880d681SAndroid Build Coastguard Worker 150*9880d681SAndroid Build Coastguard Workerdefine i1 @nzero1() { 151*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @nzero1( 152*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 false 153*9880d681SAndroid Build Coastguard Worker; 154*9880d681SAndroid Build Coastguard Worker %tmp = fcmp ogt double 0.0, -0.0 155*9880d681SAndroid Build Coastguard Worker ret i1 %tmp 156*9880d681SAndroid Build Coastguard Worker} 157*9880d681SAndroid Build Coastguard Worker 158*9880d681SAndroid Build Coastguard Worker; Misc. 159*9880d681SAndroid Build Coastguard Worker 160*9880d681SAndroid Build Coastguard Workerdefine i1 @misc0(double %arg) { 161*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @misc0( 162*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: [[TMP:%.*]] = fcmp ord double %arg, 0.000000e+00 163*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 [[TMP]] 164*9880d681SAndroid Build Coastguard Worker; 165*9880d681SAndroid Build Coastguard Worker %tmp = fcmp oeq double %arg, %arg 166*9880d681SAndroid Build Coastguard Worker ret i1 %tmp 167*9880d681SAndroid Build Coastguard Worker} 168*9880d681SAndroid Build Coastguard Worker 169*9880d681SAndroid Build Coastguard Workerdefine i1 @misc1(double %arg) { 170*9880d681SAndroid Build Coastguard Worker; CHECK-LABEL: @misc1( 171*9880d681SAndroid Build Coastguard Worker; CHECK-NEXT: ret i1 false 172*9880d681SAndroid Build Coastguard Worker; 173*9880d681SAndroid Build Coastguard Worker %tmp = fcmp one double %arg, %arg 174*9880d681SAndroid Build Coastguard Worker ret i1 %tmp 175*9880d681SAndroid Build Coastguard Worker} 176*9880d681SAndroid Build Coastguard Worker 177