1*b90ea5caSc8ef; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 5 2*b90ea5caSc8ef; RUN: opt < %s -passes=instcombine -mtriple x86_64-unknown-linux-gnu -S | FileCheck %s 3*b90ea5caSc8ef 4*b90ea5caSc8efdefine float @erff_const() { 5*b90ea5caSc8ef; CHECK-LABEL: define float @erff_const() { 6*b90ea5caSc8ef; CHECK-NEXT: [[R:%.*]] = call float @erff(float 5.000000e-01) 7*b90ea5caSc8ef; CHECK-NEXT: ret float 0x3FE0A7EF60000000 8*b90ea5caSc8ef; 9*b90ea5caSc8ef %r = call float @erff(float 5.000000e-01) 10*b90ea5caSc8ef ret float %r 11*b90ea5caSc8ef} 12*b90ea5caSc8ef 13*b90ea5caSc8efdefine double @erf_const() { 14*b90ea5caSc8ef; CHECK-LABEL: define double @erf_const() { 15*b90ea5caSc8ef; CHECK-NEXT: [[R:%.*]] = call double @erf(double -5.000000e-01) 16*b90ea5caSc8ef; CHECK-NEXT: ret double 0xBFE0A7EF5C18EDD2 17*b90ea5caSc8ef; 18*b90ea5caSc8ef %r = call double @erf(double -5.000000e-01) 19*b90ea5caSc8ef ret double %r 20*b90ea5caSc8ef} 21*b90ea5caSc8ef 22*b90ea5caSc8efdefine float @erff_zero() { 23*b90ea5caSc8ef; CHECK-LABEL: define float @erff_zero() { 24*b90ea5caSc8ef; CHECK-NEXT: [[R:%.*]] = call float @erff(float 0.000000e+00) 25*b90ea5caSc8ef; CHECK-NEXT: ret float 0.000000e+00 26*b90ea5caSc8ef; 27*b90ea5caSc8ef %r = call float @erff(float 0.000000e+00) 28*b90ea5caSc8ef ret float %r 29*b90ea5caSc8ef} 30*b90ea5caSc8ef 31*b90ea5caSc8efdefine double @erf_zero() { 32*b90ea5caSc8ef; CHECK-LABEL: define double @erf_zero() { 33*b90ea5caSc8ef; CHECK-NEXT: [[R:%.*]] = call double @erf(double 0.000000e+00) 34*b90ea5caSc8ef; CHECK-NEXT: ret double 0.000000e+00 35*b90ea5caSc8ef; 36*b90ea5caSc8ef %r = call double @erf(double 0.000000e+00) 37*b90ea5caSc8ef ret double %r 38*b90ea5caSc8ef} 39*b90ea5caSc8ef 40*b90ea5caSc8efdefine float @erff_neg_zero() { 41*b90ea5caSc8ef; CHECK-LABEL: define float @erff_neg_zero() { 42*b90ea5caSc8ef; CHECK-NEXT: [[R:%.*]] = call float @erff(float -0.000000e+00) 43*b90ea5caSc8ef; CHECK-NEXT: ret float -0.000000e+00 44*b90ea5caSc8ef; 45*b90ea5caSc8ef %r = call float @erff(float -0.000000e+00) 46*b90ea5caSc8ef ret float %r 47*b90ea5caSc8ef} 48*b90ea5caSc8ef 49*b90ea5caSc8efdefine double @erf_neg_zero() { 50*b90ea5caSc8ef; CHECK-LABEL: define double @erf_neg_zero() { 51*b90ea5caSc8ef; CHECK-NEXT: [[R:%.*]] = call double @erf(double -0.000000e+00) 52*b90ea5caSc8ef; CHECK-NEXT: ret double -0.000000e+00 53*b90ea5caSc8ef; 54*b90ea5caSc8ef %r = call double @erf(double -0.000000e+00) 55*b90ea5caSc8ef ret double %r 56*b90ea5caSc8ef} 57*b90ea5caSc8ef 58*b90ea5caSc8efdefine float @erff_inf() { 59*b90ea5caSc8ef; CHECK-LABEL: define float @erff_inf() { 60*b90ea5caSc8ef; CHECK-NEXT: [[R:%.*]] = call float @erff(float 0x7FF0000000000000) 61*b90ea5caSc8ef; CHECK-NEXT: ret float [[R]] 62*b90ea5caSc8ef; 63*b90ea5caSc8ef %r = call float @erff(float 0x7FF0000000000000) 64*b90ea5caSc8ef ret float %r 65*b90ea5caSc8ef} 66*b90ea5caSc8ef 67*b90ea5caSc8efdefine double @erf_inf() { 68*b90ea5caSc8ef; CHECK-LABEL: define double @erf_inf() { 69*b90ea5caSc8ef; CHECK-NEXT: [[R:%.*]] = call double @erf(double 0x7FF0000000000000) 70*b90ea5caSc8ef; CHECK-NEXT: ret double [[R]] 71*b90ea5caSc8ef; 72*b90ea5caSc8ef %r = call double @erf(double 0x7FF0000000000000) 73*b90ea5caSc8ef ret double %r 74*b90ea5caSc8ef} 75*b90ea5caSc8ef 76*b90ea5caSc8efdefine float @erff_inf_memory_none() { 77*b90ea5caSc8ef; CHECK-LABEL: define float @erff_inf_memory_none() { 78*b90ea5caSc8ef; CHECK-NEXT: [[R:%.*]] = call float @erff(float 0x7FF0000000000000) #[[ATTR1:[0-9]+]] 79*b90ea5caSc8ef; CHECK-NEXT: ret float [[R]] 80*b90ea5caSc8ef; 81*b90ea5caSc8ef %r = call float @erff(float 0x7FF0000000000000) readnone 82*b90ea5caSc8ef ret float %r 83*b90ea5caSc8ef} 84*b90ea5caSc8ef 85*b90ea5caSc8efdefine double @erf_inf_memory_none() { 86*b90ea5caSc8ef; CHECK-LABEL: define double @erf_inf_memory_none() { 87*b90ea5caSc8ef; CHECK-NEXT: [[R:%.*]] = call double @erf(double 0x7FF0000000000000) #[[ATTR1]] 88*b90ea5caSc8ef; CHECK-NEXT: ret double [[R]] 89*b90ea5caSc8ef; 90*b90ea5caSc8ef %r = call double @erf(double 0x7FF0000000000000) readnone 91*b90ea5caSc8ef ret double %r 92*b90ea5caSc8ef} 93*b90ea5caSc8ef 94*b90ea5caSc8efdefine float @erff_neg_inf() { 95*b90ea5caSc8ef; CHECK-LABEL: define float @erff_neg_inf() { 96*b90ea5caSc8ef; CHECK-NEXT: [[R:%.*]] = call float @erff(float 0xFFF0000000000000) 97*b90ea5caSc8ef; CHECK-NEXT: ret float [[R]] 98*b90ea5caSc8ef; 99*b90ea5caSc8ef %r = call float @erff(float 0xFFF0000000000000) 100*b90ea5caSc8ef ret float %r 101*b90ea5caSc8ef} 102*b90ea5caSc8ef 103*b90ea5caSc8efdefine double @erf_neg_inf() { 104*b90ea5caSc8ef; CHECK-LABEL: define double @erf_neg_inf() { 105*b90ea5caSc8ef; CHECK-NEXT: [[R:%.*]] = call double @erf(double 0xFFF0000000000000) 106*b90ea5caSc8ef; CHECK-NEXT: ret double [[R]] 107*b90ea5caSc8ef; 108*b90ea5caSc8ef %r = call double @erf(double 0xFFF0000000000000) 109*b90ea5caSc8ef ret double %r 110*b90ea5caSc8ef} 111*b90ea5caSc8ef 112*b90ea5caSc8efdefine float @erff_neg_inf_memory_none() { 113*b90ea5caSc8ef; CHECK-LABEL: define float @erff_neg_inf_memory_none() { 114*b90ea5caSc8ef; CHECK-NEXT: [[R:%.*]] = call float @erff(float 0xFFF0000000000000) #[[ATTR1]] 115*b90ea5caSc8ef; CHECK-NEXT: ret float [[R]] 116*b90ea5caSc8ef; 117*b90ea5caSc8ef %r = call float @erff(float 0xFFF0000000000000) readnone 118*b90ea5caSc8ef ret float %r 119*b90ea5caSc8ef} 120*b90ea5caSc8ef 121*b90ea5caSc8efdefine double @erf_neg_inf_memory_none() { 122*b90ea5caSc8ef; CHECK-LABEL: define double @erf_neg_inf_memory_none() { 123*b90ea5caSc8ef; CHECK-NEXT: [[R:%.*]] = call double @erf(double 0xFFF0000000000000) #[[ATTR1]] 124*b90ea5caSc8ef; CHECK-NEXT: ret double [[R]] 125*b90ea5caSc8ef; 126*b90ea5caSc8ef %r = call double @erf(double 0xFFF0000000000000) readnone 127*b90ea5caSc8ef ret double %r 128*b90ea5caSc8ef} 129*b90ea5caSc8ef 130*b90ea5caSc8efdefine float @erff_nan() { 131*b90ea5caSc8ef; CHECK-LABEL: define float @erff_nan() { 132*b90ea5caSc8ef; CHECK-NEXT: [[R:%.*]] = call float @erff(float 0x7FF8000000000000) 133*b90ea5caSc8ef; CHECK-NEXT: ret float [[R]] 134*b90ea5caSc8ef; 135*b90ea5caSc8ef %r = call float @erff(float 0x7FF8000000000000) 136*b90ea5caSc8ef ret float %r 137*b90ea5caSc8ef} 138*b90ea5caSc8ef 139*b90ea5caSc8efdefine double @erf_nan() { 140*b90ea5caSc8ef; CHECK-LABEL: define double @erf_nan() { 141*b90ea5caSc8ef; CHECK-NEXT: [[R:%.*]] = call double @erf(double 0x7FF8000000000000) 142*b90ea5caSc8ef; CHECK-NEXT: ret double [[R]] 143*b90ea5caSc8ef; 144*b90ea5caSc8ef %r = call double @erf(double 0x7FF8000000000000) 145*b90ea5caSc8ef ret double %r 146*b90ea5caSc8ef} 147*b90ea5caSc8ef 148*b90ea5caSc8efdefine float @erff_nan_memory_none() { 149*b90ea5caSc8ef; CHECK-LABEL: define float @erff_nan_memory_none() { 150*b90ea5caSc8ef; CHECK-NEXT: [[R:%.*]] = call float @erff(float 0x7FF8000000000000) #[[ATTR1]] 151*b90ea5caSc8ef; CHECK-NEXT: ret float [[R]] 152*b90ea5caSc8ef; 153*b90ea5caSc8ef %r = call float @erff(float 0x7FF8000000000000) readnone 154*b90ea5caSc8ef ret float %r 155*b90ea5caSc8ef} 156*b90ea5caSc8ef 157*b90ea5caSc8efdefine double @erf_nan_memory_none() { 158*b90ea5caSc8ef; CHECK-LABEL: define double @erf_nan_memory_none() { 159*b90ea5caSc8ef; CHECK-NEXT: [[R:%.*]] = call double @erf(double 0x7FF8000000000000) #[[ATTR1]] 160*b90ea5caSc8ef; CHECK-NEXT: ret double [[R]] 161*b90ea5caSc8ef; 162*b90ea5caSc8ef %r = call double @erf(double 0x7FF8000000000000) readnone 163*b90ea5caSc8ef ret double %r 164*b90ea5caSc8ef} 165*b90ea5caSc8ef 166*b90ea5caSc8efdefine float @erff_poison() { 167*b90ea5caSc8ef; CHECK-LABEL: define float @erff_poison() { 168*b90ea5caSc8ef; CHECK-NEXT: [[R:%.*]] = call float @erff(float poison) 169*b90ea5caSc8ef; CHECK-NEXT: ret float [[R]] 170*b90ea5caSc8ef; 171*b90ea5caSc8ef %r = call float @erff(float poison) 172*b90ea5caSc8ef ret float %r 173*b90ea5caSc8ef} 174*b90ea5caSc8ef 175*b90ea5caSc8efdefine double @erf_poison() { 176*b90ea5caSc8ef; CHECK-LABEL: define double @erf_poison() { 177*b90ea5caSc8ef; CHECK-NEXT: [[R:%.*]] = call double @erf(double poison) 178*b90ea5caSc8ef; CHECK-NEXT: ret double [[R]] 179*b90ea5caSc8ef; 180*b90ea5caSc8ef %r = call double @erf(double poison) 181*b90ea5caSc8ef ret double %r 182*b90ea5caSc8ef} 183*b90ea5caSc8ef 184*b90ea5caSc8efdefine float @erff_const_strictfp() { 185*b90ea5caSc8ef; CHECK-LABEL: define float @erff_const_strictfp() { 186*b90ea5caSc8ef; CHECK-NEXT: [[R:%.*]] = call float @erff(float 5.000000e-01) #[[ATTR2:[0-9]+]] 187*b90ea5caSc8ef; CHECK-NEXT: ret float [[R]] 188*b90ea5caSc8ef; 189*b90ea5caSc8ef %r = call float @erff(float 5.000000e-01) strictfp 190*b90ea5caSc8ef ret float %r 191*b90ea5caSc8ef} 192*b90ea5caSc8ef 193*b90ea5caSc8efdefine double @erf_const_strictfp() { 194*b90ea5caSc8ef; CHECK-LABEL: define double @erf_const_strictfp() { 195*b90ea5caSc8ef; CHECK-NEXT: [[R:%.*]] = call double @erf(double -5.000000e-01) #[[ATTR2]] 196*b90ea5caSc8ef; CHECK-NEXT: ret double [[R]] 197*b90ea5caSc8ef; 198*b90ea5caSc8ef %r = call double @erf(double -5.000000e-01) strictfp 199*b90ea5caSc8ef ret double %r 200*b90ea5caSc8ef} 201*b90ea5caSc8ef 202*b90ea5caSc8efdefine float @erff_nan_strictfp() { 203*b90ea5caSc8ef; CHECK-LABEL: define float @erff_nan_strictfp() { 204*b90ea5caSc8ef; CHECK-NEXT: [[R:%.*]] = call float @erff(float 0x7FF8000000000000) #[[ATTR2]] 205*b90ea5caSc8ef; CHECK-NEXT: ret float [[R]] 206*b90ea5caSc8ef; 207*b90ea5caSc8ef %r = call float @erff(float 0x7FF8000000000000) strictfp 208*b90ea5caSc8ef ret float %r 209*b90ea5caSc8ef} 210*b90ea5caSc8ef 211*b90ea5caSc8efdefine double @erf_nan_strictfp() { 212*b90ea5caSc8ef; CHECK-LABEL: define double @erf_nan_strictfp() { 213*b90ea5caSc8ef; CHECK-NEXT: [[R:%.*]] = call double @erf(double 0x7FF8000000000000) #[[ATTR2]] 214*b90ea5caSc8ef; CHECK-NEXT: ret double [[R]] 215*b90ea5caSc8ef; 216*b90ea5caSc8ef %r = call double @erf(double 0x7FF8000000000000) strictfp 217*b90ea5caSc8ef ret double %r 218*b90ea5caSc8ef} 219*b90ea5caSc8ef 220*b90ea5caSc8efdeclare float @erff(float) willreturn 221*b90ea5caSc8efdeclare double @erf(double) willreturn 222