diff --git a/lib/AsmParser/llvmAsmParser.cpp.cvs b/lib/AsmParser/llvmAsmParser.cpp.cvs
index 52ab9dc..1b5b51b 100644
--- a/lib/AsmParser/llvmAsmParser.cpp.cvs
+++ b/lib/AsmParser/llvmAsmParser.cpp.cvs
@@ -1206,19 +1206,19 @@
   1173,  1182,  1185,  1193,  1197,  1202,  1203,  1206,  1209,  1219,
   1244,  1257,  1286,  1311,  1331,  1343,  1352,  1356,  1415,  1421,
   1429,  1434,  1439,  1442,  1445,  1452,  1462,  1493,  1500,  1521,
-  1531,  1536,  1543,  1551,  1554,  1562,  1565,  1572,  1572,  1582,
-  1589,  1593,  1596,  1599,  1602,  1615,  1635,  1637,  1639,  1642,
-  1645,  1649,  1652,  1654,  1656,  1660,  1672,  1673,  1675,  1678,
-  1686,  1691,  1693,  1697,  1701,  1709,  1709,  1710,  1710,  1712,
-  1718,  1723,  1729,  1732,  1737,  1741,  1745,  1831,  1831,  1833,
-  1841,  1841,  1843,  1847,  1847,  1856,  1859,  1863,  1866,  1869,
-  1872,  1875,  1878,  1881,  1884,  1887,  1911,  1914,  1927,  1930,
-  1935,  1935,  1941,  1945,  1948,  1956,  1965,  1969,  1979,  1990,
-  1993,  1996,  1999,  2002,  2016,  2020,  2073,  2076,  2082,  2090,
-  2100,  2107,  2112,  2119,  2123,  2129,  2129,  2131,  2134,  2140,
-  2152,  2163,  2173,  2185,  2192,  2199,  2206,  2211,  2230,  2252,
-  2260,  2272,  2277,  2291,  2348,  2354,  2356,  2360,  2363,  2369,
-  2373,  2377,  2381,  2385,  2392,  2402,  2415
+  1531,  1536,  1543,  1548,  1553,  1561,  1564,  1571,  1571,  1581,
+  1588,  1592,  1595,  1598,  1601,  1614,  1634,  1636,  1638,  1641,
+  1644,  1648,  1651,  1653,  1655,  1659,  1671,  1672,  1674,  1677,
+  1685,  1690,  1692,  1696,  1700,  1708,  1708,  1709,  1709,  1711,
+  1717,  1722,  1728,  1731,  1736,  1740,  1744,  1830,  1830,  1832,
+  1840,  1840,  1842,  1846,  1846,  1855,  1858,  1862,  1865,  1868,
+  1871,  1874,  1877,  1880,  1883,  1886,  1910,  1913,  1926,  1929,
+  1934,  1934,  1940,  1944,  1947,  1955,  1964,  1968,  1978,  1989,
+  1992,  1995,  1998,  2001,  2015,  2019,  2072,  2075,  2081,  2089,
+  2099,  2106,  2111,  2118,  2122,  2128,  2128,  2130,  2133,  2139,
+  2151,  2162,  2172,  2184,  2191,  2198,  2205,  2210,  2229,  2251,
+  2256,  2261,  2266,  2280,  2337,  2343,  2345,  2349,  2352,  2358,
+  2362,  2366,  2370,  2374,  2381,  2391,  2404
 };
 #endif
 
@@ -2914,22 +2914,21 @@
 case 113:
 #line 1543 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
-        if (!isa<PackedType>(yyvsp[-3].ConstVal->getType()))
-      ThrowException("First operand of extractelement must be "
-                     "packed type!");
-    if (yyvsp[-1].ConstVal->getType() != Type::UIntTy)
-      ThrowException("Second operand of extractelement must be uint!");
+    if (!ExtractElementInst::isValidOperands(yyvsp[-3].ConstVal, yyvsp[-1].ConstVal))
+      ThrowException("Invalid extractelement operands!");
     yyval.ConstVal = ConstantExpr::getExtractElement(yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
   ;
     break;}
 case 114:
-#line 1551 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1548 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
+    if (!InsertElementInst::isValidOperands(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal))
+      ThrowException("Invalid insertelement operands!");
     yyval.ConstVal = ConstantExpr::getInsertElement(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal);
   ;
     break;}
 case 115:
-#line 1554 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1553 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     if (!ShuffleVectorInst::isValidOperands(yyvsp[-5].ConstVal, yyvsp[-3].ConstVal, yyvsp[-1].ConstVal))
       ThrowException("Invalid shufflevector operands!");
@@ -2937,60 +2936,60 @@
   ;
     break;}
 case 116:
-#line 1562 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1561 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     (yyval.ConstVector = yyvsp[-2].ConstVector)->push_back(yyvsp[0].ConstVal);
   ;
     break;}
 case 117:
-#line 1565 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1564 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     yyval.ConstVector = new std::vector<Constant*>();
     yyval.ConstVector->push_back(yyvsp[0].ConstVal);
   ;
     break;}
 case 118:
-#line 1572 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1571 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 { yyval.BoolVal = false; ;
     break;}
 case 119:
-#line 1572 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1571 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 { yyval.BoolVal = true; ;
     break;}
 case 120:
-#line 1582 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1581 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
   yyval.ModuleVal = ParserResult = yyvsp[0].ModuleVal;
   CurModule.ModuleDone();
 ;
     break;}
 case 121:
-#line 1589 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1588 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     yyval.ModuleVal = yyvsp[-1].ModuleVal;
     CurFun.FunctionDone();
   ;
     break;}
 case 122:
-#line 1593 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1592 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     yyval.ModuleVal = yyvsp[-1].ModuleVal;
   ;
     break;}
 case 123:
-#line 1596 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1595 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     yyval.ModuleVal = yyvsp[-3].ModuleVal;
   ;
     break;}
 case 124:
-#line 1599 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1598 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     yyval.ModuleVal = yyvsp[-1].ModuleVal;
   ;
     break;}
 case 125:
-#line 1602 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1601 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     yyval.ModuleVal = CurModule.CurrentModule;
     // Emit an error if there are any unresolved types left.
@@ -3004,7 +3003,7 @@
   ;
     break;}
 case 126:
-#line 1615 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1614 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     // Eagerly resolve types.  This is not an optimization, this is a
     // requirement that is due to the fact that we could have this:
@@ -3027,30 +3026,30 @@
   ;
     break;}
 case 127:
-#line 1635 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1634 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {       // Function prototypes can be in const pool
   ;
     break;}
 case 128:
-#line 1637 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1636 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {  // Asm blocks can be in the const pool
   ;
     break;}
 case 129:
-#line 1639 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1638 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     if (yyvsp[0].ConstVal == 0) ThrowException("Global value initializer is not a constant!");
     CurGV = ParseGlobalVariable(yyvsp[-3].StrVal, yyvsp[-2].Linkage, yyvsp[-1].BoolVal, yyvsp[0].ConstVal->getType(), yyvsp[0].ConstVal);
                                                        ;
     break;}
 case 130:
-#line 1642 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1641 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     CurGV = 0;
   ;
     break;}
 case 131:
-#line 1645 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1644 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     CurGV = ParseGlobalVariable(yyvsp[-3].StrVal, GlobalValue::ExternalLinkage,
                                              yyvsp[-1].BoolVal, *yyvsp[0].TypeVal, 0);
@@ -3058,28 +3057,28 @@
                                                    ;
     break;}
 case 132:
-#line 1649 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1648 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     CurGV = 0;
   ;
     break;}
 case 133:
-#line 1652 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1651 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 { 
   ;
     break;}
 case 134:
-#line 1654 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1653 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
   ;
     break;}
 case 135:
-#line 1656 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1655 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 { 
   ;
     break;}
 case 136:
-#line 1660 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1659 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
   const std::string &AsmSoFar = CurModule.CurrentModule->getModuleInlineAsm();
   char *EndStr = UnEscapeLexed(yyvsp[0].StrVal, true);
@@ -3093,21 +3092,21 @@
 ;
     break;}
 case 137:
-#line 1672 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1671 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 { yyval.Endianness = Module::BigEndian; ;
     break;}
 case 138:
-#line 1673 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1672 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 { yyval.Endianness = Module::LittleEndian; ;
     break;}
 case 139:
-#line 1675 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1674 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     CurModule.CurrentModule->setEndianness(yyvsp[0].Endianness);
   ;
     break;}
 case 140:
-#line 1678 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1677 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     if (yyvsp[0].UInt64Val == 32)
       CurModule.CurrentModule->setPointerSize(Module::Pointer32);
@@ -3118,37 +3117,37 @@
   ;
     break;}
 case 141:
-#line 1686 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1685 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     CurModule.CurrentModule->setTargetTriple(yyvsp[0].StrVal);
     free(yyvsp[0].StrVal);
   ;
     break;}
 case 143:
-#line 1693 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1692 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
           CurModule.CurrentModule->addLibrary(yyvsp[0].StrVal);
           free(yyvsp[0].StrVal);
         ;
     break;}
 case 144:
-#line 1697 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1696 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
           CurModule.CurrentModule->addLibrary(yyvsp[0].StrVal);
           free(yyvsp[0].StrVal);
         ;
     break;}
 case 145:
-#line 1701 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1700 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
         ;
     break;}
 case 149:
-#line 1710 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1709 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 { yyval.StrVal = 0; ;
     break;}
 case 150:
-#line 1712 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1711 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
   if (*yyvsp[-1].TypeVal == Type::VoidTy)
     ThrowException("void typed arguments are invalid!");
@@ -3156,7 +3155,7 @@
 ;
     break;}
 case 151:
-#line 1718 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1717 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     yyval.ArgList = yyvsp[-2].ArgList;
     yyvsp[-2].ArgList->push_back(*yyvsp[0].ArgVal);
@@ -3164,7 +3163,7 @@
   ;
     break;}
 case 152:
-#line 1723 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1722 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     yyval.ArgList = new std::vector<std::pair<PATypeHolder*,char*> >();
     yyval.ArgList->push_back(*yyvsp[0].ArgVal);
@@ -3172,13 +3171,13 @@
   ;
     break;}
 case 153:
-#line 1729 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1728 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     yyval.ArgList = yyvsp[0].ArgList;
   ;
     break;}
 case 154:
-#line 1732 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1731 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     yyval.ArgList = yyvsp[-2].ArgList;
     yyval.ArgList->push_back(std::pair<PATypeHolder*,
@@ -3186,20 +3185,20 @@
   ;
     break;}
 case 155:
-#line 1737 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1736 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     yyval.ArgList = new std::vector<std::pair<PATypeHolder*,char*> >();
     yyval.ArgList->push_back(std::make_pair(new PATypeHolder(Type::VoidTy), (char*)0));
   ;
     break;}
 case 156:
-#line 1741 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1740 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     yyval.ArgList = 0;
   ;
     break;}
 case 157:
-#line 1746 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1745 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
   UnEscapeLexed(yyvsp[-5].StrVal);
   std::string FunctionName(yyvsp[-5].StrVal);
@@ -3286,7 +3285,7 @@
 ;
     break;}
 case 160:
-#line 1833 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1832 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
   yyval.FunctionVal = CurFun.CurrentFunction;
 
@@ -3296,84 +3295,84 @@
 ;
     break;}
 case 163:
-#line 1843 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1842 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
   yyval.FunctionVal = yyvsp[-1].FunctionVal;
 ;
     break;}
 case 164:
-#line 1847 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1846 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 { CurFun.isDeclare = true; ;
     break;}
 case 165:
-#line 1847 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1846 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
   yyval.FunctionVal = CurFun.CurrentFunction;
   CurFun.FunctionDone();
 ;
     break;}
 case 166:
-#line 1856 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1855 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     yyval.BoolVal = false;
   ;
     break;}
 case 167:
-#line 1859 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1858 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     yyval.BoolVal = true;
   ;
     break;}
 case 168:
-#line 1863 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1862 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {    // A reference to a direct constant
     yyval.ValIDVal = ValID::create(yyvsp[0].SInt64Val);
   ;
     break;}
 case 169:
-#line 1866 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1865 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     yyval.ValIDVal = ValID::create(yyvsp[0].UInt64Val);
   ;
     break;}
 case 170:
-#line 1869 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1868 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {                     // Perhaps it's an FP constant?
     yyval.ValIDVal = ValID::create(yyvsp[0].FPVal);
   ;
     break;}
 case 171:
-#line 1872 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1871 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     yyval.ValIDVal = ValID::create(ConstantBool::True);
   ;
     break;}
 case 172:
-#line 1875 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1874 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     yyval.ValIDVal = ValID::create(ConstantBool::False);
   ;
     break;}
 case 173:
-#line 1878 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1877 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     yyval.ValIDVal = ValID::createNull();
   ;
     break;}
 case 174:
-#line 1881 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1880 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     yyval.ValIDVal = ValID::createUndef();
   ;
     break;}
 case 175:
-#line 1884 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1883 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {     // A vector zero constant.
     yyval.ValIDVal = ValID::createZeroInit();
   ;
     break;}
 case 176:
-#line 1887 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1886 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 { // Nonempty unsized packed vector
     const Type *ETy = (*yyvsp[-1].ConstVector)[0]->getType();
     int NumElements = yyvsp[-1].ConstVector->size(); 
@@ -3400,13 +3399,13 @@
   ;
     break;}
 case 177:
-#line 1911 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1910 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     yyval.ValIDVal = ValID::create(yyvsp[0].ConstVal);
   ;
     break;}
 case 178:
-#line 1914 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1913 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     char *End = UnEscapeLexed(yyvsp[-2].StrVal, true);
     std::string AsmStr = std::string(yyvsp[-2].StrVal, End);
@@ -3418,37 +3417,37 @@
   ;
     break;}
 case 179:
-#line 1927 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1926 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {  // Is it an integer reference...?
     yyval.ValIDVal = ValID::create(yyvsp[0].SIntVal);
   ;
     break;}
 case 180:
-#line 1930 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1929 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {                   // Is it a named reference...?
     yyval.ValIDVal = ValID::create(yyvsp[0].StrVal);
   ;
     break;}
 case 183:
-#line 1941 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1940 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     yyval.ValueVal = getVal(*yyvsp[-1].TypeVal, yyvsp[0].ValIDVal); delete yyvsp[-1].TypeVal;
   ;
     break;}
 case 184:
-#line 1945 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1944 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     yyval.FunctionVal = yyvsp[-1].FunctionVal;
   ;
     break;}
 case 185:
-#line 1948 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1947 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 { // Do not allow functions with 0 basic blocks   
     yyval.FunctionVal = yyvsp[-1].FunctionVal;
   ;
     break;}
 case 186:
-#line 1956 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1955 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     setValueName(yyvsp[0].TermInstVal, yyvsp[-1].StrVal);
     InsertValue(yyvsp[0].TermInstVal);
@@ -3459,14 +3458,14 @@
   ;
     break;}
 case 187:
-#line 1965 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1964 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     yyvsp[-1].BasicBlockVal->getInstList().push_back(yyvsp[0].InstVal);
     yyval.BasicBlockVal = yyvsp[-1].BasicBlockVal;
   ;
     break;}
 case 188:
-#line 1969 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1968 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     yyval.BasicBlockVal = CurBB = getBBVal(ValID::create((int)CurFun.NextBBNum++), true);
 
@@ -3479,7 +3478,7 @@
   ;
     break;}
 case 189:
-#line 1979 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1978 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     yyval.BasicBlockVal = CurBB = getBBVal(ValID::create(yyvsp[0].StrVal), true);
 
@@ -3492,31 +3491,31 @@
   ;
     break;}
 case 190:
-#line 1990 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1989 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {              // Return with a result...
     yyval.TermInstVal = new ReturnInst(yyvsp[0].ValueVal);
   ;
     break;}
 case 191:
-#line 1993 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1992 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {                                       // Return with no result...
     yyval.TermInstVal = new ReturnInst();
   ;
     break;}
 case 192:
-#line 1996 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1995 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {                         // Unconditional Branch...
     yyval.TermInstVal = new BranchInst(getBBVal(yyvsp[0].ValIDVal));
   ;
     break;}
 case 193:
-#line 1999 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 1998 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {  
     yyval.TermInstVal = new BranchInst(getBBVal(yyvsp[-3].ValIDVal), getBBVal(yyvsp[0].ValIDVal), getVal(Type::BoolTy, yyvsp[-6].ValIDVal));
   ;
     break;}
 case 194:
-#line 2002 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2001 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     SwitchInst *S = new SwitchInst(getVal(yyvsp[-7].PrimType, yyvsp[-6].ValIDVal), getBBVal(yyvsp[-3].ValIDVal), yyvsp[-1].JumpTable->size());
     yyval.TermInstVal = S;
@@ -3533,14 +3532,14 @@
   ;
     break;}
 case 195:
-#line 2016 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2015 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     SwitchInst *S = new SwitchInst(getVal(yyvsp[-6].PrimType, yyvsp[-5].ValIDVal), getBBVal(yyvsp[-2].ValIDVal), 0);
     yyval.TermInstVal = S;
   ;
     break;}
 case 196:
-#line 2021 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2020 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     const PointerType *PFTy;
     const FunctionType *Ty;
@@ -3595,19 +3594,19 @@
   ;
     break;}
 case 197:
-#line 2073 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2072 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     yyval.TermInstVal = new UnwindInst();
   ;
     break;}
 case 198:
-#line 2076 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2075 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     yyval.TermInstVal = new UnreachableInst();
   ;
     break;}
 case 199:
-#line 2082 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2081 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     yyval.JumpTable = yyvsp[-5].JumpTable;
     Constant *V = cast<Constant>(getValNonImprovising(yyvsp[-4].PrimType, yyvsp[-3].ValIDVal));
@@ -3618,7 +3617,7 @@
   ;
     break;}
 case 200:
-#line 2090 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2089 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     yyval.JumpTable = new std::vector<std::pair<Constant*, BasicBlock*> >();
     Constant *V = cast<Constant>(getValNonImprovising(yyvsp[-4].PrimType, yyvsp[-3].ValIDVal));
@@ -3630,7 +3629,7 @@
   ;
     break;}
 case 201:
-#line 2100 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2099 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
   // Is this definition named?? if so, assign the name...
   setValueName(yyvsp[0].InstVal, yyvsp[-1].StrVal);
@@ -3639,7 +3638,7 @@
 ;
     break;}
 case 202:
-#line 2107 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2106 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {    // Used for PHI nodes
     yyval.PHIList = new std::list<std::pair<Value*, BasicBlock*> >();
     yyval.PHIList->push_back(std::make_pair(getVal(*yyvsp[-5].TypeVal, yyvsp[-3].ValIDVal), getBBVal(yyvsp[-1].ValIDVal)));
@@ -3647,7 +3646,7 @@
   ;
     break;}
 case 203:
-#line 2112 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2111 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     yyval.PHIList = yyvsp[-6].PHIList;
     yyvsp[-6].PHIList->push_back(std::make_pair(getVal(yyvsp[-6].PHIList->front().first->getType(), yyvsp[-3].ValIDVal),
@@ -3655,37 +3654,37 @@
   ;
     break;}
 case 204:
-#line 2119 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2118 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {    // Used for call statements, and memory insts...
     yyval.ValueList = new std::vector<Value*>();
     yyval.ValueList->push_back(yyvsp[0].ValueVal);
   ;
     break;}
 case 205:
-#line 2123 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2122 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     yyval.ValueList = yyvsp[-2].ValueList;
     yyvsp[-2].ValueList->push_back(yyvsp[0].ValueVal);
   ;
     break;}
 case 207:
-#line 2129 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2128 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 { yyval.ValueList = 0; ;
     break;}
 case 208:
-#line 2131 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2130 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     yyval.BoolVal = true;
   ;
     break;}
 case 209:
-#line 2134 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2133 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     yyval.BoolVal = false;
   ;
     break;}
 case 210:
-#line 2140 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2139 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     if (!(*yyvsp[-3].TypeVal)->isInteger() && !(*yyvsp[-3].TypeVal)->isFloatingPoint() && 
         !isa<PackedType>((*yyvsp[-3].TypeVal).get()))
@@ -3700,7 +3699,7 @@
   ;
     break;}
 case 211:
-#line 2152 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2151 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     if (!(*yyvsp[-3].TypeVal)->isIntegral()) {
       if (!isa<PackedType>(yyvsp[-3].TypeVal->get()) ||
@@ -3714,7 +3713,7 @@
   ;
     break;}
 case 212:
-#line 2163 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2162 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     if(isa<PackedType>((*yyvsp[-3].TypeVal).get())) {
       ThrowException(
@@ -3727,7 +3726,7 @@
   ;
     break;}
 case 213:
-#line 2173 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2172 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     std::cerr << "WARNING: Use of eliminated 'not' instruction:"
               << " Replacing with 'xor'.\n";
@@ -3742,7 +3741,7 @@
   ;
     break;}
 case 214:
-#line 2185 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2184 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     if (yyvsp[0].ValueVal->getType() != Type::UByteTy)
       ThrowException("Shift amount must be ubyte!");
@@ -3752,7 +3751,7 @@
   ;
     break;}
 case 215:
-#line 2192 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2191 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     if (!yyvsp[0].TypeVal->get()->isFirstClassType())
       ThrowException("cast instruction to a non-primitive type: '" +
@@ -3762,7 +3761,7 @@
   ;
     break;}
 case 216:
-#line 2199 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2198 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     if (yyvsp[-4].ValueVal->getType() != Type::BoolTy)
       ThrowException("select condition must be boolean!");
@@ -3772,7 +3771,7 @@
   ;
     break;}
 case 217:
-#line 2206 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2205 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     NewVarArgs = true;
     yyval.InstVal = new VAArgInst(yyvsp[-2].ValueVal, *yyvsp[0].TypeVal);
@@ -3780,7 +3779,7 @@
   ;
     break;}
 case 218:
-#line 2211 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2210 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     ObsoleteVarArgs = true;
     const Type* ArgTy = yyvsp[-2].ValueVal->getType();
@@ -3802,7 +3801,7 @@
   ;
     break;}
 case 219:
-#line 2230 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2229 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     ObsoleteVarArgs = true;
     const Type* ArgTy = yyvsp[-2].ValueVal->getType();
@@ -3827,33 +3826,23 @@
   ;
     break;}
 case 220:
-#line 2252 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2251 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
-    if (!isa<PackedType>(yyvsp[-2].ValueVal->getType()))
-      ThrowException("First operand of extractelement must be "
-                     "packed type!");
-    if (yyvsp[0].ValueVal->getType() != Type::UIntTy)
-      ThrowException("Second operand of extractelement must be uint!");
+    if (!ExtractElementInst::isValidOperands(yyvsp[-2].ValueVal, yyvsp[0].ValueVal))
+      ThrowException("Invalid extractelement operands!");
     yyval.InstVal = new ExtractElementInst(yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
   ;
     break;}
 case 221:
-#line 2260 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2256 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
-    if (!isa<PackedType>(yyvsp[-4].ValueVal->getType()))
-      ThrowException("First operand of insertelement must be "
-                     "packed type!");
-    if (yyvsp[-2].ValueVal->getType() != 
-        cast<PackedType>(yyvsp[-4].ValueVal->getType())->getElementType())
-      ThrowException("Second operand of insertelement must be "
-                     "packed element type!");
-    if (yyvsp[0].ValueVal->getType() != Type::UIntTy)
-      ThrowException("Third operand of insertelement must be uint!");
+    if (!InsertElementInst::isValidOperands(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal))
+      ThrowException("Invalid insertelement operands!");
     yyval.InstVal = new InsertElementInst(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal);
   ;
     break;}
 case 222:
-#line 2272 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2261 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     if (!ShuffleVectorInst::isValidOperands(yyvsp[-4].ValueVal, yyvsp[-2].ValueVal, yyvsp[0].ValueVal))
       ThrowException("Invalid shufflevector operands!");
@@ -3861,7 +3850,7 @@
   ;
     break;}
 case 223:
-#line 2277 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2266 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     const Type *Ty = yyvsp[0].PHIList->front().first->getType();
     if (!Ty->isFirstClassType())
@@ -3878,7 +3867,7 @@
   ;
     break;}
 case 224:
-#line 2291 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2280 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     const PointerType *PFTy;
     const FunctionType *Ty;
@@ -3938,65 +3927,65 @@
   ;
     break;}
 case 225:
-#line 2348 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2337 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     yyval.InstVal = yyvsp[0].InstVal;
   ;
     break;}
 case 226:
-#line 2354 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2343 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 { 
     yyval.ValueList = yyvsp[0].ValueList; 
   ;
     break;}
 case 227:
-#line 2356 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2345 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 { 
     yyval.ValueList = new std::vector<Value*>(); 
   ;
     break;}
 case 228:
-#line 2360 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2349 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     yyval.BoolVal = true;
   ;
     break;}
 case 229:
-#line 2363 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2352 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     yyval.BoolVal = false;
   ;
     break;}
 case 230:
-#line 2369 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2358 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     yyval.InstVal = new MallocInst(*yyvsp[-1].TypeVal, 0, yyvsp[0].UIntVal);
     delete yyvsp[-1].TypeVal;
   ;
     break;}
 case 231:
-#line 2373 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2362 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     yyval.InstVal = new MallocInst(*yyvsp[-4].TypeVal, getVal(yyvsp[-2].PrimType, yyvsp[-1].ValIDVal), yyvsp[0].UIntVal);
     delete yyvsp[-4].TypeVal;
   ;
     break;}
 case 232:
-#line 2377 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2366 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     yyval.InstVal = new AllocaInst(*yyvsp[-1].TypeVal, 0, yyvsp[0].UIntVal);
     delete yyvsp[-1].TypeVal;
   ;
     break;}
 case 233:
-#line 2381 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2370 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     yyval.InstVal = new AllocaInst(*yyvsp[-4].TypeVal, getVal(yyvsp[-2].PrimType, yyvsp[-1].ValIDVal), yyvsp[0].UIntVal);
     delete yyvsp[-4].TypeVal;
   ;
     break;}
 case 234:
-#line 2385 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2374 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     if (!isa<PointerType>(yyvsp[0].ValueVal->getType()))
       ThrowException("Trying to free nonpointer type " + 
@@ -4005,7 +3994,7 @@
   ;
     break;}
 case 235:
-#line 2392 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2381 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     if (!isa<PointerType>(yyvsp[-1].TypeVal->get()))
       ThrowException("Can't load from nonpointer type: " +
@@ -4018,7 +4007,7 @@
   ;
     break;}
 case 236:
-#line 2402 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2391 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     const PointerType *PT = dyn_cast<PointerType>(yyvsp[-1].TypeVal->get());
     if (!PT)
@@ -4034,7 +4023,7 @@
   ;
     break;}
 case 237:
-#line 2415 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2404 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 {
     if (!isa<PointerType>(yyvsp[-2].TypeVal->get()))
       ThrowException("getelementptr insn requires pointer operand!");
@@ -4279,7 +4268,7 @@
     }
   return 1;
 }
-#line 2438 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
+#line 2427 "/Users/sabre/cvs/llvm/lib/AsmParser/llvmAsmParser.y"
 
 int yyerror(const char *ErrorMsg) {
   std::string where 
diff --git a/lib/AsmParser/llvmAsmParser.y.cvs b/lib/AsmParser/llvmAsmParser.y.cvs
index d95ea31..cf74600 100644
--- a/lib/AsmParser/llvmAsmParser.y.cvs
+++ b/lib/AsmParser/llvmAsmParser.y.cvs
@@ -1541,14 +1541,13 @@
     $$ = ConstantExpr::get($1, $3, $5);
   }
   | EXTRACTELEMENT '(' ConstVal ',' ConstVal ')' {
-        if (!isa<PackedType>($3->getType()))
-      ThrowException("First operand of extractelement must be "
-                     "packed type!");
-    if ($5->getType() != Type::UIntTy)
-      ThrowException("Second operand of extractelement must be uint!");
+    if (!ExtractElementInst::isValidOperands($3, $5))
+      ThrowException("Invalid extractelement operands!");
     $$ = ConstantExpr::getExtractElement($3, $5);
   }
   | INSERTELEMENT '(' ConstVal ',' ConstVal ',' ConstVal ')' {
+    if (!InsertElementInst::isValidOperands($3, $5, $7))
+      ThrowException("Invalid insertelement operands!");
     $$ = ConstantExpr::getInsertElement($3, $5, $7);
   }
   | SHUFFLEVECTOR '(' ConstVal ',' ConstVal ',' ConstVal ')' {
@@ -2250,23 +2249,13 @@
     delete $4;
   }
   | EXTRACTELEMENT ResolvedVal ',' ResolvedVal {
-    if (!isa<PackedType>($2->getType()))
-      ThrowException("First operand of extractelement must be "
-                     "packed type!");
-    if ($4->getType() != Type::UIntTy)
-      ThrowException("Second operand of extractelement must be uint!");
+    if (!ExtractElementInst::isValidOperands($2, $4))
+      ThrowException("Invalid extractelement operands!");
     $$ = new ExtractElementInst($2, $4);
   }
   | INSERTELEMENT ResolvedVal ',' ResolvedVal ',' ResolvedVal {
-    if (!isa<PackedType>($2->getType()))
-      ThrowException("First operand of insertelement must be "
-                     "packed type!");
-    if ($4->getType() != 
-        cast<PackedType>($2->getType())->getElementType())
-      ThrowException("Second operand of insertelement must be "
-                     "packed element type!");
-    if ($6->getType() != Type::UIntTy)
-      ThrowException("Third operand of insertelement must be uint!");
+    if (!InsertElementInst::isValidOperands($2, $4, $6))
+      ThrowException("Invalid insertelement operands!");
     $$ = new InsertElementInst($2, $4, $6);
   }
   | SHUFFLEVECTOR ResolvedVal ',' ResolvedVal ',' ResolvedVal {
