140 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 52; RUN: opt < %s -passes=instcombine -S | FileCheck %s3 4define float @remquo_f32(ptr %quo) {5; CHECK-LABEL: define float @remquo_f32(6; CHECK-SAME: ptr [[QUO:%.*]]) {7; CHECK-NEXT: [[ENTRY:.*:]]8; CHECK-NEXT: store i32 -2, ptr [[QUO]], align 49; CHECK-NEXT: ret float 1.000000e+0010;11entry:12 %call = call float @remquof(float -5.000000e+00, float 3.000000e+00, ptr %quo)13 ret float %call14}15 16define float @remquo_f32_quo_sign(ptr %quo) {17; CHECK-LABEL: define float @remquo_f32_quo_sign(18; CHECK-SAME: ptr [[QUO:%.*]]) {19; CHECK-NEXT: [[ENTRY:.*:]]20; CHECK-NEXT: store i32 2, ptr [[QUO]], align 421; CHECK-NEXT: ret float -1.000000e+0022;23entry:24 %call = call float @remquof(float 5.000000e+00, float 3.000000e+00, ptr %quo)25 ret float %call26}27 28define float @remquo_f32_round(ptr %quo) {29; CHECK-LABEL: define float @remquo_f32_round(30; CHECK-SAME: ptr [[QUO:%.*]]) {31; CHECK-NEXT: [[ENTRY:.*:]]32; CHECK-NEXT: store i32 -6, ptr [[QUO]], align 433; CHECK-NEXT: ret float 0xBFC999990000000034;35entry:36 %call = call float @remquof(float -5.000000e+00, float 0x3FE99999A0000000, ptr %quo)37 ret float %call38}39 40define double @remquo_f64(ptr %quo) {41; CHECK-LABEL: define double @remquo_f64(42; CHECK-SAME: ptr [[QUO:%.*]]) {43; CHECK-NEXT: [[ENTRY:.*:]]44; CHECK-NEXT: store i32 -5, ptr [[QUO]], align 445; CHECK-NEXT: ret double -0.000000e+0046;47entry:48 %call = call double @remquo(double -5.000000e+00, double 1.000000e+00, ptr %quo)49 ret double %call50}51 52; Negative tests53 54define float @remquo_f32_inf_x(ptr %quo) {55; CHECK-LABEL: define float @remquo_f32_inf_x(56; CHECK-SAME: ptr [[QUO:%.*]]) {57; CHECK-NEXT: [[ENTRY:.*:]]58; CHECK-NEXT: [[CALL:%.*]] = call float @remquof(float 0x7FF0000000000000, float 1.000000e+00, ptr [[QUO]])59; CHECK-NEXT: ret float [[CALL]]60;61entry:62 %call = call float @remquof(float 0x7FF0000000000000, float 1.000000e+00, ptr %quo)63 ret float %call64}65 66define float @remquo_f32_zero_y(ptr %quo) {67; CHECK-LABEL: define float @remquo_f32_zero_y(68; CHECK-SAME: ptr [[QUO:%.*]]) {69; CHECK-NEXT: [[ENTRY:.*:]]70; CHECK-NEXT: [[CALL:%.*]] = call float @remquof(float -5.000000e+00, float 0.000000e+00, ptr [[QUO]])71; CHECK-NEXT: ret float [[CALL]]72;73entry:74 %call = call float @remquof(float -5.000000e+00, float 0.000000e+00, ptr %quo)75 ret float %call76}77 78define float @remquo_f32_nzero_y(ptr %quo) {79; CHECK-LABEL: define float @remquo_f32_nzero_y(80; CHECK-SAME: ptr [[QUO:%.*]]) {81; CHECK-NEXT: [[ENTRY:.*:]]82; CHECK-NEXT: [[CALL:%.*]] = call float @remquof(float -5.000000e+00, float -0.000000e+00, ptr [[QUO]])83; CHECK-NEXT: ret float [[CALL]]84;85entry:86 %call = call float @remquof(float -5.000000e+00, float -0.000000e+00, ptr %quo)87 ret float %call88}89 90define float @remquo_f32_nan_x(ptr %quo) {91; CHECK-LABEL: define float @remquo_f32_nan_x(92; CHECK-SAME: ptr [[QUO:%.*]]) {93; CHECK-NEXT: [[ENTRY:.*:]]94; CHECK-NEXT: [[CALL:%.*]] = call float @remquof(float 0x7FF8000000000000, float 1.000000e+00, ptr [[QUO]])95; CHECK-NEXT: ret float [[CALL]]96;97entry:98 %call = call float @remquof(float 0x7FF8000000000000, float 1.000000e+00, ptr %quo)99 ret float %call100}101 102define float @remquo_f32_nan_y(ptr %quo) {103; CHECK-LABEL: define float @remquo_f32_nan_y(104; CHECK-SAME: ptr [[QUO:%.*]]) {105; CHECK-NEXT: [[ENTRY:.*:]]106; CHECK-NEXT: [[CALL:%.*]] = call float @remquof(float 1.000000e+00, float 0x7FF8000000000000, ptr [[QUO]])107; CHECK-NEXT: ret float [[CALL]]108;109entry:110 %call = call float @remquof(float 1.000000e+00, float 0x7FF8000000000000, ptr %quo)111 ret float %call112}113 114define float @remquo_f32_strictfp(ptr %quo) strictfp {115; CHECK-LABEL: define float @remquo_f32_strictfp(116; CHECK-SAME: ptr [[QUO:%.*]]) #[[ATTR0:[0-9]+]] {117; CHECK-NEXT: [[ENTRY:.*:]]118; CHECK-NEXT: [[CALL:%.*]] = call float @remquof(float -5.000000e+00, float 3.000000e+00, ptr [[QUO]]) #[[ATTR0]]119; CHECK-NEXT: ret float [[CALL]]120;121entry:122 %call = call float @remquof(float -5.000000e+00, float 3.000000e+00, ptr %quo) strictfp123 ret float %call124}125 126define float @remquo_f32_zero_y_strictfp(ptr %quo) strictfp {127; CHECK-LABEL: define float @remquo_f32_zero_y_strictfp(128; CHECK-SAME: ptr [[QUO:%.*]]) #[[ATTR0]] {129; CHECK-NEXT: [[ENTRY:.*:]]130; CHECK-NEXT: [[CALL:%.*]] = call float @remquof(float -5.000000e+00, float 0.000000e+00, ptr [[QUO]]) #[[ATTR0]]131; CHECK-NEXT: ret float [[CALL]]132;133entry:134 %call = call float @remquof(float -5.000000e+00, float 0.000000e+00, ptr %quo) strictfp135 ret float %call136}137 138declare float @remquof(float, float, ptr)139declare double @remquo(double, double, ptr)140