brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.9 KiB · 6d945ed Raw
132 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -S -passes=instcombine < %s | FileCheck %s3 4define double @fdiv_cos_sin(double %a) {5; CHECK-LABEL: @fdiv_cos_sin(6; CHECK-NEXT:    [[TMP1:%.*]] = call double @llvm.cos.f64(double [[A:%.*]])7; CHECK-NEXT:    [[TMP2:%.*]] = call double @llvm.sin.f64(double [[A]])8; CHECK-NEXT:    [[DIV:%.*]] = fdiv double [[TMP1]], [[TMP2]]9; CHECK-NEXT:    ret double [[DIV]]10;11  %1 = call double @llvm.cos.f64(double %a)12  %2 = call double @llvm.sin.f64(double %a)13  %div = fdiv double %1, %214  ret double %div15}16 17define double @fdiv_strict_cos_strict_sin_reassoc(double %a) {18; CHECK-LABEL: @fdiv_strict_cos_strict_sin_reassoc(19; CHECK-NEXT:    [[TMP1:%.*]] = call double @llvm.cos.f64(double [[A:%.*]])20; CHECK-NEXT:    [[TMP2:%.*]] = call reassoc double @llvm.sin.f64(double [[A]])21; CHECK-NEXT:    [[DIV:%.*]] = fdiv double [[TMP1]], [[TMP2]]22; CHECK-NEXT:    ret double [[DIV]]23;24  %1 = call double @llvm.cos.f64(double %a)25  %2 = call reassoc double @llvm.sin.f64(double %a)26  %div = fdiv double %1, %227  ret double %div28}29 30define double @fdiv_reassoc_cos_strict_sin_strict(double %a, ptr dereferenceable(2) %dummy) {31; CHECK-LABEL: @fdiv_reassoc_cos_strict_sin_strict(32; CHECK-NEXT:    [[TAN:%.*]] = call reassoc double @tan(double [[A:%.*]]) #[[ATTR1:[0-9]+]]33; CHECK-NEXT:    [[DIV:%.*]] = fdiv reassoc double 1.000000e+00, [[TAN]]34; CHECK-NEXT:    ret double [[DIV]]35;36  %1 = call double @llvm.cos.f64(double %a)37  %2 = call double @llvm.sin.f64(double %a)38  %div = fdiv reassoc double %1, %239  ret double %div40}41 42define double @fdiv_reassoc_cos_reassoc_sin_strict(double %a) {43; CHECK-LABEL: @fdiv_reassoc_cos_reassoc_sin_strict(44; CHECK-NEXT:    [[TAN:%.*]] = call reassoc double @tan(double [[A:%.*]]) #[[ATTR1]]45; CHECK-NEXT:    [[DIV:%.*]] = fdiv reassoc double 1.000000e+00, [[TAN]]46; CHECK-NEXT:    ret double [[DIV]]47;48  %1 = call reassoc double @llvm.cos.f64(double %a)49  %2 = call double @llvm.sin.f64(double %a)50  %div = fdiv reassoc double %1, %251  ret double %div52}53 54define double @fdiv_cos_sin_reassoc_multiple_uses(double %a) {55; CHECK-LABEL: @fdiv_cos_sin_reassoc_multiple_uses(56; CHECK-NEXT:    [[TMP1:%.*]] = call reassoc double @llvm.cos.f64(double [[A:%.*]])57; CHECK-NEXT:    [[TMP2:%.*]] = call reassoc double @llvm.sin.f64(double [[A]])58; CHECK-NEXT:    [[DIV:%.*]] = fdiv reassoc double [[TMP1]], [[TMP2]]59; CHECK-NEXT:    call void @use(double [[TMP2]])60; CHECK-NEXT:    ret double [[DIV]]61;62  %1 = call reassoc double @llvm.cos.f64(double %a)63  %2 = call reassoc double @llvm.sin.f64(double %a)64  %div = fdiv reassoc double %1, %265  call void @use(double %2)66  ret double %div67}68 69define double @fdiv_cos_sin_reassoc(double %a) {70; CHECK-LABEL: @fdiv_cos_sin_reassoc(71; CHECK-NEXT:    [[TAN:%.*]] = call reassoc double @tan(double [[A:%.*]]) #[[ATTR1]]72; CHECK-NEXT:    [[DIV:%.*]] = fdiv reassoc double 1.000000e+00, [[TAN]]73; CHECK-NEXT:    ret double [[DIV]]74;75  %1 = call reassoc double @llvm.cos.f64(double %a)76  %2 = call reassoc double @llvm.sin.f64(double %a)77  %div = fdiv reassoc double %1, %278  ret double %div79}80 81define half @fdiv_cosf16_sinf16_reassoc(half %a) {82; CHECK-LABEL: @fdiv_cosf16_sinf16_reassoc(83; CHECK-NEXT:    [[TMP1:%.*]] = call reassoc half @llvm.cos.f16(half [[A:%.*]])84; CHECK-NEXT:    [[TMP2:%.*]] = call reassoc half @llvm.sin.f16(half [[A]])85; CHECK-NEXT:    [[DIV:%.*]] = fdiv reassoc half [[TMP1]], [[TMP2]]86; CHECK-NEXT:    ret half [[DIV]]87;88  %1 = call reassoc half @llvm.cos.f16(half %a)89  %2 = call reassoc half @llvm.sin.f16(half %a)90  %div = fdiv reassoc half %1, %291  ret half %div92}93 94define float @fdiv_cosf_sinf_reassoc(float %a) {95; CHECK-LABEL: @fdiv_cosf_sinf_reassoc(96; CHECK-NEXT:    [[TANF:%.*]] = call reassoc float @tanf(float [[A:%.*]]) #[[ATTR1]]97; CHECK-NEXT:    [[DIV:%.*]] = fdiv reassoc float 1.000000e+00, [[TANF]]98; CHECK-NEXT:    ret float [[DIV]]99;100  %1 = call reassoc float @llvm.cos.f32(float %a)101  %2 = call reassoc float @llvm.sin.f32(float %a)102  %div = fdiv reassoc float %1, %2103  ret float %div104}105 106define fp128 @fdiv_cosfp128_sinfp128_reassoc(fp128 %a) {107; CHECK-LABEL: @fdiv_cosfp128_sinfp128_reassoc(108; CHECK-NEXT:    [[TANL:%.*]] = call reassoc fp128 @tanl(fp128 [[A:%.*]]) #[[ATTR1]]109; CHECK-NEXT:    [[DIV:%.*]] = fdiv reassoc fp128 0xL00000000000000003FFF000000000000, [[TANL]]110; CHECK-NEXT:    ret fp128 [[DIV]]111;112  %1 = call reassoc fp128 @llvm.cos.fp128(fp128 %a)113  %2 = call reassoc fp128 @llvm.sin.fp128(fp128 %a)114  %div = fdiv reassoc fp128 %1, %2115  ret fp128 %div116}117 118declare half @llvm.cos.f16(half) #1119declare float @llvm.cos.f32(float) #1120declare double @llvm.cos.f64(double) #1121declare fp128 @llvm.cos.fp128(fp128) #1122 123declare half @llvm.sin.f16(half) #1124declare float @llvm.sin.f32(float) #1125declare double @llvm.sin.f64(double) #1126declare fp128 @llvm.sin.fp128(fp128) #1127 128declare void @use(double)129 130attributes #0 = { nounwind readnone speculatable }131attributes #1 = { nounwind readnone }132