Add support for constant expr shifts
authorChris Lattner <sabre@nondot.org>
Wed, 5 Nov 2003 19:53:03 +0000 (19:53 +0000)
committerChris Lattner <sabre@nondot.org>
Wed, 5 Nov 2003 19:53:03 +0000 (19:53 +0000)
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@9735 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Bytecode/Reader/ConstantReader.cpp
lib/VMCore/Constants.cpp

index 097bdbe1266fa6ae31698ca7ced5a9faafddf439..00f44b3665e0997e7b45db2b123880d70929ed8b 100644 (file)
@@ -182,6 +182,8 @@ Constant *BytecodeParser::parseConstantValue(const unsigned char *&Buf,
     } else if (Opcode == Instruction::GetElementPtr) { // GetElementPtr
       std::vector<Constant*> IdxList(ArgVec.begin()+1, ArgVec.end());
       return ConstantExpr::getGetElementPtr(ArgVec[0], IdxList);
+    } else if (Opcode == Instruction::Shl || Opcode == Instruction::Shr) {
+      return ConstantExpr::getShift(Opcode, ArgVec[0], ArgVec[1]);
     } else {                            // All other 2-operand expressions
       return ConstantExpr::get(Opcode, ArgVec[0], ArgVec[1]);
     }
index bc1e9d2c1c80ad4d5a3ea320c73bec9de34f2213..28cc9d24e036fb1dfa387f96e5779409f676abeb 100644 (file)
@@ -493,6 +493,13 @@ void ConstantExpr::replaceUsesOfWithOnConstant(Value *From, Value *ToV,
   } else if (getOpcode() == Instruction::Cast) {
     assert(getOperand(0) == From && "Cast only has one use!");
     Replacement = ConstantExpr::getCast(To, getType());
+  } else if (getOpcode() == Instruction::Shl ||
+             getOpcode() == Instruction::Shr) {
+    Constant *C1 = getOperand(0);
+    Constant *C2 = getOperand(1);
+    if (C1 == From) C1 = To;
+    if (C2 == From) C2 = To;
+    Replacement = ConstantExpr::getShift(getOpcode(), C1, C2);
   } else if (getNumOperands() == 2) {
     Constant *C1 = getOperand(0);
     Constant *C2 = getOperand(1);