; NOTE: Assertions have been autogenerated by utils/update_test_checks.py ; RUN: opt < %s -passes=instcombine -S | FileCheck %s define i1 @or_fcmp_redundant_or1(double %v0) { ; CHECK-LABEL: @or_fcmp_redundant_or1( ; CHECK-NEXT: [[V2:%.*]] = fcmp olt double [[V0:%.*]], 1.990000e+00 ; CHECK-NEXT: ret i1 [[V2]] ; %v1 = fcmp olt double %v0, 1.000000e-02 %v2 = fcmp olt double %v0, 1.990000e+00 %v3 = or i1 %v1, %v2 ret i1 %v3 } define i1 @or_fcmp_redundant_or2(double %v0) { ; CHECK-LABEL: @or_fcmp_redundant_or2( ; CHECK-NEXT: [[V1:%.*]] = fcmp olt double [[V0:%.*]], 2.300000e+00 ; CHECK-NEXT: ret i1 [[V1]] ; %v1 = fcmp olt double %v0, 2.300000e+00 %v2 = fcmp olt double %v0, 1.990000e+00 %v3 = or i1 %v1, %v2 ret i1 %v3 } define i1 @or_fcmp_redundant_or3(double %v0) { ; CHECK-LABEL: @or_fcmp_redundant_or3( ; CHECK-NEXT: [[V1:%.*]] = fcmp ogt double [[V0:%.*]], 1.000000e-02 ; CHECK-NEXT: ret i1 [[V1]] ; %v1 = fcmp ogt double %v0, 1.000000e-02 %v2 = fcmp ogt double %v0, 1.990000e+00 %v3 = or i1 %v1, %v2 ret i1 %v3 } define i1 @or_fcmp_redundant_or4(double %v0) { ; CHECK-LABEL: @or_fcmp_redundant_or4( ; CHECK-NEXT: [[V2:%.*]] = fcmp ogt double [[V0:%.*]], 1.990000e+00 ; CHECK-NEXT: ret i1 [[V2]] ; %v1 = fcmp ogt double %v0, 2.300000e+00 %v2 = fcmp ogt double %v0, 1.990000e+00 %v3 = or i1 %v1, %v2 ret i1 %v3 } define i1 @or_fcmp_redundant_or_neg1(double %v0) { ; CHECK-LABEL: @or_fcmp_redundant_or_neg1( ; CHECK-NEXT: [[V1:%.*]] = fcmp olt double [[V0:%.*]], 1.000000e-02 ; CHECK-NEXT: [[V2:%.*]] = fcmp ogt double [[V0]], 1.990000e+00 ; CHECK-NEXT: [[V3:%.*]] = or i1 [[V1]], [[V2]] ; CHECK-NEXT: ret i1 [[V3]] ; %v1 = fcmp olt double %v0, 1.000000e-02 %v2 = fcmp ogt double %v0, 1.990000e+00 %v3 = or i1 %v1, %v2 ret i1 %v3 } define i1 @or_fcmp_redundant_or_neg2(double %v0) { ; CHECK-LABEL: @or_fcmp_redundant_or_neg2( ; CHECK-NEXT: [[V1:%.*]] = fcmp ogt double [[V0:%.*]], 1.000000e-02 ; CHECK-NEXT: [[V2:%.*]] = fcmp olt double [[V0]], 1.990000e+00 ; CHECK-NEXT: [[V3:%.*]] = or i1 [[V1]], [[V2]] ; CHECK-NEXT: ret i1 [[V3]] ; %v1 = fcmp ogt double %v0, 1.000000e-02 %v2 = fcmp olt double %v0, 1.990000e+00 %v3 = or i1 %v1, %v2 ret i1 %v3 } define i1 @or_fcmp_redundant_and1(double %v0) { ; CHECK-LABEL: @or_fcmp_redundant_and1( ; CHECK-NEXT: [[V1:%.*]] = fcmp olt double [[V0:%.*]], 1.000000e-02 ; CHECK-NEXT: ret i1 [[V1]] ; %v1 = fcmp olt double %v0, 1.000000e-02 %v2 = fcmp olt double %v0, 1.990000e+00 %v3 = and i1 %v1, %v2 ret i1 %v3 } define i1 @or_fcmp_redundant_and2(double %v0) { ; CHECK-LABEL: @or_fcmp_redundant_and2( ; CHECK-NEXT: [[V2:%.*]] = fcmp olt double [[V0:%.*]], 1.990000e+00 ; CHECK-NEXT: ret i1 [[V2]] ; %v1 = fcmp olt double %v0, 2.300000e+00 %v2 = fcmp olt double %v0, 1.990000e+00 %v3 = and i1 %v1, %v2 ret i1 %v3 } define i1 @or_fcmp_redundant_and3(double %v0) { ; CHECK-LABEL: @or_fcmp_redundant_and3( ; CHECK-NEXT: [[V2:%.*]] = fcmp ogt double [[V0:%.*]], 1.990000e+00 ; CHECK-NEXT: ret i1 [[V2]] ; %v1 = fcmp ogt double %v0, 1.000000e-02 %v2 = fcmp ogt double %v0, 1.990000e+00 %v3 = and i1 %v1, %v2 ret i1 %v3 } define i1 @or_fcmp_redundant_and4(double %v0) { ; CHECK-LABEL: @or_fcmp_redundant_and4( ; CHECK-NEXT: [[V1:%.*]] = fcmp ogt double [[V0:%.*]], 2.300000e+00 ; CHECK-NEXT: ret i1 [[V1]] ; %v1 = fcmp ogt double %v0, 2.300000e+00 %v2 = fcmp ogt double %v0, 1.990000e+00 %v3 = and i1 %v1, %v2 ret i1 %v3 } define i1 @or_fcmp_redundant_and_neg1(double %v0) { ; CHECK-LABEL: @or_fcmp_redundant_and_neg1( ; CHECK-NEXT: ret i1 false ; %v1 = fcmp olt double %v0, 1.000000e-02 %v2 = fcmp ogt double %v0, 1.990000e+00 %v3 = and i1 %v1, %v2 ret i1 %v3 } define i1 @or_fcmp_redundant_and_neg2(double %v0) { ; CHECK-LABEL: @or_fcmp_redundant_and_neg2( ; CHECK-NEXT: [[V1:%.*]] = fcmp ogt double [[V0:%.*]], 1.000000e-02 ; CHECK-NEXT: [[V2:%.*]] = fcmp olt double [[V0]], 1.990000e+00 ; CHECK-NEXT: [[V3:%.*]] = and i1 [[V1]], [[V2]] ; CHECK-NEXT: ret i1 [[V3]] ; %v1 = fcmp ogt double %v0, 1.000000e-02 %v2 = fcmp olt double %v0, 1.990000e+00 %v3 = and i1 %v1, %v2 ret i1 %v3 } define i1 @or_fcmp_redundant_select_or1(double %v0) { ; CHECK-LABEL: @or_fcmp_redundant_select_or1( ; CHECK-NEXT: [[V1:%.*]] = fcmp olt double [[V0:%.*]], 1.000000e-02 ; CHECK-NEXT: ret i1 [[V1]] ; %v1 = fcmp olt double %v0, 1.000000e-02 %v2 = fcmp olt double %v0, 1.990000e+00 %v3 = select i1 %v1, i1 %v2, i1 false ret i1 %v3 } define i1 @or_fcmp_redundant_select_or2(double %v0) { ; CHECK-LABEL: @or_fcmp_redundant_select_or2( ; CHECK-NEXT: [[V2:%.*]] = fcmp ogt double [[V0:%.*]], 1.990000e+00 ; CHECK-NEXT: ret i1 [[V2]] ; %v1 = fcmp ogt double %v0, 1.000000e-02 %v2 = fcmp ogt double %v0, 1.990000e+00 %v3 = select i1 %v1, i1 %v2, i1 false ret i1 %v3 } define i1 @or_fcmp_redundant_select_and1(double %v0) { ; CHECK-LABEL: @or_fcmp_redundant_select_and1( ; CHECK-NEXT: [[V2:%.*]] = fcmp olt double [[V0:%.*]], 1.990000e+00 ; CHECK-NEXT: ret i1 [[V2]] ; %v1 = fcmp olt double %v0, 1.000000e-02 %v2 = fcmp olt double %v0, 1.990000e+00 %v3 = select i1 %v1, i1 true, i1 %v2 ret i1 %v3 } define i1 @or_fcmp_redundant_select_and2(double %v0) { ; CHECK-LABEL: @or_fcmp_redundant_select_and2( ; CHECK-NEXT: [[V1:%.*]] = fcmp ogt double [[V0:%.*]], 1.000000e-02 ; CHECK-NEXT: ret i1 [[V1]] ; %v1 = fcmp ogt double %v0, 1.000000e-02 %v2 = fcmp ogt double %v0, 1.990000e+00 %v3 = select i1 %v1, i1 true, i1 %v2 ret i1 %v3 }