184 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt < %s -passes=instcombine -S | FileCheck %s3 4define i1 @or_fcmp_redundant_or1(double %v0) {5; CHECK-LABEL: @or_fcmp_redundant_or1(6; CHECK-NEXT: [[V2:%.*]] = fcmp olt double [[V0:%.*]], 1.990000e+007; CHECK-NEXT: ret i1 [[V2]]8;9 %v1 = fcmp olt double %v0, 1.000000e-0210 %v2 = fcmp olt double %v0, 1.990000e+0011 %v3 = or i1 %v1, %v212 ret i1 %v313}14 15define i1 @or_fcmp_redundant_or2(double %v0) {16; CHECK-LABEL: @or_fcmp_redundant_or2(17; CHECK-NEXT: [[V1:%.*]] = fcmp olt double [[V0:%.*]], 2.300000e+0018; CHECK-NEXT: ret i1 [[V1]]19;20 %v1 = fcmp olt double %v0, 2.300000e+0021 %v2 = fcmp olt double %v0, 1.990000e+0022 %v3 = or i1 %v1, %v223 ret i1 %v324}25 26define i1 @or_fcmp_redundant_or3(double %v0) {27; CHECK-LABEL: @or_fcmp_redundant_or3(28; CHECK-NEXT: [[V1:%.*]] = fcmp ogt double [[V0:%.*]], 1.000000e-0229; CHECK-NEXT: ret i1 [[V1]]30;31 %v1 = fcmp ogt double %v0, 1.000000e-0232 %v2 = fcmp ogt double %v0, 1.990000e+0033 %v3 = or i1 %v1, %v234 ret i1 %v335}36 37define i1 @or_fcmp_redundant_or4(double %v0) {38; CHECK-LABEL: @or_fcmp_redundant_or4(39; CHECK-NEXT: [[V2:%.*]] = fcmp ogt double [[V0:%.*]], 1.990000e+0040; CHECK-NEXT: ret i1 [[V2]]41;42 %v1 = fcmp ogt double %v0, 2.300000e+0043 %v2 = fcmp ogt double %v0, 1.990000e+0044 %v3 = or i1 %v1, %v245 ret i1 %v346}47 48define i1 @or_fcmp_redundant_or_neg1(double %v0) {49; CHECK-LABEL: @or_fcmp_redundant_or_neg1(50; CHECK-NEXT: [[V1:%.*]] = fcmp olt double [[V0:%.*]], 1.000000e-0251; CHECK-NEXT: [[V2:%.*]] = fcmp ogt double [[V0]], 1.990000e+0052; CHECK-NEXT: [[V3:%.*]] = or i1 [[V1]], [[V2]]53; CHECK-NEXT: ret i1 [[V3]]54;55 %v1 = fcmp olt double %v0, 1.000000e-0256 %v2 = fcmp ogt double %v0, 1.990000e+0057 %v3 = or i1 %v1, %v258 ret i1 %v359}60 61define i1 @or_fcmp_redundant_or_neg2(double %v0) {62; CHECK-LABEL: @or_fcmp_redundant_or_neg2(63; CHECK-NEXT: [[V1:%.*]] = fcmp ogt double [[V0:%.*]], 1.000000e-0264; CHECK-NEXT: [[V2:%.*]] = fcmp olt double [[V0]], 1.990000e+0065; CHECK-NEXT: [[V3:%.*]] = or i1 [[V1]], [[V2]]66; CHECK-NEXT: ret i1 [[V3]]67;68 %v1 = fcmp ogt double %v0, 1.000000e-0269 %v2 = fcmp olt double %v0, 1.990000e+0070 %v3 = or i1 %v1, %v271 ret i1 %v372}73 74define i1 @or_fcmp_redundant_and1(double %v0) {75; CHECK-LABEL: @or_fcmp_redundant_and1(76; CHECK-NEXT: [[V1:%.*]] = fcmp olt double [[V0:%.*]], 1.000000e-0277; CHECK-NEXT: ret i1 [[V1]]78;79 %v1 = fcmp olt double %v0, 1.000000e-0280 %v2 = fcmp olt double %v0, 1.990000e+0081 %v3 = and i1 %v1, %v282 ret i1 %v383}84 85define i1 @or_fcmp_redundant_and2(double %v0) {86; CHECK-LABEL: @or_fcmp_redundant_and2(87; CHECK-NEXT: [[V2:%.*]] = fcmp olt double [[V0:%.*]], 1.990000e+0088; CHECK-NEXT: ret i1 [[V2]]89;90 %v1 = fcmp olt double %v0, 2.300000e+0091 %v2 = fcmp olt double %v0, 1.990000e+0092 %v3 = and i1 %v1, %v293 ret i1 %v394}95 96define i1 @or_fcmp_redundant_and3(double %v0) {97; CHECK-LABEL: @or_fcmp_redundant_and3(98; CHECK-NEXT: [[V2:%.*]] = fcmp ogt double [[V0:%.*]], 1.990000e+0099; CHECK-NEXT: ret i1 [[V2]]100;101 %v1 = fcmp ogt double %v0, 1.000000e-02102 %v2 = fcmp ogt double %v0, 1.990000e+00103 %v3 = and i1 %v1, %v2104 ret i1 %v3105}106 107define i1 @or_fcmp_redundant_and4(double %v0) {108; CHECK-LABEL: @or_fcmp_redundant_and4(109; CHECK-NEXT: [[V1:%.*]] = fcmp ogt double [[V0:%.*]], 2.300000e+00110; CHECK-NEXT: ret i1 [[V1]]111;112 %v1 = fcmp ogt double %v0, 2.300000e+00113 %v2 = fcmp ogt double %v0, 1.990000e+00114 %v3 = and i1 %v1, %v2115 ret i1 %v3116}117 118define i1 @or_fcmp_redundant_and_neg1(double %v0) {119; CHECK-LABEL: @or_fcmp_redundant_and_neg1(120; CHECK-NEXT: ret i1 false121;122 %v1 = fcmp olt double %v0, 1.000000e-02123 %v2 = fcmp ogt double %v0, 1.990000e+00124 %v3 = and i1 %v1, %v2125 ret i1 %v3126}127 128define i1 @or_fcmp_redundant_and_neg2(double %v0) {129; CHECK-LABEL: @or_fcmp_redundant_and_neg2(130; CHECK-NEXT: [[V1:%.*]] = fcmp ogt double [[V0:%.*]], 1.000000e-02131; CHECK-NEXT: [[V2:%.*]] = fcmp olt double [[V0]], 1.990000e+00132; CHECK-NEXT: [[V3:%.*]] = and i1 [[V1]], [[V2]]133; CHECK-NEXT: ret i1 [[V3]]134;135 %v1 = fcmp ogt double %v0, 1.000000e-02136 %v2 = fcmp olt double %v0, 1.990000e+00137 %v3 = and i1 %v1, %v2138 ret i1 %v3139}140 141define i1 @or_fcmp_redundant_select_or1(double %v0) {142; CHECK-LABEL: @or_fcmp_redundant_select_or1(143; CHECK-NEXT: [[V1:%.*]] = fcmp olt double [[V0:%.*]], 1.000000e-02144; CHECK-NEXT: ret i1 [[V1]]145;146 %v1 = fcmp olt double %v0, 1.000000e-02147 %v2 = fcmp olt double %v0, 1.990000e+00148 %v3 = select i1 %v1, i1 %v2, i1 false149 ret i1 %v3150}151 152define i1 @or_fcmp_redundant_select_or2(double %v0) {153; CHECK-LABEL: @or_fcmp_redundant_select_or2(154; CHECK-NEXT: [[V2:%.*]] = fcmp ogt double [[V0:%.*]], 1.990000e+00155; CHECK-NEXT: ret i1 [[V2]]156;157 %v1 = fcmp ogt double %v0, 1.000000e-02158 %v2 = fcmp ogt double %v0, 1.990000e+00159 %v3 = select i1 %v1, i1 %v2, i1 false160 ret i1 %v3161}162 163define i1 @or_fcmp_redundant_select_and1(double %v0) {164; CHECK-LABEL: @or_fcmp_redundant_select_and1(165; CHECK-NEXT: [[V2:%.*]] = fcmp olt double [[V0:%.*]], 1.990000e+00166; CHECK-NEXT: ret i1 [[V2]]167;168 %v1 = fcmp olt double %v0, 1.000000e-02169 %v2 = fcmp olt double %v0, 1.990000e+00170 %v3 = select i1 %v1, i1 true, i1 %v2171 ret i1 %v3172}173 174define i1 @or_fcmp_redundant_select_and2(double %v0) {175; CHECK-LABEL: @or_fcmp_redundant_select_and2(176; CHECK-NEXT: [[V1:%.*]] = fcmp ogt double [[V0:%.*]], 1.000000e-02177; CHECK-NEXT: ret i1 [[V1]]178;179 %v1 = fcmp ogt double %v0, 1.000000e-02180 %v2 = fcmp ogt double %v0, 1.990000e+00181 %v3 = select i1 %v1, i1 true, i1 %v2182 ret i1 %v3183}184