X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=lib%2FVMCore%2FInstructions.cpp;h=5297374e251db649ba75deb6893a4ef3cffbf160;hb=fe5b4393d40e3a81b09fd1852901688a20e41b6b;hp=4c792a56afb260e8d48bed0f6cbd6795ab8de287;hpb=6b0974cd1d5ab238e8777ede08acaad06e6b5ffa;p=oota-llvm.git diff --git a/lib/VMCore/Instructions.cpp b/lib/VMCore/Instructions.cpp index 4c792a56afb..5297374e251 100644 --- a/lib/VMCore/Instructions.cpp +++ b/lib/VMCore/Instructions.cpp @@ -267,19 +267,21 @@ void CallInst::init(Value *Func) { assert(FTy->getNumParams() == 0 && "Calling a function with bad signature"); } +#if 0 +// Leave for llvm-gcc CallInst::CallInst(Value *Func, Value* const *Args, unsigned NumArgs, const std::string &Name, BasicBlock *InsertAtEnd) : Instruction(cast(cast(Func->getType()) - ->getElementType())->getReturnType(), + ->getElementType())->getReturnType(), Instruction::Call, 0, 0, InsertAtEnd) { init(Func, Args, NumArgs); setName(Name); } CallInst::CallInst(Value *Func, Value* const *Args, unsigned NumArgs, const std::string &Name, Instruction *InsertBefore) -: Instruction(cast(cast(Func->getType()) - ->getElementType())->getReturnType(), - Instruction::Call, 0, 0, InsertBefore) { + : Instruction(cast(cast(Func->getType()) + ->getElementType())->getReturnType(), + Instruction::Call, 0, 0, InsertBefore) { init(Func, Args, NumArgs); setName(Name); } @@ -301,7 +303,7 @@ CallInst::CallInst(Value *Func, Value *Actual1, Value *Actual2, init(Func, Actual1, Actual2); setName(Name); } - +#endif CallInst::CallInst(Value *Func, Value* Actual, const std::string &Name, Instruction *InsertBefore) : Instruction(cast(cast(Func->getType()) @@ -319,7 +321,6 @@ CallInst::CallInst(Value *Func, Value* Actual, const std::string &Name, init(Func, Actual); setName(Name); } - CallInst::CallInst(Value *Func, const std::string &Name, Instruction *InsertBefore) : Instruction(cast(cast(Func->getType()) @@ -740,6 +741,16 @@ LoadInst::LoadInst(Value *Ptr, const std::string &Name, bool isVolatile, setName(Name); } +LoadInst::LoadInst(Value *Ptr, const std::string &Name, bool isVolatile, + unsigned Align, BasicBlock *InsertAE) + : UnaryInstruction(cast(Ptr->getType())->getElementType(), + Load, Ptr, InsertAE) { + setVolatile(isVolatile); + setAlignment(Align); + AssertOK(); + setName(Name); +} + LoadInst::LoadInst(Value *Ptr, const std::string &Name, bool isVolatile, BasicBlock *InsertAE) : UnaryInstruction(cast(Ptr->getType())->getElementType(), @@ -846,6 +857,16 @@ StoreInst::StoreInst(Value *val, Value *addr, bool isVolatile, AssertOK(); } +StoreInst::StoreInst(Value *val, Value *addr, bool isVolatile, + unsigned Align, BasicBlock *InsertAtEnd) + : Instruction(Type::VoidTy, Store, Ops, 2, InsertAtEnd) { + Ops[0].init(val, this); + Ops[1].init(addr, this); + setVolatile(isVolatile); + setAlignment(Align); + AssertOK(); +} + StoreInst::StoreInst(Value *val, Value *addr, bool isVolatile, BasicBlock *InsertAtEnd) : Instruction(Type::VoidTy, Store, Ops, 2, InsertAtEnd) { @@ -1189,7 +1210,7 @@ bool InsertElementInst::isValidOperands(const Value *Vec, const Value *Elt, return false; // First operand of insertelement must be vector type. if (Elt->getType() != cast(Vec->getType())->getElementType()) - return false;// Second operand of insertelement must be packed element type. + return false;// Second operand of insertelement must be vector element type. if (Index->getType() != Type::Int32Ty) return false; // Third operand of insertelement must be uint. @@ -1404,7 +1425,11 @@ BinaryOperator *BinaryOperator::createNot(Value *Op, const std::string &Name, // isConstantAllOnes - Helper function for several functions below static inline bool isConstantAllOnes(const Value *V) { - return isa(V) &&cast(V)->isAllOnesValue(); + if (const ConstantInt *CI = dyn_cast(V)) + return CI->isAllOnesValue(); + if (const ConstantVector *CV = dyn_cast(V)) + return CV->isAllOnesValue(); + return false; } bool BinaryOperator::isNeg(const Value *V) { @@ -1500,7 +1525,7 @@ bool CastInst::isLosslessCast() const { /// example, the following are all no-op casts: /// # bitcast uint %X, int /// # bitcast uint* %x, sbyte* -/// # bitcast packed< 2 x int > %x, packed< 4 x short> +/// # bitcast vector< 2 x int > %x, vector< 4 x short> /// # ptrtoint uint* %x, uint ; on 32-bit plaforms only /// @brief Determine if a cast is a no-op. bool CastInst::isNoopCast(const Type *IntPtrTy) const { @@ -1867,8 +1892,8 @@ CastInst::getCastOpcode( const Value *Src, bool SrcIsSigned, const Type *DestTy, bool DestIsSigned) { // Get the bit sizes, we'll need these const Type *SrcTy = Src->getType(); - unsigned SrcBits = SrcTy->getPrimitiveSizeInBits(); // 0 for ptr/packed - unsigned DestBits = DestTy->getPrimitiveSizeInBits(); // 0 for ptr/packed + unsigned SrcBits = SrcTy->getPrimitiveSizeInBits(); // 0 for ptr/vector + unsigned DestBits = DestTy->getPrimitiveSizeInBits(); // 0 for ptr/vector // Run through the possibilities ... if (DestTy->isInteger()) { // Casting to integral @@ -1890,7 +1915,7 @@ CastInst::getCastOpcode( return FPToUI; // FP -> uint } else if (const VectorType *PTy = dyn_cast(SrcTy)) { assert(DestBits == PTy->getBitWidth() && - "Casting packed to integer of different width"); + "Casting vector to integer of different width"); return BitCast; // Same size, no-op cast } else { assert(isa(SrcTy) && @@ -1913,7 +1938,7 @@ CastInst::getCastOpcode( } } else if (const VectorType *PTy = dyn_cast(SrcTy)) { assert(DestBits == PTy->getBitWidth() && - "Casting packed to floating point of different width"); + "Casting vector to floating point of different width"); return BitCast; // same size, no-op cast } else { assert(0 && "Casting pointer or non-first class to float"); @@ -1921,12 +1946,12 @@ CastInst::getCastOpcode( } else if (const VectorType *DestPTy = dyn_cast(DestTy)) { if (const VectorType *SrcPTy = dyn_cast(SrcTy)) { assert(DestPTy->getBitWidth() == SrcPTy->getBitWidth() && - "Casting packed to packed of different widths"); - return BitCast; // packed -> packed + "Casting vector to vector of different widths"); + return BitCast; // vector -> vector } else if (DestPTy->getBitWidth() == SrcBits) { - return BitCast; // float/int -> packed + return BitCast; // float/int -> vector } else { - assert(!"Illegal cast to packed (wrong type or size)"); + assert(!"Illegal cast to vector (wrong type or size)"); } } else if (isa(DestTy)) { if (isa(SrcTy)) {