Remove support for Not ConstantExpr. This simplifies the unary case to only
authorChris Lattner <sabre@nondot.org>
Wed, 14 Aug 2002 18:24:09 +0000 (18:24 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 14 Aug 2002 18:24:09 +0000 (18:24 +0000)
have to support the cast instruction, so the function is renamed to getCast.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@3328 91177308-0d34-0410-b5e6-96231b3b80d8

include/llvm/Constants.h
lib/AsmParser/llvmAsmParser.y
lib/Bytecode/Reader/ConstantReader.cpp
lib/Bytecode/Reader/InstructionReader.cpp
lib/Linker/LinkModules.cpp
lib/Transforms/Utils/Linker.cpp
lib/VMCore/Constants.cpp
lib/VMCore/Linker.cpp

index 29dcf5a3c9ced1d9e2c10f860e3c908db9ce83e4..aec7425b0b4c40d1f02a9940c1cec74ea0c6e824 100644 (file)
@@ -431,8 +431,8 @@ protected:
 public:
   // Static methods to construct a ConstantExpr of different kinds.
   
-  // Unary constant expr - Use with unary operators and casts
-  static ConstantExpr *get(unsigned Opcode, Constant *C, const Type *Ty);
+  // Cast constant expr
+  static ConstantExpr *getCast(Constant *C, const Type *Ty);
 
   // Binary constant expr - Use with binary operators...
   static ConstantExpr *get(unsigned Opcode, Constant *C1, Constant *C2);
index 6b858650b74f69a9f44122a1d8e3e2eaeb406fc1..923e48d36bbd532e2699a5670af959769aeafc48 100644 (file)
@@ -962,7 +962,7 @@ ConstVal: Types '[' ConstVector ']' { // Nonempty unsized arr
 
 // FIXME: ConstExpr::get never return null!  Do checking here in the parser.
 ConstExpr: Types CAST ConstVal {
-    $$ = ConstantExpr::get(Instruction::Cast, $3, $1->get());
+    $$ = ConstantExpr::getCast($3, $1->get());
     delete $1;
   }
   | Types GETELEMENTPTR '(' ConstVal IndexList ')' {
index 921b875644dffa70f026804a6fde080ad984d5bf..37e201f2807d644b3723b7c28aa8aae483d8938b 100644 (file)
@@ -217,7 +217,8 @@ bool BytecodeParser::parseConstantValue(const uchar *&Buf, const uchar *EndBuf,
     
     // Construct a ConstantExpr of the appropriate kind
     if (isExprNumArgs == 1) {           // All one-operand expressions
-      V = ConstantExpr::get(Opcode, ArgVec[0], Ty);
+      assert(Opcode == Instruction::Cast);
+      V = ConstantExpr::getCast(ArgVec[0], Ty);
     } else if (Opcode == Instruction::GetElementPtr) { // GetElementPtr
       std::vector<Constant*> IdxList(ArgVec.begin()+1, ArgVec.end());
       V = ConstantExpr::getGetElementPtr(ArgVec[0], IdxList);
index 0916b2b876aaa8847606cebcd9161a3db129cb4b..0de8f39c579dffd2b97d1f156081b3ad768bb963 100644 (file)
@@ -122,13 +122,8 @@ bool BytecodeParser::ParseInstruction(const uchar *&Buf, const uchar *EndBuf,
   if (ParseRawInst(Buf, EndBuf, Raw))
     return failure(true);
 
-  if (Raw.Opcode >= Instruction::FirstUnaryOp && 
-      Raw.Opcode <  Instruction::NumUnaryOps  && Raw.NumOperands == 1) {
-    Res = UnaryOperator::create((Instruction::UnaryOps)Raw.Opcode,
-                               getValue(Raw.Ty,Raw.Arg1));
-    return false;
-  } else if (Raw.Opcode >= Instruction::FirstBinaryOp &&
-            Raw.Opcode <  Instruction::NumBinaryOps  && Raw.NumOperands == 2) {
+  if (Raw.Opcode >= Instruction::FirstBinaryOp &&
+      Raw.Opcode <  Instruction::NumBinaryOps  && Raw.NumOperands == 2) {
     Res = BinaryOperator::create((Instruction::BinaryOps)Raw.Opcode,
                                 getValue(Raw.Ty, Raw.Arg1),
                                 getValue(Raw.Ty, Raw.Arg2));
index 48e40d0b3d9f98203c21d5521c0b86b66d578618..21e25b444a1d7f321bfbca1d0f637264fe611e4f 100644 (file)
@@ -119,10 +119,10 @@ static Value *RemapOperand(const Value *In, map<const Value*, Value*> &LocalMap,
       Result = ConstantPointerRef::get(cast<GlobalValue>(V));
     } else if (const ConstantExpr *CE = dyn_cast<ConstantExpr>(CPV)) {
       if (CE->getNumOperands() == 1) {
-        // Cast instruction, unary operator
+        // Cast instruction
+        assert(CE->getOpcode() == Instruction::Cast);
         Value *V = RemapOperand(CE->getOperand(0), LocalMap, GlobalMap);
-        Result = ConstantExpr::get(CE->getOpcode(), cast<Constant>(V),
-                                   CE->getType());
+        Result = ConstantExpr::getCast(cast<Constant>(V), CE->getType());
       } else if (CE->getNumOperands() == 2) {
         // Binary operator...
         Value *V1 = RemapOperand(CE->getOperand(0), LocalMap, GlobalMap);
index 48e40d0b3d9f98203c21d5521c0b86b66d578618..21e25b444a1d7f321bfbca1d0f637264fe611e4f 100644 (file)
@@ -119,10 +119,10 @@ static Value *RemapOperand(const Value *In, map<const Value*, Value*> &LocalMap,
       Result = ConstantPointerRef::get(cast<GlobalValue>(V));
     } else if (const ConstantExpr *CE = dyn_cast<ConstantExpr>(CPV)) {
       if (CE->getNumOperands() == 1) {
-        // Cast instruction, unary operator
+        // Cast instruction
+        assert(CE->getOpcode() == Instruction::Cast);
         Value *V = RemapOperand(CE->getOperand(0), LocalMap, GlobalMap);
-        Result = ConstantExpr::get(CE->getOpcode(), cast<Constant>(V),
-                                   CE->getType());
+        Result = ConstantExpr::getCast(cast<Constant>(V), CE->getType());
       } else if (CE->getNumOperands() == 2) {
         // Binary operator...
         Value *V1 = RemapOperand(CE->getOperand(0), LocalMap, GlobalMap);
index 2aef498b36795d2de3083d699f218bebe07cae5d..ff803dcf61ca9cac94dd87633d03787071693cd8 100644 (file)
@@ -466,26 +466,16 @@ ConstantPointerRef *ConstantPointerRef::get(GlobalValue *GV) {
 typedef pair<unsigned, vector<Constant*> > ExprMapKeyType;
 static ValueMap<const ExprMapKeyType, ConstantExpr> ExprConstants;
 
-ConstantExpr *ConstantExpr::get(unsigned Opcode, Constant *C, const Type *Ty) {
+ConstantExpr *ConstantExpr::getCast(Constant *C, const Type *Ty) {
 
   // Look up the constant in the table first to ensure uniqueness
   vector<Constant*> argVec(1, C);
-  const ExprMapKeyType &Key = make_pair(Opcode, argVec);
+  const ExprMapKeyType &Key = make_pair(Instruction::Cast, argVec);
   ConstantExpr *Result = ExprConstants.get(Ty, Key);
   if (Result) return Result;
   
   // Its not in the table so create a new one and put it in the table.
-  // Check the operands for consistency first
-  assert(Opcode == Instruction::Cast ||
-         (Opcode >= Instruction::FirstUnaryOp &&
-          Opcode < Instruction::NumUnaryOps) &&
-         "Invalid opcode in unary ConstantExpr!");
-
-  // type of operand will not match result for Cast operation
-  assert((Opcode == Instruction::Cast || Ty == C->getType()) &&
-         "Type of operand in unary constant expression should match result");
-  
-  Result = new ConstantExpr(Opcode, C, Ty);
+  Result = new ConstantExpr(Instruction::Cast, C, Ty);
   ExprConstants.add(Ty, Key, Result);
   return Result;
 }
index 48e40d0b3d9f98203c21d5521c0b86b66d578618..21e25b444a1d7f321bfbca1d0f637264fe611e4f 100644 (file)
@@ -119,10 +119,10 @@ static Value *RemapOperand(const Value *In, map<const Value*, Value*> &LocalMap,
       Result = ConstantPointerRef::get(cast<GlobalValue>(V));
     } else if (const ConstantExpr *CE = dyn_cast<ConstantExpr>(CPV)) {
       if (CE->getNumOperands() == 1) {
-        // Cast instruction, unary operator
+        // Cast instruction
+        assert(CE->getOpcode() == Instruction::Cast);
         Value *V = RemapOperand(CE->getOperand(0), LocalMap, GlobalMap);
-        Result = ConstantExpr::get(CE->getOpcode(), cast<Constant>(V),
-                                   CE->getType());
+        Result = ConstantExpr::getCast(cast<Constant>(V), CE->getType());
       } else if (CE->getNumOperands() == 2) {
         // Binary operator...
         Value *V1 = RemapOperand(CE->getOperand(0), LocalMap, GlobalMap);