| ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py |
| ; RUN: opt -passes=early-cse -earlycse-debug-hash -S -o - %s | FileCheck %s |
| |
| declare double @atan2(double, double) #0 |
| define double @f_atan2() { |
| ; CHECK-LABEL: @f_atan2( |
| ; CHECK-NEXT: ret double 0x3FDDAC6{{.+}} |
| ; |
| %res = tail call fast double @atan2(double 1.0, double 2.0) |
| ret double %res |
| } |
| |
| declare float @fmodf(float, float) #0 |
| define float @f_fmodf() { |
| ; CHECK-LABEL: @f_fmodf( |
| ; CHECK-NEXT: ret float 1.000000e+00 |
| ; |
| %res = tail call fast float @fmodf(float 1.0, float 2.0) |
| ret float %res |
| } |
| |
| declare float @remainderf(float, float) #0 |
| define float @f_remainderf_fold1() { |
| ; CHECK-LABEL: @f_remainderf_fold1( |
| ; CHECK-NEXT: ret float 1.000000e+00 |
| ; |
| %res = tail call fast float @remainderf(float 1.0, float 2.0) |
| ret float %res |
| } |
| |
| define float @f_remainderf_fold2() { |
| ; CHECK-LABEL: @f_remainderf_fold2( |
| ; CHECK-NEXT: ret float -5.000000e-01 |
| ; |
| %res = tail call fast float @remainderf(float 1.5, float 1.0) |
| ret float %res |
| } |
| |
| define float @f_remainderf_nofold() { |
| ; CHECK-LABEL: @f_remainderf_nofold( |
| ; CHECK-NEXT: [[RES:%.*]] = tail call fast float @remainderf(float 1.000000e+00, float 0.000000e+00) |
| ; CHECK-NEXT: ret float [[RES]] |
| ; |
| %res = tail call fast float @remainderf(float 1.0, float 0.0) |
| ret float %res |
| } |
| |
| declare double @remainder(double, double) #0 |
| define double @f_remainder_fold1() { |
| ; CHECK-LABEL: @f_remainder_fold1( |
| ; CHECK-NEXT: ret double 1.000000e+00 |
| ; |
| %res = tail call fast double @remainder(double 1.0, double 2.0) |
| ret double %res |
| } |
| |
| define double @f_remainder_fold2() { |
| ; CHECK-LABEL: @f_remainder_fold2( |
| ; CHECK-NEXT: ret double -5.000000e-01 |
| ; |
| %res = tail call fast double @remainder(double 1.5, double 1.0) |
| ret double %res |
| } |
| |
| define double @f_remainder_nofold() { |
| ; CHECK-LABEL: @f_remainder_nofold( |
| ; CHECK-NEXT: [[RES:%.*]] = tail call fast double @remainder(double 1.000000e+00, double 0.000000e+00) |
| ; CHECK-NEXT: ret double [[RES]] |
| ; |
| %res = tail call fast double @remainder(double 1.0, double 0.0) |
| ret double %res |
| } |
| |
| declare double @pow(double, double) #0 |
| define double @f_pow() { |
| ; CHECK-LABEL: @f_pow( |
| ; CHECK-NEXT: ret double 1.000000e+00 |
| ; |
| %res = tail call fast double @pow(double 1.0, double 2.0) |
| ret double %res |
| } |
| |
| declare float @llvm.pow.f32(float, float) |
| define float @i_powf() { |
| ; CHECK-LABEL: @i_powf( |
| ; CHECK-NEXT: ret float 1.000000e+00 |
| ; |
| %res = tail call fast float @llvm.pow.f32(float 1.0, float 2.0) |
| ret float %res |
| } |
| |
| declare double @llvm.powi.f64.i32(double, i32) |
| define double @i_powi() { |
| ; CHECK-LABEL: @i_powi( |
| ; CHECK-NEXT: ret double 1.000000e+00 |
| ; |
| %res = tail call fast double @llvm.powi.f64.i32(double 1.0, i32 2) |
| ret double %res |
| } |
| |
| attributes #0 = { nofree nounwind willreturn } |