X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=include%2Fllvm%2FiOperators.h;h=a211a68a15b11f582ce53057ce959c50a5efddb4;hb=9fff7e194a2d8aa3abe92efa506b1fbe83583f53;hp=ba64b0faec1ffffd74b13153d2d79627cb399aa2;hpb=9c16dba29f2b8d894683b398802d590685e6f7a1;p=oota-llvm.git diff --git a/include/llvm/iOperators.h b/include/llvm/iOperators.h index ba64b0faec1..a211a68a15b 100644 --- a/include/llvm/iOperators.h +++ b/include/llvm/iOperators.h @@ -1,34 +1,59 @@ -//===-- llvm/iBinary.h - Binary Operator node definitions --------*- C++ -*--=// +//===-- llvm/iOperators.h - Binary Operator node definitions ----*- C++ -*-===// // -// This file contains the declarations of all of the Binary Operator classes. +// This file contains the declarations of the Binary Operator classes. // //===----------------------------------------------------------------------===// -#ifndef LLVM_IBINARY_H -#define LLVM_IBINARY_H +#ifndef LLVM_IOPERATORS_H +#define LLVM_IOPERATORS_H #include "llvm/InstrTypes.h" -//===----------------------------------------------------------------------===// -// Classes to represent Binary operators -//===----------------------------------------------------------------------===// -// -// All of these classes are subclasses of the BinaryOperator class... -// - -class GenericBinaryInst : public BinaryOperator { -public: - GenericBinaryInst(BinaryOps Opcode, Value *S1, Value *S2, - const std::string &Name = "") - : BinaryOperator(Opcode, S1, S2, Name) { - } -}; - +/// SetCondInst class - Represent a setCC operator, where CC is eq, ne, lt, gt, +/// le, or ge. +/// class SetCondInst : public BinaryOperator { BinaryOps OpType; public: - SetCondInst(BinaryOps opType, Value *S1, Value *S2, - const std::string &Name = ""); + SetCondInst(BinaryOps Opcode, Value *LHS, Value *RHS, + const std::string &Name = "", Instruction *InsertBefore = 0); + + /// getInverseCondition - Return the inverse of the current condition opcode. + /// For example seteq -> setne, setgt -> setle, setlt -> setge, etc... + /// + BinaryOps getInverseCondition() const { + return getInverseCondition(getOpcode()); + } + + /// getInverseCondition - Static version that you can use without an + /// instruction available. + /// + static BinaryOps getInverseCondition(BinaryOps Opcode); + + /// getSwappedCondition - Return the condition opcode that would be the result + /// of exchanging the two operands of the setcc instruction without changing + /// the result produced. Thus, seteq->seteq, setle->setge, setlt->setgt, etc. + /// + BinaryOps getSwappedCondition() const { + return getSwappedCondition(getOpcode()); + } + + /// getSwappedCondition - Static version that you can use without an + /// instruction available. + /// + static BinaryOps getSwappedCondition(BinaryOps Opcode); + + + // Methods for support type inquiry through isa, cast, and dyn_cast: + static inline bool classof(const SetCondInst *) { return true; } + static inline bool classof(const Instruction *I) { + return I->getOpcode() == SetEQ || I->getOpcode() == SetNE || + I->getOpcode() == SetLE || I->getOpcode() == SetGE || + I->getOpcode() == SetLT || I->getOpcode() == SetGT; + } + static inline bool classof(const Value *V) { + return isa(V) && classof(cast(V)); + } }; #endif