? SHR.patch
? projects/llvm-test
Index: docs/LangRef.html
===================================================================
RCS file: /var/cvs/llvm/llvm/docs/LangRef.html,v
retrieving revision 1.160
diff -t -d -u -p -5 -r1.160 LangRef.html
--- docs/LangRef.html   2 Nov 2006 01:53:58 -0000       1.160
+++ docs/LangRef.html   4 Nov 2006 00:19:04 -0000
@@ -90,11 +90,12 @@
        <ol>
          <li><a href="#i_and">'<tt>and</tt>' Instruction</a></li>
          <li><a href="#i_or">'<tt>or</tt>'  Instruction</a></li>
          <li><a href="#i_xor">'<tt>xor</tt>' Instruction</a></li>
          <li><a href="#i_shl">'<tt>shl</tt>' Instruction</a></li>
-          <li><a href="#i_shr">'<tt>shr</tt>' Instruction</a></li>
+          <li><a href="#i_lshr">'<tt>lshr</tt>' Instruction</a></li>
+          <li><a href="#i_ashr">'<tt>ashr</tt>' Instruction</a></li>
        </ol>
      </li>
      <li><a href="#vectorops">Vector Operations</a>
        <ol>
          <li><a href="#i_extractelement">'<tt>extractelement</tt>' Instruction</a></li>
@@ -2011,34 +2012,58 @@ type.</p>
  &lt;result&gt; = shl int 4, ubyte 2      <i>; yields {int}:result = 16</i>
  &lt;result&gt; = shl int 1, ubyte 10     <i>; yields {int}:result = 1024</i>
 </pre>
 </div>
 <!-- _______________________________________________________________________ -->
-<div class="doc_subsubsection"> <a name="i_shr">'<tt>shr</tt>'
+<div class="doc_subsubsection"> <a name="i_lshr">'<tt>lshr</tt>'
 Instruction</a> </div>
 <div class="doc_text">
 <h5>Syntax:</h5>
-<pre>  &lt;result&gt; = shr &lt;ty&gt; &lt;var1&gt;, ubyte &lt;var2&gt;   <i>; yields {ty}:result</i>
+<pre>  &lt;result&gt; = lshr &lt;ty&gt; &lt;var1&gt;, ubyte &lt;var2&gt;   <i>; yields {ty}:result</i>
 </pre>
 <h5>Overview:</h5>
-<p>The '<tt>shr</tt>' instruction returns the first operand shifted to
-the right a specified number of bits.</p>
+<p>The '<tt>lshr</tt>' instruction (logical shift right) returns the first
+operand shifted to the right a specified number of bits.</p>
 <h5>Arguments:</h5>
-<p>The first argument to the '<tt>shr</tt>' instruction must be an <a
+<p>The first argument to the '<tt>lshr</tt>' instruction must be an <a
 href="#t_integer">integer</a> type.  The second argument must be an '<tt>ubyte</tt>'
 type.</p>
 <h5>Semantics:</h5>
-<p>If the first argument is a <a href="#t_signed">signed</a> type, the
-most significant bit is duplicated in the newly free'd bit positions.
-If the first argument is unsigned, zero bits shall fill the empty
-positions.</p>
+<p>This instruction always performs an logical shift right operation,
+regardless of whether the arguments are unsigned or not.</p>
 <h5>Example:</h5>
-<pre>  &lt;result&gt; = shr int 4, ubyte %var   <i>; yields {int}:result = 4 &gt;&gt; %var</i>
-  &lt;result&gt; = shr uint 4, ubyte 1     <i>; yields {uint}:result = 2</i>
-  &lt;result&gt; = shr int 4, ubyte 2      <i>; yields {int}:result = 1</i>
-  &lt;result&gt; = shr sbyte 4, ubyte 3    <i>; yields {sbyte}:result = 0</i>
-  &lt;result&gt; = shr sbyte -2, ubyte 1   <i>; yields {sbyte}:result = -1</i>
+<pre>
+  &lt;result&gt; = lshr uint 4, ubyte 1   <i>; yields {uint}:result = 2</i>
+  &lt;result&gt; = lshr int 4, ubyte 2    <i>; yields {uint}:result = 1</i>
+  &lt;result&gt; = lshr sbyte 4, ubyte 3  <i>; yields {sbyte}:result = 0</i>
+  &lt;result&gt; = lshr sbyte -2, ubyte 1 <i>; yields {sbyte}:result = 0x7FFFFFFF </i>
+</pre>
+</div>
+
+<!-- ======================================================================= -->
+<div class="doc_subsubsection"> <a name="i_ashr">'<tt>ashr</tt>'
+Instruction</a> </div>
+<div class="doc_text">
+<h5>Syntax:</h5>
+<pre>  &lt;result&gt; = ashr &lt;ty&gt; &lt;var1&gt;, ubyte &lt;var2&gt;   <i>; yields {ty}:result</i>
+</pre>
+<h5>Overview:</h5>
+<p>The '<tt>ashr</tt>' instruction (arithmetic shift right) returns the first
+operand shifted to the right a specified number of bits.</p>
+<h5>Arguments:</h5>
+<p>The first argument to the '<tt>ashr</tt>' instruction must be an <a
+ href="#t_integer">integer</a> type.  The second argument must be an '<tt>ubyte</tt>'
+type.</p>
+<h5>Semantics:</h5>
+<p>This instruction always performs an arithmetic shift right operation,
+regardless of whether the arguments are signed or not.</p>
+<h5>Example:</h5>
+<pre>
+  &lt;result&gt; = ashr uint 4, ubyte 1    <i>; yields {uint}:result = 2</i>
+  &lt;result&gt; = ashr int 4, ubyte 2      <i>; yields {int}:result = 1</i>
+  &lt;result&gt; = ashr ubyte 4, ubyte 3    <i>; yields {ubyte}:result = 0</i>
+  &lt;result&gt; = ashr sbyte -2, ubyte 1   <i>; yields {sbyte}:result = -1</i>
 </pre>
 </div>

 <!-- ======================================================================= -->
 <div class="doc_subsection">
Index: include/llvm/Constants.h
===================================================================
RCS file: /var/cvs/llvm/llvm/include/llvm/Constants.h,v
retrieving revision 1.93
diff -t -d -u -p -5 -r1.93 Constants.h
--- include/llvm/Constants.h    2 Nov 2006 01:53:58 -0000       1.93
+++ include/llvm/Constants.h    4 Nov 2006 00:19:05 -0000
@@ -562,14 +562,12 @@ public:
  static Constant *getSetLT(Constant *C1, Constant *C2);
  static Constant *getSetGT(Constant *C1, Constant *C2);
  static Constant *getSetLE(Constant *C1, Constant *C2);
  static Constant *getSetGE(Constant *C1, Constant *C2);
  static Constant *getShl(Constant *C1, Constant *C2);
-  static Constant *getShr(Constant *C1, Constant *C2);
-
-  static Constant *getUShr(Constant *C1, Constant *C2); // unsigned shr
-  static Constant *getSShr(Constant *C1, Constant *C2); // signed shr
+  static Constant *getLShr(Constant *C1, Constant *C2);
+  static Constant *getAShr(Constant *C1, Constant *C2);

  /// Getelementptr form.  std::vector<Value*> is only accepted for convenience:
  /// all elements must be Constant's.
  ///
  static Constant *getGetElementPtr(Constant *C,
Index: include/llvm/Instruction.def
===================================================================
RCS file: /var/cvs/llvm/llvm/include/llvm/Instruction.def,v
retrieving revision 1.21
diff -t -d -u -p -5 -r1.21 Instruction.def
--- include/llvm/Instruction.def        2 Nov 2006 01:53:58 -0000       1.21
+++ include/llvm/Instruction.def        4 Nov 2006 00:19:05 -0000
@@ -13,12 +13,12 @@
 //
 //===----------------------------------------------------------------------===//

 // NOTE: NO INCLUDE GUARD DESIRED!

-// Provide definitions of macros so that users of this file do not have to define
-// everything to use it...
+// Provide definitions of macros so that users of this file do not have to
+// define everything to use it...
 //
 #ifndef FIRST_TERM_INST
 #define FIRST_TERM_INST(num)
 #endif
 #ifndef HANDLE_TERM_INST
@@ -127,20 +127,21 @@ HANDLE_MEMORY_INST(30, GetElementPtr, Ge
 // Other operators...
 FIRST_OTHER_INST(31)
 HANDLE_OTHER_INST(31, PHI    , PHINode    )  // PHI node instruction
 HANDLE_OTHER_INST(32, Cast   , CastInst   )  // Type cast
 HANDLE_OTHER_INST(33, Call   , CallInst   )  // Call a function
-HANDLE_OTHER_INST(34, Shl    , ShiftInst  )  // Shift operations
-HANDLE_OTHER_INST(35, Shr    , ShiftInst  )
-HANDLE_OTHER_INST(36, Select , SelectInst )  // select instruction
-HANDLE_OTHER_INST(37, UserOp1, Instruction)  // May be used internally in a pass
-HANDLE_OTHER_INST(38, UserOp2, Instruction)
-HANDLE_OTHER_INST(39, VAArg  , VAArgInst  )  // vaarg instruction
-HANDLE_OTHER_INST(40, ExtractElement, ExtractElementInst)// extract from vector.
-HANDLE_OTHER_INST(41, InsertElement, InsertElementInst)  // insert into vector
-HANDLE_OTHER_INST(42, ShuffleVector, ShuffleVectorInst)  // shuffle two vectors.
-  LAST_OTHER_INST(42)
+HANDLE_OTHER_INST(34, Shl    , ShiftInst  )  // Shift Left operations (logical)
+HANDLE_OTHER_INST(35, LShr   , ShiftInst  )  // Logical Shift right (unsigned)
+HANDLE_OTHER_INST(36, AShr   , ShiftInst  )  // Arithmetic shift right (signed)
+HANDLE_OTHER_INST(37, Select , SelectInst )  // select instruction
+HANDLE_OTHER_INST(38, UserOp1, Instruction)  // May be used internally in a pass
+HANDLE_OTHER_INST(39, UserOp2, Instruction)  // Internal to passes only
+HANDLE_OTHER_INST(40, VAArg  , VAArgInst  )  // vaarg instruction
+HANDLE_OTHER_INST(41, ExtractElement, ExtractElementInst)// extract from vector.
+HANDLE_OTHER_INST(42, InsertElement, InsertElementInst)  // insert into vector
+HANDLE_OTHER_INST(43, ShuffleVector, ShuffleVectorInst)  // shuffle two vectors.
+  LAST_OTHER_INST(43)

 #undef  FIRST_TERM_INST
 #undef HANDLE_TERM_INST
 #undef   LAST_TERM_INST

Index: include/llvm/Instructions.h
===================================================================
RCS file: /var/cvs/llvm/llvm/include/llvm/Instructions.h,v
retrieving revision 1.44
diff -t -d -u -p -5 -r1.44 Instructions.h
--- include/llvm/Instructions.h 5 Oct 2006 06:24:58 -0000       1.44
+++ include/llvm/Instructions.h 4 Nov 2006 00:19:06 -0000
@@ -602,11 +602,12 @@ class ShiftInst : public Instruction {
    : Instruction(SI.getType(), SI.getOpcode(), Ops, 2) {
    Ops[0].init(SI.Ops[0], this);
    Ops[1].init(SI.Ops[1], this);
  }
  void init(OtherOps Opcode, Value *S, Value *SA) {
-    assert((Opcode == Shl || Opcode == Shr) && "ShiftInst Opcode invalid!");
+    assert((Opcode == Shl || Opcode == LShr || Opcode == AShr) &&
+      "ShiftInst Opcode invalid!");
    Ops[0].init(S, this);
    Ops[1].init(SA, this);
  }

 public:
@@ -650,11 +651,12 @@ public:
  virtual ShiftInst *clone() const;

  // Methods for support type inquiry through isa, cast, and dyn_cast:
  static inline bool classof(const ShiftInst *) { return true; }
  static inline bool classof(const Instruction *I) {
-    return (I->getOpcode() == Instruction::Shr) |
+    return (I->getOpcode() == Instruction::LShr) |
+           (I->getOpcode() == Instruction::AShr) |
           (I->getOpcode() == Instruction::Shl);
  }
  static inline bool classof(const Value *V) {
    return isa<Instruction>(V) && classof(cast<Instruction>(V));
  }
Index: include/llvm/Support/PatternMatch.h
===================================================================
RCS file: /var/cvs/llvm/llvm/include/llvm/Support/PatternMatch.h,v
retrieving revision 1.11
diff -t -d -u -p -5 -r1.11 PatternMatch.h
--- include/llvm/Support/PatternMatch.h 2 Nov 2006 01:53:58 -0000       1.11
+++ include/llvm/Support/PatternMatch.h 4 Nov 2006 00:19:06 -0000
@@ -170,13 +170,19 @@ inline BinaryOp_match<LHS, RHS, Instruct
                      ShiftInst> m_Shl(const LHS &L, const RHS &R) {
  return BinaryOp_match<LHS, RHS, Instruction::Shl, ShiftInst>(L, R);
 }

 template<typename LHS, typename RHS>
-inline BinaryOp_match<LHS, RHS, Instruction::Shr,
-                      ShiftInst> m_Shr(const LHS &L, const RHS &R) {
-  return BinaryOp_match<LHS, RHS, Instruction::Shr, ShiftInst>(L, R);
+inline BinaryOp_match<LHS, RHS, Instruction::LShr,
+                      ShiftInst> m_LShr(const LHS &L, const RHS &R) {
+  return BinaryOp_match<LHS, RHS, Instruction::LShr, ShiftInst>(L, R);
+}
+
+template<typename LHS, typename RHS>
+inline BinaryOp_match<LHS, RHS, Instruction::AShr,
+                      ShiftInst> m_AShr(const LHS &L, const RHS &R) {
+  return BinaryOp_match<LHS, RHS, Instruction::AShr, ShiftInst>(L, R);
 }

 //===----------------------------------------------------------------------===//
 // Matchers for binary classes
 //
Index: lib/Analysis/IPA/Andersens.cpp
===================================================================
RCS file: /var/cvs/llvm/llvm/lib/Analysis/IPA/Andersens.cpp,v
retrieving revision 1.34
diff -t -d -u -p -5 -r1.34 Andersens.cpp
--- lib/Analysis/IPA/Andersens.cpp      2 Nov 2006 20:25:49 -0000       1.34
+++ lib/Analysis/IPA/Andersens.cpp      4 Nov 2006 00:19:07 -0000
@@ -782,11 +782,12 @@ void Andersens::visitInstruction(Instruc
  case Instruction::Switch:
  case Instruction::Unwind:
  case Instruction::Unreachable:
  case Instruction::Free:
  case Instruction::Shl:
-  case Instruction::Shr:
+  case Instruction::LShr:
+  case Instruction::AShr:
    return;
  default:
    // Is this something we aren't handling yet?
    std::cerr << "Unknown instruction: " << I;
    abort();
Index: lib/AsmParser/Lexer.cpp.cvs
===================================================================
RCS file: /var/cvs/llvm/llvm/lib/AsmParser/Lexer.cpp.cvs,v
retrieving revision 1.13
diff -t -d -u -p -5 -r1.13 Lexer.cpp.cvs
--- lib/AsmParser/Lexer.cpp.cvs 2 Nov 2006 20:25:49 -0000       1.13
+++ lib/AsmParser/Lexer.cpp.cvs 4 Nov 2006 00:19:08 -0000
@@ -18,11 +18,11 @@

 #line 20 "Lexer.cpp"
 /* A lexical scanner generated by flex*/

 /* Scanner skeleton version:
- * $Header: /var/cvs/llvm/llvm/lib/AsmParser/Lexer.cpp.cvs,v 1.13 2006/11/02 20:25:49 reid Exp $
+ * $Header: /home/daffy/u0/vern/flex/RCS/flex.skl,v 2.91 96/09/10 16:58:48 vern Exp $
 */

 #define FLEX_SCANNER
 #define YY_FLEX_MAJOR_VERSION 2
 #define YY_FLEX_MINOR_VERSION 5
@@ -315,98 +315,99 @@ static void yy_fatal_error YY_PROTO(( yy
        yyleng = (int) (yy_cp - yy_bp); \
        yy_hold_char = *yy_cp; \
        *yy_cp = '\0'; \
        yy_c_buf_p = yy_cp;

-#define YY_NUM_RULES 120
-#define YY_END_OF_BUFFER 121
-static yyconst short int yy_acclist[198] =
+#define YY_NUM_RULES 122
+#define YY_END_OF_BUFFER 123
+static yyconst short int yy_acclist[200] =
    {   0,
-      121,  119,  120,  118,  119,  120,  118,  120,  119,  120,
-      119,  120,  119,  120,  119,  120,  119,  120,  119,  120,
-      111,  119,  120,  111,  119,  120,    1,  119,  120,  119,
-      120,  119,  120,  119,  120,  119,  120,  119,  120,  119,
-      120,  119,  120,  119,  120,  119,  120,  119,  120,  119,
-      120,  119,  120,  119,  120,  119,  120,  119,  120,  119,
-      120,  119,  120,  119,  120,  119,  120,  119,  120,  119,
-      120,  110,  108,  107,  107,  114,  112,  116,  111,    1,
-       93,   41,   75,   23,  110,  107,  107,  115,  116,   20,
-      116,  117,   63,   74,   39,   34,   42,   66,    3,   54,
+      123,  121,  122,  120,  121,  122,  120,  122,  121,  122,
+      121,  122,  121,  122,  121,  122,  121,  122,  121,  122,
+      113,  121,  122,  113,  121,  122,    1,  121,  122,  121,
+      122,  121,  122,  121,  122,  121,  122,  121,  122,  121,
+      122,  121,  122,  121,  122,  121,  122,  121,  122,  121,
+      122,  121,  122,  121,  122,  121,  122,  121,  122,  121,
+      122,  121,  122,  121,  122,  121,  122,  121,  122,  121,
+      122,  112,  110,  109,  109,  116,  114,  118,  113,    1,
+       95,   41,   75,   23,  112,  109,  109,  117,  118,   20,
+      118,  119,   63,   74,   39,   34,   42,   66,    3,   54,

-       65,   25,   83,   70,   92,   87,   88,   64,   76,  109,
-      116,  116,   49,   84,   85,   69,  100,   73,  101,   56,
-       22,  113,   68,   72,   26,    4,   61,   67,   55,   71,
-       48,   11,  116,   36,    2,    5,   58,   60,   50,   78,
-       82,   80,   81,   79,   77,   52,  102,   51,   57,   21,
-       90,   99,   45,   59,   30,   24,   44,    7,   95,   33,
-       98,   38,   62,   86,   94,   27,   28,   96,   53,   91,
-       89,   43,    6,   29,   37,    8,   17,    9,   10,   35,
-       12,   14,   13,   32,   40,   15,   31,   97,  103,  105,
-      106,   16,   46,  104,   18,   47,   19
+       65,   25,   83,   70,   94,   87,   88,   64,   76,  111,
+      118,  118,   90,   49,   84,   85,   69,  102,   73,  103,
+       56,   89,   22,  115,   68,   72,   26,    4,   61,   67,
+       55,   71,   48,   11,  118,   36,    2,    5,   58,   60,
+       50,   78,   82,   80,   81,   79,   77,   52,  104,   51,
+       57,   21,   92,  101,   45,   59,   30,   24,   44,    7,
+       97,   33,  100,   38,   62,   86,   96,   27,   28,   98,
+       53,   93,   91,   43,    6,   29,   37,    8,   17,    9,
+       10,   35,   12,   14,   13,   32,   40,   15,   31,   99,
+      105,  107,  108,   16,   46,  106,   18,   47,   19

    } ;

-static yyconst short int yy_accept[527] =
+static yyconst short int yy_accept[532] =
    {   0,
        1,    1,    1,    2,    4,    7,    9,   11,   13,   15,
       17,   19,   21,   24,   27,   30,   32,   34,   36,   38,
       40,   42,   44,   46,   48,   50,   52,   54,   56,   58,
       60,   62,   64,   66,   68,   70,   72,   72,   73,   73,
       74,   75,   76,   77,   77,   78,   78,   79,   80,   80,
       81,   81,   81,   81,   81,   81,   81,   81,   81,   82,
       82,   83,   83,   83,   83,   83,   83,   83,   83,   83,
       83,   83,   83,   83,   83,   83,   83,   83,   83,   83,
-       83,   83,   83,   83,   83,   83,   83,   83,   84,   84,
+       83,   83,   83,   83,   83,   83,   83,   83,   83,   84,
       84,   84,   84,   84,   84,   84,   84,   84,   84,   84,

-       84,   84,   84,   85,   85,   85,   85,   85,   85,   85,
-       85,   85,   85,   85,   85,   85,   85,   85,   85,   86,
-       87,   89,   90,   91,   92,   92,   93,   94,   94,   94,
-       95,   95,   96,   96,   97,   97,   97,   97,   98,   98,
-       98,   98,   98,   98,   98,   99,   99,   99,  100,  100,
+       84,   84,   84,   84,   85,   85,   85,   85,   85,   85,
+       85,   85,   85,   85,   85,   85,   85,   85,   85,   85,
+       86,   87,   89,   90,   91,   92,   92,   93,   94,   94,
+       94,   95,   95,   95,   96,   96,   97,   97,   97,   97,
+       98,   98,   98,   98,   98,   98,   98,   99,   99,   99,
      100,  100,  100,  100,  100,  100,  100,  100,  100,  100,
-      101,  101,  101,  101,  101,  101,  101,  101,  101,  102,
-      103,  103,  103,  104,  104,  105,  106,  106,  106,  106,
-      106,  106,  106,  107,  107,  108,  108,  108,  108,  108,
-      109,  109,  109,  109,  109,  109,  109,  109,  109,  109,
+      100,  100,  101,  101,  101,  101,  101,  101,  101,  101,
+      101,  101,  102,  103,  103,  103,  104,  104,  105,  106,
+      106,  106,  106,  106,  106,  106,  107,  107,  108,  108,
+      108,  108,  108,  109,  109,  109,  109,  109,  109,  109,

      109,  109,  109,  109,  109,  109,  109,  109,  109,  109,
-      109,  109,  109,  109,  110,  110,  111,  112,  112,  112,
-      112,  113,  113,  113,  113,  113,  114,  115,  116,  116,
-      116,  116,  116,  116,  116,  116,  116,  116,  116,  116,
-      116,  116,  116,  116,  117,  117,  118,  119,  119,  119,
-      119,  119,  119,  119,  119,  119,  119,  120,  121,  121,
-      121,  122,  122,  122,  123,  123,  124,  124,  124,  124,
-      124,  124,  124,  124,  124,  124,  125,  125,  125,  126,
-      126,  126,  127,  128,  128,  129,  130,  130,  130,  130,
-      130,  130,  131,  131,  131,  131,  131,  132,  132,  133,
+      109,  109,  109,  109,  109,  109,  109,  110,  110,  111,
+      112,  112,  112,  112,  113,  113,  113,  113,  114,  114,
+      115,  116,  117,  117,  117,  117,  117,  117,  117,  117,
+      117,  117,  117,  117,  117,  117,  117,  117,  118,  118,
+      119,  120,  120,  120,  120,  120,  120,  120,  120,  120,
+      120,  121,  122,  123,  123,  123,  124,  124,  124,  125,
+      125,  126,  126,  126,  126,  126,  126,  126,  126,  126,
+      126,  127,  127,  127,  128,  128,  128,  129,  130,  130,
+      131,  132,  132,  132,  132,  132,  132,  133,  133,  133,

-      133,  133,  134,  135,  135,  135,  136,  136,  136,  136,
-      136,  136,  136,  136,  136,  136,  136,  136,  136,  136,
-      137,  137,  138,  138,  138,  138,  138,  138,  138,  139,
-      139,  139,  139,  139,  139,  139,  140,  140,  140,  141,
-      142,  143,  144,  145,  146,  147,  147,  147,  148,  148,
-      148,  148,  149,  150,  151,  151,  151,  151,  151,  151,
-      152,  152,  152,  152,  152,  152,  153,  153,  154,  154,
-      154,  154,  154,  154,  154,  154,  155,  156,  157,  157,
-      157,  158,  158,  159,  159,  159,  159,  160,  160,  161,
-      162,  163,  164,  164,  164,  165,  165,  165,  166,  167,
+      133,  133,  134,  134,  135,  135,  135,  136,  137,  137,
+      137,  138,  138,  138,  138,  138,  138,  138,  138,  138,
+      138,  138,  138,  138,  138,  139,  139,  140,  140,  140,
+      140,  140,  140,  140,  141,  141,  141,  141,  141,  141,
+      141,  142,  142,  142,  143,  144,  145,  146,  147,  148,
+      149,  149,  149,  150,  150,  150,  150,  151,  152,  153,
+      153,  153,  153,  153,  153,  154,  154,  154,  154,  154,
+      154,  155,  155,  156,  156,  156,  156,  156,  156,  156,
+      156,  157,  158,  159,  159,  159,  160,  160,  161,  161,
+      161,  161,  162,  162,  163,  164,  165,  166,  166,  166,

-      168,  168,  168,  169,  170,  171,  172,  172,  172,  172,
-      172,  172,  172,  173,  173,  174,  175,  175,  175,  175,
-      175,  175,  175,  175,  175,  175,  175,  175,  176,  176,
-      176,  176,  176,  176,  176,  176,  176,  176,  177,  177,
-      177,  177,  177,  178,  178,  178,  178,  178,  179,  180,
-      180,  180,  180,  180,  180,  181,  181,  181,  181,  182,
-      182,  183,  184,  184,  184,  184,  184,  184,  184,  184,
-      184,  184,  184,  184,  184,  184,  185,  185,  185,  185,
-      185,  185,  185,  185,  186,  186,  186,  186,  186,  186,
-      187,  187,  187,  187,  187,  188,  188,  188,  189,  189,
+      167,  167,  167,  168,  169,  170,  170,  170,  171,  172,
+      173,  174,  174,  174,  174,  174,  174,  174,  175,  175,
+      176,  177,  177,  177,  177,  177,  177,  177,  177,  177,
+      177,  177,  177,  178,  178,  178,  178,  178,  178,  178,
+      178,  178,  178,  179,  179,  179,  179,  179,  180,  180,
+      180,  180,  180,  181,  182,  182,  182,  182,  182,  182,
+      183,  183,  183,  183,  184,  184,  185,  186,  186,  186,
+      186,  186,  186,  186,  186,  186,  186,  186,  186,  186,
+      186,  187,  187,  187,  187,  187,  187,  187,  187,  188,
+      188,  188,  188,  188,  188,  189,  189,  189,  189,  189,

-      189,  189,  189,  189,  189,  189,  189,  189,  189,  189,
-      189,  189,  190,  190,  191,  192,  193,  193,  194,  194,
-      195,  196,  197,  197,  198,  198
+      190,  190,  190,  191,  191,  191,  191,  191,  191,  191,
+      191,  191,  191,  191,  191,  191,  191,  192,  192,  193,
+      194,  195,  195,  196,  196,  197,  198,  199,  199,  200,
+      200
    } ;

 static yyconst int yy_ec[256] =
    {   0,
        1,    1,    1,    1,    1,    1,    1,    1,    2,    3,
@@ -446,269 +447,273 @@ static yyconst int yy_meta[44] =
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3,    3,    3,    3,    3,    3,    3,    3,
        3,    3,    3
    } ;

-static yyconst short int yy_base[531] =
+static yyconst short int yy_base[536] =
    {   0,
-        0,    0, 1140, 1141, 1141, 1141, 1135, 1124,   36,   40,
+        0,    0, 1150, 1151, 1151, 1151, 1145, 1134,   36,   40,
       44,   50,   56,   62,    0,   63,   66,   81,   89,   47,
      100,   97,   76,   96,  111,   49,  113,  110,   68,  140,
-      126,  171,  119,  118,  139,  133, 1133, 1141, 1122, 1141,
-        0,  176,  184,  199,  204,   70,  209,  224,  229,    0,
-      117,  130,  150,   72,  160,  151,  159,  123, 1121,  230,
-      178,   31,   69,  168,  240,   95,  233,  165,  241,  243,
-      242,  156,  244,  246,  187,  251,  253,  254,  211,  258,
-      256,  263,  260,  265,  190,  267,  283, 1120,  271,  274,
-      270,  285,  289,  290,  291,  292,  294,  295,  297,  299,
+      126,  171,  119,  130,  142,  150, 1143, 1151, 1132, 1151,
+        0,  159,  176,  199,  204,   70,  209,  224,  229,    0,
+      117,  165,  143,   72,  169,  127,  176,  215, 1131,  168,
+      182,   31,   69,  191,  240,   95,  230,  217,  162,  242,
+      246,  243,  244,  248,  250,  251,  252,  253,  210,  260,
+      267,  133,  255,  258,  264,  263,  274,  280, 1130,  281,
+      282,  287,  288,  290,  291,  293,  296,  297,  292,  306,

-      296,  308, 1119,  311,  300,  318,  320,  322,  323,  330,
-      325,  328,  327,  337,  342,  216,  336,  345, 1118,    0,
-      362,  366, 1117,  380,  397,    0, 1116,  370,  349, 1115,
-      373, 1114,  355, 1113,  371,  372,  384, 1112,  392,  326,
-      399,  398,  401,  402, 1111,  405,  404,  406,  411,  412,
-      409,  413,  415,  422,  423,  425,  424,  426,  428,  429,
-      435,  442,  374,  443,  444,  445,  446,  447, 1110, 1109,
-      448,  449, 1108,  450, 1107, 1106,  476,  454,  455,  464,
-      459,  488, 1105,  470, 1104,  490,  489,  460,  492, 1103,
-      493,  494,  495,  496,  501,  502,  504,  507,  508,  512,
+      307,  299,  309, 1129,  319,  302,  298,  323,  325,  327,
+      331,  328,  329,  346,  334,  333,  213,  335,  340, 1128,
+        0,  368,  372, 1127,  386,  403,    0, 1126,  348,  354,
+     1125,  353,  355, 1124,  360, 1123,  377,  378,  387, 1122,
+      380,  390,  398,  374,  391,  394, 1121,  404,  405,  408,
+      414,  415,  416,  418,  419,  420,  426,  422,  427,  428,
+      430,  437,  429,  440,  434,  432,  445,  450,  451,  452,
+      454, 1120, 1119,  456,  457, 1118,  458, 1117, 1116,  483,
+      460,  459,  464,  465,  494, 1115,  476, 1114,  463,  495,
+      496,  498, 1113,  499,  500,  502,  501,  507,  508,  506,

-      514,  517,  519,  520,  521,  518,  457,  522,  526,  530,
-      539,  540,  541, 1102,  524, 1141,  550,  564,  568,  572,
-      577,  578,  458,  579,  580, 1101, 1100, 1099,  581,  582,
-      583,  584,  550,  585,  525,  586,  589,  551,  590,  587,
-      607,  591,  594, 1098,  592, 1097, 1096,  603,  611,  610,
-      593,  613,  617,  620,  621,  622, 1095, 1094,  623,  625,
-     1093,  624,  626,    0,  627, 1092,  629,  638,  630,  643,
-      644,  646,  628,  647,  654, 1091,  656,  661, 1090,  660,
-      658, 1089, 1088,  662, 1087, 1086,  659,  664,  672,  675,
-      676, 1085,  677,  678,  679,  681, 1084,  682, 1083,  684,
+      510,  514,  521,  518,  523,  524,  526,  525,  528,  531,
+      530,  534,  462,  542,  544,  545, 1112,  532, 1151,  556,
+      570,  574,  578,  583,  584,  585,  586, 1111,  587, 1110,
+     1109, 1108,  588,  589,  590,  591,  556,  594,  593,  598,
+      596,  557,  597,  600,  605,  599,  602, 1107,  615, 1106,
+     1105,  617,  618,  619,  622,  624,  625,  626,  629,  627,
+     1104, 1103, 1102,  630,  631, 1101,  633,  635,    0,  640,
+     1100,  637,  644,  634,  652,  653,  655,  636,  656,  660,
+     1099,  663,  667, 1098,  668,  665, 1097, 1096,  670, 1095,
+     1094,  671,  673,  678,  681,  684, 1093,  685,  687,  688,

-      683,  690, 1082,  692,  695, 1081,  700,  704,  710,  711,
-      691,  713,  701,  702,  714,  715,  718,  722,  724, 1080,
-      726, 1079,  725,  727,  728,  729,  730,  736, 1078,  737,
-      740,  743,  746,  748,  751, 1077,  735,  738, 1076, 1075,
-     1074, 1073, 1072, 1071, 1070,  756,  758, 1069,  762,  759,
-      763, 1068, 1067, 1066,  764,  766,  767,  765,  769, 1065,
-      770,  776,  778,  777,  779, 1064,  781, 1063,  784,  785,
-      786,  790,  791,  797,  798, 1062, 1061, 1060,  802,  795,
-     1059,  803, 1058,  808,  811,  804, 1057,  805, 1056, 1055,
-     1054, 1053,  810,  821, 1052,  823,  824, 1051, 1050, 1049,
+      689, 1092,  690, 1091,  692,  694,  699, 1090,  700,  703,
+     1089,  710,  704,  712,  715,  718,  721,  722,  723,  724,
+      726,  725,  728,  729, 1088,  730, 1087,  731,  732,  734,
+      735,  738,  744, 1086,  746,  751,  749,  752,  757,  759,
+     1085,  754,  762, 1084, 1083, 1082, 1081, 1080, 1079, 1078,
+      764,  765, 1077,  548,  767,  769, 1076, 1075, 1074,  770,
+      773,  774,  771,  776, 1073,  777,  783,  781,  784,  788,
+     1072,  789, 1071,  791,  792,  795,  797,  798,  801,  803,
+     1070, 1069, 1068,  809,  804, 1067,  810, 1066,  815,  816,
+      812, 1065,  811, 1064, 1063, 1062, 1061,  822,  828, 1060,

-      822,  825, 1048, 1047, 1046, 1045,  826,  827,  828,  829,
-      830,  833, 1044,  839, 1043, 1042,  840,  843,  844,  845,
-      846,  850,  848,  851,  852,  853,  854, 1041,  858,  863,
-      868,  869,  871,  875,  877,  878,  879, 1040,  881,  885,
-      886,  882, 1037,  887,  889,  888,  894, 1028, 1026,  897,
-      895,  892,  900,  907, 1025,  912,  916,  914, 1024,  917,
-     1023, 1021,  918,  920,  922,  925,  926,  924,  928,  931,
-      933,  932,  934,  936,  938, 1020,  941,  944,  937,  948,
-      949,  950,  952, 1019,  957,  961,  962,  963,  964, 1018,
-      965,  966,  967,  968, 1013,  969,  972, 1010,  973,  976,
+      829,  830, 1059, 1058, 1057,  831,  834, 1056, 1055, 1054,
+     1053,  832,  833,  841,  835,  836,  837, 1052,  839, 1051,
+     1050,  842,  850,  851,  852,  856,  859,  858,  854,  861,
+      864,  862, 1049,  866,  870,  878,  880,  872,  874,  882,
+      886,  887, 1048,  888,  890,  892,  893, 1047,  895,  894,
+      896,  899, 1046, 1045,  901,  907,  917,  903,  900, 1042,
+      920,  921,  922, 1033,  905, 1032, 1030,  925,  923,  929,
+      931,  933,  934,  937,  938,  940,  939,  941,  942,  943,
+     1029,  945,  950,  951,  955,  947,  958,  960, 1027,  962,
+      964,  965,  969,  971, 1026,  968,  972,  974,  975, 1025,

-      982,  984,  990,  991,  992,  993,  994,  996,  997,  998,
-      999, 1006, 1000,  896,  893,  633, 1005,  632, 1007,  385,
-      354,  353, 1008,  301, 1141, 1043, 1045,  226, 1049,  166
+      976,  979, 1024,  981,  982,  985,  990,  993,  997,  999,
+     1000, 1001, 1003, 1004, 1002, 1005, 1020, 1006, 1018, 1016,
+      904, 1012,  693, 1008,  469,  468,  466, 1013,  358, 1151,
+     1048, 1050,  265, 1054,  134
    } ;

-static yyconst short int yy_def[531] =
+static yyconst short int yy_def[536] =
    {   0,
-      525,    1,  525,  525,  525,  525,  526,  527,  528,  525,
-      527,  527,  527,  527,  529,  527,  527,  527,  527,  527,
-      527,  527,  527,  527,  527,  527,  527,  527,  527,  527,
-      527,  527,  527,  527,  527,  527,  526,  525,  527,  525,
-      530,  530,  525,  525,  527,  527,  527,  527,  527,  529,
-      527,  527,  527,  527,  527,  527,  527,  527,  527,  527,
-      527,  527,  527,  527,  527,  527,  527,  527,  527,  527,
-      527,  527,  527,  527,  527,  527,  527,  527,  527,  527,
-      527,  527,  527,  527,  527,  527,  527,  527,  527,  527,
-      527,  527,  527,  527,  527,  527,  527,  527,  527,  527,
+      530,    1,  530,  530,  530,  530,  531,  532,  533,  530,
+      532,  532,  532,  532,  534,  532,  532,  532,  532,  532,
+      532,  532,  532,  532,  532,  532,  532,  532,  532,  532,
+      532,  532,  532,  532,  532,  532,  531,  530,  532,  530,
+      535,  535,  530,  530,  532,  532,  532,  532,  532,  534,
+      532,  532,  532,  532,  532,  532,  532,  532,  532,  532,
+      532,  532,  532,  532,  532,  532,  532,  532,  532,  532,
+      532,  532,  532,  532,  532,  532,  532,  532,  532,  532,
+      532,  532,  532,  532,  532,  532,  532,  532,  532,  532,
+      532,  532,  532,  532,  532,  532,  532,  532,  532,  532,

-      527,  527,  527,  527,  527,  527,  527,  527,  527,  527,
-      527,  527,  527,  527,  527,  527,  527,  527,  525,  530,
-      530,  525,  527,  527,  527,   49,  527,  527,  527,  527,
-      527,  527,  527,  527,  527,  527,  527,  527,  527,  527,
-      527,  527,  527,  527,  527,  527,  527,  527,  527,  527,
-      527,  527,  527,  527,  527,  527,  527,  527,  527,  527,
-      527,  527,  527,  527,  527,  527,  527,  527,  527,  527,
-      527,  527,  527,  527,  527,  527,   49,  527,  527,  527,
-      527,  527,  527,  527,  527,  527,  527,  527,  527,  527,
-      527,  527,  527,  527,  527,  527,  527,  527,  527,  527,
+      532,  532,  532,  532,  532,  532,  532,  532,  532,  532,
+      532,  532,  532,  532,  532,  532,  532,  532,  532,  530,
+      535,  535,  530,  532,  532,  532,   49,  532,  532,  532,
+      532,  532,  532,  532,  532,  532,  532,  532,  532,  532,
+      532,  532,  532,  532,  532,  532,  532,  532,  532,  532,
+      532,  532,  532,  532,  532,  532,  532,  532,  532,  532,
+      532,  532,  532,  532,  532,  532,  532,  532,  532,  532,
+      532,  532,  532,  532,  532,  532,  532,  532,  532,   49,
+      532,  532,  532,  532,  532,  532,  532,  532,  532,  532,
+      532,  532,  532,  532,  532,  532,  532,  532,  532,  532,

-      527,  527,  527,  527,  527,  527,  527,  527,  527,  527,
-      527,  527,  527,  527,  527,  525,  525,  525,  525,  527,
-      527,  527,  527,  527,  527,  527,  527,  527,  527,  527,
-      527,  527,  527,  527,  527,  527,  527,  527,  527,  527,
-      527,  527,  527,  527,  527,  527,  527,  527,  527,  527,
-      527,  527,  527,  527,  527,  527,  527,  527,  527,  527,
-      527,  527,  527,  177,  527,  527,  527,  527,  527,  527,
-      527,  527,  527,  527,  527,  527,  527,  527,  527,  527,
-      527,  527,  527,  527,  527,  527,  527,  527,  527,  527,
-      527,  527,  527,  527,  527,  527,  527,  527,  527,  527,
+      532,  532,  532,  532,  532,  532,  532,  532,  532,  532,
+      532,  532,  532,  532,  532,  532,  532,  532,  530,  530,
+      530,  530,  532,  532,  532,  532,  532,  532,  532,  532,
+      532,  532,  532,  532,  532,  532,  532,  532,  532,  532,
+      532,  532,  532,  532,  532,  532,  532,  532,  532,  532,
+      532,  532,  532,  532,  532,  532,  532,  532,  532,  532,
+      532,  532,  532,  532,  532,  532,  532,  532,  180,  532,
+      532,  532,  532,  532,  532,  532,  532,  532,  532,  532,
+      532,  532,  532,  532,  532,  532,  532,  532,  532,  532,
+      532,  532,  532,  532,  532,  532,  532,  532,  532,  532,

-      527,  525,  527,  527,  527,  527,  527,  527,  527,  527,
-      527,  527,  527,  527,  527,  527,  527,  527,  527,  527,
-      527,  527,  527,  527,  527,  527,  527,  527,  527,  527,
-      527,  527,  527,  527,  527,  527,  527,  527,  527,  527,
-      527,  527,  527,  527,  527,  527,  527,  527,  527,  527,
-      527,  527,  527,  527,  527,  527,  527,  527,  527,  527,
-      527,  527,  527,  527,  527,  527,  527,  527,  527,  527,
-      527,  527,  527,  527,  527,  527,  527,  527,  527,  527,
-      527,  527,  527,  527,  527,  527,  527,  527,  527,  527,
-      527,  527,  527,  527,  527,  527,  527,  527,  527,  527,
+      532,  532,  532,  532,  532,  532,  530,  532,  532,  532,
+      532,  532,  532,  532,  532,  532,  532,  532,  532,  532,
+      532,  532,  532,  532,  532,  532,  532,  532,  532,  532,
+      532,  532,  532,  532,  532,  532,  532,  532,  532,  532,
+      532,  532,  532,  532,  532,  532,  532,  532,  532,  532,
+      532,  532,  532,  532,  532,  532,  532,  532,  532,  532,
+      532,  532,  532,  532,  532,  532,  532,  532,  532,  532,
+      532,  532,  532,  532,  532,  532,  532,  532,  532,  532,
+      532,  532,  532,  532,  532,  532,  532,  532,  532,  532,
+      532,  532,  532,  532,  532,  532,  532,  532,  532,  532,

-      527,  527,  527,  527,  527,  527,  527,  527,  527,  527,
-      527,  527,  527,  527,  527,  527,  527,  527,  527,  527,
-      527,  527,  527,  527,  527,  527,  527,  527,  527,  527,
-      527,  527,  527,  527,  527,  527,  527,  527,  527,  527,
-      527,  527,  527,  527,  527,  527,  527,  527,  527,  527,
-      527,  527,  527,  527,  527,  527,  527,  527,  527,  527,
-      527,  527,  527,  527,  527,  527,  527,  527,  527,  527,
-      527,  527,  527,  527,  527,  527,  527,  527,  527,  527,
-      527,  527,  527,  527,  527,  527,  527,  527,  527,  527,
-      527,  527,  527,  527,  527,  527,  527,  527,  527,  527,
+      532,  532,  532,  532,  532,  532,  532,  532,  532,  532,
+      532,  532,  532,  532,  532,  532,  532,  532,  532,  532,
+      532,  532,  532,  532,  532,  532,  532,  532,  532,  532,
+      532,  532,  532,  532,  532,  532,  532,  532,  532,  532,
+      532,  532,  532,  532,  532,  532,  532,  532,  532,  532,
+      532,  532,  532,  532,  532,  532,  532,  532,  532,  532,
+      532,  532,  532,  532,  532,  532,  532,  532,  532,  532,
+      532,  532,  532,  532,  532,  532,  532,  532,  532,  532,
+      532,  532,  532,  532,  532,  532,  532,  532,  532,  532,
+      532,  532,  532,  532,  532,  532,  532,  532,  532,  532,

-      527,  527,  527,  527,  527,  527,  527,  527,  527,  527,
-      527,  527,  527,  527,  527,  527,  527,  527,  527,  527,
-      527,  527,  527,  527,    0,  525,  525,  525,  525,  525
+      532,  532,  532,  532,  532,  532,  532,  532,  532,  532,
+      532,  532,  532,  532,  532,  532,  532,  532,  532,  532,
+      532,  532,  532,  532,  532,  532,  532,  532,  532,    0,
+      530,  530,  530,  530,  530
    } ;

-static yyconst short int yy_nxt[1185] =
+static yyconst short int yy_nxt[1195] =
    {   0,
        4,    5,    6,    7,    8,    9,   10,   11,   12,   13,
       14,   14,   14,    4,   15,    8,    8,    8,   16,   17,
       18,   19,   20,   21,   22,    8,   23,    8,   24,   25,
       26,   27,   28,    8,   29,   30,   31,   32,   33,   34,
       35,    8,   36,   42,   40,   43,   43,   43,   43,   44,
-       44,   44,   44,   45,   45,   45,   45,   40,   46,  139,
-       40,  140,   40,   40,   47,   48,   48,   48,   48,   40,
-       47,   48,   48,   48,   48,   40,   40,   69,  123,   40,
-       85,   40,   40,   40,   51,   40,   86,   70,   56,   40,
-       91,   52,   57,   53,   40,   54,   49,   58,   55,   60,
+       44,   44,   44,   45,   45,   45,   45,   40,   46,  141,
+       40,  142,   40,   40,   47,   48,   48,   48,   48,   40,
+       47,   48,   48,   48,   48,   40,   40,   69,  124,   40,
+       86,   40,   40,   40,   51,   40,   87,   70,   56,   40,
+       92,   52,   57,   53,   40,   54,   49,   58,   55,   60,

-       59,   61,   40,  141,  131,   77,   78,   64,   40,   40,
+       59,   61,   40,  143,  132,   77,   78,   64,   40,   40,
       40,   65,   62,   40,   79,   66,   63,   67,   71,   75,
-       68,   72,   80,   40,   40,   76,   40,   81,   73,   82,
-       40,   40,   40,  145,   74,   89,   40,  113,  127,   40,
-      115,   90,   83,   40,  102,   87,   40,   88,   84,   92,
-      114,  116,   40,   40,  135,  118,  128,  103,  129,   93,
-      104,   94,   95,   40,   40,   96,   97,  105,  120,   40,
-      117,  130,   40,   40,   98,  133,   99,  100,   40,  101,
-       92,   40,  153,  134,   40,  121,  121,  121,  121,  132,
-      106,   40,  107,   43,   43,   43,   43,  108,  138,  109,
+       68,   72,   80,   40,   40,   76,   40,   81,   73,   83,
+       40,   82,   40,  147,   74,   90,  121,  114,  128,   40,
+       40,   91,   84,   40,  103,   88,   40,   89,   85,   93,
+      115,  135,  116,   40,  117,   40,   40,  104,  169,   94,
+      105,   95,   96,   40,  131,   97,   98,  106,  122,  122,
+      122,  122,  119,  118,   99,   40,  100,  101,   40,  102,
+       93,   40,   40,  150,   40,   43,   43,   43,   43,   40,
+      107,  129,  108,  130,  133,   40,  138,  109,  134,  110,

-       40,  110,  147,   40,  142,  111,  112,  122,   44,   44,
-       44,   44,   47,   45,   45,   45,   45,   40,  124,  124,
-      124,  124,   40,  156,   40,  125,  170,  213,   41,   40,
-      162,  125,   47,   48,   48,   48,   48,   40,  126,  126,
-      126,  126,   40,   40,  126,  126,   40,  126,  126,  126,
-      126,  126,  126,   40,   40,   40,   40,   40,  136,   40,
-      143,  146,  148,  149,   40,  137,   40,   40,  155,   40,
-      151,   40,  144,   40,  165,  154,   40,  152,   40,  150,
-       40,  168,  157,   40,   40,  158,  166,   40,  163,  159,
-      160,  167,  161,  169,  164,  171,   40,  173,   40,  175,
+      136,  111,  140,  139,   40,  112,  113,  123,   44,   44,
+       44,   44,   47,   45,   45,   45,   45,   40,  125,  125,
+      125,  125,   40,   40,  216,  126,   40,  144,   40,  164,
+       40,  126,   47,   48,   48,   48,   48,   40,  127,  127,
+      127,  127,   40,   40,  127,  127,  137,  127,  127,  127,
+      127,  127,  127,   40,  149,   40,   40,   40,  148,   40,
+      145,   40,  151,   40,   40,   40,   40,   41,   40,  155,
+      157,   40,  146,   40,  153,  156,   40,   40,  152,  171,
+       40,  154,  159,  170,  160,  167,  158,   40,  161,  162,
+      165,  163,  172,   40,   40,   40,  166,  168,  175,  173,

-      174,  172,   40,   40,   40,   40,  176,   40,   40,   40,
-       40,  180,   40,   40,   40,  187,  179,  188,  190,  181,
-      183,   40,  191,  184,   40,  177,  185,  182,  189,  186,
-      178,   40,  196,   40,  192,   40,   40,  194,   40,   40,
-       40,   40,  193,   40,  207,  208,  198,  205,  195,   40,
-       40,  201,  199,  206,  200,   40,  202,  209,   40,  197,
-      212,  230,   40,  210,  203,  211,   40,   40,   40,  204,
-      214,  121,  121,  121,  121,  217,  217,  217,  217,  215,
-      223,  225,  218,   40,   40,   40,   40,   40,  218,  124,
-      124,  124,  124,   40,  222,  224,  125,   40,   40,  226,
+       40,   40,  174,   40,   40,   40,   40,  176,  177,   40,
+       40,   40,   40,  183,  191,   40,  178,  182,  190,   40,
+       40,  184,   40,  179,  186,  194,  193,  187,  180,  185,
+      188,  181,   40,  189,  199,  195,   40,  192,   40,  200,
+       40,   40,   40,  196,   40,  197,   40,   40,   40,  201,
+      208,  215,  204,   40,  209,  202,  198,  205,  203,   40,
+      213,   40,  214,  210,  211,  206,   40,   40,   40,  217,
+      207,   40,  225,   40,  218,  227,  212,  122,  122,  122,
+      122,  220,  220,  220,  220,  226,  229,   40,  221,  228,
+       40,   40,  236,   40,  221,  125,  125,  125,  125,   40,

-      227,  255,  125,  219,  220,   40,  221,  221,  221,  221,
-       40,   40,   40,  229,   40,   40,  232,   40,   40,   40,
-      228,  231,   40,  237,   40,   40,   40,  235,   40,  233,
-      234,  236,  238,  239,  240,   40,   40,   40,   40,   40,
-      245,   40,   40,  249,  242,  246,  241,  248,   40,  243,
-      251,  252,  247,  244,  250,   40,   40,   40,   40,   40,
-       40,   40,   40,   40,  254,  257,  253,   40,   40,  258,
-       40,   40,   40,   40,  259,  294,  261,   40,  304,  256,
-      263,  268,  262,   40,  260,  264,  264,  264,  264,  276,
-      265,  264,  264,  266,  264,  264,  264,  264,  264,  264,
+       40,  233,  126,   40,   40,  230,  231,   40,  126,  222,
+      223,   40,  224,  224,  224,  224,   40,   40,   40,  237,
+      235,   40,  238,  232,  241,  234,  239,   40,   40,   40,
+      240,   40,   40,   40,  242,   40,  243,  244,  249,   40,
+       40,   40,   40,   40,  252,   40,  253,   40,  250,  245,
+       40,  246,  255,   40,  247,  251,  254,  248,   40,  256,
+      257,  259,  258,   40,   40,   40,  261,   40,  260,   40,
+       40,   40,   40,   40,  262,   40,   40,   40,   40,   40,
+      264,   40,   40,  302,  266,  263,  279,  273,  268,   40,
+      267,  265,  269,  269,  269,  269,  270,  271,  269,  269,

-      267,   40,   40,   40,  273,   40,   40,   40,   40,   40,
-      269,  275,  270,  274,   40,   40,  271,   40,  272,  280,
-       40,   40,  279,  282,  283,   40,  277,   40,  281,  278,
-       40,   40,   40,   40,   40,   40,  288,   40,   40,   40,
-      284,  290,  287,   40,  286,  285,  291,  289,  296,  293,
-      292,  297,   40,   40,   40,  301,  295,  298,  300,  217,
-      217,  217,  217,   40,   40,  313,  218,  299,  311,  316,
-      219,  219,  218,  302,  302,  302,  302,  302,  302,  302,
-      302,  221,  221,  221,  221,   40,  221,  221,  221,  221,
-       40,   40,   40,   40,   40,   40,   40,   40,   40,   40,
+      272,  269,  269,  269,  269,  269,  269,   40,   40,   40,
+      278,   40,   40,   40,   40,   40,  274,  280,  275,   40,
+       40,   40,  276,   40,  277,  281,  285,   40,  284,  287,
+      288,   40,  282,  286,   40,  283,   40,   40,   40,   40,
+      293,   40,  289,   40,   40,   40,  295,   40,  290,  299,
+      291,  292,  296,  294,  297,   40,  301,   40,   40,  298,
+      303,   40,  305,  306,  300,  220,  220,  220,  220,   40,
+       40,  304,  221,  403,  316,  321,  222,  222,  221,  307,
+      307,  307,  307,  307,  307,  307,  307,  224,  224,  224,
+      224,   40,  224,  224,  224,  224,   40,   40,   40,   40,

-       40,  307,   40,   40,   40,   40,   40,   40,  303,  305,
-      306,  312,  310,  320,  321,  314,   40,  315,  308,  309,
-       40,  318,  317,   40,   40,  319,   40,  326,  322,  324,
-       40,  323,  325,   40,   40,   40,   40,   40,   40,   40,
-       40,   40,   40,   40,  328,   40,   40,  327,  329,  336,
-      331,   40,  330,  333,  332,  337,   40,   40,  338,   40,
-       40,  334,  335,  339,  345,  340,  342,   40,  344,   40,
-      346,   40,   40,   40,   40,   40,  347,   40,  348,  341,
-      343,  349,  350,  353,  352,   40,  351,  354,   40,   40,
-       40,   40,   40,  356,   40,   40,   40,   40,  355,  302,
+       40,   40,   40,   40,   40,  309,   40,   40,  312,   40,
+       40,   40,   40,   40,  308,   40,  310,  311,   40,  315,
+      317,  325,  326,  324,  320,  313,  314,  319,   40,  322,
+       40,   40,   40,  318,  323,   40,  329,   40,   40,   40,
+       40,  330,   40,   40,   40,  328,   40,   40,   40,   40,
+       40,  327,  333,   40,  334,  336,  331,   40,  332,  338,
+      335,  337,  341,  342,  343,   40,   40,  344,   40,   40,
+      339,  340,  350,   40,  345,  347,   40,  349,   40,  351,
+       40,   40,  352,   40,   40,  353,   40,  354,  346,  348,
+      355,   40,  357,  356,   40,  358,  359,   40,   40,  361,

-      302,  302,  302,  360,   40,   40,  357,  363,   40,  365,
-      366,  358,  359,   40,   40,   40,  367,   40,  362,  364,
-      368,  361,  369,   40,   40,  372,   40,   40,   40,  371,
-      370,   40,  373,  374,  375,   40,  376,   40,   40,   40,
-       40,   40,   40,   40,  380,  377,  381,  382,   40,   40,
-       40,   40,  379,   40,  378,  383,   40,  384,  387,   40,
-      386,   40,  389,  390,   40,  385,  394,  388,  391,   40,
-      392,   40,   40,  393,  395,   40,   40,   40,   40,   40,
-       40,  397,   40,   40,  396,  400,  402,  398,  403,   40,
-       40,   40,   40,  405,   40,  399,  408,   40,   40,   40,
+       40,   40,   40,   40,  360,   40,   40,   40,  307,  307,
+      307,  307,  365,   40,  362,  368,   40,   40,  371,  363,
+      370,  364,  374,   40,  372,   40,  367,  369,   40,  366,
+      373,   40,  375,  376,   40,   40,   40,   40,   40,   40,
+      378,   40,   40,   40,   40,   40,  381,   40,   40,  385,
+      386,   40,  377,  387,  379,  380,  382,   40,  384,   40,
+      388,  383,   40,  389,   40,   40,  392,   40,  391,  395,
+       40,  390,   40,  394,  396,   40,  393,   40,   40,  397,
+       40,  398,   40,   40,   40,  399,   40,   40,  402,   40,
+       40,  405,  401,  407,   40,  408,   40,   40,  400,  413,

-      401,  404,  407,   40,   40,  413,  406,  411,   40,  410,
-       40,   40,  415,  409,  412,   40,   40,   40,   40,  419,
-      420,   40,  425,   40,   40,  426,  416,  414,  417,  418,
-      423,  421,  422,  424,   40,   40,   40,   40,   40,   40,
-       40,   40,   40,   40,  427,  429,   40,  430,  431,  435,
-      432,  428,   40,   40,  433,  436,   40,   40,   40,   40,
-      437,   40,  434,   40,   40,   40,   40,   40,  444,  438,
-      439,   40,  445,  443,  440,  449,   40,  441,  446,  447,
-      448,   40,   40,  442,   40,  452,  453,  454,   40,  450,
-       40,   40,   40,  455,   40,   40,  451,  457,   40,   40,
+      410,   40,   40,  404,   40,   40,  406,  409,   40,  412,
+       40,   40,  418,  411,   40,  416,   40,   40,  415,  420,
+      414,  417,   40,   40,   40,   40,  424,  425,   40,   40,
+      430,  431,  422,  421,  423,   40,  419,  428,  429,  427,
+      426,   40,   40,   40,   40,   40,   40,   40,   40,   40,
+       40,  434,   40,  435,   40,   40,  432,  436,  433,  437,
+      438,  441,  440,   40,   40,   40,  442,   40,  439,   40,
+      444,   40,   40,  443,   40,   40,  445,   40,  449,   40,
+      448,  450,  452,   40,  446,   40,  454,   40,  451,  453,
+      447,   40,  457,   40,  460,   40,  458,  455,  459,   40,

-       40,   40,   40,  459,  463,   40,   40,   40,   40,   40,
-       40,  456,  470,   40,  458,  464,  467,  469,  460,  465,
-       40,  461,  462,  468,  466,   40,  472,   40,  471,   40,
-       40,   40,  473,   40,  474,   40,  477,   40,   40,   40,
-      475,   40,  478,  480,   40,   40,   40,   40,  483,   40,
-       40,   40,  487,  476,   40,  481,  489,   40,  479,  485,
-      486,   40,   40,   40,  488,   40,  482,  484,  490,  492,
-       40,  494,  495,  491,   40,   40,   40,   40,   40,   40,
-       40,   40,   40,  498,  493,   40,   40,  502,  496,   40,
-      499,  500,  501,  504,  507,   40,  509,   40,  505,  497,
+       40,   40,  462,   40,  456,   40,   40,   40,   40,   40,
+      461,  464,   40,   40,   40,  468,   40,   40,   40,  477,
+       40,  472,  463,  469,  470,  465,  466,  473,  467,  474,
+       40,  476,  471,   40,   40,   40,   40,  475,   40,  479,
+      478,  481,   40,  482,   40,  483,   40,   40,  480,  485,
+       40,   40,   40,   40,   40,   40,   40,  488,   40,  492,
+       40,  494,  486,   40,   40,  484,  490,  491,   40,  499,
+      493,   40,  495,   40,  489,   40,  487,   40,   40,  496,
+      500,   40,   40,  497,   40,   40,  503,   40,   40,   40,
+      507,  498,   40,  504,   40,   40,  501,  505,   40,  506,

-      506,  508,  503,   40,   40,   40,   40,   40,  510,   40,
-       40,   40,   40,   40,  511,  516,  517,  518,   40,   40,
-       40,   40,  513,   40,  512,  522,   40,  515,  514,  523,
-      521,   40,   40,   40,   40,  520,   40,   40,   40,   40,
-      519,   40,  524,   37,   37,   37,   37,   39,   39,   50,
-       40,   50,   50,   40,   40,   40,   40,   40,   40,   40,
+      509,  512,  514,   40,  502,  510,   40,  511,  508,  513,
+       40,  515,   40,   40,   40,   40,   40,   40,   40,   40,
+      516,   40,  521,  522,  523,   40,   40,  517,  518,   40,
+      528,   40,  527,   40,  520,  519,  526,   40,   40,   40,
+       40,  525,   40,   40,  524,   40,   40,  529,   37,   37,
+       37,   37,   39,   39,   50,   40,   50,   50,   40,   40,
       40,   40,   40,   40,   40,   40,   40,   40,   40,   40,
       40,   40,   40,   40,   40,   40,   40,   40,   40,   40,
       40,   40,   40,   40,   40,   40,   40,   40,   40,   40,
       40,   40,   40,   40,   40,   40,   40,   40,   40,   40,

       40,   40,   40,   40,   40,   40,   40,   40,   40,   40,
       40,   40,   40,   40,   40,   40,   40,   40,   40,   40,
       40,   40,   40,   40,   40,   40,   40,   40,   40,   40,
-       40,  216,   40,   40,   40,   40,  119,   40,   38,  525,
-        3,  525,  525,  525,  525,  525,  525,  525,  525,  525,
-      525,  525,  525,  525,  525,  525,  525,  525,  525,  525,
-      525,  525,  525,  525,  525,  525,  525,  525,  525,  525,
-      525,  525,  525,  525,  525,  525,  525,  525,  525,  525,
-      525,  525,  525,  525
+       40,   40,   40,   40,   40,   40,   40,   40,   40,   40,
+       40,  219,   40,   40,   40,   40,  120,   40,   38,  530,
+        3,  530,  530,  530,  530,  530,  530,  530,  530,  530,
+      530,  530,  530,  530,  530,  530,  530,  530,  530,  530,
+      530,  530,  530,  530,  530,  530,  530,  530,  530,  530,
+      530,  530,  530,  530,  530,  530,  530,  530,  530,  530,
+      530,  530,  530,  530
+
    } ;

-static yyconst short int yy_chk[1185] =
+static yyconst short int yy_chk[1195] =
    {   0,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
        1,    1,    1,    1,    1,    1,    1,    1,    1,    1,
@@ -720,126 +725,128 @@ static yyconst short int yy_chk[1185] =
       29,   16,   17,   16,   18,   16,   13,   17,   16,   18,

       17,   18,   19,   63,   54,   23,   23,   19,   66,   24,
       22,   19,   18,   21,   24,   19,   18,   19,   21,   22,
       19,   21,   24,   28,   25,   22,   27,   24,   21,   25,
-       51,   34,   33,   66,   21,   28,   58,   33,   51,   31,
-       34,   28,   25,   52,   31,   27,   36,   27,   25,   30,
-       33,   35,   35,   30,   58,   36,   52,   31,   52,   30,
-       31,   30,   30,   53,   56,   30,   30,   31,  530,   72,
-       35,   53,   57,   55,   30,   56,   30,   30,   68,   30,
-       32,   64,   72,   57,   32,   42,   42,   42,   42,   55,
-       32,   61,   32,   43,   43,   43,   43,   32,   61,   32,
+       51,   24,   33,   66,   21,   28,  535,   33,   51,   31,
+       56,   28,   25,   34,   31,   27,   82,   27,   25,   30,
+       33,   56,   34,   30,   35,   35,   53,   31,   82,   30,
+       31,   30,   30,   36,   53,   30,   30,   31,   42,   42,
+       42,   42,   36,   35,   30,   69,   30,   30,   52,   30,
+       32,   60,   55,   69,   32,   43,   43,   43,   43,   57,
+       32,   52,   32,   52,   55,   61,   60,   32,   55,   32,

-       75,   32,   68,   85,   64,   32,   32,   44,   44,   44,
+       57,   32,   61,   60,   64,   32,   32,   44,   44,   44,
       44,   44,   45,   45,   45,   45,   45,   45,   47,   47,
-       47,   47,   47,   75,   79,   47,   85,  116,  528,  116,
-       79,   47,   48,   48,   48,   48,   48,   48,   49,   49,
-       49,   49,   49,   60,   49,   49,   67,   49,   49,   49,
-       49,   49,   49,   65,   69,   71,   70,   73,   60,   74,
-       65,   67,   69,   70,   76,   60,   77,   78,   74,   81,
-       71,   80,   65,   83,   81,   73,   82,   71,   84,   70,
-       86,   83,   76,   91,   89,   77,   81,   90,   80,   78,
-       78,   82,   78,   84,   80,   86,   87,   89,   92,   91,
+       47,   47,   47,   79,  117,   47,  117,   64,   58,   79,
+       68,   47,   48,   48,   48,   48,   48,   48,   49,   49,
+       49,   49,   49,   67,   49,   49,   58,   49,   49,   49,
+       49,   49,   49,   65,   68,   70,   72,   73,   67,   71,
+       65,   74,   70,   75,   76,   77,   78,  533,   83,   72,
+       74,   84,   65,   80,   71,   73,   86,   85,   70,   84,
+       81,   71,   76,   83,   77,   81,   75,   87,   78,   78,
+       80,   78,   85,   88,   90,   91,   80,   81,   88,   86,

-       90,   87,   93,   94,   95,   96,   91,   97,   98,  101,
-       99,   95,  100,  105,  524,   97,   94,   98,  100,   95,
-       96,  102,  101,   96,  104,   92,   96,   95,   99,   96,
-       93,  106,  105,  107,  102,  108,  109,  104,  111,  140,
-      113,  112,  102,  110,  113,  113,  107,  111,  104,  117,
-      114,  110,  108,  112,  109,  115,  110,  113,  118,  106,
-      115,  140,  129,  114,  110,  114,  522,  521,  133,  110,
-      117,  121,  121,  121,  121,  122,  122,  122,  122,  118,
-      129,  133,  122,  128,  135,  136,  131,  163,  122,  124,
-      124,  124,  124,  124,  128,  131,  124,  137,  520,  135,
+       92,   93,   87,   94,   95,   99,   96,   90,   91,   97,
+       98,  107,  102,   96,   99,  106,   92,   95,   98,  100,
+      101,   96,  103,   92,   97,  102,  101,   97,   93,   96,
+       97,   94,  105,   97,  106,  103,  108,  100,  109,  107,
+      110,  112,  113,  103,  111,  105,  116,  115,  118,  108,
+      112,  116,  111,  119,  113,  109,  105,  111,  110,  114,
+      115,  129,  115,  114,  114,  111,  132,  130,  133,  118,
+      111,  529,  129,  135,  119,  132,  114,  122,  122,  122,
+      122,  123,  123,  123,  123,  130,  135,  144,  123,  133,
+      137,  138,  144,  141,  123,  125,  125,  125,  125,  125,

-      136,  163,  124,  125,  125,  139,  125,  125,  125,  125,
-      125,  142,  141,  139,  143,  144,  142,  147,  146,  148,
-      137,  141,  151,  147,  149,  150,  152,  146,  153,  143,
-      144,  146,  148,  149,  150,  154,  155,  157,  156,  158,
-      154,  159,  160,  157,  151,  155,  150,  156,  161,  152,
-      159,  160,  155,  153,  158,  162,  164,  165,  166,  167,
-      168,  171,  172,  174,  162,  165,  161,  178,  179,  166,
-      207,  223,  181,  188,  167,  207,  171,  180,  223,  164,
-      174,  181,  172,  184,  168,  177,  177,  177,  177,  188,
-      178,  177,  177,  179,  177,  177,  177,  177,  177,  177,
+      139,  141,  125,  142,  145,  137,  138,  146,  125,  126,
+      126,  143,  126,  126,  126,  126,  126,  148,  149,  145,
+      143,  150,  146,  139,  149,  142,  148,  151,  152,  153,
+      148,  154,  155,  156,  150,  158,  151,  152,  156,  157,
+      159,  160,  163,  161,  158,  166,  159,  165,  157,  152,
+      162,  153,  161,  164,  154,  157,  160,  155,  167,  162,
+      163,  165,  164,  168,  169,  170,  167,  171,  166,  174,
+      175,  177,  182,  181,  168,  213,  189,  183,  184,  527,
+      170,  526,  525,  213,  174,  169,  189,  184,  177,  187,
+      175,  171,  180,  180,  180,  180,  181,  182,  180,  180,

-      180,  182,  187,  186,  184,  189,  191,  192,  193,  194,
-      182,  187,  182,  186,  195,  196,  182,  197,  182,  193,
-      198,  199,  192,  195,  196,  200,  189,  201,  194,  191,
-      202,  206,  203,  204,  205,  208,  201,  215,  235,  209,
-      197,  203,  200,  210,  199,  198,  204,  202,  209,  206,
-      205,  210,  211,  212,  213,  215,  208,  211,  213,  217,
-      217,  217,  217,  233,  238,  235,  217,  212,  233,  238,
-      218,  218,  217,  218,  218,  218,  218,  219,  219,  219,
-      219,  220,  220,  220,  220,  220,  221,  221,  221,  221,
-      221,  222,  224,  225,  229,  230,  231,  232,  234,  236,
+      183,  180,  180,  180,  180,  180,  180,  185,  190,  191,
+      187,  192,  194,  195,  197,  196,  185,  190,  185,  200,
+      198,  199,  185,  201,  185,  191,  196,  202,  195,  198,
+      199,  204,  192,  197,  203,  194,  205,  206,  208,  207,
+      204,  209,  200,  211,  210,  218,  206,  212,  201,  210,
+      202,  203,  207,  205,  208,  214,  212,  215,  216,  209,
+      214,  354,  216,  218,  211,  220,  220,  220,  220,  237,
+      242,  215,  220,  354,  237,  242,  221,  221,  220,  221,
+      221,  221,  221,  222,  222,  222,  222,  223,  223,  223,
+      223,  223,  224,  224,  224,  224,  224,  225,  226,  227,

-      240,  229,  237,  239,  242,  245,  251,  243,  222,  224,
-      225,  234,  232,  242,  243,  236,  248,  237,  230,  231,
-      241,  240,  239,  250,  249,  241,  252,  251,  245,  249,
-      253,  248,  250,  254,  255,  256,  259,  262,  260,  263,
-      265,  273,  267,  269,  253,  518,  516,  252,  254,  265,
-      256,  268,  255,  260,  259,  267,  270,  271,  268,  272,
-      274,  262,  263,  269,  273,  270,  271,  275,  272,  277,
-      274,  281,  287,  280,  278,  284,  275,  288,  277,  270,
-      271,  278,  280,  287,  284,  289,  281,  288,  290,  291,
-      293,  294,  295,  290,  296,  298,  301,  300,  289,  302,
+      229,  233,  234,  235,  236,  226,  239,  238,  233,  241,
+      243,  240,  246,  244,  225,  247,  227,  229,  245,  236,
+      238,  246,  247,  245,  241,  234,  235,  240,  249,  243,
+      252,  253,  254,  239,  244,  255,  253,  256,  257,  258,
+      260,  254,  259,  264,  265,  252,  267,  274,  268,  278,
+      272,  249,  257,  270,  258,  260,  255,  273,  256,  265,
+      259,  264,  270,  272,  273,  275,  276,  274,  277,  279,
+      267,  268,  278,  280,  275,  276,  282,  277,  286,  279,
+      283,  285,  280,  289,  292,  282,  293,  283,  275,  276,
+      285,  294,  289,  286,  295,  292,  293,  296,  298,  295,

-      302,  302,  302,  295,  311,  304,  291,  300,  305,  301,
-      304,  293,  294,  307,  313,  314,  305,  308,  298,  300,
-      307,  296,  308,  309,  310,  311,  312,  315,  316,  310,
-      309,  317,  312,  313,  314,  318,  315,  319,  323,  321,
-      324,  325,  326,  327,  319,  316,  321,  323,  337,  328,
-      330,  338,  318,  331,  317,  324,  332,  325,  328,  333,
-      327,  334,  331,  332,  335,  326,  337,  330,  333,  346,
-      334,  347,  350,  335,  338,  349,  351,  355,  358,  356,
-      357,  347,  359,  361,  346,  351,  356,  349,  357,  362,
-      364,  363,  365,  359,  367,  350,  363,  369,  370,  371,
+      299,  300,  301,  303,  294,  305,  523,  306,  307,  307,
+      307,  307,  300,  309,  296,  305,  310,  313,  309,  298,
+      306,  299,  313,  312,  310,  314,  303,  305,  315,  301,
+      312,  316,  314,  315,  317,  318,  319,  320,  322,  321,
+      317,  323,  324,  326,  328,  329,  320,  330,  331,  324,
+      326,  332,  316,  328,  318,  319,  321,  333,  323,  335,
+      329,  322,  337,  330,  336,  338,  333,  342,  332,  337,
+      339,  331,  340,  336,  338,  343,  335,  351,  352,  339,
+      355,  340,  356,  360,  363,  342,  361,  362,  352,  364,
+      366,  356,  351,  361,  368,  362,  367,  369,  343,  368,

-      355,  358,  362,  372,  373,  370,  361,  367,  380,  365,
-      374,  375,  372,  364,  369,  379,  382,  386,  388,  379,
-      379,  384,  386,  393,  385,  388,  373,  371,  374,  375,
-      384,  380,  382,  385,  394,  401,  396,  397,  402,  407,
-      408,  409,  410,  411,  393,  396,  412,  397,  401,  409,
-      402,  394,  414,  417,  407,  410,  418,  419,  420,  421,
-      411,  423,  408,  422,  424,  425,  426,  427,  421,  412,
-      414,  429,  422,  420,  417,  426,  430,  418,  423,  424,
-      425,  431,  432,  419,  433,  430,  431,  432,  434,  427,
-      435,  436,  437,  433,  439,  442,  429,  435,  440,  441,
+      364,  370,  372,  355,  374,  375,  360,  363,  376,  367,
+      377,  378,  375,  366,  379,  372,  380,  385,  370,  377,
+      369,  374,  384,  387,  393,  391,  384,  384,  389,  390,
+      391,  393,  379,  378,  380,  398,  376,  389,  390,  387,
+      385,  399,  401,  402,  406,  412,  413,  407,  415,  416,
+      417,  401,  419,  402,  414,  422,  398,  406,  399,  407,
+      412,  415,  414,  423,  424,  425,  416,  429,  413,  426,
+      419,  428,  427,  417,  430,  432,  422,  431,  426,  434,
+      425,  427,  429,  435,  423,  438,  431,  439,  428,  430,
+      424,  436,  435,  437,  438,  440,  436,  432,  437,  441,

-      444,  446,  445,  437,  442,  452,  515,  447,  451,  514,
-      450,  434,  452,  453,  436,  444,  447,  451,  439,  445,
-      454,  440,  441,  450,  446,  456,  454,  458,  453,  457,
-      460,  463,  456,  464,  457,  465,  463,  468,  466,  467,
-      458,  469,  464,  466,  470,  472,  471,  473,  469,  474,
-      479,  475,  473,  460,  477,  467,  475,  478,  465,  471,
-      472,  480,  481,  482,  474,  483,  468,  470,  477,  479,
-      485,  481,  482,  478,  486,  487,  488,  489,  491,  492,
-      493,  494,  496,  486,  480,  497,  499,  491,  483,  500,
-      487,  488,  489,  493,  497,  501,  500,  502,  494,  485,
+      442,  444,  440,  445,  434,  446,  447,  450,  449,  451,
+      439,  442,  452,  459,  455,  447,  458,  521,  465,  459,
+      456,  452,  441,  449,  450,  444,  445,  455,  446,  456,
+      457,  458,  451,  461,  462,  463,  469,  457,  468,  462,
+      461,  465,  470,  468,  471,  469,  472,  473,  463,  471,
+      474,  475,  477,  476,  478,  479,  480,  474,  482,  478,
+      486,  480,  472,  483,  484,  470,  476,  477,  485,  486,
+      479,  487,  482,  488,  475,  490,  473,  491,  492,  483,
+      487,  496,  493,  484,  494,  497,  491,  498,  499,  501,
+      496,  485,  502,  492,  504,  505,  488,  493,  506,  494,

-      496,  499,  492,  503,  504,  505,  506,  507,  501,  508,
-      509,  510,  511,  513,  502,  507,  508,  509,  517,  512,
-      519,  523,  504,  498,  503,  517,  495,  506,  505,  519,
-      513,  490,  484,  476,  462,  511,  461,  459,  455,  449,
-      510,  448,  523,  526,  526,  526,  526,  527,  527,  529,
-      443,  529,  529,  438,  428,  416,  415,  413,  406,  405,
-      404,  403,  400,  399,  398,  395,  392,  391,  390,  389,
-      387,  383,  381,  378,  377,  376,  368,  366,  360,  354,
-      353,  352,  348,  345,  344,  343,  342,  341,  340,  339,
-      336,  329,  322,  320,  306,  303,  299,  297,  292,  286,
+      498,  502,  505,  507,  490,  499,  508,  501,  497,  504,
+      509,  506,  510,  511,  512,  515,  513,  514,  516,  518,
+      507,  524,  512,  513,  514,  522,  528,  508,  509,  520,
+      524,  519,  522,  517,  511,  510,  518,  503,  500,  495,
+      489,  516,  481,  467,  515,  466,  464,  528,  531,  531,
+      531,  531,  532,  532,  534,  460,  534,  534,  454,  453,
+      448,  443,  433,  421,  420,  418,  411,  410,  409,  408,
+      405,  404,  403,  400,  397,  396,  395,  394,  392,  388,
+      386,  383,  382,  381,  373,  371,  365,  359,  358,  357,
+      353,  350,  349,  348,  347,  346,  345,  344,  341,  334,
+
+      327,  325,  311,  308,  304,  302,  297,  291,  290,  288,
+      287,  284,  281,  271,  266,  263,  262,  261,  251,  250,
+      248,  232,  231,  230,  228,  217,  193,  188,  186,  179,
+      178,  176,  173,  172,  147,  140,  136,  134,  131,  128,
+      124,  120,  104,   89,   59,   39,   37,    8,    7,    3,
+      530,  530,  530,  530,  530,  530,  530,  530,  530,  530,
+      530,  530,  530,  530,  530,  530,  530,  530,  530,  530,
+      530,  530,  530,  530,  530,  530,  530,  530,  530,  530,
+      530,  530,  530,  530,  530,  530,  530,  530,  530,  530,
+      530,  530,  530,  530

-      285,  283,  282,  279,  276,  266,  261,  258,  257,  247,
-      246,  244,  228,  227,  226,  214,  190,  185,  183,  176,
-      175,  173,  170,  169,  145,  138,  134,  132,  130,  127,
-      123,  119,  103,   88,   59,   39,   37,    8,    7,    3,
-      525,  525,  525,  525,  525,  525,  525,  525,  525,  525,
-      525,  525,  525,  525,  525,  525,  525,  525,  525,  525,
-      525,  525,  525,  525,  525,  525,  525,  525,  525,  525,
-      525,  525,  525,  525,  525,  525,  525,  525,  525,  525,
-      525,  525,  525,  525
    } ;

 static yy_state_type yy_state_buf[YY_BUF_SIZE + 2], *yy_state_ptr;
 static char *yy_full_match;
 static int yy_lp;
@@ -852,11 +859,11 @@ goto find_rule; \
 }
 #define yymore() yymore_used_but_not_detected
 #define YY_MORE_ADJ 0
 #define YY_RESTORE_YY_MORE_OFFSET
 char *yytext;
-#line 1 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 1 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 #define INITIAL 0
 /*===-- Lexer.l - Scanner for llvm assembly files --------------*- C++ -*--===//
 //
 //                     The LLVM Compiler Infrastructure
 //
@@ -867,11 +874,11 @@ char *yytext;
 //
 //  This file implements the flex scanner for LLVM assembly languages files.
 //
 //===----------------------------------------------------------------------===*/
 #define YY_NEVER_INTERACTIVE 1
-#line 28 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 28 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 #include "ParserInternals.h"
 #include "llvm/Module.h"
 #include <list>
 #include "llvmAsmParser.h"
 #include <cctype>
@@ -1003,11 +1010,11 @@ using namespace llvm;
 *  hexadecimal number for when exponential notation is not precise enough.
 */
 /* HexIntConstant - Hexadecimal constant generated by the CFE to avoid forcing
 * it to deal with 64 bit numbers.
 */
-#line 1009 "Lexer.cpp"
+#line 1016 "Lexer.cpp"

 /* Macros after this point can all be overridden by user definitions in
 * section 1.
 */

@@ -1154,14 +1161,14 @@ YY_DECL
        {
        register yy_state_type yy_current_state;
        register char *yy_cp = NULL, *yy_bp = NULL;
        register int yy_act;

-#line 189 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 189 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"


-#line 1163 "Lexer.cpp"
+#line 1170 "Lexer.cpp"

        if ( yy_init )
                {
                yy_init = 0;

@@ -1205,18 +1212,18 @@ yy_match:
                        {
                        register YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)];
                        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                                {
                                yy_current_state = (int) yy_def[yy_current_state];
-                                if ( yy_current_state >= 526 )
+                                if ( yy_current_state >= 531 )
                                        yy_c = yy_meta[(unsigned int) yy_c];
                                }
                        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                        *yy_state_ptr++ = yy_current_state;
                        ++yy_cp;
                        }
-                while ( yy_current_state != 525 );
+                while ( yy_current_state != 530 );

 yy_find_action:
                yy_current_state = *--yy_state_ptr;
                yy_lp = yy_accept[yy_current_state];
 find_rule: /* we branch to this label when backing up */
@@ -1250,664 +1257,674 @@ do_action:    /* This label is used only to

                switch ( yy_act )
        { /* beginning of action switch */
 case 1:
 YY_RULE_SETUP
-#line 191 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 191 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { /* Ignore comments for now */ }
        YY_BREAK
 case 2:
 YY_RULE_SETUP
-#line 193 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 193 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { return BEGINTOK; }
        YY_BREAK
 case 3:
 YY_RULE_SETUP
-#line 194 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 194 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { return ENDTOK; }
        YY_BREAK
 case 4:
 YY_RULE_SETUP
-#line 195 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 195 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { return TRUETOK;  }
        YY_BREAK
 case 5:
 YY_RULE_SETUP
-#line 196 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 196 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { return FALSETOK; }
        YY_BREAK
 case 6:
 YY_RULE_SETUP
-#line 197 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 197 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { return DECLARE; }
        YY_BREAK
 case 7:
 YY_RULE_SETUP
-#line 198 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 198 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { return GLOBAL; }
        YY_BREAK
 case 8:
 YY_RULE_SETUP
-#line 199 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 199 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { return CONSTANT; }
        YY_BREAK
 case 9:
 YY_RULE_SETUP
-#line 200 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 200 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { return INTERNAL; }
        YY_BREAK
 case 10:
 YY_RULE_SETUP
-#line 201 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 201 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { return LINKONCE; }
        YY_BREAK
 case 11:
 YY_RULE_SETUP
-#line 202 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 202 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { return WEAK; }
        YY_BREAK
 case 12:
 YY_RULE_SETUP
-#line 203 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 203 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { return APPENDING; }
        YY_BREAK
 case 13:
 YY_RULE_SETUP
-#line 204 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 204 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { return DLLIMPORT; }
        YY_BREAK
 case 14:
 YY_RULE_SETUP
-#line 205 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 205 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { return DLLEXPORT; }
        YY_BREAK
 case 15:
 YY_RULE_SETUP
-#line 206 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 206 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { return EXTERN_WEAK; }
        YY_BREAK
 case 16:
 YY_RULE_SETUP
-#line 207 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 207 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { return EXTERNAL; }    /* Deprecated, turn into external */
        YY_BREAK
 case 17:
 YY_RULE_SETUP
-#line 208 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 208 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { return EXTERNAL; }
        YY_BREAK
 case 18:
 YY_RULE_SETUP
-#line 209 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 209 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { return IMPLEMENTATION; }
        YY_BREAK
 case 19:
 YY_RULE_SETUP
-#line 210 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 210 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { return ZEROINITIALIZER; }
        YY_BREAK
 case 20:
 YY_RULE_SETUP
-#line 211 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 211 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { return DOTDOTDOT; }
        YY_BREAK
 case 21:
 YY_RULE_SETUP
-#line 212 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 212 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { return UNDEF; }
        YY_BREAK
 case 22:
 YY_RULE_SETUP
-#line 213 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 213 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { return NULL_TOK; }
        YY_BREAK
 case 23:
 YY_RULE_SETUP
-#line 214 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 214 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { return TO; }
        YY_BREAK
 case 24:
 YY_RULE_SETUP
-#line 215 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 215 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { RET_TOK(TermOpVal, Unwind, UNWIND); }
        YY_BREAK
 case 25:
 YY_RULE_SETUP
-#line 216 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 216 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { return NOT; }  /* Deprecated, turned into XOR */
        YY_BREAK
 case 26:
 YY_RULE_SETUP
-#line 217 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 217 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { return TAIL; }
        YY_BREAK
 case 27:
 YY_RULE_SETUP
-#line 218 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 218 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { return TARGET; }
        YY_BREAK
 case 28:
 YY_RULE_SETUP
-#line 219 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 219 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { return TRIPLE; }
        YY_BREAK
 case 29:
 YY_RULE_SETUP
-#line 220 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 220 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { return DEPLIBS; }
        YY_BREAK
 case 30:
 YY_RULE_SETUP
-#line 221 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 221 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { return ENDIAN; }
        YY_BREAK
 case 31:
 YY_RULE_SETUP
-#line 222 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 222 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { return POINTERSIZE; }
        YY_BREAK
 case 32:
 YY_RULE_SETUP
-#line 223 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 223 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { return DATALAYOUT; }
        YY_BREAK
 case 33:
 YY_RULE_SETUP
-#line 224 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 224 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { return LITTLE; }
        YY_BREAK
 case 34:
 YY_RULE_SETUP
-#line 225 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 225 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { return BIG; }
        YY_BREAK
 case 35:
 YY_RULE_SETUP
-#line 226 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 226 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { return VOLATILE; }
        YY_BREAK
 case 36:
 YY_RULE_SETUP
-#line 227 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 227 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { return ALIGN;  }
        YY_BREAK
 case 37:
 YY_RULE_SETUP
-#line 228 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 228 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { return SECTION; }
        YY_BREAK
 case 38:
 YY_RULE_SETUP
-#line 229 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 229 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { return MODULE; }
        YY_BREAK
 case 39:
 YY_RULE_SETUP
-#line 230 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 230 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { return ASM_TOK; }
        YY_BREAK
 case 40:
 YY_RULE_SETUP
-#line 231 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 231 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { return SIDEEFFECT; }
        YY_BREAK
 case 41:
 YY_RULE_SETUP
-#line 233 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 233 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { return CC_TOK; }
        YY_BREAK
 case 42:
 YY_RULE_SETUP
-#line 234 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 234 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { return CCC_TOK; }
        YY_BREAK
 case 43:
 YY_RULE_SETUP
-#line 235 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 235 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { return CSRETCC_TOK; }
        YY_BREAK
 case 44:
 YY_RULE_SETUP
-#line 236 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 236 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { return FASTCC_TOK; }
        YY_BREAK
 case 45:
 YY_RULE_SETUP
-#line 237 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 237 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { return COLDCC_TOK; }
        YY_BREAK
 case 46:
 YY_RULE_SETUP
-#line 238 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 238 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { return X86_STDCALLCC_TOK; }
        YY_BREAK
 case 47:
 YY_RULE_SETUP
-#line 239 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 239 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { return X86_FASTCALLCC_TOK; }
        YY_BREAK
 case 48:
 YY_RULE_SETUP
-#line 241 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 241 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { llvmAsmlval.PrimType = Type::VoidTy  ; return VOID;   }
        YY_BREAK
 case 49:
 YY_RULE_SETUP
-#line 242 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 242 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { llvmAsmlval.PrimType = Type::BoolTy  ; return BOOL;   }
        YY_BREAK
 case 50:
 YY_RULE_SETUP
-#line 243 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 243 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { llvmAsmlval.PrimType = Type::SByteTy ; return SBYTE;  }
        YY_BREAK
 case 51:
 YY_RULE_SETUP
-#line 244 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 244 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { llvmAsmlval.PrimType = Type::UByteTy ; return UBYTE;  }
        YY_BREAK
 case 52:
 YY_RULE_SETUP
-#line 245 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 245 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { llvmAsmlval.PrimType = Type::ShortTy ; return SHORT;  }
        YY_BREAK
 case 53:
 YY_RULE_SETUP
-#line 246 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 246 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { llvmAsmlval.PrimType = Type::UShortTy; return USHORT; }
        YY_BREAK
 case 54:
 YY_RULE_SETUP
-#line 247 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 247 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { llvmAsmlval.PrimType = Type::IntTy   ; return INT;    }
        YY_BREAK
 case 55:
 YY_RULE_SETUP
-#line 248 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 248 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { llvmAsmlval.PrimType = Type::UIntTy  ; return UINT;   }
        YY_BREAK
 case 56:
 YY_RULE_SETUP
-#line 249 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 249 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { llvmAsmlval.PrimType = Type::LongTy  ; return LONG;   }
        YY_BREAK
 case 57:
 YY_RULE_SETUP
-#line 250 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 250 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { llvmAsmlval.PrimType = Type::ULongTy ; return ULONG;  }
        YY_BREAK
 case 58:
 YY_RULE_SETUP
-#line 251 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 251 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { llvmAsmlval.PrimType = Type::FloatTy ; return FLOAT;  }
        YY_BREAK
 case 59:
 YY_RULE_SETUP
-#line 252 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 252 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { llvmAsmlval.PrimType = Type::DoubleTy; return DOUBLE; }
        YY_BREAK
 case 60:
 YY_RULE_SETUP
-#line 253 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 253 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { llvmAsmlval.PrimType = Type::LabelTy ; return LABEL;  }
        YY_BREAK
 case 61:
 YY_RULE_SETUP
-#line 254 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 254 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { return TYPE;   }
        YY_BREAK
 case 62:
 YY_RULE_SETUP
-#line 255 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 255 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { return OPAQUE; }
        YY_BREAK
 case 63:
 YY_RULE_SETUP
-#line 257 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 257 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { RET_TOK(BinaryOpVal, Add, ADD); }
        YY_BREAK
 case 64:
 YY_RULE_SETUP
-#line 258 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 258 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { RET_TOK(BinaryOpVal, Sub, SUB); }
        YY_BREAK
 case 65:
 YY_RULE_SETUP
-#line 259 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 259 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { RET_TOK(BinaryOpVal, Mul, MUL); }
        YY_BREAK
 case 66:
 YY_RULE_SETUP
-#line 260 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 260 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { RET_TOK_OBSOLETE(BinaryOpVal, UDiv, UDIV); }
        YY_BREAK
 case 67:
 YY_RULE_SETUP
-#line 261 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 261 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { RET_TOK(BinaryOpVal, UDiv, UDIV); }
        YY_BREAK
 case 68:
 YY_RULE_SETUP
-#line 262 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 262 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { RET_TOK(BinaryOpVal, SDiv, SDIV); }
        YY_BREAK
 case 69:
 YY_RULE_SETUP
-#line 263 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 263 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { RET_TOK(BinaryOpVal, FDiv, FDIV); }
        YY_BREAK
 case 70:
 YY_RULE_SETUP
-#line 264 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 264 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { RET_TOK_OBSOLETE(BinaryOpVal, URem, UREM); }
        YY_BREAK
 case 71:
 YY_RULE_SETUP
-#line 265 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 265 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { RET_TOK(BinaryOpVal, URem, UREM); }
        YY_BREAK
 case 72:
 YY_RULE_SETUP
-#line 266 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 266 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { RET_TOK(BinaryOpVal, SRem, SREM); }
        YY_BREAK
 case 73:
 YY_RULE_SETUP
-#line 267 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 267 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { RET_TOK(BinaryOpVal, FRem, FREM); }
        YY_BREAK
 case 74:
 YY_RULE_SETUP
-#line 268 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 268 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { RET_TOK(BinaryOpVal, And, AND); }
        YY_BREAK
 case 75:
 YY_RULE_SETUP
-#line 269 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 269 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { RET_TOK(BinaryOpVal, Or , OR ); }
        YY_BREAK
 case 76:
 YY_RULE_SETUP
-#line 270 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 270 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { RET_TOK(BinaryOpVal, Xor, XOR); }
        YY_BREAK
 case 77:
 YY_RULE_SETUP
-#line 271 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 271 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { RET_TOK(BinaryOpVal, SetNE, SETNE); }
        YY_BREAK
 case 78:
 YY_RULE_SETUP
-#line 272 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 272 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { RET_TOK(BinaryOpVal, SetEQ, SETEQ); }
        YY_BREAK
 case 79:
 YY_RULE_SETUP
-#line 273 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 273 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { RET_TOK(BinaryOpVal, SetLT, SETLT); }
        YY_BREAK
 case 80:
 YY_RULE_SETUP
-#line 274 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 274 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { RET_TOK(BinaryOpVal, SetGT, SETGT); }
        YY_BREAK
 case 81:
 YY_RULE_SETUP
-#line 275 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 275 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { RET_TOK(BinaryOpVal, SetLE, SETLE); }
        YY_BREAK
 case 82:
 YY_RULE_SETUP
-#line 276 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 276 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { RET_TOK(BinaryOpVal, SetGE, SETGE); }
        YY_BREAK
 case 83:
 YY_RULE_SETUP
-#line 278 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 278 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { RET_TOK(OtherOpVal, PHI, PHI_TOK); }
        YY_BREAK
 case 84:
 YY_RULE_SETUP
-#line 279 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 279 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { RET_TOK(OtherOpVal, Call, CALL); }
        YY_BREAK
 case 85:
 YY_RULE_SETUP
-#line 280 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 280 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { RET_TOK(OtherOpVal, Cast, CAST); }
        YY_BREAK
 case 86:
 YY_RULE_SETUP
-#line 281 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 281 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { RET_TOK(OtherOpVal, Select, SELECT); }
        YY_BREAK
 case 87:
 YY_RULE_SETUP
-#line 282 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 282 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { RET_TOK(OtherOpVal, Shl, SHL); }
        YY_BREAK
 case 88:
 YY_RULE_SETUP
-#line 283 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(OtherOpVal, Shr, SHR); }
+#line 283 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
+{ RET_TOK_OBSOLETE(OtherOpVal, LShr, LSHR); }
        YY_BREAK
 case 89:
 YY_RULE_SETUP
-#line 284 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ return VANEXT_old; }
+#line 284 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
+{ RET_TOK(OtherOpVal, LShr, LSHR); }
        YY_BREAK
 case 90:
 YY_RULE_SETUP
-#line 285 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ return VAARG_old; }
+#line 285 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
+{ RET_TOK(OtherOpVal, AShr, ASHR); }
        YY_BREAK
 case 91:
 YY_RULE_SETUP
-#line 286 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(OtherOpVal, VAArg , VAARG); }
+#line 286 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
+{ return VANEXT_old; }
        YY_BREAK
 case 92:
 YY_RULE_SETUP
-#line 287 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(TermOpVal, Ret, RET); }
+#line 287 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
+{ return VAARG_old; }
        YY_BREAK
 case 93:
 YY_RULE_SETUP
-#line 288 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(TermOpVal, Br, BR); }
+#line 288 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
+{ RET_TOK(OtherOpVal, VAArg , VAARG); }
        YY_BREAK
 case 94:
 YY_RULE_SETUP
-#line 289 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(TermOpVal, Switch, SWITCH); }
+#line 289 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
+{ RET_TOK(TermOpVal, Ret, RET); }
        YY_BREAK
 case 95:
 YY_RULE_SETUP
-#line 290 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(TermOpVal, Invoke, INVOKE); }
+#line 290 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
+{ RET_TOK(TermOpVal, Br, BR); }
        YY_BREAK
 case 96:
 YY_RULE_SETUP
-#line 291 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(TermOpVal, Unwind, UNWIND); }
+#line 291 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
+{ RET_TOK(TermOpVal, Switch, SWITCH); }
        YY_BREAK
 case 97:
 YY_RULE_SETUP
-#line 292 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(TermOpVal, Unreachable, UNREACHABLE); }
+#line 292 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
+{ RET_TOK(TermOpVal, Invoke, INVOKE); }
        YY_BREAK
 case 98:
 YY_RULE_SETUP
-#line 294 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(MemOpVal, Malloc, MALLOC); }
+#line 293 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
+{ RET_TOK(TermOpVal, Unwind, UNWIND); }
        YY_BREAK
 case 99:
 YY_RULE_SETUP
-#line 295 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(MemOpVal, Alloca, ALLOCA); }
+#line 294 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
+{ RET_TOK(TermOpVal, Unreachable, UNREACHABLE); }
        YY_BREAK
 case 100:
 YY_RULE_SETUP
-#line 296 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(MemOpVal, Free, FREE); }
+#line 296 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
+{ RET_TOK(MemOpVal, Malloc, MALLOC); }
        YY_BREAK
 case 101:
 YY_RULE_SETUP
-#line 297 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(MemOpVal, Load, LOAD); }
+#line 297 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
+{ RET_TOK(MemOpVal, Alloca, ALLOCA); }
        YY_BREAK
 case 102:
 YY_RULE_SETUP
-#line 298 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(MemOpVal, Store, STORE); }
+#line 298 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
+{ RET_TOK(MemOpVal, Free, FREE); }
        YY_BREAK
 case 103:
 YY_RULE_SETUP
-#line 299 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(MemOpVal, GetElementPtr, GETELEMENTPTR); }
+#line 299 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
+{ RET_TOK(MemOpVal, Load, LOAD); }
        YY_BREAK
 case 104:
 YY_RULE_SETUP
-#line 301 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(OtherOpVal, ExtractElement, EXTRACTELEMENT); }
+#line 300 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
+{ RET_TOK(MemOpVal, Store, STORE); }
        YY_BREAK
 case 105:
 YY_RULE_SETUP
-#line 302 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(OtherOpVal, InsertElement, INSERTELEMENT); }
+#line 301 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
+{ RET_TOK(MemOpVal, GetElementPtr, GETELEMENTPTR); }
        YY_BREAK
 case 106:
 YY_RULE_SETUP
-#line 303 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
-{ RET_TOK(OtherOpVal, ShuffleVector, SHUFFLEVECTOR); }
+#line 303 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
+{ RET_TOK(OtherOpVal, ExtractElement, EXTRACTELEMENT); }
        YY_BREAK
 case 107:
 YY_RULE_SETUP
-#line 306 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 304 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
+{ RET_TOK(OtherOpVal, InsertElement, INSERTELEMENT); }
+        YY_BREAK
+case 108:
+YY_RULE_SETUP
+#line 305 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
+{ RET_TOK(OtherOpVal, ShuffleVector, SHUFFLEVECTOR); }
+        YY_BREAK
+case 109:
+YY_RULE_SETUP
+#line 308 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 {
                  UnEscapeLexed(yytext+1);
                  llvmAsmlval.StrVal = strdup(yytext+1);             // Skip %
                  return VAR_ID;
                }
        YY_BREAK
-case 108:
+case 110:
 YY_RULE_SETUP
-#line 311 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 313 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 {
                  yytext[strlen(yytext)-1] = 0;  // nuke colon
                  UnEscapeLexed(yytext);
                  llvmAsmlval.StrVal = strdup(yytext);
                  return LABELSTR;
                }
        YY_BREAK
-case 109:
+case 111:
 YY_RULE_SETUP
-#line 317 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 319 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 {
                  yytext[strlen(yytext)-2] = 0;  // nuke colon, end quote
                  UnEscapeLexed(yytext+1);
                  llvmAsmlval.StrVal = strdup(yytext+1);
                  return LABELSTR;
                }
        YY_BREAK
-case 110:
+case 112:
 YY_RULE_SETUP
-#line 324 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 326 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { // Note that we cannot unescape a string constant here!  The
                   // string constant might contain a \00 which would not be
                   // understood by the string stuff.  It is valid to make a
                   // [sbyte] c"Hello World\00" constant, for example.
                   //
                   yytext[strlen(yytext)-1] = 0;           // nuke end quote
                   llvmAsmlval.StrVal = strdup(yytext+1);  // Nuke start quote
                   return STRINGCONSTANT;
                 }
        YY_BREAK
-case 111:
+case 113:
 YY_RULE_SETUP
-#line 335 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 337 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { llvmAsmlval.UInt64Val = atoull(yytext); return EUINT64VAL; }
        YY_BREAK
-case 112:
+case 114:
 YY_RULE_SETUP
-#line 336 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 338 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 {
                  uint64_t Val = atoull(yytext+1);
                  // +1:  we have bigger negative range
                  if (Val > (uint64_t)INT64_MAX+1)
                    GenerateError("Constant too large for signed 64 bits!");
                  llvmAsmlval.SInt64Val = -Val;
                  return ESINT64VAL;
                }
        YY_BREAK
-case 113:
+case 115:
 YY_RULE_SETUP
-#line 344 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 346 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 {
                   llvmAsmlval.UInt64Val = HexIntToVal(yytext+3);
                   return yytext[0] == 's' ? ESINT64VAL : EUINT64VAL;
                 }
        YY_BREAK
-case 114:
+case 116:
 YY_RULE_SETUP
-#line 349 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 351 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 {
                  uint64_t Val = atoull(yytext+1);
                  if ((unsigned)Val != Val)
                    GenerateError("Invalid value number (too large)!");
                  llvmAsmlval.UIntVal = unsigned(Val);
                  return UINTVAL;
                }
        YY_BREAK
-case 115:
+case 117:
 YY_RULE_SETUP
-#line 356 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 358 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 {
                  uint64_t Val = atoull(yytext+2);
                  // +1:  we have bigger negative range
                  if (Val > (uint64_t)INT32_MAX+1)
                    GenerateError("Constant too large for signed 32 bits!");
                  llvmAsmlval.SIntVal = (int)-Val;
                  return SINTVAL;
                }
        YY_BREAK
-case 116:
+case 118:
 YY_RULE_SETUP
-#line 365 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 367 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { llvmAsmlval.FPVal = atof(yytext); return FPVAL; }
        YY_BREAK
-case 117:
+case 119:
 YY_RULE_SETUP
-#line 366 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 368 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { llvmAsmlval.FPVal = HexToFP(yytext); return FPVAL; }
        YY_BREAK
 case YY_STATE_EOF(INITIAL):
-#line 368 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 370 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 {
                  /* Make sure to free the internal buffers for flex when we are
                   * done reading our input!
                   */
                  yy_delete_buffer(YY_CURRENT_BUFFER);
                  return EOF;
                }
        YY_BREAK
-case 118:
+case 120:
 YY_RULE_SETUP
-#line 376 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 378 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { /* Ignore whitespace */ }
        YY_BREAK
-case 119:
+case 121:
 YY_RULE_SETUP
-#line 377 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 379 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 { return yytext[0]; }
        YY_BREAK
-case 120:
+case 122:
 YY_RULE_SETUP
-#line 379 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 381 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"
 YY_FATAL_ERROR( "flex scanner jammed" );
        YY_BREAK
-#line 1909 "Lexer.cpp"
+#line 1926 "Lexer.cpp"

        case YY_END_OF_BUFFER:
                {
                /* Amount of text matched not including the EOB char. */
                int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1;
@@ -2190,11 +2207,11 @@ static yy_state_type yy_get_previous_sta
                {
                register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
                while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                        {
                        yy_current_state = (int) yy_def[yy_current_state];
-                        if ( yy_current_state >= 526 )
+                        if ( yy_current_state >= 531 )
                                yy_c = yy_meta[(unsigned int) yy_c];
                        }
                yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
                *yy_state_ptr++ = yy_current_state;
                }
@@ -2220,15 +2237,15 @@ yy_state_type yy_current_state;

        register YY_CHAR yy_c = 1;
        while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
                {
                yy_current_state = (int) yy_def[yy_current_state];
-                if ( yy_current_state >= 526 )
+                if ( yy_current_state >= 531 )
                        yy_c = yy_meta[(unsigned int) yy_c];
                }
        yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
-        yy_is_jam = (yy_current_state == 525);
+        yy_is_jam = (yy_current_state == 530);
        if ( ! yy_is_jam )
                *yy_state_ptr++ = yy_current_state;

        return yy_is_jam ? 0 : yy_current_state;
        }
@@ -2781,7 +2798,7 @@ int main()
        {
        yylex();
        return 0;
        }
 #endif
-#line 379 "/proj/llvm/llvm-4/lib/AsmParser/Lexer.l"
+#line 381 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/Lexer.l"

Index: lib/AsmParser/Lexer.l
===================================================================
RCS file: /var/cvs/llvm/llvm/lib/AsmParser/Lexer.l,v
retrieving revision 1.81
diff -t -d -u -p -5 -r1.81 Lexer.l
--- lib/AsmParser/Lexer.l       2 Nov 2006 01:53:58 -0000       1.81
+++ lib/AsmParser/Lexer.l       4 Nov 2006 00:19:08 -0000
@@ -278,11 +278,13 @@ setge           { RET_TOK(BinaryOpVal, S
 phi             { RET_TOK(OtherOpVal, PHI, PHI_TOK); }
 call            { RET_TOK(OtherOpVal, Call, CALL); }
 cast            { RET_TOK(OtherOpVal, Cast, CAST); }
 select          { RET_TOK(OtherOpVal, Select, SELECT); }
 shl             { RET_TOK(OtherOpVal, Shl, SHL); }
-shr             { RET_TOK(OtherOpVal, Shr, SHR); }
+shr             { RET_TOK_OBSOLETE(OtherOpVal, LShr, LSHR); }
+lshr            { RET_TOK(OtherOpVal, LShr, LSHR); }
+ashr            { RET_TOK(OtherOpVal, AShr, ASHR); }
 vanext          { return VANEXT_old; }
 vaarg           { return VAARG_old; }
 va_arg          { RET_TOK(OtherOpVal, VAArg , VAARG); }
 ret             { RET_TOK(TermOpVal, Ret, RET); }
 br              { RET_TOK(TermOpVal, Br, BR); }
Index: lib/AsmParser/Lexer.l.cvs
===================================================================
RCS file: /var/cvs/llvm/llvm/lib/AsmParser/Lexer.l.cvs,v
retrieving revision 1.10
diff -t -d -u -p -5 -r1.10 Lexer.l.cvs
--- lib/AsmParser/Lexer.l.cvs   2 Nov 2006 20:25:49 -0000       1.10
+++ lib/AsmParser/Lexer.l.cvs   4 Nov 2006 00:19:08 -0000
@@ -278,11 +278,13 @@ setge           { RET_TOK(BinaryOpVal, S
 phi             { RET_TOK(OtherOpVal, PHI, PHI_TOK); }
 call            { RET_TOK(OtherOpVal, Call, CALL); }
 cast            { RET_TOK(OtherOpVal, Cast, CAST); }
 select          { RET_TOK(OtherOpVal, Select, SELECT); }
 shl             { RET_TOK(OtherOpVal, Shl, SHL); }
-shr             { RET_TOK(OtherOpVal, Shr, SHR); }
+shr             { RET_TOK_OBSOLETE(OtherOpVal, LShr, LSHR); }
+lshr            { RET_TOK(OtherOpVal, LShr, LSHR); }
+ashr            { RET_TOK(OtherOpVal, AShr, ASHR); }
 vanext          { return VANEXT_old; }
 vaarg           { return VAARG_old; }
 va_arg          { RET_TOK(OtherOpVal, VAArg , VAARG); }
 ret             { RET_TOK(TermOpVal, Ret, RET); }
 br              { RET_TOK(TermOpVal, Br, BR); }
Index: lib/AsmParser/llvmAsmParser.cpp.cvs
===================================================================
RCS file: /var/cvs/llvm/llvm/lib/AsmParser/llvmAsmParser.cpp.cvs,v
retrieving revision 1.23
diff -t -d -u -p -5 -r1.23 llvmAsmParser.cpp.cvs
--- lib/AsmParser/llvmAsmParser.cpp.cvs 2 Nov 2006 20:25:49 -0000       1.23
+++ lib/AsmParser/llvmAsmParser.cpp.cvs 4 Nov 2006 00:19:12 -0000
@@ -165,17 +165,18 @@
     GETELEMENTPTR = 356,
     PHI_TOK = 357,
     CAST = 358,
     SELECT = 359,
     SHL = 360,
-     SHR = 361,
-     VAARG = 362,
-     EXTRACTELEMENT = 363,
-     INSERTELEMENT = 364,
-     SHUFFLEVECTOR = 365,
-     VAARG_old = 366,
-     VANEXT_old = 367
+     LSHR = 361,
+     ASHR = 362,
+     VAARG = 363,
+     EXTRACTELEMENT = 364,
+     INSERTELEMENT = 365,
+     SHUFFLEVECTOR = 366,
+     VAARG_old = 367,
+     VANEXT_old = 368
   };
 #endif
 /* Tokens.  */
 #define ESINT64VAL 258
 #define EUINT64VAL 259
@@ -278,23 +279,24 @@
 #define GETELEMENTPTR 356
 #define PHI_TOK 357
 #define CAST 358
 #define SELECT 359
 #define SHL 360
-#define SHR 361
-#define VAARG 362
-#define EXTRACTELEMENT 363
-#define INSERTELEMENT 364
-#define SHUFFLEVECTOR 365
-#define VAARG_old 366
-#define VANEXT_old 367
+#define LSHR 361
+#define ASHR 362
+#define VAARG 363
+#define EXTRACTELEMENT 364
+#define INSERTELEMENT 365
+#define SHUFFLEVECTOR 366
+#define VAARG_old 367
+#define VANEXT_old 368




 /* Copy the first part of user declarations.  */
-#line 14 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+#line 14 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"

 #include "ParserInternals.h"
 #include "llvm/CallingConv.h"
 #include "llvm/InlineAsm.h"
 #include "llvm/Instructions.h"
@@ -1135,11 +1137,34 @@ sanitizeOpCode(OpcodeInfo<Instruction::B
      break;
  }
  // Its not obsolete any more, we fixed it.
  OI.obsolete = false;
 }
-
+/// This function is is similar to the previous overload ov sanitizeOpCode but
+/// operates on Instruction::OtherOps instead of Instruction::BinaryOps.
+/// @brief Convert obsolete opcodes to new values
+static void
+sanitizeOpCode(OpcodeInfo<Instruction::OtherOps> &OI, const PATypeHolder& PATy)
+{
+  // If its not obsolete, don't do anything
+  if (!OI.obsolete)
+    return;
+
+  const Type* Ty = PATy; // type conversion
+  switch (OI.opcode) {
+  default:
+    GenerateError("Invalid obsolete opcode (check Lexer.l)");
+    break;
+  case Instruction::LShr:
+    if (Ty->isSigned())
+      OI.opcode = Instruction::AShr;
+    break;
+  }
+  // Its not obsolete any more, we fixed it.
+  OI.obsolete = false;
+}
+
 // common code from the two 'RunVMAsmParser' functions
 static Module* RunParser(Module * M) {

  llvmAsmlineno = 1;      // Reset the current line number...
  ObsoleteVarArgs = false;
@@ -1312,11 +1337,11 @@ Module *llvm::RunVMAsmParser(const char
 #ifndef YYTOKEN_TABLE
 # define YYTOKEN_TABLE 0
 #endif

 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 1016 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+#line 1039 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
 typedef union YYSTYPE {
  llvm::Module                           *ModuleVal;
  llvm::Function                         *FunctionVal;
  std::pair<llvm::PATypeHolder*, char*>  *ArgVal;
  llvm::BasicBlock                       *BasicBlockVal;
@@ -1353,11 +1378,11 @@ typedef union YYSTYPE {
  MemOpInfo                         MemOpVal;
  OtherOpInfo                       OtherOpVal;
  llvm::Module::Endianness          Endianness;
 } YYSTYPE;
 /* Line 196 of yacc.c.  */
-#line 1359 "llvmAsmParser.tab.c"
+#line 1384 "llvmAsmParser.tab.c"
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
 # define YYSTYPE_IS_TRIVIAL 1
 #endif

@@ -1365,11 +1390,11 @@ typedef union YYSTYPE {

 /* Copy the second part of user declarations.  */


 /* Line 219 of yacc.c.  */
-#line 1371 "llvmAsmParser.tab.c"
+#line 1396 "llvmAsmParser.tab.c"

 #if ! defined (YYSIZE_T) && defined (__SIZE_TYPE__)
 # define YYSIZE_T __SIZE_TYPE__
 #endif
 #if ! defined (YYSIZE_T) && defined (size_t)
@@ -1516,24 +1541,24 @@ union yyalloc
 #endif

 /* YYFINAL -- State number of the termination state. */
 #define YYFINAL  4
 /* YYLAST -- Last index in YYTABLE.  */
-#define YYLAST   1357
+#define YYLAST   1310

 /* YYNTOKENS -- Number of terminals. */
-#define YYNTOKENS  127
+#define YYNTOKENS  128
 /* YYNNTS -- Number of nonterminals. */
 #define YYNNTS  75
 /* YYNRULES -- Number of rules. */
-#define YYNRULES  256
+#define YYNRULES  257
 /* YYNRULES -- Number of states. */
-#define YYNSTATES  521
+#define YYNSTATES  522

 /* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX.  */
 #define YYUNDEFTOK  2
-#define YYMAXUTOK   367
+#define YYMAXUTOK   368

 #define YYTRANSLATE(YYX)                                                \
  ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)

 /* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX.  */
@@ -1541,19 +1566,19 @@ static const unsigned char yytranslate[]
 {
       0,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     116,   117,   125,     2,   114,     2,     2,     2,     2,     2,
+     117,   118,   126,     2,   115,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     121,   113,   122,     2,     2,     2,     2,     2,     2,     2,
+     122,   114,   123,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-       2,   118,   115,   120,     2,     2,     2,     2,     2,   126,
+       2,   119,   116,   121,     2,     2,     2,     2,     2,   127,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
-     119,     2,     2,   123,     2,   124,     2,     2,     2,     2,
+     120,     2,     2,   124,     2,   125,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
       2,     2,     2,     2,     2,     2,     2,     2,     2,     2,
@@ -1573,163 +1598,163 @@ static const unsigned char yytranslate[]
      55,    56,    57,    58,    59,    60,    61,    62,    63,    64,
      65,    66,    67,    68,    69,    70,    71,    72,    73,    74,
      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
      95,    96,    97,    98,    99,   100,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,   111,   112
+     105,   106,   107,   108,   109,   110,   111,   112,   113
 };

 #if YYDEBUG
 /* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
   YYRHS.  */
 static const unsigned short int yyprhs[] =
 {
       0,     0,     3,     5,     7,     9,    11,    13,    15,    17,
      19,    21,    23,    25,    27,    29,    31,    33,    35,    37,
      39,    41,    43,    45,    47,    49,    51,    53,    55,    57,
-      59,    61,    63,    65,    67,    69,    71,    73,    75,    78,
-      79,    81,    83,    85,    87,    89,    91,    93,    94,    95,
-      97,    99,   101,   103,   105,   107,   110,   111,   114,   115,
-     119,   122,   123,   125,   126,   130,   132,   135,   137,   139,
+      59,    61,    63,    65,    67,    69,    71,    73,    75,    77,
+      80,    81,    83,    85,    87,    89,    91,    93,    95,    96,
+      97,    99,   101,   103,   105,   107,   109,   112,   113,   116,
+     117,   121,   124,   125,   127,   128,   132,   134,   137,   139,
     141,   143,   145,   147,   149,   151,   153,   155,   157,   159,
-     161,   163,   165,   167,   169,   171,   173,   175,   177,   180,
-     185,   191,   197,   201,   204,   207,   209,   213,   215,   219,
-     221,   222,   227,   231,   235,   240,   245,   249,   252,   255,
-     258,   261,   264,   267,   270,   273,   276,   279,   286,   292,
-     301,   308,   315,   322,   329,   336,   345,   354,   358,   360,
-     362,   364,   366,   369,   372,   377,   380,   382,   387,   390,
-     395,   396,   404,   405,   413,   414,   422,   423,   431,   435,
-     440,   441,   443,   445,   447,   451,   455,   459,   463,   467,
-     471,   473,   474,   476,   478,   480,   481,   484,   488,   490,
-     492,   496,   498,   499,   508,   510,   512,   516,   518,   520,
-     523,   524,   526,   528,   529,   534,   535,   537,   539,   541,
-     543,   545,   547,   549,   551,   553,   557,   559,   565,   567,
-     569,   571,   573,   576,   579,   582,   586,   589,   590,   592,
-     595,   598,   602,   612,   622,   631,   645,   647,   649,   656,
-     662,   665,   672,   680,   682,   686,   688,   689,   692,   694,
-     700,   706,   712,   715,   720,   725,   732,   737,   742,   747,
-     752,   759,   766,   769,   777,   779,   782,   783,   785,   786,
-     790,   797,   801,   808,   811,   816,   823
+     161,   163,   165,   167,   169,   171,   173,   175,   177,   179,
+     182,   187,   193,   199,   203,   206,   209,   211,   215,   217,
+     221,   223,   224,   229,   233,   237,   242,   247,   251,   254,
+     257,   260,   263,   266,   269,   272,   275,   278,   281,   288,
+     294,   303,   310,   317,   324,   331,   338,   347,   356,   360,
+     362,   364,   366,   368,   371,   374,   379,   382,   384,   389,
+     392,   397,   398,   406,   407,   415,   416,   424,   425,   433,
+     437,   442,   443,   445,   447,   449,   453,   457,   461,   465,
+     469,   473,   475,   476,   478,   480,   482,   483,   486,   490,
+     492,   494,   498,   500,   501,   510,   512,   514,   518,   520,
+     522,   525,   526,   528,   530,   531,   536,   537,   539,   541,
+     543,   545,   547,   549,   551,   553,   555,   559,   561,   567,
+     569,   571,   573,   575,   578,   581,   584,   588,   591,   592,
+     594,   597,   600,   604,   614,   624,   633,   647,   649,   651,
+     658,   664,   667,   674,   682,   684,   688,   690,   691,   694,
+     696,   702,   708,   714,   717,   722,   727,   734,   739,   744,
+     749,   754,   761,   768,   771,   779,   781,   784,   785,   787,
+     788,   792,   799,   803,   810,   813,   818,   825
 };

 /* YYRHS -- A `-1'-separated list of the rules' RHS. */
 static const short int yyrhs[] =
 {
-     158,     0,    -1,     5,    -1,     6,    -1,     3,    -1,     4,
+     159,     0,    -1,     5,    -1,     6,    -1,     3,    -1,     4,
      -1,    78,    -1,    79,    -1,    80,    -1,    81,    -1,    82,
      -1,    83,    -1,    84,    -1,    85,    -1,    86,    -1,    87,
      -1,    88,    -1,    89,    -1,    90,    -1,    91,    -1,    92,
      -1,    93,    -1,    94,    -1,    95,    -1,   105,    -1,   106,
-      -1,    16,    -1,    14,    -1,    12,    -1,    10,    -1,    17,
-      -1,    15,    -1,    13,    -1,    11,    -1,   134,    -1,   135,
-      -1,    18,    -1,    19,    -1,   170,   113,    -1,    -1,    41,
-      -1,    42,    -1,    43,    -1,    44,    -1,    45,    -1,    46,
-      -1,    47,    -1,    -1,    -1,    65,    -1,    66,    -1,    67,
-      -1,    68,    -1,    69,    -1,    70,    -1,    64,     4,    -1,
-      -1,    57,     4,    -1,    -1,   114,    57,     4,    -1,    34,
-      24,    -1,    -1,   143,    -1,    -1,   114,   146,   145,    -1,
-     143,    -1,    57,     4,    -1,   149,    -1,     8,    -1,   151,
-      -1,     8,    -1,   151,    -1,     9,    -1,    10,    -1,    11,
-      -1,    12,    -1,    13,    -1,    14,    -1,    15,    -1,    16,
-      -1,    17,    -1,    18,    -1,    19,    -1,    20,    -1,    21,
-      -1,    48,    -1,   150,    -1,   185,    -1,   115,     4,    -1,
-     148,   116,   153,   117,    -1,   118,     4,   119,   151,   120,
-      -1,   121,     4,   119,   151,   122,    -1,   123,   152,   124,
-      -1,   123,   124,    -1,   151,   125,    -1,   151,    -1,   152,
-     114,   151,    -1,   152,    -1,   152,   114,    37,    -1,    37,
-      -1,    -1,   149,   118,   156,   120,    -1,   149,   118,   120,
-      -1,   149,   126,    24,    -1,   149,   121,   156,   122,    -1,
-     149,   123,   156,   124,    -1,   149,   123,   124,    -1,   149,
-      38,    -1,   149,    39,    -1,   149,   185,    -1,   149,   155,
-      -1,   149,    26,    -1,   134,   129,    -1,   135,     4,    -1,
-       9,    27,    -1,     9,    28,    -1,   137,     7,    -1,   103,
-     116,   154,    36,   149,   117,    -1,   101,   116,   154,   199,
-     117,    -1,   104,   116,   154,   114,   154,   114,   154,   117,
-      -1,   130,   116,   154,   114,   154,   117,    -1,   131,   116,
-     154,   114,   154,   117,    -1,   132,   116,   154,   114,   154,
-     117,    -1,   133,   116,   154,   114,   154,   117,    -1,   108,
-     116,   154,   114,   154,   117,    -1,   109,   116,   154,   114,
-     154,   114,   154,   117,    -1,   110,   116,   154,   114,   154,
-     114,   154,   117,    -1,   156,   114,   154,    -1,   154,    -1,
-      32,    -1,    33,    -1,   159,    -1,   159,   179,    -1,   159,
-     181,    -1,   159,    62,    61,   165,    -1,   159,    25,    -1,
-     160,    -1,   160,   138,    20,   147,    -1,   160,   181,    -1,
-     160,    62,    61,   165,    -1,    -1,   160,   138,   139,   157,
-     154,   161,   145,    -1,    -1,   160,   138,    50,   157,   149,
-     162,   145,    -1,    -1,   160,   138,    45,   157,   149,   163,
-     145,    -1,    -1,   160,   138,    47,   157,   149,   164,   145,
-      -1,   160,    51,   167,    -1,   160,    58,   113,   168,    -1,
-      -1,    24,    -1,    56,    -1,    55,    -1,    53,   113,   166,
-      -1,    54,   113,     4,    -1,    52,   113,    24,    -1,    71,
-     113,    24,    -1,   118,   169,   120,    -1,   169,   114,    24,
-      -1,    24,    -1,    -1,    22,    -1,    24,    -1,   170,    -1,
-      -1,   149,   171,    -1,   173,   114,   172,    -1,   172,    -1,
-     173,    -1,   173,   114,    37,    -1,    37,    -1,    -1,   140,
-     147,   170,   116,   174,   117,   144,   141,    -1,    29,    -1,
-     123,    -1,   139,   175,   176,    -1,    30,    -1,   124,    -1,
-     188,   178,    -1,    -1,    45,    -1,    47,    -1,    -1,    31,
-     182,   180,   175,    -1,    -1,    63,    -1,     3,    -1,     4,
-      -1,     7,    -1,    27,    -1,    28,    -1,    38,    -1,    39,
-      -1,    26,    -1,   121,   156,   122,    -1,   155,    -1,    61,
-     183,    24,   114,    24,    -1,   128,    -1,   170,    -1,   185,
-      -1,   184,    -1,   149,   186,    -1,   188,   189,    -1,   177,
-     189,    -1,   190,   138,   191,    -1,   190,   193,    -1,    -1,
-      23,    -1,    72,   187,    -1,    72,     8,    -1,    73,    21,
-     186,    -1,    73,     9,   186,   114,    21,   186,   114,    21,
-     186,    -1,    74,   136,   186,   114,    21,   186,   118,   192,
-     120,    -1,    74,   136,   186,   114,    21,   186,   118,   120,
-      -1,    75,   140,   147,   186,   116,   196,   117,    36,    21,
-     186,    76,    21,   186,    -1,    76,    -1,    77,    -1,   192,
-     136,   184,   114,    21,   186,    -1,   136,   184,   114,    21,
-     186,    -1,   138,   198,    -1,   149,   118,   186,   114,   186,
-     120,    -1,   194,   114,   118,   186,   114,   186,   120,    -1,
-     187,    -1,   195,   114,   187,    -1,   195,    -1,    -1,    60,
-      59,    -1,    59,    -1,   130,   149,   186,   114,   186,    -1,
-     131,   149,   186,   114,   186,    -1,   132,   149,   186,   114,
-     186,    -1,    49,   187,    -1,   133,   187,   114,   187,    -1,
-     103,   187,    36,   149,    -1,   104,   187,   114,   187,   114,
-     187,    -1,   107,   187,   114,   149,    -1,   111,   187,   114,
-     149,    -1,   112,   187,   114,   149,    -1,   108,   187,   114,
-     187,    -1,   109,   187,   114,   187,   114,   187,    -1,   110,
-     187,   114,   187,   114,   187,    -1,   102,   194,    -1,   197,
-     140,   147,   186,   116,   196,   117,    -1,   201,    -1,   114,
-     195,    -1,    -1,    35,    -1,    -1,    96,   149,   142,    -1,
-      96,   149,   114,    15,   186,   142,    -1,    97,   149,   142,
-      -1,    97,   149,   114,    15,   186,   142,    -1,    98,   187,
-      -1,   200,    99,   149,   186,    -1,   200,   100,   187,   114,
-     149,   186,    -1,   101,   149,   186,   199,    -1
+      -1,   107,    -1,    16,    -1,    14,    -1,    12,    -1,    10,
+      -1,    17,    -1,    15,    -1,    13,    -1,    11,    -1,   135,
+      -1,   136,    -1,    18,    -1,    19,    -1,   171,   114,    -1,
+      -1,    41,    -1,    42,    -1,    43,    -1,    44,    -1,    45,
+      -1,    46,    -1,    47,    -1,    -1,    -1,    65,    -1,    66,
+      -1,    67,    -1,    68,    -1,    69,    -1,    70,    -1,    64,
+       4,    -1,    -1,    57,     4,    -1,    -1,   115,    57,     4,
+      -1,    34,    24,    -1,    -1,   144,    -1,    -1,   115,   147,
+     146,    -1,   144,    -1,    57,     4,    -1,   150,    -1,     8,
+      -1,   152,    -1,     8,    -1,   152,    -1,     9,    -1,    10,
+      -1,    11,    -1,    12,    -1,    13,    -1,    14,    -1,    15,
+      -1,    16,    -1,    17,    -1,    18,    -1,    19,    -1,    20,
+      -1,    21,    -1,    48,    -1,   151,    -1,   186,    -1,   116,
+       4,    -1,   149,   117,   154,   118,    -1,   119,     4,   120,
+     152,   121,    -1,   122,     4,   120,   152,   123,    -1,   124,
+     153,   125,    -1,   124,   125,    -1,   152,   126,    -1,   152,
+      -1,   153,   115,   152,    -1,   153,    -1,   153,   115,    37,
+      -1,    37,    -1,    -1,   150,   119,   157,   121,    -1,   150,
+     119,   121,    -1,   150,   127,    24,    -1,   150,   122,   157,
+     123,    -1,   150,   124,   157,   125,    -1,   150,   124,   125,
+      -1,   150,    38,    -1,   150,    39,    -1,   150,   186,    -1,
+     150,   156,    -1,   150,    26,    -1,   135,   130,    -1,   136,
+       4,    -1,     9,    27,    -1,     9,    28,    -1,   138,     7,
+      -1,   103,   117,   155,    36,   150,   118,    -1,   101,   117,
+     155,   200,   118,    -1,   104,   117,   155,   115,   155,   115,
+     155,   118,    -1,   131,   117,   155,   115,   155,   118,    -1,
+     132,   117,   155,   115,   155,   118,    -1,   133,   117,   155,
+     115,   155,   118,    -1,   134,   117,   155,   115,   155,   118,
+      -1,   109,   117,   155,   115,   155,   118,    -1,   110,   117,
+     155,   115,   155,   115,   155,   118,    -1,   111,   117,   155,
+     115,   155,   115,   155,   118,    -1,   157,   115,   155,    -1,
+     155,    -1,    32,    -1,    33,    -1,   160,    -1,   160,   180,
+      -1,   160,   182,    -1,   160,    62,    61,   166,    -1,   160,
+      25,    -1,   161,    -1,   161,   139,    20,   148,    -1,   161,
+     182,    -1,   161,    62,    61,   166,    -1,    -1,   161,   139,
+     140,   158,   155,   162,   146,    -1,    -1,   161,   139,    50,
+     158,   150,   163,   146,    -1,    -1,   161,   139,    45,   158,
+     150,   164,   146,    -1,    -1,   161,   139,    47,   158,   150,
+     165,   146,    -1,   161,    51,   168,    -1,   161,    58,   114,
+     169,    -1,    -1,    24,    -1,    56,    -1,    55,    -1,    53,
+     114,   167,    -1,    54,   114,     4,    -1,    52,   114,    24,
+      -1,    71,   114,    24,    -1,   119,   170,   121,    -1,   170,
+     115,    24,    -1,    24,    -1,    -1,    22,    -1,    24,    -1,
+     171,    -1,    -1,   150,   172,    -1,   174,   115,   173,    -1,
+     173,    -1,   174,    -1,   174,   115,    37,    -1,    37,    -1,
+      -1,   141,   148,   171,   117,   175,   118,   145,   142,    -1,
+      29,    -1,   124,    -1,   140,   176,   177,    -1,    30,    -1,
+     125,    -1,   189,   179,    -1,    -1,    45,    -1,    47,    -1,
+      -1,    31,   183,   181,   176,    -1,    -1,    63,    -1,     3,
+      -1,     4,    -1,     7,    -1,    27,    -1,    28,    -1,    38,
+      -1,    39,    -1,    26,    -1,   122,   157,   123,    -1,   156,
+      -1,    61,   184,    24,   115,    24,    -1,   129,    -1,   171,
+      -1,   186,    -1,   185,    -1,   150,   187,    -1,   189,   190,
+      -1,   178,   190,    -1,   191,   139,   192,    -1,   191,   194,
+      -1,    -1,    23,    -1,    72,   188,    -1,    72,     8,    -1,
+      73,    21,   187,    -1,    73,     9,   187,   115,    21,   187,
+     115,    21,   187,    -1,    74,   137,   187,   115,    21,   187,
+     119,   193,   121,    -1,    74,   137,   187,   115,    21,   187,
+     119,   121,    -1,    75,   141,   148,   187,   117,   197,   118,
+      36,    21,   187,    76,    21,   187,    -1,    76,    -1,    77,
+      -1,   193,   137,   185,   115,    21,   187,    -1,   137,   185,
+     115,    21,   187,    -1,   139,   199,    -1,   150,   119,   187,
+     115,   187,   121,    -1,   195,   115,   119,   187,   115,   187,
+     121,    -1,   188,    -1,   196,   115,   188,    -1,   196,    -1,
+      -1,    60,    59,    -1,    59,    -1,   131,   150,   187,   115,
+     187,    -1,   132,   150,   187,   115,   187,    -1,   133,   150,
+     187,   115,   187,    -1,    49,   188,    -1,   134,   188,   115,
+     188,    -1,   103,   188,    36,   150,    -1,   104,   188,   115,
+     188,   115,   188,    -1,   108,   188,   115,   150,    -1,   112,
+     188,   115,   150,    -1,   113,   188,   115,   150,    -1,   109,
+     188,   115,   188,    -1,   110,   188,   115,   188,   115,   188,
+      -1,   111,   188,   115,   188,   115,   188,    -1,   102,   195,
+      -1,   198,   141,   148,   187,   117,   197,   118,    -1,   202,
+      -1,   115,   196,    -1,    -1,    35,    -1,    -1,    96,   150,
+     143,    -1,    96,   150,   115,    15,   187,   143,    -1,    97,
+     150,   143,    -1,    97,   150,   115,    15,   187,   143,    -1,
+      98,   188,    -1,   201,    99,   150,   187,    -1,   201,   100,
+     188,   115,   150,   187,    -1,   101,   150,   187,   200,    -1
 };

 /* YYRLINE[YYN] -- source line where rule number YYN was defined.  */
 static const unsigned short int yyrline[] =
 {
-       0,  1139,  1139,  1140,  1148,  1149,  1159,  1159,  1159,  1159,
-    1159,  1159,  1159,  1159,  1159,  1160,  1160,  1160,  1161,  1161,
-    1161,  1161,  1161,  1161,  1163,  1163,  1167,  1167,  1167,  1167,
-    1168,  1168,  1168,  1168,  1169,  1169,  1170,  1170,  1173,  1177,
-    1182,  1183,  1184,  1185,  1186,  1187,  1188,  1189,  1191,  1192,
-    1193,  1194,  1195,  1196,  1197,  1198,  1207,  1208,  1214,  1215,
-    1223,  1231,  1232,  1237,  1238,  1239,  1244,  1258,  1258,  1259,
-    1259,  1261,  1271,  1271,  1271,  1271,  1271,  1271,  1271,  1272,
-    1272,  1272,  1272,  1272,  1272,  1273,  1277,  1281,  1289,  1297,
-    1310,  1315,  1327,  1337,  1341,  1352,  1357,  1363,  1364,  1368,
-    1372,  1383,  1409,  1423,  1453,  1479,  1500,  1513,  1523,  1528,
-    1589,  1596,  1605,  1611,  1617,  1621,  1625,  1633,  1644,  1676,
-    1684,  1711,  1722,  1728,  1736,  1742,  1748,  1757,  1761,  1769,
-    1769,  1779,  1787,  1792,  1796,  1800,  1804,  1819,  1841,  1844,
-    1847,  1847,  1855,  1855,  1863,  1863,  1871,  1871,  1880,  1883,
-    1886,  1890,  1903,  1904,  1906,  1910,  1919,  1923,  1928,  1930,
-    1935,  1940,  1949,  1949,  1950,  1950,  1952,  1959,  1965,  1972,
-    1976,  1982,  1987,  1992,  2087,  2087,  2089,  2097,  2097,  2099,
-    2104,  2105,  2106,  2108,  2108,  2118,  2122,  2127,  2131,  2135,
-    2139,  2143,  2147,  2151,  2155,  2159,  2184,  2188,  2202,  2206,
-    2212,  2212,  2218,  2223,  2227,  2236,  2247,  2252,  2264,  2277,
-    2281,  2285,  2290,  2299,  2318,  2327,  2383,  2387,  2394,  2405,
-    2418,  2427,  2436,  2446,  2450,  2457,  2457,  2459,  2463,  2468,
-    2490,  2505,  2519,  2532,  2540,  2548,  2556,  2562,  2582,  2605,
-    2611,  2617,  2623,  2638,  2697,  2704,  2707,  2712,  2716,  2723,
-    2728,  2734,  2739,  2745,  2753,  2765,  2780
+       0,  1162,  1162,  1163,  1171,  1172,  1182,  1182,  1182,  1182,
+    1182,  1182,  1182,  1182,  1182,  1183,  1183,  1183,  1184,  1184,
+    1184,  1184,  1184,  1184,  1186,  1186,  1186,  1190,  1190,  1190,
+    1190,  1191,  1191,  1191,  1191,  1192,  1192,  1193,  1193,  1196,
+    1200,  1205,  1206,  1207,  1208,  1209,  1210,  1211,  1212,  1214,
+    1215,  1216,  1217,  1218,  1219,  1220,  1221,  1230,  1231,  1237,
+    1238,  1246,  1254,  1255,  1260,  1261,  1262,  1267,  1281,  1281,
+    1282,  1282,  1284,  1294,  1294,  1294,  1294,  1294,  1294,  1294,
+    1295,  1295,  1295,  1295,  1295,  1295,  1296,  1300,  1304,  1312,
+    1320,  1333,  1338,  1350,  1360,  1364,  1375,  1380,  1386,  1387,
+    1391,  1395,  1406,  1432,  1446,  1476,  1502,  1523,  1536,  1546,
+    1551,  1612,  1619,  1628,  1634,  1640,  1644,  1648,  1656,  1667,
+    1699,  1707,  1734,  1745,  1751,  1762,  1768,  1774,  1783,  1787,
+    1795,  1795,  1805,  1813,  1818,  1822,  1826,  1830,  1845,  1867,
+    1870,  1873,  1873,  1881,  1881,  1889,  1889,  1897,  1897,  1906,
+    1909,  1912,  1916,  1929,  1930,  1932,  1936,  1945,  1949,  1954,
+    1956,  1961,  1966,  1975,  1975,  1976,  1976,  1978,  1985,  1991,
+    1998,  2002,  2008,  2013,  2018,  2113,  2113,  2115,  2123,  2123,
+    2125,  2130,  2131,  2132,  2134,  2134,  2144,  2148,  2153,  2157,
+    2161,  2165,  2169,  2173,  2177,  2181,  2185,  2210,  2214,  2228,
+    2232,  2238,  2238,  2244,  2249,  2253,  2262,  2273,  2278,  2290,
+    2303,  2307,  2311,  2316,  2325,  2344,  2353,  2409,  2413,  2420,
+    2431,  2444,  2453,  2462,  2472,  2476,  2483,  2483,  2485,  2489,
+    2494,  2516,  2531,  2545,  2558,  2569,  2577,  2585,  2591,  2611,
+    2634,  2640,  2646,  2652,  2667,  2726,  2733,  2736,  2741,  2745,
+    2752,  2757,  2763,  2768,  2774,  2782,  2794,  2809
 };
 #endif

 #if YYDEBUG || YYERROR_VERBOSE || YYTOKEN_TABLE
 /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
@@ -1750,25 +1775,25 @@ static const char *const yytname[] =
  "COLDCC_TOK", "X86_STDCALLCC_TOK", "X86_FASTCALLCC_TOK", "DATALAYOUT",
  "RET", "BR", "SWITCH", "INVOKE", "UNWIND", "UNREACHABLE", "ADD", "SUB",
  "MUL", "UDIV", "SDIV", "FDIV", "UREM", "SREM", "FREM", "AND", "OR",
  "XOR", "SETLE", "SETGE", "SETLT", "SETGT", "SETEQ", "SETNE", "MALLOC",
  "ALLOCA", "FREE", "LOAD", "STORE", "GETELEMENTPTR", "PHI_TOK", "CAST",
-  "SELECT", "SHL", "SHR", "VAARG", "EXTRACTELEMENT", "INSERTELEMENT",
-  "SHUFFLEVECTOR", "VAARG_old", "VANEXT_old", "'='", "','", "'\\\\'",
-  "'('", "')'", "'['", "'x'", "']'", "'<'", "'>'", "'{'", "'}'", "'*'",
-  "'c'", "$accept", "INTVAL", "EINT64VAL", "ArithmeticOps", "LogicalOps",
-  "SetCondOps", "ShiftOps", "SIntType", "UIntType", "IntType", "FPType",
-  "OptAssign", "OptLinkage", "OptCallingConv", "OptAlign", "OptCAlign",
-  "SectionString", "OptSection", "GlobalVarAttributes",
-  "GlobalVarAttribute", "TypesV", "UpRTypesV", "Types", "PrimType",
-  "UpRTypes", "TypeListI", "ArgTypeListI", "ConstVal", "ConstExpr",
-  "ConstVector", "GlobalType", "Module", "FunctionList", "ConstPool", "@1",
-  "@2", "@3", "@4", "AsmBlock", "BigOrLittle", "TargetDefinition",
-  "LibrariesDefinition", "LibList", "Name", "OptName", "ArgVal",
-  "ArgListH", "ArgList", "FunctionHeaderH", "BEGIN", "FunctionHeader",
-  "END", "Function", "FnDeclareLinkage", "FunctionProto", "@5",
-  "OptSideEffect", "ConstValueRef", "SymbolicValueRef", "ValueRef",
+  "SELECT", "SHL", "LSHR", "ASHR", "VAARG", "EXTRACTELEMENT",
+  "INSERTELEMENT", "SHUFFLEVECTOR", "VAARG_old", "VANEXT_old", "'='",
+  "','", "'\\\\'", "'('", "')'", "'['", "'x'", "']'", "'<'", "'>'", "'{'",
+  "'}'", "'*'", "'c'", "$accept", "INTVAL", "EINT64VAL", "ArithmeticOps",
+  "LogicalOps", "SetCondOps", "ShiftOps", "SIntType", "UIntType",
+  "IntType", "FPType", "OptAssign", "OptLinkage", "OptCallingConv",
+  "OptAlign", "OptCAlign", "SectionString", "OptSection",
+  "GlobalVarAttributes", "GlobalVarAttribute", "TypesV", "UpRTypesV",
+  "Types", "PrimType", "UpRTypes", "TypeListI", "ArgTypeListI", "ConstVal",
+  "ConstExpr", "ConstVector", "GlobalType", "Module", "FunctionList",
+  "ConstPool", "@1", "@2", "@3", "@4", "AsmBlock", "BigOrLittle",
+  "TargetDefinition", "LibrariesDefinition", "LibList", "Name", "OptName",
+  "ArgVal", "ArgListH", "ArgList", "FunctionHeaderH", "BEGIN",
+  "FunctionHeader", "END", "Function", "FnDeclareLinkage", "FunctionProto",
+  "@5", "OptSideEffect", "ConstValueRef", "SymbolicValueRef", "ValueRef",
  "ResolvedVal", "BasicBlockList", "BasicBlock", "InstructionList",
  "BBTerminatorInst", "JumpTable", "Inst", "PHIList", "ValueRefList",
  "ValueRefListE", "OptTailCall", "InstVal", "IndexList", "OptVolatile",
  "MemoryInst", 0
 };
@@ -1788,565 +1813,557 @@ static const unsigned short int yytoknum
     315,   316,   317,   318,   319,   320,   321,   322,   323,   324,
     325,   326,   327,   328,   329,   330,   331,   332,   333,   334,
     335,   336,   337,   338,   339,   340,   341,   342,   343,   344,
     345,   346,   347,   348,   349,   350,   351,   352,   353,   354,
     355,   356,   357,   358,   359,   360,   361,   362,   363,   364,
-     365,   366,   367,    61,    44,    92,    40,    41,    91,   120,
-      93,    60,    62,   123,   125,    42,    99
+     365,   366,   367,   368,    61,    44,    92,    40,    41,    91,
+     120,    93,    60,    62,   123,   125,    42,    99
 };
 # endif

 /* YYR1[YYN] -- Symbol number of symbol that rule YYN derives.  */
 static const unsigned char yyr1[] =
 {
-       0,   127,   128,   128,   129,   129,   130,   130,   130,   130,
-     130,   130,   130,   130,   130,   131,   131,   131,   132,   132,
-     132,   132,   132,   132,   133,   133,   134,   134,   134,   134,
-     135,   135,   135,   135,   136,   136,   137,   137,   138,   138,
-     139,   139,   139,   139,   139,   139,   139,   139,   140,   140,
-     140,   140,   140,   140,   140,   140,   141,   141,   142,   142,
-     143,   144,   144,   145,   145,   146,   146,   147,   147,   148,
-     148,   149,   150,   150,   150,   150,   150,   150,   150,   150,
-     150,   150,   150,   150,   150,   151,   151,   151,   151,   151,
-     151,   151,   151,   151,   151,   152,   152,   153,   153,   153,
-     153,   154,   154,   154,   154,   154,   154,   154,   154,   154,
-     154,   154,   154,   154,   154,   154,   154,   155,   155,   155,
-     155,   155,   155,   155,   155,   155,   155,   156,   156,   157,
-     157,   158,   159,   159,   159,   159,   159,   160,   160,   160,
-     161,   160,   162,   160,   163,   160,   164,   160,   160,   160,
-     160,   165,   166,   166,   167,   167,   167,   167,   168,   169,
-     169,   169,   170,   170,   171,   171,   172,   173,   173,   174,
-     174,   174,   174,   175,   176,   176,   177,   178,   178,   179,
-     180,   180,   180,   182,   181,   183,   183,   184,   184,   184,
-     184,   184,   184,   184,   184,   184,   184,   184,   185,   185,
-     186,   186,   187,   188,   188,   189,   190,   190,   190,   191,
-     191,   191,   191,   191,   191,   191,   191,   191,   192,   192,
-     193,   194,   194,   195,   195,   196,   196,   197,   197,   198,
-     198,   198,   198,   198,   198,   198,   198,   198,   198,   198,
-     198,   198,   198,   198,   198,   199,   199,   200,   200,   201,
-     201,   201,   201,   201,   201,   201,   201
+       0,   128,   129,   129,   130,   130,   131,   131,   131,   131,
+     131,   131,   131,   131,   131,   132,   132,   132,   133,   133,
+     133,   133,   133,   133,   134,   134,   134,   135,   135,   135,
+     135,   136,   136,   136,   136,   137,   137,   138,   138,   139,
+     139,   140,   140,   140,   140,   140,   140,   140,   140,   141,
+     141,   141,   141,   141,   141,   141,   141,   142,   142,   143,
+     143,   144,   145,   145,   146,   146,   147,   147,   148,   148,
+     149,   149,   150,   151,   151,   151,   151,   151,   151,   151,
+     151,   151,   151,   151,   151,   151,   152,   152,   152,   152,
+     152,   152,   152,   152,   152,   152,   153,   153,   154,   154,
+     154,   154,   155,   155,   155,   155,   155,   155,   155,   155,
+     155,   155,   155,   155,   155,   155,   155,   155,   156,   156,
+     156,   156,   156,   156,   156,   156,   156,   156,   157,   157,
+     158,   158,   159,   160,   160,   160,   160,   160,   161,   161,
+     161,   162,   161,   163,   161,   164,   161,   165,   161,   161,
+     161,   161,   166,   167,   167,   168,   168,   168,   168,   169,
+     170,   170,   170,   171,   171,   172,   172,   173,   174,   174,
+     175,   175,   175,   175,   176,   177,   177,   178,   179,   179,
+     180,   181,   181,   181,   183,   182,   184,   184,   185,   185,
+     185,   185,   185,   185,   185,   185,   185,   185,   185,   186,
+     186,   187,   187,   188,   189,   189,   190,   191,   191,   191,
+     192,   192,   192,   192,   192,   192,   192,   192,   192,   193,
+     193,   194,   195,   195,   196,   196,   197,   197,   198,   198,
+     199,   199,   199,   199,   199,   199,   199,   199,   199,   199,
+     199,   199,   199,   199,   199,   199,   200,   200,   201,   201,
+     202,   202,   202,   202,   202,   202,   202,   202
 };

 /* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN.  */
 static const unsigned char yyr2[] =
 {
       0,     2,     1,     1,     1,     1,     1,     1,     1,     1,
       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     2,     0,
-       1,     1,     1,     1,     1,     1,     1,     0,     0,     1,
-       1,     1,     1,     1,     1,     2,     0,     2,     0,     3,
-       2,     0,     1,     0,     3,     1,     2,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     2,
+       0,     1,     1,     1,     1,     1,     1,     1,     0,     0,
+       1,     1,     1,     1,     1,     1,     2,     0,     2,     0,
+       3,     2,     0,     1,     0,     3,     1,     2,     1,     1,
       1,     1,     1,     1,     1,     1,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     1,     1,     1,     2,     4,
-       5,     5,     3,     2,     2,     1,     3,     1,     3,     1,
-       0,     4,     3,     3,     4,     4,     3,     2,     2,     2,
-       2,     2,     2,     2,     2,     2,     2,     6,     5,     8,
-       6,     6,     6,     6,     6,     8,     8,     3,     1,     1,
-       1,     1,     2,     2,     4,     2,     1,     4,     2,     4,
-       0,     7,     0,     7,     0,     7,     0,     7,     3,     4,
-       0,     1,     1,     1,     3,     3,     3,     3,     3,     3,
-       1,     0,     1,     1,     1,     0,     2,     3,     1,     1,
-       3,     1,     0,     8,     1,     1,     3,     1,     1,     2,
-       0,     1,     1,     0,     4,     0,     1,     1,     1,     1,
-       1,     1,     1,     1,     1,     3,     1,     5,     1,     1,
-       1,     1,     2,     2,     2,     3,     2,     0,     1,     2,
-       2,     3,     9,     9,     8,    13,     1,     1,     6,     5,
-       2,     6,     7,     1,     3,     1,     0,     2,     1,     5,
-       5,     5,     2,     4,     4,     6,     4,     4,     4,     4,
-       6,     6,     2,     7,     1,     2,     0,     1,     0,     3,
-       6,     3,     6,     2,     4,     6,     4
+       1,     1,     1,     1,     1,     1,     1,     1,     1,     2,
+       4,     5,     5,     3,     2,     2,     1,     3,     1,     3,
+       1,     0,     4,     3,     3,     4,     4,     3,     2,     2,
+       2,     2,     2,     2,     2,     2,     2,     2,     6,     5,
+       8,     6,     6,     6,     6,     6,     8,     8,     3,     1,
+       1,     1,     1,     2,     2,     4,     2,     1,     4,     2,
+       4,     0,     7,     0,     7,     0,     7,     0,     7,     3,
+       4,     0,     1,     1,     1,     3,     3,     3,     3,     3,
+       3,     1,     0,     1,     1,     1,     0,     2,     3,     1,
+       1,     3,     1,     0,     8,     1,     1,     3,     1,     1,
+       2,     0,     1,     1,     0,     4,     0,     1,     1,     1,
+       1,     1,     1,     1,     1,     1,     3,     1,     5,     1,
+       1,     1,     1,     2,     2,     2,     3,     2,     0,     1,
+       2,     2,     3,     9,     9,     8,    13,     1,     1,     6,
+       5,     2,     6,     7,     1,     3,     1,     0,     2,     1,
+       5,     5,     5,     2,     4,     4,     6,     4,     4,     4,
+       4,     6,     6,     2,     7,     1,     2,     0,     1,     0,
+       3,     6,     3,     6,     2,     4,     6,     4
 };

 /* YYDEFACT[STATE-NAME] -- Default rule to reduce with in state
   STATE-NUM when YYTABLE doesn't specify something else to do.  Zero
   means the default is an error.  */
 static const unsigned short int yydefact[] =
 {
-     150,     0,    47,   136,     1,   135,   183,    40,    41,    42,
-      43,    44,    45,    46,     0,    48,   207,   132,   133,   207,
-     162,   163,     0,     0,     0,    47,     0,   138,   180,     0,
-       0,    49,    50,    51,    52,    53,    54,     0,     0,   208,
-     204,    39,   177,   178,   179,   203,     0,     0,     0,     0,
-     148,     0,     0,     0,     0,     0,     0,     0,    38,   181,
-     182,    48,   151,   134,    55,     2,     3,    68,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
-      84,    85,     0,     0,     0,     0,   198,     0,     0,    67,
-      86,    71,   199,    87,   174,   175,   176,   248,   206,     0,
-       0,     0,     0,   161,   149,   139,   137,   129,   130,     0,
-       0,     0,     0,   184,    88,     0,     0,    70,    93,    95,
-       0,     0,   100,    94,   247,     0,   228,     0,     0,     0,
-       0,    48,   216,   217,     6,     7,     8,     9,    10,    11,
+     151,     0,    48,   137,     1,   136,   184,    41,    42,    43,
+      44,    45,    46,    47,     0,    49,   208,   133,   134,   208,
+     163,   164,     0,     0,     0,    48,     0,   139,   181,     0,
+       0,    50,    51,    52,    53,    54,    55,     0,     0,   209,
+     205,    40,   178,   179,   180,   204,     0,     0,     0,     0,
+     149,     0,     0,     0,     0,     0,     0,     0,    39,   182,
+     183,    49,   152,   135,    56,     2,     3,    69,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
+      85,    86,     0,     0,     0,     0,   199,     0,     0,    68,
+      87,    72,   200,    88,   175,   176,   177,   249,   207,     0,
+       0,     0,     0,   162,   150,   140,   138,   130,   131,     0,
+       0,     0,     0,   185,    89,     0,     0,    71,    94,    96,
+       0,     0,   101,    95,   248,     0,   229,     0,     0,     0,
+       0,    49,   217,   218,     6,     7,     8,     9,    10,    11,
      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
      22,    23,     0,     0,     0,     0,     0,     0,     0,    24,
-      25,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,   205,    48,   220,     0,   244,   156,   153,   152,   154,
-     155,   157,   160,     0,   144,   146,   142,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,     0,     0,
-       0,     0,   140,     0,     0,     0,    92,   172,    99,    97,
-       0,     0,   232,   227,   210,   209,     0,     0,    29,    33,
-      28,    32,    27,    31,    26,    30,    34,    35,     0,     0,
-      58,    58,   253,     0,     0,   242,     0,     0,     0,     0,
+      25,    26,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,   206,    49,   221,     0,   245,   157,   154,   153,
+     155,   156,   158,   161,     0,   145,   147,   143,    73,    74,
+      75,    76,    77,    78,    79,    80,    81,    82,    83,     0,
+       0,     0,     0,   141,     0,     0,     0,    93,   173,   100,
+      98,     0,     0,   233,   228,   211,   210,     0,     0,    30,
+      34,    29,    33,    28,    32,    27,    31,    35,    36,     0,
+       0,    59,    59,   254,     0,     0,   243,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   158,    63,    63,    63,   114,   115,     4,     5,
-     112,   113,   116,   111,   107,   108,     0,     0,     0,     0,
+       0,     0,     0,   159,    64,    64,    64,   115,   116,     4,
+       5,   113,   114,   117,   112,   108,   109,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-     110,   109,    63,    69,    69,    96,   171,   165,   168,   169,
-       0,     0,    89,   187,   188,   189,   194,   190,   191,   192,
-     193,   185,     0,   196,   201,   200,   202,     0,   211,     0,
-       0,     0,   249,     0,   251,   246,     0,     0,     0,     0,
+       0,   111,   110,    64,    70,    70,    97,   172,   166,   169,
+     170,     0,     0,    90,   188,   189,   190,   195,   191,   192,
+     193,   194,   186,     0,   197,   202,   201,   203,     0,   212,
+       0,     0,     0,   250,     0,   252,   247,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   159,     0,   145,   147,   143,     0,     0,
-       0,     0,     0,     0,   102,   128,     0,     0,   106,     0,
-     103,     0,     0,     0,     0,   141,    90,    91,   164,   166,
-       0,    61,    98,   186,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   256,     0,     0,   234,     0,   236,   239,
-       0,     0,   237,   238,     0,     0,     0,   233,     0,   254,
-       0,     0,     0,    65,    63,   246,     0,     0,     0,     0,
-       0,     0,   101,   104,   105,     0,     0,     0,     0,   170,
-     167,    62,    56,     0,   195,     0,     0,   226,    58,    59,
-      58,   223,   245,     0,     0,     0,     0,     0,   229,   230,
-     231,   226,     0,    60,    66,    64,     0,     0,     0,     0,
-       0,     0,   127,     0,     0,     0,     0,     0,   173,     0,
-       0,     0,   225,     0,     0,   250,   252,     0,     0,     0,
-     235,   240,   241,     0,   255,   118,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,    57,   197,     0,     0,     0,
-     224,   221,     0,   243,   117,     0,   124,     0,     0,   120,
-     121,   122,   123,     0,   214,     0,     0,     0,   222,     0,
-       0,     0,   212,     0,   213,     0,     0,   119,   125,   126,
-       0,     0,     0,     0,     0,     0,   219,     0,     0,   218,
-     215
+       0,     0,     0,     0,   160,     0,   146,   148,   144,     0,
+       0,     0,     0,     0,     0,   103,   129,     0,     0,   107,
+       0,   104,     0,     0,     0,     0,   142,    91,    92,   165,
+     167,     0,    62,    99,   187,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,   257,     0,     0,   235,     0,   237,
+     240,     0,     0,   238,   239,     0,     0,     0,   234,     0,
+     255,     0,     0,     0,    66,    64,   247,     0,     0,     0,
+       0,     0,     0,   102,   105,   106,     0,     0,     0,     0,
+     171,   168,    63,    57,     0,   196,     0,     0,   227,    59,
+      60,    59,   224,   246,     0,     0,     0,     0,     0,   230,
+     231,   232,   227,     0,    61,    67,    65,     0,     0,     0,
+       0,     0,     0,   128,     0,     0,     0,     0,     0,   174,
+       0,     0,     0,   226,     0,     0,   251,   253,     0,     0,
+       0,   236,   241,   242,     0,   256,   119,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,    58,   198,     0,     0,
+       0,   225,   222,     0,   244,   118,     0,   125,     0,     0,
+     121,   122,   123,   124,     0,   215,     0,     0,     0,   223,
+       0,     0,     0,   213,     0,   214,     0,     0,   120,   126,
+     127,     0,     0,     0,     0,     0,     0,   220,     0,     0,
+     219,   216
 };

 /* YYDEFGOTO[NTERM-NUM]. */
 static const short int yydefgoto[] =
 {
-      -1,    86,   260,   276,   277,   278,   279,   198,   199,   228,
-     200,    25,    15,    37,   448,   312,   393,   412,   335,   394,
-      87,    88,   201,    90,    91,   120,   210,   345,   303,   346,
-     109,     1,     2,     3,   282,   255,   253,   254,    63,   179,
-      50,   104,   183,    92,   359,   288,   289,   290,    38,    96,
-      16,    44,    17,    61,    18,    28,   364,   304,    93,   306,
-     421,    19,    40,    41,   171,   496,    98,   235,   452,   453,
-     172,   173,   373,   174,   175
+      -1,    86,   261,   277,   278,   279,   280,   199,   200,   229,
+     201,    25,    15,    37,   449,   313,   394,   413,   336,   395,
+      87,    88,   202,    90,    91,   120,   211,   346,   304,   347,
+     109,     1,     2,     3,   283,   256,   254,   255,    63,   180,
+      50,   104,   184,    92,   360,   289,   290,   291,    38,    96,
+      16,    44,    17,    61,    18,    28,   365,   305,    93,   307,
+     422,    19,    40,    41,   172,   497,    98,   236,   453,   454,
+     173,   174,   374,   175,   176
 };

 /* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
   STATE-NUM.  */
-#define YYPACT_NINF -447
+#define YYPACT_NINF -463
 static const short int yypact[] =
 {
-    -447,    33,   122,   610,  -447,  -447,  -447,  -447,  -447,  -447,
-    -447,  -447,  -447,  -447,   -13,   161,    47,  -447,  -447,   -15,
-    -447,  -447,    15,    10,    91,    -6,    48,  -447,    19,   138,
-     168,  -447,  -447,  -447,  -447,  -447,  -447,  1070,   -20,  -447,
-    -447,    70,  -447,  -447,  -447,  -447,    60,    61,    64,    67,
-    -447,    63,   138,  1070,   106,   106,   106,   106,  -447,  -447,
-    -447,   161,  -447,  -447,  -447,  -447,  -447,    59,  -447,  -447,
-    -447,  -447,  -447,  -447,  -447,  -447,  -447,  -447,  -447,  -447,
-    -447,  -447,   174,   178,   179,   576,  -447,    70,    74,  -447,
-    -447,   -54,  -447,  -447,  -447,  -447,  -447,  1245,  -447,   162,
-     -44,   190,   171,   172,  -447,  -447,  -447,  -447,  -447,  1111,
-    1111,  1111,  1152,  -447,  -447,    78,    88,  -447,  -447,   -54,
-     -29,    92,   865,  -447,  -447,  1111,  -447,   150,  1193,    75,
-     189,   161,  -447,  -447,  -447,  -447,  -447,  -447,  -447,  -447,
-    -447,  -447,  -447,  -447,  -447,  -447,  -447,  -447,  -447,  -447,
-    -447,  -447,  1111,  1111,  1111,  1111,  1111,  1111,  1111,  -447,
-    -447,  1111,  1111,  1111,  1111,  1111,  1111,  1111,  1111,  1111,
-    1111,  -447,   161,  -447,     8,  -447,  -447,  -447,  -447,  -447,
-    -447,  -447,  -447,   -10,  -447,  -447,  -447,   113,   139,   206,
-     145,   211,   147,   215,   152,   216,   214,   225,   154,   218,
-     226,   419,  -447,  1111,  1111,  1111,  -447,   906,  -447,   120,
-     118,   643,  -447,  -447,    59,  -447,   643,   643,  -447,  -447,
-    -447,  -447,  -447,  -447,  -447,  -447,  -447,  -447,   643,  1070,
-     128,   129,  -447,   643,   126,   131,   210,   133,   134,   140,
-     141,   142,   143,   144,   643,   643,   643,   146,  1070,  1111,
-    1111,   237,  -447,   148,   148,   148,  -447,  -447,  -447,  -447,
-    -447,  -447,  -447,  -447,  -447,  -447,   149,   151,   153,   155,
-     156,   159,   947,  1152,   596,   239,   160,   164,   175,   177,
-    -447,  -447,   148,   -74,   -23,   -54,  -447,    70,  -447,   163,
-     180,   988,  -447,  -447,  -447,  -447,  -447,  -447,  -447,  -447,
-    -447,   201,  1152,  -447,  -447,  -447,  -447,   182,  -447,   184,
-     643,    -2,  -447,     6,  -447,   186,   643,   176,  1111,  1111,
-    1111,  1111,  1111,  1111,  1111,  1111,   187,   188,   191,  1111,
-     643,   643,   195,  -447,   -12,  -447,  -447,  -447,  1152,  1152,
-    1152,  1152,  1152,  1152,  -447,  -447,    -9,   -21,  -447,   -27,
-    -447,  1152,  1152,  1152,  1152,  -447,  -447,  -447,  -447,  -447,
-    1029,   232,  -447,  -447,   244,   -16,   249,   282,   194,   643,
-     300,   643,  1111,  -447,   197,   643,  -447,   199,  -447,  -447,
-     202,   203,  -447,  -447,   643,   643,   643,  -447,   208,  -447,
-    1111,   291,   315,  -447,   148,   186,   289,   212,   217,   219,
-     220,  1152,  -447,  -447,  -447,   231,   233,   234,   240,  -447,
-    -447,  -447,   273,   241,  -447,   643,   643,  1111,   242,  -447,
-     242,  -447,   243,   643,   246,  1111,  1111,  1111,  -447,  -447,
-    -447,  1111,   643,  -447,  -447,  -447,   223,  1111,  1152,  1152,
-    1152,  1152,  -447,  1152,  1152,  1152,  1152,   328,  -447,   322,
-     247,   245,   243,   248,   294,  -447,  -447,  1111,   250,   643,
-    -447,  -447,  -447,   252,  -447,  -447,   254,   259,   257,   262,
-     263,   264,   265,   267,   270,  -447,  -447,   341,    14,   343,
-    -447,  -447,   271,  -447,  -447,  1152,  -447,  1152,  1152,  -447,
-    -447,  -447,  -447,   643,  -447,   751,    65,   374,  -447,   279,
-     280,   281,  -447,   285,  -447,   751,   643,  -447,  -447,  -447,
-     380,   290,   288,   643,   382,   384,  -447,   643,   643,  -447,
-    -447
+    -463,    19,   202,   739,  -463,  -463,  -463,  -463,  -463,  -463,
+    -463,  -463,  -463,  -463,   -23,   340,    60,  -463,  -463,   -12,
+    -463,  -463,    -8,    40,   115,   123,    66,  -463,    67,   158,
+     179,  -463,  -463,  -463,  -463,  -463,  -463,  1021,   -14,  -463,
+    -463,   120,  -463,  -463,  -463,  -463,    70,    71,    73,    77,
+    -463,    76,   158,  1021,    36,    36,    36,    36,  -463,  -463,
+    -463,   340,  -463,  -463,  -463,  -463,  -463,    75,  -463,  -463,
+    -463,  -463,  -463,  -463,  -463,  -463,  -463,  -463,  -463,  -463,
+    -463,  -463,   193,   194,   195,   577,  -463,   120,    84,  -463,
+    -463,   -84,  -463,  -463,  -463,  -463,  -463,  1197,  -463,   180,
+      31,   201,   183,   192,  -463,  -463,  -463,  -463,  -463,  1062,
+    1062,  1062,  1103,  -463,  -463,   100,   101,  -463,  -463,   -84,
+     -91,   105,   853,  -463,  -463,  1062,  -463,   164,  1144,    30,
+     255,   340,  -463,  -463,  -463,  -463,  -463,  -463,  -463,  -463,
+    -463,  -463,  -463,  -463,  -463,  -463,  -463,  -463,  -463,  -463,
+    -463,  -463,  1062,  1062,  1062,  1062,  1062,  1062,  1062,  -463,
+    -463,  -463,  1062,  1062,  1062,  1062,  1062,  1062,  1062,  1062,
+    1062,  1062,  -463,   340,  -463,    51,  -463,  -463,  -463,  -463,
+    -463,  -463,  -463,  -463,   -74,  -463,  -463,  -463,   125,   153,
+     220,   155,   222,   159,   224,   171,   225,   223,   227,   175,
+     228,   229,   420,  -463,  1062,  1062,  1062,  -463,   894,  -463,
+     116,   117,   645,  -463,  -463,    75,  -463,   645,   645,  -463,
+    -463,  -463,  -463,  -463,  -463,  -463,  -463,  -463,  -463,   645,
+    1021,   140,   141,  -463,   645,   138,   143,   226,   144,   146,
+     148,   161,   162,   163,   166,   645,   645,   645,   177,  1021,
+    1062,  1062,   249,  -463,   182,   182,   182,  -463,  -463,  -463,
+    -463,  -463,  -463,  -463,  -463,  -463,  -463,   178,   181,   184,
+     185,   186,   187,    87,  1103,   597,   270,   188,   189,   197,
+     199,  -463,  -463,   182,   -36,   -56,   -84,  -463,   120,  -463,
+     196,   200,   939,  -463,  -463,  -463,  -463,  -463,  -463,  -463,
+    -463,  -463,   236,  1103,  -463,  -463,  -463,  -463,   205,  -463,
+     210,   645,    -9,  -463,    -3,  -463,   211,   645,   191,  1062,
+    1062,  1062,  1062,  1062,  1062,  1062,  1062,   212,   216,   217,
+    1062,   645,   645,   218,  -463,   -20,  -463,  -463,  -463,  1103,
+    1103,  1103,  1103,  1103,  1103,  -463,  -463,   -50,   -59,  -463,
+     -31,  -463,  1103,  1103,  1103,  1103,  -463,  -463,  -463,  -463,
+    -463,   980,   278,  -463,  -463,   293,    26,   313,   314,   230,
+     645,   337,   645,  1062,  -463,   231,   645,  -463,   233,  -463,
+    -463,   234,   237,  -463,  -463,   645,   645,   645,  -463,   238,
+    -463,  1062,   332,   353,  -463,   182,   211,   322,   246,   247,
+     248,   250,  1103,  -463,  -463,  -463,   251,   256,   257,   259,
+    -463,  -463,  -463,   307,   260,  -463,   645,   645,  1062,   262,
+    -463,   262,  -463,   263,   645,   265,  1062,  1062,  1062,  -463,
+    -463,  -463,  1062,   645,  -463,  -463,  -463,   252,  1062,  1103,
+    1103,  1103,  1103,  -463,  1103,  1103,  1103,  1103,   378,  -463,
+     359,   273,   266,   263,   274,   339,  -463,  -463,  1062,   276,
+     645,  -463,  -463,  -463,   280,  -463,  -463,   281,   285,   284,
+     296,   297,   295,   298,   299,   300,  -463,  -463,   393,    15,
+     379,  -463,  -463,   301,  -463,  -463,  1103,  -463,  1103,  1103,
+    -463,  -463,  -463,  -463,   645,  -463,   738,    65,   398,  -463,
+     302,   305,   306,  -463,   312,  -463,   738,   645,  -463,  -463,
+    -463,   407,   315,   355,   645,   408,   412,  -463,   645,   645,
+    -463,  -463
 };

 /* YYPGOTO[NTERM-NUM].  */
 static const short int yypgoto[] =
 {
-    -447,  -447,  -447,   309,   310,   311,   312,  -129,  -128,  -446,
-    -447,   369,   386,   -89,  -447,  -227,    51,  -447,  -248,  -447,
-     -50,  -447,   -37,  -447,   -68,   292,  -447,  -102,   221,  -255,
-      57,  -447,  -447,  -447,  -447,  -447,  -447,  -447,   361,  -447,
-    -447,  -447,  -447,     2,  -447,    55,  -447,  -447,   355,  -447,
-    -447,  -447,  -447,  -447,   414,  -447,  -447,  -405,   -57,    62,
-    -105,  -447,   399,  -447,  -447,  -447,  -447,  -447,    49,    -8,
-    -447,  -447,    24,  -447,  -447
+    -463,  -463,  -463,   338,   342,   343,   344,  -129,  -128,  -462,
+    -463,   395,   418,  -118,  -463,  -225,    89,  -463,  -247,  -463,
+     -49,  -463,   -37,  -463,   -82,   323,  -463,  -102,   253,  -253,
+      83,  -463,  -463,  -463,  -463,  -463,  -463,  -463,   400,  -463,
+    -463,  -463,  -463,     2,  -463,    92,  -463,  -463,   399,  -463,
+    -463,  -463,  -463,  -463,   451,  -463,  -463,  -359,   -57,    62,
+    -105,  -463,   437,  -463,  -463,  -463,  -463,  -463,    90,    32,
+    -463,  -463,    69,  -463,  -463
 };

 /* YYTABLE[YYPACT[STATE-NUM]].  What to do in state STATE-NUM.  If
   positive, shift that token.  If negative, reduce the rule which
   number is the opposite.  If zero, do what YYDEFACT says.
   If YYTABLE_NINF, syntax error.  */
-#define YYTABLE_NINF -132
+#define YYTABLE_NINF -133
 static const short int yytable[] =
 {
-      89,   226,   227,   106,   314,    26,   336,   337,    39,    94,
-     202,   177,   178,   369,    53,    42,    89,   119,   347,   349,
-     212,   371,   391,   215,   218,   219,   220,   221,   222,   223,
-     224,   225,   495,     4,   355,     7,     8,     9,    10,    54,
-      12,    55,   229,    26,    56,   392,   356,   365,    29,   232,
-     505,   123,   236,   237,   119,   370,   238,   239,   240,   241,
-     242,   243,   -69,   370,    59,   247,    60,    46,    47,    48,
-      39,   123,   184,   185,   186,   218,   219,   220,   221,   222,
-     223,   224,   225,   248,   216,   205,    49,   401,   211,   121,
-     503,   211,    20,   401,    21,   206,   217,   404,   401,   357,
-     511,   403,   123,    95,   251,   401,   414,   249,   250,    43,
-     252,   402,   110,   111,   112,   230,   231,   211,   233,   234,
-     211,   211,  -131,    51,   211,   211,   211,   211,   211,   211,
-     244,   245,   246,   211,   494,   283,   284,   285,   107,   108,
-     256,   257,   -29,   -29,   281,   332,   435,     5,   -28,   -28,
-     -27,   -27,    52,     6,   305,   -26,   -26,   258,   259,   305,
-     305,    58,    62,     7,     8,     9,    10,    11,    12,    13,
-     287,   305,    64,    99,   100,   -70,   305,   101,   114,   310,
-     102,   103,   115,   116,    14,   504,   176,   305,   305,   305,
-     122,   455,    89,   456,   180,   181,   182,   203,   330,   218,
-     219,   220,   221,   222,   223,   224,   225,   204,   207,   213,
-     -33,    89,   331,   211,   377,   -32,   379,   380,   381,   -31,
-     -30,   -36,   261,   285,   387,    30,    31,    32,    33,    34,
-      35,    36,   -37,   262,   291,   292,   395,   396,   397,   398,
-     399,   400,   311,   313,   316,   317,   318,   319,   320,   405,
-     406,   407,   408,   305,   321,   322,   323,   324,   325,   305,
-     329,   333,   334,   350,   363,   338,   391,   339,   413,   340,
-     415,   341,   342,   305,   305,   343,   351,   360,   307,   308,
-     352,   376,   211,   378,   211,   211,   211,   382,   383,   358,
-     309,   353,   211,   354,   375,   315,   366,   361,   367,   442,
-     372,   384,   385,   416,   419,   386,   326,   327,   328,   390,
-     417,   423,   305,   425,   305,   433,   426,   427,   305,   434,
-     460,   461,   462,   287,   431,   437,   438,   305,   305,   305,
-     447,   439,   475,   440,   441,   211,   467,   468,   469,   470,
-     465,   471,   472,   473,   474,   443,   476,   444,   445,   226,
-     227,   370,   480,   432,   446,   449,   454,   457,   305,   305,
-     459,   477,   493,   478,   515,   479,   305,   226,   227,   483,
-     481,   484,   368,   485,   486,   305,   487,   488,   374,   497,
-     211,   489,   490,   499,   491,   500,   501,   492,   211,   211,
-     211,   498,   388,   389,   211,   506,   507,   508,   509,   510,
-     466,   513,   305,   517,   514,   518,   167,   168,   169,   170,
-      97,    57,   411,   105,   209,   410,   113,    27,    45,   436,
-     211,   422,   280,   463,    65,    66,     0,     0,     0,     0,
-       0,   418,     0,   420,     0,     0,   305,   424,     0,     0,
-       0,    20,     0,    21,     0,   263,   428,   429,   430,   305,
-       0,     0,     0,     0,     0,     0,   305,   264,   265,     0,
-     305,   305,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   450,   451,     0,
-       0,     0,     0,     0,     0,   458,     0,     0,     0,     0,
-       0,     0,     0,     0,   464,     0,     0,   134,   135,   136,
-     137,   138,   139,   140,   141,   142,   143,   144,   145,   146,
-     147,   148,   149,   150,   151,     0,     0,     0,     0,     0,
-     266,   482,   267,   268,   159,   160,     0,   269,   270,   271,
-       0,     0,     0,     0,     0,     0,     0,   272,     0,     0,
-     273,     0,   274,     0,     0,   275,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,   502,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,   512,     0,
-       0,     0,     0,     0,     0,   516,     0,     0,     0,   519,
-     520,    65,    66,     0,   117,    68,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    20,     0,
-      21,    65,    66,     0,   117,   187,   188,   189,   190,   191,
-     192,   193,   194,   195,   196,   197,    79,    80,    20,     0,
-      21,     0,     0,     0,    81,     0,     0,     0,     0,     0,
-     -39,     0,    20,     0,    21,     0,     0,     0,     0,     0,
-       0,     6,   -39,   -39,    81,     0,   293,   294,    65,    66,
-     295,   -39,   -39,   -39,   -39,   -39,   -39,   -39,     0,     0,
-     -39,    22,     0,     0,     0,    20,     0,    21,    23,   296,
-     297,   298,    24,     0,     0,     0,     0,     0,     0,     0,
-       0,   299,   300,     0,     0,     0,     0,     0,     0,     0,
-       0,    82,     0,     0,    83,     0,     0,    84,     0,    85,
-     118,     0,     0,     0,   301,     0,     0,     0,     0,     0,
-       0,    82,     0,     0,    83,     0,     0,    84,     0,    85,
-     348,   134,   135,   136,   137,   138,   139,   140,   141,   142,
-     143,   144,   145,   146,   147,   148,   149,   150,   151,     0,
-       0,     0,     0,     0,   266,     0,   267,   268,   159,   160,
-       0,   269,   270,   271,   293,   294,     0,     0,   295,     0,
-       0,     0,     0,     0,   302,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,   296,   297,   298,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   299,
-     300,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+      89,   227,   228,   119,   106,    26,   370,   315,   337,   338,
+     203,    39,   372,   230,   392,    94,    89,   496,    42,     4,
+     213,   348,   350,   216,   206,   219,   220,   221,   222,   223,
+     224,   225,   226,   -70,   207,   506,   356,   393,    29,   217,
+     119,   252,   123,    26,    46,    47,    48,   253,   371,   233,
+     366,   218,   237,   238,   371,   249,   402,   239,   240,   241,
+     242,   243,   244,    49,   404,   402,   248,   358,   107,   108,
+     123,   403,   185,   186,   187,   219,   220,   221,   222,   223,
+     224,   225,   226,    39,   402,   357,   178,   179,   212,   121,
+     123,   212,    65,    66,   405,   117,   188,   189,   190,   191,
+     192,   193,   194,   195,   196,   197,   198,    79,    80,    20,
+      95,    21,    59,    43,    60,   231,   232,   212,   234,   235,
+     212,   212,   284,   285,   286,   212,   212,   212,   212,   212,
+     212,   245,   246,   247,   212,    81,   495,   504,   110,   111,
+     112,   402,    20,    53,    21,   282,   333,   512,   436,   415,
+     250,   251,   257,   258,    51,   306,   -30,   -30,   -29,   -29,
+     306,   306,   -28,   -28,     7,     8,     9,    10,    54,    12,
+      55,   288,   306,    56,   -27,   -27,    52,   306,   259,   260,
+      58,   311,    62,    64,    99,   100,   505,   101,   306,   306,
+     306,   102,   -71,    89,   456,   103,   457,   114,   115,   116,
+     331,   122,  -132,    82,   177,   181,    83,   182,   345,    84,
+     286,    85,    89,   332,   212,   378,   183,   380,   381,   382,
+     204,   205,   208,   214,   -34,   388,   -33,     5,   -32,   -31,
+     -37,   292,   262,     6,   -38,   293,   263,   396,   397,   398,
+     399,   400,   401,     7,     8,     9,    10,    11,    12,    13,
+     406,   407,   408,   409,   306,   312,   314,   317,   318,   320,
+     306,   321,   319,   322,    14,   219,   220,   221,   222,   223,
+     224,   225,   226,   334,   306,   306,   323,   324,   325,   308,
+     309,   326,   377,   212,   379,   212,   212,   212,   383,   384,
+     359,   310,   330,   212,   351,   339,   316,   335,   340,   364,
+     443,   341,   342,   343,   344,   352,   353,   327,   328,   329,
+     376,   361,   392,   306,   354,   306,   355,   414,   362,   306,
+     367,   461,   462,   463,   288,   368,   373,   385,   306,   306,
+     306,   386,   387,   391,   416,   417,   212,   468,   469,   470,
+     471,   420,   472,   473,   474,   475,   424,   418,   426,   427,
+     227,   228,   428,   481,   433,   432,   434,   435,   438,   306,
+     306,   439,   440,   441,   448,   442,   444,   306,   227,   228,
+     466,   445,   446,   369,   447,   450,   306,   455,   458,   375,
+     460,   212,   476,   477,   500,   479,   501,   502,   478,   212,
+     212,   212,   480,   389,   390,   212,   371,   482,   484,   485,
+     486,   467,   487,   306,    30,    31,    32,    33,    34,    35,
+      36,   488,   489,   490,   494,   498,   491,   492,   493,   507,
+     508,   212,   499,   509,   510,    65,    66,   511,   514,   518,
+     515,   516,   419,   519,   421,   168,    97,   306,   425,   169,
+     170,   171,    20,    57,    21,   210,   264,   429,   430,   431,
+     306,   412,   105,   411,    27,   281,    45,   306,   265,   266,
+     113,   306,   306,   423,   464,   437,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,   451,   452,
+       0,     0,     0,     0,     0,     0,   459,     0,     0,     0,
+       0,     0,     0,     0,     0,   465,     0,     0,   134,   135,
+     136,   137,   138,   139,   140,   141,   142,   143,   144,   145,
+     146,   147,   148,   149,   150,   151,     0,     0,     0,     0,
+       0,   267,   483,   268,   269,   159,   160,   161,     0,   270,
+     271,   272,     0,     0,     0,     0,     0,     0,     0,   273,
+       0,     0,   274,     0,   275,     0,     0,   276,     0,     0,
+       0,     0,     0,     0,     0,     0,   503,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,   513,
+       0,     0,     0,     0,     0,     0,   517,     0,     0,     0,
+     520,   521,    65,    66,     0,   117,    68,    69,    70,    71,
+      72,    73,    74,    75,    76,    77,    78,    79,    80,    20,
+       0,    21,    65,    66,     0,   117,   188,   189,   190,   191,
+     192,   193,   194,   195,   196,   197,   198,    79,    80,    20,
+       0,    21,     0,     0,     0,    81,     0,     0,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   301,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,   134,
-     135,   136,   137,   138,   139,   140,   141,   142,   143,   144,
-     145,   146,   147,   148,   149,   150,   151,     0,     0,     0,
-       0,     0,   266,     0,   267,   268,   159,   160,     0,   269,
-     270,   271,     0,     0,     0,     0,     0,     0,     0,     0,
-      65,    66,   302,   117,    68,    69,    70,    71,    72,    73,
-      74,    75,    76,    77,    78,    79,    80,    20,     0,    21,
+       0,     0,     0,     0,     0,    81,     0,     0,   294,   295,
+      65,    66,   296,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,    20,     0,    21,
+       0,   297,   298,   299,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,   300,   301,     0,     0,     0,     0,     0,
+       0,     0,     0,    82,     0,     0,    83,     0,     0,    84,
+       0,    85,   118,     0,     0,     0,   302,     0,     0,     0,
+       0,     0,     0,    82,     0,     0,    83,     0,     0,    84,
+       0,    85,   349,   134,   135,   136,   137,   138,   139,   140,
+     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
+     151,   294,   295,     0,     0,   296,   267,     0,   268,   269,
+     159,   160,   161,     0,   270,   271,   272,     0,     0,   -40,
+       0,    20,     0,    21,   297,   298,   299,   303,     0,     0,
+       6,   -40,   -40,     0,     0,     0,   300,   301,     0,     0,
+     -40,   -40,   -40,   -40,   -40,   -40,   -40,     0,     0,   -40,
+      22,     0,     0,     0,     0,     0,     0,    23,     0,   302,
+       0,    24,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   134,   135,   136,   137,
+     138,   139,   140,   141,   142,   143,   144,   145,   146,   147,
+     148,   149,   150,   151,     0,     0,     0,     0,     0,   267,
+       0,   268,   269,   159,   160,   161,     0,   270,   271,   272,
+       0,     0,     0,     0,     0,     0,     0,     0,    65,    66,
+     303,   117,    68,    69,    70,    71,    72,    73,    74,    75,
+      76,    77,    78,    79,    80,    20,     0,    21,     0,     0,
       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,   208,     0,     0,     0,     0,     0,     0,     0,
-       0,    65,    66,    81,   117,    68,    69,    70,    71,    72,
-      73,    74,    75,    76,    77,    78,    79,    80,    20,     0,
-      21,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,   286,     0,     0,     0,     0,     0,     0,
-       0,     0,    65,    66,    81,   117,   187,   188,   189,   190,
-     191,   192,   193,   194,   195,   196,   197,    79,    80,    20,
-       0,    21,     0,     0,     0,     0,     0,     0,     0,     0,
-      82,     0,     0,    83,     0,     0,    84,     0,    85,     0,
-       0,     0,     0,    65,    66,    81,   117,    68,    69,    70,
-      71,    72,    73,    74,    75,    76,    77,    78,    79,    80,
-      20,     0,    21,     0,     0,     0,     0,     0,     0,     0,
-       0,    82,     0,     0,    83,   362,     0,    84,     0,    85,
-       0,     0,     0,     0,    65,    66,    81,   117,    68,    69,
+     209,     0,     0,     0,     0,     0,     0,     0,     0,    65,
+      66,    81,   117,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    20,     0,    21,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,   287,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    81,     0,    65,    66,     0,   117,    68,    69,
      70,    71,    72,    73,    74,    75,    76,    77,    78,    79,
-      80,    20,     0,    21,     0,     0,     0,     0,     0,     0,
-       0,     0,    82,     0,     0,    83,   409,   344,    84,     0,
-      85,     0,     0,     0,     0,    65,    66,    81,    67,    68,
+      80,    20,     0,    21,     0,     0,     0,     0,     0,    82,
+       0,     0,    83,     0,     0,    84,   363,    85,     0,     0,
+       0,     0,     0,     0,     0,    65,    66,    81,   117,    68,
      69,    70,    71,    72,    73,    74,    75,    76,    77,    78,
      79,    80,    20,     0,    21,     0,     0,     0,     0,     0,
-       0,     0,     0,    82,     0,     0,    83,     0,     0,    84,
-       0,    85,     0,     0,     0,     0,    65,    66,    81,   117,
+      82,     0,     0,    83,     0,     0,    84,   410,    85,     0,
+       0,     0,     0,     0,     0,     0,    65,    66,    81,    67,
      68,    69,    70,    71,    72,    73,    74,    75,    76,    77,
      78,    79,    80,    20,     0,    21,     0,     0,     0,     0,
-       0,     0,     0,     0,    82,     0,     0,    83,     0,     0,
-      84,     0,    85,     0,     0,     0,     0,    65,    66,    81,
-     117,   187,   188,   189,   190,   191,   192,   193,   194,   195,
-     196,   197,    79,    80,    20,     0,    21,     0,     0,     0,
       0,     0,     0,     0,     0,    82,     0,     0,    83,     0,
-       0,    84,     0,    85,     0,     0,     0,     0,    65,    66,
-      81,   214,    68,    69,    70,    71,    72,    73,    74,    75,
-      76,    77,    78,    79,    80,    20,     0,    21,     0,     0,
+       0,    84,     0,    85,     0,     0,     0,    65,    66,    81,
+     117,    68,    69,    70,    71,    72,    73,    74,    75,    76,
+      77,    78,    79,    80,    20,     0,    21,     0,     0,     0,
       0,     0,     0,     0,     0,     0,    82,     0,     0,    83,
-       0,     0,    84,     0,    85,     0,     0,     0,     0,     0,
-       0,    81,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,    84,     0,    85,     0,     0,     0,    65,    66,
+      81,   117,   188,   189,   190,   191,   192,   193,   194,   195,
+     196,   197,   198,    79,    80,    20,     0,    21,     0,     0,
       0,     0,     0,     0,     0,     0,     0,    82,     0,     0,
-      83,     0,     0,    84,     0,    85,     0,     0,     0,     0,
-     124,     0,     0,     0,     0,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   125,     0,     0,     0,     0,     0,
-       0,     0,     0,     0,   126,   127,     0,     0,    82,     0,
-       0,    83,     0,     0,    84,     0,    85,   128,   129,   130,
-     131,   132,   133,   134,   135,   136,   137,   138,   139,   140,
-     141,   142,   143,   144,   145,   146,   147,   148,   149,   150,
-     151,   152,   153,   154,     0,     0,   155,   156,   157,   158,
-     159,   160,   161,   162,   163,   164,   165,   166
+      83,     0,     0,    84,     0,    85,     0,     0,     0,    65,
+      66,    81,   215,    68,    69,    70,    71,    72,    73,    74,
+      75,    76,    77,    78,    79,    80,    20,     0,    21,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,    82,     0,
+       0,    83,     0,     0,    84,     0,    85,     0,     0,     0,
+       0,     0,    81,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,     0,     0,     0,    82,
+       0,     0,    83,     0,     0,    84,     0,    85,     0,     0,
+       0,     0,   124,     0,     0,     0,     0,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   125,     0,     0,     0,
+       0,     0,     0,     0,     0,     0,   126,   127,     0,     0,
+      82,     0,     0,    83,     0,     0,    84,     0,    85,   128,
+     129,   130,   131,   132,   133,   134,   135,   136,   137,   138,
+     139,   140,   141,   142,   143,   144,   145,   146,   147,   148,
+     149,   150,   151,   152,   153,   154,     0,     0,   155,   156,
+     157,   158,   159,   160,   161,   162,   163,   164,   165,   166,
+     167
 };

 static const short int yycheck[] =
 {
-      37,   130,   130,    53,   231,     3,   254,   255,    23,    29,
-     112,    55,    56,    15,    20,    30,    53,    85,   273,   274,
-     125,    15,    34,   128,    10,    11,    12,    13,    14,    15,
-      16,    17,   478,     0,   282,    41,    42,    43,    44,    45,
-      46,    47,   131,    41,    50,    57,   120,   302,    61,   154,
-     496,   125,   157,   158,   122,    57,   161,   162,   163,   164,
-     165,   166,   116,    57,    45,   170,    47,    52,    53,    54,
-      23,   125,   109,   110,   111,    10,    11,    12,    13,    14,
-      15,    16,    17,   172,     9,   114,    71,   114,   125,    87,
-     495,   128,    22,   114,    24,   124,    21,   124,   114,   122,
-     505,   122,   125,   123,   114,   114,   122,    99,   100,   124,
-     120,   120,    55,    56,    57,   152,   153,   154,   155,   156,
-     157,   158,     0,   113,   161,   162,   163,   164,   165,   166,
-     167,   168,   169,   170,   120,   203,   204,   205,    32,    33,
-      27,    28,     3,     4,   201,   250,   394,    25,     3,     4,
-       3,     4,    61,    31,   211,     3,     4,     3,     4,   216,
-     217,   113,    24,    41,    42,    43,    44,    45,    46,    47,
-     207,   228,     4,   113,   113,   116,   233,   113,     4,   229,
-     113,   118,     4,     4,    62,   120,    24,   244,   245,   246,
-     116,   418,   229,   420,     4,    24,    24,   119,   248,    10,
-      11,    12,    13,    14,    15,    16,    17,   119,   116,    59,
-       4,   248,   249,   250,   319,     4,   321,   322,   323,     4,
-       4,     7,     4,   291,   329,    64,    65,    66,    67,    68,
-      69,    70,     7,     7,   114,   117,   338,   339,   340,   341,
-     342,   343,   114,   114,   118,   114,    36,   114,   114,   351,
-     352,   353,   354,   310,   114,   114,   114,   114,   114,   316,
-     114,    24,   114,    24,    63,   116,    34,   116,    24,   116,
-      21,   116,   116,   330,   331,   116,   116,   114,   216,   217,
-     116,   318,   319,   320,   321,   322,   323,   324,   325,   287,
-     228,   116,   329,   116,   118,   233,   114,   117,   114,   401,
-     114,   114,   114,    21,     4,   114,   244,   245,   246,   114,
-     116,   114,   369,   114,   371,    24,   114,   114,   375,     4,
-     425,   426,   427,   360,   116,    36,   114,   384,   385,   386,
-      57,   114,     4,   114,   114,   372,   438,   439,   440,   441,
-     117,   443,   444,   445,   446,   114,    24,   114,   114,   478,
-     478,    57,   457,   390,   114,   114,   114,   114,   415,   416,
-     114,   114,    21,   118,    76,   117,   423,   496,   496,   117,
-     120,   117,   310,   114,   117,   432,   114,   114,   316,    36,
-     417,   117,   117,   485,   117,   487,   488,   117,   425,   426,
-     427,   120,   330,   331,   431,    21,   117,   117,   117,   114,
-     437,    21,   459,    21,   114,    21,    97,    97,    97,    97,
-      41,    25,   361,    52,   122,   360,    61,     3,    19,   395,
-     457,   372,   201,   431,     5,     6,    -1,    -1,    -1,    -1,
-      -1,   369,    -1,   371,    -1,    -1,   493,   375,    -1,    -1,
-      -1,    22,    -1,    24,    -1,    26,   384,   385,   386,   506,
-      -1,    -1,    -1,    -1,    -1,    -1,   513,    38,    39,    -1,
-     517,   518,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   415,   416,    -1,
-      -1,    -1,    -1,    -1,    -1,   423,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   432,    -1,    -1,    78,    79,    80,
-      81,    82,    83,    84,    85,    86,    87,    88,    89,    90,
-      91,    92,    93,    94,    95,    -1,    -1,    -1,    -1,    -1,
-     101,   459,   103,   104,   105,   106,    -1,   108,   109,   110,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   118,    -1,    -1,
-     121,    -1,   123,    -1,    -1,   126,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   493,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   506,    -1,
-      -1,    -1,    -1,    -1,    -1,   513,    -1,    -1,    -1,   517,
-     518,     5,     6,    -1,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    -1,
-      24,     5,     6,    -1,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    -1,
-      24,    -1,    -1,    -1,    48,    -1,    -1,    -1,    -1,    -1,
-      20,    -1,    22,    -1,    24,    -1,    -1,    -1,    -1,    -1,
-      -1,    31,    32,    33,    48,    -1,     3,     4,     5,     6,
-       7,    41,    42,    43,    44,    45,    46,    47,    -1,    -1,
-      50,    51,    -1,    -1,    -1,    22,    -1,    24,    58,    26,
-      27,    28,    62,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    38,    39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   115,    -1,    -1,   118,    -1,    -1,   121,    -1,   123,
-     124,    -1,    -1,    -1,    61,    -1,    -1,    -1,    -1,    -1,
-      -1,   115,    -1,    -1,   118,    -1,    -1,   121,    -1,   123,
-     124,    78,    79,    80,    81,    82,    83,    84,    85,    86,
-      87,    88,    89,    90,    91,    92,    93,    94,    95,    -1,
-      -1,    -1,    -1,    -1,   101,    -1,   103,   104,   105,   106,
-      -1,   108,   109,   110,     3,     4,    -1,    -1,     7,    -1,
-      -1,    -1,    -1,    -1,   121,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    26,    27,    28,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    38,
-      39,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      37,   130,   130,    85,    53,     3,    15,   232,   255,   256,
+     112,    23,    15,   131,    34,    29,    53,   479,    30,     0,
+     125,   274,   275,   128,   115,    10,    11,    12,    13,    14,
+      15,    16,    17,   117,   125,   497,   283,    57,    61,     9,
+     122,   115,   126,    41,    52,    53,    54,   121,    57,   154,
+     303,    21,   157,   158,    57,   173,   115,   162,   163,   164,
+     165,   166,   167,    71,   123,   115,   171,   123,    32,    33,
+     126,   121,   109,   110,   111,    10,    11,    12,    13,    14,
+      15,    16,    17,    23,   115,   121,    55,    56,   125,    87,
+     126,   128,     5,     6,   125,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+     124,    24,    45,   125,    47,   152,   153,   154,   155,   156,
+     157,   158,   204,   205,   206,   162,   163,   164,   165,   166,
+     167,   168,   169,   170,   171,    48,   121,   496,    55,    56,
+      57,   115,    22,    20,    24,   202,   251,   506,   395,   123,
+      99,   100,    27,    28,   114,   212,     3,     4,     3,     4,
+     217,   218,     3,     4,    41,    42,    43,    44,    45,    46,
+      47,   208,   229,    50,     3,     4,    61,   234,     3,     4,
+     114,   230,    24,     4,   114,   114,   121,   114,   245,   246,
+     247,   114,   117,   230,   419,   119,   421,     4,     4,     4,
+     249,   117,     0,   116,    24,     4,   119,    24,   121,   122,
+     292,   124,   249,   250,   251,   320,    24,   322,   323,   324,
+     120,   120,   117,    59,     4,   330,     4,    25,     4,     4,
+       7,   115,     4,    31,     7,   118,     7,   339,   340,   341,
+     342,   343,   344,    41,    42,    43,    44,    45,    46,    47,
+     352,   353,   354,   355,   311,   115,   115,   119,   115,   115,
+     317,   115,    36,   115,    62,    10,    11,    12,    13,    14,
+      15,    16,    17,    24,   331,   332,   115,   115,   115,   217,
+     218,   115,   319,   320,   321,   322,   323,   324,   325,   326,
+     288,   229,   115,   330,    24,   117,   234,   115,   117,    63,
+     402,   117,   117,   117,   117,   117,   117,   245,   246,   247,
+     119,   115,    34,   370,   117,   372,   117,    24,   118,   376,
+     115,   426,   427,   428,   361,   115,   115,   115,   385,   386,
+     387,   115,   115,   115,    21,    21,   373,   439,   440,   441,
+     442,     4,   444,   445,   446,   447,   115,   117,   115,   115,
+     479,   479,   115,   458,   391,   117,    24,     4,    36,   416,
+     417,   115,   115,   115,    57,   115,   115,   424,   497,   497,
+     118,   115,   115,   311,   115,   115,   433,   115,   115,   317,
+     115,   418,     4,    24,   486,   119,   488,   489,   115,   426,
+     427,   428,   118,   331,   332,   432,    57,   121,   118,   118,
+     115,   438,   118,   460,    64,    65,    66,    67,    68,    69,
+      70,   115,   115,   118,    21,    36,   118,   118,   118,    21,
+     118,   458,   121,   118,   118,     5,     6,   115,    21,    21,
+     115,    76,   370,    21,   372,    97,    41,   494,   376,    97,
+      97,    97,    22,    25,    24,   122,    26,   385,   386,   387,
+     507,   362,    52,   361,     3,   202,    19,   514,    38,    39,
+      61,   518,   519,   373,   432,   396,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   416,   417,
+      -1,    -1,    -1,    -1,    -1,    -1,   424,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,   433,    -1,    -1,    78,    79,
+      80,    81,    82,    83,    84,    85,    86,    87,    88,    89,
+      90,    91,    92,    93,    94,    95,    -1,    -1,    -1,    -1,
+      -1,   101,   460,   103,   104,   105,   106,   107,    -1,   109,
+     110,   111,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   119,
+      -1,    -1,   122,    -1,   124,    -1,    -1,   127,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,   494,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   507,
+      -1,    -1,    -1,    -1,    -1,    -1,   514,    -1,    -1,    -1,
+     518,   519,     5,     6,    -1,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      -1,    24,     5,     6,    -1,     8,     9,    10,    11,    12,
+      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
+      -1,    24,    -1,    -1,    -1,    48,    -1,    -1,    -1,    -1,
      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    61,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    78,
-      79,    80,    81,    82,    83,    84,    85,    86,    87,    88,
-      89,    90,    91,    92,    93,    94,    95,    -1,    -1,    -1,
-      -1,    -1,   101,    -1,   103,   104,   105,   106,    -1,   108,
-     109,   110,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-       5,     6,   121,     8,     9,    10,    11,    12,    13,    14,
-      15,    16,    17,    18,    19,    20,    21,    22,    -1,    24,
+      -1,    -1,    -1,    -1,    -1,    48,    -1,    -1,     3,     4,
+       5,     6,     7,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    22,    -1,    24,
+      -1,    26,    27,    28,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    38,    39,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,   116,    -1,    -1,   119,    -1,    -1,   122,
+      -1,   124,   125,    -1,    -1,    -1,    61,    -1,    -1,    -1,
+      -1,    -1,    -1,   116,    -1,    -1,   119,    -1,    -1,   122,
+      -1,   124,   125,    78,    79,    80,    81,    82,    83,    84,
+      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
+      95,     3,     4,    -1,    -1,     7,   101,    -1,   103,   104,
+     105,   106,   107,    -1,   109,   110,   111,    -1,    -1,    20,
+      -1,    22,    -1,    24,    26,    27,    28,   122,    -1,    -1,
+      31,    32,    33,    -1,    -1,    -1,    38,    39,    -1,    -1,
+      41,    42,    43,    44,    45,    46,    47,    -1,    -1,    50,
+      51,    -1,    -1,    -1,    -1,    -1,    -1,    58,    -1,    61,
+      -1,    62,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    78,    79,    80,    81,
+      82,    83,    84,    85,    86,    87,    88,    89,    90,    91,
+      92,    93,    94,    95,    -1,    -1,    -1,    -1,    -1,   101,
+      -1,   103,   104,   105,   106,   107,    -1,   109,   110,   111,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     5,     6,
+     122,     8,     9,    10,    11,    12,    13,    14,    15,    16,
+      17,    18,    19,    20,    21,    22,    -1,    24,    -1,    -1,
      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    37,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,     5,     6,    48,     8,     9,    10,    11,    12,    13,
-      14,    15,    16,    17,    18,    19,    20,    21,    22,    -1,
-      24,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    37,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,     5,     6,    48,     8,     9,    10,    11,    12,
-      13,    14,    15,    16,    17,    18,    19,    20,    21,    22,
-      -1,    24,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-     115,    -1,    -1,   118,    -1,    -1,   121,    -1,   123,    -1,
-      -1,    -1,    -1,     5,     6,    48,     8,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,    20,    21,
-      22,    -1,    24,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,   115,    -1,    -1,   118,    37,    -1,   121,    -1,   123,
-      -1,    -1,    -1,    -1,     5,     6,    48,     8,     9,    10,
+      37,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,     5,
+       6,    48,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    -1,    24,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    37,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    48,    -1,     5,     6,    -1,     8,     9,    10,
      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    22,    -1,    24,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,   115,    -1,    -1,   118,    37,   120,   121,    -1,
-     123,    -1,    -1,    -1,    -1,     5,     6,    48,     8,     9,
+      21,    22,    -1,    24,    -1,    -1,    -1,    -1,    -1,   116,
+      -1,    -1,   119,    -1,    -1,   122,    37,   124,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,     5,     6,    48,     8,     9,
      10,    11,    12,    13,    14,    15,    16,    17,    18,    19,
      20,    21,    22,    -1,    24,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,   115,    -1,    -1,   118,    -1,    -1,   121,
-      -1,   123,    -1,    -1,    -1,    -1,     5,     6,    48,     8,
+     116,    -1,    -1,   119,    -1,    -1,   122,    37,   124,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,     5,     6,    48,     8,
       9,    10,    11,    12,    13,    14,    15,    16,    17,    18,
      19,    20,    21,    22,    -1,    24,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,   115,    -1,    -1,   118,    -1,    -1,
-     121,    -1,   123,    -1,    -1,    -1,    -1,     5,     6,    48,
+      -1,    -1,    -1,    -1,    -1,   116,    -1,    -1,   119,    -1,
+      -1,   122,    -1,   124,    -1,    -1,    -1,     5,     6,    48,
       8,     9,    10,    11,    12,    13,    14,    15,    16,    17,
      18,    19,    20,    21,    22,    -1,    24,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,   115,    -1,    -1,   118,    -1,
-      -1,   121,    -1,   123,    -1,    -1,    -1,    -1,     5,     6,
+      -1,    -1,    -1,    -1,    -1,    -1,   116,    -1,    -1,   119,
+      -1,    -1,   122,    -1,   124,    -1,    -1,    -1,     5,     6,
      48,     8,     9,    10,    11,    12,    13,    14,    15,    16,
      17,    18,    19,    20,    21,    22,    -1,    24,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,   115,    -1,    -1,   118,
-      -1,    -1,   121,    -1,   123,    -1,    -1,    -1,    -1,    -1,
-      -1,    48,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,   116,    -1,    -1,
+     119,    -1,    -1,   122,    -1,   124,    -1,    -1,    -1,     5,
+       6,    48,     8,     9,    10,    11,    12,    13,    14,    15,
+      16,    17,    18,    19,    20,    21,    22,    -1,    24,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   116,    -1,
+      -1,   119,    -1,    -1,   122,    -1,   124,    -1,    -1,    -1,
+      -1,    -1,    48,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    -1,    -1,    -1,   115,    -1,    -1,
-     118,    -1,    -1,   121,    -1,   123,    -1,    -1,    -1,    -1,
-      35,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    49,    -1,    -1,    -1,    -1,    -1,
-      -1,    -1,    -1,    -1,    59,    60,    -1,    -1,   115,    -1,
-      -1,   118,    -1,    -1,   121,    -1,   123,    72,    73,    74,
-      75,    76,    77,    78,    79,    80,    81,    82,    83,    84,
-      85,    86,    87,    88,    89,    90,    91,    92,    93,    94,
-      95,    96,    97,    98,    -1,    -1,   101,   102,   103,   104,
-     105,   106,   107,   108,   109,   110,   111,   112
+      -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,    -1,   116,
+      -1,    -1,   119,    -1,    -1,   122,    -1,   124,    -1,    -1,
+      -1,    -1,    35,    -1,    -1,    -1,    -1,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    49,    -1,    -1,    -1,
+      -1,    -1,    -1,    -1,    -1,    -1,    59,    60,    -1,    -1,
+     116,    -1,    -1,   119,    -1,    -1,   122,    -1,   124,    72,
+      73,    74,    75,    76,    77,    78,    79,    80,    81,    82,
+      83,    84,    85,    86,    87,    88,    89,    90,    91,    92,
+      93,    94,    95,    96,    97,    98,    -1,    -1,   101,   102,
+     103,   104,   105,   106,   107,   108,   109,   110,   111,   112,
+     113
 };

 /* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
   symbol of state STATE-NUM.  */
 static const unsigned char yystos[] =
 {
-       0,   158,   159,   160,     0,    25,    31,    41,    42,    43,
-      44,    45,    46,    47,    62,   139,   177,   179,   181,   188,
-      22,    24,    51,    58,    62,   138,   170,   181,   182,    61,
-      64,    65,    66,    67,    68,    69,    70,   140,   175,    23,
-     189,   190,    30,   124,   178,   189,    52,    53,    54,    71,
-     167,   113,    61,    20,    45,    47,    50,   139,   113,    45,
-      47,   180,    24,   165,     4,     5,     6,     8,     9,    10,
+       0,   159,   160,   161,     0,    25,    31,    41,    42,    43,
+      44,    45,    46,    47,    62,   140,   178,   180,   182,   189,
+      22,    24,    51,    58,    62,   139,   171,   182,   183,    61,
+      64,    65,    66,    67,    68,    69,    70,   141,   176,    23,
+     190,   191,    30,   125,   179,   190,    52,    53,    54,    71,
+     168,   114,    61,    20,    45,    47,    50,   140,   114,    45,
+      47,   181,    24,   166,     4,     5,     6,     8,     9,    10,
      11,    12,    13,    14,    15,    16,    17,    18,    19,    20,
-      21,    48,   115,   118,   121,   123,   128,   147,   148,   149,
-     150,   151,   170,   185,    29,   123,   176,   138,   193,   113,
-     113,   113,   113,   118,   168,   165,   147,    32,    33,   157,
-     157,   157,   157,   175,     4,     4,     4,     8,   124,   151,
-     152,   170,   116,   125,    35,    49,    59,    60,    72,    73,
+      21,    48,   116,   119,   122,   124,   129,   148,   149,   150,
+     151,   152,   171,   186,    29,   124,   177,   139,   194,   114,
+     114,   114,   114,   119,   169,   166,   148,    32,    33,   158,
+     158,   158,   158,   176,     4,     4,     4,     8,   125,   152,
+     153,   171,   117,   126,    35,    49,    59,    60,    72,    73,
      74,    75,    76,    77,    78,    79,    80,    81,    82,    83,
      84,    85,    86,    87,    88,    89,    90,    91,    92,    93,
      94,    95,    96,    97,    98,   101,   102,   103,   104,   105,
-     106,   107,   108,   109,   110,   111,   112,   130,   131,   132,
-     133,   191,   197,   198,   200,   201,    24,    55,    56,   166,
-       4,    24,    24,   169,   149,   149,   149,     9,    10,    11,
-      12,    13,    14,    15,    16,    17,    18,    19,   134,   135,
-     137,   149,   154,   119,   119,   114,   124,   116,    37,   152,
-     153,   149,   187,    59,     8,   187,     9,    21,    10,    11,
-      12,    13,    14,    15,    16,    17,   134,   135,   136,   140,
-     149,   149,   187,   149,   149,   194,   187,   187,   187,   187,
-     187,   187,   187,   187,   149,   149,   149,   187,   140,    99,
-     100,   114,   120,   163,   164,   162,    27,    28,     3,     4,
-     129,     4,     7,    26,    38,    39,   101,   103,   104,   108,
-     109,   110,   118,   121,   123,   126,   130,   131,   132,   133,
-     155,   185,   161,   151,   151,   151,    37,   149,   172,   173,
-     174,   114,   117,     3,     4,     7,    26,    27,    28,    38,
-      39,    61,   121,   155,   184,   185,   186,   186,   186,   186,
-     147,   114,   142,   114,   142,   186,   118,   114,    36,   114,
-     114,   114,   114,   114,   114,   114,   186,   186,   186,   114,
-     147,   149,   187,    24,   114,   145,   145,   145,   116,   116,
-     116,   116,   116,   116,   120,   154,   156,   156,   124,   156,
-      24,   116,   116,   116,   116,   145,   120,   122,   170,   171,
-     114,   117,    37,    63,   183,   156,   114,   114,   186,    15,
-      57,    15,   114,   199,   186,   118,   149,   187,   149,   187,
-     187,   187,   149,   149,   114,   114,   114,   187,   186,   186,
-     114,    34,    57,   143,   146,   154,   154,   154,   154,   154,
-     154,   114,   120,   122,   124,   154,   154,   154,   154,    37,
-     172,   143,   144,    24,   122,    21,    21,   116,   186,     4,
-     186,   187,   195,   114,   186,   114,   114,   114,   186,   186,
-     186,   116,   149,    24,     4,   145,   199,    36,   114,   114,
-     114,   114,   154,   114,   114,   114,   114,    57,   141,   114,
-     186,   186,   195,   196,   114,   142,   142,   114,   186,   114,
-     187,   187,   187,   196,   186,   117,   149,   154,   154,   154,
-     154,   154,   154,   154,   154,     4,    24,   114,   118,   117,
-     187,   120,   186,   117,   117,   114,   117,   114,   114,   117,
-     117,   117,   117,    21,   120,   136,   192,    36,   120,   154,
-     154,   154,   186,   184,   120,   136,    21,   117,   117,   117,
-     114,   184,   186,    21,   114,    76,   186,    21,    21,   186,
-     186
+     106,   107,   108,   109,   110,   111,   112,   113,   131,   132,
+     133,   134,   192,   198,   199,   201,   202,    24,    55,    56,
+     167,     4,    24,    24,   170,   150,   150,   150,     9,    10,
+      11,    12,    13,    14,    15,    16,    17,    18,    19,   135,
+     136,   138,   150,   155,   120,   120,   115,   125,   117,    37,
+     153,   154,   150,   188,    59,     8,   188,     9,    21,    10,
+      11,    12,    13,    14,    15,    16,    17,   135,   136,   137,
+     141,   150,   150,   188,   150,   150,   195,   188,   188,   188,
+     188,   188,   188,   188,   188,   150,   150,   150,   188,   141,
+      99,   100,   115,   121,   164,   165,   163,    27,    28,     3,
+       4,   130,     4,     7,    26,    38,    39,   101,   103,   104,
+     109,   110,   111,   119,   122,   124,   127,   131,   132,   133,
+     134,   156,   186,   162,   152,   152,   152,    37,   150,   173,
+     174,   175,   115,   118,     3,     4,     7,    26,    27,    28,
+      38,    39,    61,   122,   156,   185,   186,   187,   187,   187,
+     187,   148,   115,   143,   115,   143,   187,   119,   115,    36,
+     115,   115,   115,   115,   115,   115,   115,   187,   187,   187,
+     115,   148,   150,   188,    24,   115,   146,   146,   146,   117,
+     117,   117,   117,   117,   117,   121,   155,   157,   157,   125,
+     157,    24,   117,   117,   117,   117,   146,   121,   123,   171,
+     172,   115,   118,    37,    63,   184,   157,   115,   115,   187,
+      15,    57,    15,   115,   200,   187,   119,   150,   188,   150,
+     188,   188,   188,   150,   150,   115,   115,   115,   188,   187,
+     187,   115,    34,    57,   144,   147,   155,   155,   155,   155,
+     155,   155,   115,   121,   123,   125,   155,   155,   155,   155,
+      37,   173,   144,   145,    24,   123,    21,    21,   117,   187,
+       4,   187,   188,   196,   115,   187,   115,   115,   115,   187,
+     187,   187,   117,   150,    24,     4,   146,   200,    36,   115,
+     115,   115,   115,   155,   115,   115,   115,   115,    57,   142,
+     115,   187,   187,   196,   197,   115,   143,   143,   115,   187,
+     115,   188,   188,   188,   197,   187,   118,   150,   155,   155,
+     155,   155,   155,   155,   155,   155,     4,    24,   115,   119,
+     118,   188,   121,   187,   118,   118,   115,   118,   115,   115,
+     118,   118,   118,   118,    21,   121,   137,   193,    36,   121,
+     155,   155,   155,   187,   185,   121,   137,    21,   118,   118,
+     118,   115,   185,   187,    21,   115,    76,   187,    21,    21,
+     187,   187
 };

 #define yyerrok         (yyerrstatus = 0)
 #define yyclearin       (yychar = YYEMPTY)
 #define YYEMPTY         (-2)
@@ -2765,11 +2782,11 @@ int yyparse (YYPARSE_PARAM)
 int
 yyparse (void)
 #else
 int
 yyparse ()
-
+    ;
 #endif
 #endif
 {

  int yystate;
@@ -3012,269 +3029,269 @@ yyreduce:

  YY_REDUCE_PRINT (yyn);
  switch (yyn)
    {
        case 3:
-#line 1140 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+#line 1163 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
  if ((yyvsp[0].UIntVal) > (uint32_t)INT32_MAX)     // Outside of my range!
    GEN_ERROR("Value too large for type!");
  (yyval.SIntVal) = (int32_t)(yyvsp[0].UIntVal);
  CHECK_FOR_ERROR
 ;}
    break;

  case 5:
-#line 1149 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+#line 1172 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
  if ((yyvsp[0].UInt64Val) > (uint64_t)INT64_MAX)     // Outside of my range!
    GEN_ERROR("Value too large for type!");
  (yyval.SInt64Val) = (int64_t)(yyvsp[0].UInt64Val);
  CHECK_FOR_ERROR
 ;}
    break;

-  case 38:
-#line 1173 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 39:
+#line 1196 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    (yyval.StrVal) = (yyvsp[-1].StrVal);
    CHECK_FOR_ERROR
  ;}
    break;

-  case 39:
-#line 1177 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 40:
+#line 1200 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    (yyval.StrVal) = 0;
    CHECK_FOR_ERROR
  ;}
    break;

-  case 40:
-#line 1182 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 41:
+#line 1205 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    { (yyval.Linkage) = GlobalValue::InternalLinkage; ;}
    break;

-  case 41:
-#line 1183 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 42:
+#line 1206 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    { (yyval.Linkage) = GlobalValue::LinkOnceLinkage; ;}
    break;

-  case 42:
-#line 1184 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 43:
+#line 1207 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    { (yyval.Linkage) = GlobalValue::WeakLinkage; ;}
    break;

-  case 43:
-#line 1185 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 44:
+#line 1208 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    { (yyval.Linkage) = GlobalValue::AppendingLinkage; ;}
    break;

-  case 44:
-#line 1186 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 45:
+#line 1209 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    { (yyval.Linkage) = GlobalValue::DLLImportLinkage; ;}
    break;

-  case 45:
-#line 1187 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 46:
+#line 1210 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    { (yyval.Linkage) = GlobalValue::DLLExportLinkage; ;}
    break;

-  case 46:
-#line 1188 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 47:
+#line 1211 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    { (yyval.Linkage) = GlobalValue::ExternalWeakLinkage; ;}
    break;

-  case 47:
-#line 1189 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 48:
+#line 1212 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    { (yyval.Linkage) = GlobalValue::ExternalLinkage; ;}
    break;

-  case 48:
-#line 1191 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 49:
+#line 1214 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    { (yyval.UIntVal) = CallingConv::C; ;}
    break;

-  case 49:
-#line 1192 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 50:
+#line 1215 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    { (yyval.UIntVal) = CallingConv::C; ;}
    break;

-  case 50:
-#line 1193 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 51:
+#line 1216 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    { (yyval.UIntVal) = CallingConv::CSRet; ;}
    break;

-  case 51:
-#line 1194 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 52:
+#line 1217 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    { (yyval.UIntVal) = CallingConv::Fast; ;}
    break;

-  case 52:
-#line 1195 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 53:
+#line 1218 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    { (yyval.UIntVal) = CallingConv::Cold; ;}
    break;

-  case 53:
-#line 1196 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 54:
+#line 1219 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    { (yyval.UIntVal) = CallingConv::X86_StdCall; ;}
    break;

-  case 54:
-#line 1197 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 55:
+#line 1220 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    { (yyval.UIntVal) = CallingConv::X86_FastCall; ;}
    break;

-  case 55:
-#line 1198 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 56:
+#line 1221 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
                   if ((unsigned)(yyvsp[0].UInt64Val) != (yyvsp[0].UInt64Val))
                     GEN_ERROR("Calling conv too large!");
                   (yyval.UIntVal) = (yyvsp[0].UInt64Val);
                  CHECK_FOR_ERROR
                 ;}
    break;

-  case 56:
-#line 1207 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 57:
+#line 1230 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    { (yyval.UIntVal) = 0; ;}
    break;

-  case 57:
-#line 1208 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 58:
+#line 1231 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
  (yyval.UIntVal) = (yyvsp[0].UInt64Val);
  if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
    GEN_ERROR("Alignment must be a power of two!");
  CHECK_FOR_ERROR
 ;}
    break;

-  case 58:
-#line 1214 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 59:
+#line 1237 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    { (yyval.UIntVal) = 0; ;}
    break;

-  case 59:
-#line 1215 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 60:
+#line 1238 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
  (yyval.UIntVal) = (yyvsp[0].UInt64Val);
  if ((yyval.UIntVal) != 0 && !isPowerOf2_32((yyval.UIntVal)))
    GEN_ERROR("Alignment must be a power of two!");
  CHECK_FOR_ERROR
 ;}
    break;

-  case 60:
-#line 1223 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 61:
+#line 1246 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
  for (unsigned i = 0, e = strlen((yyvsp[0].StrVal)); i != e; ++i)
    if ((yyvsp[0].StrVal)[i] == '"' || (yyvsp[0].StrVal)[i] == '\\')
      GEN_ERROR("Invalid character in section name!");
  (yyval.StrVal) = (yyvsp[0].StrVal);
  CHECK_FOR_ERROR
 ;}
    break;

-  case 61:
-#line 1231 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 62:
+#line 1254 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    { (yyval.StrVal) = 0; ;}
    break;

-  case 62:
-#line 1232 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 63:
+#line 1255 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    { (yyval.StrVal) = (yyvsp[0].StrVal); ;}
    break;

-  case 63:
-#line 1237 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 64:
+#line 1260 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {;}
    break;

-  case 64:
-#line 1238 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 65:
+#line 1261 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {;}
    break;

-  case 65:
-#line 1239 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 66:
+#line 1262 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    CurGV->setSection((yyvsp[0].StrVal));
    free((yyvsp[0].StrVal));
    CHECK_FOR_ERROR
  ;}
    break;

-  case 66:
-#line 1244 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 67:
+#line 1267 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    if ((yyvsp[0].UInt64Val) != 0 && !isPowerOf2_32((yyvsp[0].UInt64Val)))
      GEN_ERROR("Alignment must be a power of two!");
    CurGV->setAlignment((yyvsp[0].UInt64Val));
    CHECK_FOR_ERROR
  ;}
    break;

-  case 68:
-#line 1258 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 69:
+#line 1281 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    { (yyval.TypeVal) = new PATypeHolder((yyvsp[0].PrimType)); ;}
    break;

-  case 70:
-#line 1259 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 71:
+#line 1282 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    { (yyval.TypeVal) = new PATypeHolder((yyvsp[0].PrimType)); ;}
    break;

-  case 71:
-#line 1261 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 72:
+#line 1284 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    if (!UpRefs.empty())
      GEN_ERROR("Invalid upreference in type: " + (*(yyvsp[0].TypeVal))->getDescription());
    (yyval.TypeVal) = (yyvsp[0].TypeVal);
    CHECK_FOR_ERROR
  ;}
    break;

-  case 85:
-#line 1273 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 86:
+#line 1296 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    (yyval.TypeVal) = new PATypeHolder(OpaqueType::get());
    CHECK_FOR_ERROR
  ;}
    break;

-  case 86:
-#line 1277 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 87:
+#line 1300 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    (yyval.TypeVal) = new PATypeHolder((yyvsp[0].PrimType));
    CHECK_FOR_ERROR
  ;}
    break;

-  case 87:
-#line 1281 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 88:
+#line 1304 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {            // Named types are also simple types...
  const Type* tmp = getTypeVal((yyvsp[0].ValIDVal));
  CHECK_FOR_ERROR
  (yyval.TypeVal) = new PATypeHolder(tmp);
 ;}
    break;

-  case 88:
-#line 1289 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 89:
+#line 1312 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {                   // Type UpReference
    if ((yyvsp[0].UInt64Val) > (uint64_t)~0U) GEN_ERROR("Value out of range!");
    OpaqueType *OT = OpaqueType::get();        // Use temporary placeholder
    UpRefs.push_back(UpRefRecord((unsigned)(yyvsp[0].UInt64Val), OT));  // Add to vector...
    (yyval.TypeVal) = new PATypeHolder(OT);
    UR_OUT("New Upreference!\n");
    CHECK_FOR_ERROR
  ;}
    break;

-  case 89:
-#line 1297 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 90:
+#line 1320 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {           // Function derived type?
    std::vector<const Type*> Params;
    for (std::list<llvm::PATypeHolder>::iterator I = (yyvsp[-1].TypeList)->begin(),
           E = (yyvsp[-1].TypeList)->end(); I != E; ++I)
      Params.push_back(*I);
@@ -3286,21 +3303,21 @@ yyreduce:
    delete (yyvsp[-3].TypeVal);      // Delete the return type handle
    CHECK_FOR_ERROR
  ;}
    break;

-  case 90:
-#line 1310 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 91:
+#line 1333 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {          // Sized array type?
    (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(ArrayType::get(*(yyvsp[-1].TypeVal), (unsigned)(yyvsp[-3].UInt64Val))));
    delete (yyvsp[-1].TypeVal);
    CHECK_FOR_ERROR
  ;}
    break;

-  case 91:
-#line 1315 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 92:
+#line 1338 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {          // Packed array type?
     const llvm::Type* ElemTy = (yyvsp[-1].TypeVal)->get();
     if ((unsigned)(yyvsp[-3].UInt64Val) != (yyvsp[-3].UInt64Val))
        GEN_ERROR("Unsigned result not equal to signed result");
     if (!ElemTy->isPrimitiveType())
@@ -3311,12 +3328,12 @@ yyreduce:
     delete (yyvsp[-1].TypeVal);
     CHECK_FOR_ERROR
  ;}
    break;

-  case 92:
-#line 1327 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 93:
+#line 1350 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {                        // Structure type?
    std::vector<const Type*> Elements;
    for (std::list<llvm::PATypeHolder>::iterator I = (yyvsp[-1].TypeList)->begin(),
           E = (yyvsp[-1].TypeList)->end(); I != E; ++I)
      Elements.push_back(*I);
@@ -3325,72 +3342,72 @@ yyreduce:
    delete (yyvsp[-1].TypeList);
    CHECK_FOR_ERROR
  ;}
    break;

-  case 93:
-#line 1337 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 94:
+#line 1360 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {                                  // Empty structure type?
    (yyval.TypeVal) = new PATypeHolder(StructType::get(std::vector<const Type*>()));
    CHECK_FOR_ERROR
  ;}
    break;

-  case 94:
-#line 1341 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 95:
+#line 1364 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {                             // Pointer type?
    if (*(yyvsp[-1].TypeVal) == Type::LabelTy)
      GEN_ERROR("Cannot form a pointer to a basic block");
    (yyval.TypeVal) = new PATypeHolder(HandleUpRefs(PointerType::get(*(yyvsp[-1].TypeVal))));
    delete (yyvsp[-1].TypeVal);
    CHECK_FOR_ERROR
  ;}
    break;

-  case 95:
-#line 1352 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 96:
+#line 1375 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    (yyval.TypeList) = new std::list<PATypeHolder>();
    (yyval.TypeList)->push_back(*(yyvsp[0].TypeVal)); delete (yyvsp[0].TypeVal);
    CHECK_FOR_ERROR
  ;}
    break;

-  case 96:
-#line 1357 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 97:
+#line 1380 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    ((yyval.TypeList)=(yyvsp[-2].TypeList))->push_back(*(yyvsp[0].TypeVal)); delete (yyvsp[0].TypeVal);
    CHECK_FOR_ERROR
  ;}
    break;

-  case 98:
-#line 1364 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 99:
+#line 1387 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    ((yyval.TypeList)=(yyvsp[-2].TypeList))->push_back(Type::VoidTy);
    CHECK_FOR_ERROR
  ;}
    break;

-  case 99:
-#line 1368 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 100:
+#line 1391 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    ((yyval.TypeList) = new std::list<PATypeHolder>())->push_back(Type::VoidTy);
    CHECK_FOR_ERROR
  ;}
    break;

-  case 100:
-#line 1372 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 101:
+#line 1395 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    (yyval.TypeList) = new std::list<PATypeHolder>();
    CHECK_FOR_ERROR
  ;}
    break;

-  case 101:
-#line 1383 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 102:
+#line 1406 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    { // Nonempty unsized arr
    const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-3].TypeVal)->get());
    if (ATy == 0)
      GEN_ERROR("Cannot make array constant with type: '" +
                     (*(yyvsp[-3].TypeVal))->getDescription() + "'!");
@@ -3415,12 +3432,12 @@ yyreduce:
    delete (yyvsp[-3].TypeVal); delete (yyvsp[-1].ConstVector);
    CHECK_FOR_ERROR
  ;}
    break;

-  case 102:
-#line 1409 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 103:
+#line 1432 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-2].TypeVal)->get());
    if (ATy == 0)
      GEN_ERROR("Cannot make array constant with type: '" +
                     (*(yyvsp[-2].TypeVal))->getDescription() + "'!");
@@ -3433,12 +3450,12 @@ yyreduce:
    delete (yyvsp[-2].TypeVal);
    CHECK_FOR_ERROR
  ;}
    break;

-  case 103:
-#line 1423 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 104:
+#line 1446 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    const ArrayType *ATy = dyn_cast<ArrayType>((yyvsp[-2].TypeVal)->get());
    if (ATy == 0)
      GEN_ERROR("Cannot make array constant with type: '" +
                     (*(yyvsp[-2].TypeVal))->getDescription() + "'!");
@@ -3467,12 +3484,12 @@ yyreduce:
    delete (yyvsp[-2].TypeVal);
    CHECK_FOR_ERROR
  ;}
    break;

-  case 104:
-#line 1453 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 105:
+#line 1476 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    { // Nonempty unsized arr
    const PackedType *PTy = dyn_cast<PackedType>((yyvsp[-3].TypeVal)->get());
    if (PTy == 0)
      GEN_ERROR("Cannot make packed constant with type: '" +
                     (*(yyvsp[-3].TypeVal))->getDescription() + "'!");
@@ -3497,12 +3514,12 @@ yyreduce:
    delete (yyvsp[-3].TypeVal); delete (yyvsp[-1].ConstVector);
    CHECK_FOR_ERROR
  ;}
    break;

-  case 105:
-#line 1479 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 106:
+#line 1502 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    const StructType *STy = dyn_cast<StructType>((yyvsp[-3].TypeVal)->get());
    if (STy == 0)
      GEN_ERROR("Cannot make struct constant with type: '" +
                     (*(yyvsp[-3].TypeVal))->getDescription() + "'!");
@@ -3522,12 +3539,12 @@ yyreduce:
    delete (yyvsp[-3].TypeVal); delete (yyvsp[-1].ConstVector);
    CHECK_FOR_ERROR
  ;}
    break;

-  case 106:
-#line 1500 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 107:
+#line 1523 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    const StructType *STy = dyn_cast<StructType>((yyvsp[-2].TypeVal)->get());
    if (STy == 0)
      GEN_ERROR("Cannot make struct constant with type: '" +
                     (*(yyvsp[-2].TypeVal))->getDescription() + "'!");
@@ -3539,12 +3556,12 @@ yyreduce:
    delete (yyvsp[-2].TypeVal);
    CHECK_FOR_ERROR
  ;}
    break;

-  case 107:
-#line 1513 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 108:
+#line 1536 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    const PointerType *PTy = dyn_cast<PointerType>((yyvsp[-1].TypeVal)->get());
    if (PTy == 0)
      GEN_ERROR("Cannot make null pointer constant with type: '" +
                     (*(yyvsp[-1].TypeVal))->getDescription() + "'!");
@@ -3553,21 +3570,21 @@ yyreduce:
    delete (yyvsp[-1].TypeVal);
    CHECK_FOR_ERROR
  ;}
    break;

-  case 108:
-#line 1523 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 109:
+#line 1546 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    (yyval.ConstVal) = UndefValue::get((yyvsp[-1].TypeVal)->get());
    delete (yyvsp[-1].TypeVal);
    CHECK_FOR_ERROR
  ;}
    break;

-  case 109:
-#line 1528 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 110:
+#line 1551 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    const PointerType *Ty = dyn_cast<PointerType>((yyvsp[-1].TypeVal)->get());
    if (Ty == 0)
      GEN_ERROR("Global const reference must be a pointer type!");

@@ -3627,81 +3644,81 @@ yyreduce:
    delete (yyvsp[-1].TypeVal);            // Free the type handle
    CHECK_FOR_ERROR
  ;}
    break;

-  case 110:
-#line 1589 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 111:
+#line 1612 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    if ((yyvsp[-1].TypeVal)->get() != (yyvsp[0].ConstVal)->getType())
      GEN_ERROR("Mismatched types for constant expression!");
    (yyval.ConstVal) = (yyvsp[0].ConstVal);
    delete (yyvsp[-1].TypeVal);
    CHECK_FOR_ERROR
  ;}
    break;

-  case 111:
-#line 1596 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 112:
+#line 1619 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    const Type *Ty = (yyvsp[-1].TypeVal)->get();
    if (isa<FunctionType>(Ty) || Ty == Type::LabelTy || isa<OpaqueType>(Ty))
      GEN_ERROR("Cannot create a null initialized value of this type!");
    (yyval.ConstVal) = Constant::getNullValue(Ty);
    delete (yyvsp[-1].TypeVal);
    CHECK_FOR_ERROR
  ;}
    break;

-  case 112:
-#line 1605 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 113:
+#line 1628 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {      // integral constants
    if (!ConstantInt::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].SInt64Val)))
      GEN_ERROR("Constant value doesn't fit in type!");
    (yyval.ConstVal) = ConstantInt::get((yyvsp[-1].PrimType), (yyvsp[0].SInt64Val));
    CHECK_FOR_ERROR
  ;}
    break;

-  case 113:
-#line 1611 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 114:
+#line 1634 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {            // integral constants
    if (!ConstantInt::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].UInt64Val)))
      GEN_ERROR("Constant value doesn't fit in type!");
    (yyval.ConstVal) = ConstantInt::get((yyvsp[-1].PrimType), (yyvsp[0].UInt64Val));
    CHECK_FOR_ERROR
  ;}
    break;

-  case 114:
-#line 1617 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 115:
+#line 1640 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {                      // Boolean constants
    (yyval.ConstVal) = ConstantBool::getTrue();
    CHECK_FOR_ERROR
  ;}
    break;

-  case 115:
-#line 1621 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 116:
+#line 1644 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {                     // Boolean constants
    (yyval.ConstVal) = ConstantBool::getFalse();
    CHECK_FOR_ERROR
  ;}
    break;

-  case 116:
-#line 1625 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 117:
+#line 1648 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {                   // Float & Double constants
    if (!ConstantFP::isValueValidForType((yyvsp[-1].PrimType), (yyvsp[0].FPVal)))
      GEN_ERROR("Floating point constant invalid for type!!");
    (yyval.ConstVal) = ConstantFP::get((yyvsp[-1].PrimType), (yyvsp[0].FPVal));
    CHECK_FOR_ERROR
  ;}
    break;

-  case 117:
-#line 1633 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 118:
+#line 1656 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    if (!(yyvsp[-3].ConstVal)->getType()->isFirstClassType())
      GEN_ERROR("cast constant expression from a non-primitive type: '" +
                     (yyvsp[-3].ConstVal)->getType()->getDescription() + "'!");
    if (!(yyvsp[-1].TypeVal)->get()->isFirstClassType())
@@ -3711,12 +3728,12 @@ yyreduce:
    delete (yyvsp[-1].TypeVal);
    CHECK_FOR_ERROR
  ;}
    break;

-  case 118:
-#line 1644 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 119:
+#line 1667 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    if (!isa<PointerType>((yyvsp[-2].ConstVal)->getType()))
      GEN_ERROR("GetElementPtr requires a pointer operand!");

    // LLVM 1.2 and earlier used ubyte struct indices.  Convert any ubyte struct
@@ -3747,24 +3764,24 @@ yyreduce:
    (yyval.ConstVal) = ConstantExpr::getGetElementPtr((yyvsp[-2].ConstVal), IdxVec);
    CHECK_FOR_ERROR
  ;}
    break;

-  case 119:
-#line 1676 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 120:
+#line 1699 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    if ((yyvsp[-5].ConstVal)->getType() != Type::BoolTy)
      GEN_ERROR("Select condition must be of boolean type!");
    if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
      GEN_ERROR("Select operand types must match!");
    (yyval.ConstVal) = ConstantExpr::getSelect((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
    CHECK_FOR_ERROR
  ;}
    break;

-  case 120:
-#line 1684 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 121:
+#line 1707 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
      GEN_ERROR("Binary operator types must match!");
    // First, make sure we're dealing with the right opcode by upgrading from
    // obsolete versions.
@@ -3790,12 +3807,12 @@ yyreduce:
    }
    CHECK_FOR_ERROR
  ;}
    break;

-  case 121:
-#line 1711 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 122:
+#line 1734 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
      GEN_ERROR("Logical operator types must match!");
    if (!(yyvsp[-3].ConstVal)->getType()->isIntegral()) {
      if (!isa<PackedType>((yyvsp[-3].ConstVal)->getType()) ||
@@ -3805,133 +3822,136 @@ yyreduce:
    (yyval.ConstVal) = ConstantExpr::get((yyvsp[-5].BinaryOpVal).opcode, (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
    CHECK_FOR_ERROR
  ;}
    break;

-  case 122:
-#line 1722 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 123:
+#line 1745 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    if ((yyvsp[-3].ConstVal)->getType() != (yyvsp[-1].ConstVal)->getType())
      GEN_ERROR("setcc operand types must match!");
    (yyval.ConstVal) = ConstantExpr::get((yyvsp[-5].BinaryOpVal).opcode, (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
    CHECK_FOR_ERROR
  ;}
    break;

-  case 123:
-#line 1728 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 124:
+#line 1751 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    if ((yyvsp[-1].ConstVal)->getType() != Type::UByteTy)
      GEN_ERROR("Shift count for shift constant must be unsigned byte!");
    if (!(yyvsp[-3].ConstVal)->getType()->isInteger())
      GEN_ERROR("Shift constant expression requires integer operand!");
+    // Handle opcode upgrade situations
+    sanitizeOpCode((yyvsp[-5].OtherOpVal), (yyvsp[-3].ConstVal)->getType());
+    CHECK_FOR_ERROR;
    (yyval.ConstVal) = ConstantExpr::get((yyvsp[-5].OtherOpVal).opcode, (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
    CHECK_FOR_ERROR
  ;}
    break;

-  case 124:
-#line 1736 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 125:
+#line 1762 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    if (!ExtractElementInst::isValidOperands((yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
      GEN_ERROR("Invalid extractelement operands!");
    (yyval.ConstVal) = ConstantExpr::getExtractElement((yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
    CHECK_FOR_ERROR
  ;}
    break;

-  case 125:
-#line 1742 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 126:
+#line 1768 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    if (!InsertElementInst::isValidOperands((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
      GEN_ERROR("Invalid insertelement operands!");
    (yyval.ConstVal) = ConstantExpr::getInsertElement((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
    CHECK_FOR_ERROR
  ;}
    break;

-  case 126:
-#line 1748 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 127:
+#line 1774 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    if (!ShuffleVectorInst::isValidOperands((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal)))
      GEN_ERROR("Invalid shufflevector operands!");
    (yyval.ConstVal) = ConstantExpr::getShuffleVector((yyvsp[-5].ConstVal), (yyvsp[-3].ConstVal), (yyvsp[-1].ConstVal));
    CHECK_FOR_ERROR
  ;}
    break;

-  case 127:
-#line 1757 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 128:
+#line 1783 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    ((yyval.ConstVector) = (yyvsp[-2].ConstVector))->push_back((yyvsp[0].ConstVal));
    CHECK_FOR_ERROR
  ;}
    break;

-  case 128:
-#line 1761 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 129:
+#line 1787 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    (yyval.ConstVector) = new std::vector<Constant*>();
    (yyval.ConstVector)->push_back((yyvsp[0].ConstVal));
    CHECK_FOR_ERROR
  ;}
    break;

-  case 129:
-#line 1769 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 130:
+#line 1795 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    { (yyval.BoolVal) = false; ;}
    break;

-  case 130:
-#line 1769 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 131:
+#line 1795 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    { (yyval.BoolVal) = true; ;}
    break;

-  case 131:
-#line 1779 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 132:
+#line 1805 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
  (yyval.ModuleVal) = ParserResult = (yyvsp[0].ModuleVal);
  CurModule.ModuleDone();
  CHECK_FOR_ERROR;
 ;}
    break;

-  case 132:
-#line 1787 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 133:
+#line 1813 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    (yyval.ModuleVal) = (yyvsp[-1].ModuleVal);
    CurFun.FunctionDone();
    CHECK_FOR_ERROR
  ;}
    break;

-  case 133:
-#line 1792 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 134:
+#line 1818 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    (yyval.ModuleVal) = (yyvsp[-1].ModuleVal);
    CHECK_FOR_ERROR
  ;}
    break;

-  case 134:
-#line 1796 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 135:
+#line 1822 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    (yyval.ModuleVal) = (yyvsp[-3].ModuleVal);
    CHECK_FOR_ERROR
  ;}
    break;

-  case 135:
-#line 1800 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 136:
+#line 1826 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    (yyval.ModuleVal) = (yyvsp[-1].ModuleVal);
    CHECK_FOR_ERROR
  ;}
    break;

-  case 136:
-#line 1804 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 137:
+#line 1830 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    (yyval.ModuleVal) = CurModule.CurrentModule;
    // Emit an error if there are any unresolved types left.
    if (!CurModule.LateResolveTypes.empty()) {
      const ValID &DID = CurModule.LateResolveTypes.begin()->first;
@@ -3943,12 +3963,12 @@ yyreduce:
    }
    CHECK_FOR_ERROR
  ;}
    break;

-  case 137:
-#line 1819 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 138:
+#line 1845 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/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:
    //
    // %list = type { %list * }
@@ -3969,115 +3989,115 @@ yyreduce:
    delete (yyvsp[0].TypeVal);
    CHECK_FOR_ERROR
  ;}
    break;

-  case 138:
-#line 1841 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 139:
+#line 1867 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {       // Function prototypes can be in const pool
    CHECK_FOR_ERROR
  ;}
    break;

-  case 139:
-#line 1844 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 140:
+#line 1870 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {  // Asm blocks can be in the const pool
    CHECK_FOR_ERROR
  ;}
    break;

-  case 140:
-#line 1847 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 141:
+#line 1873 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    if ((yyvsp[0].ConstVal) == 0)
      GEN_ERROR("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));
    CHECK_FOR_ERROR
  ;}
    break;

-  case 141:
-#line 1852 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 142:
+#line 1878 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    CurGV = 0;
  ;}
    break;

-  case 142:
-#line 1855 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 143:
+#line 1881 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    CurGV = ParseGlobalVariable((yyvsp[-3].StrVal), GlobalValue::ExternalLinkage, (yyvsp[-1].BoolVal), *(yyvsp[0].TypeVal), 0);
    CHECK_FOR_ERROR
    delete (yyvsp[0].TypeVal);
  ;}
    break;

-  case 143:
-#line 1859 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 144:
+#line 1885 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    CurGV = 0;
    CHECK_FOR_ERROR
  ;}
    break;

-  case 144:
-#line 1863 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 145:
+#line 1889 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    CurGV = ParseGlobalVariable((yyvsp[-3].StrVal), GlobalValue::DLLImportLinkage, (yyvsp[-1].BoolVal), *(yyvsp[0].TypeVal), 0);
    CHECK_FOR_ERROR
    delete (yyvsp[0].TypeVal);
  ;}
    break;

-  case 145:
-#line 1867 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 146:
+#line 1893 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    CurGV = 0;
    CHECK_FOR_ERROR
  ;}
    break;

-  case 146:
-#line 1871 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 147:
+#line 1897 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    CurGV =
      ParseGlobalVariable((yyvsp[-3].StrVal), GlobalValue::ExternalWeakLinkage, (yyvsp[-1].BoolVal), *(yyvsp[0].TypeVal), 0);
    CHECK_FOR_ERROR
    delete (yyvsp[0].TypeVal);
  ;}
    break;

-  case 147:
-#line 1876 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 148:
+#line 1902 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    CurGV = 0;
    CHECK_FOR_ERROR
  ;}
    break;

-  case 148:
-#line 1880 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 149:
+#line 1906 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    CHECK_FOR_ERROR
  ;}
    break;

-  case 149:
-#line 1883 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 150:
+#line 1909 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    CHECK_FOR_ERROR
  ;}
    break;

-  case 150:
-#line 1886 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 151:
+#line 1912 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
  ;}
    break;

-  case 151:
-#line 1890 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 152:
+#line 1916 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
  const std::string &AsmSoFar = CurModule.CurrentModule->getModuleInlineAsm();
  char *EndStr = UnEscapeLexed((yyvsp[0].StrVal), true);
  std::string NewAsm((yyvsp[0].StrVal), EndStr);
  free((yyvsp[0].StrVal));
@@ -4088,30 +4108,30 @@ yyreduce:
    CurModule.CurrentModule->setModuleInlineAsm(AsmSoFar+"\n"+NewAsm);
  CHECK_FOR_ERROR
 ;}
    break;

-  case 152:
-#line 1903 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 153:
+#line 1929 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    { (yyval.Endianness) = Module::BigEndian; ;}
    break;

-  case 153:
-#line 1904 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 154:
+#line 1930 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    { (yyval.Endianness) = Module::LittleEndian; ;}
    break;

-  case 154:
-#line 1906 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 155:
+#line 1932 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    CurModule.CurrentModule->setEndianness((yyvsp[0].Endianness));
    CHECK_FOR_ERROR
  ;}
    break;

-  case 155:
-#line 1910 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 156:
+#line 1936 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    if ((yyvsp[0].UInt64Val) == 32)
      CurModule.CurrentModule->setPointerSize(Module::Pointer32);
    else if ((yyvsp[0].UInt64Val) == 64)
      CurModule.CurrentModule->setPointerSize(Module::Pointer64);
@@ -4119,123 +4139,123 @@ yyreduce:
      GEN_ERROR("Invalid pointer size: '" + utostr((yyvsp[0].UInt64Val)) + "'!");
    CHECK_FOR_ERROR
  ;}
    break;

-  case 156:
-#line 1919 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 157:
+#line 1945 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    CurModule.CurrentModule->setTargetTriple((yyvsp[0].StrVal));
    free((yyvsp[0].StrVal));
  ;}
    break;

-  case 157:
-#line 1923 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 158:
+#line 1949 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    CurModule.CurrentModule->setDataLayout((yyvsp[0].StrVal));
    free((yyvsp[0].StrVal));
  ;}
    break;

-  case 159:
-#line 1930 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 160:
+#line 1956 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
          CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal));
          free((yyvsp[0].StrVal));
          CHECK_FOR_ERROR
        ;}
    break;

-  case 160:
-#line 1935 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 161:
+#line 1961 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
          CurModule.CurrentModule->addLibrary((yyvsp[0].StrVal));
          free((yyvsp[0].StrVal));
          CHECK_FOR_ERROR
        ;}
    break;

-  case 161:
-#line 1940 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 162:
+#line 1966 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
          CHECK_FOR_ERROR
        ;}
    break;

-  case 165:
-#line 1950 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 166:
+#line 1976 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    { (yyval.StrVal) = 0; ;}
    break;

-  case 166:
-#line 1952 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 167:
+#line 1978 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
  if (*(yyvsp[-1].TypeVal) == Type::VoidTy)
    GEN_ERROR("void typed arguments are invalid!");
  (yyval.ArgVal) = new std::pair<PATypeHolder*, char*>((yyvsp[-1].TypeVal), (yyvsp[0].StrVal));
  CHECK_FOR_ERROR
 ;}
    break;

-  case 167:
-#line 1959 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 168:
+#line 1985 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    (yyval.ArgList) = (yyvsp[-2].ArgList);
    (yyvsp[-2].ArgList)->push_back(*(yyvsp[0].ArgVal));
    delete (yyvsp[0].ArgVal);
    CHECK_FOR_ERROR
  ;}
    break;

-  case 168:
-#line 1965 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 169:
+#line 1991 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    (yyval.ArgList) = new std::vector<std::pair<PATypeHolder*,char*> >();
    (yyval.ArgList)->push_back(*(yyvsp[0].ArgVal));
    delete (yyvsp[0].ArgVal);
    CHECK_FOR_ERROR
  ;}
    break;

-  case 169:
-#line 1972 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 170:
+#line 1998 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    (yyval.ArgList) = (yyvsp[0].ArgList);
    CHECK_FOR_ERROR
  ;}
    break;

-  case 170:
-#line 1976 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 171:
+#line 2002 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    (yyval.ArgList) = (yyvsp[-2].ArgList);
    (yyval.ArgList)->push_back(std::pair<PATypeHolder*,
                            char*>(new PATypeHolder(Type::VoidTy), 0));
    CHECK_FOR_ERROR
  ;}
    break;

-  case 171:
-#line 1982 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 172:
+#line 2008 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/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));
    CHECK_FOR_ERROR
  ;}
    break;

-  case 172:
-#line 1987 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 173:
+#line 2013 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    (yyval.ArgList) = 0;
    CHECK_FOR_ERROR
  ;}
    break;

-  case 173:
-#line 1993 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 174:
+#line 2019 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
  UnEscapeLexed((yyvsp[-5].StrVal));
  std::string FunctionName((yyvsp[-5].StrVal));
  free((yyvsp[-5].StrVal));  // Free strdup'd memory!

@@ -4327,135 +4347,135 @@ yyreduce:
  }
  CHECK_FOR_ERROR
 ;}
    break;

-  case 176:
-#line 2089 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 177:
+#line 2115 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
  (yyval.FunctionVal) = CurFun.CurrentFunction;

  // Make sure that we keep track of the linkage type even if there was a
  // previous "declare".
  (yyval.FunctionVal)->setLinkage((yyvsp[-2].Linkage));
 ;}
    break;

-  case 179:
-#line 2099 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 180:
+#line 2125 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
  (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
  CHECK_FOR_ERROR
 ;}
    break;

-  case 181:
-#line 2105 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 182:
+#line 2131 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    { CurFun.Linkage = GlobalValue::DLLImportLinkage ;}
    break;

-  case 182:
-#line 2106 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 183:
+#line 2132 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    { CurFun.Linkage = GlobalValue::DLLImportLinkage ;}
    break;

-  case 183:
-#line 2108 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 184:
+#line 2134 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    { CurFun.isDeclare = true; ;}
    break;

-  case 184:
-#line 2108 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 185:
+#line 2134 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    (yyval.FunctionVal) = CurFun.CurrentFunction;
    CurFun.FunctionDone();
    CHECK_FOR_ERROR
  ;}
    break;

-  case 185:
-#line 2118 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 186:
+#line 2144 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    (yyval.BoolVal) = false;
    CHECK_FOR_ERROR
  ;}
    break;

-  case 186:
-#line 2122 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 187:
+#line 2148 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    (yyval.BoolVal) = true;
    CHECK_FOR_ERROR
  ;}
    break;

-  case 187:
-#line 2127 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 188:
+#line 2153 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {    // A reference to a direct constant
    (yyval.ValIDVal) = ValID::create((yyvsp[0].SInt64Val));
    CHECK_FOR_ERROR
  ;}
    break;

-  case 188:
-#line 2131 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 189:
+#line 2157 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    (yyval.ValIDVal) = ValID::create((yyvsp[0].UInt64Val));
    CHECK_FOR_ERROR
  ;}
    break;

-  case 189:
-#line 2135 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 190:
+#line 2161 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {                     // Perhaps it's an FP constant?
    (yyval.ValIDVal) = ValID::create((yyvsp[0].FPVal));
    CHECK_FOR_ERROR
  ;}
    break;

-  case 190:
-#line 2139 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 191:
+#line 2165 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    (yyval.ValIDVal) = ValID::create(ConstantBool::getTrue());
    CHECK_FOR_ERROR
  ;}
    break;

-  case 191:
-#line 2143 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 192:
+#line 2169 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    (yyval.ValIDVal) = ValID::create(ConstantBool::getFalse());
    CHECK_FOR_ERROR
  ;}
    break;

-  case 192:
-#line 2147 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 193:
+#line 2173 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    (yyval.ValIDVal) = ValID::createNull();
    CHECK_FOR_ERROR
  ;}
    break;

-  case 193:
-#line 2151 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 194:
+#line 2177 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    (yyval.ValIDVal) = ValID::createUndef();
    CHECK_FOR_ERROR
  ;}
    break;

-  case 194:
-#line 2155 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 195:
+#line 2181 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {     // A vector zero constant.
    (yyval.ValIDVal) = ValID::createZeroInit();
    CHECK_FOR_ERROR
  ;}
    break;

-  case 195:
-#line 2159 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 196:
+#line 2185 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    { // Nonempty unsized packed vector
    const Type *ETy = (*(yyvsp[-1].ConstVector))[0]->getType();
    int NumElements = (yyvsp[-1].ConstVector)->size();

    PackedType* pt = PackedType::get(ETy, NumElements);
@@ -4479,20 +4499,20 @@ yyreduce:
    delete PTy; delete (yyvsp[-1].ConstVector);
    CHECK_FOR_ERROR
  ;}
    break;

-  case 196:
-#line 2184 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 197:
+#line 2210 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    (yyval.ValIDVal) = ValID::create((yyvsp[0].ConstVal));
    CHECK_FOR_ERROR
  ;}
    break;

-  case 197:
-#line 2188 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 198:
+#line 2214 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    char *End = UnEscapeLexed((yyvsp[-2].StrVal), true);
    std::string AsmStr = std::string((yyvsp[-2].StrVal), End);
    End = UnEscapeLexed((yyvsp[0].StrVal), true);
    std::string Constraints = std::string((yyvsp[0].StrVal), End);
@@ -4501,52 +4521,52 @@ yyreduce:
    free((yyvsp[0].StrVal));
    CHECK_FOR_ERROR
  ;}
    break;

-  case 198:
-#line 2202 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 199:
+#line 2228 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {  // Is it an integer reference...?
    (yyval.ValIDVal) = ValID::create((yyvsp[0].SIntVal));
    CHECK_FOR_ERROR
  ;}
    break;

-  case 199:
-#line 2206 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 200:
+#line 2232 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {                   // Is it a named reference...?
    (yyval.ValIDVal) = ValID::create((yyvsp[0].StrVal));
    CHECK_FOR_ERROR
  ;}
    break;

-  case 202:
-#line 2218 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 203:
+#line 2244 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    (yyval.ValueVal) = getVal(*(yyvsp[-1].TypeVal), (yyvsp[0].ValIDVal)); delete (yyvsp[-1].TypeVal);
    CHECK_FOR_ERROR
  ;}
    break;

-  case 203:
-#line 2223 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 204:
+#line 2249 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
    CHECK_FOR_ERROR
  ;}
    break;

-  case 204:
-#line 2227 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 205:
+#line 2253 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    { // Do not allow functions with 0 basic blocks
    (yyval.FunctionVal) = (yyvsp[-1].FunctionVal);
    CHECK_FOR_ERROR
  ;}
    break;

-  case 205:
-#line 2236 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 206:
+#line 2262 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    setValueName((yyvsp[0].TermInstVal), (yyvsp[-1].StrVal));
    CHECK_FOR_ERROR
    InsertValue((yyvsp[0].TermInstVal));

@@ -4555,21 +4575,21 @@ yyreduce:
    (yyval.BasicBlockVal) = (yyvsp[-2].BasicBlockVal);
    CHECK_FOR_ERROR
  ;}
    break;

-  case 206:
-#line 2247 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 207:
+#line 2273 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    (yyvsp[-1].BasicBlockVal)->getInstList().push_back((yyvsp[0].InstVal));
    (yyval.BasicBlockVal) = (yyvsp[-1].BasicBlockVal);
    CHECK_FOR_ERROR
  ;}
    break;

-  case 207:
-#line 2252 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 208:
+#line 2278 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    (yyval.BasicBlockVal) = CurBB = getBBVal(ValID::create((int)CurFun.NextBBNum++), true);
    CHECK_FOR_ERROR

    // Make sure to move the basic block to the correct location in the
@@ -4580,12 +4600,12 @@ yyreduce:
    BBL.splice(BBL.end(), BBL, (yyval.BasicBlockVal));
    CHECK_FOR_ERROR
  ;}
    break;

-  case 208:
-#line 2264 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 209:
+#line 2290 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    (yyval.BasicBlockVal) = CurBB = getBBVal(ValID::create((yyvsp[0].StrVal)), true);
    CHECK_FOR_ERROR

    // Make sure to move the basic block to the correct location in the
@@ -4596,37 +4616,37 @@ yyreduce:
    BBL.splice(BBL.end(), BBL, (yyval.BasicBlockVal));
    CHECK_FOR_ERROR
  ;}
    break;

-  case 209:
-#line 2277 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 210:
+#line 2303 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {              // Return with a result...
    (yyval.TermInstVal) = new ReturnInst((yyvsp[0].ValueVal));
    CHECK_FOR_ERROR
  ;}
    break;

-  case 210:
-#line 2281 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 211:
+#line 2307 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {                                       // Return with no result...
    (yyval.TermInstVal) = new ReturnInst();
    CHECK_FOR_ERROR
  ;}
    break;

-  case 211:
-#line 2285 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 212:
+#line 2311 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {                         // Unconditional Branch...
    BasicBlock* tmpBB = getBBVal((yyvsp[0].ValIDVal));
    CHECK_FOR_ERROR
    (yyval.TermInstVal) = new BranchInst(tmpBB);
  ;}
    break;

-  case 212:
-#line 2290 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 213:
+#line 2316 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    BasicBlock* tmpBBA = getBBVal((yyvsp[-3].ValIDVal));
    CHECK_FOR_ERROR
    BasicBlock* tmpBBB = getBBVal((yyvsp[0].ValIDVal));
    CHECK_FOR_ERROR
@@ -4634,12 +4654,12 @@ yyreduce:
    CHECK_FOR_ERROR
    (yyval.TermInstVal) = new BranchInst(tmpBBA, tmpBBB, tmpVal);
  ;}
    break;

-  case 213:
-#line 2299 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 214:
+#line 2325 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    Value* tmpVal = getVal((yyvsp[-7].PrimType), (yyvsp[-6].ValIDVal));
    CHECK_FOR_ERROR
    BasicBlock* tmpBB = getBBVal((yyvsp[-3].ValIDVal));
    CHECK_FOR_ERROR
@@ -4657,12 +4677,12 @@ yyreduce:
    delete (yyvsp[-1].JumpTable);
    CHECK_FOR_ERROR
  ;}
    break;

-  case 214:
-#line 2318 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 215:
+#line 2344 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    Value* tmpVal = getVal((yyvsp[-6].PrimType), (yyvsp[-5].ValIDVal));
    CHECK_FOR_ERROR
    BasicBlock* tmpBB = getBBVal((yyvsp[-2].ValIDVal));
    CHECK_FOR_ERROR
@@ -4670,12 +4690,12 @@ yyreduce:
    (yyval.TermInstVal) = S;
    CHECK_FOR_ERROR
  ;}
    break;

-  case 215:
-#line 2328 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 216:
+#line 2354 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    const PointerType *PFTy;
    const FunctionType *Ty;

    if (!(PFTy = dyn_cast<PointerType>((yyvsp[-10].TypeVal)->get())) ||
@@ -4729,28 +4749,28 @@ yyreduce:
    delete (yyvsp[-7].ValueList);
    CHECK_FOR_ERROR
  ;}
    break;

-  case 216:
-#line 2383 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 217:
+#line 2409 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    (yyval.TermInstVal) = new UnwindInst();
    CHECK_FOR_ERROR
  ;}
    break;

-  case 217:
-#line 2387 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 218:
+#line 2413 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    (yyval.TermInstVal) = new UnreachableInst();
    CHECK_FOR_ERROR
  ;}
    break;

-  case 218:
-#line 2394 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 219:
+#line 2420 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    (yyval.JumpTable) = (yyvsp[-5].JumpTable);
    Constant *V = cast<Constant>(getValNonImprovising((yyvsp[-4].PrimType), (yyvsp[-3].ValIDVal)));
    CHECK_FOR_ERROR
    if (V == 0)
@@ -4760,12 +4780,12 @@ yyreduce:
    CHECK_FOR_ERROR
    (yyval.JumpTable)->push_back(std::make_pair(V, tmpBB));
  ;}
    break;

-  case 219:
-#line 2405 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 220:
+#line 2431 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/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)));
    CHECK_FOR_ERROR

@@ -4776,24 +4796,24 @@ yyreduce:
    CHECK_FOR_ERROR
    (yyval.JumpTable)->push_back(std::make_pair(V, tmpBB));
  ;}
    break;

-  case 220:
-#line 2418 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 221:
+#line 2444 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
  // Is this definition named?? if so, assign the name...
  setValueName((yyvsp[0].InstVal), (yyvsp[-1].StrVal));
  CHECK_FOR_ERROR
  InsertValue((yyvsp[0].InstVal));
  (yyval.InstVal) = (yyvsp[0].InstVal);
  CHECK_FOR_ERROR
 ;}
    break;

-  case 221:
-#line 2427 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 222:
+#line 2453 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {    // Used for PHI nodes
    (yyval.PHIList) = new std::list<std::pair<Value*, BasicBlock*> >();
    Value* tmpVal = getVal(*(yyvsp[-5].TypeVal), (yyvsp[-3].ValIDVal));
    CHECK_FOR_ERROR
    BasicBlock* tmpBB = getBBVal((yyvsp[-1].ValIDVal));
@@ -4801,62 +4821,62 @@ yyreduce:
    (yyval.PHIList)->push_back(std::make_pair(tmpVal, tmpBB));
    delete (yyvsp[-5].TypeVal);
  ;}
    break;

-  case 222:
-#line 2436 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 223:
+#line 2462 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    (yyval.PHIList) = (yyvsp[-6].PHIList);
    Value* tmpVal = getVal((yyvsp[-6].PHIList)->front().first->getType(), (yyvsp[-3].ValIDVal));
    CHECK_FOR_ERROR
    BasicBlock* tmpBB = getBBVal((yyvsp[-1].ValIDVal));
    CHECK_FOR_ERROR
    (yyvsp[-6].PHIList)->push_back(std::make_pair(tmpVal, tmpBB));
  ;}
    break;

-  case 223:
-#line 2446 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 224:
+#line 2472 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/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 224:
-#line 2450 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 225:
+#line 2476 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    (yyval.ValueList) = (yyvsp[-2].ValueList);
    (yyvsp[-2].ValueList)->push_back((yyvsp[0].ValueVal));
    CHECK_FOR_ERROR
  ;}
    break;

-  case 226:
-#line 2457 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 227:
+#line 2483 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    { (yyval.ValueList) = 0; ;}
    break;

-  case 227:
-#line 2459 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 228:
+#line 2485 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    (yyval.BoolVal) = true;
    CHECK_FOR_ERROR
  ;}
    break;

-  case 228:
-#line 2463 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 229:
+#line 2489 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    (yyval.BoolVal) = false;
    CHECK_FOR_ERROR
  ;}
    break;

-  case 229:
-#line 2468 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 230:
+#line 2494 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    if (!(*(yyvsp[-3].TypeVal))->isInteger() && !(*(yyvsp[-3].TypeVal))->isFloatingPoint() &&
        !isa<PackedType>((*(yyvsp[-3].TypeVal)).get()))
      GEN_ERROR(
        "Arithmetic operator requires integer, FP, or packed operands!");
@@ -4877,12 +4897,12 @@ yyreduce:
      GEN_ERROR("binary operator returned null!");
    delete (yyvsp[-3].TypeVal);
  ;}
    break;

-  case 230:
-#line 2490 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 231:
+#line 2516 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    if (!(*(yyvsp[-3].TypeVal))->isIntegral()) {
      if (!isa<PackedType>((yyvsp[-3].TypeVal)->get()) ||
          !cast<PackedType>((yyvsp[-3].TypeVal)->get())->getElementType()->isIntegral())
        GEN_ERROR("Logical operator requires integral operands!");
@@ -4896,12 +4916,12 @@ yyreduce:
      GEN_ERROR("binary operator returned null!");
    delete (yyvsp[-3].TypeVal);
  ;}
    break;

-  case 231:
-#line 2505 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 232:
+#line 2531 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    if(isa<PackedType>((*(yyvsp[-3].TypeVal)).get())) {
      GEN_ERROR(
        "PackedTypes currently not supported in setcc instructions!");
    }
@@ -4914,12 +4934,12 @@ yyreduce:
      GEN_ERROR("binary operator returned null!");
    delete (yyvsp[-3].TypeVal);
  ;}
    break;

-  case 232:
-#line 2519 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 233:
+#line 2545 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    std::cerr << "WARNING: Use of eliminated 'not' instruction:"
              << " Replacing with 'xor'.\n";

    Value *Ones = ConstantIntegral::getAllOnesValue((yyvsp[0].ValueVal)->getType());
@@ -4931,58 +4951,61 @@ yyreduce:
      GEN_ERROR("Could not create a xor instruction!");
    CHECK_FOR_ERROR
  ;}
    break;

-  case 233:
-#line 2532 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 234:
+#line 2558 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    if ((yyvsp[0].ValueVal)->getType() != Type::UByteTy)
      GEN_ERROR("Shift amount must be ubyte!");
    if (!(yyvsp[-2].ValueVal)->getType()->isInteger())
      GEN_ERROR("Shift constant expression requires integer operand!");
+    // Handle opcode upgrade situations
+    sanitizeOpCode((yyvsp[-3].OtherOpVal), (yyvsp[-2].ValueVal)->getType());
+    CHECK_FOR_ERROR;
    (yyval.InstVal) = new ShiftInst((yyvsp[-3].OtherOpVal).opcode, (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
    CHECK_FOR_ERROR
  ;}
    break;

-  case 234:
-#line 2540 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 235:
+#line 2569 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    if (!(yyvsp[0].TypeVal)->get()->isFirstClassType())
      GEN_ERROR("cast instruction to a non-primitive type: '" +
                     (yyvsp[0].TypeVal)->get()->getDescription() + "'!");
    (yyval.InstVal) = new CastInst((yyvsp[-2].ValueVal), *(yyvsp[0].TypeVal));
    delete (yyvsp[0].TypeVal);
    CHECK_FOR_ERROR
  ;}
    break;

-  case 235:
-#line 2548 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 236:
+#line 2577 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    if ((yyvsp[-4].ValueVal)->getType() != Type::BoolTy)
      GEN_ERROR("select condition must be boolean!");
    if ((yyvsp[-2].ValueVal)->getType() != (yyvsp[0].ValueVal)->getType())
      GEN_ERROR("select value types should match!");
    (yyval.InstVal) = new SelectInst((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
    CHECK_FOR_ERROR
  ;}
    break;

-  case 236:
-#line 2556 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 237:
+#line 2585 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    NewVarArgs = true;
    (yyval.InstVal) = new VAArgInst((yyvsp[-2].ValueVal), *(yyvsp[0].TypeVal));
    delete (yyvsp[0].TypeVal);
    CHECK_FOR_ERROR
  ;}
    break;

-  case 237:
-#line 2562 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 238:
+#line 2591 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    ObsoleteVarArgs = true;
    const Type* ArgTy = (yyvsp[-2].ValueVal)->getType();
    Function* NF = CurModule.CurrentModule->
      getOrInsertFunction("llvm.va_copy", ArgTy, ArgTy, (Type *)0);
@@ -5001,12 +5024,12 @@ yyreduce:
    delete (yyvsp[0].TypeVal);
    CHECK_FOR_ERROR
  ;}
    break;

-  case 238:
-#line 2582 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 239:
+#line 2611 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    ObsoleteVarArgs = true;
    const Type* ArgTy = (yyvsp[-2].ValueVal)->getType();
    Function* NF = CurModule.CurrentModule->
      getOrInsertFunction("llvm.va_copy", ArgTy, ArgTy, (Type *)0);
@@ -5028,42 +5051,42 @@ yyreduce:
    delete (yyvsp[0].TypeVal);
    CHECK_FOR_ERROR
  ;}
    break;

-  case 239:
-#line 2605 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 240:
+#line 2634 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    if (!ExtractElementInst::isValidOperands((yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
      GEN_ERROR("Invalid extractelement operands!");
    (yyval.InstVal) = new ExtractElementInst((yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
    CHECK_FOR_ERROR
  ;}
    break;

-  case 240:
-#line 2611 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 241:
+#line 2640 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    if (!InsertElementInst::isValidOperands((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
      GEN_ERROR("Invalid insertelement operands!");
    (yyval.InstVal) = new InsertElementInst((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
    CHECK_FOR_ERROR
  ;}
    break;

-  case 241:
-#line 2617 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 242:
+#line 2646 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    if (!ShuffleVectorInst::isValidOperands((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal)))
      GEN_ERROR("Invalid shufflevector operands!");
    (yyval.InstVal) = new ShuffleVectorInst((yyvsp[-4].ValueVal), (yyvsp[-2].ValueVal), (yyvsp[0].ValueVal));
    CHECK_FOR_ERROR
  ;}
    break;

-  case 242:
-#line 2623 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 243:
+#line 2652 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    const Type *Ty = (yyvsp[0].PHIList)->front().first->getType();
    if (!Ty->isFirstClassType())
      GEN_ERROR("PHI node operands must be of first class type!");
    (yyval.InstVal) = new PHINode(Ty);
@@ -5077,12 +5100,12 @@ yyreduce:
    delete (yyvsp[0].PHIList);  // Free the list...
    CHECK_FOR_ERROR
  ;}
    break;

-  case 243:
-#line 2638 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 244:
+#line 2667 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    const PointerType *PFTy;
    const FunctionType *Ty;

    if (!(PFTy = dyn_cast<PointerType>((yyvsp[-4].TypeVal)->get())) ||
@@ -5140,101 +5163,101 @@ yyreduce:
    delete (yyvsp[-1].ValueList);
    CHECK_FOR_ERROR
  ;}
    break;

-  case 244:
-#line 2697 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 245:
+#line 2726 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    (yyval.InstVal) = (yyvsp[0].InstVal);
    CHECK_FOR_ERROR
  ;}
    break;

-  case 245:
-#line 2704 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 246:
+#line 2733 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    (yyval.ValueList) = (yyvsp[0].ValueList);
    CHECK_FOR_ERROR
  ;}
    break;

-  case 246:
-#line 2707 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 247:
+#line 2736 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    (yyval.ValueList) = new std::vector<Value*>();
    CHECK_FOR_ERROR
  ;}
    break;

-  case 247:
-#line 2712 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 248:
+#line 2741 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    (yyval.BoolVal) = true;
    CHECK_FOR_ERROR
  ;}
    break;

-  case 248:
-#line 2716 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 249:
+#line 2745 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    (yyval.BoolVal) = false;
    CHECK_FOR_ERROR
  ;}
    break;

-  case 249:
-#line 2723 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 250:
+#line 2752 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    (yyval.InstVal) = new MallocInst(*(yyvsp[-1].TypeVal), 0, (yyvsp[0].UIntVal));
    delete (yyvsp[-1].TypeVal);
    CHECK_FOR_ERROR
  ;}
    break;

-  case 250:
-#line 2728 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 251:
+#line 2757 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    Value* tmpVal = getVal((yyvsp[-2].PrimType), (yyvsp[-1].ValIDVal));
    CHECK_FOR_ERROR
    (yyval.InstVal) = new MallocInst(*(yyvsp[-4].TypeVal), tmpVal, (yyvsp[0].UIntVal));
    delete (yyvsp[-4].TypeVal);
  ;}
    break;

-  case 251:
-#line 2734 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 252:
+#line 2763 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    (yyval.InstVal) = new AllocaInst(*(yyvsp[-1].TypeVal), 0, (yyvsp[0].UIntVal));
    delete (yyvsp[-1].TypeVal);
    CHECK_FOR_ERROR
  ;}
    break;

-  case 252:
-#line 2739 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 253:
+#line 2768 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    Value* tmpVal = getVal((yyvsp[-2].PrimType), (yyvsp[-1].ValIDVal));
    CHECK_FOR_ERROR
    (yyval.InstVal) = new AllocaInst(*(yyvsp[-4].TypeVal), tmpVal, (yyvsp[0].UIntVal));
    delete (yyvsp[-4].TypeVal);
  ;}
    break;

-  case 253:
-#line 2745 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 254:
+#line 2774 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    if (!isa<PointerType>((yyvsp[0].ValueVal)->getType()))
      GEN_ERROR("Trying to free nonpointer type " +
                     (yyvsp[0].ValueVal)->getType()->getDescription() + "!");
    (yyval.InstVal) = new FreeInst((yyvsp[0].ValueVal));
    CHECK_FOR_ERROR
  ;}
    break;

-  case 254:
-#line 2753 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 255:
+#line 2782 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    if (!isa<PointerType>((yyvsp[-1].TypeVal)->get()))
      GEN_ERROR("Can't load from nonpointer type: " +
                     (*(yyvsp[-1].TypeVal))->getDescription());
    if (!cast<PointerType>((yyvsp[-1].TypeVal)->get())->getElementType()->isFirstClassType())
@@ -5245,12 +5268,12 @@ yyreduce:
    (yyval.InstVal) = new LoadInst(tmpVal, "", (yyvsp[-3].BoolVal));
    delete (yyvsp[-1].TypeVal);
  ;}
    break;

-  case 255:
-#line 2765 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 256:
+#line 2794 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    const PointerType *PT = dyn_cast<PointerType>((yyvsp[-1].TypeVal)->get());
    if (!PT)
      GEN_ERROR("Can't store to a nonpointer type: " +
                     (*(yyvsp[-1].TypeVal))->getDescription());
@@ -5264,12 +5287,12 @@ yyreduce:
    (yyval.InstVal) = new StoreInst((yyvsp[-3].ValueVal), tmpVal, (yyvsp[-5].BoolVal));
    delete (yyvsp[-1].TypeVal);
  ;}
    break;

-  case 256:
-#line 2780 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+  case 257:
+#line 2809 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
    {
    if (!isa<PointerType>((yyvsp[-2].TypeVal)->get()))
      GEN_ERROR("getelementptr insn requires pointer operand!");

    // LLVM 1.2 and earlier used ubyte struct indices.  Convert any ubyte struct
@@ -5297,11 +5320,11 @@ yyreduce:

      default: break;
    }

 /* Line 1126 of yacc.c.  */
-#line 5303 "llvmAsmParser.tab.c"
+#line 5326 "llvmAsmParser.tab.c"

  yyvsp -= yylen;
  yyssp -= yylen;


@@ -5565,11 +5588,11 @@ yyreturn:
 #endif
  return yyresult;
 }


-#line 2806 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+#line 2835 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"


 void llvm::GenerateError(const std::string &message, int LineNo) {
  if (LineNo == -1) LineNo = llvmAsmlineno;
  // TODO: column number in exception
Index: lib/AsmParser/llvmAsmParser.h.cvs
===================================================================
RCS file: /var/cvs/llvm/llvm/lib/AsmParser/llvmAsmParser.h.cvs,v
retrieving revision 1.18
diff -t -d -u -p -5 -r1.18 llvmAsmParser.h.cvs
--- lib/AsmParser/llvmAsmParser.h.cvs   2 Nov 2006 20:25:49 -0000       1.18
+++ lib/AsmParser/llvmAsmParser.h.cvs   4 Nov 2006 00:19:12 -0000
@@ -130,17 +130,18 @@
     GETELEMENTPTR = 356,
     PHI_TOK = 357,
     CAST = 358,
     SELECT = 359,
     SHL = 360,
-     SHR = 361,
-     VAARG = 362,
-     EXTRACTELEMENT = 363,
-     INSERTELEMENT = 364,
-     SHUFFLEVECTOR = 365,
-     VAARG_old = 366,
-     VANEXT_old = 367
+     LSHR = 361,
+     ASHR = 362,
+     VAARG = 363,
+     EXTRACTELEMENT = 364,
+     INSERTELEMENT = 365,
+     SHUFFLEVECTOR = 366,
+     VAARG_old = 367,
+     VANEXT_old = 368
   };
 #endif
 /* Tokens.  */
 #define ESINT64VAL 258
 #define EUINT64VAL 259
@@ -243,23 +244,24 @@
 #define GETELEMENTPTR 356
 #define PHI_TOK 357
 #define CAST 358
 #define SELECT 359
 #define SHL 360
-#define SHR 361
-#define VAARG 362
-#define EXTRACTELEMENT 363
-#define INSERTELEMENT 364
-#define SHUFFLEVECTOR 365
-#define VAARG_old 366
-#define VANEXT_old 367
+#define LSHR 361
+#define ASHR 362
+#define VAARG 363
+#define EXTRACTELEMENT 364
+#define INSERTELEMENT 365
+#define SHUFFLEVECTOR 366
+#define VAARG_old 367
+#define VANEXT_old 368




 #if ! defined (YYSTYPE) && ! defined (YYSTYPE_IS_DECLARED)
-#line 1016 "/proj/llvm/llvm-4/lib/AsmParser/llvmAsmParser.y"
+#line 1039 "/developer/zsth/llvm-gcc-dev/HEAD/llvm/llvm/lib/AsmParser/llvmAsmParser.y"
 typedef union YYSTYPE {
  llvm::Module                           *ModuleVal;
  llvm::Function                         *FunctionVal;
  std::pair<llvm::PATypeHolder*, char*>  *ArgVal;
  llvm::BasicBlock                       *BasicBlockVal;
@@ -296,11 +298,11 @@ typedef union YYSTYPE {
  MemOpInfo                         MemOpVal;
  OtherOpInfo                       OtherOpVal;
  llvm::Module::Endianness          Endianness;
 } YYSTYPE;
 /* Line 1447 of yacc.c.  */
-#line 302 "llvmAsmParser.tab.h"
+#line 304 "llvmAsmParser.tab.h"
 # define yystype YYSTYPE /* obsolescent; will be withdrawn */
 # define YYSTYPE_IS_DECLARED 1
 # define YYSTYPE_IS_TRIVIAL 1
 #endif

Index: lib/AsmParser/llvmAsmParser.y
===================================================================
RCS file: /var/cvs/llvm/llvm/lib/AsmParser/llvmAsmParser.y,v
retrieving revision 1.272
diff -t -d -u -p -5 -r1.272 llvmAsmParser.y
--- lib/AsmParser/llvmAsmParser.y       2 Nov 2006 01:53:58 -0000       1.272
+++ lib/AsmParser/llvmAsmParser.y       4 Nov 2006 00:19:13 -0000
@@ -853,11 +853,34 @@ sanitizeOpCode(OpcodeInfo<Instruction::B
      break;
  }
  // Its not obsolete any more, we fixed it.
  OI.obsolete = false;
 }
-
+/// This function is is similar to the previous overload ov sanitizeOpCode but
+/// operates on Instruction::OtherOps instead of Instruction::BinaryOps.
+/// @brief Convert obsolete opcodes to new values
+static void
+sanitizeOpCode(OpcodeInfo<Instruction::OtherOps> &OI, const PATypeHolder& PATy)
+{
+  // If its not obsolete, don't do anything
+  if (!OI.obsolete)
+    return;
+
+  const Type* Ty = PATy; // type conversion
+  switch (OI.opcode) {
+  default:
+    GenerateError("Invalid obsolete opcode (check Lexer.l)");
+    break;
+  case Instruction::LShr:
+    if (Ty->isSigned())
+      OI.opcode = Instruction::AShr;
+    break;
+  }
+  // Its not obsolete any more, we fixed it.
+  OI.obsolete = false;
+}
+
 // common code from the two 'RunVMAsmParser' functions
 static Module* RunParser(Module * M) {

  llvmAsmlineno = 1;      // Reset the current line number...
  ObsoleteVarArgs = false;
@@ -1124,11 +1147,11 @@ Module *llvm::RunVMAsmParser(const char
 // Memory Instructions
 %token <MemOpVal> MALLOC ALLOCA FREE LOAD STORE GETELEMENTPTR

 // Other Operators
 %type  <OtherOpVal> ShiftOps
-%token <OtherOpVal> PHI_TOK CAST SELECT SHL SHR VAARG
+%token <OtherOpVal> PHI_TOK CAST SELECT SHL LSHR ASHR VAARG
 %token <OtherOpVal> EXTRACTELEMENT INSERTELEMENT SHUFFLEVECTOR
 %token VAARG_old VANEXT_old //OBSOLETE


 %start Module
@@ -1158,11 +1181,11 @@ EINT64VAL : EUINT64VAL {
 //
 ArithmeticOps: ADD | SUB | MUL | UDIV | SDIV | FDIV | UREM | SREM | FREM;
 LogicalOps   : AND | OR | XOR;
 SetCondOps   : SETLE | SETGE | SETLT | SETGT | SETEQ | SETNE;

-ShiftOps  : SHL | SHR;
+ShiftOps  : SHL | LSHR | ASHR;

 // These are some types that allow classification if we only want a particular
 // thing... for example, only a signed, unsigned, or integral type.
 SIntType :  LONG |  INT |  SHORT | SBYTE;
 UIntType : ULONG | UINT | USHORT | UBYTE;
@@ -1728,10 +1751,13 @@ ConstExpr: CAST '(' ConstVal TO Types ')
  | ShiftOps '(' ConstVal ',' ConstVal ')' {
    if ($5->getType() != Type::UByteTy)
      GEN_ERROR("Shift count for shift constant must be unsigned byte!");
    if (!$3->getType()->isInteger())
      GEN_ERROR("Shift constant expression requires integer operand!");
+    // Handle opcode upgrade situations
+    sanitizeOpCode($1, $3->getType());
+    CHECK_FOR_ERROR;
    $$ = ConstantExpr::get($1.opcode, $3, $5);
    CHECK_FOR_ERROR
  }
  | EXTRACTELEMENT '(' ConstVal ',' ConstVal ')' {
    if (!ExtractElementInst::isValidOperands($3, $5))
@@ -2532,10 +2558,13 @@ InstVal : ArithmeticOps Types ValueRef '
  | ShiftOps ResolvedVal ',' ResolvedVal {
    if ($4->getType() != Type::UByteTy)
      GEN_ERROR("Shift amount must be ubyte!");
    if (!$2->getType()->isInteger())
      GEN_ERROR("Shift constant expression requires integer operand!");
+    // Handle opcode upgrade situations
+    sanitizeOpCode($1, $2->getType());
+    CHECK_FOR_ERROR;
    $$ = new ShiftInst($1.opcode, $2, $4);
    CHECK_FOR_ERROR
  }
  | CAST ResolvedVal TO Types {
    if (!$4->get()->isFirstClassType())
Index: lib/AsmParser/llvmAsmParser.y.cvs
===================================================================
RCS file: /var/cvs/llvm/llvm/lib/AsmParser/llvmAsmParser.y.cvs,v
retrieving revision 1.24
diff -t -d -u -p -5 -r1.24 llvmAsmParser.y.cvs
--- lib/AsmParser/llvmAsmParser.y.cvs   2 Nov 2006 20:25:49 -0000       1.24
+++ lib/AsmParser/llvmAsmParser.y.cvs   4 Nov 2006 00:19:15 -0000
@@ -853,11 +853,34 @@ sanitizeOpCode(OpcodeInfo<Instruction::B
      break;
  }
  // Its not obsolete any more, we fixed it.
  OI.obsolete = false;
 }
-
+/// This function is is similar to the previous overload ov sanitizeOpCode but
+/// operates on Instruction::OtherOps instead of Instruction::BinaryOps.
+/// @brief Convert obsolete opcodes to new values
+static void
+sanitizeOpCode(OpcodeInfo<Instruction::OtherOps> &OI, const PATypeHolder& PATy)
+{
+  // If its not obsolete, don't do anything
+  if (!OI.obsolete)
+    return;
+
+  const Type* Ty = PATy; // type conversion
+  switch (OI.opcode) {
+  default:
+    GenerateError("Invalid obsolete opcode (check Lexer.l)");
+    break;
+  case Instruction::LShr:
+    if (Ty->isSigned())
+      OI.opcode = Instruction::AShr;
+    break;
+  }
+  // Its not obsolete any more, we fixed it.
+  OI.obsolete = false;
+}
+
 // common code from the two 'RunVMAsmParser' functions
 static Module* RunParser(Module * M) {

  llvmAsmlineno = 1;      // Reset the current line number...
  ObsoleteVarArgs = false;
@@ -1124,11 +1147,11 @@ Module *llvm::RunVMAsmParser(const char
 // Memory Instructions
 %token <MemOpVal> MALLOC ALLOCA FREE LOAD STORE GETELEMENTPTR

 // Other Operators
 %type  <OtherOpVal> ShiftOps
-%token <OtherOpVal> PHI_TOK CAST SELECT SHL SHR VAARG
+%token <OtherOpVal> PHI_TOK CAST SELECT SHL LSHR ASHR VAARG
 %token <OtherOpVal> EXTRACTELEMENT INSERTELEMENT SHUFFLEVECTOR
 %token VAARG_old VANEXT_old //OBSOLETE


 %start Module
@@ -1158,11 +1181,11 @@ EINT64VAL : EUINT64VAL {
 //
 ArithmeticOps: ADD | SUB | MUL | UDIV | SDIV | FDIV | UREM | SREM | FREM;
 LogicalOps   : AND | OR | XOR;
 SetCondOps   : SETLE | SETGE | SETLT | SETGT | SETEQ | SETNE;

-ShiftOps  : SHL | SHR;
+ShiftOps  : SHL | LSHR | ASHR;

 // These are some types that allow classification if we only want a particular
 // thing... for example, only a signed, unsigned, or integral type.
 SIntType :  LONG |  INT |  SHORT | SBYTE;
 UIntType : ULONG | UINT | USHORT | UBYTE;
@@ -1728,10 +1751,13 @@ ConstExpr: CAST '(' ConstVal TO Types ')
  | ShiftOps '(' ConstVal ',' ConstVal ')' {
    if ($5->getType() != Type::UByteTy)
      GEN_ERROR("Shift count for shift constant must be unsigned byte!");
    if (!$3->getType()->isInteger())
      GEN_ERROR("Shift constant expression requires integer operand!");
+    // Handle opcode upgrade situations
+    sanitizeOpCode($1, $3->getType());
+    CHECK_FOR_ERROR;
    $$ = ConstantExpr::get($1.opcode, $3, $5);
    CHECK_FOR_ERROR
  }
  | EXTRACTELEMENT '(' ConstVal ',' ConstVal ')' {
    if (!ExtractElementInst::isValidOperands($3, $5))
@@ -2532,10 +2558,13 @@ InstVal : ArithmeticOps Types ValueRef '
  | ShiftOps ResolvedVal ',' ResolvedVal {
    if ($4->getType() != Type::UByteTy)
      GEN_ERROR("Shift amount must be ubyte!");
    if (!$2->getType()->isInteger())
      GEN_ERROR("Shift constant expression requires integer operand!");
+    // Handle opcode upgrade situations
+    sanitizeOpCode($1, $2->getType());
+    CHECK_FOR_ERROR;
    $$ = new ShiftInst($1.opcode, $2, $4);
    CHECK_FOR_ERROR
  }
  | CAST ResolvedVal TO Types {
    if (!$4->get()->isFirstClassType())
Index: lib/Bytecode/Reader/Reader.cpp
===================================================================
RCS file: /var/cvs/llvm/llvm/lib/Bytecode/Reader/Reader.cpp,v
retrieving revision 1.202
diff -t -d -u -p -5 -r1.202 Reader.cpp
--- lib/Bytecode/Reader/Reader.cpp      2 Nov 2006 20:25:49 -0000       1.202
+++ lib/Bytecode/Reader/Reader.cpp      4 Nov 2006 00:19:17 -0000
@@ -717,11 +717,20 @@ BytecodeReader::handleObsoleteOpcodes(
      break;
    case 30: // Shl
      Opcode = Instruction::Shl;
      break;
    case 31: // Shr
-      Opcode = Instruction::Shr;
+      // The type of the instruction is based on the operands. We need to select
+      // ashr or lshr based on that type. The iType values are hardcoded to the
+      // values used in bytecode version 5 (and prior) because it is likely
+      // these codes will change in future versions of LLVM. This if statement
+      // says "if (integer type and signed)"
+      // UByteTy through LongTy type codes and makes su
+      if (iType >= 2 && iType <= 9 && iType % 2 != 0)
+        Opcode = Instruction::AShr;
+      else
+        Opcode = Instruction::LShr;
      break;
    case 32: { //VANext_old ( <= llvm 1.5 )
      const Type* ArgTy = getValue(iType, Oprnds[0])->getType();
      Function* NF = TheModule->getOrInsertFunction(
        "llvm.va_copy", ArgTy, ArgTy, (Type *)0);
@@ -985,11 +994,12 @@ void BytecodeReader::ParseInstruction(st
      Result = PN;
      break;
    }

    case Instruction::Shl:
-    case Instruction::Shr:
+    case Instruction::LShr:
+    case Instruction::AShr:
      Result = new ShiftInst(Instruction::OtherOps(Opcode),
                             getValue(iType, Oprnds[0]),
                             getValue(Type::UByteTyID, Oprnds[1]));
      break;
    case Instruction::Ret:
@@ -1705,11 +1715,14 @@ inline unsigned fixCEOpcodes(
      break;
    case 30: // Shl
      Opcode = Instruction::Shl;
      break;
    case 31: // Shr
-      Opcode = Instruction::Shr;
+      if (ArgVec[0]->getType()->isSigned())
+        Opcode = Instruction::AShr;
+      else
+        Opcode = Instruction::LShr;
      break;
    case 34: // Select
      Opcode = Instruction::Select;
      break;
    case 38: // ExtractElement
Index: lib/CodeGen/IntrinsicLowering.cpp
===================================================================
RCS file: /var/cvs/llvm/llvm/lib/CodeGen/IntrinsicLowering.cpp,v
retrieving revision 1.44
diff -t -d -u -p -5 -r1.44 IntrinsicLowering.cpp
--- lib/CodeGen/IntrinsicLowering.cpp   20 Oct 2006 07:07:24 -0000      1.44
+++ lib/CodeGen/IntrinsicLowering.cpp   4 Nov 2006 00:19:18 -0000
@@ -136,36 +136,30 @@ void DefaultIntrinsicLowering::AddProtot
 /// LowerBSWAP - Emit the code to lower bswap of V before the specified
 /// instruction IP.
 static Value *LowerBSWAP(Value *V, Instruction *IP) {
  assert(V->getType()->isInteger() && "Can't bswap a non-integer type!");

-  const Type *DestTy = V->getType();
-
-  // Force to unsigned so that the shift rights are logical.
-  if (DestTy->isSigned())
-    V = new CastInst(V, DestTy->getUnsignedVersion(), V->getName(), IP);
-
  unsigned BitSize = V->getType()->getPrimitiveSizeInBits();

  switch(BitSize) {
  default: assert(0 && "Unhandled type size of value to byteswap!");
  case 16: {
    Value *Tmp1 = new ShiftInst(Instruction::Shl, V,
                                ConstantInt::get(Type::UByteTy,8),"bswap.2",IP);
-    Value *Tmp2 = new ShiftInst(Instruction::Shr, V,
+    Value *Tmp2 = new ShiftInst(Instruction::LShr, V,
                                ConstantInt::get(Type::UByteTy,8),"bswap.1",IP);
    V = BinaryOperator::createOr(Tmp1, Tmp2, "bswap.i16", IP);
    break;
  }
  case 32: {
    Value *Tmp4 = new ShiftInst(Instruction::Shl, V,
                              ConstantInt::get(Type::UByteTy,24),"bswap.4", IP);
    Value *Tmp3 = new ShiftInst(Instruction::Shl, V,
-                                ConstantInt::get(Type::UByteTy,8),"bswap.3",IP);
-    Value *Tmp2 = new ShiftInst(Instruction::Shr, V,
-                                ConstantInt::get(Type::UByteTy,8),"bswap.2",IP);
-    Value *Tmp1 = new ShiftInst(Instruction::Shr, V,
+                              ConstantInt::get(Type::UByteTy,8),"bswap.3",IP);
+    Value *Tmp2 = new ShiftInst(Instruction::LShr, V,
+                              ConstantInt::get(Type::UByteTy,8),"bswap.2",IP);
+    Value *Tmp1 = new ShiftInst(Instruction::LShr, V,
                              ConstantInt::get(Type::UByteTy,24),"bswap.1", IP);
    Tmp3 = BinaryOperator::createAnd(Tmp3,
                                     ConstantInt::get(Type::UIntTy, 0xFF0000),
                                     "bswap.and3", IP);
    Tmp2 = BinaryOperator::createAnd(Tmp2,
@@ -182,18 +176,18 @@ static Value *LowerBSWAP(Value *V, Instr
    Value *Tmp7 = new ShiftInst(Instruction::Shl, V,
                              ConstantInt::get(Type::UByteTy,40),"bswap.7", IP);
    Value *Tmp6 = new ShiftInst(Instruction::Shl, V,
                              ConstantInt::get(Type::UByteTy,24),"bswap.6", IP);
    Value *Tmp5 = new ShiftInst(Instruction::Shl, V,
-                                ConstantInt::get(Type::UByteTy,8),"bswap.5",IP);
-    Value *Tmp4 = new ShiftInst(Instruction::Shr, V,
-                                ConstantInt::get(Type::UByteTy,8),"bswap.4",IP);
-    Value *Tmp3 = new ShiftInst(Instruction::Shr, V,
+                              ConstantInt::get(Type::UByteTy,8),"bswap.5", IP);
+    Value* Tmp4 = new ShiftInst(Instruction::LShr, V,
+                              ConstantInt::get(Type::UByteTy,8),"bswap.4", IP);
+    Value* Tmp3 = new ShiftInst(Instruction::LShr, V,
                              ConstantInt::get(Type::UByteTy,24),"bswap.3", IP);
-    Value *Tmp2 = new ShiftInst(Instruction::Shr, V,
+    Value* Tmp2 = new ShiftInst(Instruction::LShr, V,
                              ConstantInt::get(Type::UByteTy,40),"bswap.2", IP);
-    Value *Tmp1 = new ShiftInst(Instruction::Shr, V,
+    Value* Tmp1 = new ShiftInst(Instruction::LShr, V,
                              ConstantInt::get(Type::UByteTy,56),"bswap.1", IP);
    Tmp7 = BinaryOperator::createAnd(Tmp7,
                             ConstantInt::get(Type::ULongTy,
                               0xFF000000000000ULL),
                             "bswap.and7", IP);
@@ -220,13 +214,10 @@ static Value *LowerBSWAP(Value *V, Instr
    Tmp4 = BinaryOperator::createOr(Tmp4, Tmp2, "bswap.or6", IP);
    V = BinaryOperator::createOr(Tmp8, Tmp4, "bswap.i64", IP);
    break;
  }
  }
-
-  if (V->getType() != DestTy)
-    V = new CastInst(V, DestTy, V->getName(), IP);
  return V;
 }

 /// LowerCTPOP - Emit the code to lower ctpop of V before the specified
 /// instruction IP.
@@ -237,52 +228,37 @@ static Value *LowerCTPOP(Value *V, Instr
    0x5555555555555555ULL, 0x3333333333333333ULL,
    0x0F0F0F0F0F0F0F0FULL, 0x00FF00FF00FF00FFULL,
    0x0000FFFF0000FFFFULL, 0x00000000FFFFFFFFULL
  };

-  const Type *DestTy = V->getType();
-
-  // Force to unsigned so that the shift rights are logical.
-  if (DestTy->isSigned())
-    V = new CastInst(V, DestTy->getUnsignedVersion(), V->getName(), IP);
-
  unsigned BitSize = V->getType()->getPrimitiveSizeInBits();
+
  for (unsigned i = 1, ct = 0; i != BitSize; i <<= 1, ++ct) {
    Value *MaskCst =
      ConstantExpr::getCast(ConstantInt::get(Type::ULongTy, MaskValues[ct]),
                                             V->getType());
    Value *LHS = BinaryOperator::createAnd(V, MaskCst, "cppop.and1", IP);
-    Value *VShift = new ShiftInst(Instruction::Shr, V,
+    Value *VShift = new ShiftInst(Instruction::LShr, V,
                      ConstantInt::get(Type::UByteTy, i), "ctpop.sh", IP);
    Value *RHS = BinaryOperator::createAnd(VShift, MaskCst, "cppop.and2", IP);
    V = BinaryOperator::createAdd(LHS, RHS, "ctpop.step", IP);
  }

-  if (V->getType() != DestTy)
-    V = new CastInst(V, DestTy, V->getName(), IP);
  return V;
 }

 /// LowerCTLZ - Emit the code to lower ctlz of V before the specified
 /// instruction IP.
 static Value *LowerCTLZ(Value *V, Instruction *IP) {
-  const Type *DestTy = V->getType();
-
-  // Force to unsigned so that the shift rights are logical.
-  if (DestTy->isSigned())
-    V = new CastInst(V, DestTy->getUnsignedVersion(), V->getName(), IP);

  unsigned BitSize = V->getType()->getPrimitiveSizeInBits();
  for (unsigned i = 1; i != BitSize; i <<= 1) {
    Value *ShVal = ConstantInt::get(Type::UByteTy, i);
-    ShVal = new ShiftInst(Instruction::Shr, V, ShVal, "ctlz.sh", IP);
+    ShVal = new ShiftInst(Instruction::LShr, V, ShVal, "ctlz.sh", IP);
    V = BinaryOperator::createOr(V, ShVal, "ctlz.step", IP);
  }

-  if (V->getType() != DestTy)
-    V = new CastInst(V, DestTy, V->getName(), IP);
-
  V = BinaryOperator::createNot(V, "", IP);
  return LowerCTPOP(V, IP);
 }


Index: lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp
===================================================================
RCS file: /var/cvs/llvm/llvm/lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp,v
retrieving revision 1.315
diff -t -d -u -p -5 -r1.315 SelectionDAGISel.cpp
--- lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp       2 Nov 2006 20:25:49 -0000       1.315
+++ lib/CodeGen/SelectionDAG/SelectionDAGISel.cpp       4 Nov 2006 00:19:21 -0000
@@ -536,14 +536,12 @@ public:
  void visitFDiv(User &I) { visitFPBinary (I, ISD::FDIV, ISD::VSDIV); }
  void visitAnd(User &I) { visitIntBinary(I, ISD::AND, ISD::VAND); }
  void visitOr (User &I) { visitIntBinary(I, ISD::OR,  ISD::VOR); }
  void visitXor(User &I) { visitIntBinary(I, ISD::XOR, ISD::VXOR); }
  void visitShl(User &I) { visitShift(I, ISD::SHL); }
-  void visitShr(User &I) {
-    visitShift(I, I.getType()->isUnsigned() ? ISD::SRL : ISD::SRA);
-  }
-
+  void visitLShr(User &I) { visitShift(I, ISD::SRL); }
+  void visitAShr(User &I) { visitShift(I, ISD::SRA); }
  void visitSetCC(User &I, ISD::CondCode SignedOpc, ISD::CondCode UnsignedOpc,
                  ISD::CondCode FPOpc);
  void visitSetEQ(User &I) { visitSetCC(I, ISD::SETEQ, ISD::SETEQ,
                                        ISD::SETOEQ); }
  void visitSetNE(User &I) { visitSetCC(I, ISD::SETNE, ISD::SETNE,
Index: lib/ExecutionEngine/Interpreter/Execution.cpp
===================================================================
RCS file: /var/cvs/llvm/llvm/lib/ExecutionEngine/Interpreter/Execution.cpp,v
retrieving revision 1.145
diff -t -d -u -p -5 -r1.145 Execution.cpp
--- lib/ExecutionEngine/Interpreter/Execution.cpp       2 Nov 2006 08:12:02 -0000       1.145
+++ lib/ExecutionEngine/Interpreter/Execution.cpp       4 Nov 2006 00:19:21 -0000
@@ -70,12 +70,14 @@ static GenericValue executeSetLEInst(Gen
                                   const Type *Ty);
 static GenericValue executeSetGEInst(GenericValue Src1, GenericValue Src2,
                                   const Type *Ty);
 static GenericValue executeShlInst(GenericValue Src1, GenericValue Src2,
                                   const Type *Ty);
-static GenericValue executeShrInst(GenericValue Src1, GenericValue Src2,
-                                   const Type *Ty);
+static GenericValue executeLShrInst(GenericValue Src1, GenericValue Src2,
+                                    const Type *Ty);
+static GenericValue executeAShrInst(GenericValue Src1, GenericValue Src2,
+                                    const Type *Ty);
 static GenericValue executeSelectInst(GenericValue Src1, GenericValue Src2,
                                      GenericValue Src3);

 GenericValue Interpreter::getConstantExprValue (ConstantExpr *CE,
                                                ExecutionContext &SF) {
@@ -159,14 +161,18 @@ GenericValue Interpreter::getConstantExp
                            CE->getOperand(0)->getType());
  case Instruction::Shl:
    return executeShlInst(getOperandValue(CE->getOperand(0), SF),
                          getOperandValue(CE->getOperand(1), SF),
                          CE->getOperand(0)->getType());
-  case Instruction::Shr:
-    return executeShrInst(getOperandValue(CE->getOperand(0), SF),
-                          getOperandValue(CE->getOperand(1), SF),
-                          CE->getOperand(0)->getType());
+  case Instruction::LShr:
+    return executeLShrInst(getOperandValue(CE->getOperand(0), SF),
+                           getOperandValue(CE->getOperand(1), SF),
+                           CE->getOperand(0)->getType());
+  case Instruction::AShr:
+    return executeAShrInst(getOperandValue(CE->getOperand(0), SF),
+                           getOperandValue(CE->getOperand(1), SF),
+                           CE->getOperand(0)->getType());
  case Instruction::Select:
    return executeSelectInst(getOperandValue(CE->getOperand(0), SF),
                             getOperandValue(CE->getOperand(1), SF),
                             getOperandValue(CE->getOperand(2), SF));
  default:
@@ -941,10 +947,14 @@ void Interpreter::visitCallSite(CallSite
 }

 #define IMPLEMENT_SHIFT(OP, TY) \
   case Type::TY##TyID: Dest.TY##Val = Src1.TY##Val OP Src2.UByteVal; break

+#define IMPLEMENT_SIGNLESS_SHIFT(OP, TY1, TY2) \
+   case Type::TY2##TyID: \
+   IMPLEMENT_SHIFT(OP, TY1)
+
 static GenericValue executeShlInst(GenericValue Src1, GenericValue Src2,
                                   const Type *Ty) {
  GenericValue Dest;
  switch (Ty->getTypeID()) {
    IMPLEMENT_SHIFT(<<, UByte);
@@ -959,24 +969,35 @@ static GenericValue executeShlInst(Gener
    std::cout << "Unhandled type for Shl instruction: " << *Ty << "\n";
  }
  return Dest;
 }

-static GenericValue executeShrInst(GenericValue Src1, GenericValue Src2,
-                                   const Type *Ty) {
+static GenericValue executeLShrInst(GenericValue Src1, GenericValue Src2,
+                                    const Type *Ty) {
  GenericValue Dest;
  switch (Ty->getTypeID()) {
-    IMPLEMENT_SHIFT(>>, UByte);
-    IMPLEMENT_SHIFT(>>, SByte);
-    IMPLEMENT_SHIFT(>>, UShort);
-    IMPLEMENT_SHIFT(>>, Short);
-    IMPLEMENT_SHIFT(>>, UInt);
-    IMPLEMENT_SHIFT(>>, Int);
-    IMPLEMENT_SHIFT(>>, ULong);
-    IMPLEMENT_SHIFT(>>, Long);
+    IMPLEMENT_SIGNLESS_SHIFT(>>, UByte,  SByte);
+    IMPLEMENT_SIGNLESS_SHIFT(>>, UShort, Short);
+    IMPLEMENT_SIGNLESS_SHIFT(>>, UInt,   Int);
+    IMPLEMENT_SIGNLESS_SHIFT(>>, ULong,  Long);
  default:
-    std::cout << "Unhandled type for Shr instruction: " << *Ty << "\n";
+    std::cout << "Unhandled type for LShr instruction: " << *Ty << "\n";
+    abort();
+  }
+  return Dest;
+}
+
+static GenericValue executeAShrInst(GenericValue Src1, GenericValue Src2,
+                                    const Type *Ty) {
+  GenericValue Dest;
+  switch (Ty->getTypeID()) {
+    IMPLEMENT_SIGNLESS_SHIFT(>>, SByte, UByte);
+    IMPLEMENT_SIGNLESS_SHIFT(>>, Short, UShort);
+    IMPLEMENT_SIGNLESS_SHIFT(>>, Int,   UInt);
+    IMPLEMENT_SIGNLESS_SHIFT(>>, Long,  ULong);
+  default:
+    std::cout << "Unhandled type for AShr instruction: " << *Ty << "\n";
    abort();
  }
  return Dest;
 }

@@ -988,17 +1009,27 @@ void Interpreter::visitShl(ShiftInst &I)
  GenericValue Dest;
  Dest = executeShlInst (Src1, Src2, Ty);
  SetValue(&I, Dest, SF);
 }

-void Interpreter::visitShr(ShiftInst &I) {
+void Interpreter::visitLShr(ShiftInst &I) {
  ExecutionContext &SF = ECStack.back();
  const Type *Ty    = I.getOperand(0)->getType();
  GenericValue Src1 = getOperandValue(I.getOperand(0), SF);
  GenericValue Src2 = getOperandValue(I.getOperand(1), SF);
  GenericValue Dest;
-  Dest = executeShrInst (Src1, Src2, Ty);
+  Dest = executeLShrInst (Src1, Src2, Ty);
+  SetValue(&I, Dest, SF);
+}
+
+void Interpreter::visitAShr(ShiftInst &I) {
+  ExecutionContext &SF = ECStack.back();
+  const Type *Ty    = I.getOperand(0)->getType();
+  GenericValue Src1 = getOperandValue(I.getOperand(0), SF);
+  GenericValue Src2 = getOperandValue(I.getOperand(1), SF);
+  GenericValue Dest;
+  Dest = executeAShrInst (Src1, Src2, Ty);
  SetValue(&I, Dest, SF);
 }

 #define IMPLEMENT_CAST(DTY, DCTY, STY) \
   case Type::STY##TyID: Dest.DTY##Val = DCTY Src.STY##Val; break;
Index: lib/ExecutionEngine/Interpreter/Interpreter.h
===================================================================
RCS file: /var/cvs/llvm/llvm/lib/ExecutionEngine/Interpreter/Interpreter.h,v
retrieving revision 1.75
diff -t -d -u -p -5 -r1.75 Interpreter.h
--- lib/ExecutionEngine/Interpreter/Interpreter.h       16 Jun 2006 18:08:38 -0000      1.75
+++ lib/ExecutionEngine/Interpreter/Interpreter.h       4 Nov 2006 00:19:22 -0000
@@ -152,11 +152,12 @@ public:
  void visitInvokeInst(InvokeInst &I) { visitCallSite (CallSite (&I)); }
  void visitUnwindInst(UnwindInst &I);
  void visitUnreachableInst(UnreachableInst &I);

  void visitShl(ShiftInst &I);
-  void visitShr(ShiftInst &I);
+  void visitLShr(ShiftInst &I);
+  void visitAShr(ShiftInst &I);
  void visitVAArgInst(VAArgInst &I);
  void visitInstruction(Instruction &I) {
    std::cerr << I;
    assert(0 && "Instruction not interpretable yet!");
  }
Index: lib/Target/CBackend/Writer.cpp
===================================================================
RCS file: /var/cvs/llvm/llvm/lib/Target/CBackend/Writer.cpp,v
retrieving revision 1.278
diff -t -d -u -p -5 -r1.278 Writer.cpp
--- lib/Target/CBackend/Writer.cpp      2 Nov 2006 20:25:49 -0000       1.278
+++ lib/Target/CBackend/Writer.cpp      4 Nov 2006 00:19:23 -0000
@@ -604,11 +604,12 @@ void CWriter::printConstant(Constant *CP
    case Instruction::SetLT:
    case Instruction::SetLE:
    case Instruction::SetGT:
    case Instruction::SetGE:
    case Instruction::Shl:
-    case Instruction::Shr:
+    case Instruction::LShr:
+    case Instruction::AShr:
    {
      Out << '(';
      bool NeedsClosingParens = printConstExprCast(CE);
      printConstantWithCast(CE->getOperand(0), CE->getOpcode());
      switch (CE->getOpcode()) {
@@ -629,11 +630,12 @@ void CWriter::printConstant(Constant *CP
      case Instruction::SetLT: Out << " < "; break;
      case Instruction::SetLE: Out << " <= "; break;
      case Instruction::SetGT: Out << " > "; break;
      case Instruction::SetGE: Out << " >= "; break;
      case Instruction::Shl: Out << " << "; break;
-      case Instruction::Shr: Out << " >> "; break;
+      case Instruction::LShr:
+      case Instruction::AShr: Out << " >> "; break;
      default: assert(0 && "Illegal opcode here!");
      }
      printConstantWithCast(CE->getOperand(1), CE->getOpcode());
      if (NeedsClosingParens)
        Out << "))";
@@ -824,27 +826,27 @@ void CWriter::printConstant(Constant *CP

 // Some constant expressions need to be casted back to the original types
 // because their operands were casted to the expected type. This function takes
 // care of detecting that case and printing the cast for the ConstantExpr.
 bool CWriter::printConstExprCast(const ConstantExpr* CE) {
-  bool Result = false;
+  bool NeedsExplicitCast = false;
  const Type* Ty = CE->getOperand(0)->getType();
  switch (CE->getOpcode()) {
-  case Instruction::UDiv:
+  case Instruction::LShr:
  case Instruction::URem:
-    Result = Ty->isSigned(); break;
-  case Instruction::SDiv:
+  case Instruction::UDiv: NeedsExplicitCast = Ty->isSigned(); break;
+  case Instruction::AShr:
  case Instruction::SRem:
-    Result = Ty->isUnsigned(); break;
+  case Instruction::SDiv: NeedsExplicitCast = Ty->isUnsigned(); break;
  default: break;
  }
-  if (Result) {
+  if (NeedsExplicitCast) {
    Out << "((";
    printType(Out, Ty);
    Out << ")(";
  }
-  return Result;
+  return NeedsExplicitCast;
 }

 //  Print a constant assuming that it is the operand for a given Opcode. The
 //  opcodes that care about sign need to cast their operands to the expected
 //  type before the operation proceeds. This function does the casting.
@@ -861,18 +863,20 @@ void CWriter::printConstantWithCast(Cons
  // of OpTy. If we change OpTy, also set shouldCast to true.
  switch (Opcode) {
    default:
      // for most instructions, it doesn't matter
      break;
+    case Instruction::LShr:
    case Instruction::UDiv:
    case Instruction::URem:
      // For UDiv/URem get correct type
      if (OpTy->isSigned()) {
        OpTy = OpTy->getUnsignedVersion();
        shouldCast = true;
      }
      break;
+    case Instruction::AShr:
    case Instruction::SDiv:
    case Instruction::SRem:
      // For SDiv/SRem get correct type
      if (OpTy->isUnsigned()) {
        OpTy = OpTy->getSignedVersion();
@@ -925,27 +929,27 @@ void CWriter::writeOperand(Value *Operan
 // Some instructions need to have their result value casted back to the
 // original types because their operands were casted to the expected type.
 // This function takes care of detecting that case and printing the cast
 // for the Instruction.
 bool CWriter::writeInstructionCast(const Instruction &I) {
-  bool Result = false;
+  bool NeedsExplicitCast = false;
  const Type* Ty = I.getOperand(0)->getType();
  switch (I.getOpcode()) {
-  case Instruction::UDiv:
+  case Instruction::LShr:
  case Instruction::URem:
-    Result = Ty->isSigned(); break;
-  case Instruction::SDiv:
+  case Instruction::UDiv: NeedsExplicitCast = Ty->isSigned(); break;
+  case Instruction::AShr:
  case Instruction::SRem:
-    Result = Ty->isUnsigned(); break;
+  case Instruction::SDiv: NeedsExplicitCast = Ty->isUnsigned(); break;
  default: break;
  }
-  if (Result) {
+  if (NeedsExplicitCast) {
    Out << "((";
    printType(Out, Ty);
    Out << ")(";
  }
-  return Result;
+  return NeedsExplicitCast;
 }

 // Write the operand with a cast to another type based on the Opcode being used.
 // This will be used in cases where an instruction has specific type
 // requirements (usually signedness) for its operands.
@@ -962,18 +966,20 @@ void CWriter::writeOperandWithCast(Value
  // of OpTy. If we change OpTy, also set shouldCast to true.
  switch (Opcode) {
    default:
      // for most instructions, it doesn't matter
      break;
+    case Instruction::LShr:
    case Instruction::UDiv:
    case Instruction::URem:
      // For UDiv to have unsigned operands
      if (OpTy->isSigned()) {
        OpTy = OpTy->getUnsignedVersion();
        shouldCast = true;
      }
      break;
+    case Instruction::AShr:
    case Instruction::SDiv:
    case Instruction::SRem:
      if (OpTy->isUnsigned()) {
        OpTy = OpTy->getSignedVersion();
        shouldCast = true;
@@ -1830,11 +1836,12 @@ void CWriter::visitBinaryOperator(Instru
    case Instruction::SetLE: Out << " <= "; break;
    case Instruction::SetGE: Out << " >= "; break;
    case Instruction::SetLT: Out << " < "; break;
    case Instruction::SetGT: Out << " > "; break;
    case Instruction::Shl : Out << " << "; break;
-    case Instruction::Shr : Out << " >> "; break;
+    case Instruction::LShr:
+    case Instruction::AShr: Out << " >> "; break;
    default: std::cerr << "Invalid operator type!" << I; abort();
    }

    writeOperandWithCast(I.getOperand(1), I.getOpcode());
    if (NeedsClosingParens)
Index: lib/Transforms/ExprTypeConvert.cpp
===================================================================
RCS file: /var/cvs/llvm/llvm/lib/Transforms/ExprTypeConvert.cpp,v
retrieving revision 1.111
diff -t -d -u -p -5 -r1.111 ExprTypeConvert.cpp
--- lib/Transforms/ExprTypeConvert.cpp  2 Nov 2006 20:25:50 -0000       1.111
+++ lib/Transforms/ExprTypeConvert.cpp  4 Nov 2006 00:19:24 -0000
@@ -74,14 +74,16 @@ bool llvm::ExpressionConvertibleToType(V
    if (!Ty->isInteger() && !Ty->isFloatingPoint()) return false;
    if (!ExpressionConvertibleToType(I->getOperand(0), Ty, CTMap, TD) ||
        !ExpressionConvertibleToType(I->getOperand(1), Ty, CTMap, TD))
      return false;
    break;
-  case Instruction::Shr:
+  case Instruction::LShr:
+  case Instruction::AShr:
    if (!Ty->isInteger()) return false;
-    if (Ty->isSigned() != V->getType()->isSigned()) return false;
-    // FALL THROUGH
+    if (!ExpressionConvertibleToType(I->getOperand(0), Ty, CTMap, TD))
+      return false;
+    break;
  case Instruction::Shl:
    if (!Ty->isInteger()) return false;
    if (!ExpressionConvertibleToType(I->getOperand(0), Ty, CTMap, TD))
      return false;
    break;
@@ -241,11 +243,12 @@ Value *llvm::ConvertExpressionToType(Val
    Res->setOperand(0, ConvertExpressionToType(I->getOperand(0), Ty, VMC, TD));
    Res->setOperand(1, ConvertExpressionToType(I->getOperand(1), Ty, VMC, TD));
    break;

  case Instruction::Shl:
-  case Instruction::Shr:
+  case Instruction::LShr:
+  case Instruction::AShr:
    Res = new ShiftInst(cast<ShiftInst>(I)->getOpcode(), Dummy,
                        I->getOperand(1), Name);
    VMC.ExprMap[I] = Res;
    Res->setOperand(0, ConvertExpressionToType(I->getOperand(0), Ty, VMC, TD));
    break;
@@ -474,11 +477,12 @@ static bool OperandConvertibleToType(Use
  case Instruction::SetEQ:
  case Instruction::SetNE: {
    Value *OtherOp = I->getOperand((V == I->getOperand(0)) ? 1 : 0);
    return ExpressionConvertibleToType(OtherOp, Ty, CTMap, TD);
  }
-  case Instruction::Shr:
+  case Instruction::LShr:
+  case Instruction::AShr:
    if (Ty->isSigned() != V->getType()->isSigned()) return false;
    // FALL THROUGH
  case Instruction::Shl:
    if (I->getOperand(1) == V) return false;  // Cannot change shift amount type
    if (!Ty->isInteger()) return false;
@@ -744,11 +748,12 @@ static void ConvertOperandToType(User *U
    Value *NewOther   = ConvertExpressionToType(OtherOp, NewTy, VMC, TD);
    Res->setOperand(OtherIdx, NewOther);
    break;
  }
  case Instruction::Shl:
-  case Instruction::Shr:
+  case Instruction::LShr:
+  case Instruction::AShr:
    assert(I->getOperand(0) == OldVal);
    Res = new ShiftInst(cast<ShiftInst>(I)->getOpcode(), NewVal,
                        I->getOperand(1), Name);
    break;

Index: lib/Transforms/Scalar/InstructionCombining.cpp
===================================================================
RCS file: /var/cvs/llvm/llvm/lib/Transforms/Scalar/InstructionCombining.cpp,v
retrieving revision 1.535
diff -t -d -u -p -5 -r1.535 InstructionCombining.cpp
--- lib/Transforms/Scalar/InstructionCombining.cpp      2 Nov 2006 20:25:50 -0000       1.535
+++ lib/Transforms/Scalar/InstructionCombining.cpp      4 Nov 2006 00:19:29 -0000
@@ -729,41 +729,51 @@ static void ComputeMaskedBits(Value *V,
      KnownOne  <<= ShiftAmt;
      KnownZero |= (1ULL << ShiftAmt)-1;  // low bits known zero.
      return;
    }
    break;
-  case Instruction::Shr:
+  case Instruction::LShr:
    // (ushr X, C1) & C2 == 0   iff  (-1 >> C1) & C2 == 0
    if (ConstantInt *SA = dyn_cast<ConstantInt>(I->getOperand(1))) {
      // Compute the new bits that are at the top now.
      uint64_t ShiftAmt = SA->getZExtValue();
      uint64_t HighBits = (1ULL << ShiftAmt)-1;
      HighBits <<= I->getType()->getPrimitiveSizeInBits()-ShiftAmt;

-      if (I->getType()->isUnsigned()) {   // Unsigned shift right.
-        Mask <<= ShiftAmt;
-        ComputeMaskedBits(I->getOperand(0), Mask, KnownZero,KnownOne,Depth+1);
-        assert((KnownZero & KnownOne) == 0&&"Bits known to be one AND zero?");
-        KnownZero >>= ShiftAmt;
-        KnownOne  >>= ShiftAmt;
-        KnownZero |= HighBits;  // high bits known zero.
-      } else {
-        Mask <<= ShiftAmt;
-        ComputeMaskedBits(I->getOperand(0), Mask, KnownZero,KnownOne,Depth+1);
-        assert((KnownZero & KnownOne) == 0&&"Bits known to be one AND zero?");
-        KnownZero >>= ShiftAmt;
-        KnownOne  >>= ShiftAmt;
+      // Unsigned shift right.
+      Mask <<= ShiftAmt;
+      ComputeMaskedBits(I->getOperand(0), Mask, KnownZero,KnownOne,Depth+1);
+      assert((KnownZero & KnownOne) == 0&&"Bits known to be one AND zero?");
+      KnownZero >>= ShiftAmt;
+      KnownOne  >>= ShiftAmt;
+      KnownZero |= HighBits;  // high bits known zero.
+      return;
+    }
+    break;
+  case Instruction::AShr:
+    // (ushr X, C1) & C2 == 0   iff  (-1 >> C1) & C2 == 0
+    if (ConstantInt *SA = dyn_cast<ConstantInt>(I->getOperand(1))) {
+      // Compute the new bits that are at the top now.
+      uint64_t ShiftAmt = SA->getZExtValue();
+      uint64_t HighBits = (1ULL << ShiftAmt)-1;
+      HighBits <<= I->getType()->getPrimitiveSizeInBits()-ShiftAmt;
+
+      // Signed shift right.
+      Mask <<= ShiftAmt;
+      ComputeMaskedBits(I->getOperand(0), Mask, KnownZero,KnownOne,Depth+1);
+      assert((KnownZero & KnownOne) == 0&&"Bits known to be one AND zero?");
+      KnownZero >>= ShiftAmt;
+      KnownOne  >>= ShiftAmt;

-        // Handle the sign bits.
-        uint64_t SignBit = 1ULL << (I->getType()->getPrimitiveSizeInBits()-1);
-        SignBit >>= ShiftAmt;  // Adjust to where it is now in the mask.
+      // Handle the sign bits.
+      uint64_t SignBit = 1ULL << (I->getType()->getPrimitiveSizeInBits()-1);
+      SignBit >>= ShiftAmt;  // Adjust to where it is now in the mask.

-        if (KnownZero & SignBit) {       // New bits are known zero.
-          KnownZero |= HighBits;
-        } else if (KnownOne & SignBit) { // New bits are known one.
-          KnownOne |= HighBits;
-        }
+      if (KnownZero & SignBit) {       // New bits are known zero.
+        KnownZero |= HighBits;
+      } else if (KnownOne & SignBit) { // New bits are known one.
+        KnownOne |= HighBits;
      }
      return;
    }
    break;
  }
@@ -1117,21 +1127,43 @@ bool InstCombiner::SimplifyDemandedBits(
      KnownZero <<= ShiftAmt;
      KnownOne  <<= ShiftAmt;
      KnownZero |= (1ULL << ShiftAmt) - 1;  // low bits known zero.
    }
    break;
-  case Instruction::Shr:
+  case Instruction::LShr:
+    // For a logical shift right
+    if (ConstantInt *SA = dyn_cast<ConstantInt>(I->getOperand(1))) {
+      unsigned ShiftAmt = SA->getZExtValue();
+
+      // Compute the new bits that are at the top now.
+      uint64_t HighBits = (1ULL << ShiftAmt)-1;
+      HighBits <<= I->getType()->getPrimitiveSizeInBits() - ShiftAmt;
+      uint64_t TypeMask = I->getType()->getIntegralTypeMask();
+      // Unsigned shift right.
+      if (SimplifyDemandedBits(I->getOperand(0),
+                              (DemandedMask << ShiftAmt) & TypeMask,
+                               KnownZero, KnownOne, Depth+1))
+        return true;
+      assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
+      KnownZero &= TypeMask;
+      KnownOne  &= TypeMask;
+      KnownZero >>= ShiftAmt;
+      KnownOne  >>= ShiftAmt;
+      KnownZero |= HighBits;  // high bits known zero.
+    }
+    break;
+  case Instruction::AShr:
    // If this is an arithmetic shift right and only the low-bit is set, we can
    // always convert this into a logical shr, even if the shift amount is
    // variable.  The low bit of the shift cannot be an input sign bit unless
    // the shift amount is >= the size of the datatype, which is undefined.
-    if (DemandedMask == 1 && I->getType()->isSigned()) {
+    if (DemandedMask == 1) {
      // Convert the input to unsigned.
      Value *NewVal = InsertCastBefore(I->getOperand(0),
                                       I->getType()->getUnsignedVersion(), *I);
      // Perform the unsigned shift right.
-      NewVal = new ShiftInst(Instruction::Shr, NewVal, I->getOperand(1),
+      NewVal = new ShiftInst(Instruction::LShr, NewVal, I->getOperand(1),
                             I->getName());
      InsertNewInstBefore(cast<Instruction>(NewVal), *I);
      // Then cast that to the destination type.
      NewVal = new CastInst(NewVal, I->getType(), I->getName());
      InsertNewInstBefore(cast<Instruction>(NewVal), *I);
@@ -1143,52 +1175,35 @@ bool InstCombiner::SimplifyDemandedBits(

      // Compute the new bits that are at the top now.
      uint64_t HighBits = (1ULL << ShiftAmt)-1;
      HighBits <<= I->getType()->getPrimitiveSizeInBits() - ShiftAmt;
      uint64_t TypeMask = I->getType()->getIntegralTypeMask();
-      if (I->getType()->isUnsigned()) {   // Unsigned shift right.
-        if (SimplifyDemandedBits(I->getOperand(0),
-                                 (DemandedMask << ShiftAmt) & TypeMask,
-                                 KnownZero, KnownOne, Depth+1))
-          return true;
-        assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
-        KnownZero &= TypeMask;
-        KnownOne  &= TypeMask;
-        KnownZero >>= ShiftAmt;
-        KnownOne  >>= ShiftAmt;
-        KnownZero |= HighBits;  // high bits known zero.
-      } else {                            // Signed shift right.
-        if (SimplifyDemandedBits(I->getOperand(0),
-                                 (DemandedMask << ShiftAmt) & TypeMask,
-                                 KnownZero, KnownOne, Depth+1))
-          return true;
-        assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
-        KnownZero &= TypeMask;
-        KnownOne  &= TypeMask;
-        KnownZero >>= ShiftAmt;
-        KnownOne  >>= ShiftAmt;
+      // Signed shift right.
+      if (SimplifyDemandedBits(I->getOperand(0),
+                               (DemandedMask << ShiftAmt) & TypeMask,
+                               KnownZero, KnownOne, Depth+1))
+        return true;
+      assert((KnownZero & KnownOne) == 0 && "Bits known to be one AND zero?");
+      KnownZero &= TypeMask;
+      KnownOne  &= TypeMask;
+      KnownZero >>= ShiftAmt;
+      KnownOne  >>= ShiftAmt;

-        // Handle the sign bits.
-        uint64_t SignBit = 1ULL << (I->getType()->getPrimitiveSizeInBits()-1);
-        SignBit >>= ShiftAmt;  // Adjust to where it is now in the mask.
+      // Handle the sign bits.
+      uint64_t SignBit = 1ULL << (I->getType()->getPrimitiveSizeInBits()-1);
+      SignBit >>= ShiftAmt;  // Adjust to where it is now in the mask.

-        // If the input sign bit is known to be zero, or if none of the top bits
-        // are demanded, turn this into an unsigned shift right.
-        if ((KnownZero & SignBit) || (HighBits & ~DemandedMask) == HighBits) {
-          // Convert the input to unsigned.
-          Value *NewVal = InsertCastBefore(I->getOperand(0),
-                             I->getType()->getUnsignedVersion(), *I);
-          // Perform the unsigned shift right.
-          NewVal = new ShiftInst(Instruction::Shr, NewVal, SA, I->getName());
-          InsertNewInstBefore(cast<Instruction>(NewVal), *I);
-          // Then cast that to the destination type.
-          NewVal = new CastInst(NewVal, I->getType(), I->getName());
-          InsertNewInstBefore(cast<Instruction>(NewVal), *I);
-          return UpdateValueUsesWith(I, NewVal);
-        } else if (KnownOne & SignBit) { // New bits are known one.
-          KnownOne |= HighBits;
-        }
+      // If the input sign bit is known to be zero, or if none of the top bits
+      // are demanded, turn this into an unsigned shift right.
+      if ((KnownZero & SignBit) || (HighBits & ~DemandedMask) == HighBits) {
+        // Perform the logical shift right.
+        Value *NewVal = new ShiftInst(Instruction::LShr, I->getOperand(0),
+                                      SA, I->getName());
+        InsertNewInstBefore(cast<Instruction>(NewVal), *I);
+        return UpdateValueUsesWith(I, NewVal);
+      } else if (KnownOne & SignBit) { // New bits are known one.
+        KnownOne |= HighBits;
      }
    }
    break;
  }

@@ -1897,33 +1912,46 @@ Instruction *InstCombiner::visitSub(Bina
    // -((uint)X >> 31) -> ((int)X >> 31)
    // -((int)X >> 31) -> ((uint)X >> 31)
    if (C->isNullValue()) {
      Value *NoopCastedRHS = RemoveNoopCast(Op1);
      if (ShiftInst *SI = dyn_cast<ShiftInst>(NoopCastedRHS))
-        if (SI->getOpcode() == Instruction::Shr)
+        if (SI->getOpcode() == Instruction::LShr) {
          if (ConstantInt *CU = dyn_cast<ConstantInt>(SI->getOperand(1))) {
-            const Type *NewTy;
-            if (SI->getType()->isSigned())
-              NewTy = SI->getType()->getUnsignedVersion();
-            else
-              NewTy = SI->getType()->getSignedVersion();
            // Check to see if we are shifting out everything but the sign bit.
            if (CU->getZExtValue() ==
                SI->getType()->getPrimitiveSizeInBits()-1) {
-              // Ok, the transformation is safe.  Insert a cast of the incoming
-              // value, then the new shift, then the new cast.
-              Value *InV = InsertCastBefore(SI->getOperand(0), NewTy, I);
-              Instruction *NewShift = new ShiftInst(Instruction::Shr, InV,
+              // Ok, the transformation is safe.  Insert AShr.
+              Instruction *NewShift = new ShiftInst(Instruction::AShr,
+                                                    SI->getOperand(0),
                                                    CU, SI->getName());
              if (NewShift->getType() == I.getType())
                return NewShift;
              else {
                InsertNewInstBefore(NewShift, I);
                return new CastInst(NewShift, I.getType());
              }
            }
          }
+        }
+        else if (SI->getOpcode() == Instruction::AShr) {
+          if (ConstantInt *CU = dyn_cast<ConstantInt>(SI->getOperand(1))) {
+            // Check to see if we are shifting out everything but the sign bit.
+            if (CU->getZExtValue() ==
+                SI->getType()->getPrimitiveSizeInBits()-1) {
+              // Ok, the transformation is safe.  Insert LShr.
+              Instruction *NewShift = new ShiftInst(Instruction::LShr,
+                                                    SI->getOperand(0),
+                                                    CU, SI->getName());
+              if (NewShift->getType() == I.getType())
+                return NewShift;
+              else {
+                InsertNewInstBefore(NewShift, I);
+                return new CastInst(NewShift, I.getType());
+              }
+            }
+          }
+        }
    }

    // Try to fold constant sub into select arguments.
    if (SelectInst *SI = dyn_cast<SelectInst>(Op1))
      if (Instruction *R = FoldOpIntoSelect(I, SI, this))
@@ -2136,11 +2164,11 @@ Instruction *InstCombiner::visitMul(Bina
          const Type *NewTy = SCIOp0->getType()->getSignedVersion();
          SCIOp0 = InsertCastBefore(SCIOp0, NewTy, I);
        }

        Value *V =
-          InsertNewInstBefore(new ShiftInst(Instruction::Shr, SCIOp0, Amt,
+          InsertNewInstBefore(new ShiftInst(Instruction::AShr, SCIOp0, Amt,
                                            BoolCast->getOperand(0)->getName()+
                                            ".mask"), I);

        // If the multiply type is not the same as the source type, sign extend
        // or truncate to the multiply type.
@@ -2260,22 +2288,14 @@ Instruction *InstCombiner::visitUDiv(Bin
  // if so, convert to a right shift.
  if (ConstantInt *C = dyn_cast<ConstantInt>(Op1)) {
    if (uint64_t Val = C->getZExtValue())    // Don't break X / 0
      if (isPowerOf2_64(Val)) {
        uint64_t ShiftAmt = Log2_64(Val);
-        Value* X = Op0;
-        const Type* XTy = X->getType();
-        bool isSigned = XTy->isSigned();
-        if (isSigned)
-          X = InsertCastBefore(X, XTy->getUnsignedVersion(), I);
        Instruction* Result =
-          new ShiftInst(Instruction::Shr, X,
+          new ShiftInst(Instruction::LShr, Op0,
                        ConstantInt::get(Type::UByteTy, ShiftAmt));
-        if (!isSigned)
-          return Result;
-        InsertNewInstBefore(Result, I);
-        return new CastInst(Result, XTy->getSignedVersion(), I.getName());
+        return Result;
      }
  }

  // X udiv (C1 << N), where C1 is "1<<C2"  -->  X >> (N+C2)
  if (ShiftInst *RHSI = dyn_cast<ShiftInst>(I.getOperand(1))) {
@@ -2283,24 +2303,16 @@ Instruction *InstCombiner::visitUDiv(Bin
        isa<ConstantInt>(RHSI->getOperand(0))) {
      uint64_t C1 = cast<ConstantInt>(RHSI->getOperand(0))->getZExtValue();
      if (isPowerOf2_64(C1)) {
        Value *N = RHSI->getOperand(1);
        const Type* NTy = N->getType();
-        bool isSigned = NTy->isSigned();
        if (uint64_t C2 = Log2_64(C1)) {
-          if (isSigned) {
-            NTy = NTy->getUnsignedVersion();
-            N = InsertCastBefore(N, NTy, I);
-          }
          Constant *C2V = ConstantInt::get(NTy, C2);
          N = InsertNewInstBefore(BinaryOperator::createAdd(N, C2V, "tmp"), I);
        }
-        Instruction* Result = new ShiftInst(Instruction::Shr, Op0, N);
-        if (!isSigned)
-          return Result;
-        InsertNewInstBefore(Result, I);
-        return new CastInst(Result, NTy->getSignedVersion(), I.getName());
+        Instruction* Result = new ShiftInst(Instruction::LShr, Op0, N);
+        return Result;
      }
    }
  }

  // udiv X, (Select Cond, C1, C2) --> Select Cond, (shr X, C1), (shr X, C2)
@@ -2311,35 +2323,26 @@ Instruction *InstCombiner::visitUDiv(Bin
        if (!STO->isNullValue() && !STO->isNullValue()) {
          uint64_t TVA = STO->getZExtValue(), FVA = SFO->getZExtValue();
          if (isPowerOf2_64(TVA) && isPowerOf2_64(FVA)) {
            // Compute the shift amounts
            unsigned TSA = Log2_64(TVA), FSA = Log2_64(FVA);
-            // Make sure we get the unsigned version of X
-            Value* X = Op0;
-            const Type* origXTy = X->getType();
-            bool isSigned = origXTy->isSigned();
-            if (isSigned)
-              X = InsertCastBefore(X, X->getType()->getUnsignedVersion(), I);
            // Construct the "on true" case of the select
            Constant *TC = ConstantInt::get(Type::UByteTy, TSA);
            Instruction *TSI =
-              new ShiftInst(Instruction::Shr, X, TC, SI->getName()+".t");
+              new ShiftInst(Instruction::LShr, Op0, TC, SI->getName()+".t");
            TSI = InsertNewInstBefore(TSI, I);

            // Construct the "on false" case of the select
            Constant *FC = ConstantInt::get(Type::UByteTy, FSA);
            Instruction *FSI =
-              new ShiftInst(Instruction::Shr, X, FC, SI->getName()+".f");
+              new ShiftInst(Instruction::LShr, Op0, FC, SI->getName()+".f");
            FSI = InsertNewInstBefore(FSI, I);

            // construct the select instruction and return it.
            SelectInst* NewSI =
              new SelectInst(SI->getOperand(0), TSI, FSI, SI->getName());
-            if (!isSigned)
-              return NewSI;
-            InsertNewInstBefore(NewSI, I);
-            return new CastInst(NewSI, origXTy, NewSI->getName());
+            return NewSI;
          }
        }
  }
  return 0;
 }
@@ -2805,18 +2808,19 @@ Instruction *InstCombiner::OptAndOp(Inst
      TheAnd.setOperand(1, CI);
      return &TheAnd;
    }
    break;
  }
-  case Instruction::Shr:
+  case Instruction::LShr:
+  case Instruction::AShr:
    // We know that the AND will not produce any of the bits shifted in, so if
    // the anded constant includes them, clear them now!  This only applies to
    // unsigned shifts, because a signed shr may bring in set bits!
    //
    if (AndRHS->getType()->isUnsigned()) {
      Constant *AllOne = ConstantIntegral::getAllOnesValue(AndRHS->getType());
-      Constant *ShrMask = ConstantExpr::getShr(AllOne, OpRHS);
+      Constant *ShrMask = ConstantExpr::getLShr(AllOne, OpRHS);
      Constant *CI = ConstantExpr::getAnd(AndRHS, ShrMask);

      if (CI == ShrMask) {   // Masking out bits that the shift already masks.
        return ReplaceInstUsesWith(TheAnd, Op);
      } else if (CI != AndRHS) {
@@ -2826,19 +2830,19 @@ Instruction *InstCombiner::OptAndOp(Inst
    } else {   // Signed shr.
      // See if this is shifting in some sign extension, then masking it out
      // with an and.
      if (Op->hasOneUse()) {
        Constant *AllOne = ConstantIntegral::getAllOnesValue(AndRHS->getType());
-        Constant *ShrMask = ConstantExpr::getUShr(AllOne, OpRHS);
+        Constant *ShrMask = ConstantExpr::getLShr(AllOne, OpRHS);
        Constant *CI = ConstantExpr::getAnd(AndRHS, ShrMask);
        if (CI == AndRHS) {          // Masking out bits shifted in.
          // Make the argument unsigned.
          Value *ShVal = Op->getOperand(0);
          ShVal = InsertCastBefore(ShVal,
                                   ShVal->getType()->getUnsignedVersion(),
                                   TheAnd);
-          ShVal = InsertNewInstBefore(new ShiftInst(Instruction::Shr, ShVal,
+          ShVal = InsertNewInstBefore(new ShiftInst(Instruction::LShr, ShVal,
                                                    OpRHS, Op->getName()),
                                      TheAnd);
          Value *AndRHS2 = ConstantExpr::getCast(AndRHS, ShVal->getType());
          ShVal = InsertNewInstBefore(BinaryOperator::createAnd(ShVal, AndRHS2,
                                                             TheAnd.getName()),
@@ -4292,11 +4296,11 @@ Instruction *InstCombiner::visitSetCondI
            }

            if (CanFold) {
              Constant *NewCst;
              if (Shift->getOpcode() == Instruction::Shl)
-                NewCst = ConstantExpr::getUShr(CI, ShAmt);
+                NewCst = ConstantExpr::getLShr(CI, ShAmt);
              else
                NewCst = ConstantExpr::getShl(CI, ShAmt);

              // Check to see if we are shifting out any of the bits being
              // compared.
@@ -4310,11 +4314,11 @@ Instruction *InstCombiner::visitSetCondI
                  return ReplaceInstUsesWith(I, ConstantBool::getTrue());
              } else {
                I.setOperand(1, NewCst);
                Constant *NewAndCST;
                if (Shift->getOpcode() == Instruction::Shl)
-                  NewAndCST = ConstantExpr::getUShr(AndCST, ShAmt);
+                  NewAndCST = ConstantExpr::getLShr(AndCST, ShAmt);
                else
                  NewAndCST = ConstantExpr::getShl(AndCST, ShAmt);
                LHSI->setOperand(1, NewAndCST);
                if (AndTy == Ty)
                  LHSI->setOperand(0, Shift->getOperand(0));
@@ -4336,20 +4340,20 @@ Instruction *InstCombiner::visitSetCondI
          if (Shift && Shift->hasOneUse() && CI->isNullValue() &&
              I.isEquality() && !Shift->isArithmeticShift() &&
              isa<Instruction>(Shift->getOperand(0))) {
            // Compute C << Y.
            Value *NS;
-            if (Shift->getOpcode() == Instruction::Shr) {
+            if (Shift->getOpcode() == Instruction::LShr) {
              NS = new ShiftInst(Instruction::Shl, AndCST, Shift->getOperand(1),
                                 "tmp");
            } else {
              // Make sure we insert a logical shift.
              Constant *NewAndCST = AndCST;
              if (AndCST->getType()->isSigned())
                NewAndCST = ConstantExpr::getCast(AndCST,
                                      AndCST->getType()->getUnsignedVersion());
-              NS = new ShiftInst(Instruction::Shr, NewAndCST,
+              NS = new ShiftInst(Instruction::LShr, NewAndCST,
                                 Shift->getOperand(1), "tmp");
            }
            InsertNewInstBefore(cast<Instruction>(NS), I);

            // If C's sign doesn't agree with the and, insert a cast now.
@@ -4383,11 +4387,11 @@ Instruction *InstCombiner::visitSetCondI
              break;

            // If we are comparing against bits always shifted out, the
            // comparison cannot succeed.
            Constant *Comp =
-              ConstantExpr::getShl(ConstantExpr::getShr(CI, ShAmt), ShAmt);
+              ConstantExpr::getShl(ConstantExpr::getLShr(CI, ShAmt), ShAmt);
            if (Comp != CI) {// Comparing against a bit that we know is zero.
              bool IsSetNE = I.getOpcode() == Instruction::SetNE;
              Constant *Cst = ConstantBool::get(IsSetNE);
              return ReplaceInstUsesWith(I, Cst);
            }
@@ -4409,17 +4413,18 @@ Instruction *InstCombiner::visitSetCondI
              Instruction *AndI =
                BinaryOperator::createAnd(LHSI->getOperand(0),
                                          Mask, LHSI->getName()+".mask");
              Value *And = InsertNewInstBefore(AndI, I);
              return new SetCondInst(I.getOpcode(), And,
-                                     ConstantExpr::getUShr(CI, ShAmt));
+                                     ConstantExpr::getLShr(CI, ShAmt));
            }
          }
        }
        break;

-      case Instruction::Shr:         // (setcc (shr X, ShAmt), CI)
+      case Instruction::LShr:         // (setcc (shr X, ShAmt), CI)
+      case Instruction::AShr:
        if (ConstantInt *ShAmt = dyn_cast<ConstantInt>(LHSI->getOperand(1))) {
          if (I.isEquality()) {
            // Check that the shift amount is in range.  If not, don't perform
            // undefined shifts.  When the shift is visited it will be
            // simplified.
@@ -4427,12 +4432,17 @@ Instruction *InstCombiner::visitSetCondI
            if (ShAmt->getZExtValue() >= TypeBits)
              break;

            // If we are comparing against bits always shifted out, the
            // comparison cannot succeed.
-            Constant *Comp =
-              ConstantExpr::getShr(ConstantExpr::getShl(CI, ShAmt), ShAmt);
+            Constant *Comp;
+            if (CI->getType()->isUnsigned())
+              Comp = ConstantExpr::getLShr(ConstantExpr::getShl(CI, ShAmt),
+                                           ShAmt);
+            else
+              Comp = ConstantExpr::getAShr(ConstantExpr::getShl(CI, ShAmt),
+                                           ShAmt);

            if (Comp != CI) {// Comparing against a bit that we know is zero.
              bool IsSetNE = I.getOpcode() == Instruction::SetNE;
              Constant *Cst = ConstantBool::get(IsSetNE);
              return ReplaceInstUsesWith(I, Cst);
@@ -5018,11 +5028,11 @@ Instruction *InstCombiner::visitShiftIns
  // See if we can turn a signed shr into an unsigned shr.
  if (I.isArithmeticShift()) {
    if (MaskedValueIsZero(Op0,
                          1ULL << (I.getType()->getPrimitiveSizeInBits()-1))) {
      Value *V = InsertCastBefore(Op0, I.getType()->getUnsignedVersion(), I);
-      V = InsertNewInstBefore(new ShiftInst(Instruction::Shr, V, Op1,
+      V = InsertNewInstBefore(new ShiftInst(Instruction::LShr, V, Op1,
                                            I.getName()), I);
      return new CastInst(V, I.getType());
    }
  }

@@ -5086,12 +5096,14 @@ Instruction *InstCombiner::FoldShiftByCo
        case Instruction::Or:
        case Instruction::Xor:
          // These operators commute.
          // Turn (Y + (X >> C)) << C  ->  (X + (Y << C)) & (~0 << C)
          if (isLeftShift && Op0BO->getOperand(1)->hasOneUse() &&
-              match(Op0BO->getOperand(1),
-                    m_Shr(m_Value(V1), m_ConstantInt(CC))) && CC == Op1) {
+              (match(Op0BO->getOperand(1),
+                     m_LShr(m_Value(V1), m_ConstantInt(CC))) ||
+               match(Op0BO->getOperand(1),
+                     m_AShr(m_Value(V1), m_ConstantInt(CC)))) && CC == Op1) {
            Instruction *YS = new ShiftInst(Instruction::Shl,
                                            Op0BO->getOperand(0), Op1,
                                            Op0BO->getName());
            InsertNewInstBefore(YS, I); // (Y << C)
            Instruction *X =
@@ -5103,13 +5115,16 @@ Instruction *InstCombiner::FoldShiftByCo
            return BinaryOperator::createAnd(X, C2);
          }

          // Turn (Y + ((X >> C) & CC)) << C  ->  ((X & (CC << C)) + (Y << C))
          if (isLeftShift && Op0BO->getOperand(1)->hasOneUse() &&
-              match(Op0BO->getOperand(1),
-                    m_And(m_Shr(m_Value(V1), m_Value(V2)),
-                          m_ConstantInt(CC))) && V2 == Op1 &&
+              (match(Op0BO->getOperand(1),
+                     m_And(m_LShr(m_Value(V1), m_Value(V2)),
+                           m_ConstantInt(CC))) ||
+               match(Op0BO->getOperand(1),
+                     m_And(m_AShr(m_Value(V1), m_Value(V2)),
+                           m_ConstantInt(CC)))) && V2 == Op1 &&
      cast<BinaryOperator>(Op0BO->getOperand(1))->getOperand(0)->hasOneUse()) {
            Instruction *YS = new ShiftInst(Instruction::Shl,
                                            Op0BO->getOperand(0), Op1,
                                            Op0BO->getName());
            InsertNewInstBefore(YS, I); // (Y << C)
@@ -5123,12 +5138,14 @@ Instruction *InstCombiner::FoldShiftByCo

          // FALL THROUGH.
        case Instruction::Sub:
          // Turn ((X >> C) + Y) << C  ->  (X + (Y << C)) & (~0 << C)
          if (isLeftShift && Op0BO->getOperand(0)->hasOneUse() &&
-              match(Op0BO->getOperand(0),
-                    m_Shr(m_Value(V1), m_ConstantInt(CC))) && CC == Op1) {
+              (match(Op0BO->getOperand(0),
+                     m_LShr(m_Value(V1), m_ConstantInt(CC))) &&
+               match(Op0BO->getOperand(0),
+                     m_AShr(m_Value(V1), m_ConstantInt(CC)))) && CC == Op1) {
            Instruction *YS = new ShiftInst(Instruction::Shl,
                                            Op0BO->getOperand(1), Op1,
                                            Op0BO->getName());
            InsertNewInstBefore(YS, I); // (Y << C)
            Instruction *X =
@@ -5140,13 +5157,16 @@ Instruction *InstCombiner::FoldShiftByCo
            return BinaryOperator::createAnd(X, C2);
          }

          // Turn (((X >> C)&CC) + Y) << C  ->  (X + (Y << C)) & (CC << C)
          if (isLeftShift && Op0BO->getOperand(0)->hasOneUse() &&
-              match(Op0BO->getOperand(0),
-                    m_And(m_Shr(m_Value(V1), m_Value(V2)),
-                          m_ConstantInt(CC))) && V2 == Op1 &&
+              (match(Op0BO->getOperand(0),
+                     m_And(m_LShr(m_Value(V1), m_Value(V2)),
+                           m_ConstantInt(CC))) ||
+               match(Op0BO->getOperand(0),
+                     m_And(m_AShr(m_Value(V1), m_Value(V2)),
+                           m_ConstantInt(CC)))) && V2 == Op1 &&
              cast<BinaryOperator>(Op0BO->getOperand(0))
                  ->getOperand(0)->hasOneUse()) {
            Instruction *YS = new ShiftInst(Instruction::Shl,
                                            Op0BO->getOperand(1), Op1,
                                            Op0BO->getName());
@@ -5263,11 +5283,11 @@ Instruction *InstCombiner::FoldShiftByCo
      // Calculate bitmask for what gets shifted off the edge.
      Constant *C = ConstantIntegral::getAllOnesValue(I.getType());
      if (isLeftShift)
        C = ConstantExpr::getShl(C, ShiftAmt1C);
      else
-        C = ConstantExpr::getUShr(C, ShiftAmt1C);
+        C = ConstantExpr::getLShr(C, ShiftAmt1C);

      Value *Op = ShiftOp->getOperand(0);
      if (isShiftOfSignedShift != isSignedShift)
        Op = InsertCastBefore(Op, I.getType(), I);

@@ -5282,14 +5302,14 @@ Instruction *InstCombiner::FoldShiftByCo
        return new ShiftInst(I.getOpcode(), Mask,
                         ConstantInt::get(Type::UByteTy, ShiftAmt2-ShiftAmt1));
      } else if (isShiftOfUnsignedShift || isShiftOfLeftShift) {
        if (isShiftOfUnsignedShift && !isShiftOfLeftShift && isSignedShift) {
          // Make sure to emit an unsigned shift right, not a signed one.
-          Mask = InsertNewInstBefore(new CastInst(Mask,
+          Mask = InsertNewInstBefore(new CastInst(Mask,
                                        Mask->getType()->getUnsignedVersion(),
                                                  Op->getName()), I);
-          Mask = new ShiftInst(Instruction::Shr, Mask,
+          Mask = new ShiftInst(Instruction::LShr, Mask,
                         ConstantInt::get(Type::UByteTy, ShiftAmt1-ShiftAmt2));
          InsertNewInstBefore(Mask, I);
          return new CastInst(Mask, I.getType());
        } else {
          return new ShiftInst(ShiftOp->getOpcode(), Mask,
@@ -5798,23 +5818,25 @@ Instruction *InstCombiner::visitCastInst
            (DestBitSize < SrcBitSize && isa<Constant>(Op1))) {
          Value *Op0c = InsertOperandCastBefore(Op0, DestTy, SrcI);
          return new ShiftInst(Instruction::Shl, Op0c, Op1);
        }
        break;
-      case Instruction::Shr:
+      case Instruction::LShr:
+        break;
+      case Instruction::AShr:
        // If this is a signed shr, and if all bits shifted in are about to be
        // truncated off, turn it into an unsigned shr to allow greater
        // simplifications.
-        if (DestBitSize < SrcBitSize && Src->getType()->isSigned() &&
+        if (DestBitSize < SrcBitSize &&
            isa<ConstantInt>(Op1)) {
          unsigned ShiftAmt = cast<ConstantInt>(Op1)->getZExtValue();
          if (SrcBitSize > ShiftAmt && SrcBitSize-ShiftAmt >= DestBitSize) {
            // Convert to unsigned.
            Value *N1 = InsertOperandCastBefore(Op0,
                                     Op0->getType()->getUnsignedVersion(), &CI);
            // Insert the new shift, which is now unsigned.
-            N1 = InsertNewInstBefore(new ShiftInst(Instruction::Shr, N1,
+            N1 = InsertNewInstBefore(new ShiftInst(Instruction::LShr, N1,
                                                   Op1, Src->getName()), CI);
            return new CastInst(N1, CI.getType());
          }
        }
        break;
@@ -5857,11 +5879,11 @@ Instruction *InstCombiner::visitCastInst
                // unsigned if it is signed.
                if (In->getType()->isSigned())
                  In = InsertCastBefore(
                         In, In->getType()->getUnsignedVersion(), CI);
                // Insert the shift to put the result in the low bit.
-                In = InsertNewInstBefore(new ShiftInst(Instruction::Shr, In,
+                In = InsertNewInstBefore(new ShiftInst(Instruction::LShr, In,
                                     ConstantInt::get(Type::UByteTy, ShiftAmt),
                                     In->getName()+".lobit"), CI);
              }

              if ((Op1CV != 0) == isSetNE) { // Toggle the low bit.
@@ -5932,11 +5954,12 @@ static unsigned GetSelectFoldableOperand
  case Instruction::Or:
  case Instruction::Xor:
    return 3;              // Can fold through either operand.
  case Instruction::Sub:   // Can only fold on the amount subtracted.
  case Instruction::Shl:   // Can only fold on the shift amount.
-  case Instruction::Shr:
+  case Instruction::LShr:
+  case Instruction::AShr:
    return 1;
  default:
    return 0;              // Cannot fold
  }
 }
@@ -5950,11 +5973,12 @@ static Constant *GetSelectFoldableConsta
  case Instruction::Sub:
  case Instruction::Or:
  case Instruction::Xor:
    return Constant::getNullValue(I->getType());
  case Instruction::Shl:
-  case Instruction::Shr:
+  case Instruction::LShr:
+  case Instruction::AShr:
    return Constant::getNullValue(Type::UByteTy);
  case Instruction::And:
    return ConstantInt::getAllOnesValue(I->getType());
  case Instruction::Mul:
    return ConstantInt::get(I->getType(), 1);
@@ -6123,11 +6147,11 @@ Instruction *InstCombiner::visitSelectIn

              // Now that X is signed, we have to make the all ones value.  Do
              // this by inserting a new SRA.
              unsigned Bits = X->getType()->getPrimitiveSizeInBits();
              Constant *ShAmt = ConstantInt::get(Type::UByteTy, Bits-1);
-              Instruction *SRA = new ShiftInst(Instruction::Shr, X,
+              Instruction *SRA = new ShiftInst(Instruction::AShr, X,
                                               ShAmt, "ones");
              InsertNewInstBefore(SRA, SI);

              // Finally, convert to the type of the select RHS.  If this is
              // smaller than the compare value, it will truncate the ones to
Index: lib/Transforms/Scalar/ScalarReplAggregates.cpp
===================================================================
RCS file: /var/cvs/llvm/llvm/lib/Transforms/Scalar/ScalarReplAggregates.cpp,v
retrieving revision 1.47
diff -t -d -u -p -5 -r1.47 ScalarReplAggregates.cpp
--- lib/Transforms/Scalar/ScalarReplAggregates.cpp      2 Nov 2006 20:25:50 -0000       1.47
+++ lib/Transforms/Scalar/ScalarReplAggregates.cpp      4 Nov 2006 00:19:30 -0000
@@ -611,14 +611,15 @@ void SROA::ConvertUsesToScalar(Value *Pt
          NV = new ExtractElementInst(NV, ConstantInt::get(Type::UIntTy, Elt),
                                      "tmp", LI);
        } else {
          if (Offset) {
            assert(NV->getType()->isInteger() && "Unknown promotion!");
-            if (Offset < TD.getTypeSize(NV->getType())*8)
-              NV = new ShiftInst(Instruction::Shr, NV,
-                                 ConstantInt::get(Type::UByteTy, Offset),
-                                 LI->getName(), LI);
+            if (Offset < TD.getTypeSize(NV->getType())*8) {
+              Instruction::OtherOps opcode = Instruction::LShr;
+              NV = new ShiftInst(opcode, NV, ConstantInt::get(Type::UByteTy,
+                                 Offset), LI->getName(), LI);
+            }
          } else {
            assert((NV->getType()->isInteger() ||
                    isa<PointerType>(NV->getType())) && "Unknown promotion!");
          }
          NV = new CastInst(NV, LI->getType(), LI->getName(), LI);
Index: lib/Transforms/Utils/Local.cpp
===================================================================
RCS file: /var/cvs/llvm/llvm/lib/Transforms/Utils/Local.cpp,v
retrieving revision 1.59
diff -t -d -u -p -5 -r1.59 Local.cpp
--- lib/Transforms/Utils/Local.cpp      20 Oct 2006 07:07:24 -0000      1.59
+++ lib/Transforms/Utils/Local.cpp      4 Nov 2006 00:19:30 -0000
@@ -118,11 +118,12 @@ Constant *llvm::ConstantFoldInstOperands
        return ConstantFoldCall(F, Args);
      }
    }
    return 0;
  case Instruction::Shl:
-  case Instruction::Shr:
+  case Instruction::LShr:
+  case Instruction::AShr:
    return ConstantExpr::get(Opc, Ops[0], Ops[1]);
  case Instruction::Cast:
    return ConstantExpr::getCast(Ops[0], DestTy);
  case Instruction::Select:
    return ConstantExpr::getSelect(Ops[0], Ops[1], Ops[2]);
Index: lib/Transforms/Utils/SimplifyCFG.cpp
===================================================================
RCS file: /var/cvs/llvm/llvm/lib/Transforms/Utils/SimplifyCFG.cpp,v
retrieving revision 1.103
diff -t -d -u -p -5 -r1.103 SimplifyCFG.cpp
--- lib/Transforms/Utils/SimplifyCFG.cpp        2 Nov 2006 20:25:50 -0000       1.103
+++ lib/Transforms/Utils/SimplifyCFG.cpp        4 Nov 2006 00:19:31 -0000
@@ -366,11 +366,12 @@ static bool DominatesMergePoint(Value *V
      case Instruction::Sub:
      case Instruction::And:
      case Instruction::Or:
      case Instruction::Xor:
      case Instruction::Shl:
-      case Instruction::Shr:
+      case Instruction::LShr:
+      case Instruction::AShr:
      case Instruction::SetEQ:
      case Instruction::SetNE:
      case Instruction::SetLT:
      case Instruction::SetGT:
      case Instruction::SetLE:
Index: lib/VMCore/ConstantFolding.cpp
===================================================================
RCS file: /var/cvs/llvm/llvm/lib/VMCore/ConstantFolding.cpp,v
retrieving revision 1.97
diff -t -d -u -p -5 -r1.97 ConstantFolding.cpp
--- lib/VMCore/ConstantFolding.cpp      2 Nov 2006 08:18:15 -0000       1.97
+++ lib/VMCore/ConstantFolding.cpp      4 Nov 2006 00:19:32 -0000
@@ -48,11 +48,12 @@ namespace {
    virtual Constant *fdiv(const Constant *V1, const Constant *V2) const = 0;
    virtual Constant *op_and(const Constant *V1, const Constant *V2) const = 0;
    virtual Constant *op_or (const Constant *V1, const Constant *V2) const = 0;
    virtual Constant *op_xor(const Constant *V1, const Constant *V2) const = 0;
    virtual Constant *shl(const Constant *V1, const Constant *V2) const = 0;
-    virtual Constant *shr(const Constant *V1, const Constant *V2) const = 0;
+    virtual Constant *lshr(const Constant *V1, const Constant *V2) const = 0;
+    virtual Constant *ashr(const Constant *V1, const Constant *V2) const = 0;
    virtual Constant *lessthan(const Constant *V1, const Constant *V2) const =0;
    virtual Constant *equalto(const Constant *V1, const Constant *V2) const = 0;

    // Casting operators.
    virtual Constant *castToBool  (const Constant *V) const = 0;
@@ -138,12 +139,15 @@ class VISIBILITY_HIDDEN TemplateRules :
    return SubClassName::Xor((const ArgType *)V1, (const ArgType *)V2);
  }
  virtual Constant *shl(const Constant *V1, const Constant *V2) const {
    return SubClassName::Shl((const ArgType *)V1, (const ArgType *)V2);
  }
-  virtual Constant *shr(const Constant *V1, const Constant *V2) const {
-    return SubClassName::Shr((const ArgType *)V1, (const ArgType *)V2);
+  virtual Constant *lshr(const Constant *V1, const Constant *V2) const {
+    return SubClassName::LShr((const ArgType *)V1, (const ArgType *)V2);
+  }
+  virtual Constant *ashr(const Constant *V1, const Constant *V2) const {
+    return SubClassName::AShr((const ArgType *)V1, (const ArgType *)V2);
  }

  virtual Constant *lessthan(const Constant *V1, const Constant *V2) const {
    return SubClassName::LessThan((const ArgType *)V1, (const ArgType *)V2);
  }
@@ -205,11 +209,12 @@ class VISIBILITY_HIDDEN TemplateRules :
  static Constant *FRem(const ArgType *V1, const ArgType *V2) { return 0; }
  static Constant *And (const ArgType *V1, const ArgType *V2) { return 0; }
  static Constant *Or  (const ArgType *V1, const ArgType *V2) { return 0; }
  static Constant *Xor (const ArgType *V1, const ArgType *V2) { return 0; }
  static Constant *Shl (const ArgType *V1, const ArgType *V2) { return 0; }
-  static Constant *Shr (const ArgType *V1, const ArgType *V2) { return 0; }
+  static Constant *LShr(const ArgType *V1, const ArgType *V2) { return 0; }
+  static Constant *AShr(const ArgType *V1, const ArgType *V2) { return 0; }
  static Constant *LessThan(const ArgType *V1, const ArgType *V2) {
    return 0;
  }
  static Constant *EqualTo(const ArgType *V1, const ArgType *V2) {
    return 0;
@@ -418,16 +423,10 @@ struct VISIBILITY_HIDDEN ConstantPackedR
    return EvalVectorOp(V1, V2, ConstantExpr::getOr);
  }
  static Constant *Xor(const ConstantPacked *V1, const ConstantPacked *V2) {
    return EvalVectorOp(V1, V2, ConstantExpr::getXor);
  }
-  static Constant *Shl(const ConstantPacked *V1, const ConstantPacked *V2) {
-    return EvalVectorOp(V1, V2, ConstantExpr::getShl);
-  }
-  static Constant *Shr(const ConstantPacked *V1, const ConstantPacked *V2) {
-    return EvalVectorOp(V1, V2, ConstantExpr::getShr);
-  }
  static Constant *LessThan(const ConstantPacked *V1, const ConstantPacked *V2){
    return 0;
  }
  static Constant *EqualTo(const ConstantPacked *V1, const ConstantPacked *V2) {
    for (unsigned i = 0, e = V1->getNumOperands(); i != e; ++i) {
@@ -579,13 +578,17 @@ struct VISIBILITY_HIDDEN DirectIntRules
    BuiltinType R =
      (BuiltinType)V1->getZExtValue() << (BuiltinType)V2->getZExtValue();
    return ConstantInt::get(*Ty, R);
  }

-  static Constant *Shr(const ConstantInt *V1, const ConstantInt *V2) {
-    BuiltinType R =
-      (BuiltinType)V1->getZExtValue() >> (BuiltinType)V2->getZExtValue();
+  static Constant *LShr(const ConstantInt *V1, const ConstantInt *V2) {
+    BuiltinType R = BuiltinType(V1->getZExtValue() >> V2->getZExtValue());
+    return ConstantInt::get(*Ty, R);
+  }
+
+  static Constant *AShr(const ConstantInt *V1, const ConstantInt *V2) {
+    BuiltinType R = BuiltinType(V1->getSExtValue() >> V2->getZExtValue());
    return ConstantInt::get(*Ty, R);
  }
 };
 }  // end anonymous namespace

@@ -1276,11 +1279,12 @@ Constant *llvm::ConstantFoldBinaryInstru
  case Instruction::FRem:    C = ConstRules::get(V1, V2).frem(V1, V2); break;
  case Instruction::And:     C = ConstRules::get(V1, V2).op_and(V1, V2); break;
  case Instruction::Or:      C = ConstRules::get(V1, V2).op_or (V1, V2); break;
  case Instruction::Xor:     C = ConstRules::get(V1, V2).op_xor(V1, V2); break;
  case Instruction::Shl:     C = ConstRules::get(V1, V2).shl(V1, V2); break;
-  case Instruction::Shr:     C = ConstRules::get(V1, V2).shr(V1, V2); break;
+  case Instruction::LShr:    C = ConstRules::get(V1, V2).lshr(V1, V2); break;
+  case Instruction::AShr:    C = ConstRules::get(V1, V2).ashr(V1, V2); break;
  case Instruction::SetEQ:   C = ConstRules::get(V1, V2).equalto(V1, V2); break;
  case Instruction::SetLT:   C = ConstRules::get(V1, V2).lessthan(V1, V2);break;
  case Instruction::SetGT:   C = ConstRules::get(V1, V2).lessthan(V2, V1);break;
  case Instruction::SetNE:   // V1 != V2  ===  !(V1 == V2)
    C = ConstRules::get(V1, V2).equalto(V1, V2);
@@ -1364,25 +1368,24 @@ Constant *llvm::ConstantFoldBinaryInstru
      if (!isa<UndefValue>(V2))                    // undef / X -> 0
        return Constant::getNullValue(V1->getType());
      return const_cast<Constant*>(V2);            // X / undef -> undef
    case Instruction::Or:                          // X | undef -> -1
      return ConstantInt::getAllOnesValue(V1->getType());
-    case Instruction::Shr:
-      if (!isa<UndefValue>(V2)) {
-        if (V1->getType()->isSigned())
-          return const_cast<Constant*>(V1);        // undef >>s X -> undef
-        // undef >>u X -> 0
-      } else if (isa<UndefValue>(V1)) {
-        return const_cast<Constant*>(V1);          // undef >> undef -> undef
-      } else {
-        if (V1->getType()->isSigned())
-          return const_cast<Constant*>(V1);        // X >>s undef -> X
-      }
-      return Constant::getNullValue(V1->getType());// X >>u undef -> 0
-
+    case Instruction::LShr:
+      if (isa<UndefValue>(V2) && isa<UndefValue>(V1))
+        return const_cast<Constant*>(V1);           // undef lshr undef -> undef
+      return Constant::getNullValue(V1->getType()); // X lshr undef -> 0
+                                                    // undef lshr X -> 0
+    case Instruction::AShr:
+      if (!isa<UndefValue>(V2))
+        return const_cast<Constant*>(V1);           // undef ashr X --> undef
+      else if (isa<UndefValue>(V1))
+        return const_cast<Constant*>(V1);           // undef ashr undef -> undef
+      else
+        return const_cast<Constant*>(V1);           // X ashr undef --> X
    case Instruction::Shl:
-      // undef << X -> 0   X << undef -> 0
+      // undef << X -> 0   or   X << undef -> 0
      return Constant::getNullValue(V1->getType());
    }
  }

  if (const ConstantExpr *CE1 = dyn_cast<ConstantExpr>(V1)) {
@@ -1464,11 +1467,12 @@ Constant *llvm::ConstantFoldBinaryInstru
      // Change the opcode as necessary to swap the operands.
      Opcode = SetCondInst::getSwappedCondition((Instruction::BinaryOps)Opcode);
      return ConstantFoldBinaryInstruction(Opcode, V2, V1);

    case Instruction::Shl:
-    case Instruction::Shr:
+    case Instruction::LShr:
+    case Instruction::AShr:
    case Instruction::Sub:
    case Instruction::SDiv:
    case Instruction::UDiv:
    case Instruction::FDiv:
    case Instruction::URem:
Index: lib/VMCore/Constants.cpp
===================================================================
RCS file: /var/cvs/llvm/llvm/lib/VMCore/Constants.cpp,v
retrieving revision 1.169
diff -t -d -u -p -5 -r1.169 Constants.cpp
--- lib/VMCore/Constants.cpp    2 Nov 2006 01:53:58 -0000       1.169
+++ lib/VMCore/Constants.cpp    4 Nov 2006 00:19:33 -0000
@@ -496,24 +496,15 @@ Constant *ConstantExpr::getSetGE(Constan
  return get(Instruction::SetGE, C1, C2);
 }
 Constant *ConstantExpr::getShl(Constant *C1, Constant *C2) {
  return get(Instruction::Shl, C1, C2);
 }
-Constant *ConstantExpr::getShr(Constant *C1, Constant *C2) {
-  return get(Instruction::Shr, C1, C2);
-}
-
-Constant *ConstantExpr::getUShr(Constant *C1, Constant *C2) {
-  if (C1->getType()->isUnsigned()) return getShr(C1, C2);
-  return getCast(getShr(getCast(C1,
-                    C1->getType()->getUnsignedVersion()), C2), C1->getType());
+Constant *ConstantExpr::getLShr(Constant *C1, Constant *C2) {
+  return get(Instruction::LShr, C1, C2);
 }
-
-Constant *ConstantExpr::getSShr(Constant *C1, Constant *C2) {
-  if (C1->getType()->isSigned()) return getShr(C1, C2);
-  return getCast(getShr(getCast(C1,
-                        C1->getType()->getSignedVersion()), C2), C1->getType());
+Constant *ConstantExpr::getAShr(Constant *C1, Constant *C2) {
+  return get(Instruction::AShr, C1, C2);
 }

 /// getWithOperandReplaced - Return a constant expression identical to this
 /// one, but with the specified operand set to the specified value.
 Constant *ConstantExpr::getWithOperandReplaced(unsigned OpNo,
@@ -1328,11 +1319,13 @@ namespace llvm {
    static ConstantExpr *create(const Type *Ty, const ExprMapKeyType &V) {
      if (V.first == Instruction::Cast)
        return new UnaryConstantExpr(Instruction::Cast, V.second[0], Ty);
      if ((V.first >= Instruction::BinaryOpsBegin &&
           V.first < Instruction::BinaryOpsEnd) ||
-          V.first == Instruction::Shl || V.first == Instruction::Shr)
+          V.first == Instruction::Shl           ||
+          V.first == Instruction::LShr          ||
+          V.first == Instruction::AShr)
        return new BinaryConstantExpr(V.first, V.second[0], V.second[1]);
      if (V.first == Instruction::Select)
        return new SelectConstantExpr(V.second[0], V.second[1], V.second[2]);
      if (V.first == Instruction::ExtractElement)
        return new ExtractElementConstantExpr(V.second[0], V.second[1]);
@@ -1362,11 +1355,12 @@ namespace llvm {
        New = ConstantExpr::getSelectTy(NewTy, OldC->getOperand(0),
                                        OldC->getOperand(1),
                                        OldC->getOperand(2));
        break;
      case Instruction::Shl:
-      case Instruction::Shr:
+      case Instruction::LShr:
+      case Instruction::AShr:
        New = ConstantExpr::getShiftTy(NewTy, OldC->getOpcode(),
                                     OldC->getOperand(0), OldC->getOperand(1));
        break;
      default:
        assert(OldC->getOpcode() >= Instruction::BinaryOpsBegin &&
@@ -1451,11 +1445,12 @@ Constant *ConstantExpr::getPtrPtrFromArr
  return ConstantExpr::getGetElementPtr(C, Indices);
 }

 Constant *ConstantExpr::getTy(const Type *ReqTy, unsigned Opcode,
                              Constant *C1, Constant *C2) {
-  if (Opcode == Instruction::Shl || Opcode == Instruction::Shr)
+  if (Opcode == Instruction::Shl || Opcode == Instruction::LShr ||
+      Opcode == Instruction::AShr)
    return getShiftTy(ReqTy, Opcode, C1, C2);
  // Check the operands for consistency first
  assert(Opcode >= Instruction::BinaryOpsBegin &&
         Opcode <  Instruction::BinaryOpsEnd   &&
         "Invalid opcode in binary constant expression");
@@ -1519,13 +1514,14 @@ Constant *ConstantExpr::get(unsigned Opc
  case Instruction::SetLT: case Instruction::SetGT: case Instruction::SetLE:
  case Instruction::SetGE: case Instruction::SetEQ: case Instruction::SetNE:
    assert(C1->getType() == C2->getType() && "Op types should be identical!");
    break;
  case Instruction::Shl:
-  case Instruction::Shr:
+  case Instruction::LShr:
+  case Instruction::AShr:
    assert(C2->getType() == Type::UByteTy && "Shift should be by ubyte!");
-    assert((C1->getType()->isInteger() || isa<PackedType>(C1->getType())) &&
+    assert(C1->getType()->isInteger() &&
           "Tried to create a shift operation on a non-integer type!");
    break;
  default:
    break;
  }
@@ -1556,12 +1552,13 @@ Constant *ConstantExpr::getSelectTy(cons

 /// getShiftTy - Return a shift left or shift right constant expr
 Constant *ConstantExpr::getShiftTy(const Type *ReqTy, unsigned Opcode,
                                   Constant *C1, Constant *C2) {
  // Check the operands for consistency first
-  assert((Opcode == Instruction::Shl ||
-          Opcode == Instruction::Shr) &&
+  assert((Opcode == Instruction::Shl   ||
+          Opcode == Instruction::LShr  ||
+          Opcode == Instruction::AShr) &&
         "Invalid opcode in binary constant expression");
  assert(C1->getType()->isIntegral() && C2->getType() == Type::UByteTy &&
         "Invalid operand types for Shift constant expr!");

  if (Constant *FC = ConstantFoldBinaryInstruction(Opcode, C1, C2))
Index: lib/VMCore/Instruction.cpp
===================================================================
RCS file: /var/cvs/llvm/llvm/lib/VMCore/Instruction.cpp,v
retrieving revision 1.56
diff -t -d -u -p -5 -r1.56 Instruction.cpp
--- lib/VMCore/Instruction.cpp  2 Nov 2006 01:53:58 -0000       1.56
+++ lib/VMCore/Instruction.cpp  4 Nov 2006 00:19:33 -0000
@@ -126,11 +126,12 @@ const char *Instruction::getOpcodeName(u
  case PHI:     return "phi";
  case Cast:    return "cast";
  case Select:  return "select";
  case Call:    return "call";
  case Shl:     return "shl";
-  case Shr:     return "shr";
+  case LShr:     return "lshr";
+  case AShr:     return "ashr";
  case VAArg:   return "va_arg";
  case ExtractElement: return "extractelement";
  case InsertElement: return "insertelement";
  case ShuffleVector: return "shufflevector";

Index: lib/VMCore/Instructions.cpp
===================================================================
RCS file: /var/cvs/llvm/llvm/lib/VMCore/Instructions.cpp,v
retrieving revision 1.45
diff -t -d -u -p -5 -r1.45 Instructions.cpp
--- lib/VMCore/Instructions.cpp 2 Nov 2006 01:53:58 -0000       1.45
+++ lib/VMCore/Instructions.cpp 4 Nov 2006 00:19:34 -0000
@@ -1228,11 +1228,11 @@ bool BinaryOperator::swapOperands() {
 //===----------------------------------------------------------------------===//

 /// isLogicalShift - Return true if this is a logical shift left or a logical
 /// shift right.
 bool ShiftInst::isLogicalShift() const {
-  return getOpcode() == Instruction::Shl || getType()->isUnsigned();
+  return getOpcode() == Instruction::Shl || getOpcode() == Instruction::LShr;
 }

 //===----------------------------------------------------------------------===//
 //                                CastInst Class
 //===----------------------------------------------------------------------===//
Index: projects/Stacker/lib/compiler/StackerCompiler.cpp
===================================================================
RCS file: /var/cvs/llvm/llvm/projects/Stacker/lib/compiler/StackerCompiler.cpp,v
retrieving revision 1.22
diff -t -d -u -p -5 -r1.22 StackerCompiler.cpp
--- projects/Stacker/lib/compiler/StackerCompiler.cpp   2 Nov 2006 20:25:50 -0000       1.22
+++ projects/Stacker/lib/compiler/StackerCompiler.cpp   4 Nov 2006 00:19:35 -0000
@@ -1255,11 +1255,11 @@ StackerCompiler::handle_word( int tkn )
        if (echo) bb->setName("SHR");
        LoadInst* op1 = cast<LoadInst>(pop_integer(bb));
        LoadInst* op2 = cast<LoadInst>(pop_integer(bb));
        CastInst* castop = new CastInst( op1, Type::UByteTy );
        bb->getInstList().push_back( castop );
-        ShiftInst* shrop = new ShiftInst( Instruction::Shr, op2, castop );
+        ShiftInst* shrop = new ShiftInst( Instruction::AShr, op2, castop );
        bb->getInstList().push_back( shrop );
        push_value( bb, shrop );
        break;
    }

Index: tools/llvm2cpp/CppWriter.cpp
===================================================================
RCS file: /var/cvs/llvm/llvm/tools/llvm2cpp/CppWriter.cpp,v
retrieving revision 1.20
diff -t -d -u -p -5 -r1.20 CppWriter.cpp
--- tools/llvm2cpp/CppWriter.cpp        2 Nov 2006 20:25:50 -0000       1.20
+++ tools/llvm2cpp/CppWriter.cpp        4 Nov 2006 00:19:39 -0000
@@ -786,11 +786,12 @@ void CppWriter::printConstant(const Cons
        case Instruction::SetLE:  Out << "getSetLE"; break;
        case Instruction::SetGE:  Out << "getSetGE"; break;
        case Instruction::SetLT:  Out << "getSetLT"; break;
        case Instruction::SetGT:  Out << "getSetGT"; break;
        case Instruction::Shl:    Out << "getShl"; break;
-        case Instruction::Shr:    Out << "getShr"; break;
+        case Instruction::LShr:    Out << "getLShr"; break;
+        case Instruction::AShr:    Out << "getAShr"; break;
        case Instruction::Select: Out << "getSelect"; break;
        case Instruction::ExtractElement: Out << "getExtractElement"; break;
        case Instruction::InsertElement:  Out << "getInsertElement"; break;
        case Instruction::ShuffleVector:  Out << "getShuffleVector"; break;
        default:
@@ -1032,11 +1033,12 @@ CppWriter::printInstruction(const Instru
    case Instruction::FRem:
    case Instruction::And:
    case Instruction::Or:
    case Instruction::Xor:
    case Instruction::Shl:
-    case Instruction::Shr:{
+    case Instruction::LShr:
+    case Instruction::AShr:{
      Out << "BinaryOperator* " << iName << " = BinaryOperator::create(";
      switch (I->getOpcode()) {
        case Instruction::Add: Out << "Instruction::Add"; break;
        case Instruction::Sub: Out << "Instruction::Sub"; break;
        case Instruction::Mul: Out << "Instruction::Mul"; break;
@@ -1048,11 +1050,12 @@ CppWriter::printInstruction(const Instru
        case Instruction::FRem:Out << "Instruction::FRem"; break;
        case Instruction::And: Out << "Instruction::And"; break;
        case Instruction::Or:  Out << "Instruction::Or";  break;
        case Instruction::Xor: Out << "Instruction::Xor"; break;
        case Instruction::Shl: Out << "Instruction::Shl"; break;
-        case Instruction::Shr: Out << "Instruction::Shr"; break;
+        case Instruction::LShr:Out << "Instruction::LShr"; break;
+        case Instruction::AShr:Out << "Instruction::AShr"; break;
        default: Out << "Instruction::BadOpCode"; break;
      }
      Out << ", " << opNames[0] << ", " << opNames[1] << ", \"";
      printEscapedString(I->getName());
      Out << "\", " << bbname << ");";