Implementation of Store & GetElementPtr


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@164 91177308-0d34-0410-b5e6-96231b3b80d8
diff --git a/lib/Bytecode/Writer/InstructionWriter.cpp b/lib/Bytecode/Writer/InstructionWriter.cpp
index 34d9568..73969e6 100644
--- a/lib/Bytecode/Writer/InstructionWriter.cpp
+++ b/lib/Bytecode/Writer/InstructionWriter.cpp
@@ -135,10 +135,19 @@
   // the first param is actually interesting).  But if we have no arguments
   // we take the type of the instruction itself.  
   //
-  const Type *Ty = NumOperands ? I->getOperand(0)->getType() : I->getType();
-  if (I->getOpcode() == Instruction::Malloc || 
-      I->getOpcode() == Instruction::Alloca)
+  const Type *Ty;
+  switch (I->getOpcode()) {
+  case Instruction::Malloc:
+  case Instruction::Alloca:
     Ty = I->getType();  // Malloc & Alloca ALWAYS want to encode the return type
+    break;
+  case Instruction::Store:
+    Ty = I->getOperand(1)->getType();  // Encode the pointer type...
+    break;
+  default:              // Otherwise use the default behavior...
+    Ty = NumOperands ? I->getOperand(0)->getType() : I->getType();
+    break;
+  }
 
   unsigned Type;
   int Slot = Table.getValSlot(Ty);
@@ -184,8 +193,8 @@
     break;
   }
 
-  // If we weren't handled before here, we either have a large number of operands
-  // or a large operand index that we are refering to.
+  // If we weren't handled before here, we either have a large number of
+  // operands or a large operand index that we are refering to.
   outputInstructionFormat0(I, Table, Type, Out);
   return false;
 }