/// Values in the range 0-31 are reserved for FCmpInst, while values in the
/// range 32-64 are reserved for ICmpInst. This is necessary to ensure the
/// predicate values are not overlapping between the classes.
+ ///
+ /// Some passes (e.g. InstCombine) depend on the bit-wise characteristics of
+ /// FCMP_* values. Changing the bit patterns requires a potential change to
+ /// those passes.
enum Predicate {
// Opcode U L G E Intuitive operation
FCMP_FALSE = 0, ///< 0 0 0 0 Always false (always folded)
}
/// Similar to getICmpCode but for FCmpInst. This encodes a fcmp predicate into
-/// a three bit mask. It also returns whether it is an ordered predicate by
-/// reference.
-static unsigned getFCmpCode(FCmpInst::Predicate CC, bool &isOrdered) {
- isOrdered = false;
- switch (CC) {
- case FCmpInst::FCMP_ORD: isOrdered = true; return 0; // 000
- case FCmpInst::FCMP_UNO: return 0; // 000
- case FCmpInst::FCMP_OGT: isOrdered = true; return 1; // 001
- case FCmpInst::FCMP_UGT: return 1; // 001
- case FCmpInst::FCMP_OEQ: isOrdered = true; return 2; // 010
- case FCmpInst::FCMP_UEQ: return 2; // 010
- case FCmpInst::FCMP_OGE: isOrdered = true; return 3; // 011
- case FCmpInst::FCMP_UGE: return 3; // 011
- case FCmpInst::FCMP_OLT: isOrdered = true; return 4; // 100
- case FCmpInst::FCMP_ULT: return 4; // 100
- case FCmpInst::FCMP_ONE: isOrdered = true; return 5; // 101
- case FCmpInst::FCMP_UNE: return 5; // 101
- case FCmpInst::FCMP_OLE: isOrdered = true; return 6; // 110
- case FCmpInst::FCMP_ULE: return 6; // 110
- // True -> 7
- default:
- // Not expecting FCMP_FALSE and FCMP_TRUE;
- llvm_unreachable("Unexpected FCmp predicate!");
- }
+/// a four bit mask.
+static unsigned getFCmpCode(FCmpInst::Predicate CC) {
+ assert(FCmpInst::FCMP_FALSE <= CC && CC <= FCmpInst::FCMP_TRUE &&
+ "Unexpected FCmp predicate!");
+ // Take advantage of the bit pattern of FCmpInst::Predicate here.
+ // U L G E
+ static_assert(FCmpInst::FCMP_FALSE == 0, ""); // 0 0 0 0
+ static_assert(FCmpInst::FCMP_OEQ == 1, ""); // 0 0 0 1
+ static_assert(FCmpInst::FCMP_OGT == 2, ""); // 0 0 1 0
+ static_assert(FCmpInst::FCMP_OGE == 3, ""); // 0 0 1 1
+ static_assert(FCmpInst::FCMP_OLT == 4, ""); // 0 1 0 0
+ static_assert(FCmpInst::FCMP_OLE == 5, ""); // 0 1 0 1
+ static_assert(FCmpInst::FCMP_ONE == 6, ""); // 0 1 1 0
+ static_assert(FCmpInst::FCMP_ORD == 7, ""); // 0 1 1 1
+ static_assert(FCmpInst::FCMP_UNO == 8, ""); // 1 0 0 0
+ static_assert(FCmpInst::FCMP_UEQ == 9, ""); // 1 0 0 1
+ static_assert(FCmpInst::FCMP_UGT == 10, ""); // 1 0 1 0
+ static_assert(FCmpInst::FCMP_UGE == 11, ""); // 1 0 1 1
+ static_assert(FCmpInst::FCMP_ULT == 12, ""); // 1 1 0 0
+ static_assert(FCmpInst::FCMP_ULE == 13, ""); // 1 1 0 1
+ static_assert(FCmpInst::FCMP_UNE == 14, ""); // 1 1 1 0
+ static_assert(FCmpInst::FCMP_TRUE == 15, ""); // 1 1 1 1
+ return CC;
}
/// This is the complement of getICmpCode, which turns an opcode and two
}
/// This is the complement of getFCmpCode, which turns an opcode and two
-/// operands into either a FCmp instruction. isordered is passed in to determine
-/// which kind of predicate to use in the new fcmp instruction.
-static Value *getFCmpValue(bool isordered, unsigned code,
- Value *LHS, Value *RHS,
+/// operands into either a FCmp instruction, or a true/false constant.
+static Value *getFCmpValue(unsigned Code, Value *LHS, Value *RHS,
InstCombiner::BuilderTy *Builder) {
- CmpInst::Predicate Pred;
- switch (code) {
- default: llvm_unreachable("Illegal FCmp code!");
- case 0: Pred = isordered ? FCmpInst::FCMP_ORD : FCmpInst::FCMP_UNO; break;
- case 1: Pred = isordered ? FCmpInst::FCMP_OGT : FCmpInst::FCMP_UGT; break;
- case 2: Pred = isordered ? FCmpInst::FCMP_OEQ : FCmpInst::FCMP_UEQ; break;
- case 3: Pred = isordered ? FCmpInst::FCMP_OGE : FCmpInst::FCMP_UGE; break;
- case 4: Pred = isordered ? FCmpInst::FCMP_OLT : FCmpInst::FCMP_ULT; break;
- case 5: Pred = isordered ? FCmpInst::FCMP_ONE : FCmpInst::FCMP_UNE; break;
- case 6: Pred = isordered ? FCmpInst::FCMP_OLE : FCmpInst::FCMP_ULE; break;
- case 7:
- if (!isordered)
- return ConstantInt::get(CmpInst::makeCmpResultType(LHS->getType()), 1);
- Pred = FCmpInst::FCMP_ORD; break;
- }
+ const auto Pred = static_cast<FCmpInst::Predicate>(Code);
+ assert(FCmpInst::FCMP_FALSE <= Pred && Pred <= FCmpInst::FCMP_TRUE &&
+ "Unexpected FCmp predicate!");
+ if (Pred == FCmpInst::FCMP_FALSE)
+ return ConstantInt::get(CmpInst::makeCmpResultType(LHS->getType()), 0);
+ if (Pred == FCmpInst::FCMP_TRUE)
+ return ConstantInt::get(CmpInst::makeCmpResultType(LHS->getType()), 1);
return Builder->CreateFCmp(Pred, LHS, RHS);
}
/// Optimize (fcmp)&(fcmp). NOTE: Unlike the rest of instcombine, this returns
/// a Value which should already be inserted into the function.
Value *InstCombiner::FoldAndOfFCmps(FCmpInst *LHS, FCmpInst *RHS) {
+ Value *Op0LHS = LHS->getOperand(0), *Op0RHS = LHS->getOperand(1);
+ Value *Op1LHS = RHS->getOperand(0), *Op1RHS = RHS->getOperand(1);
+ FCmpInst::Predicate Op0CC = LHS->getPredicate(), Op1CC = RHS->getPredicate();
+
+ if (Op0LHS == Op1RHS && Op0RHS == Op1LHS) {
+ // Swap RHS operands to match LHS.
+ Op1CC = FCmpInst::getSwappedPredicate(Op1CC);
+ std::swap(Op1LHS, Op1RHS);
+ }
+
+ // Simplify (fcmp cc0 x, y) & (fcmp cc1 x, y).
+ // Suppose the relation between x and y is R, where R is one of
+ // U(1000), L(0100), G(0010) or E(0001), and CC0 and CC1 are the bitmasks for
+ // testing the desired relations.
+ //
+ // Since (R & CC0) and (R & CC1) are either R or 0, we actually have this:
+ // bool(R & CC0) && bool(R & CC1)
+ // = bool((R & CC0) & (R & CC1))
+ // = bool(R & (CC0 & CC1)) <= by re-association, commutation, and idempotency
+ if (Op0LHS == Op1LHS && Op0RHS == Op1RHS)
+ return getFCmpValue(getFCmpCode(Op0CC) & getFCmpCode(Op1CC), Op0LHS, Op0RHS,
+ Builder);
+
if (LHS->getPredicate() == FCmpInst::FCMP_ORD &&
RHS->getPredicate() == FCmpInst::FCMP_ORD) {
if (LHS->getOperand(0)->getType() != RHS->getOperand(0)->getType())
return nullptr;
}
- Value *Op0LHS = LHS->getOperand(0), *Op0RHS = LHS->getOperand(1);
- Value *Op1LHS = RHS->getOperand(0), *Op1RHS = RHS->getOperand(1);
- FCmpInst::Predicate Op0CC = LHS->getPredicate(), Op1CC = RHS->getPredicate();
-
-
- if (Op0LHS == Op1RHS && Op0RHS == Op1LHS) {
- // Swap RHS operands to match LHS.
- Op1CC = FCmpInst::getSwappedPredicate(Op1CC);
- std::swap(Op1LHS, Op1RHS);
- }
-
- if (Op0LHS == Op1LHS && Op0RHS == Op1RHS) {
- // Simplify (fcmp cc0 x, y) & (fcmp cc1 x, y).
- if (Op0CC == Op1CC)
- return Builder->CreateFCmp((FCmpInst::Predicate)Op0CC, Op0LHS, Op0RHS);
- if (Op0CC == FCmpInst::FCMP_FALSE || Op1CC == FCmpInst::FCMP_FALSE)
- return ConstantInt::get(CmpInst::makeCmpResultType(LHS->getType()), 0);
- if (Op0CC == FCmpInst::FCMP_TRUE)
- return Builder->CreateFCmp(Op1CC, Op0LHS, Op0RHS);
- if (Op1CC == FCmpInst::FCMP_TRUE)
- return Builder->CreateFCmp(Op0CC, Op0LHS, Op0RHS);
-
- bool Op0Ordered;
- bool Op1Ordered;
- unsigned Op0Pred = getFCmpCode(Op0CC, Op0Ordered);
- unsigned Op1Pred = getFCmpCode(Op1CC, Op1Ordered);
- // uno && ord -> false
- if (Op0Pred == 0 && Op1Pred == 0 && Op0Ordered != Op1Ordered)
- return ConstantInt::get(CmpInst::makeCmpResultType(LHS->getType()), 0);
- if (Op1Pred == 0) {
- std::swap(LHS, RHS);
- std::swap(Op0Pred, Op1Pred);
- std::swap(Op0Ordered, Op1Ordered);
- }
- if (Op0Pred == 0) {
- // uno && ueq -> uno && (uno || eq) -> uno
- // ord && olt -> ord && (ord && lt) -> olt
- if (!Op0Ordered && (Op0Ordered == Op1Ordered))
- return Builder->CreateFCmp(Op0CC, Op0LHS, Op0RHS);
- if (Op0Ordered && (Op0Ordered == Op1Ordered))
- return Builder->CreateFCmp(Op1CC, Op0LHS, Op0RHS);
-
- // uno && oeq -> uno && (ord && eq) -> false
- if (!Op0Ordered)
- return ConstantInt::get(CmpInst::makeCmpResultType(LHS->getType()), 0);
- // ord && ueq -> ord && (uno || eq) -> oeq
- return getFCmpValue(true, Op1Pred, Op0LHS, Op0RHS, Builder);
- }
- }
-
return nullptr;
}
/// Optimize (fcmp)|(fcmp). NOTE: Unlike the rest of instcombine, this returns
/// a Value which should already be inserted into the function.
Value *InstCombiner::FoldOrOfFCmps(FCmpInst *LHS, FCmpInst *RHS) {
+ Value *Op0LHS = LHS->getOperand(0), *Op0RHS = LHS->getOperand(1);
+ Value *Op1LHS = RHS->getOperand(0), *Op1RHS = RHS->getOperand(1);
+ FCmpInst::Predicate Op0CC = LHS->getPredicate(), Op1CC = RHS->getPredicate();
+
+ if (Op0LHS == Op1RHS && Op0RHS == Op1LHS) {
+ // Swap RHS operands to match LHS.
+ Op1CC = FCmpInst::getSwappedPredicate(Op1CC);
+ std::swap(Op1LHS, Op1RHS);
+ }
+
+ // Simplify (fcmp cc0 x, y) | (fcmp cc1 x, y).
+ // This is a similar transformation to the one in FoldAndOfFCmps.
+ //
+ // Since (R & CC0) and (R & CC1) are either R or 0, we actually have this:
+ // bool(R & CC0) || bool(R & CC1)
+ // = bool((R & CC0) | (R & CC1))
+ // = bool(R & (CC0 | CC1)) <= by reversed distribution (contribution? ;)
+ if (Op0LHS == Op1LHS && Op0RHS == Op1RHS)
+ return getFCmpValue(getFCmpCode(Op0CC) | getFCmpCode(Op1CC), Op0LHS, Op0RHS,
+ Builder);
+
if (LHS->getPredicate() == FCmpInst::FCMP_UNO &&
RHS->getPredicate() == FCmpInst::FCMP_UNO &&
LHS->getOperand(0)->getType() == RHS->getOperand(0)->getType()) {
return nullptr;
}
- Value *Op0LHS = LHS->getOperand(0), *Op0RHS = LHS->getOperand(1);
- Value *Op1LHS = RHS->getOperand(0), *Op1RHS = RHS->getOperand(1);
- FCmpInst::Predicate Op0CC = LHS->getPredicate(), Op1CC = RHS->getPredicate();
-
- if (Op0LHS == Op1RHS && Op0RHS == Op1LHS) {
- // Swap RHS operands to match LHS.
- Op1CC = FCmpInst::getSwappedPredicate(Op1CC);
- std::swap(Op1LHS, Op1RHS);
- }
- if (Op0LHS == Op1LHS && Op0RHS == Op1RHS) {
- // Simplify (fcmp cc0 x, y) | (fcmp cc1 x, y).
- if (Op0CC == Op1CC)
- return Builder->CreateFCmp((FCmpInst::Predicate)Op0CC, Op0LHS, Op0RHS);
- if (Op0CC == FCmpInst::FCMP_TRUE || Op1CC == FCmpInst::FCMP_TRUE)
- return ConstantInt::get(CmpInst::makeCmpResultType(LHS->getType()), 1);
- if (Op0CC == FCmpInst::FCMP_FALSE)
- return Builder->CreateFCmp(Op1CC, Op0LHS, Op0RHS);
- if (Op1CC == FCmpInst::FCMP_FALSE)
- return Builder->CreateFCmp(Op0CC, Op0LHS, Op0RHS);
- bool Op0Ordered;
- bool Op1Ordered;
- unsigned Op0Pred = getFCmpCode(Op0CC, Op0Ordered);
- unsigned Op1Pred = getFCmpCode(Op1CC, Op1Ordered);
- if (Op0Ordered == Op1Ordered) {
- // If both are ordered or unordered, return a new fcmp with
- // or'ed predicates.
- return getFCmpValue(Op0Ordered, Op0Pred|Op1Pred, Op0LHS, Op0RHS, Builder);
- }
- }
return nullptr;
}
define i1 @auto_gen_4(double %a, double %b) {
; CHECK-LABEL: @auto_gen_4(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ogt double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp oeq double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: ret i1 false
;
%cmp = fcmp ogt double %a, %b
%cmp1 = fcmp oeq double %a, %b
define i1 @auto_gen_7(double %a, double %b) {
; CHECK-LABEL: @auto_gen_7(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp oge double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp oeq double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp oeq double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp oge double %a, %b
%cmp1 = fcmp oeq double %a, %b
define i1 @auto_gen_8(double %a, double %b) {
; CHECK-LABEL: @auto_gen_8(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp oge double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp ogt double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp ogt double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp oge double %a, %b
%cmp1 = fcmp ogt double %a, %b
define i1 @auto_gen_11(double %a, double %b) {
; CHECK-LABEL: @auto_gen_11(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp olt double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp oeq double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: ret i1 false
;
%cmp = fcmp olt double %a, %b
%cmp1 = fcmp oeq double %a, %b
define i1 @auto_gen_12(double %a, double %b) {
; CHECK-LABEL: @auto_gen_12(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp olt double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp ogt double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: ret i1 false
;
%cmp = fcmp olt double %a, %b
%cmp1 = fcmp ogt double %a, %b
define i1 @auto_gen_13(double %a, double %b) {
; CHECK-LABEL: @auto_gen_13(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp olt double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp oge double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: ret i1 false
;
%cmp = fcmp olt double %a, %b
%cmp1 = fcmp oge double %a, %b
define i1 @auto_gen_16(double %a, double %b) {
; CHECK-LABEL: @auto_gen_16(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ole double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp oeq double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp oeq double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp ole double %a, %b
%cmp1 = fcmp oeq double %a, %b
define i1 @auto_gen_17(double %a, double %b) {
; CHECK-LABEL: @auto_gen_17(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ole double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp ogt double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: ret i1 false
;
%cmp = fcmp ole double %a, %b
%cmp1 = fcmp ogt double %a, %b
define i1 @auto_gen_18(double %a, double %b) {
; CHECK-LABEL: @auto_gen_18(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ole double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp oge double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp oeq double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp ole double %a, %b
%cmp1 = fcmp oge double %a, %b
define i1 @auto_gen_19(double %a, double %b) {
; CHECK-LABEL: @auto_gen_19(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ole double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp olt double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp olt double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp ole double %a, %b
%cmp1 = fcmp olt double %a, %b
define i1 @auto_gen_22(double %a, double %b) {
; CHECK-LABEL: @auto_gen_22(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp one double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp oeq double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: ret i1 false
;
%cmp = fcmp one double %a, %b
%cmp1 = fcmp oeq double %a, %b
define i1 @auto_gen_23(double %a, double %b) {
; CHECK-LABEL: @auto_gen_23(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp one double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp ogt double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp ogt double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp one double %a, %b
%cmp1 = fcmp ogt double %a, %b
define i1 @auto_gen_24(double %a, double %b) {
; CHECK-LABEL: @auto_gen_24(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp one double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp oge double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp ogt double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp one double %a, %b
%cmp1 = fcmp oge double %a, %b
define i1 @auto_gen_25(double %a, double %b) {
; CHECK-LABEL: @auto_gen_25(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp one double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp olt double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp olt double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp one double %a, %b
%cmp1 = fcmp olt double %a, %b
define i1 @auto_gen_26(double %a, double %b) {
; CHECK-LABEL: @auto_gen_26(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp one double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp ole double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp olt double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp one double %a, %b
%cmp1 = fcmp ole double %a, %b
define i1 @auto_gen_35(double %a, double %b) {
; CHECK-LABEL: @auto_gen_35(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ord double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp ord double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp ord double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp ord double %a, %b
%cmp1 = fcmp ord double %a, %b
define i1 @auto_gen_37(double %a, double %b) {
; CHECK-LABEL: @auto_gen_37(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ueq double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp oeq double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp oeq double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp ueq double %a, %b
%cmp1 = fcmp oeq double %a, %b
define i1 @auto_gen_38(double %a, double %b) {
; CHECK-LABEL: @auto_gen_38(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ueq double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp ogt double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: ret i1 false
;
%cmp = fcmp ueq double %a, %b
%cmp1 = fcmp ogt double %a, %b
define i1 @auto_gen_39(double %a, double %b) {
; CHECK-LABEL: @auto_gen_39(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ueq double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp oge double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp oeq double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp ueq double %a, %b
%cmp1 = fcmp oge double %a, %b
define i1 @auto_gen_40(double %a, double %b) {
; CHECK-LABEL: @auto_gen_40(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ueq double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp olt double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: ret i1 false
;
%cmp = fcmp ueq double %a, %b
%cmp1 = fcmp olt double %a, %b
define i1 @auto_gen_41(double %a, double %b) {
; CHECK-LABEL: @auto_gen_41(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ueq double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp ole double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp oeq double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp ueq double %a, %b
%cmp1 = fcmp ole double %a, %b
define i1 @auto_gen_42(double %a, double %b) {
; CHECK-LABEL: @auto_gen_42(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ueq double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp one double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: ret i1 false
;
%cmp = fcmp ueq double %a, %b
%cmp1 = fcmp one double %a, %b
define i1 @auto_gen_46(double %a, double %b) {
; CHECK-LABEL: @auto_gen_46(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ugt double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp oeq double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: ret i1 false
;
%cmp = fcmp ugt double %a, %b
%cmp1 = fcmp oeq double %a, %b
define i1 @auto_gen_47(double %a, double %b) {
; CHECK-LABEL: @auto_gen_47(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ugt double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp ogt double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp ogt double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp ugt double %a, %b
%cmp1 = fcmp ogt double %a, %b
define i1 @auto_gen_48(double %a, double %b) {
; CHECK-LABEL: @auto_gen_48(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ugt double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp oge double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp ogt double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp ugt double %a, %b
%cmp1 = fcmp oge double %a, %b
define i1 @auto_gen_49(double %a, double %b) {
; CHECK-LABEL: @auto_gen_49(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ugt double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp olt double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: ret i1 false
;
%cmp = fcmp ugt double %a, %b
%cmp1 = fcmp olt double %a, %b
define i1 @auto_gen_50(double %a, double %b) {
; CHECK-LABEL: @auto_gen_50(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ugt double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp ole double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: ret i1 false
;
%cmp = fcmp ugt double %a, %b
%cmp1 = fcmp ole double %a, %b
define i1 @auto_gen_51(double %a, double %b) {
; CHECK-LABEL: @auto_gen_51(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ugt double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp one double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp ogt double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp ugt double %a, %b
%cmp1 = fcmp one double %a, %b
define i1 @auto_gen_53(double %a, double %b) {
; CHECK-LABEL: @auto_gen_53(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ugt double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp ueq double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp uno double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp ugt double %a, %b
%cmp1 = fcmp ueq double %a, %b
define i1 @auto_gen_56(double %a, double %b) {
; CHECK-LABEL: @auto_gen_56(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp uge double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp oeq double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp oeq double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp uge double %a, %b
%cmp1 = fcmp oeq double %a, %b
define i1 @auto_gen_57(double %a, double %b) {
; CHECK-LABEL: @auto_gen_57(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp uge double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp ogt double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp ogt double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp uge double %a, %b
%cmp1 = fcmp ogt double %a, %b
define i1 @auto_gen_58(double %a, double %b) {
; CHECK-LABEL: @auto_gen_58(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp uge double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp oge double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp oge double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp uge double %a, %b
%cmp1 = fcmp oge double %a, %b
define i1 @auto_gen_59(double %a, double %b) {
; CHECK-LABEL: @auto_gen_59(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp uge double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp olt double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: ret i1 false
;
%cmp = fcmp uge double %a, %b
%cmp1 = fcmp olt double %a, %b
define i1 @auto_gen_60(double %a, double %b) {
; CHECK-LABEL: @auto_gen_60(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp uge double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp ole double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp oeq double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp uge double %a, %b
%cmp1 = fcmp ole double %a, %b
define i1 @auto_gen_61(double %a, double %b) {
; CHECK-LABEL: @auto_gen_61(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp uge double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp one double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp ogt double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp uge double %a, %b
%cmp1 = fcmp one double %a, %b
define i1 @auto_gen_63(double %a, double %b) {
; CHECK-LABEL: @auto_gen_63(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp uge double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp ueq double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp ueq double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp uge double %a, %b
%cmp1 = fcmp ueq double %a, %b
define i1 @auto_gen_64(double %a, double %b) {
; CHECK-LABEL: @auto_gen_64(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp uge double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp ugt double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp ugt double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp uge double %a, %b
%cmp1 = fcmp ugt double %a, %b
define i1 @auto_gen_67(double %a, double %b) {
; CHECK-LABEL: @auto_gen_67(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ult double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp oeq double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: ret i1 false
;
%cmp = fcmp ult double %a, %b
%cmp1 = fcmp oeq double %a, %b
define i1 @auto_gen_68(double %a, double %b) {
; CHECK-LABEL: @auto_gen_68(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ult double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp ogt double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: ret i1 false
;
%cmp = fcmp ult double %a, %b
%cmp1 = fcmp ogt double %a, %b
define i1 @auto_gen_69(double %a, double %b) {
; CHECK-LABEL: @auto_gen_69(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ult double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp oge double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: ret i1 false
;
%cmp = fcmp ult double %a, %b
%cmp1 = fcmp oge double %a, %b
define i1 @auto_gen_70(double %a, double %b) {
; CHECK-LABEL: @auto_gen_70(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ult double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp olt double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp olt double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp ult double %a, %b
%cmp1 = fcmp olt double %a, %b
define i1 @auto_gen_71(double %a, double %b) {
; CHECK-LABEL: @auto_gen_71(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ult double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp ole double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp olt double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp ult double %a, %b
%cmp1 = fcmp ole double %a, %b
define i1 @auto_gen_72(double %a, double %b) {
; CHECK-LABEL: @auto_gen_72(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ult double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp one double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp olt double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp ult double %a, %b
%cmp1 = fcmp one double %a, %b
define i1 @auto_gen_74(double %a, double %b) {
; CHECK-LABEL: @auto_gen_74(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ult double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp ueq double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp uno double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp ult double %a, %b
%cmp1 = fcmp ueq double %a, %b
define i1 @auto_gen_75(double %a, double %b) {
; CHECK-LABEL: @auto_gen_75(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ult double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp ugt double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp uno double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp ult double %a, %b
%cmp1 = fcmp ugt double %a, %b
define i1 @auto_gen_76(double %a, double %b) {
; CHECK-LABEL: @auto_gen_76(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ult double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp uge double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp uno double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp ult double %a, %b
%cmp1 = fcmp uge double %a, %b
define i1 @auto_gen_79(double %a, double %b) {
; CHECK-LABEL: @auto_gen_79(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ule double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp oeq double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp oeq double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp ule double %a, %b
%cmp1 = fcmp oeq double %a, %b
define i1 @auto_gen_80(double %a, double %b) {
; CHECK-LABEL: @auto_gen_80(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ule double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp ogt double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: ret i1 false
;
%cmp = fcmp ule double %a, %b
%cmp1 = fcmp ogt double %a, %b
define i1 @auto_gen_81(double %a, double %b) {
; CHECK-LABEL: @auto_gen_81(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ule double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp oge double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp oeq double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp ule double %a, %b
%cmp1 = fcmp oge double %a, %b
define i1 @auto_gen_82(double %a, double %b) {
; CHECK-LABEL: @auto_gen_82(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ule double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp olt double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp olt double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp ule double %a, %b
%cmp1 = fcmp olt double %a, %b
define i1 @auto_gen_83(double %a, double %b) {
; CHECK-LABEL: @auto_gen_83(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ule double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp ole double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp ole double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp ule double %a, %b
%cmp1 = fcmp ole double %a, %b
define i1 @auto_gen_84(double %a, double %b) {
; CHECK-LABEL: @auto_gen_84(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ule double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp one double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp olt double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp ule double %a, %b
%cmp1 = fcmp one double %a, %b
define i1 @auto_gen_86(double %a, double %b) {
; CHECK-LABEL: @auto_gen_86(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ule double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp ueq double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp ueq double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp ule double %a, %b
%cmp1 = fcmp ueq double %a, %b
define i1 @auto_gen_87(double %a, double %b) {
; CHECK-LABEL: @auto_gen_87(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ule double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp ugt double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp uno double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp ule double %a, %b
%cmp1 = fcmp ugt double %a, %b
define i1 @auto_gen_88(double %a, double %b) {
; CHECK-LABEL: @auto_gen_88(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ule double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp uge double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp ueq double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp ule double %a, %b
%cmp1 = fcmp uge double %a, %b
define i1 @auto_gen_89(double %a, double %b) {
; CHECK-LABEL: @auto_gen_89(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ule double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp ult double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp ult double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp ule double %a, %b
%cmp1 = fcmp ult double %a, %b
define i1 @auto_gen_92(double %a, double %b) {
; CHECK-LABEL: @auto_gen_92(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp une double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp oeq double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: ret i1 false
;
%cmp = fcmp une double %a, %b
%cmp1 = fcmp oeq double %a, %b
define i1 @auto_gen_93(double %a, double %b) {
; CHECK-LABEL: @auto_gen_93(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp une double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp ogt double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp ogt double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp une double %a, %b
%cmp1 = fcmp ogt double %a, %b
define i1 @auto_gen_94(double %a, double %b) {
; CHECK-LABEL: @auto_gen_94(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp une double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp oge double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp ogt double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp une double %a, %b
%cmp1 = fcmp oge double %a, %b
define i1 @auto_gen_95(double %a, double %b) {
; CHECK-LABEL: @auto_gen_95(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp une double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp olt double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp olt double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp une double %a, %b
%cmp1 = fcmp olt double %a, %b
define i1 @auto_gen_96(double %a, double %b) {
; CHECK-LABEL: @auto_gen_96(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp une double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp ole double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp olt double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp une double %a, %b
%cmp1 = fcmp ole double %a, %b
define i1 @auto_gen_97(double %a, double %b) {
; CHECK-LABEL: @auto_gen_97(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp une double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp one double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp one double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp une double %a, %b
%cmp1 = fcmp one double %a, %b
define i1 @auto_gen_99(double %a, double %b) {
; CHECK-LABEL: @auto_gen_99(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp une double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp ueq double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp uno double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp une double %a, %b
%cmp1 = fcmp ueq double %a, %b
define i1 @auto_gen_100(double %a, double %b) {
; CHECK-LABEL: @auto_gen_100(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp une double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp ugt double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp ugt double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp une double %a, %b
%cmp1 = fcmp ugt double %a, %b
define i1 @auto_gen_101(double %a, double %b) {
; CHECK-LABEL: @auto_gen_101(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp une double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp uge double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp ugt double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp une double %a, %b
%cmp1 = fcmp uge double %a, %b
define i1 @auto_gen_102(double %a, double %b) {
; CHECK-LABEL: @auto_gen_102(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp une double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp ult double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp ult double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp une double %a, %b
%cmp1 = fcmp ult double %a, %b
define i1 @auto_gen_103(double %a, double %b) {
; CHECK-LABEL: @auto_gen_103(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp une double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp ule double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = and i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp ult double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp une double %a, %b
%cmp1 = fcmp ule double %a, %b
ret i1 %retval
}
-; FIXME: this test, along with the several following ones,
-; is wrong and will be fixed shortly.
define i1 @auto_gen_29(double %a, double %b) {
; CHECK-LABEL: @auto_gen_29(
-; CHECK-NEXT: [[TMP1:%.*]] = fcmp oeq double %a, %b
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp ord double %a, %b
; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp ord double %a, %b
define i1 @auto_gen_30(double %a, double %b) {
; CHECK-LABEL: @auto_gen_30(
-; CHECK-NEXT: [[TMP1:%.*]] = fcmp ogt double %a, %b
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp ord double %a, %b
; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp ord double %a, %b
define i1 @auto_gen_31(double %a, double %b) {
; CHECK-LABEL: @auto_gen_31(
-; CHECK-NEXT: [[TMP1:%.*]] = fcmp oge double %a, %b
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp ord double %a, %b
; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp ord double %a, %b
define i1 @auto_gen_32(double %a, double %b) {
; CHECK-LABEL: @auto_gen_32(
-; CHECK-NEXT: [[TMP1:%.*]] = fcmp olt double %a, %b
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp ord double %a, %b
; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp ord double %a, %b
define i1 @auto_gen_33(double %a, double %b) {
; CHECK-LABEL: @auto_gen_33(
-; CHECK-NEXT: [[TMP1:%.*]] = fcmp ole double %a, %b
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp ord double %a, %b
; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp ord double %a, %b
define i1 @auto_gen_34(double %a, double %b) {
; CHECK-LABEL: @auto_gen_34(
-; CHECK-NEXT: [[TMP1:%.*]] = fcmp one double %a, %b
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp ord double %a, %b
; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp ord double %a, %b
define i1 @auto_gen_37(double %a, double %b) {
; CHECK-LABEL: @auto_gen_37(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ueq double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp oeq double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = or i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp ueq double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp ueq double %a, %b
%cmp1 = fcmp oeq double %a, %b
define i1 @auto_gen_38(double %a, double %b) {
; CHECK-LABEL: @auto_gen_38(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ueq double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp ogt double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = or i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp uge double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp ueq double %a, %b
%cmp1 = fcmp ogt double %a, %b
define i1 @auto_gen_39(double %a, double %b) {
; CHECK-LABEL: @auto_gen_39(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ueq double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp oge double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = or i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp uge double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp ueq double %a, %b
%cmp1 = fcmp oge double %a, %b
define i1 @auto_gen_40(double %a, double %b) {
; CHECK-LABEL: @auto_gen_40(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ueq double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp olt double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = or i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp ule double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp ueq double %a, %b
%cmp1 = fcmp olt double %a, %b
define i1 @auto_gen_41(double %a, double %b) {
; CHECK-LABEL: @auto_gen_41(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ueq double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp ole double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = or i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp ule double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp ueq double %a, %b
%cmp1 = fcmp ole double %a, %b
define i1 @auto_gen_42(double %a, double %b) {
; CHECK-LABEL: @auto_gen_42(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ueq double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp one double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = or i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: ret i1 true
;
%cmp = fcmp ueq double %a, %b
%cmp1 = fcmp one double %a, %b
define i1 @auto_gen_43(double %a, double %b) {
; CHECK-LABEL: @auto_gen_43(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ueq double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp ord double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = or i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: ret i1 true
;
%cmp = fcmp ueq double %a, %b
%cmp1 = fcmp ord double %a, %b
define i1 @auto_gen_46(double %a, double %b) {
; CHECK-LABEL: @auto_gen_46(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ugt double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp oeq double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = or i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp uge double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp ugt double %a, %b
%cmp1 = fcmp oeq double %a, %b
define i1 @auto_gen_47(double %a, double %b) {
; CHECK-LABEL: @auto_gen_47(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ugt double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp ogt double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = or i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp ugt double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp ugt double %a, %b
%cmp1 = fcmp ogt double %a, %b
define i1 @auto_gen_48(double %a, double %b) {
; CHECK-LABEL: @auto_gen_48(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ugt double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp oge double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = or i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp uge double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp ugt double %a, %b
%cmp1 = fcmp oge double %a, %b
define i1 @auto_gen_49(double %a, double %b) {
; CHECK-LABEL: @auto_gen_49(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ugt double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp olt double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = or i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp une double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp ugt double %a, %b
%cmp1 = fcmp olt double %a, %b
define i1 @auto_gen_50(double %a, double %b) {
; CHECK-LABEL: @auto_gen_50(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ugt double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp ole double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = or i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: ret i1 true
;
%cmp = fcmp ugt double %a, %b
%cmp1 = fcmp ole double %a, %b
define i1 @auto_gen_51(double %a, double %b) {
; CHECK-LABEL: @auto_gen_51(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ugt double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp one double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = or i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp une double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp ugt double %a, %b
%cmp1 = fcmp one double %a, %b
define i1 @auto_gen_52(double %a, double %b) {
; CHECK-LABEL: @auto_gen_52(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ugt double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp ord double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = or i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: ret i1 true
;
%cmp = fcmp ugt double %a, %b
%cmp1 = fcmp ord double %a, %b
define i1 @auto_gen_56(double %a, double %b) {
; CHECK-LABEL: @auto_gen_56(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp uge double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp oeq double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = or i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp uge double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp uge double %a, %b
%cmp1 = fcmp oeq double %a, %b
define i1 @auto_gen_57(double %a, double %b) {
; CHECK-LABEL: @auto_gen_57(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp uge double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp ogt double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = or i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp uge double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp uge double %a, %b
%cmp1 = fcmp ogt double %a, %b
define i1 @auto_gen_58(double %a, double %b) {
; CHECK-LABEL: @auto_gen_58(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp uge double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp oge double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = or i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp uge double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp uge double %a, %b
%cmp1 = fcmp oge double %a, %b
define i1 @auto_gen_59(double %a, double %b) {
; CHECK-LABEL: @auto_gen_59(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp uge double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp olt double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = or i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: ret i1 true
;
%cmp = fcmp uge double %a, %b
%cmp1 = fcmp olt double %a, %b
define i1 @auto_gen_60(double %a, double %b) {
; CHECK-LABEL: @auto_gen_60(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp uge double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp ole double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = or i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: ret i1 true
;
%cmp = fcmp uge double %a, %b
%cmp1 = fcmp ole double %a, %b
define i1 @auto_gen_61(double %a, double %b) {
; CHECK-LABEL: @auto_gen_61(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp uge double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp one double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = or i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: ret i1 true
;
%cmp = fcmp uge double %a, %b
%cmp1 = fcmp one double %a, %b
define i1 @auto_gen_62(double %a, double %b) {
; CHECK-LABEL: @auto_gen_62(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp uge double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp ord double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = or i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: ret i1 true
;
%cmp = fcmp uge double %a, %b
%cmp1 = fcmp ord double %a, %b
define i1 @auto_gen_67(double %a, double %b) {
; CHECK-LABEL: @auto_gen_67(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ult double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp oeq double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = or i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp ule double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp ult double %a, %b
%cmp1 = fcmp oeq double %a, %b
define i1 @auto_gen_68(double %a, double %b) {
; CHECK-LABEL: @auto_gen_68(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ult double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp ogt double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = or i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp une double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp ult double %a, %b
%cmp1 = fcmp ogt double %a, %b
define i1 @auto_gen_69(double %a, double %b) {
; CHECK-LABEL: @auto_gen_69(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ult double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp oge double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = or i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: ret i1 true
;
%cmp = fcmp ult double %a, %b
%cmp1 = fcmp oge double %a, %b
define i1 @auto_gen_70(double %a, double %b) {
; CHECK-LABEL: @auto_gen_70(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ult double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp olt double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = or i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp ult double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp ult double %a, %b
%cmp1 = fcmp olt double %a, %b
define i1 @auto_gen_71(double %a, double %b) {
; CHECK-LABEL: @auto_gen_71(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ult double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp ole double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = or i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp ule double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp ult double %a, %b
%cmp1 = fcmp ole double %a, %b
define i1 @auto_gen_72(double %a, double %b) {
; CHECK-LABEL: @auto_gen_72(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ult double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp one double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = or i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp une double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp ult double %a, %b
%cmp1 = fcmp one double %a, %b
define i1 @auto_gen_73(double %a, double %b) {
; CHECK-LABEL: @auto_gen_73(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ult double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp ord double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = or i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: ret i1 true
;
%cmp = fcmp ult double %a, %b
%cmp1 = fcmp ord double %a, %b
define i1 @auto_gen_79(double %a, double %b) {
; CHECK-LABEL: @auto_gen_79(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ule double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp oeq double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = or i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp ule double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp ule double %a, %b
%cmp1 = fcmp oeq double %a, %b
define i1 @auto_gen_80(double %a, double %b) {
; CHECK-LABEL: @auto_gen_80(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ule double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp ogt double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = or i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: ret i1 true
;
%cmp = fcmp ule double %a, %b
%cmp1 = fcmp ogt double %a, %b
define i1 @auto_gen_81(double %a, double %b) {
; CHECK-LABEL: @auto_gen_81(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ule double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp oge double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = or i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: ret i1 true
;
%cmp = fcmp ule double %a, %b
%cmp1 = fcmp oge double %a, %b
define i1 @auto_gen_82(double %a, double %b) {
; CHECK-LABEL: @auto_gen_82(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ule double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp olt double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = or i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp ule double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp ule double %a, %b
%cmp1 = fcmp olt double %a, %b
define i1 @auto_gen_83(double %a, double %b) {
; CHECK-LABEL: @auto_gen_83(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ule double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp ole double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = or i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp ule double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp ule double %a, %b
%cmp1 = fcmp ole double %a, %b
define i1 @auto_gen_84(double %a, double %b) {
; CHECK-LABEL: @auto_gen_84(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ule double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp one double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = or i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: ret i1 true
;
%cmp = fcmp ule double %a, %b
%cmp1 = fcmp one double %a, %b
define i1 @auto_gen_85(double %a, double %b) {
; CHECK-LABEL: @auto_gen_85(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp ule double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp ord double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = or i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: ret i1 true
;
%cmp = fcmp ule double %a, %b
%cmp1 = fcmp ord double %a, %b
define i1 @auto_gen_92(double %a, double %b) {
; CHECK-LABEL: @auto_gen_92(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp une double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp oeq double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = or i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: ret i1 true
;
%cmp = fcmp une double %a, %b
%cmp1 = fcmp oeq double %a, %b
define i1 @auto_gen_93(double %a, double %b) {
; CHECK-LABEL: @auto_gen_93(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp une double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp ogt double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = or i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp une double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp une double %a, %b
%cmp1 = fcmp ogt double %a, %b
define i1 @auto_gen_94(double %a, double %b) {
; CHECK-LABEL: @auto_gen_94(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp une double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp oge double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = or i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: ret i1 true
;
%cmp = fcmp une double %a, %b
%cmp1 = fcmp oge double %a, %b
define i1 @auto_gen_95(double %a, double %b) {
; CHECK-LABEL: @auto_gen_95(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp une double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp olt double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = or i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp une double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp une double %a, %b
%cmp1 = fcmp olt double %a, %b
define i1 @auto_gen_96(double %a, double %b) {
; CHECK-LABEL: @auto_gen_96(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp une double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp ole double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = or i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: ret i1 true
;
%cmp = fcmp une double %a, %b
%cmp1 = fcmp ole double %a, %b
define i1 @auto_gen_97(double %a, double %b) {
; CHECK-LABEL: @auto_gen_97(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp une double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp one double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = or i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp une double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp une double %a, %b
%cmp1 = fcmp one double %a, %b
define i1 @auto_gen_98(double %a, double %b) {
; CHECK-LABEL: @auto_gen_98(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp une double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp ord double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = or i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: ret i1 true
;
%cmp = fcmp une double %a, %b
%cmp1 = fcmp ord double %a, %b
define i1 @auto_gen_106(double %a, double %b) {
; CHECK-LABEL: @auto_gen_106(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp uno double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp oeq double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = or i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp ueq double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp uno double %a, %b
%cmp1 = fcmp oeq double %a, %b
define i1 @auto_gen_107(double %a, double %b) {
; CHECK-LABEL: @auto_gen_107(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp uno double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp ogt double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = or i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp ugt double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp uno double %a, %b
%cmp1 = fcmp ogt double %a, %b
define i1 @auto_gen_108(double %a, double %b) {
; CHECK-LABEL: @auto_gen_108(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp uno double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp oge double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = or i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp uge double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp uno double %a, %b
%cmp1 = fcmp oge double %a, %b
define i1 @auto_gen_109(double %a, double %b) {
; CHECK-LABEL: @auto_gen_109(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp uno double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp olt double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = or i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp ult double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp uno double %a, %b
%cmp1 = fcmp olt double %a, %b
define i1 @auto_gen_110(double %a, double %b) {
; CHECK-LABEL: @auto_gen_110(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp uno double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp ole double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = or i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp ule double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp uno double %a, %b
%cmp1 = fcmp ole double %a, %b
define i1 @auto_gen_111(double %a, double %b) {
; CHECK-LABEL: @auto_gen_111(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp uno double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp one double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = or i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp une double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp uno double %a, %b
%cmp1 = fcmp one double %a, %b
define i1 @auto_gen_112(double %a, double %b) {
; CHECK-LABEL: @auto_gen_112(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp uno double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp ord double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = or i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: ret i1 true
;
%cmp = fcmp uno double %a, %b
%cmp1 = fcmp ord double %a, %b
define i1 @auto_gen_119(double %a, double %b) {
; CHECK-LABEL: @auto_gen_119(
-; CHECK-NEXT: [[CMP:%.*]] = fcmp uno double %a, %b
-; CHECK-NEXT: [[CMP1:%.*]] = fcmp uno double %a, %b
-; CHECK-NEXT: [[RETVAL:%.*]] = or i1 [[CMP]], [[CMP1]]
-; CHECK-NEXT: ret i1 [[RETVAL]]
+; CHECK-NEXT: [[TMP1:%.*]] = fcmp uno double %a, %b
+; CHECK-NEXT: ret i1 [[TMP1]]
;
%cmp = fcmp uno double %a, %b
%cmp1 = fcmp uno double %a, %b