Changes in directory llvm/include/llvm:
Constants.h updated: 1.93 -> 1.94 Instruction.def updated: 1.21 -> 1.22 Instructions.h updated: 1.44 -> 1.45 --- Log message: For PR950: http://llvm.org/PR950 : This patch converts the old SHR instruction into two instructions, AShr (Arithmetic) and LShr (Logical). The Shr instructions now are not dependent on the sign of their operands. --- Diffs of the changes: (+24 -19) Constants.h | 6 ++---- Instruction.def | 25 +++++++++++++------------ Instructions.h | 12 +++++++++--- 3 files changed, 24 insertions(+), 19 deletions(-) Index: llvm/include/llvm/Constants.h diff -u llvm/include/llvm/Constants.h:1.93 llvm/include/llvm/Constants.h:1.94 --- llvm/include/llvm/Constants.h:1.93 Wed Nov 1 19:53:58 2006 +++ llvm/include/llvm/Constants.h Wed Nov 8 00:47:32 2006 @@ -564,10 +564,8 @@ static Constant *getSetLE(Constant *C1, Constant *C2); static Constant *getSetGE(Constant *C1, Constant *C2); static Constant *getShl(Constant *C1, Constant *C2); - static Constant *getShr(Constant *C1, Constant *C2); - - static Constant *getUShr(Constant *C1, Constant *C2); // unsigned shr - static Constant *getSShr(Constant *C1, Constant *C2); // signed shr + static Constant *getLShr(Constant *C1, Constant *C2); + static Constant *getAShr(Constant *C1, Constant *C2); /// Getelementptr form. std::vector<Value*> is only accepted for convenience: /// all elements must be Constant's. Index: llvm/include/llvm/Instruction.def diff -u llvm/include/llvm/Instruction.def:1.21 llvm/include/llvm/Instruction.def:1.22 --- llvm/include/llvm/Instruction.def:1.21 Wed Nov 1 19:53:58 2006 +++ llvm/include/llvm/Instruction.def Wed Nov 8 00:47:32 2006 @@ -15,8 +15,8 @@ // NOTE: NO INCLUDE GUARD DESIRED! -// Provide definitions of macros so that users of this file do not have to define -// everything to use it... +// Provide definitions of macros so that users of this file do not have to +// define everything to use it... // #ifndef FIRST_TERM_INST #define FIRST_TERM_INST(num) @@ -129,16 +129,17 @@ HANDLE_OTHER_INST(31, PHI , PHINode ) // PHI node instruction HANDLE_OTHER_INST(32, Cast , CastInst ) // Type cast HANDLE_OTHER_INST(33, Call , CallInst ) // Call a function -HANDLE_OTHER_INST(34, Shl , ShiftInst ) // Shift operations -HANDLE_OTHER_INST(35, Shr , ShiftInst ) -HANDLE_OTHER_INST(36, Select , SelectInst ) // select instruction -HANDLE_OTHER_INST(37, UserOp1, Instruction) // May be used internally in a pass -HANDLE_OTHER_INST(38, UserOp2, Instruction) -HANDLE_OTHER_INST(39, VAArg , VAArgInst ) // vaarg instruction -HANDLE_OTHER_INST(40, ExtractElement, ExtractElementInst)// extract from vector. -HANDLE_OTHER_INST(41, InsertElement, InsertElementInst) // insert into vector -HANDLE_OTHER_INST(42, ShuffleVector, ShuffleVectorInst) // shuffle two vectors. - LAST_OTHER_INST(42) +HANDLE_OTHER_INST(34, Shl , ShiftInst ) // Shift Left operations (logical) +HANDLE_OTHER_INST(35, LShr , ShiftInst ) // Logical Shift right (unsigned) +HANDLE_OTHER_INST(36, AShr , ShiftInst ) // Arithmetic shift right (signed) +HANDLE_OTHER_INST(37, Select , SelectInst ) // select instruction +HANDLE_OTHER_INST(38, UserOp1, Instruction) // May be used internally in a pass +HANDLE_OTHER_INST(39, UserOp2, Instruction) // Internal to passes only +HANDLE_OTHER_INST(40, VAArg , VAArgInst ) // vaarg instruction +HANDLE_OTHER_INST(41, ExtractElement, ExtractElementInst)// extract from vector. +HANDLE_OTHER_INST(42, InsertElement, InsertElementInst) // insert into vector +HANDLE_OTHER_INST(43, ShuffleVector, ShuffleVectorInst) // shuffle two vectors. + LAST_OTHER_INST(43) #undef FIRST_TERM_INST #undef HANDLE_TERM_INST Index: llvm/include/llvm/Instructions.h diff -u llvm/include/llvm/Instructions.h:1.44 llvm/include/llvm/Instructions.h:1.45 --- llvm/include/llvm/Instructions.h:1.44 Thu Oct 5 01:24:58 2006 +++ llvm/include/llvm/Instructions.h Wed Nov 8 00:47:32 2006 @@ -604,7 +604,8 @@ Ops[1].init(SI.Ops[1], this); } void init(OtherOps Opcode, Value *S, Value *SA) { - assert((Opcode == Shl || Opcode == Shr) && "ShiftInst Opcode invalid!"); + assert((Opcode == Shl || Opcode == LShr || Opcode == AShr) && + "ShiftInst Opcode invalid!"); Ops[0].init(S, this); Ops[1].init(SA, this); } @@ -638,7 +639,11 @@ /// isLogicalShift - Return true if this is a logical shift left or a logical /// shift right. - bool isLogicalShift() const; + bool isLogicalShift() const { + unsigned opcode = getOpcode(); + return opcode == Instruction::Shl || opcode == Instruction::LShr; + } + /// isArithmeticShift - Return true if this is a sign-extending shift right /// operation. @@ -652,7 +657,8 @@ // Methods for support type inquiry through isa, cast, and dyn_cast: static inline bool classof(const ShiftInst *) { return true; } static inline bool classof(const Instruction *I) { - return (I->getOpcode() == Instruction::Shr) | + return (I->getOpcode() == Instruction::LShr) | + (I->getOpcode() == Instruction::AShr) | (I->getOpcode() == Instruction::Shl); } static inline bool classof(const Value *V) { _______________________________________________ llvm-commits mailing list llvm-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-commits