From: Chris Lattner Date: Sun, 17 Sep 2006 19:29:56 +0000 (+0000) Subject: Add ShiftInst::isLogical/ArithmeticShift methods. X-Git-Url: http://demsky.eecs.uci.edu/git/?a=commitdiff_plain;h=2f463865c2f03b8835e35d3499fcd95eed922bc6;p=oota-llvm.git Add ShiftInst::isLogical/ArithmeticShift methods. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@30445 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/llvm/InstrTypes.h b/include/llvm/InstrTypes.h index 095adcb3da4..7ce43007311 100644 --- a/include/llvm/InstrTypes.h +++ b/include/llvm/InstrTypes.h @@ -207,16 +207,16 @@ public: /// isNeg, isNot - Check if the given Value is a NEG or NOT instruction. /// - static bool isNeg(const Value *V); - static bool isNot(const Value *V); + static bool isNeg(const Value *V); + static bool isNot(const Value *V); /// getNegArgument, getNotArgument - Helper functions to extract the /// unary argument of a NEG or NOT operation implemented via Sub or Xor. /// - static const Value* getNegArgument(const Value *BinOp); - static Value* getNegArgument( Value *BinOp); - static const Value* getNotArgument(const Value *BinOp); - static Value* getNotArgument( Value *BinOp); + static const Value *getNegArgument(const Value *BinOp); + static Value *getNegArgument( Value *BinOp); + static const Value *getNotArgument(const Value *BinOp); + static Value *getNotArgument( Value *BinOp); BinaryOps getOpcode() const { return static_cast(Instruction::getOpcode()); diff --git a/include/llvm/Instructions.h b/include/llvm/Instructions.h index ed407acfb76..d7e52d1d6aa 100644 --- a/include/llvm/Instructions.h +++ b/include/llvm/Instructions.h @@ -16,7 +16,6 @@ #ifndef LLVM_INSTRUCTIONS_H #define LLVM_INSTRUCTIONS_H -#include "llvm/Instruction.h" #include "llvm/InstrTypes.h" namespace llvm { @@ -633,6 +632,17 @@ public: } unsigned getNumOperands() const { return 2; } + /// isLogicalShift - Return true if this is a logical shift left or a logical + /// shift right. + bool isLogicalShift() const; + + /// isArithmeticShift - Return true if this is a sign-extending shift right + /// operation. + bool isArithmeticShift() const { + return !isLogicalShift(); + } + + virtual ShiftInst *clone() const; // Methods for support type inquiry through isa, cast, and dyn_cast: diff --git a/lib/VMCore/Instructions.cpp b/lib/VMCore/Instructions.cpp index c6730e14c5c..393858cd871 100644 --- a/lib/VMCore/Instructions.cpp +++ b/lib/VMCore/Instructions.cpp @@ -1141,6 +1141,17 @@ bool BinaryOperator::swapOperands() { } +//===----------------------------------------------------------------------===// +// ShiftInst Class +//===----------------------------------------------------------------------===// + +/// isLogicalShift - Return true if this is a logical shift left or a logical +/// shift right. +bool ShiftInst::isLogicalShift() const { + return getOpcode() == Instruction::Shl || getType()->isUnsigned(); +} + + //===----------------------------------------------------------------------===// // SetCondInst Class //===----------------------------------------------------------------------===//