brintos

brintos / llvm-project-archived public Read only

0
0
Text · 18.3 KiB · 9d91ad2 Raw
504 lines · plain
1; NOTE: Do not autogenerate2;       Assertions were previously autogenerated by utils/update_test_checks.py3;       but some hand modifications were needed to account for rounding errors4;       in constant folding that depend on the compiler's math library version.5; RUN: opt < %s -passes=instcombine -S | FileCheck %s6 7define float @powf_expf(float %x, float %y) {8; CHECK-LABEL: @powf_expf(9; CHECK-NEXT:    [[MUL:%.*]] = fmul fast float [[X:%.*]], [[Y:%.*]]10; CHECK-NEXT:    [[EXP:%.*]] = call fast float @llvm.exp.f32(float [[MUL]])11; CHECK-NEXT:    ret float [[EXP]]12;13  %call = call fast float @expf(float %x) nounwind readnone14  %pow = call fast float @llvm.pow.f32(float %call, float %y)15  ret float %pow16}17 18define float @powf_expf_libcall(float %x, float %y) {19; CHECK-LABEL: @powf_expf_libcall(20; CHECK-NEXT:    [[MUL:%.*]] = fmul fast float [[X:%.*]], [[Y:%.*]]21; CHECK-NEXT:    [[EXPF:%.*]] = call fast float @expf(float [[MUL]])22; CHECK-NEXT:    ret float [[EXPF]]23;24  %call = call fast float @expf(float %x)25  %pow = call fast float @powf(float %call, float %y)26  ret float %pow27}28 29define double @pow_exp(double %x, double %y) {30; CHECK-LABEL: @pow_exp(31; CHECK-NEXT:    [[MUL:%.*]] = fmul fast double [[X:%.*]], [[Y:%.*]]32; CHECK-NEXT:    [[EXP:%.*]] = call fast double @llvm.exp.f64(double [[MUL]])33; CHECK-NEXT:    ret double [[EXP]]34;35  %call = call fast double @exp(double %x) nounwind readnone36  %pow = call fast double @llvm.pow.f64(double %call, double %y)37  ret double %pow38}39 40define double @pow_exp_not_intrinsic(double %x, double %y) {41; CHECK-LABEL: @pow_exp_not_intrinsic(42; CHECK-NEXT:    [[MUL:%.*]] = fmul fast double [[X:%.*]], [[Y:%.*]]43; CHECK-NEXT:    [[EXP:%.*]] = call fast double @llvm.exp.f64(double [[MUL]])44; CHECK-NEXT:    ret double [[EXP]]45;46  %call = call fast double @exp(double %x) nounwind readnone47  %pow = call fast double @pow(double %call, double %y) nounwind readnone48  ret double %pow49}50 51define fp128 @powl_expl(fp128 %x, fp128 %y) {52; CHECK-LABEL: @powl_expl(53; CHECK-NEXT:    [[MUL:%.*]] = fmul fast fp128 [[X:%.*]], [[Y:%.*]]54; CHECK-NEXT:    [[EXP:%.*]] = call fast fp128 @llvm.exp.f128(fp128 [[MUL]])55; CHECK-NEXT:    ret fp128 [[EXP]]56;57  %call = call fast fp128 @expl(fp128 %x) nounwind readnone58  %pow = call fast fp128 @llvm.pow.f128(fp128 %call, fp128 %y)59  ret fp128 %pow60}61 62define fp128 @powl_expl_not_fast(fp128 %x, fp128 %y) {63; CHECK-LABEL: @powl_expl_not_fast(64; CHECK-NEXT:    [[CALL:%.*]] = call fp128 @expl(fp128 [[X:%.*]])65; CHECK-NEXT:    [[POW:%.*]] = call fast fp128 @llvm.pow.f128(fp128 [[CALL]], fp128 [[Y:%.*]])66; CHECK-NEXT:    ret fp128 [[POW]]67;68  %call = call fp128 @expl(fp128 %x)69  %pow = call fast fp128 @llvm.pow.f128(fp128 %call, fp128 %y)70  ret fp128 %pow71}72 73define float @powf_exp2f(float %x, float %y) {74; CHECK-LABEL: @powf_exp2f(75; CHECK-NEXT:    [[MUL:%.*]] = fmul fast float [[X:%.*]], [[Y:%.*]]76; CHECK-NEXT:    [[EXP2:%.*]] = call fast float @llvm.exp2.f32(float [[MUL]])77; CHECK-NEXT:    ret float [[EXP2]]78;79  %call = call fast float @exp2f(float %x) nounwind readnone80  %pow = call fast float @llvm.pow.f32(float %call, float %y)81  ret float %pow82}83 84define float @powf_exp2f_not_intrinsic(float %x, float %y) {85; CHECK-LABEL: @powf_exp2f_not_intrinsic(86; CHECK-NEXT:    [[MUL:%.*]] = fmul fast float [[X:%.*]], [[Y:%.*]]87; CHECK-NEXT:    [[EXP2:%.*]] = call fast float @llvm.exp2.f32(float [[MUL]])88; CHECK-NEXT:    ret float [[EXP2]]89;90  %call = call fast float @exp2f(float %x) nounwind readnone91  %pow = call fast float @powf(float %call, float %y) nounwind readnone92  ret float %pow93}94 95define double @pow_exp2(double %x, double %y) {96; CHECK-LABEL: @pow_exp2(97; CHECK-NEXT:    [[MUL:%.*]] = fmul fast double [[X:%.*]], [[Y:%.*]]98; CHECK-NEXT:    [[EXP2:%.*]] = call fast double @llvm.exp2.f64(double [[MUL]])99; CHECK-NEXT:    ret double [[EXP2]]100;101  %call = call fast double @exp2(double %x) nounwind readnone102  %pow = call fast double @llvm.pow.f64(double %call, double %y)103  ret double %pow104}105 106define double @pow_exp2_libcall(double %x, double %y) {107; CHECK-LABEL: @pow_exp2_libcall(108; CHECK-NEXT:    [[MUL:%.*]] = fmul fast double [[X:%.*]], [[Y:%.*]]109; CHECK-NEXT:    [[EXP2:%.*]] = call fast double @exp2(double [[MUL]])110; CHECK-NEXT:    ret double [[EXP2]]111;112  %call = call fast double @exp2(double %x)113  %pow = call fast double @pow(double %call, double %y)114  ret double %pow115}116 117define fp128 @powl_exp2l(fp128 %x, fp128 %y) {118; CHECK-LABEL: @powl_exp2l(119; CHECK-NEXT:    [[MUL:%.*]] = fmul fast fp128 [[X:%.*]], [[Y:%.*]]120; CHECK-NEXT:    [[EXP2:%.*]] = call fast fp128 @llvm.exp2.f128(fp128 [[MUL]])121; CHECK-NEXT:    ret fp128 [[EXP2]]122;123  %call = call fast fp128 @exp2l(fp128 %x) nounwind readnone124  %pow = call fast fp128 @llvm.pow.f128(fp128 %call, fp128 %y)125  ret fp128 %pow126}127 128define fp128 @powl_exp2l_not_fast(fp128 %x, fp128 %y) {129; CHECK-LABEL: @powl_exp2l_not_fast(130; CHECK-NEXT:    [[CALL:%.*]] = call fp128 @exp2l(fp128 [[X:%.*]])131; CHECK-NEXT:    [[POW:%.*]] = call fast fp128 @llvm.pow.f128(fp128 [[CALL]], fp128 [[Y:%.*]])132; CHECK-NEXT:    ret fp128 [[POW]]133;134  %call = call fp128 @exp2l(fp128 %x)135  %pow = call fast fp128 @llvm.pow.f128(fp128 %call, fp128 %y)136  ret fp128 %pow137}138 139; TODO: exp10() is not widely enabled by many targets yet.140 141define float @powf_exp10f(float %x, float %y) {142; CHECK-LABEL: @powf_exp10f(143; CHECK-NEXT:    [[CALL:%.*]] = call fast float @exp10f(float [[X:%.*]]) #[[ATTR1:[0-9]+]]144; CHECK-NEXT:    [[POW:%.*]] = call fast float @llvm.pow.f32(float [[CALL]], float [[Y:%.*]])145; CHECK-NEXT:    ret float [[POW]]146;147  %call = call fast float @exp10f(float %x) nounwind readnone148  %pow = call fast float @llvm.pow.f32(float %call, float %y)149  ret float %pow150}151 152define double @pow_exp10(double %x, double %y) {153; CHECK-LABEL: @pow_exp10(154; CHECK-NEXT:    [[CALL:%.*]] = call fast double @exp10(double [[X:%.*]]) #[[ATTR1]]155; CHECK-NEXT:    [[POW:%.*]] = call fast double @llvm.pow.f64(double [[CALL]], double [[Y:%.*]])156; CHECK-NEXT:    ret double [[POW]]157;158  %call = call fast double @exp10(double %x) nounwind readnone159  %pow = call fast double @llvm.pow.f64(double %call, double %y)160  ret double %pow161}162 163define fp128 @pow_exp10l(fp128 %x, fp128 %y) {164; CHECK-LABEL: @pow_exp10l(165; CHECK-NEXT:    [[CALL:%.*]] = call fast fp128 @exp10l(fp128 [[X:%.*]]) #[[ATTR1]]166; CHECK-NEXT:    [[POW:%.*]] = call fast fp128 @llvm.pow.f128(fp128 [[CALL]], fp128 [[Y:%.*]])167; CHECK-NEXT:    ret fp128 [[POW]]168;169  %call = call fast fp128 @exp10l(fp128 %x) nounwind readnone170  %pow = call fast fp128 @llvm.pow.f128(fp128 %call, fp128 %y)171  ret fp128 %pow172}173 174define float @reuse_fast(float %x, float %y, ptr %p) {175; CHECK-LABEL: @reuse_fast(176; CHECK-NEXT:    [[EXP:%.*]] = call fast float @expf(float [[X:%.*]])177; CHECK-NEXT:    [[POW:%.*]] = call fast float @powf(float [[EXP]], float [[Y:%.*]])178; CHECK-NEXT:    store float [[EXP]], ptr [[P:%.*]], align 4179; CHECK-NEXT:    ret float [[POW]]180;181  %exp = call fast float @expf(float %x)182  %pow = call fast float @powf(float %exp, float %y)183  store float %exp, ptr %p, align 4184  ret float %pow185}186 187define fp128 @reuse_libcall(fp128 %x, fp128 %y, ptr %p) {188; CHECK-LABEL: @reuse_libcall(189; CHECK-NEXT:    [[EXP:%.*]] = call fp128 @expl(fp128 [[X:%.*]])190; CHECK-NEXT:    [[POW:%.*]] = call fp128 @powl(fp128 [[EXP]], fp128 [[Y:%.*]])191; CHECK-NEXT:    store fp128 [[EXP]], ptr [[P:%.*]], align 16192; CHECK-NEXT:    ret fp128 [[POW]]193;194  %exp = call fp128 @expl(fp128 %x)195  %pow = call fp128 @powl(fp128 %exp, fp128 %y)196  store fp128 %exp, ptr %p, align 16197  ret fp128 %pow198}199 200define double @function_pointer(ptr %fptr, double %p1) {201; CHECK-LABEL: @function_pointer(202; CHECK-NEXT:    [[CALL1:%.*]] = call fast double [[FPTR:%.*]]()203; CHECK-NEXT:    [[POW:%.*]] = call fast double @llvm.pow.f64(double [[CALL1]], double [[P1:%.*]])204; CHECK-NEXT:    ret double [[POW]]205;206  %call1 = call fast double %fptr()207  %pow = call fast double @llvm.pow.f64(double %call1, double %p1)208  ret double %pow209}210 211; pow(C,x) -> exp2(log2(C)*x)212 213declare void @use_d(double)214declare void @use_f(float)215 216define double @pow_ok_base(double %e) {217; CHECK-LABEL: @pow_ok_base(218; Do not change 0xBFE0776{{.*}} to the exact constant, see PR42740219; CHECK-NEXT:    [[MUL:%.*]] = fmul nnan ninf afn double [[E:%.*]], 0xBFE0776{{.*}}220; CHECK-NEXT:    [[EXP2:%.*]] = tail call nnan ninf afn double @exp2(double [[MUL]])221; CHECK-NEXT:    ret double [[EXP2]]222;223  %call = tail call afn nnan ninf double @pow(double 0x3FE6666666666666, double %e)224  ret double %call225}226 227define double @pow_ok_base_fast(double %e) {228; CHECK-LABEL: @pow_ok_base_fast(229; CHECK-NEXT:    [[MUL:%.*]] = fmul fast double [[E:%.*]], 0xBFE0776{{.*}}230; CHECK-NEXT:    [[EXP2:%.*]] = tail call fast double @exp2(double [[MUL]])231; CHECK-NEXT:    ret double [[EXP2]]232;233  %call = tail call fast double @pow(double 0x3FE6666666666666, double %e)234  ret double %call235}236 237define double @pow_ok_base2(double %e) {238; CHECK-LABEL: @pow_ok_base2(239; CHECK-NEXT:    [[MUL:%.*]] = fmul nnan ninf afn double [[E:%.*]], 0x4010952{{.*}}240; CHECK-NEXT:    [[EXP2:%.*]] = tail call nnan ninf afn double @exp2(double [[MUL]])241; CHECK-NEXT:    ret double [[EXP2]]242;243  %call = tail call afn nnan ninf double @pow(double 1.770000e+01, double %e)244  ret double %call245}246 247define double @pow_ok_base3(double %e) {248; CHECK-LABEL: @pow_ok_base3(249; CHECK-NEXT:    [[MUL:%.*]] = fmul nnan ninf afn double [[E:%.*]], 0x400AB0B5{{.*}}250; CHECK-NEXT:    [[EXP2:%.*]] = tail call nnan ninf afn double @exp2(double [[MUL]])251; CHECK-NEXT:    ret double [[EXP2]]252;253  %call = tail call afn nnan ninf double @pow(double 1.010000e+01, double %e)254  ret double %call255}256 257define double @pow_ok_ten_base(double %e) {258; CHECK-LABEL: @pow_ok_ten_base(259; CHECK-NEXT:    [[MUL:%.*]] = fmul nnan ninf afn double [[E:%.*]], 0x400A934F{{.*}}260; CHECK-NEXT:    [[EXP2:%.*]] = tail call nnan ninf afn double @exp2(double [[MUL]])261; CHECK-NEXT:    ret double [[EXP2]]262;263  %call = tail call afn nnan ninf double @pow(double 1.000000e+01, double %e)264  ret double %call265}266 267define double @pow_ok_denorm_base(double %e) {268; CHECK-LABEL: @pow_ok_denorm_base(269; CHECK-NEXT:    [[MUL:%.*]] = fmul nnan ninf afn double [[E:%.*]], 0xC0904800000005C5270; CHECK-NEXT:    [[EXP2:%.*]] = tail call nnan ninf afn double @exp2(double [[MUL]])271; CHECK-NEXT:    ret double [[EXP2]]272;273  %call = tail call afn nnan ninf double @pow(double 0x00000000FFFFFFFF, double %e)274  ret double %call275}276 277define float @powf_ok_base(float %e) {278; CHECK-LABEL: @powf_ok_base(279; CHECK-NEXT:    [[MUL:%.*]] = fmul nnan ninf afn float [[E:%.*]], 0xBFE07762{{.*}}280; CHECK-NEXT:    [[EXP2F:%.*]] = tail call nnan ninf afn float @exp2f(float [[MUL]])281; CHECK-NEXT:    ret float [[EXP2F]]282;283  %call = tail call afn nnan ninf float @powf(float 0x3FE6666660000000, float %e)284  ret float %call285}286 287define float @powf_ok_base2(float %e) {288; CHECK-LABEL: @powf_ok_base2(289; CHECK-NEXT:    [[MUL:%.*]] = fmul nnan ninf afn float [[E:%.*]], 0x4010952{{.*}}290; CHECK-NEXT:    [[EXP2F:%.*]] = tail call nnan ninf afn float @exp2f(float [[MUL]])291; CHECK-NEXT:    ret float [[EXP2F]]292;293  %call = tail call afn nnan ninf float @powf(float 0x4031B33340000000, float %e)294  ret float %call295}296 297define float @powf_ok_base3(float %e) {298; CHECK-LABEL: @powf_ok_base3(299; CHECK-NEXT:    [[MUL:%.*]] = fmul nnan ninf afn float [[E:%.*]], 0x400AB0B5{{.*}}300; CHECK-NEXT:    [[EXP2F:%.*]] = tail call nnan ninf afn float @exp2f(float [[MUL]])301; CHECK-NEXT:    ret float [[EXP2F]]302;303  %call = tail call afn nnan ninf float @powf(float 0x4024333340000000, float %e)304  ret float %call305}306 307define float @powf_ok_ten_base(float %e) {308; CHECK-LABEL: @powf_ok_ten_base(309; CHECK-NEXT:    [[MUL:%.*]] = fmul nnan ninf afn float [[E:%.*]], 0x400A934{{.*}}310; CHECK-NEXT:    [[EXP2F:%.*]] = tail call nnan ninf afn float @exp2f(float [[MUL]])311; CHECK-NEXT:    ret float [[EXP2F]]312;313  %call = tail call afn nnan ninf float @powf(float 1.000000e+01, float %e)314  ret float %call315}316 317define float @powf_ok_denorm_base(float %e) {318; CHECK-LABEL: @powf_ok_denorm_base(319; CHECK-NEXT:    [[MUL:%.*]] = fmul nnan ninf afn float [[E:%.*]], -1.350000e+02320; CHECK-NEXT:    [[EXP2F:%.*]] = tail call nnan ninf afn float @exp2f(float [[MUL]])321; CHECK-NEXT:    ret float [[EXP2F]]322;323  %call = tail call afn nnan ninf float @powf(float 0x3780000000000000, float %e)324  ret float %call325}326 327; Negative tests328 329define double @pow_zero_base(double %e) {330; CHECK-LABEL: @pow_zero_base(331; CHECK-NEXT:    [[CALL:%.*]] = tail call nnan ninf afn double @pow(double 0.000000e+00, double [[E:%.*]])332; CHECK-NEXT:    ret double [[CALL]]333;334  %call = tail call afn nnan ninf double @pow(double 0.000000e+00, double %e)335  ret double %call336}337 338define double @pow_zero_base2(double %e) {339; CHECK-LABEL: @pow_zero_base2(340; CHECK-NEXT:    [[CALL:%.*]] = tail call nnan ninf afn double @pow(double -0.000000e+00, double [[E:%.*]])341; CHECK-NEXT:    ret double [[CALL]]342;343  %call = tail call afn nnan ninf double @pow(double -0.000000e+00, double %e)344  ret double %call345}346 347define double @pow_inf_base(double %e) {348; CHECK-LABEL: @pow_inf_base(349; CHECK-NEXT:    [[CALL:%.*]] = tail call nnan ninf afn double @pow(double 0x7FF0000000000000, double [[E:%.*]])350; CHECK-NEXT:    ret double [[CALL]]351;352  %call = tail call afn nnan ninf double @pow(double 0x7FF0000000000000, double %e)353  ret double %call354}355 356define double @pow_nan_base(double %e) {357; CHECK-LABEL: @pow_nan_base(358; CHECK-NEXT:    [[CALL:%.*]] = tail call nnan ninf afn double @pow(double 0x7FF8000000000000, double [[E:%.*]])359; CHECK-NEXT:    ret double [[CALL]]360;361  %call = tail call afn nnan ninf double @pow(double 0x7FF8000000000000, double %e)362  ret double %call363}364 365define double @pow_negative_base(double %e) {366; CHECK-LABEL: @pow_negative_base(367; CHECK-NEXT:    [[CALL:%.*]] = tail call nnan ninf afn double @pow(double -4.000000e+00, double [[E:%.*]])368; CHECK-NEXT:    ret double [[CALL]]369;370  %call = tail call afn nnan ninf double @pow(double -4.000000e+00, double %e)371  ret double %call372}373 374define double @pow_multiuse(double %e) {375; CHECK-LABEL: @pow_multiuse(376; CHECK-NEXT:    [[MUL:%.*]] = fmul nnan ninf afn double [[E:%.*]], 0x4002934{{.*}}377; CHECK-NEXT:    [[EXP2:%.*]] = tail call nnan ninf afn double @exp2(double [[MUL]])378; CHECK-NEXT:    tail call void @use_d(double [[EXP2]])379; CHECK-NEXT:    ret double [[EXP2]]380;381  %call = tail call afn nnan ninf double @pow(double 5.000000e+00, double %e)382  tail call void @use_d(double %call)383  ret double %call384}385 386define double @pow_ok_base_no_afn(double %e) {387; CHECK-LABEL: @pow_ok_base_no_afn(388; CHECK-NEXT:    [[CALL:%.*]] = tail call nnan ninf double @pow(double 0x3FE6666666666666, double [[E:%.*]])389; CHECK-NEXT:    ret double [[CALL]]390;391  %call = tail call nnan ninf double @pow(double 0x3FE6666666666666, double %e)392  ret double %call393}394 395define double @pow_ok_base_no_nnan(double %e) {396; CHECK-LABEL: @pow_ok_base_no_nnan(397; CHECK-NEXT:    [[CALL:%.*]] = tail call ninf afn double @pow(double 0x3FE6666666666666, double [[E:%.*]])398; CHECK-NEXT:    ret double [[CALL]]399;400  %call = tail call afn ninf double @pow(double 0x3FE6666666666666, double %e)401  ret double %call402}403 404define double @pow_ok_base_no_ninf(double %e) {405; CHECK-LABEL: @pow_ok_base_no_ninf(406; CHECK-NEXT:    [[MUL:%.*]] = fmul nnan afn double [[E:%.*]], 0xBFE0776{{.*}}407; CHECK-NEXT:    [[EXP2:%.*]] = tail call nnan afn double @exp2(double [[MUL]])408; CHECK-NEXT:    ret double [[EXP2]]409;410  %call = tail call afn nnan double @pow(double 0x3FE6666666666666, double %e)411  ret double %call412}413 414define float @powf_zero_base(float %e) {415; CHECK-LABEL: @powf_zero_base(416; CHECK-NEXT:    [[CALL:%.*]] = tail call nnan ninf afn float @powf(float 0.000000e+00, float [[E:%.*]])417; CHECK-NEXT:    ret float [[CALL]]418;419  %call = tail call afn nnan ninf float @powf(float 0.000000e+00, float %e)420  ret float %call421}422 423define float @powf_zero_base2(float %e) {424; CHECK-LABEL: @powf_zero_base2(425; CHECK-NEXT:    [[CALL:%.*]] = tail call nnan ninf afn float @powf(float -0.000000e+00, float [[E:%.*]])426; CHECK-NEXT:    ret float [[CALL]]427;428  %call = tail call afn nnan ninf float @powf(float -0.000000e+00, float %e)429  ret float %call430}431 432define float @powf_inf_base(float %e) {433; CHECK-LABEL: @powf_inf_base(434; CHECK-NEXT:    [[CALL:%.*]] = tail call nnan ninf afn float @powf(float 0x7FF0000000000000, float [[E:%.*]])435; CHECK-NEXT:    ret float [[CALL]]436;437  %call = tail call afn nnan ninf float @powf(float 0x7FF0000000000000, float %e)438  ret float %call439}440 441define float @powf_nan_base(float %e) {442; CHECK-LABEL: @powf_nan_base(443; CHECK-NEXT:    [[CALL:%.*]] = tail call nnan ninf afn float @powf(float 0x7FF8000000000000, float [[E:%.*]])444; CHECK-NEXT:    ret float [[CALL]]445;446  %call = tail call afn nnan ninf float @powf(float 0x7FF8000000000000, float %e)447  ret float %call448}449 450define float @powf_negative_base(float %e) {451; CHECK-LABEL: @powf_negative_base(452; CHECK-NEXT:    [[CALL:%.*]] = tail call nnan ninf afn float @powf(float -4.000000e+00, float [[E:%.*]])453; CHECK-NEXT:    ret float [[CALL]]454;455  %call = tail call afn nnan ninf float @powf(float -4.000000e+00, float %e)456  ret float %call457}458 459define float @powf_multiuse(float %e) {460; CHECK-LABEL: @powf_multiuse(461; CHECK-NEXT:    [[MUL:%.*]] = fmul nnan ninf afn float [[E:%.*]], 0x4002934{{.*}}462; CHECK-NEXT:    [[EXP2F:%.*]] = tail call nnan ninf afn float @exp2f(float [[MUL]])463; CHECK-NEXT:    tail call void @use_f(float [[EXP2F]])464; CHECK-NEXT:    ret float [[EXP2F]]465;466  %call = tail call afn nnan ninf float @powf(float 5.000000e+00, float %e)467  tail call void @use_f(float %call)468  ret float %call469}470 471define float @powf_ok_base_no_afn(float %e) {472; CHECK-LABEL: @powf_ok_base_no_afn(473; CHECK-NEXT:    [[CALL:%.*]] = tail call float @powf(float 0x3FE6666660000000, float [[E:%.*]])474; CHECK-NEXT:    ret float [[CALL]]475;476  %call = tail call float @powf(float 0x3FE6666660000000, float %e)477  ret float %call478}479 480define fp128 @powl_long_dbl_no_fold(fp128 %e) {481; CHECK-LABEL: @powl_long_dbl_no_fold(482; CHECK-NEXT:    [[CALL:%.*]] = tail call nnan ninf afn fp128 @powl(fp128 0xL00000000000000005001000000000000, fp128 [[E:%.*]])483; CHECK-NEXT:    ret fp128 [[CALL]]484;485  %call = tail call afn nnan ninf fp128 @powl(fp128 0xL00000000000000005001000000000000, fp128 %e)486  ret fp128 %call487}488 489declare float @expf(float)490declare double @exp(double)491declare fp128 @expl(fp128)492declare float @exp2f(float)493declare double @exp2(double)494declare fp128 @exp2l(fp128)495declare float @exp10f(float)496declare double @exp10(double)497declare fp128 @exp10l(fp128)498declare float @powf(float, float)499declare double @pow(double, double)500declare fp128 @powl(fp128, fp128)501declare float @llvm.pow.f32(float, float)502declare double @llvm.pow.f64(double, double)503declare fp128 @llvm.pow.f128(fp128, fp128)504