brintos

brintos / llvm-project-archived public Read only

0
0
Text · 2.2 KiB · 20d8afb Raw
61 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -disable-simplify-libcalls -passes=instcombine -S | FileCheck %s3 4declare double @llvm.pow.f64(double, double)5declare double @pow(double, double)6 7define double @sqrt_libcall(double %x) {8; CHECK-LABEL: @sqrt_libcall(9; CHECK-NEXT:    [[RETVAL:%.*]] = call double @pow(double [[X:%.*]], double 5.000000e-01)10; CHECK-NEXT:    ret double [[RETVAL]]11;12  %retval = call double @pow(double %x, double 0.5)13  ret double %retval14}15 16define double @sqrt_intrinsic(double %x) {17; CHECK-LABEL: @sqrt_intrinsic(18; CHECK-NEXT:    [[SQRT:%.*]] = call double @llvm.sqrt.f64(double [[X:%.*]])19; CHECK-NEXT:    [[ABS:%.*]] = call double @llvm.fabs.f64(double [[SQRT]])20; CHECK-NEXT:    [[ISINF:%.*]] = fcmp oeq double [[X]], 0xFFF000000000000021; CHECK-NEXT:    [[RETVAL:%.*]] = select i1 [[ISINF]], double 0x7FF0000000000000, double [[ABS]]22; CHECK-NEXT:    ret double [[RETVAL]]23;24  %retval = call double @llvm.pow.f64(double %x, double 0.5)25  ret double %retval26}27 28; Shrinking is disabled too.29 30define float @shrink_libcall(float %f, float %g) {31; CHECK-LABEL: @shrink_libcall(32; CHECK-NEXT:    [[DF:%.*]] = fpext float [[F:%.*]] to double33; CHECK-NEXT:    [[DG:%.*]] = fpext float [[G:%.*]] to double34; CHECK-NEXT:    [[CALL:%.*]] = call fast double @pow(double [[DF]], double [[DG]])35; CHECK-NEXT:    [[FR:%.*]] = fptrunc double [[CALL]] to float36; CHECK-NEXT:    ret float [[FR]]37;38  %df = fpext float %f to double39  %dg = fpext float %g to double40  %call = call fast double @pow(double %df, double %dg)41  %fr = fptrunc double %call to float42  ret float %fr43}44 45; Shrinking is disabled for the intrinsic too.46 47define float @shrink_intrinsic(float %f, float %g) {48; CHECK-LABEL: @shrink_intrinsic(49; CHECK-NEXT:    [[DF:%.*]] = fpext float [[F:%.*]] to double50; CHECK-NEXT:    [[DG:%.*]] = fpext float [[G:%.*]] to double51; CHECK-NEXT:    [[CALL:%.*]] = call fast double @llvm.pow.f64(double [[DF]], double [[DG]])52; CHECK-NEXT:    [[FR:%.*]] = fptrunc double [[CALL]] to float53; CHECK-NEXT:    ret float [[FR]]54;55  %df = fpext float %f to double56  %dg = fpext float %g to double57  %call = call fast double @llvm.pow.f64(double %df, double %dg)58  %fr = fptrunc double %call to float59  ret float %fr60}61