1*1336e3d0Sc8ef; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5 2*1336e3d0Sc8ef; RUN: opt < %s -passes=instcombine -S | FileCheck %s 3*1336e3d0Sc8ef 4*1336e3d0Sc8efdefine i32 @ilogbf_const1() { 5*1336e3d0Sc8ef; CHECK-LABEL: define i32 @ilogbf_const1() { 6*1336e3d0Sc8ef; CHECK-NEXT: [[R:%.*]] = call i32 @ilogbf(float 7.000000e+00) 7*1336e3d0Sc8ef; CHECK-NEXT: ret i32 2 8*1336e3d0Sc8ef; 9*1336e3d0Sc8ef %r = call i32 @ilogbf(float 7.000000e+00) 10*1336e3d0Sc8ef ret i32 %r 11*1336e3d0Sc8ef} 12*1336e3d0Sc8ef 13*1336e3d0Sc8efdefine i32 @ilogb_const1() { 14*1336e3d0Sc8ef; CHECK-LABEL: define i32 @ilogb_const1() { 15*1336e3d0Sc8ef; CHECK-NEXT: [[R:%.*]] = call i32 @ilogb(double -7.000000e+00) 16*1336e3d0Sc8ef; CHECK-NEXT: ret i32 2 17*1336e3d0Sc8ef; 18*1336e3d0Sc8ef %r = call i32 @ilogb(double -7.000000e+00) 19*1336e3d0Sc8ef ret i32 %r 20*1336e3d0Sc8ef} 21*1336e3d0Sc8ef 22*1336e3d0Sc8efdefine i32 @ilogbf_const2() { 23*1336e3d0Sc8ef; CHECK-LABEL: define i32 @ilogbf_const2() { 24*1336e3d0Sc8ef; CHECK-NEXT: [[R:%.*]] = call i32 @ilogbf(float 5.000000e-01) 25*1336e3d0Sc8ef; CHECK-NEXT: ret i32 -1 26*1336e3d0Sc8ef; 27*1336e3d0Sc8ef %r = call i32 @ilogbf(float 5.000000e-01) 28*1336e3d0Sc8ef ret i32 %r 29*1336e3d0Sc8ef} 30*1336e3d0Sc8ef 31*1336e3d0Sc8efdefine i32 @ilogb_const2() { 32*1336e3d0Sc8ef; CHECK-LABEL: define i32 @ilogb_const2() { 33*1336e3d0Sc8ef; CHECK-NEXT: [[R:%.*]] = call i32 @ilogb(double -5.000000e-01) 34*1336e3d0Sc8ef; CHECK-NEXT: ret i32 -1 35*1336e3d0Sc8ef; 36*1336e3d0Sc8ef %r = call i32 @ilogb(double -5.000000e-01) 37*1336e3d0Sc8ef ret i32 %r 38*1336e3d0Sc8ef} 39*1336e3d0Sc8ef 40*1336e3d0Sc8efdefine i32 @ilogbf_zero() { 41*1336e3d0Sc8ef; CHECK-LABEL: define i32 @ilogbf_zero() { 42*1336e3d0Sc8ef; CHECK-NEXT: [[R:%.*]] = call i32 @ilogbf(float 0.000000e+00) 43*1336e3d0Sc8ef; CHECK-NEXT: ret i32 [[R]] 44*1336e3d0Sc8ef; 45*1336e3d0Sc8ef %r = call i32 @ilogbf(float 0.000000e+00) 46*1336e3d0Sc8ef ret i32 %r 47*1336e3d0Sc8ef} 48*1336e3d0Sc8ef 49*1336e3d0Sc8efdefine i32 @ilogb_zero() { 50*1336e3d0Sc8ef; CHECK-LABEL: define i32 @ilogb_zero() { 51*1336e3d0Sc8ef; CHECK-NEXT: [[R:%.*]] = call i32 @ilogb(double 0.000000e+00) 52*1336e3d0Sc8ef; CHECK-NEXT: ret i32 [[R]] 53*1336e3d0Sc8ef; 54*1336e3d0Sc8ef %r = call i32 @ilogb(double 0.000000e+00) 55*1336e3d0Sc8ef ret i32 %r 56*1336e3d0Sc8ef} 57*1336e3d0Sc8ef 58*1336e3d0Sc8efdefine i32 @ilogbf_neg_zero() { 59*1336e3d0Sc8ef; CHECK-LABEL: define i32 @ilogbf_neg_zero() { 60*1336e3d0Sc8ef; CHECK-NEXT: [[R:%.*]] = call i32 @ilogbf(float -0.000000e+00) 61*1336e3d0Sc8ef; CHECK-NEXT: ret i32 [[R]] 62*1336e3d0Sc8ef; 63*1336e3d0Sc8ef %r = call i32 @ilogbf(float -0.000000e+00) 64*1336e3d0Sc8ef ret i32 %r 65*1336e3d0Sc8ef} 66*1336e3d0Sc8ef 67*1336e3d0Sc8efdefine i32 @ilogb_neg_zero() { 68*1336e3d0Sc8ef; CHECK-LABEL: define i32 @ilogb_neg_zero() { 69*1336e3d0Sc8ef; CHECK-NEXT: [[R:%.*]] = call i32 @ilogb(double -0.000000e+00) 70*1336e3d0Sc8ef; CHECK-NEXT: ret i32 [[R]] 71*1336e3d0Sc8ef; 72*1336e3d0Sc8ef %r = call i32 @ilogb(double -0.000000e+00) 73*1336e3d0Sc8ef ret i32 %r 74*1336e3d0Sc8ef} 75*1336e3d0Sc8ef 76*1336e3d0Sc8efdefine i32 @ilogbf_inf() { 77*1336e3d0Sc8ef; CHECK-LABEL: define i32 @ilogbf_inf() { 78*1336e3d0Sc8ef; CHECK-NEXT: [[R:%.*]] = call i32 @ilogbf(float 0x7FF0000000000000) 79*1336e3d0Sc8ef; CHECK-NEXT: ret i32 [[R]] 80*1336e3d0Sc8ef; 81*1336e3d0Sc8ef %r = call i32 @ilogbf(float 0x7FF0000000000000) 82*1336e3d0Sc8ef ret i32 %r 83*1336e3d0Sc8ef} 84*1336e3d0Sc8ef 85*1336e3d0Sc8efdefine i32 @ilogb_inf() { 86*1336e3d0Sc8ef; CHECK-LABEL: define i32 @ilogb_inf() { 87*1336e3d0Sc8ef; CHECK-NEXT: [[R:%.*]] = call i32 @ilogb(double 0x7FF0000000000000) 88*1336e3d0Sc8ef; CHECK-NEXT: ret i32 [[R]] 89*1336e3d0Sc8ef; 90*1336e3d0Sc8ef %r = call i32 @ilogb(double 0x7FF0000000000000) 91*1336e3d0Sc8ef ret i32 %r 92*1336e3d0Sc8ef} 93*1336e3d0Sc8ef 94*1336e3d0Sc8efdefine i32 @ilogbf_nan() { 95*1336e3d0Sc8ef; CHECK-LABEL: define i32 @ilogbf_nan() { 96*1336e3d0Sc8ef; CHECK-NEXT: [[R:%.*]] = call i32 @ilogbf(float 0x7FF8000000000000) 97*1336e3d0Sc8ef; CHECK-NEXT: ret i32 [[R]] 98*1336e3d0Sc8ef; 99*1336e3d0Sc8ef %r = call i32 @ilogbf(float 0x7FF8000000000000) 100*1336e3d0Sc8ef ret i32 %r 101*1336e3d0Sc8ef} 102*1336e3d0Sc8ef 103*1336e3d0Sc8efdefine i32 @ilogb_nan() { 104*1336e3d0Sc8ef; CHECK-LABEL: define i32 @ilogb_nan() { 105*1336e3d0Sc8ef; CHECK-NEXT: [[R:%.*]] = call i32 @ilogb(double 0x7FF8000000000000) 106*1336e3d0Sc8ef; CHECK-NEXT: ret i32 [[R]] 107*1336e3d0Sc8ef; 108*1336e3d0Sc8ef %r = call i32 @ilogb(double 0x7FF8000000000000) 109*1336e3d0Sc8ef ret i32 %r 110*1336e3d0Sc8ef} 111*1336e3d0Sc8ef 112*1336e3d0Sc8efdefine i32 @ilogbf_zero_readnone() { 113*1336e3d0Sc8ef; CHECK-LABEL: define i32 @ilogbf_zero_readnone() { 114*1336e3d0Sc8ef; CHECK-NEXT: [[R:%.*]] = call i32 @ilogbf(float 0.000000e+00) #[[ATTR0:[0-9]+]] 115*1336e3d0Sc8ef; CHECK-NEXT: ret i32 [[R]] 116*1336e3d0Sc8ef; 117*1336e3d0Sc8ef %r = call i32 @ilogbf(float 0.000000e+00) readnone 118*1336e3d0Sc8ef ret i32 %r 119*1336e3d0Sc8ef} 120*1336e3d0Sc8ef 121*1336e3d0Sc8efdefine i32 @ilogb_zero_readnone() { 122*1336e3d0Sc8ef; CHECK-LABEL: define i32 @ilogb_zero_readnone() { 123*1336e3d0Sc8ef; CHECK-NEXT: [[R:%.*]] = call i32 @ilogb(double 0.000000e+00) #[[ATTR0]] 124*1336e3d0Sc8ef; CHECK-NEXT: ret i32 [[R]] 125*1336e3d0Sc8ef; 126*1336e3d0Sc8ef %r = call i32 @ilogb(double 0.000000e+00) readnone 127*1336e3d0Sc8ef ret i32 %r 128*1336e3d0Sc8ef} 129*1336e3d0Sc8ef 130*1336e3d0Sc8efdefine i32 @ilogbf_neg_zero_readnone() { 131*1336e3d0Sc8ef; CHECK-LABEL: define i32 @ilogbf_neg_zero_readnone() { 132*1336e3d0Sc8ef; CHECK-NEXT: [[R:%.*]] = call i32 @ilogbf(float -0.000000e+00) #[[ATTR0]] 133*1336e3d0Sc8ef; CHECK-NEXT: ret i32 [[R]] 134*1336e3d0Sc8ef; 135*1336e3d0Sc8ef %r = call i32 @ilogbf(float -0.000000e+00) readnone 136*1336e3d0Sc8ef ret i32 %r 137*1336e3d0Sc8ef} 138*1336e3d0Sc8ef 139*1336e3d0Sc8efdefine i32 @ilogb_neg_zero_readnone() { 140*1336e3d0Sc8ef; CHECK-LABEL: define i32 @ilogb_neg_zero_readnone() { 141*1336e3d0Sc8ef; CHECK-NEXT: [[R:%.*]] = call i32 @ilogb(double -0.000000e+00) #[[ATTR0]] 142*1336e3d0Sc8ef; CHECK-NEXT: ret i32 [[R]] 143*1336e3d0Sc8ef; 144*1336e3d0Sc8ef %r = call i32 @ilogb(double -0.000000e+00) readnone 145*1336e3d0Sc8ef ret i32 %r 146*1336e3d0Sc8ef} 147*1336e3d0Sc8ef 148*1336e3d0Sc8efdefine i32 @ilogbf_inf_readnone() { 149*1336e3d0Sc8ef; CHECK-LABEL: define i32 @ilogbf_inf_readnone() { 150*1336e3d0Sc8ef; CHECK-NEXT: [[R:%.*]] = call i32 @ilogbf(float 0x7FF0000000000000) #[[ATTR0]] 151*1336e3d0Sc8ef; CHECK-NEXT: ret i32 [[R]] 152*1336e3d0Sc8ef; 153*1336e3d0Sc8ef %r = call i32 @ilogbf(float 0x7FF0000000000000) readnone 154*1336e3d0Sc8ef ret i32 %r 155*1336e3d0Sc8ef} 156*1336e3d0Sc8ef 157*1336e3d0Sc8efdefine i32 @ilogb_inf_readnone() { 158*1336e3d0Sc8ef; CHECK-LABEL: define i32 @ilogb_inf_readnone() { 159*1336e3d0Sc8ef; CHECK-NEXT: [[R:%.*]] = call i32 @ilogb(double 0x7FF0000000000000) #[[ATTR0]] 160*1336e3d0Sc8ef; CHECK-NEXT: ret i32 [[R]] 161*1336e3d0Sc8ef; 162*1336e3d0Sc8ef %r = call i32 @ilogb(double 0x7FF0000000000000) readnone 163*1336e3d0Sc8ef ret i32 %r 164*1336e3d0Sc8ef} 165*1336e3d0Sc8ef 166*1336e3d0Sc8efdefine i32 @ilogbf_nan_readnone() { 167*1336e3d0Sc8ef; CHECK-LABEL: define i32 @ilogbf_nan_readnone() { 168*1336e3d0Sc8ef; CHECK-NEXT: [[R:%.*]] = call i32 @ilogbf(float 0x7FF8000000000000) #[[ATTR0]] 169*1336e3d0Sc8ef; CHECK-NEXT: ret i32 [[R]] 170*1336e3d0Sc8ef; 171*1336e3d0Sc8ef %r = call i32 @ilogbf(float 0x7FF8000000000000) readnone 172*1336e3d0Sc8ef ret i32 %r 173*1336e3d0Sc8ef} 174*1336e3d0Sc8ef 175*1336e3d0Sc8efdefine i32 @ilogb_nan_readnone() { 176*1336e3d0Sc8ef; CHECK-LABEL: define i32 @ilogb_nan_readnone() { 177*1336e3d0Sc8ef; CHECK-NEXT: [[R:%.*]] = call i32 @ilogb(double 0x7FF8000000000000) #[[ATTR0]] 178*1336e3d0Sc8ef; CHECK-NEXT: ret i32 [[R]] 179*1336e3d0Sc8ef; 180*1336e3d0Sc8ef %r = call i32 @ilogb(double 0x7FF8000000000000) readnone 181*1336e3d0Sc8ef ret i32 %r 182*1336e3d0Sc8ef} 183*1336e3d0Sc8ef 184*1336e3d0Sc8efdefine i32 @ilogbf_poison() { 185*1336e3d0Sc8ef; CHECK-LABEL: define i32 @ilogbf_poison() { 186*1336e3d0Sc8ef; CHECK-NEXT: [[R:%.*]] = call i32 @ilogbf(float poison) 187*1336e3d0Sc8ef; CHECK-NEXT: ret i32 [[R]] 188*1336e3d0Sc8ef; 189*1336e3d0Sc8ef %r = call i32 @ilogbf(float poison) 190*1336e3d0Sc8ef ret i32 %r 191*1336e3d0Sc8ef} 192*1336e3d0Sc8ef 193*1336e3d0Sc8efdefine i32 @ilogb_poison() { 194*1336e3d0Sc8ef; CHECK-LABEL: define i32 @ilogb_poison() { 195*1336e3d0Sc8ef; CHECK-NEXT: [[R:%.*]] = call i32 @ilogb(double poison) 196*1336e3d0Sc8ef; CHECK-NEXT: ret i32 [[R]] 197*1336e3d0Sc8ef; 198*1336e3d0Sc8ef %r = call i32 @ilogb(double poison) 199*1336e3d0Sc8ef ret i32 %r 200*1336e3d0Sc8ef} 201*1336e3d0Sc8ef 202*1336e3d0Sc8efdeclare i32 @ilogbf(float) 203*1336e3d0Sc8efdeclare i32 @ilogb(double) 204