content: /*
  * generated by Xtext
  */
  package com.intel.llvm.ireditor.services;
  
  import com.google.inject.Singleton;
  import com.google.inject.Inject;
  
  import java.util.List;
  
  import org.eclipse.xtext.*;
  import org.eclipse.xtext.service.GrammarProvider;
  import org.eclipse.xtext.service.AbstractElementFinder.*;
  
  
  @Singleton
  public class LLVM_IRGrammarAccess extends AbstractGrammarElementFinder {
  	
  	
  	public class ModelElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Model");
  		private final Assignment cElementsAssignment = (Assignment)rule.eContents().get(1);
  		private final RuleCall cElementsTopLevelElementParserRuleCall_0 = (RuleCall)cElementsAssignment.eContents().get(0);
  		
  		//Model:
  		//
  		//	elements+=TopLevelElement*;
  		public ParserRule getRule() { return rule; }
  
  		//elements+=TopLevelElement*
  		public Assignment getElementsAssignment() { return cElementsAssignment; }
  
  		//TopLevelElement
  		public RuleCall getElementsTopLevelElementParserRuleCall_0() { return cElementsTopLevelElementParserRuleCall_0; }
  	}
  
  	public class TopLevelElementElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "TopLevelElement");
  		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
  		private final RuleCall cTypeDefParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
  		private final RuleCall cInlineAsmParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
  		private final RuleCall cTargetInfoParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
  		private final RuleCall cGlobalValueParserRuleCall_3 = (RuleCall)cAlternatives.eContents().get(3);
  		private final RuleCall cNamedMetadataParserRuleCall_4 = (RuleCall)cAlternatives.eContents().get(4);
  		private final RuleCall cAttributeGroupParserRuleCall_5 = (RuleCall)cAlternatives.eContents().get(5);
  		
  		//TopLevelElement:
  		//
  		//	TypeDef | InlineAsm | TargetInfo | GlobalValue | NamedMetadata | AttributeGroup;
  		public ParserRule getRule() { return rule; }
  
  		//TypeDef | InlineAsm | TargetInfo | GlobalValue | NamedMetadata | AttributeGroup
  		public Alternatives getAlternatives() { return cAlternatives; }
  
  		//TypeDef
  		public RuleCall getTypeDefParserRuleCall_0() { return cTypeDefParserRuleCall_0; }
  
  		//InlineAsm
  		public RuleCall getInlineAsmParserRuleCall_1() { return cInlineAsmParserRuleCall_1; }
  
  		//TargetInfo
  		public RuleCall getTargetInfoParserRuleCall_2() { return cTargetInfoParserRuleCall_2; }
  
  		//GlobalValue
  		public RuleCall getGlobalValueParserRuleCall_3() { return cGlobalValueParserRuleCall_3; }
  
  		//NamedMetadata
  		public RuleCall getNamedMetadataParserRuleCall_4() { return cNamedMetadataParserRuleCall_4; }
  
  		//AttributeGroup
  		public RuleCall getAttributeGroupParserRuleCall_5() { return cAttributeGroupParserRuleCall_5; }
  	}
  
  	public class AttributeGroupElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "AttributeGroup");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Keyword cAttributesKeyword_0 = (Keyword)cGroup.eContents().get(0);
  		private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
  		private final RuleCall cNameATTRIBUTE_IDTerminalRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
  		private final Keyword cEqualsSignKeyword_2 = (Keyword)cGroup.eContents().get(2);
  		private final Keyword cLeftCurlyBracketKeyword_3 = (Keyword)cGroup.eContents().get(3);
  		private final Alternatives cAlternatives_4 = (Alternatives)cGroup.eContents().get(4);
  		private final Assignment cAttributesAssignment_4_0 = (Assignment)cAlternatives_4.eContents().get(0);
  		private final RuleCall cAttributesFunctionAttributeParserRuleCall_4_0_0 = (RuleCall)cAttributesAssignment_4_0.eContents().get(0);
  		private final Group cGroup_4_1 = (Group)cAlternatives_4.eContents().get(1);
  		private final Assignment cAlignstackAssignment_4_1_0 = (Assignment)cGroup_4_1.eContents().get(0);
  		private final RuleCall cAlignstackAlignStackParserRuleCall_4_1_0_0 = (RuleCall)cAlignstackAssignment_4_1_0.eContents().get(0);
  		private final Keyword cEqualsSignKeyword_4_1_1 = (Keyword)cGroup_4_1.eContents().get(1);
  		private final Assignment cAlignstackValueAssignment_4_1_2 = (Assignment)cGroup_4_1.eContents().get(2);
  		private final RuleCall cAlignstackValueINTEGERTerminalRuleCall_4_1_2_0 = (RuleCall)cAlignstackValueAssignment_4_1_2.eContents().get(0);
  		private final Assignment cTargetSpecificAttributesAssignment_4_2 = (Assignment)cAlternatives_4.eContents().get(2);
  		private final RuleCall cTargetSpecificAttributesTargetSpecificAttributeParserRuleCall_4_2_0 = (RuleCall)cTargetSpecificAttributesAssignment_4_2.eContents().get(0);
  		private final Keyword cRightCurlyBracketKeyword_5 = (Keyword)cGroup.eContents().get(5);
  		
  		//AttributeGroup:
  		//
  		//	"attributes" name=ATTRIBUTE_ID "=" "{" (attributes+=FunctionAttribute | alignstack+=AlignStack "="
  		//
  		//	alignstackValue+=INTEGER | targetSpecificAttributes+=TargetSpecificAttribute)+ "}";
  		public ParserRule getRule() { return rule; }
  
  		//"attributes" name=ATTRIBUTE_ID "=" "{" (attributes+=FunctionAttribute | alignstack+=AlignStack "="
  		//
  		//alignstackValue+=INTEGER | targetSpecificAttributes+=TargetSpecificAttribute)+ "}"
  		public Group getGroup() { return cGroup; }
  
  		//"attributes"
  		public Keyword getAttributesKeyword_0() { return cAttributesKeyword_0; }
  
  		//name=ATTRIBUTE_ID
  		public Assignment getNameAssignment_1() { return cNameAssignment_1; }
  
  		//ATTRIBUTE_ID
  		public RuleCall getNameATTRIBUTE_IDTerminalRuleCall_1_0() { return cNameATTRIBUTE_IDTerminalRuleCall_1_0; }
  
  		//"="
  		public Keyword getEqualsSignKeyword_2() { return cEqualsSignKeyword_2; }
  
  		//"{"
  		public Keyword getLeftCurlyBracketKeyword_3() { return cLeftCurlyBracketKeyword_3; }
  
  		//(attributes+=FunctionAttribute | alignstack+=AlignStack "=" alignstackValue+=INTEGER |
  		//
  		//targetSpecificAttributes+=TargetSpecificAttribute)+
  		public Alternatives getAlternatives_4() { return cAlternatives_4; }
  
  		//attributes+=FunctionAttribute
  		public Assignment getAttributesAssignment_4_0() { return cAttributesAssignment_4_0; }
  
  		//FunctionAttribute
  		public RuleCall getAttributesFunctionAttributeParserRuleCall_4_0_0() { return cAttributesFunctionAttributeParserRuleCall_4_0_0; }
  
  		//alignstack+=AlignStack "=" alignstackValue+=INTEGER
  		public Group getGroup_4_1() { return cGroup_4_1; }
  
  		//alignstack+=AlignStack
  		public Assignment getAlignstackAssignment_4_1_0() { return cAlignstackAssignment_4_1_0; }
  
  		//AlignStack
  		public RuleCall getAlignstackAlignStackParserRuleCall_4_1_0_0() { return cAlignstackAlignStackParserRuleCall_4_1_0_0; }
  
  		//"="
  		public Keyword getEqualsSignKeyword_4_1_1() { return cEqualsSignKeyword_4_1_1; }
  
  		//alignstackValue+=INTEGER
  		public Assignment getAlignstackValueAssignment_4_1_2() { return cAlignstackValueAssignment_4_1_2; }
  
  		//INTEGER
  		public RuleCall getAlignstackValueINTEGERTerminalRuleCall_4_1_2_0() { return cAlignstackValueINTEGERTerminalRuleCall_4_1_2_0; }
  
  		//targetSpecificAttributes+=TargetSpecificAttribute
  		public Assignment getTargetSpecificAttributesAssignment_4_2() { return cTargetSpecificAttributesAssignment_4_2; }
  
  		//TargetSpecificAttribute
  		public RuleCall getTargetSpecificAttributesTargetSpecificAttributeParserRuleCall_4_2_0() { return cTargetSpecificAttributesTargetSpecificAttributeParserRuleCall_4_2_0; }
  
  		//"}"
  		public Keyword getRightCurlyBracketKeyword_5() { return cRightCurlyBracketKeyword_5; }
  	}
  
  	public class TargetSpecificAttributeElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "TargetSpecificAttribute");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cNameAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final RuleCall cNameSTRINGTerminalRuleCall_0_0 = (RuleCall)cNameAssignment_0.eContents().get(0);
  		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
  		private final Keyword cEqualsSignKeyword_1_0 = (Keyword)cGroup_1.eContents().get(0);
  		private final Assignment cValueAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
  		private final RuleCall cValueSTRINGTerminalRuleCall_1_1_0 = (RuleCall)cValueAssignment_1_1.eContents().get(0);
  		
  		//TargetSpecificAttribute:
  		//
  		//	name=STRING ("=" value=STRING)?;
  		public ParserRule getRule() { return rule; }
  
  		//name=STRING ("=" value=STRING)?
  		public Group getGroup() { return cGroup; }
  
  		//name=STRING
  		public Assignment getNameAssignment_0() { return cNameAssignment_0; }
  
  		//STRING
  		public RuleCall getNameSTRINGTerminalRuleCall_0_0() { return cNameSTRINGTerminalRuleCall_0_0; }
  
  		//("=" value=STRING)?
  		public Group getGroup_1() { return cGroup_1; }
  
  		//"="
  		public Keyword getEqualsSignKeyword_1_0() { return cEqualsSignKeyword_1_0; }
  
  		//value=STRING
  		public Assignment getValueAssignment_1_1() { return cValueAssignment_1_1; }
  
  		//STRING
  		public RuleCall getValueSTRINGTerminalRuleCall_1_1_0() { return cValueSTRINGTerminalRuleCall_1_1_0; }
  	}
  
  	public class NamedMetadataElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "NamedMetadata");
  		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
  		private final Group cGroup_0 = (Group)cAlternatives.eContents().get(0);
  		private final Assignment cNameAssignment_0_0 = (Assignment)cGroup_0.eContents().get(0);
  		private final RuleCall cNameMETA_INTTerminalRuleCall_0_0_0 = (RuleCall)cNameAssignment_0_0.eContents().get(0);
  		private final Keyword cEqualsSignKeyword_0_1 = (Keyword)cGroup_0.eContents().get(1);
  		private final Keyword cMetadataKeyword_0_2 = (Keyword)cGroup_0.eContents().get(2);
  		private final Assignment cNodeAssignment_0_3 = (Assignment)cGroup_0.eContents().get(3);
  		private final RuleCall cNodeMetadataNodeParserRuleCall_0_3_0 = (RuleCall)cNodeAssignment_0_3.eContents().get(0);
  		private final Group cGroup_1 = (Group)cAlternatives.eContents().get(1);
  		private final Assignment cNameAssignment_1_0 = (Assignment)cGroup_1.eContents().get(0);
  		private final RuleCall cNameMETA_NAMETerminalRuleCall_1_0_0 = (RuleCall)cNameAssignment_1_0.eContents().get(0);
  		private final Keyword cEqualsSignKeyword_1_1 = (Keyword)cGroup_1.eContents().get(1);
  		private final Assignment cNodeAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
  		private final RuleCall cNodeMetadataNodeParserRuleCall_1_2_0 = (RuleCall)cNodeAssignment_1_2.eContents().get(0);
  		
  		//NamedMetadata:
  		//
  		//	name=META_INT "=" "metadata" node=MetadataNode | name=META_NAME "=" node=MetadataNode;
  		public ParserRule getRule() { return rule; }
  
  		//name=META_INT "=" "metadata" node=MetadataNode | name=META_NAME "=" node=MetadataNode
  		public Alternatives getAlternatives() { return cAlternatives; }
  
  		//name=META_INT "=" "metadata" node=MetadataNode
  		public Group getGroup_0() { return cGroup_0; }
  
  		//name=META_INT
  		public Assignment getNameAssignment_0_0() { return cNameAssignment_0_0; }
  
  		//META_INT
  		public RuleCall getNameMETA_INTTerminalRuleCall_0_0_0() { return cNameMETA_INTTerminalRuleCall_0_0_0; }
  
  		//"="
  		public Keyword getEqualsSignKeyword_0_1() { return cEqualsSignKeyword_0_1; }
  
  		//"metadata"
  		public Keyword getMetadataKeyword_0_2() { return cMetadataKeyword_0_2; }
  
  		//node=MetadataNode
  		public Assignment getNodeAssignment_0_3() { return cNodeAssignment_0_3; }
  
  		//MetadataNode
  		public RuleCall getNodeMetadataNodeParserRuleCall_0_3_0() { return cNodeMetadataNodeParserRuleCall_0_3_0; }
  
  		//name=META_NAME "=" node=MetadataNode
  		public Group getGroup_1() { return cGroup_1; }
  
  		//name=META_NAME
  		public Assignment getNameAssignment_1_0() { return cNameAssignment_1_0; }
  
  		//META_NAME
  		public RuleCall getNameMETA_NAMETerminalRuleCall_1_0_0() { return cNameMETA_NAMETerminalRuleCall_1_0_0; }
  
  		//"="
  		public Keyword getEqualsSignKeyword_1_1() { return cEqualsSignKeyword_1_1; }
  
  		//node=MetadataNode
  		public Assignment getNodeAssignment_1_2() { return cNodeAssignment_1_2; }
  
  		//MetadataNode
  		public RuleCall getNodeMetadataNodeParserRuleCall_1_2_0() { return cNodeMetadataNodeParserRuleCall_1_2_0; }
  	}
  
  	public class MetadataRefElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "MetadataRef");
  		private final Assignment cRefAssignment = (Assignment)rule.eContents().get(1);
  		private final CrossReference cRefNamedMetadataCrossReference_0 = (CrossReference)cRefAssignment.eContents().get(0);
  		private final RuleCall cRefNamedMetadataMetadataIdentifierParserRuleCall_0_1 = (RuleCall)cRefNamedMetadataCrossReference_0.eContents().get(1);
  		
  		//MetadataRef:
  		//
  		//	ref=[NamedMetadata|MetadataIdentifier];
  		public ParserRule getRule() { return rule; }
  
  		//ref=[NamedMetadata|MetadataIdentifier]
  		public Assignment getRefAssignment() { return cRefAssignment; }
  
  		//[NamedMetadata|MetadataIdentifier]
  		public CrossReference getRefNamedMetadataCrossReference_0() { return cRefNamedMetadataCrossReference_0; }
  
  		//MetadataIdentifier
  		public RuleCall getRefNamedMetadataMetadataIdentifierParserRuleCall_0_1() { return cRefNamedMetadataMetadataIdentifierParserRuleCall_0_1; }
  	}
  
  	public class MetadataIdentifierElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "MetadataIdentifier");
  		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
  		private final RuleCall cMETA_INTTerminalRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
  		private final RuleCall cMETA_NAMETerminalRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
  		
  		//MetadataIdentifier:
  		//
  		//	META_INT | META_NAME;
  		public ParserRule getRule() { return rule; }
  
  		//META_INT | META_NAME
  		public Alternatives getAlternatives() { return cAlternatives; }
  
  		//META_INT
  		public RuleCall getMETA_INTTerminalRuleCall_0() { return cMETA_INTTerminalRuleCall_0; }
  
  		//META_NAME
  		public RuleCall getMETA_NAMETerminalRuleCall_1() { return cMETA_NAMETerminalRuleCall_1; }
  	}
  
  	public class ValueRefElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ValueRef");
  		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
  		private final RuleCall cGlobalValueRefParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
  		private final RuleCall cLocalValueRefParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
  		
  		//ValueRef:
  		//
  		//	GlobalValueRef | LocalValueRef;
  		public ParserRule getRule() { return rule; }
  
  		//GlobalValueRef | LocalValueRef
  		public Alternatives getAlternatives() { return cAlternatives; }
  
  		//GlobalValueRef
  		public RuleCall getGlobalValueRefParserRuleCall_0() { return cGlobalValueRefParserRuleCall_0; }
  
  		//LocalValueRef
  		public RuleCall getLocalValueRefParserRuleCall_1() { return cLocalValueRefParserRuleCall_1; }
  	}
  
  	public class GlobalValueRefElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "GlobalValueRef");
  		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
  		private final Assignment cConstantAssignment_0 = (Assignment)cAlternatives.eContents().get(0);
  		private final RuleCall cConstantConstantParserRuleCall_0_0 = (RuleCall)cConstantAssignment_0.eContents().get(0);
  		private final Assignment cMetadataAssignment_1 = (Assignment)cAlternatives.eContents().get(1);
  		private final RuleCall cMetadataMetadataRefParserRuleCall_1_0 = (RuleCall)cMetadataAssignment_1.eContents().get(0);
  		
  		//GlobalValueRef:
  		//
  		//	constant=Constant | metadata=MetadataRef;
  		public ParserRule getRule() { return rule; }
  
  		//constant=Constant | metadata=MetadataRef
  		public Alternatives getAlternatives() { return cAlternatives; }
  
  		//constant=Constant
  		public Assignment getConstantAssignment_0() { return cConstantAssignment_0; }
  
  		//Constant
  		public RuleCall getConstantConstantParserRuleCall_0_0() { return cConstantConstantParserRuleCall_0_0; }
  
  		//metadata=MetadataRef
  		public Assignment getMetadataAssignment_1() { return cMetadataAssignment_1; }
  
  		//MetadataRef
  		public RuleCall getMetadataMetadataRefParserRuleCall_1_0() { return cMetadataMetadataRefParserRuleCall_1_0; }
  	}
  
  	public class LocalValueRefElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "LocalValueRef");
  		private final Assignment cRefAssignment = (Assignment)rule.eContents().get(1);
  		private final CrossReference cRefLocalValueCrossReference_0 = (CrossReference)cRefAssignment.eContents().get(0);
  		private final RuleCall cRefLocalValueLOCAL_IDTerminalRuleCall_0_1 = (RuleCall)cRefLocalValueCrossReference_0.eContents().get(1);
  		
  		//LocalValueRef:
  		//
  		//	ref=[LocalValue|LOCAL_ID];
  		public ParserRule getRule() { return rule; }
  
  		//ref=[LocalValue|LOCAL_ID]
  		public Assignment getRefAssignment() { return cRefAssignment; }
  
  		//[LocalValue|LOCAL_ID]
  		public CrossReference getRefLocalValueCrossReference_0() { return cRefLocalValueCrossReference_0; }
  
  		//LOCAL_ID
  		public RuleCall getRefLocalValueLOCAL_IDTerminalRuleCall_0_1() { return cRefLocalValueLOCAL_IDTerminalRuleCall_0_1; }
  	}
  
  	public class GlobalValueElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "GlobalValue");
  		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
  		private final RuleCall cGlobalVariableParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
  		private final RuleCall cFunctionParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
  		private final RuleCall cAliasParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
  		
  		//GlobalValue:
  		//
  		//	GlobalVariable | Function | Alias;
  		public ParserRule getRule() { return rule; }
  
  		//GlobalVariable | Function | Alias
  		public Alternatives getAlternatives() { return cAlternatives; }
  
  		//GlobalVariable
  		public RuleCall getGlobalVariableParserRuleCall_0() { return cGlobalVariableParserRuleCall_0; }
  
  		//Function
  		public RuleCall getFunctionParserRuleCall_1() { return cFunctionParserRuleCall_1; }
  
  		//Alias
  		public RuleCall getAliasParserRuleCall_2() { return cAliasParserRuleCall_2; }
  	}
  
  	public class GlobalValueDefElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "GlobalValueDef");
  		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
  		private final RuleCall cGlobalVariableParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
  		private final RuleCall cFunctionHeaderParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
  		private final RuleCall cAliasParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
  		
  		//GlobalValueDef:
  		//
  		//	GlobalVariable | FunctionHeader | Alias;
  		public ParserRule getRule() { return rule; }
  
  		//GlobalVariable | FunctionHeader | Alias
  		public Alternatives getAlternatives() { return cAlternatives; }
  
  		//GlobalVariable
  		public RuleCall getGlobalVariableParserRuleCall_0() { return cGlobalVariableParserRuleCall_0; }
  
  		//FunctionHeader
  		public RuleCall getFunctionHeaderParserRuleCall_1() { return cFunctionHeaderParserRuleCall_1; }
  
  		//Alias
  		public RuleCall getAliasParserRuleCall_2() { return cAliasParserRuleCall_2; }
  	}
  
  	public class LocalValueElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "LocalValue");
  		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
  		private final RuleCall cNamedInstructionParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
  		private final RuleCall cParameterParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
  		
  		//LocalValue:
  		//
  		//	NamedInstruction | Parameter;
  		public ParserRule getRule() { return rule; }
  
  		//NamedInstruction | Parameter
  		public Alternatives getAlternatives() { return cAlternatives; }
  
  		//NamedInstruction
  		public RuleCall getNamedInstructionParserRuleCall_0() { return cNamedInstructionParserRuleCall_0; }
  
  		//Parameter
  		public RuleCall getParameterParserRuleCall_1() { return cParameterParserRuleCall_1; }
  	}
  
  	public class NamedInstructionElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "NamedInstruction");
  		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
  		private final RuleCall cStartingInstructionParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
  		private final RuleCall cNamedMiddleInstructionParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
  		private final RuleCall cNamedTerminatorInstructionParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
  		
  		//NamedInstruction:
  		//
  		//	StartingInstruction | NamedMiddleInstruction | NamedTerminatorInstruction;
  		public ParserRule getRule() { return rule; }
  
  		//StartingInstruction | NamedMiddleInstruction | NamedTerminatorInstruction
  		public Alternatives getAlternatives() { return cAlternatives; }
  
  		//StartingInstruction
  		public RuleCall getStartingInstructionParserRuleCall_0() { return cStartingInstructionParserRuleCall_0; }
  
  		//NamedMiddleInstruction
  		public RuleCall getNamedMiddleInstructionParserRuleCall_1() { return cNamedMiddleInstructionParserRuleCall_1; }
  
  		//NamedTerminatorInstruction
  		public RuleCall getNamedTerminatorInstructionParserRuleCall_2() { return cNamedTerminatorInstructionParserRuleCall_2; }
  	}
  
  	public class InstructionElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Instruction");
  		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
  		private final RuleCall cStartingInstructionParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
  		private final RuleCall cMiddleInstructionParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
  		private final RuleCall cTerminatorInstructionParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
  		
  		//Instruction:
  		//
  		//	StartingInstruction | MiddleInstruction | TerminatorInstruction;
  		public ParserRule getRule() { return rule; }
  
  		//StartingInstruction | MiddleInstruction | TerminatorInstruction
  		public Alternatives getAlternatives() { return cAlternatives; }
  
  		//StartingInstruction
  		public RuleCall getStartingInstructionParserRuleCall_0() { return cStartingInstructionParserRuleCall_0; }
  
  		//MiddleInstruction
  		public RuleCall getMiddleInstructionParserRuleCall_1() { return cMiddleInstructionParserRuleCall_1; }
  
  		//TerminatorInstruction
  		public RuleCall getTerminatorInstructionParserRuleCall_2() { return cTerminatorInstructionParserRuleCall_2; }
  	}
  
  	public class AliasElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Alias");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cNameAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final RuleCall cNameGlobalNameParserRuleCall_0_0 = (RuleCall)cNameAssignment_0.eContents().get(0);
  		private final Keyword cAliasKeyword_1 = (Keyword)cGroup.eContents().get(1);
  		private final Assignment cLinkageAssignment_2 = (Assignment)cGroup.eContents().get(2);
  		private final RuleCall cLinkageLinkageParserRuleCall_2_0 = (RuleCall)cLinkageAssignment_2.eContents().get(0);
  		private final Assignment cVisibilityAssignment_3 = (Assignment)cGroup.eContents().get(3);
  		private final RuleCall cVisibilityVisibilityParserRuleCall_3_0 = (RuleCall)cVisibilityAssignment_3.eContents().get(0);
  		private final Assignment cTypeAssignment_4 = (Assignment)cGroup.eContents().get(4);
  		private final RuleCall cTypeTypeParserRuleCall_4_0 = (RuleCall)cTypeAssignment_4.eContents().get(0);
  		private final Assignment cAliaseeAssignment_5 = (Assignment)cGroup.eContents().get(5);
  		private final RuleCall cAliaseeAliaseeParserRuleCall_5_0 = (RuleCall)cAliaseeAssignment_5.eContents().get(0);
  		
  		//Alias:
  		//
  		//	name=GlobalName "alias" linkage=Linkage? visibility=Visibility? type=Type aliasee=Aliasee;
  		public ParserRule getRule() { return rule; }
  
  		//name=GlobalName "alias" linkage=Linkage? visibility=Visibility? type=Type aliasee=Aliasee
  		public Group getGroup() { return cGroup; }
  
  		//name=GlobalName
  		public Assignment getNameAssignment_0() { return cNameAssignment_0; }
  
  		//GlobalName
  		public RuleCall getNameGlobalNameParserRuleCall_0_0() { return cNameGlobalNameParserRuleCall_0_0; }
  
  		//"alias"
  		public Keyword getAliasKeyword_1() { return cAliasKeyword_1; }
  
  		//linkage=Linkage?
  		public Assignment getLinkageAssignment_2() { return cLinkageAssignment_2; }
  
  		//Linkage
  		public RuleCall getLinkageLinkageParserRuleCall_2_0() { return cLinkageLinkageParserRuleCall_2_0; }
  
  		//visibility=Visibility?
  		public Assignment getVisibilityAssignment_3() { return cVisibilityAssignment_3; }
  
  		//Visibility
  		public RuleCall getVisibilityVisibilityParserRuleCall_3_0() { return cVisibilityVisibilityParserRuleCall_3_0; }
  
  		//type=Type
  		public Assignment getTypeAssignment_4() { return cTypeAssignment_4; }
  
  		//Type
  		public RuleCall getTypeTypeParserRuleCall_4_0() { return cTypeTypeParserRuleCall_4_0; }
  
  		//aliasee=Aliasee
  		public Assignment getAliaseeAssignment_5() { return cAliaseeAssignment_5; }
  
  		//Aliasee
  		public RuleCall getAliaseeAliaseeParserRuleCall_5_0() { return cAliaseeAliaseeParserRuleCall_5_0; }
  	}
  
  	public class AliaseeElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Aliasee");
  		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
  		private final Assignment cRefAssignment_0 = (Assignment)cAlternatives.eContents().get(0);
  		private final CrossReference cRefGlobalValueDefCrossReference_0_0 = (CrossReference)cRefAssignment_0.eContents().get(0);
  		private final RuleCall cRefGlobalValueDefGLOBAL_IDTerminalRuleCall_0_0_1 = (RuleCall)cRefGlobalValueDefCrossReference_0_0.eContents().get(1);
  		private final Assignment cBitcastAssignment_1 = (Assignment)cAlternatives.eContents().get(1);
  		private final RuleCall cBitcastConstantExpression_convertParserRuleCall_1_0 = (RuleCall)cBitcastAssignment_1.eContents().get(0);
  		
  		//Aliasee:
  		//
  		//	ref=[GlobalValueDef|GLOBAL_ID] | bitcast=ConstantExpression_convert;
  		public ParserRule getRule() { return rule; }
  
  		//ref=[GlobalValueDef|GLOBAL_ID] | bitcast=ConstantExpression_convert
  		public Alternatives getAlternatives() { return cAlternatives; }
  
  		//ref=[GlobalValueDef|GLOBAL_ID]
  		public Assignment getRefAssignment_0() { return cRefAssignment_0; }
  
  		//[GlobalValueDef|GLOBAL_ID]
  		public CrossReference getRefGlobalValueDefCrossReference_0_0() { return cRefGlobalValueDefCrossReference_0_0; }
  
  		//GLOBAL_ID
  		public RuleCall getRefGlobalValueDefGLOBAL_IDTerminalRuleCall_0_0_1() { return cRefGlobalValueDefGLOBAL_IDTerminalRuleCall_0_0_1; }
  
  		//bitcast=ConstantExpression_convert
  		public Assignment getBitcastAssignment_1() { return cBitcastAssignment_1; }
  
  		//ConstantExpression_convert
  		public RuleCall getBitcastConstantExpression_convertParserRuleCall_1_0() { return cBitcastConstantExpression_convertParserRuleCall_1_0; }
  	}
  
  	public class TargetInfoElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "TargetInfo");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Keyword cTargetKeyword_0 = (Keyword)cGroup.eContents().get(0);
  		private final Assignment cInfoTypeAssignment_1 = (Assignment)cGroup.eContents().get(1);
  		private final Alternatives cInfoTypeAlternatives_1_0 = (Alternatives)cInfoTypeAssignment_1.eContents().get(0);
  		private final Keyword cInfoTypeDatalayoutKeyword_1_0_0 = (Keyword)cInfoTypeAlternatives_1_0.eContents().get(0);
  		private final Keyword cInfoTypeTripleKeyword_1_0_1 = (Keyword)cInfoTypeAlternatives_1_0.eContents().get(1);
  		private final Keyword cEqualsSignKeyword_2 = (Keyword)cGroup.eContents().get(2);
  		private final Assignment cLayoutAssignment_3 = (Assignment)cGroup.eContents().get(3);
  		private final RuleCall cLayoutSTRINGTerminalRuleCall_3_0 = (RuleCall)cLayoutAssignment_3.eContents().get(0);
  		
  		//TargetInfo:
  		//
  		//	"target" infoType=("datalayout" | "triple") "=" layout=STRING;
  		public ParserRule getRule() { return rule; }
  
  		//"target" infoType=("datalayout" | "triple") "=" layout=STRING
  		public Group getGroup() { return cGroup; }
  
  		//"target"
  		public Keyword getTargetKeyword_0() { return cTargetKeyword_0; }
  
  		//infoType=("datalayout" | "triple")
  		public Assignment getInfoTypeAssignment_1() { return cInfoTypeAssignment_1; }
  
  		//"datalayout" | "triple"
  		public Alternatives getInfoTypeAlternatives_1_0() { return cInfoTypeAlternatives_1_0; }
  
  		//"datalayout"
  		public Keyword getInfoTypeDatalayoutKeyword_1_0_0() { return cInfoTypeDatalayoutKeyword_1_0_0; }
  
  		//"triple"
  		public Keyword getInfoTypeTripleKeyword_1_0_1() { return cInfoTypeTripleKeyword_1_0_1; }
  
  		//"="
  		public Keyword getEqualsSignKeyword_2() { return cEqualsSignKeyword_2; }
  
  		//layout=STRING
  		public Assignment getLayoutAssignment_3() { return cLayoutAssignment_3; }
  
  		//STRING
  		public RuleCall getLayoutSTRINGTerminalRuleCall_3_0() { return cLayoutSTRINGTerminalRuleCall_3_0; }
  	}
  
  	public class InlineAsmElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "InlineAsm");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Keyword cModuleKeyword_0 = (Keyword)cGroup.eContents().get(0);
  		private final Keyword cAsmKeyword_1 = (Keyword)cGroup.eContents().get(1);
  		private final Assignment cAsmLineAssignment_2 = (Assignment)cGroup.eContents().get(2);
  		private final RuleCall cAsmLineSTRINGTerminalRuleCall_2_0 = (RuleCall)cAsmLineAssignment_2.eContents().get(0);
  		
  		//InlineAsm:
  		//
  		//	"module" "asm" asmLine=STRING;
  		public ParserRule getRule() { return rule; }
  
  		//"module" "asm" asmLine=STRING
  		public Group getGroup() { return cGroup; }
  
  		//"module"
  		public Keyword getModuleKeyword_0() { return cModuleKeyword_0; }
  
  		//"asm"
  		public Keyword getAsmKeyword_1() { return cAsmKeyword_1; }
  
  		//asmLine=STRING
  		public Assignment getAsmLineAssignment_2() { return cAsmLineAssignment_2; }
  
  		//STRING
  		public RuleCall getAsmLineSTRINGTerminalRuleCall_2_0() { return cAsmLineSTRINGTerminalRuleCall_2_0; }
  	}
  
  	public class GlobalVariableElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "GlobalVariable");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cNameAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final RuleCall cNameGlobalNameParserRuleCall_0_0 = (RuleCall)cNameAssignment_0.eContents().get(0);
  		private final Assignment cLinkageAssignment_1 = (Assignment)cGroup.eContents().get(1);
  		private final RuleCall cLinkageLinkageParserRuleCall_1_0 = (RuleCall)cLinkageAssignment_1.eContents().get(0);
  		private final Assignment cAddrspaceAssignment_2 = (Assignment)cGroup.eContents().get(2);
  		private final RuleCall cAddrspaceAddressSpaceParserRuleCall_2_0 = (RuleCall)cAddrspaceAssignment_2.eContents().get(0);
  		private final Assignment cTlsModelAssignment_3 = (Assignment)cGroup.eContents().get(3);
  		private final RuleCall cTlsModelTLSmodelParserRuleCall_3_0 = (RuleCall)cTlsModelAssignment_3.eContents().get(0);
  		private final Keyword cUnnamed_addrKeyword_4 = (Keyword)cGroup.eContents().get(4);
  		private final Alternatives cAlternatives_5 = (Alternatives)cGroup.eContents().get(5);
  		private final Keyword cConstantKeyword_5_0 = (Keyword)cAlternatives_5.eContents().get(0);
  		private final Keyword cGlobalKeyword_5_1 = (Keyword)cAlternatives_5.eContents().get(1);
  		private final Assignment cTypeAssignment_6 = (Assignment)cGroup.eContents().get(6);
  		private final RuleCall cTypeTypeParserRuleCall_6_0 = (RuleCall)cTypeAssignment_6.eContents().get(0);
  		private final Assignment cInitialValueAssignment_7 = (Assignment)cGroup.eContents().get(7);
  		private final RuleCall cInitialValueConstantParserRuleCall_7_0 = (RuleCall)cInitialValueAssignment_7.eContents().get(0);
  		private final Group cGroup_8 = (Group)cGroup.eContents().get(8);
  		private final Keyword cCommaKeyword_8_0 = (Keyword)cGroup_8.eContents().get(0);
  		private final Assignment cSectionAssignment_8_1 = (Assignment)cGroup_8.eContents().get(1);
  		private final RuleCall cSectionSectionParserRuleCall_8_1_0 = (RuleCall)cSectionAssignment_8_1.eContents().get(0);
  		private final Group cGroup_9 = (Group)cGroup.eContents().get(9);
  		private final Keyword cCommaKeyword_9_0 = (Keyword)cGroup_9.eContents().get(0);
  		private final Assignment cAlignAssignment_9_1 = (Assignment)cGroup_9.eContents().get(1);
  		private final RuleCall cAlignAlignParserRuleCall_9_1_0 = (RuleCall)cAlignAssignment_9_1.eContents().get(0);
  		
  		//GlobalVariable:
  		//
  		//	name=GlobalName linkage=Linkage? addrspace=AddressSpace? tlsModel=TLSmodel? "unnamed_addr"? ("constant" | "global")
  		//
  		//	type=Type initialValue=Constant? ("," section=Section)? ("," align=Align)?;
  		public ParserRule getRule() { return rule; }
  
  		//name=GlobalName linkage=Linkage? addrspace=AddressSpace? tlsModel=TLSmodel? "unnamed_addr"? ("constant" | "global")
  		//
  		//type=Type initialValue=Constant? ("," section=Section)? ("," align=Align)?
  		public Group getGroup() { return cGroup; }
  
  		//name=GlobalName
  		public Assignment getNameAssignment_0() { return cNameAssignment_0; }
  
  		//GlobalName
  		public RuleCall getNameGlobalNameParserRuleCall_0_0() { return cNameGlobalNameParserRuleCall_0_0; }
  
  		//linkage=Linkage?
  		public Assignment getLinkageAssignment_1() { return cLinkageAssignment_1; }
  
  		//Linkage
  		public RuleCall getLinkageLinkageParserRuleCall_1_0() { return cLinkageLinkageParserRuleCall_1_0; }
  
  		//addrspace=AddressSpace?
  		public Assignment getAddrspaceAssignment_2() { return cAddrspaceAssignment_2; }
  
  		//AddressSpace
  		public RuleCall getAddrspaceAddressSpaceParserRuleCall_2_0() { return cAddrspaceAddressSpaceParserRuleCall_2_0; }
  
  		//tlsModel=TLSmodel?
  		public Assignment getTlsModelAssignment_3() { return cTlsModelAssignment_3; }
  
  		//TLSmodel
  		public RuleCall getTlsModelTLSmodelParserRuleCall_3_0() { return cTlsModelTLSmodelParserRuleCall_3_0; }
  
  		//"unnamed_addr"?
  		public Keyword getUnnamed_addrKeyword_4() { return cUnnamed_addrKeyword_4; }
  
  		//"constant" | "global"
  		public Alternatives getAlternatives_5() { return cAlternatives_5; }
  
  		//"constant"
  		public Keyword getConstantKeyword_5_0() { return cConstantKeyword_5_0; }
  
  		//"global"
  		public Keyword getGlobalKeyword_5_1() { return cGlobalKeyword_5_1; }
  
  		//type=Type
  		public Assignment getTypeAssignment_6() { return cTypeAssignment_6; }
  
  		//Type
  		public RuleCall getTypeTypeParserRuleCall_6_0() { return cTypeTypeParserRuleCall_6_0; }
  
  		//initialValue=Constant?
  		public Assignment getInitialValueAssignment_7() { return cInitialValueAssignment_7; }
  
  		//Constant
  		public RuleCall getInitialValueConstantParserRuleCall_7_0() { return cInitialValueConstantParserRuleCall_7_0; }
  
  		//("," section=Section)?
  		public Group getGroup_8() { return cGroup_8; }
  
  		//","
  		public Keyword getCommaKeyword_8_0() { return cCommaKeyword_8_0; }
  
  		//section=Section
  		public Assignment getSectionAssignment_8_1() { return cSectionAssignment_8_1; }
  
  		//Section
  		public RuleCall getSectionSectionParserRuleCall_8_1_0() { return cSectionSectionParserRuleCall_8_1_0; }
  
  		//("," align=Align)?
  		public Group getGroup_9() { return cGroup_9; }
  
  		//","
  		public Keyword getCommaKeyword_9_0() { return cCommaKeyword_9_0; }
  
  		//align=Align
  		public Assignment getAlignAssignment_9_1() { return cAlignAssignment_9_1; }
  
  		//Align
  		public RuleCall getAlignAlignParserRuleCall_9_1_0() { return cAlignAlignParserRuleCall_9_1_0; }
  	}
  
  	public class ConstantElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Constant");
  		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
  		private final RuleCall cSimpleConstantParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
  		private final RuleCall cStructureConstantParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
  		private final RuleCall cArrayConstantParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
  		private final RuleCall cVectorConstantParserRuleCall_3 = (RuleCall)cAlternatives.eContents().get(3);
  		private final RuleCall cZeroInitializerParserRuleCall_4 = (RuleCall)cAlternatives.eContents().get(4);
  		private final RuleCall cMetadataNodeParserRuleCall_5 = (RuleCall)cAlternatives.eContents().get(5);
  		private final RuleCall cMetadataStringParserRuleCall_6 = (RuleCall)cAlternatives.eContents().get(6);
  		private final RuleCall cBlockAddressParserRuleCall_7 = (RuleCall)cAlternatives.eContents().get(7);
  		private final RuleCall cUndefParserRuleCall_8 = (RuleCall)cAlternatives.eContents().get(8);
  		private final RuleCall cConstantExpressionParserRuleCall_9 = (RuleCall)cAlternatives.eContents().get(9);
  		private final Assignment cRefAssignment_10 = (Assignment)cAlternatives.eContents().get(10);
  		private final CrossReference cRefGlobalValueDefCrossReference_10_0 = (CrossReference)cRefAssignment_10.eContents().get(0);
  		private final RuleCall cRefGlobalValueDefGLOBAL_IDTerminalRuleCall_10_0_1 = (RuleCall)cRefGlobalValueDefCrossReference_10_0.eContents().get(1);
  		
  		//Constant:
  		//
  		//	SimpleConstant // predicate because a vector constant and a structure constant can start with '<'
  		//
  		//	| => StructureConstant | ArrayConstant | VectorConstant | ZeroInitializer | MetadataNode | MetadataString |
  		//
  		//	BlockAddress | Undef | ConstantExpression | ref=[GlobalValueDef|GLOBAL_ID];
  		public ParserRule getRule() { return rule; }
  
  		//SimpleConstant // predicate because a vector constant and a structure constant can start with '<'
  		//
  		//| => StructureConstant | ArrayConstant | VectorConstant | ZeroInitializer | MetadataNode | MetadataString | BlockAddress
  		//
  		//| Undef | ConstantExpression | ref=[GlobalValueDef|GLOBAL_ID]
  		public Alternatives getAlternatives() { return cAlternatives; }
  
  		//SimpleConstant
  		public RuleCall getSimpleConstantParserRuleCall_0() { return cSimpleConstantParserRuleCall_0; }
  
  		//=> StructureConstant
  		public RuleCall getStructureConstantParserRuleCall_1() { return cStructureConstantParserRuleCall_1; }
  
  		//ArrayConstant
  		public RuleCall getArrayConstantParserRuleCall_2() { return cArrayConstantParserRuleCall_2; }
  
  		//VectorConstant
  		public RuleCall getVectorConstantParserRuleCall_3() { return cVectorConstantParserRuleCall_3; }
  
  		//ZeroInitializer
  		public RuleCall getZeroInitializerParserRuleCall_4() { return cZeroInitializerParserRuleCall_4; }
  
  		//MetadataNode
  		public RuleCall getMetadataNodeParserRuleCall_5() { return cMetadataNodeParserRuleCall_5; }
  
  		//MetadataString
  		public RuleCall getMetadataStringParserRuleCall_6() { return cMetadataStringParserRuleCall_6; }
  
  		//BlockAddress
  		public RuleCall getBlockAddressParserRuleCall_7() { return cBlockAddressParserRuleCall_7; }
  
  		//Undef
  		public RuleCall getUndefParserRuleCall_8() { return cUndefParserRuleCall_8; }
  
  		//ConstantExpression
  		public RuleCall getConstantExpressionParserRuleCall_9() { return cConstantExpressionParserRuleCall_9; }
  
  		//ref=[GlobalValueDef|GLOBAL_ID]
  		public Assignment getRefAssignment_10() { return cRefAssignment_10; }
  
  		//[GlobalValueDef|GLOBAL_ID]
  		public CrossReference getRefGlobalValueDefCrossReference_10_0() { return cRefGlobalValueDefCrossReference_10_0; }
  
  		//GLOBAL_ID
  		public RuleCall getRefGlobalValueDefGLOBAL_IDTerminalRuleCall_10_0_1() { return cRefGlobalValueDefGLOBAL_IDTerminalRuleCall_10_0_1; }
  	}
  
  	public class ConstantExpressionElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ConstantExpression");
  		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
  		private final RuleCall cConstantExpression_convertParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
  		private final RuleCall cConstantExpression_getelementptrParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
  		private final RuleCall cConstantExpression_selectParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
  		private final RuleCall cConstantExpression_compareParserRuleCall_3 = (RuleCall)cAlternatives.eContents().get(3);
  		private final RuleCall cConstantExpression_extractelementParserRuleCall_4 = (RuleCall)cAlternatives.eContents().get(4);
  		private final RuleCall cConstantExpression_insertelementParserRuleCall_5 = (RuleCall)cAlternatives.eContents().get(5);
  		private final RuleCall cConstantExpression_shufflevectorParserRuleCall_6 = (RuleCall)cAlternatives.eContents().get(6);
  		private final RuleCall cConstantExpression_extractvalueParserRuleCall_7 = (RuleCall)cAlternatives.eContents().get(7);
  		private final RuleCall cConstantExpression_insertvalueParserRuleCall_8 = (RuleCall)cAlternatives.eContents().get(8);
  		private final RuleCall cConstantExpression_binaryParserRuleCall_9 = (RuleCall)cAlternatives.eContents().get(9);
  		
  		//ConstantExpression:
  		//
  		//	ConstantExpression_convert | ConstantExpression_getelementptr | ConstantExpression_select |
  		//
  		//	ConstantExpression_compare | ConstantExpression_extractelement | ConstantExpression_insertelement |
  		//
  		//	ConstantExpression_shufflevector | ConstantExpression_extractvalue | ConstantExpression_insertvalue |
  		//
  		//	ConstantExpression_binary;
  		public ParserRule getRule() { return rule; }
  
  		//ConstantExpression_convert | ConstantExpression_getelementptr | ConstantExpression_select | ConstantExpression_compare |
  		//
  		//ConstantExpression_extractelement | ConstantExpression_insertelement | ConstantExpression_shufflevector |
  		//
  		//ConstantExpression_extractvalue | ConstantExpression_insertvalue | ConstantExpression_binary
  		public Alternatives getAlternatives() { return cAlternatives; }
  
  		//ConstantExpression_convert
  		public RuleCall getConstantExpression_convertParserRuleCall_0() { return cConstantExpression_convertParserRuleCall_0; }
  
  		//ConstantExpression_getelementptr
  		public RuleCall getConstantExpression_getelementptrParserRuleCall_1() { return cConstantExpression_getelementptrParserRuleCall_1; }
  
  		//ConstantExpression_select
  		public RuleCall getConstantExpression_selectParserRuleCall_2() { return cConstantExpression_selectParserRuleCall_2; }
  
  		//ConstantExpression_compare
  		public RuleCall getConstantExpression_compareParserRuleCall_3() { return cConstantExpression_compareParserRuleCall_3; }
  
  		//ConstantExpression_extractelement
  		public RuleCall getConstantExpression_extractelementParserRuleCall_4() { return cConstantExpression_extractelementParserRuleCall_4; }
  
  		//ConstantExpression_insertelement
  		public RuleCall getConstantExpression_insertelementParserRuleCall_5() { return cConstantExpression_insertelementParserRuleCall_5; }
  
  		//ConstantExpression_shufflevector
  		public RuleCall getConstantExpression_shufflevectorParserRuleCall_6() { return cConstantExpression_shufflevectorParserRuleCall_6; }
  
  		//ConstantExpression_extractvalue
  		public RuleCall getConstantExpression_extractvalueParserRuleCall_7() { return cConstantExpression_extractvalueParserRuleCall_7; }
  
  		//ConstantExpression_insertvalue
  		public RuleCall getConstantExpression_insertvalueParserRuleCall_8() { return cConstantExpression_insertvalueParserRuleCall_8; }
  
  		//ConstantExpression_binary
  		public RuleCall getConstantExpression_binaryParserRuleCall_9() { return cConstantExpression_binaryParserRuleCall_9; }
  	}
  
  	public class ConstantExpression_convertElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ConstantExpression_convert");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cOpcodeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final RuleCall cOpcodeConvertionOpcodeParserRuleCall_0_0 = (RuleCall)cOpcodeAssignment_0.eContents().get(0);
  		private final Keyword cLeftParenthesisKeyword_1 = (Keyword)cGroup.eContents().get(1);
  		private final Assignment cFromTypeAssignment_2 = (Assignment)cGroup.eContents().get(2);
  		private final RuleCall cFromTypeTypeParserRuleCall_2_0 = (RuleCall)cFromTypeAssignment_2.eContents().get(0);
  		private final Assignment cConstantAssignment_3 = (Assignment)cGroup.eContents().get(3);
  		private final RuleCall cConstantGlobalValueRefParserRuleCall_3_0 = (RuleCall)cConstantAssignment_3.eContents().get(0);
  		private final Keyword cToKeyword_4 = (Keyword)cGroup.eContents().get(4);
  		private final Assignment cTargetTypeAssignment_5 = (Assignment)cGroup.eContents().get(5);
  		private final RuleCall cTargetTypeTypeParserRuleCall_5_0 = (RuleCall)cTargetTypeAssignment_5.eContents().get(0);
  		private final Keyword cRightParenthesisKeyword_6 = (Keyword)cGroup.eContents().get(6);
  		
  		//ConstantExpression_convert:
  		//
  		//	opcode=ConvertionOpcode "(" fromType=Type constant=GlobalValueRef "to" targetType=Type ")";
  		public ParserRule getRule() { return rule; }
  
  		//opcode=ConvertionOpcode "(" fromType=Type constant=GlobalValueRef "to" targetType=Type ")"
  		public Group getGroup() { return cGroup; }
  
  		//opcode=ConvertionOpcode
  		public Assignment getOpcodeAssignment_0() { return cOpcodeAssignment_0; }
  
  		//ConvertionOpcode
  		public RuleCall getOpcodeConvertionOpcodeParserRuleCall_0_0() { return cOpcodeConvertionOpcodeParserRuleCall_0_0; }
  
  		//"("
  		public Keyword getLeftParenthesisKeyword_1() { return cLeftParenthesisKeyword_1; }
  
  		//fromType=Type
  		public Assignment getFromTypeAssignment_2() { return cFromTypeAssignment_2; }
  
  		//Type
  		public RuleCall getFromTypeTypeParserRuleCall_2_0() { return cFromTypeTypeParserRuleCall_2_0; }
  
  		//constant=GlobalValueRef
  		public Assignment getConstantAssignment_3() { return cConstantAssignment_3; }
  
  		//GlobalValueRef
  		public RuleCall getConstantGlobalValueRefParserRuleCall_3_0() { return cConstantGlobalValueRefParserRuleCall_3_0; }
  
  		//"to"
  		public Keyword getToKeyword_4() { return cToKeyword_4; }
  
  		//targetType=Type
  		public Assignment getTargetTypeAssignment_5() { return cTargetTypeAssignment_5; }
  
  		//Type
  		public RuleCall getTargetTypeTypeParserRuleCall_5_0() { return cTargetTypeTypeParserRuleCall_5_0; }
  
  		//")"
  		public Keyword getRightParenthesisKeyword_6() { return cRightParenthesisKeyword_6; }
  	}
  
  	public class ConstantExpression_getelementptrElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ConstantExpression_getelementptr");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cOpcodeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final Keyword cOpcodeGetelementptrKeyword_0_0 = (Keyword)cOpcodeAssignment_0.eContents().get(0);
  		private final Keyword cInboundsKeyword_1 = (Keyword)cGroup.eContents().get(1);
  		private final Keyword cLeftParenthesisKeyword_2 = (Keyword)cGroup.eContents().get(2);
  		private final Assignment cConstantTypeAssignment_3 = (Assignment)cGroup.eContents().get(3);
  		private final RuleCall cConstantTypeTypeParserRuleCall_3_0 = (RuleCall)cConstantTypeAssignment_3.eContents().get(0);
  		private final Assignment cConstantAssignment_4 = (Assignment)cGroup.eContents().get(4);
  		private final RuleCall cConstantGlobalValueRefParserRuleCall_4_0 = (RuleCall)cConstantAssignment_4.eContents().get(0);
  		private final Group cGroup_5 = (Group)cGroup.eContents().get(5);
  		private final Keyword cCommaKeyword_5_0 = (Keyword)cGroup_5.eContents().get(0);
  		private final Assignment cIndexTypesAssignment_5_1 = (Assignment)cGroup_5.eContents().get(1);
  		private final RuleCall cIndexTypesTypeParserRuleCall_5_1_0 = (RuleCall)cIndexTypesAssignment_5_1.eContents().get(0);
  		private final Assignment cIndicesAssignment_5_2 = (Assignment)cGroup_5.eContents().get(2);
  		private final RuleCall cIndicesConstantParserRuleCall_5_2_0 = (RuleCall)cIndicesAssignment_5_2.eContents().get(0);
  		private final Keyword cRightParenthesisKeyword_6 = (Keyword)cGroup.eContents().get(6);
  		
  		//ConstantExpression_getelementptr:
  		//
  		//	opcode="getelementptr" "inbounds"? "(" constantType=Type constant=GlobalValueRef ("," indexTypes+=Type
  		//
  		//	indices+=Constant)* ")";
  		public ParserRule getRule() { return rule; }
  
  		//opcode="getelementptr" "inbounds"? "(" constantType=Type constant=GlobalValueRef ("," indexTypes+=Type
  		//
  		//indices+=Constant)* ")"
  		public Group getGroup() { return cGroup; }
  
  		//opcode="getelementptr"
  		public Assignment getOpcodeAssignment_0() { return cOpcodeAssignment_0; }
  
  		//"getelementptr"
  		public Keyword getOpcodeGetelementptrKeyword_0_0() { return cOpcodeGetelementptrKeyword_0_0; }
  
  		//"inbounds"?
  		public Keyword getInboundsKeyword_1() { return cInboundsKeyword_1; }
  
  		//"("
  		public Keyword getLeftParenthesisKeyword_2() { return cLeftParenthesisKeyword_2; }
  
  		//constantType=Type
  		public Assignment getConstantTypeAssignment_3() { return cConstantTypeAssignment_3; }
  
  		//Type
  		public RuleCall getConstantTypeTypeParserRuleCall_3_0() { return cConstantTypeTypeParserRuleCall_3_0; }
  
  		//constant=GlobalValueRef
  		public Assignment getConstantAssignment_4() { return cConstantAssignment_4; }
  
  		//GlobalValueRef
  		public RuleCall getConstantGlobalValueRefParserRuleCall_4_0() { return cConstantGlobalValueRefParserRuleCall_4_0; }
  
  		//("," indexTypes+=Type indices+=Constant)*
  		public Group getGroup_5() { return cGroup_5; }
  
  		//","
  		public Keyword getCommaKeyword_5_0() { return cCommaKeyword_5_0; }
  
  		//indexTypes+=Type
  		public Assignment getIndexTypesAssignment_5_1() { return cIndexTypesAssignment_5_1; }
  
  		//Type
  		public RuleCall getIndexTypesTypeParserRuleCall_5_1_0() { return cIndexTypesTypeParserRuleCall_5_1_0; }
  
  		//indices+=Constant
  		public Assignment getIndicesAssignment_5_2() { return cIndicesAssignment_5_2; }
  
  		//Constant
  		public RuleCall getIndicesConstantParserRuleCall_5_2_0() { return cIndicesConstantParserRuleCall_5_2_0; }
  
  		//")"
  		public Keyword getRightParenthesisKeyword_6() { return cRightParenthesisKeyword_6; }
  	}
  
  	public class ConstantExpression_selectElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ConstantExpression_select");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cOpcodeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final Keyword cOpcodeSelectKeyword_0_0 = (Keyword)cOpcodeAssignment_0.eContents().get(0);
  		private final Keyword cLeftParenthesisKeyword_1 = (Keyword)cGroup.eContents().get(1);
  		private final Assignment cConditionAssignment_2 = (Assignment)cGroup.eContents().get(2);
  		private final RuleCall cConditionTypedValueParserRuleCall_2_0 = (RuleCall)cConditionAssignment_2.eContents().get(0);
  		private final Keyword cCommaKeyword_3 = (Keyword)cGroup.eContents().get(3);
  		private final Assignment cOp1Assignment_4 = (Assignment)cGroup.eContents().get(4);
  		private final RuleCall cOp1TypedValueParserRuleCall_4_0 = (RuleCall)cOp1Assignment_4.eContents().get(0);
  		private final Keyword cCommaKeyword_5 = (Keyword)cGroup.eContents().get(5);
  		private final Assignment cOp2Assignment_6 = (Assignment)cGroup.eContents().get(6);
  		private final RuleCall cOp2TypedValueParserRuleCall_6_0 = (RuleCall)cOp2Assignment_6.eContents().get(0);
  		private final Keyword cRightParenthesisKeyword_7 = (Keyword)cGroup.eContents().get(7);
  		
  		//ConstantExpression_select:
  		//
  		//	opcode="select" "(" condition=TypedValue "," op1=TypedValue "," op2=TypedValue ")";
  		public ParserRule getRule() { return rule; }
  
  		//opcode="select" "(" condition=TypedValue "," op1=TypedValue "," op2=TypedValue ")"
  		public Group getGroup() { return cGroup; }
  
  		//opcode="select"
  		public Assignment getOpcodeAssignment_0() { return cOpcodeAssignment_0; }
  
  		//"select"
  		public Keyword getOpcodeSelectKeyword_0_0() { return cOpcodeSelectKeyword_0_0; }
  
  		//"("
  		public Keyword getLeftParenthesisKeyword_1() { return cLeftParenthesisKeyword_1; }
  
  		//condition=TypedValue
  		public Assignment getConditionAssignment_2() { return cConditionAssignment_2; }
  
  		//TypedValue
  		public RuleCall getConditionTypedValueParserRuleCall_2_0() { return cConditionTypedValueParserRuleCall_2_0; }
  
  		//","
  		public Keyword getCommaKeyword_3() { return cCommaKeyword_3; }
  
  		//op1=TypedValue
  		public Assignment getOp1Assignment_4() { return cOp1Assignment_4; }
  
  		//TypedValue
  		public RuleCall getOp1TypedValueParserRuleCall_4_0() { return cOp1TypedValueParserRuleCall_4_0; }
  
  		//","
  		public Keyword getCommaKeyword_5() { return cCommaKeyword_5; }
  
  		//op2=TypedValue
  		public Assignment getOp2Assignment_6() { return cOp2Assignment_6; }
  
  		//TypedValue
  		public RuleCall getOp2TypedValueParserRuleCall_6_0() { return cOp2TypedValueParserRuleCall_6_0; }
  
  		//")"
  		public Keyword getRightParenthesisKeyword_7() { return cRightParenthesisKeyword_7; }
  	}
  
  	public class ConstantExpression_compareElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ConstantExpression_compare");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Alternatives cAlternatives_0 = (Alternatives)cGroup.eContents().get(0);
  		private final Group cGroup_0_0 = (Group)cAlternatives_0.eContents().get(0);
  		private final Assignment cOpcodeAssignment_0_0_0 = (Assignment)cGroup_0_0.eContents().get(0);
  		private final Keyword cOpcodeIcmpKeyword_0_0_0_0 = (Keyword)cOpcodeAssignment_0_0_0.eContents().get(0);
  		private final Assignment cConditionAssignment_0_0_1 = (Assignment)cGroup_0_0.eContents().get(1);
  		private final RuleCall cConditionIcmpConditionParserRuleCall_0_0_1_0 = (RuleCall)cConditionAssignment_0_0_1.eContents().get(0);
  		private final Group cGroup_0_1 = (Group)cAlternatives_0.eContents().get(1);
  		private final Assignment cOpcodeAssignment_0_1_0 = (Assignment)cGroup_0_1.eContents().get(0);
  		private final Keyword cOpcodeFcmpKeyword_0_1_0_0 = (Keyword)cOpcodeAssignment_0_1_0.eContents().get(0);
  		private final Assignment cConditionAssignment_0_1_1 = (Assignment)cGroup_0_1.eContents().get(1);
  		private final RuleCall cConditionFcmpConditionParserRuleCall_0_1_1_0 = (RuleCall)cConditionAssignment_0_1_1.eContents().get(0);
  		private final Keyword cLeftParenthesisKeyword_1 = (Keyword)cGroup.eContents().get(1);
  		private final Assignment cOp1Assignment_2 = (Assignment)cGroup.eContents().get(2);
  		private final RuleCall cOp1TypedValueParserRuleCall_2_0 = (RuleCall)cOp1Assignment_2.eContents().get(0);
  		private final Keyword cCommaKeyword_3 = (Keyword)cGroup.eContents().get(3);
  		private final Assignment cOp2Assignment_4 = (Assignment)cGroup.eContents().get(4);
  		private final RuleCall cOp2TypedValueParserRuleCall_4_0 = (RuleCall)cOp2Assignment_4.eContents().get(0);
  		private final Keyword cRightParenthesisKeyword_5 = (Keyword)cGroup.eContents().get(5);
  		
  		//ConstantExpression_compare:
  		//
  		//	(opcode="icmp" condition=IcmpCondition | opcode="fcmp" condition=FcmpCondition) "(" op1=TypedValue "," op2=TypedValue
  		//
  		//	")";
  		public ParserRule getRule() { return rule; }
  
  		//(opcode="icmp" condition=IcmpCondition | opcode="fcmp" condition=FcmpCondition) "(" op1=TypedValue "," op2=TypedValue
  		//
  		//")"
  		public Group getGroup() { return cGroup; }
  
  		//opcode="icmp" condition=IcmpCondition | opcode="fcmp" condition=FcmpCondition
  		public Alternatives getAlternatives_0() { return cAlternatives_0; }
  
  		//opcode="icmp" condition=IcmpCondition
  		public Group getGroup_0_0() { return cGroup_0_0; }
  
  		//opcode="icmp"
  		public Assignment getOpcodeAssignment_0_0_0() { return cOpcodeAssignment_0_0_0; }
  
  		//"icmp"
  		public Keyword getOpcodeIcmpKeyword_0_0_0_0() { return cOpcodeIcmpKeyword_0_0_0_0; }
  
  		//condition=IcmpCondition
  		public Assignment getConditionAssignment_0_0_1() { return cConditionAssignment_0_0_1; }
  
  		//IcmpCondition
  		public RuleCall getConditionIcmpConditionParserRuleCall_0_0_1_0() { return cConditionIcmpConditionParserRuleCall_0_0_1_0; }
  
  		//opcode="fcmp" condition=FcmpCondition
  		public Group getGroup_0_1() { return cGroup_0_1; }
  
  		//opcode="fcmp"
  		public Assignment getOpcodeAssignment_0_1_0() { return cOpcodeAssignment_0_1_0; }
  
  		//"fcmp"
  		public Keyword getOpcodeFcmpKeyword_0_1_0_0() { return cOpcodeFcmpKeyword_0_1_0_0; }
  
  		//condition=FcmpCondition
  		public Assignment getConditionAssignment_0_1_1() { return cConditionAssignment_0_1_1; }
  
  		//FcmpCondition
  		public RuleCall getConditionFcmpConditionParserRuleCall_0_1_1_0() { return cConditionFcmpConditionParserRuleCall_0_1_1_0; }
  
  		//"("
  		public Keyword getLeftParenthesisKeyword_1() { return cLeftParenthesisKeyword_1; }
  
  		//op1=TypedValue
  		public Assignment getOp1Assignment_2() { return cOp1Assignment_2; }
  
  		//TypedValue
  		public RuleCall getOp1TypedValueParserRuleCall_2_0() { return cOp1TypedValueParserRuleCall_2_0; }
  
  		//","
  		public Keyword getCommaKeyword_3() { return cCommaKeyword_3; }
  
  		//op2=TypedValue
  		public Assignment getOp2Assignment_4() { return cOp2Assignment_4; }
  
  		//TypedValue
  		public RuleCall getOp2TypedValueParserRuleCall_4_0() { return cOp2TypedValueParserRuleCall_4_0; }
  
  		//")"
  		public Keyword getRightParenthesisKeyword_5() { return cRightParenthesisKeyword_5; }
  	}
  
  	public class ConstantExpression_extractelementElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ConstantExpression_extractelement");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cOpcodeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final Keyword cOpcodeExtractelementKeyword_0_0 = (Keyword)cOpcodeAssignment_0.eContents().get(0);
  		private final Keyword cLeftParenthesisKeyword_1 = (Keyword)cGroup.eContents().get(1);
  		private final Assignment cVectorAssignment_2 = (Assignment)cGroup.eContents().get(2);
  		private final RuleCall cVectorTypedValueParserRuleCall_2_0 = (RuleCall)cVectorAssignment_2.eContents().get(0);
  		private final Keyword cCommaKeyword_3 = (Keyword)cGroup.eContents().get(3);
  		private final Assignment cIndexAssignment_4 = (Assignment)cGroup.eContents().get(4);
  		private final RuleCall cIndexTypedValueParserRuleCall_4_0 = (RuleCall)cIndexAssignment_4.eContents().get(0);
  		private final Keyword cRightParenthesisKeyword_5 = (Keyword)cGroup.eContents().get(5);
  		
  		//ConstantExpression_extractelement:
  		//
  		//	opcode="extractelement" "(" vector=TypedValue "," index=TypedValue ")";
  		public ParserRule getRule() { return rule; }
  
  		//opcode="extractelement" "(" vector=TypedValue "," index=TypedValue ")"
  		public Group getGroup() { return cGroup; }
  
  		//opcode="extractelement"
  		public Assignment getOpcodeAssignment_0() { return cOpcodeAssignment_0; }
  
  		//"extractelement"
  		public Keyword getOpcodeExtractelementKeyword_0_0() { return cOpcodeExtractelementKeyword_0_0; }
  
  		//"("
  		public Keyword getLeftParenthesisKeyword_1() { return cLeftParenthesisKeyword_1; }
  
  		//vector=TypedValue
  		public Assignment getVectorAssignment_2() { return cVectorAssignment_2; }
  
  		//TypedValue
  		public RuleCall getVectorTypedValueParserRuleCall_2_0() { return cVectorTypedValueParserRuleCall_2_0; }
  
  		//","
  		public Keyword getCommaKeyword_3() { return cCommaKeyword_3; }
  
  		//index=TypedValue
  		public Assignment getIndexAssignment_4() { return cIndexAssignment_4; }
  
  		//TypedValue
  		public RuleCall getIndexTypedValueParserRuleCall_4_0() { return cIndexTypedValueParserRuleCall_4_0; }
  
  		//")"
  		public Keyword getRightParenthesisKeyword_5() { return cRightParenthesisKeyword_5; }
  	}
  
  	public class ConstantExpression_insertelementElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ConstantExpression_insertelement");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cOpcodeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final Keyword cOpcodeInsertelementKeyword_0_0 = (Keyword)cOpcodeAssignment_0.eContents().get(0);
  		private final Keyword cLeftParenthesisKeyword_1 = (Keyword)cGroup.eContents().get(1);
  		private final Assignment cVectorTypeAssignment_2 = (Assignment)cGroup.eContents().get(2);
  		private final RuleCall cVectorTypeVectorTypeParserRuleCall_2_0 = (RuleCall)cVectorTypeAssignment_2.eContents().get(0);
  		private final Assignment cVectorAssignment_3 = (Assignment)cGroup.eContents().get(3);
  		private final RuleCall cVectorValueRefParserRuleCall_3_0 = (RuleCall)cVectorAssignment_3.eContents().get(0);
  		private final Keyword cCommaKeyword_4 = (Keyword)cGroup.eContents().get(4);
  		private final Assignment cElementAssignment_5 = (Assignment)cGroup.eContents().get(5);
  		private final RuleCall cElementTypedValueParserRuleCall_5_0 = (RuleCall)cElementAssignment_5.eContents().get(0);
  		private final Keyword cCommaKeyword_6 = (Keyword)cGroup.eContents().get(6);
  		private final Assignment cIndexAssignment_7 = (Assignment)cGroup.eContents().get(7);
  		private final RuleCall cIndexTypedValueParserRuleCall_7_0 = (RuleCall)cIndexAssignment_7.eContents().get(0);
  		private final Keyword cRightParenthesisKeyword_8 = (Keyword)cGroup.eContents().get(8);
  		
  		//ConstantExpression_insertelement:
  		//
  		//	opcode="insertelement" "(" vectorType=VectorType vector=ValueRef "," element=TypedValue "," index=TypedValue ")";
  		public ParserRule getRule() { return rule; }
  
  		//opcode="insertelement" "(" vectorType=VectorType vector=ValueRef "," element=TypedValue "," index=TypedValue ")"
  		public Group getGroup() { return cGroup; }
  
  		//opcode="insertelement"
  		public Assignment getOpcodeAssignment_0() { return cOpcodeAssignment_0; }
  
  		//"insertelement"
  		public Keyword getOpcodeInsertelementKeyword_0_0() { return cOpcodeInsertelementKeyword_0_0; }
  
  		//"("
  		public Keyword getLeftParenthesisKeyword_1() { return cLeftParenthesisKeyword_1; }
  
  		//vectorType=VectorType
  		public Assignment getVectorTypeAssignment_2() { return cVectorTypeAssignment_2; }
  
  		//VectorType
  		public RuleCall getVectorTypeVectorTypeParserRuleCall_2_0() { return cVectorTypeVectorTypeParserRuleCall_2_0; }
  
  		//vector=ValueRef
  		public Assignment getVectorAssignment_3() { return cVectorAssignment_3; }
  
  		//ValueRef
  		public RuleCall getVectorValueRefParserRuleCall_3_0() { return cVectorValueRefParserRuleCall_3_0; }
  
  		//","
  		public Keyword getCommaKeyword_4() { return cCommaKeyword_4; }
  
  		//element=TypedValue
  		public Assignment getElementAssignment_5() { return cElementAssignment_5; }
  
  		//TypedValue
  		public RuleCall getElementTypedValueParserRuleCall_5_0() { return cElementTypedValueParserRuleCall_5_0; }
  
  		//","
  		public Keyword getCommaKeyword_6() { return cCommaKeyword_6; }
  
  		//index=TypedValue
  		public Assignment getIndexAssignment_7() { return cIndexAssignment_7; }
  
  		//TypedValue
  		public RuleCall getIndexTypedValueParserRuleCall_7_0() { return cIndexTypedValueParserRuleCall_7_0; }
  
  		//")"
  		public Keyword getRightParenthesisKeyword_8() { return cRightParenthesisKeyword_8; }
  	}
  
  	public class ConstantExpression_shufflevectorElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ConstantExpression_shufflevector");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cOpcodeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final Keyword cOpcodeShufflevectorKeyword_0_0 = (Keyword)cOpcodeAssignment_0.eContents().get(0);
  		private final Keyword cLeftParenthesisKeyword_1 = (Keyword)cGroup.eContents().get(1);
  		private final Assignment cVector1Assignment_2 = (Assignment)cGroup.eContents().get(2);
  		private final RuleCall cVector1TypedValueParserRuleCall_2_0 = (RuleCall)cVector1Assignment_2.eContents().get(0);
  		private final Keyword cCommaKeyword_3 = (Keyword)cGroup.eContents().get(3);
  		private final Assignment cVector2Assignment_4 = (Assignment)cGroup.eContents().get(4);
  		private final RuleCall cVector2TypedValueParserRuleCall_4_0 = (RuleCall)cVector2Assignment_4.eContents().get(0);
  		private final Keyword cCommaKeyword_5 = (Keyword)cGroup.eContents().get(5);
  		private final Assignment cMaskAssignment_6 = (Assignment)cGroup.eContents().get(6);
  		private final RuleCall cMaskTypedValueParserRuleCall_6_0 = (RuleCall)cMaskAssignment_6.eContents().get(0);
  		private final Keyword cRightParenthesisKeyword_7 = (Keyword)cGroup.eContents().get(7);
  		
  		//ConstantExpression_shufflevector:
  		//
  		//	opcode="shufflevector" "(" vector1=TypedValue "," vector2=TypedValue "," mask=TypedValue ")";
  		public ParserRule getRule() { return rule; }
  
  		//opcode="shufflevector" "(" vector1=TypedValue "," vector2=TypedValue "," mask=TypedValue ")"
  		public Group getGroup() { return cGroup; }
  
  		//opcode="shufflevector"
  		public Assignment getOpcodeAssignment_0() { return cOpcodeAssignment_0; }
  
  		//"shufflevector"
  		public Keyword getOpcodeShufflevectorKeyword_0_0() { return cOpcodeShufflevectorKeyword_0_0; }
  
  		//"("
  		public Keyword getLeftParenthesisKeyword_1() { return cLeftParenthesisKeyword_1; }
  
  		//vector1=TypedValue
  		public Assignment getVector1Assignment_2() { return cVector1Assignment_2; }
  
  		//TypedValue
  		public RuleCall getVector1TypedValueParserRuleCall_2_0() { return cVector1TypedValueParserRuleCall_2_0; }
  
  		//","
  		public Keyword getCommaKeyword_3() { return cCommaKeyword_3; }
  
  		//vector2=TypedValue
  		public Assignment getVector2Assignment_4() { return cVector2Assignment_4; }
  
  		//TypedValue
  		public RuleCall getVector2TypedValueParserRuleCall_4_0() { return cVector2TypedValueParserRuleCall_4_0; }
  
  		//","
  		public Keyword getCommaKeyword_5() { return cCommaKeyword_5; }
  
  		//mask=TypedValue
  		public Assignment getMaskAssignment_6() { return cMaskAssignment_6; }
  
  		//TypedValue
  		public RuleCall getMaskTypedValueParserRuleCall_6_0() { return cMaskTypedValueParserRuleCall_6_0; }
  
  		//")"
  		public Keyword getRightParenthesisKeyword_7() { return cRightParenthesisKeyword_7; }
  	}
  
  	public class ConstantExpression_extractvalueElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ConstantExpression_extractvalue");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cOpcodeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final Keyword cOpcodeExtractvalueKeyword_0_0 = (Keyword)cOpcodeAssignment_0.eContents().get(0);
  		private final Keyword cLeftParenthesisKeyword_1 = (Keyword)cGroup.eContents().get(1);
  		private final Assignment cValueAssignment_2 = (Assignment)cGroup.eContents().get(2);
  		private final RuleCall cValueTypedValueParserRuleCall_2_0 = (RuleCall)cValueAssignment_2.eContents().get(0);
  		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
  		private final Keyword cCommaKeyword_3_0 = (Keyword)cGroup_3.eContents().get(0);
  		private final Assignment cIndicesAssignment_3_1 = (Assignment)cGroup_3.eContents().get(1);
  		private final RuleCall cIndicesINTEGERTerminalRuleCall_3_1_0 = (RuleCall)cIndicesAssignment_3_1.eContents().get(0);
  		private final Keyword cRightParenthesisKeyword_4 = (Keyword)cGroup.eContents().get(4);
  		
  		//ConstantExpression_extractvalue:
  		//
  		//	opcode="extractvalue" "(" value=TypedValue ("," indices+=INTEGER)+ ")";
  		public ParserRule getRule() { return rule; }
  
  		//opcode="extractvalue" "(" value=TypedValue ("," indices+=INTEGER)+ ")"
  		public Group getGroup() { return cGroup; }
  
  		//opcode="extractvalue"
  		public Assignment getOpcodeAssignment_0() { return cOpcodeAssignment_0; }
  
  		//"extractvalue"
  		public Keyword getOpcodeExtractvalueKeyword_0_0() { return cOpcodeExtractvalueKeyword_0_0; }
  
  		//"("
  		public Keyword getLeftParenthesisKeyword_1() { return cLeftParenthesisKeyword_1; }
  
  		//value=TypedValue
  		public Assignment getValueAssignment_2() { return cValueAssignment_2; }
  
  		//TypedValue
  		public RuleCall getValueTypedValueParserRuleCall_2_0() { return cValueTypedValueParserRuleCall_2_0; }
  
  		//("," indices+=INTEGER)+
  		public Group getGroup_3() { return cGroup_3; }
  
  		//","
  		public Keyword getCommaKeyword_3_0() { return cCommaKeyword_3_0; }
  
  		//indices+=INTEGER
  		public Assignment getIndicesAssignment_3_1() { return cIndicesAssignment_3_1; }
  
  		//INTEGER
  		public RuleCall getIndicesINTEGERTerminalRuleCall_3_1_0() { return cIndicesINTEGERTerminalRuleCall_3_1_0; }
  
  		//")"
  		public Keyword getRightParenthesisKeyword_4() { return cRightParenthesisKeyword_4; }
  	}
  
  	public class ConstantExpression_insertvalueElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ConstantExpression_insertvalue");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cOpcodeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final Keyword cOpcodeInsertvalueKeyword_0_0 = (Keyword)cOpcodeAssignment_0.eContents().get(0);
  		private final Keyword cLeftParenthesisKeyword_1 = (Keyword)cGroup.eContents().get(1);
  		private final Assignment cValueAssignment_2 = (Assignment)cGroup.eContents().get(2);
  		private final RuleCall cValueTypedValueParserRuleCall_2_0 = (RuleCall)cValueAssignment_2.eContents().get(0);
  		private final Keyword cCommaKeyword_3 = (Keyword)cGroup.eContents().get(3);
  		private final Assignment cElementAssignment_4 = (Assignment)cGroup.eContents().get(4);
  		private final RuleCall cElementTypedValueParserRuleCall_4_0 = (RuleCall)cElementAssignment_4.eContents().get(0);
  		private final Group cGroup_5 = (Group)cGroup.eContents().get(5);
  		private final Keyword cCommaKeyword_5_0 = (Keyword)cGroup_5.eContents().get(0);
  		private final Assignment cIndicesAssignment_5_1 = (Assignment)cGroup_5.eContents().get(1);
  		private final RuleCall cIndicesINTEGERTerminalRuleCall_5_1_0 = (RuleCall)cIndicesAssignment_5_1.eContents().get(0);
  		private final Keyword cRightParenthesisKeyword_6 = (Keyword)cGroup.eContents().get(6);
  		
  		//ConstantExpression_insertvalue:
  		//
  		//	opcode="insertvalue" "(" value=TypedValue "," element=TypedValue ("," indices+=INTEGER)+ ")";
  		public ParserRule getRule() { return rule; }
  
  		//opcode="insertvalue" "(" value=TypedValue "," element=TypedValue ("," indices+=INTEGER)+ ")"
  		public Group getGroup() { return cGroup; }
  
  		//opcode="insertvalue"
  		public Assignment getOpcodeAssignment_0() { return cOpcodeAssignment_0; }
  
  		//"insertvalue"
  		public Keyword getOpcodeInsertvalueKeyword_0_0() { return cOpcodeInsertvalueKeyword_0_0; }
  
  		//"("
  		public Keyword getLeftParenthesisKeyword_1() { return cLeftParenthesisKeyword_1; }
  
  		//value=TypedValue
  		public Assignment getValueAssignment_2() { return cValueAssignment_2; }
  
  		//TypedValue
  		public RuleCall getValueTypedValueParserRuleCall_2_0() { return cValueTypedValueParserRuleCall_2_0; }
  
  		//","
  		public Keyword getCommaKeyword_3() { return cCommaKeyword_3; }
  
  		//element=TypedValue
  		public Assignment getElementAssignment_4() { return cElementAssignment_4; }
  
  		//TypedValue
  		public RuleCall getElementTypedValueParserRuleCall_4_0() { return cElementTypedValueParserRuleCall_4_0; }
  
  		//("," indices+=INTEGER)+
  		public Group getGroup_5() { return cGroup_5; }
  
  		//","
  		public Keyword getCommaKeyword_5_0() { return cCommaKeyword_5_0; }
  
  		//indices+=INTEGER
  		public Assignment getIndicesAssignment_5_1() { return cIndicesAssignment_5_1; }
  
  		//INTEGER
  		public RuleCall getIndicesINTEGERTerminalRuleCall_5_1_0() { return cIndicesINTEGERTerminalRuleCall_5_1_0; }
  
  		//")"
  		public Keyword getRightParenthesisKeyword_6() { return cRightParenthesisKeyword_6; }
  	}
  
  	public class ConstantExpression_binaryElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ConstantExpression_binary");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Alternatives cAlternatives_0 = (Alternatives)cGroup.eContents().get(0);
  		private final Group cGroup_0_0 = (Group)cAlternatives_0.eContents().get(0);
  		private final Assignment cOpcodeAssignment_0_0_0 = (Assignment)cGroup_0_0.eContents().get(0);
  		private final Alternatives cOpcodeAlternatives_0_0_0_0 = (Alternatives)cOpcodeAssignment_0_0_0.eContents().get(0);
  		private final Keyword cOpcodeAddKeyword_0_0_0_0_0 = (Keyword)cOpcodeAlternatives_0_0_0_0.eContents().get(0);
  		private final Keyword cOpcodeSubKeyword_0_0_0_0_1 = (Keyword)cOpcodeAlternatives_0_0_0_0.eContents().get(1);
  		private final Keyword cOpcodeMulKeyword_0_0_0_0_2 = (Keyword)cOpcodeAlternatives_0_0_0_0.eContents().get(2);
  		private final Keyword cOpcodeShlKeyword_0_0_0_0_3 = (Keyword)cOpcodeAlternatives_0_0_0_0.eContents().get(3);
  		private final UnorderedGroup cUnorderedGroup_0_0_1 = (UnorderedGroup)cGroup_0_0.eContents().get(1);
  		private final Keyword cNuwKeyword_0_0_1_0 = (Keyword)cUnorderedGroup_0_0_1.eContents().get(0);
  		private final Keyword cNswKeyword_0_0_1_1 = (Keyword)cUnorderedGroup_0_0_1.eContents().get(1);
  		private final Group cGroup_0_1 = (Group)cAlternatives_0.eContents().get(1);
  		private final Assignment cOpcodeAssignment_0_1_0 = (Assignment)cGroup_0_1.eContents().get(0);
  		private final Alternatives cOpcodeAlternatives_0_1_0_0 = (Alternatives)cOpcodeAssignment_0_1_0.eContents().get(0);
  		private final Keyword cOpcodeSdivKeyword_0_1_0_0_0 = (Keyword)cOpcodeAlternatives_0_1_0_0.eContents().get(0);
  		private final Keyword cOpcodeUdivKeyword_0_1_0_0_1 = (Keyword)cOpcodeAlternatives_0_1_0_0.eContents().get(1);
  		private final Keyword cOpcodeLshrKeyword_0_1_0_0_2 = (Keyword)cOpcodeAlternatives_0_1_0_0.eContents().get(2);
  		private final Keyword cOpcodeAshrKeyword_0_1_0_0_3 = (Keyword)cOpcodeAlternatives_0_1_0_0.eContents().get(3);
  		private final Keyword cExactKeyword_0_1_1 = (Keyword)cGroup_0_1.eContents().get(1);
  		private final Assignment cOpcodeAssignment_0_2 = (Assignment)cAlternatives_0.eContents().get(2);
  		private final Alternatives cOpcodeAlternatives_0_2_0 = (Alternatives)cOpcodeAssignment_0_2.eContents().get(0);
  		private final Keyword cOpcodeFaddKeyword_0_2_0_0 = (Keyword)cOpcodeAlternatives_0_2_0.eContents().get(0);
  		private final Keyword cOpcodeFsubKeyword_0_2_0_1 = (Keyword)cOpcodeAlternatives_0_2_0.eContents().get(1);
  		private final Keyword cOpcodeFmulKeyword_0_2_0_2 = (Keyword)cOpcodeAlternatives_0_2_0.eContents().get(2);
  		private final Keyword cOpcodeFdivKeyword_0_2_0_3 = (Keyword)cOpcodeAlternatives_0_2_0.eContents().get(3);
  		private final Keyword cOpcodeUremKeyword_0_2_0_4 = (Keyword)cOpcodeAlternatives_0_2_0.eContents().get(4);
  		private final Keyword cOpcodeSremKeyword_0_2_0_5 = (Keyword)cOpcodeAlternatives_0_2_0.eContents().get(5);
  		private final Keyword cOpcodeFremKeyword_0_2_0_6 = (Keyword)cOpcodeAlternatives_0_2_0.eContents().get(6);
  		private final Keyword cOpcodeAndKeyword_0_2_0_7 = (Keyword)cOpcodeAlternatives_0_2_0.eContents().get(7);
  		private final Keyword cOpcodeOrKeyword_0_2_0_8 = (Keyword)cOpcodeAlternatives_0_2_0.eContents().get(8);
  		private final Keyword cOpcodeXorKeyword_0_2_0_9 = (Keyword)cOpcodeAlternatives_0_2_0.eContents().get(9);
  		private final Keyword cLeftParenthesisKeyword_1 = (Keyword)cGroup.eContents().get(1);
  		private final Assignment cOp1Assignment_2 = (Assignment)cGroup.eContents().get(2);
  		private final RuleCall cOp1TypedValueParserRuleCall_2_0 = (RuleCall)cOp1Assignment_2.eContents().get(0);
  		private final Keyword cCommaKeyword_3 = (Keyword)cGroup.eContents().get(3);
  		private final Assignment cOp2Assignment_4 = (Assignment)cGroup.eContents().get(4);
  		private final RuleCall cOp2TypedValueParserRuleCall_4_0 = (RuleCall)cOp2Assignment_4.eContents().get(0);
  		private final Keyword cRightParenthesisKeyword_5 = (Keyword)cGroup.eContents().get(5);
  		
  		//ConstantExpression_binary:
  		//
  		//	(opcode=("add" | "sub" | "mul" | "shl") ("nuw"? & "nsw"?) | opcode=("sdiv" | "udiv" | "lshr" | "ashr") "exact"? |
  		//
  		//	opcode=("fadd" | "fsub" | "fmul" | "fdiv" | "urem" | "srem" | "frem" | "and" | "or" | "xor")) "(" op1=TypedValue ","
  		//
  		//	op2=TypedValue ")";
  		public ParserRule getRule() { return rule; }
  
  		//(opcode=("add" | "sub" | "mul" | "shl") ("nuw"? & "nsw"?) | opcode=("sdiv" | "udiv" | "lshr" | "ashr") "exact"? |
  		//
  		//opcode=("fadd" | "fsub" | "fmul" | "fdiv" | "urem" | "srem" | "frem" | "and" | "or" | "xor")) "(" op1=TypedValue ","
  		//
  		//op2=TypedValue ")"
  		public Group getGroup() { return cGroup; }
  
  		//opcode=("add" | "sub" | "mul" | "shl") ("nuw"? & "nsw"?) | opcode=("sdiv" | "udiv" | "lshr" | "ashr") "exact"? |
  		//
  		//opcode=("fadd" | "fsub" | "fmul" | "fdiv" | "urem" | "srem" | "frem" | "and" | "or" | "xor")
  		public Alternatives getAlternatives_0() { return cAlternatives_0; }
  
  		//opcode=("add" | "sub" | "mul" | "shl") ("nuw"? & "nsw"?)
  		public Group getGroup_0_0() { return cGroup_0_0; }
  
  		//opcode=("add" | "sub" | "mul" | "shl")
  		public Assignment getOpcodeAssignment_0_0_0() { return cOpcodeAssignment_0_0_0; }
  
  		//"add" | "sub" | "mul" | "shl"
  		public Alternatives getOpcodeAlternatives_0_0_0_0() { return cOpcodeAlternatives_0_0_0_0; }
  
  		//"add"
  		public Keyword getOpcodeAddKeyword_0_0_0_0_0() { return cOpcodeAddKeyword_0_0_0_0_0; }
  
  		//"sub"
  		public Keyword getOpcodeSubKeyword_0_0_0_0_1() { return cOpcodeSubKeyword_0_0_0_0_1; }
  
  		//"mul"
  		public Keyword getOpcodeMulKeyword_0_0_0_0_2() { return cOpcodeMulKeyword_0_0_0_0_2; }
  
  		//"shl"
  		public Keyword getOpcodeShlKeyword_0_0_0_0_3() { return cOpcodeShlKeyword_0_0_0_0_3; }
  
  		//"nuw"? & "nsw"?
  		public UnorderedGroup getUnorderedGroup_0_0_1() { return cUnorderedGroup_0_0_1; }
  
  		//"nuw"?
  		public Keyword getNuwKeyword_0_0_1_0() { return cNuwKeyword_0_0_1_0; }
  
  		//"nsw"?
  		public Keyword getNswKeyword_0_0_1_1() { return cNswKeyword_0_0_1_1; }
  
  		//opcode=("sdiv" | "udiv" | "lshr" | "ashr") "exact"?
  		public Group getGroup_0_1() { return cGroup_0_1; }
  
  		//opcode=("sdiv" | "udiv" | "lshr" | "ashr")
  		public Assignment getOpcodeAssignment_0_1_0() { return cOpcodeAssignment_0_1_0; }
  
  		//"sdiv" | "udiv" | "lshr" | "ashr"
  		public Alternatives getOpcodeAlternatives_0_1_0_0() { return cOpcodeAlternatives_0_1_0_0; }
  
  		//"sdiv"
  		public Keyword getOpcodeSdivKeyword_0_1_0_0_0() { return cOpcodeSdivKeyword_0_1_0_0_0; }
  
  		//"udiv"
  		public Keyword getOpcodeUdivKeyword_0_1_0_0_1() { return cOpcodeUdivKeyword_0_1_0_0_1; }
  
  		//"lshr"
  		public Keyword getOpcodeLshrKeyword_0_1_0_0_2() { return cOpcodeLshrKeyword_0_1_0_0_2; }
  
  		//"ashr"
  		public Keyword getOpcodeAshrKeyword_0_1_0_0_3() { return cOpcodeAshrKeyword_0_1_0_0_3; }
  
  		//"exact"?
  		public Keyword getExactKeyword_0_1_1() { return cExactKeyword_0_1_1; }
  
  		//opcode=("fadd" | "fsub" | "fmul" | "fdiv" | "urem" | "srem" | "frem" | "and" | "or" | "xor")
  		public Assignment getOpcodeAssignment_0_2() { return cOpcodeAssignment_0_2; }
  
  		//"fadd" | "fsub" | "fmul" | "fdiv" | "urem" | "srem" | "frem" | "and" | "or" | "xor"
  		public Alternatives getOpcodeAlternatives_0_2_0() { return cOpcodeAlternatives_0_2_0; }
  
  		//"fadd"
  		public Keyword getOpcodeFaddKeyword_0_2_0_0() { return cOpcodeFaddKeyword_0_2_0_0; }
  
  		//"fsub"
  		public Keyword getOpcodeFsubKeyword_0_2_0_1() { return cOpcodeFsubKeyword_0_2_0_1; }
  
  		//"fmul"
  		public Keyword getOpcodeFmulKeyword_0_2_0_2() { return cOpcodeFmulKeyword_0_2_0_2; }
  
  		//"fdiv"
  		public Keyword getOpcodeFdivKeyword_0_2_0_3() { return cOpcodeFdivKeyword_0_2_0_3; }
  
  		//"urem"
  		public Keyword getOpcodeUremKeyword_0_2_0_4() { return cOpcodeUremKeyword_0_2_0_4; }
  
  		//"srem"
  		public Keyword getOpcodeSremKeyword_0_2_0_5() { return cOpcodeSremKeyword_0_2_0_5; }
  
  		//"frem"
  		public Keyword getOpcodeFremKeyword_0_2_0_6() { return cOpcodeFremKeyword_0_2_0_6; }
  
  		//"and"
  		public Keyword getOpcodeAndKeyword_0_2_0_7() { return cOpcodeAndKeyword_0_2_0_7; }
  
  		//"or"
  		public Keyword getOpcodeOrKeyword_0_2_0_8() { return cOpcodeOrKeyword_0_2_0_8; }
  
  		//"xor"
  		public Keyword getOpcodeXorKeyword_0_2_0_9() { return cOpcodeXorKeyword_0_2_0_9; }
  
  		//"("
  		public Keyword getLeftParenthesisKeyword_1() { return cLeftParenthesisKeyword_1; }
  
  		//op1=TypedValue
  		public Assignment getOp1Assignment_2() { return cOp1Assignment_2; }
  
  		//TypedValue
  		public RuleCall getOp1TypedValueParserRuleCall_2_0() { return cOp1TypedValueParserRuleCall_2_0; }
  
  		//","
  		public Keyword getCommaKeyword_3() { return cCommaKeyword_3; }
  
  		//op2=TypedValue
  		public Assignment getOp2Assignment_4() { return cOp2Assignment_4; }
  
  		//TypedValue
  		public RuleCall getOp2TypedValueParserRuleCall_4_0() { return cOp2TypedValueParserRuleCall_4_0; }
  
  		//")"
  		public Keyword getRightParenthesisKeyword_5() { return cRightParenthesisKeyword_5; }
  	}
  
  	public class UndefElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Undef");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Keyword cUndefKeyword_0 = (Keyword)cGroup.eContents().get(0);
  		private final Action cUndefAction_1 = (Action)cGroup.eContents().get(1);
  		
  		//Undef:
  		//
  		//	"undef" {Undef};
  		public ParserRule getRule() { return rule; }
  
  		//"undef" {Undef}
  		public Group getGroup() { return cGroup; }
  
  		//"undef"
  		public Keyword getUndefKeyword_0() { return cUndefKeyword_0; }
  
  		//{Undef}
  		public Action getUndefAction_1() { return cUndefAction_1; }
  	}
  
  	public class BlockAddressElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "BlockAddress");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Keyword cBlockaddressKeyword_0 = (Keyword)cGroup.eContents().get(0);
  		private final Keyword cLeftParenthesisKeyword_1 = (Keyword)cGroup.eContents().get(1);
  		private final Assignment cFunctionAssignment_2 = (Assignment)cGroup.eContents().get(2);
  		private final RuleCall cFunctionGlobalValueRefParserRuleCall_2_0 = (RuleCall)cFunctionAssignment_2.eContents().get(0);
  		private final Keyword cCommaKeyword_3 = (Keyword)cGroup.eContents().get(3);
  		private final Assignment cBasicBlockAssignment_4 = (Assignment)cGroup.eContents().get(4);
  		private final RuleCall cBasicBlockBasicBlockRefParserRuleCall_4_0 = (RuleCall)cBasicBlockAssignment_4.eContents().get(0);
  		private final Keyword cRightParenthesisKeyword_5 = (Keyword)cGroup.eContents().get(5);
  		
  		//BlockAddress:
  		//
  		//	"blockaddress" "(" function=GlobalValueRef "," basicBlock=BasicBlockRef ")";
  		public ParserRule getRule() { return rule; }
  
  		//"blockaddress" "(" function=GlobalValueRef "," basicBlock=BasicBlockRef ")"
  		public Group getGroup() { return cGroup; }
  
  		//"blockaddress"
  		public Keyword getBlockaddressKeyword_0() { return cBlockaddressKeyword_0; }
  
  		//"("
  		public Keyword getLeftParenthesisKeyword_1() { return cLeftParenthesisKeyword_1; }
  
  		//function=GlobalValueRef
  		public Assignment getFunctionAssignment_2() { return cFunctionAssignment_2; }
  
  		//GlobalValueRef
  		public RuleCall getFunctionGlobalValueRefParserRuleCall_2_0() { return cFunctionGlobalValueRefParserRuleCall_2_0; }
  
  		//","
  		public Keyword getCommaKeyword_3() { return cCommaKeyword_3; }
  
  		//basicBlock=BasicBlockRef
  		public Assignment getBasicBlockAssignment_4() { return cBasicBlockAssignment_4; }
  
  		//BasicBlockRef
  		public RuleCall getBasicBlockBasicBlockRefParserRuleCall_4_0() { return cBasicBlockBasicBlockRefParserRuleCall_4_0; }
  
  		//")"
  		public Keyword getRightParenthesisKeyword_5() { return cRightParenthesisKeyword_5; }
  	}
  
  	public class ZeroInitializerElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ZeroInitializer");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Keyword cZeroinitializerKeyword_0 = (Keyword)cGroup.eContents().get(0);
  		private final Action cZeroInitializerAction_1 = (Action)cGroup.eContents().get(1);
  		
  		//ZeroInitializer:
  		//
  		//	"zeroinitializer" {ZeroInitializer};
  		public ParserRule getRule() { return rule; }
  
  		//"zeroinitializer" {ZeroInitializer}
  		public Group getGroup() { return cGroup; }
  
  		//"zeroinitializer"
  		public Keyword getZeroinitializerKeyword_0() { return cZeroinitializerKeyword_0; }
  
  		//{ZeroInitializer}
  		public Action getZeroInitializerAction_1() { return cZeroInitializerAction_1; }
  	}
  
  	public class StructureConstantElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "StructureConstant");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Action cStructureConstantAction_0 = (Action)cGroup.eContents().get(0);
  		private final Alternatives cAlternatives_1 = (Alternatives)cGroup.eContents().get(1);
  		private final Group cGroup_1_0 = (Group)cAlternatives_1.eContents().get(0);
  		private final Keyword cLeftCurlyBracketKeyword_1_0_0 = (Keyword)cGroup_1_0.eContents().get(0);
  		private final Assignment cListAssignment_1_0_1 = (Assignment)cGroup_1_0.eContents().get(1);
  		private final RuleCall cListConstantListParserRuleCall_1_0_1_0 = (RuleCall)cListAssignment_1_0_1.eContents().get(0);
  		private final Keyword cRightCurlyBracketKeyword_1_0_2 = (Keyword)cGroup_1_0.eContents().get(2);
  		private final Group cGroup_1_1 = (Group)cAlternatives_1.eContents().get(1);
  		private final Assignment cPackedAssignment_1_1_0 = (Assignment)cGroup_1_1.eContents().get(0);
  		private final Keyword cPackedLessThanSignKeyword_1_1_0_0 = (Keyword)cPackedAssignment_1_1_0.eContents().get(0);
  		private final Keyword cLeftCurlyBracketKeyword_1_1_1 = (Keyword)cGroup_1_1.eContents().get(1);
  		private final Assignment cListAssignment_1_1_2 = (Assignment)cGroup_1_1.eContents().get(2);
  		private final RuleCall cListConstantListParserRuleCall_1_1_2_0 = (RuleCall)cListAssignment_1_1_2.eContents().get(0);
  		private final Keyword cRightCurlyBracketKeyword_1_1_3 = (Keyword)cGroup_1_1.eContents().get(3);
  		private final Keyword cGreaterThanSignKeyword_1_1_4 = (Keyword)cGroup_1_1.eContents().get(4);
  		
  		//StructureConstant:
  		//
  		//	{StructureConstant} ("{" list=ConstantList? "}" | packed="<" "{" list=ConstantList? "}" ">");
  		public ParserRule getRule() { return rule; }
  
  		//{StructureConstant} ("{" list=ConstantList? "}" | packed="<" "{" list=ConstantList? "}" ">")
  		public Group getGroup() { return cGroup; }
  
  		//{StructureConstant}
  		public Action getStructureConstantAction_0() { return cStructureConstantAction_0; }
  
  		//"{" list=ConstantList? "}" | packed="<" "{" list=ConstantList? "}" ">"
  		public Alternatives getAlternatives_1() { return cAlternatives_1; }
  
  		//"{" list=ConstantList? "}"
  		public Group getGroup_1_0() { return cGroup_1_0; }
  
  		//"{"
  		public Keyword getLeftCurlyBracketKeyword_1_0_0() { return cLeftCurlyBracketKeyword_1_0_0; }
  
  		//list=ConstantList?
  		public Assignment getListAssignment_1_0_1() { return cListAssignment_1_0_1; }
  
  		//ConstantList
  		public RuleCall getListConstantListParserRuleCall_1_0_1_0() { return cListConstantListParserRuleCall_1_0_1_0; }
  
  		//"}"
  		public Keyword getRightCurlyBracketKeyword_1_0_2() { return cRightCurlyBracketKeyword_1_0_2; }
  
  		//packed="<" "{" list=ConstantList? "}" ">"
  		public Group getGroup_1_1() { return cGroup_1_1; }
  
  		//packed="<"
  		public Assignment getPackedAssignment_1_1_0() { return cPackedAssignment_1_1_0; }
  
  		//"<"
  		public Keyword getPackedLessThanSignKeyword_1_1_0_0() { return cPackedLessThanSignKeyword_1_1_0_0; }
  
  		//"{"
  		public Keyword getLeftCurlyBracketKeyword_1_1_1() { return cLeftCurlyBracketKeyword_1_1_1; }
  
  		//list=ConstantList?
  		public Assignment getListAssignment_1_1_2() { return cListAssignment_1_1_2; }
  
  		//ConstantList
  		public RuleCall getListConstantListParserRuleCall_1_1_2_0() { return cListConstantListParserRuleCall_1_1_2_0; }
  
  		//"}"
  		public Keyword getRightCurlyBracketKeyword_1_1_3() { return cRightCurlyBracketKeyword_1_1_3; }
  
  		//">"
  		public Keyword getGreaterThanSignKeyword_1_1_4() { return cGreaterThanSignKeyword_1_1_4; }
  	}
  
  	public class ArrayConstantElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ArrayConstant");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Action cArrayConstantAction_0 = (Action)cGroup.eContents().get(0);
  		private final Keyword cLeftSquareBracketKeyword_1 = (Keyword)cGroup.eContents().get(1);
  		private final Assignment cListAssignment_2 = (Assignment)cGroup.eContents().get(2);
  		private final RuleCall cListConstantListParserRuleCall_2_0 = (RuleCall)cListAssignment_2.eContents().get(0);
  		private final Keyword cRightSquareBracketKeyword_3 = (Keyword)cGroup.eContents().get(3);
  		
  		//ArrayConstant:
  		//
  		//	{ArrayConstant} "[" list=ConstantList? "]";
  		public ParserRule getRule() { return rule; }
  
  		//{ArrayConstant} "[" list=ConstantList? "]"
  		public Group getGroup() { return cGroup; }
  
  		//{ArrayConstant}
  		public Action getArrayConstantAction_0() { return cArrayConstantAction_0; }
  
  		//"["
  		public Keyword getLeftSquareBracketKeyword_1() { return cLeftSquareBracketKeyword_1; }
  
  		//list=ConstantList?
  		public Assignment getListAssignment_2() { return cListAssignment_2; }
  
  		//ConstantList
  		public RuleCall getListConstantListParserRuleCall_2_0() { return cListConstantListParserRuleCall_2_0; }
  
  		//"]"
  		public Keyword getRightSquareBracketKeyword_3() { return cRightSquareBracketKeyword_3; }
  	}
  
  	public class VectorConstantElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "VectorConstant");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Action cVectorConstantAction_0 = (Action)cGroup.eContents().get(0);
  		private final Keyword cLessThanSignKeyword_1 = (Keyword)cGroup.eContents().get(1);
  		private final Assignment cListAssignment_2 = (Assignment)cGroup.eContents().get(2);
  		private final RuleCall cListConstantListParserRuleCall_2_0 = (RuleCall)cListAssignment_2.eContents().get(0);
  		private final Keyword cGreaterThanSignKeyword_3 = (Keyword)cGroup.eContents().get(3);
  		
  		//VectorConstant:
  		//
  		//	{VectorConstant} "<" list=ConstantList? ">";
  		public ParserRule getRule() { return rule; }
  
  		//{VectorConstant} "<" list=ConstantList? ">"
  		public Group getGroup() { return cGroup; }
  
  		//{VectorConstant}
  		public Action getVectorConstantAction_0() { return cVectorConstantAction_0; }
  
  		//"<"
  		public Keyword getLessThanSignKeyword_1() { return cLessThanSignKeyword_1; }
  
  		//list=ConstantList?
  		public Assignment getListAssignment_2() { return cListAssignment_2; }
  
  		//ConstantList
  		public RuleCall getListConstantListParserRuleCall_2_0() { return cListConstantListParserRuleCall_2_0; }
  
  		//">"
  		public Keyword getGreaterThanSignKeyword_3() { return cGreaterThanSignKeyword_3; }
  	}
  
  	public class ConstantListElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ConstantList");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cTypedConstantsAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final RuleCall cTypedConstantsTypedConstantParserRuleCall_0_0 = (RuleCall)cTypedConstantsAssignment_0.eContents().get(0);
  		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
  		private final Keyword cCommaKeyword_1_0 = (Keyword)cGroup_1.eContents().get(0);
  		private final Assignment cTypedConstantsAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
  		private final RuleCall cTypedConstantsTypedConstantParserRuleCall_1_1_0 = (RuleCall)cTypedConstantsAssignment_1_1.eContents().get(0);
  		
  		////types+=Type constants+=Constant (',' types+=Type constants+=Constant)*
  		//
  		//ConstantList:
  		//
  		//	typedConstants+=TypedConstant ("," typedConstants+=TypedConstant)*;
  		public ParserRule getRule() { return rule; }
  
  		//typedConstants+=TypedConstant ("," typedConstants+=TypedConstant)*
  		public Group getGroup() { return cGroup; }
  
  		//typedConstants+=TypedConstant
  		public Assignment getTypedConstantsAssignment_0() { return cTypedConstantsAssignment_0; }
  
  		//TypedConstant
  		public RuleCall getTypedConstantsTypedConstantParserRuleCall_0_0() { return cTypedConstantsTypedConstantParserRuleCall_0_0; }
  
  		//("," typedConstants+=TypedConstant)*
  		public Group getGroup_1() { return cGroup_1; }
  
  		//","
  		public Keyword getCommaKeyword_1_0() { return cCommaKeyword_1_0; }
  
  		//typedConstants+=TypedConstant
  		public Assignment getTypedConstantsAssignment_1_1() { return cTypedConstantsAssignment_1_1; }
  
  		//TypedConstant
  		public RuleCall getTypedConstantsTypedConstantParserRuleCall_1_1_0() { return cTypedConstantsTypedConstantParserRuleCall_1_1_0; }
  	}
  
  	public class TypedConstantElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "TypedConstant");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cTypeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final RuleCall cTypeTypeParserRuleCall_0_0 = (RuleCall)cTypeAssignment_0.eContents().get(0);
  		private final Assignment cValueAssignment_1 = (Assignment)cGroup.eContents().get(1);
  		private final RuleCall cValueConstantParserRuleCall_1_0 = (RuleCall)cValueAssignment_1.eContents().get(0);
  		
  		//TypedConstant:
  		//
  		//	type=Type value=Constant;
  		public ParserRule getRule() { return rule; }
  
  		//type=Type value=Constant
  		public Group getGroup() { return cGroup; }
  
  		//type=Type
  		public Assignment getTypeAssignment_0() { return cTypeAssignment_0; }
  
  		//Type
  		public RuleCall getTypeTypeParserRuleCall_0_0() { return cTypeTypeParserRuleCall_0_0; }
  
  		//value=Constant
  		public Assignment getValueAssignment_1() { return cValueAssignment_1; }
  
  		//Constant
  		public RuleCall getValueConstantParserRuleCall_1_0() { return cValueConstantParserRuleCall_1_0; }
  	}
  
  	public class SimpleConstantElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "SimpleConstant");
  		private final Assignment cValueAssignment = (Assignment)rule.eContents().get(1);
  		private final Alternatives cValueAlternatives_0 = (Alternatives)cValueAssignment.eContents().get(0);
  		private final RuleCall cValueINTEGERTerminalRuleCall_0_0 = (RuleCall)cValueAlternatives_0.eContents().get(0);
  		private final RuleCall cValueSIGNED_INTTerminalRuleCall_0_1 = (RuleCall)cValueAlternatives_0.eContents().get(1);
  		private final RuleCall cValueFLOATTerminalRuleCall_0_2 = (RuleCall)cValueAlternatives_0.eContents().get(2);
  		private final RuleCall cValueBOOLEANTerminalRuleCall_0_3 = (RuleCall)cValueAlternatives_0.eContents().get(3);
  		private final RuleCall cValueNULLTerminalRuleCall_0_4 = (RuleCall)cValueAlternatives_0.eContents().get(4);
  		private final RuleCall cValueCSTRINGTerminalRuleCall_0_5 = (RuleCall)cValueAlternatives_0.eContents().get(5);
  		
  		//SimpleConstant:
  		//
  		//	value=(INTEGER | SIGNED_INT | FLOAT | BOOLEAN | NULL | CSTRING);
  		public ParserRule getRule() { return rule; }
  
  		//value=(INTEGER | SIGNED_INT | FLOAT | BOOLEAN | NULL | CSTRING)
  		public Assignment getValueAssignment() { return cValueAssignment; }
  
  		//INTEGER | SIGNED_INT | FLOAT | BOOLEAN | NULL | CSTRING
  		public Alternatives getValueAlternatives_0() { return cValueAlternatives_0; }
  
  		//INTEGER
  		public RuleCall getValueINTEGERTerminalRuleCall_0_0() { return cValueINTEGERTerminalRuleCall_0_0; }
  
  		//SIGNED_INT
  		public RuleCall getValueSIGNED_INTTerminalRuleCall_0_1() { return cValueSIGNED_INTTerminalRuleCall_0_1; }
  
  		//FLOAT
  		public RuleCall getValueFLOATTerminalRuleCall_0_2() { return cValueFLOATTerminalRuleCall_0_2; }
  
  		//BOOLEAN
  		public RuleCall getValueBOOLEANTerminalRuleCall_0_3() { return cValueBOOLEANTerminalRuleCall_0_3; }
  
  		//NULL
  		public RuleCall getValueNULLTerminalRuleCall_0_4() { return cValueNULLTerminalRuleCall_0_4; }
  
  		//CSTRING
  		public RuleCall getValueCSTRINGTerminalRuleCall_0_5() { return cValueCSTRINGTerminalRuleCall_0_5; }
  	}
  
  	public class MetadataNodeElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "MetadataNode");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Action cMetadataNodeAction_0 = (Action)cGroup.eContents().get(0);
  		private final Keyword cExclamationMarkKeyword_1 = (Keyword)cGroup.eContents().get(1);
  		private final Keyword cLeftCurlyBracketKeyword_2 = (Keyword)cGroup.eContents().get(2);
  		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
  		private final Assignment cElementsAssignment_3_0 = (Assignment)cGroup_3.eContents().get(0);
  		private final RuleCall cElementsMetadataNodeElementParserRuleCall_3_0_0 = (RuleCall)cElementsAssignment_3_0.eContents().get(0);
  		private final Group cGroup_3_1 = (Group)cGroup_3.eContents().get(1);
  		private final Keyword cCommaKeyword_3_1_0 = (Keyword)cGroup_3_1.eContents().get(0);
  		private final Assignment cElementsAssignment_3_1_1 = (Assignment)cGroup_3_1.eContents().get(1);
  		private final RuleCall cElementsMetadataNodeElementParserRuleCall_3_1_1_0 = (RuleCall)cElementsAssignment_3_1_1.eContents().get(0);
  		private final Keyword cRightCurlyBracketKeyword_4 = (Keyword)cGroup.eContents().get(4);
  		
  		//MetadataNode:
  		//
  		//	{MetadataNode} "!" "{" (elements+=MetadataNodeElement ("," elements+=MetadataNodeElement)*)? "}";
  		public ParserRule getRule() { return rule; }
  
  		//{MetadataNode} "!" "{" (elements+=MetadataNodeElement ("," elements+=MetadataNodeElement)*)? "}"
  		public Group getGroup() { return cGroup; }
  
  		//{MetadataNode}
  		public Action getMetadataNodeAction_0() { return cMetadataNodeAction_0; }
  
  		//"!"
  		public Keyword getExclamationMarkKeyword_1() { return cExclamationMarkKeyword_1; }
  
  		//"{"
  		public Keyword getLeftCurlyBracketKeyword_2() { return cLeftCurlyBracketKeyword_2; }
  
  		//(elements+=MetadataNodeElement ("," elements+=MetadataNodeElement)*)?
  		public Group getGroup_3() { return cGroup_3; }
  
  		//elements+=MetadataNodeElement
  		public Assignment getElementsAssignment_3_0() { return cElementsAssignment_3_0; }
  
  		//MetadataNodeElement
  		public RuleCall getElementsMetadataNodeElementParserRuleCall_3_0_0() { return cElementsMetadataNodeElementParserRuleCall_3_0_0; }
  
  		//("," elements+=MetadataNodeElement)*
  		public Group getGroup_3_1() { return cGroup_3_1; }
  
  		//","
  		public Keyword getCommaKeyword_3_1_0() { return cCommaKeyword_3_1_0; }
  
  		//elements+=MetadataNodeElement
  		public Assignment getElementsAssignment_3_1_1() { return cElementsAssignment_3_1_1; }
  
  		//MetadataNodeElement
  		public RuleCall getElementsMetadataNodeElementParserRuleCall_3_1_1_0() { return cElementsMetadataNodeElementParserRuleCall_3_1_1_0; }
  
  		//"}"
  		public Keyword getRightCurlyBracketKeyword_4() { return cRightCurlyBracketKeyword_4; }
  	}
  
  	public class MetadataNodeElementElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "MetadataNodeElement");
  		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
  		private final Assignment cValueAssignment_0 = (Assignment)cAlternatives.eContents().get(0);
  		private final RuleCall cValueTypedValueParserRuleCall_0_0 = (RuleCall)cValueAssignment_0.eContents().get(0);
  		private final Assignment cMetadataRefAssignment_1 = (Assignment)cAlternatives.eContents().get(1);
  		private final RuleCall cMetadataRefMetadataRefParserRuleCall_1_0 = (RuleCall)cMetadataRefAssignment_1.eContents().get(0);
  		private final Assignment cNullAssignment_2 = (Assignment)cAlternatives.eContents().get(2);
  		private final RuleCall cNullNULLTerminalRuleCall_2_0 = (RuleCall)cNullAssignment_2.eContents().get(0);
  		
  		//MetadataNodeElement:
  		//
  		//	value=TypedValue | metadataRef=MetadataRef | null=NULL;
  		public ParserRule getRule() { return rule; }
  
  		//value=TypedValue | metadataRef=MetadataRef | null=NULL
  		public Alternatives getAlternatives() { return cAlternatives; }
  
  		//value=TypedValue
  		public Assignment getValueAssignment_0() { return cValueAssignment_0; }
  
  		//TypedValue
  		public RuleCall getValueTypedValueParserRuleCall_0_0() { return cValueTypedValueParserRuleCall_0_0; }
  
  		//metadataRef=MetadataRef
  		public Assignment getMetadataRefAssignment_1() { return cMetadataRefAssignment_1; }
  
  		//MetadataRef
  		public RuleCall getMetadataRefMetadataRefParserRuleCall_1_0() { return cMetadataRefMetadataRefParserRuleCall_1_0; }
  
  		//null=NULL
  		public Assignment getNullAssignment_2() { return cNullAssignment_2; }
  
  		//NULL
  		public RuleCall getNullNULLTerminalRuleCall_2_0() { return cNullNULLTerminalRuleCall_2_0; }
  	}
  
  	public class MetadataStringElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "MetadataString");
  		private final Assignment cNameAssignment = (Assignment)rule.eContents().get(1);
  		private final RuleCall cNameMETADATA_STRINGTerminalRuleCall_0 = (RuleCall)cNameAssignment.eContents().get(0);
  		
  		//MetadataString:
  		//
  		//	name=METADATA_STRING;
  		public ParserRule getRule() { return rule; }
  
  		//name=METADATA_STRING
  		public Assignment getNameAssignment() { return cNameAssignment; }
  
  		//METADATA_STRING
  		public RuleCall getNameMETADATA_STRINGTerminalRuleCall_0() { return cNameMETADATA_STRINGTerminalRuleCall_0; }
  	}
  
  	public class TLSmodelElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "TLSmodel");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Keyword cThread_localKeyword_0 = (Keyword)cGroup.eContents().get(0);
  		private final Keyword cLeftParenthesisKeyword_1 = (Keyword)cGroup.eContents().get(1);
  		private final RuleCall cTLSoptionParserRuleCall_2 = (RuleCall)cGroup.eContents().get(2);
  		private final Keyword cRightParenthesisKeyword_3 = (Keyword)cGroup.eContents().get(3);
  		
  		//TLSmodel:
  		//
  		//	"thread_local" "(" TLSoption ")";
  		public ParserRule getRule() { return rule; }
  
  		//"thread_local" "(" TLSoption ")"
  		public Group getGroup() { return cGroup; }
  
  		//"thread_local"
  		public Keyword getThread_localKeyword_0() { return cThread_localKeyword_0; }
  
  		//"("
  		public Keyword getLeftParenthesisKeyword_1() { return cLeftParenthesisKeyword_1; }
  
  		//TLSoption
  		public RuleCall getTLSoptionParserRuleCall_2() { return cTLSoptionParserRuleCall_2; }
  
  		//")"
  		public Keyword getRightParenthesisKeyword_3() { return cRightParenthesisKeyword_3; }
  	}
  
  	public class TLSoptionElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "TLSoption");
  		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
  		private final Keyword cLocaldynamicKeyword_0 = (Keyword)cAlternatives.eContents().get(0);
  		private final Keyword cInitialexecKeyword_1 = (Keyword)cAlternatives.eContents().get(1);
  		private final Keyword cLocalexecKeyword_2 = (Keyword)cAlternatives.eContents().get(2);
  		
  		//TLSoption:
  		//
  		//	"localdynamic" | "initialexec" | "localexec";
  		public ParserRule getRule() { return rule; }
  
  		//"localdynamic" | "initialexec" | "localexec"
  		public Alternatives getAlternatives() { return cAlternatives; }
  
  		//"localdynamic"
  		public Keyword getLocaldynamicKeyword_0() { return cLocaldynamicKeyword_0; }
  
  		//"initialexec"
  		public Keyword getInitialexecKeyword_1() { return cInitialexecKeyword_1; }
  
  		//"localexec"
  		public Keyword getLocalexecKeyword_2() { return cLocalexecKeyword_2; }
  	}
  
  	public class AddressSpaceElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "AddressSpace");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Keyword cAddrspaceKeyword_0 = (Keyword)cGroup.eContents().get(0);
  		private final Keyword cLeftParenthesisKeyword_1 = (Keyword)cGroup.eContents().get(1);
  		private final Assignment cValueAssignment_2 = (Assignment)cGroup.eContents().get(2);
  		private final RuleCall cValueINTEGERTerminalRuleCall_2_0 = (RuleCall)cValueAssignment_2.eContents().get(0);
  		private final Keyword cRightParenthesisKeyword_3 = (Keyword)cGroup.eContents().get(3);
  		
  		//AddressSpace:
  		//
  		//	"addrspace" "(" value=INTEGER ")";
  		public ParserRule getRule() { return rule; }
  
  		//"addrspace" "(" value=INTEGER ")"
  		public Group getGroup() { return cGroup; }
  
  		//"addrspace"
  		public Keyword getAddrspaceKeyword_0() { return cAddrspaceKeyword_0; }
  
  		//"("
  		public Keyword getLeftParenthesisKeyword_1() { return cLeftParenthesisKeyword_1; }
  
  		//value=INTEGER
  		public Assignment getValueAssignment_2() { return cValueAssignment_2; }
  
  		//INTEGER
  		public RuleCall getValueINTEGERTerminalRuleCall_2_0() { return cValueINTEGERTerminalRuleCall_2_0; }
  
  		//")"
  		public Keyword getRightParenthesisKeyword_3() { return cRightParenthesisKeyword_3; }
  	}
  
  	public class SectionElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Section");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Keyword cSectionKeyword_0 = (Keyword)cGroup.eContents().get(0);
  		private final RuleCall cSTRINGTerminalRuleCall_1 = (RuleCall)cGroup.eContents().get(1);
  		
  		//Section:
  		//
  		//	"section" STRING;
  		public ParserRule getRule() { return rule; }
  
  		//"section" STRING
  		public Group getGroup() { return cGroup; }
  
  		//"section"
  		public Keyword getSectionKeyword_0() { return cSectionKeyword_0; }
  
  		//STRING
  		public RuleCall getSTRINGTerminalRuleCall_1() { return cSTRINGTerminalRuleCall_1; }
  	}
  
  	public class AlignElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Align");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Keyword cAlignKeyword_0 = (Keyword)cGroup.eContents().get(0);
  		private final RuleCall cINTEGERTerminalRuleCall_1 = (RuleCall)cGroup.eContents().get(1);
  		
  		//Align:
  		//
  		//	"align" INTEGER;
  		public ParserRule getRule() { return rule; }
  
  		//"align" INTEGER
  		public Group getGroup() { return cGroup; }
  
  		//"align"
  		public Keyword getAlignKeyword_0() { return cAlignKeyword_0; }
  
  		//INTEGER
  		public RuleCall getINTEGERTerminalRuleCall_1() { return cINTEGERTerminalRuleCall_1; }
  	}
  
  	public class GcElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Gc");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Keyword cGcKeyword_0 = (Keyword)cGroup.eContents().get(0);
  		private final RuleCall cSTRINGTerminalRuleCall_1 = (RuleCall)cGroup.eContents().get(1);
  		
  		//Gc:
  		//
  		//	"gc" STRING;
  		public ParserRule getRule() { return rule; }
  
  		//"gc" STRING
  		public Group getGroup() { return cGroup; }
  
  		//"gc"
  		public Keyword getGcKeyword_0() { return cGcKeyword_0; }
  
  		//STRING
  		public RuleCall getSTRINGTerminalRuleCall_1() { return cSTRINGTerminalRuleCall_1; }
  	}
  
  	public class FunctionElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Function");
  		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
  		private final RuleCall cFunctionDefParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
  		private final RuleCall cFunctionDeclParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
  		
  		//Function:
  		//
  		//	FunctionDef | FunctionDecl;
  		public ParserRule getRule() { return rule; }
  
  		//FunctionDef | FunctionDecl
  		public Alternatives getAlternatives() { return cAlternatives; }
  
  		//FunctionDef
  		public RuleCall getFunctionDefParserRuleCall_0() { return cFunctionDefParserRuleCall_0; }
  
  		//FunctionDecl
  		public RuleCall getFunctionDeclParserRuleCall_1() { return cFunctionDeclParserRuleCall_1; }
  	}
  
  	public class FunctionDefElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "FunctionDef");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Keyword cDefineKeyword_0 = (Keyword)cGroup.eContents().get(0);
  		private final Assignment cHeaderAssignment_1 = (Assignment)cGroup.eContents().get(1);
  		private final RuleCall cHeaderFunctionHeaderParserRuleCall_1_0 = (RuleCall)cHeaderAssignment_1.eContents().get(0);
  		private final Keyword cLeftCurlyBracketKeyword_2 = (Keyword)cGroup.eContents().get(2);
  		private final Assignment cBasicBlocksAssignment_3 = (Assignment)cGroup.eContents().get(3);
  		private final RuleCall cBasicBlocksBasicBlockParserRuleCall_3_0 = (RuleCall)cBasicBlocksAssignment_3.eContents().get(0);
  		private final Keyword cRightCurlyBracketKeyword_4 = (Keyword)cGroup.eContents().get(4);
  		
  		//FunctionDef:
  		//
  		//	"define" header=FunctionHeader "{" basicBlocks+=BasicBlock+ "}";
  		public ParserRule getRule() { return rule; }
  
  		//"define" header=FunctionHeader "{" basicBlocks+=BasicBlock+ "}"
  		public Group getGroup() { return cGroup; }
  
  		//"define"
  		public Keyword getDefineKeyword_0() { return cDefineKeyword_0; }
  
  		//header=FunctionHeader
  		public Assignment getHeaderAssignment_1() { return cHeaderAssignment_1; }
  
  		//FunctionHeader
  		public RuleCall getHeaderFunctionHeaderParserRuleCall_1_0() { return cHeaderFunctionHeaderParserRuleCall_1_0; }
  
  		//"{"
  		public Keyword getLeftCurlyBracketKeyword_2() { return cLeftCurlyBracketKeyword_2; }
  
  		//basicBlocks+=BasicBlock+
  		public Assignment getBasicBlocksAssignment_3() { return cBasicBlocksAssignment_3; }
  
  		//BasicBlock
  		public RuleCall getBasicBlocksBasicBlockParserRuleCall_3_0() { return cBasicBlocksBasicBlockParserRuleCall_3_0; }
  
  		//"}"
  		public Keyword getRightCurlyBracketKeyword_4() { return cRightCurlyBracketKeyword_4; }
  	}
  
  	public class FunctionDeclElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "FunctionDecl");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Keyword cDeclareKeyword_0 = (Keyword)cGroup.eContents().get(0);
  		private final Assignment cHeaderAssignment_1 = (Assignment)cGroup.eContents().get(1);
  		private final RuleCall cHeaderFunctionHeaderParserRuleCall_1_0 = (RuleCall)cHeaderAssignment_1.eContents().get(0);
  		
  		//FunctionDecl:
  		//
  		//	"declare" header=FunctionHeader;
  		public ParserRule getRule() { return rule; }
  
  		//"declare" header=FunctionHeader
  		public Group getGroup() { return cGroup; }
  
  		//"declare"
  		public Keyword getDeclareKeyword_0() { return cDeclareKeyword_0; }
  
  		//header=FunctionHeader
  		public Assignment getHeaderAssignment_1() { return cHeaderAssignment_1; }
  
  		//FunctionHeader
  		public RuleCall getHeaderFunctionHeaderParserRuleCall_1_0() { return cHeaderFunctionHeaderParserRuleCall_1_0; }
  	}
  
  	public class FunctionHeaderElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "FunctionHeader");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cLinkageAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final RuleCall cLinkageLinkageParserRuleCall_0_0 = (RuleCall)cLinkageAssignment_0.eContents().get(0);
  		private final Assignment cVisibilityAssignment_1 = (Assignment)cGroup.eContents().get(1);
  		private final RuleCall cVisibilityVisibilityParserRuleCall_1_0 = (RuleCall)cVisibilityAssignment_1.eContents().get(0);
  		private final Assignment cCconvAssignment_2 = (Assignment)cGroup.eContents().get(2);
  		private final RuleCall cCconvCConvParserRuleCall_2_0 = (RuleCall)cCconvAssignment_2.eContents().get(0);
  		private final Keyword cUnnamed_addrKeyword_3 = (Keyword)cGroup.eContents().get(3);
  		private final Assignment cRettypeAttrsAssignment_4 = (Assignment)cGroup.eContents().get(4);
  		private final RuleCall cRettypeAttrsParameterAttributesParserRuleCall_4_0 = (RuleCall)cRettypeAttrsAssignment_4.eContents().get(0);
  		private final Assignment cRettypeAssignment_5 = (Assignment)cGroup.eContents().get(5);
  		private final RuleCall cRettypeTypeParserRuleCall_5_0 = (RuleCall)cRettypeAssignment_5.eContents().get(0);
  		private final Assignment cNameAssignment_6 = (Assignment)cGroup.eContents().get(6);
  		private final RuleCall cNameGLOBAL_IDTerminalRuleCall_6_0 = (RuleCall)cNameAssignment_6.eContents().get(0);
  		private final Keyword cLeftParenthesisKeyword_7 = (Keyword)cGroup.eContents().get(7);
  		private final Assignment cParametersAssignment_8 = (Assignment)cGroup.eContents().get(8);
  		private final RuleCall cParametersParametersParserRuleCall_8_0 = (RuleCall)cParametersAssignment_8.eContents().get(0);
  		private final Keyword cRightParenthesisKeyword_9 = (Keyword)cGroup.eContents().get(9);
  		private final Assignment cAttrsAssignment_10 = (Assignment)cGroup.eContents().get(10);
  		private final RuleCall cAttrsFunctionAttributesParserRuleCall_10_0 = (RuleCall)cAttrsAssignment_10.eContents().get(0);
  		private final Assignment cSectionAssignment_11 = (Assignment)cGroup.eContents().get(11);
  		private final RuleCall cSectionSectionParserRuleCall_11_0 = (RuleCall)cSectionAssignment_11.eContents().get(0);
  		private final Assignment cAlignAssignment_12 = (Assignment)cGroup.eContents().get(12);
  		private final RuleCall cAlignAlignParserRuleCall_12_0 = (RuleCall)cAlignAssignment_12.eContents().get(0);
  		private final Assignment cGcAssignment_13 = (Assignment)cGroup.eContents().get(13);
  		private final RuleCall cGcGcParserRuleCall_13_0 = (RuleCall)cGcAssignment_13.eContents().get(0);
  		private final Assignment cFunctionPrefixAssignment_14 = (Assignment)cGroup.eContents().get(14);
  		private final RuleCall cFunctionPrefixFunctionPrefixParserRuleCall_14_0 = (RuleCall)cFunctionPrefixAssignment_14.eContents().get(0);
  		
  		//FunctionHeader:
  		//
  		//	linkage=Linkage? visibility=Visibility? cconv=CConv? "unnamed_addr"? rettypeAttrs=ParameterAttributes? rettype=Type
  		//
  		//	name=GLOBAL_ID "(" parameters=Parameters ")" attrs=FunctionAttributes? section=Section? align=Align? gc=Gc?
  		//
  		//	functionPrefix=FunctionPrefix?;
  		public ParserRule getRule() { return rule; }
  
  		//linkage=Linkage? visibility=Visibility? cconv=CConv? "unnamed_addr"? rettypeAttrs=ParameterAttributes? rettype=Type
  		//
  		//name=GLOBAL_ID "(" parameters=Parameters ")" attrs=FunctionAttributes? section=Section? align=Align? gc=Gc?
  		//
  		//functionPrefix=FunctionPrefix?
  		public Group getGroup() { return cGroup; }
  
  		//linkage=Linkage?
  		public Assignment getLinkageAssignment_0() { return cLinkageAssignment_0; }
  
  		//Linkage
  		public RuleCall getLinkageLinkageParserRuleCall_0_0() { return cLinkageLinkageParserRuleCall_0_0; }
  
  		//visibility=Visibility?
  		public Assignment getVisibilityAssignment_1() { return cVisibilityAssignment_1; }
  
  		//Visibility
  		public RuleCall getVisibilityVisibilityParserRuleCall_1_0() { return cVisibilityVisibilityParserRuleCall_1_0; }
  
  		//cconv=CConv?
  		public Assignment getCconvAssignment_2() { return cCconvAssignment_2; }
  
  		//CConv
  		public RuleCall getCconvCConvParserRuleCall_2_0() { return cCconvCConvParserRuleCall_2_0; }
  
  		//"unnamed_addr"?
  		public Keyword getUnnamed_addrKeyword_3() { return cUnnamed_addrKeyword_3; }
  
  		//rettypeAttrs=ParameterAttributes?
  		public Assignment getRettypeAttrsAssignment_4() { return cRettypeAttrsAssignment_4; }
  
  		//ParameterAttributes
  		public RuleCall getRettypeAttrsParameterAttributesParserRuleCall_4_0() { return cRettypeAttrsParameterAttributesParserRuleCall_4_0; }
  
  		//rettype=Type
  		public Assignment getRettypeAssignment_5() { return cRettypeAssignment_5; }
  
  		//Type
  		public RuleCall getRettypeTypeParserRuleCall_5_0() { return cRettypeTypeParserRuleCall_5_0; }
  
  		//name=GLOBAL_ID
  		public Assignment getNameAssignment_6() { return cNameAssignment_6; }
  
  		//GLOBAL_ID
  		public RuleCall getNameGLOBAL_IDTerminalRuleCall_6_0() { return cNameGLOBAL_IDTerminalRuleCall_6_0; }
  
  		//"("
  		public Keyword getLeftParenthesisKeyword_7() { return cLeftParenthesisKeyword_7; }
  
  		//parameters=Parameters
  		public Assignment getParametersAssignment_8() { return cParametersAssignment_8; }
  
  		//Parameters
  		public RuleCall getParametersParametersParserRuleCall_8_0() { return cParametersParametersParserRuleCall_8_0; }
  
  		//")"
  		public Keyword getRightParenthesisKeyword_9() { return cRightParenthesisKeyword_9; }
  
  		//attrs=FunctionAttributes?
  		public Assignment getAttrsAssignment_10() { return cAttrsAssignment_10; }
  
  		//FunctionAttributes
  		public RuleCall getAttrsFunctionAttributesParserRuleCall_10_0() { return cAttrsFunctionAttributesParserRuleCall_10_0; }
  
  		//section=Section?
  		public Assignment getSectionAssignment_11() { return cSectionAssignment_11; }
  
  		//Section
  		public RuleCall getSectionSectionParserRuleCall_11_0() { return cSectionSectionParserRuleCall_11_0; }
  
  		//align=Align?
  		public Assignment getAlignAssignment_12() { return cAlignAssignment_12; }
  
  		//Align
  		public RuleCall getAlignAlignParserRuleCall_12_0() { return cAlignAlignParserRuleCall_12_0; }
  
  		//gc=Gc?
  		public Assignment getGcAssignment_13() { return cGcAssignment_13; }
  
  		//Gc
  		public RuleCall getGcGcParserRuleCall_13_0() { return cGcGcParserRuleCall_13_0; }
  
  		//functionPrefix=FunctionPrefix?
  		public Assignment getFunctionPrefixAssignment_14() { return cFunctionPrefixAssignment_14; }
  
  		//FunctionPrefix
  		public RuleCall getFunctionPrefixFunctionPrefixParserRuleCall_14_0() { return cFunctionPrefixFunctionPrefixParserRuleCall_14_0; }
  	}
  
  	public class FunctionPrefixElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "FunctionPrefix");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Keyword cPrefixKeyword_0 = (Keyword)cGroup.eContents().get(0);
  		private final Assignment cValueAssignment_1 = (Assignment)cGroup.eContents().get(1);
  		private final RuleCall cValueTypedConstantParserRuleCall_1_0 = (RuleCall)cValueAssignment_1.eContents().get(0);
  		
  		//FunctionPrefix:
  		//
  		//	"prefix" value=TypedConstant;
  		public ParserRule getRule() { return rule; }
  
  		//"prefix" value=TypedConstant
  		public Group getGroup() { return cGroup; }
  
  		//"prefix"
  		public Keyword getPrefixKeyword_0() { return cPrefixKeyword_0; }
  
  		//value=TypedConstant
  		public Assignment getValueAssignment_1() { return cValueAssignment_1; }
  
  		//TypedConstant
  		public RuleCall getValueTypedConstantParserRuleCall_1_0() { return cValueTypedConstantParserRuleCall_1_0; }
  	}
  
  	public class ParametersElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Parameters");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Action cParametersAction_0 = (Action)cGroup.eContents().get(0);
  		private final Alternatives cAlternatives_1 = (Alternatives)cGroup.eContents().get(1);
  		private final Group cGroup_1_0 = (Group)cAlternatives_1.eContents().get(0);
  		private final Assignment cParametersAssignment_1_0_0 = (Assignment)cGroup_1_0.eContents().get(0);
  		private final RuleCall cParametersParameterParserRuleCall_1_0_0_0 = (RuleCall)cParametersAssignment_1_0_0.eContents().get(0);
  		private final Group cGroup_1_0_1 = (Group)cGroup_1_0.eContents().get(1);
  		private final Keyword cCommaKeyword_1_0_1_0 = (Keyword)cGroup_1_0_1.eContents().get(0);
  		private final Assignment cParametersAssignment_1_0_1_1 = (Assignment)cGroup_1_0_1.eContents().get(1);
  		private final RuleCall cParametersParameterParserRuleCall_1_0_1_1_0 = (RuleCall)cParametersAssignment_1_0_1_1.eContents().get(0);
  		private final Group cGroup_1_0_2 = (Group)cGroup_1_0.eContents().get(2);
  		private final Keyword cCommaKeyword_1_0_2_0 = (Keyword)cGroup_1_0_2.eContents().get(0);
  		private final Assignment cVarargAssignment_1_0_2_1 = (Assignment)cGroup_1_0_2.eContents().get(1);
  		private final Keyword cVarargFullStopFullStopFullStopKeyword_1_0_2_1_0 = (Keyword)cVarargAssignment_1_0_2_1.eContents().get(0);
  		private final Assignment cVarargAssignment_1_1 = (Assignment)cAlternatives_1.eContents().get(1);
  		private final Keyword cVarargFullStopFullStopFullStopKeyword_1_1_0 = (Keyword)cVarargAssignment_1_1.eContents().get(0);
  		
  		//Parameters:
  		//
  		//	{Parameters} ((parameters+=Parameter ("," parameters+=Parameter)* ("," vararg="...")?)? | vararg="...");
  		public ParserRule getRule() { return rule; }
  
  		//{Parameters} ((parameters+=Parameter ("," parameters+=Parameter)* ("," vararg="...")?)? | vararg="...")
  		public Group getGroup() { return cGroup; }
  
  		//{Parameters}
  		public Action getParametersAction_0() { return cParametersAction_0; }
  
  		//(parameters+=Parameter ("," parameters+=Parameter)* ("," vararg="...")?)? | vararg="..."
  		public Alternatives getAlternatives_1() { return cAlternatives_1; }
  
  		//(parameters+=Parameter ("," parameters+=Parameter)* ("," vararg="...")?)?
  		public Group getGroup_1_0() { return cGroup_1_0; }
  
  		//parameters+=Parameter
  		public Assignment getParametersAssignment_1_0_0() { return cParametersAssignment_1_0_0; }
  
  		//Parameter
  		public RuleCall getParametersParameterParserRuleCall_1_0_0_0() { return cParametersParameterParserRuleCall_1_0_0_0; }
  
  		//("," parameters+=Parameter)*
  		public Group getGroup_1_0_1() { return cGroup_1_0_1; }
  
  		//","
  		public Keyword getCommaKeyword_1_0_1_0() { return cCommaKeyword_1_0_1_0; }
  
  		//parameters+=Parameter
  		public Assignment getParametersAssignment_1_0_1_1() { return cParametersAssignment_1_0_1_1; }
  
  		//Parameter
  		public RuleCall getParametersParameterParserRuleCall_1_0_1_1_0() { return cParametersParameterParserRuleCall_1_0_1_1_0; }
  
  		//("," vararg="...")?
  		public Group getGroup_1_0_2() { return cGroup_1_0_2; }
  
  		//","
  		public Keyword getCommaKeyword_1_0_2_0() { return cCommaKeyword_1_0_2_0; }
  
  		//vararg="..."
  		public Assignment getVarargAssignment_1_0_2_1() { return cVarargAssignment_1_0_2_1; }
  
  		//"..."
  		public Keyword getVarargFullStopFullStopFullStopKeyword_1_0_2_1_0() { return cVarargFullStopFullStopFullStopKeyword_1_0_2_1_0; }
  
  		//vararg="..."
  		public Assignment getVarargAssignment_1_1() { return cVarargAssignment_1_1; }
  
  		//"..."
  		public Keyword getVarargFullStopFullStopFullStopKeyword_1_1_0() { return cVarargFullStopFullStopFullStopKeyword_1_1_0; }
  	}
  
  	public class FunctionAttributesElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "FunctionAttributes");
  		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
  		private final Assignment cFunctionAttributesAssignment_0 = (Assignment)cAlternatives.eContents().get(0);
  		private final RuleCall cFunctionAttributesFunctionAttributeParserRuleCall_0_0 = (RuleCall)cFunctionAttributesAssignment_0.eContents().get(0);
  		private final Group cGroup_1 = (Group)cAlternatives.eContents().get(1);
  		private final Assignment cAlignstackAssignment_1_0 = (Assignment)cGroup_1.eContents().get(0);
  		private final RuleCall cAlignstackAlignStackParserRuleCall_1_0_0 = (RuleCall)cAlignstackAssignment_1_0.eContents().get(0);
  		private final Keyword cLeftParenthesisKeyword_1_1 = (Keyword)cGroup_1.eContents().get(1);
  		private final Assignment cAlignstackValueAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
  		private final RuleCall cAlignstackValueINTEGERTerminalRuleCall_1_2_0 = (RuleCall)cAlignstackValueAssignment_1_2.eContents().get(0);
  		private final Keyword cRightParenthesisKeyword_1_3 = (Keyword)cGroup_1.eContents().get(3);
  		private final Assignment cFunctionAttributeGroupRefsAssignment_2 = (Assignment)cAlternatives.eContents().get(2);
  		private final CrossReference cFunctionAttributeGroupRefsAttributeGroupCrossReference_2_0 = (CrossReference)cFunctionAttributeGroupRefsAssignment_2.eContents().get(0);
  		private final RuleCall cFunctionAttributeGroupRefsAttributeGroupATTRIBUTE_IDTerminalRuleCall_2_0_1 = (RuleCall)cFunctionAttributeGroupRefsAttributeGroupCrossReference_2_0.eContents().get(1);
  		
  		//FunctionAttributes:
  		//
  		//	(functionAttributes+=FunctionAttribute | alignstack+=AlignStack "(" alignstackValue+=INTEGER ")" |
  		//
  		//	functionAttributeGroupRefs+=[AttributeGroup|ATTRIBUTE_ID])+;
  		public ParserRule getRule() { return rule; }
  
  		//(functionAttributes+=FunctionAttribute | alignstack+=AlignStack "(" alignstackValue+=INTEGER ")" |
  		//
  		//functionAttributeGroupRefs+=[AttributeGroup|ATTRIBUTE_ID])+
  		public Alternatives getAlternatives() { return cAlternatives; }
  
  		//functionAttributes+=FunctionAttribute
  		public Assignment getFunctionAttributesAssignment_0() { return cFunctionAttributesAssignment_0; }
  
  		//FunctionAttribute
  		public RuleCall getFunctionAttributesFunctionAttributeParserRuleCall_0_0() { return cFunctionAttributesFunctionAttributeParserRuleCall_0_0; }
  
  		//alignstack+=AlignStack "(" alignstackValue+=INTEGER ")"
  		public Group getGroup_1() { return cGroup_1; }
  
  		//alignstack+=AlignStack
  		public Assignment getAlignstackAssignment_1_0() { return cAlignstackAssignment_1_0; }
  
  		//AlignStack
  		public RuleCall getAlignstackAlignStackParserRuleCall_1_0_0() { return cAlignstackAlignStackParserRuleCall_1_0_0; }
  
  		//"("
  		public Keyword getLeftParenthesisKeyword_1_1() { return cLeftParenthesisKeyword_1_1; }
  
  		//alignstackValue+=INTEGER
  		public Assignment getAlignstackValueAssignment_1_2() { return cAlignstackValueAssignment_1_2; }
  
  		//INTEGER
  		public RuleCall getAlignstackValueINTEGERTerminalRuleCall_1_2_0() { return cAlignstackValueINTEGERTerminalRuleCall_1_2_0; }
  
  		//")"
  		public Keyword getRightParenthesisKeyword_1_3() { return cRightParenthesisKeyword_1_3; }
  
  		//functionAttributeGroupRefs+=[AttributeGroup|ATTRIBUTE_ID]
  		public Assignment getFunctionAttributeGroupRefsAssignment_2() { return cFunctionAttributeGroupRefsAssignment_2; }
  
  		//[AttributeGroup|ATTRIBUTE_ID]
  		public CrossReference getFunctionAttributeGroupRefsAttributeGroupCrossReference_2_0() { return cFunctionAttributeGroupRefsAttributeGroupCrossReference_2_0; }
  
  		//ATTRIBUTE_ID
  		public RuleCall getFunctionAttributeGroupRefsAttributeGroupATTRIBUTE_IDTerminalRuleCall_2_0_1() { return cFunctionAttributeGroupRefsAttributeGroupATTRIBUTE_IDTerminalRuleCall_2_0_1; }
  	}
  
  	public class AlignStackElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "AlignStack");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Action cAlignStackAction_0 = (Action)cGroup.eContents().get(0);
  		private final Keyword cAlignstackKeyword_1 = (Keyword)cGroup.eContents().get(1);
  		
  		//AlignStack:
  		//
  		//	{AlignStack} "alignstack";
  		public ParserRule getRule() { return rule; }
  
  		//{AlignStack} "alignstack"
  		public Group getGroup() { return cGroup; }
  
  		//{AlignStack}
  		public Action getAlignStackAction_0() { return cAlignStackAction_0; }
  
  		//"alignstack"
  		public Keyword getAlignstackKeyword_1() { return cAlignstackKeyword_1; }
  	}
  
  	public class FunctionAttributeElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "FunctionAttribute");
  		private final Assignment cAttributeAssignment = (Assignment)rule.eContents().get(1);
  		private final Alternatives cAttributeAlternatives_0 = (Alternatives)cAttributeAssignment.eContents().get(0);
  		private final Keyword cAttributeAlwaysinlineKeyword_0_0 = (Keyword)cAttributeAlternatives_0.eContents().get(0);
  		private final Keyword cAttributeBuiltinKeyword_0_1 = (Keyword)cAttributeAlternatives_0.eContents().get(1);
  		private final Keyword cAttributeColdKeyword_0_2 = (Keyword)cAttributeAlternatives_0.eContents().get(2);
  		private final Keyword cAttributeInlinehintKeyword_0_3 = (Keyword)cAttributeAlternatives_0.eContents().get(3);
  		private final Keyword cAttributeNakedKeyword_0_4 = (Keyword)cAttributeAlternatives_0.eContents().get(4);
  		private final Keyword cAttributeNobuiltinKeyword_0_5 = (Keyword)cAttributeAlternatives_0.eContents().get(5);
  		private final Keyword cAttributeNoduplicateKeyword_0_6 = (Keyword)cAttributeAlternatives_0.eContents().get(6);
  		private final Keyword cAttributeNoimplicitfloatKeyword_0_7 = (Keyword)cAttributeAlternatives_0.eContents().get(7);
  		private final Keyword cAttributeNoinlineKeyword_0_8 = (Keyword)cAttributeAlternatives_0.eContents().get(8);
  		private final Keyword cAttributeNonlazybindKeyword_0_9 = (Keyword)cAttributeAlternatives_0.eContents().get(9);
  		private final Keyword cAttributeNoredzoneKeyword_0_10 = (Keyword)cAttributeAlternatives_0.eContents().get(10);
  		private final Keyword cAttributeNoreturnKeyword_0_11 = (Keyword)cAttributeAlternatives_0.eContents().get(11);
  		private final Keyword cAttributeNounwindKeyword_0_12 = (Keyword)cAttributeAlternatives_0.eContents().get(12);
  		private final Keyword cAttributeOptnoneKeyword_0_13 = (Keyword)cAttributeAlternatives_0.eContents().get(13);
  		private final Keyword cAttributeOptsizeKeyword_0_14 = (Keyword)cAttributeAlternatives_0.eContents().get(14);
  		private final Keyword cAttributeReadnoneKeyword_0_15 = (Keyword)cAttributeAlternatives_0.eContents().get(15);
  		private final Keyword cAttributeReadonlyKeyword_0_16 = (Keyword)cAttributeAlternatives_0.eContents().get(16);
  		private final Keyword cAttributeReturns_twiceKeyword_0_17 = (Keyword)cAttributeAlternatives_0.eContents().get(17);
  		private final Keyword cAttributeSanitize_addressKeyword_0_18 = (Keyword)cAttributeAlternatives_0.eContents().get(18);
  		private final Keyword cAttributeSanitize_memoryKeyword_0_19 = (Keyword)cAttributeAlternatives_0.eContents().get(19);
  		private final Keyword cAttributeSanitize_threadKeyword_0_20 = (Keyword)cAttributeAlternatives_0.eContents().get(20);
  		private final Keyword cAttributeSspKeyword_0_21 = (Keyword)cAttributeAlternatives_0.eContents().get(21);
  		private final Keyword cAttributeSspreqKeyword_0_22 = (Keyword)cAttributeAlternatives_0.eContents().get(22);
  		private final Keyword cAttributeSspstrongKeyword_0_23 = (Keyword)cAttributeAlternatives_0.eContents().get(23);
  		private final Keyword cAttributeUwtableKeyword_0_24 = (Keyword)cAttributeAlternatives_0.eContents().get(24);
  		private final Keyword cAttributeAddress_safetyKeyword_0_25 = (Keyword)cAttributeAlternatives_0.eContents().get(25);
  		private final Keyword cAttributeThread_safetyKeyword_0_26 = (Keyword)cAttributeAlternatives_0.eContents().get(26);
  		private final Keyword cAttributeUninitialized_checksKeyword_0_27 = (Keyword)cAttributeAlternatives_0.eContents().get(27);
  		
  		//FunctionAttribute:
  		//
  		//	attribute=("alwaysinline" | "builtin" | "cold" | "inlinehint" | "naked" | "nobuiltin" | "noduplicate" |
  		//
  		//	"noimplicitfloat" | "noinline" | "nonlazybind" | "noredzone" | "noreturn" | "nounwind" | "optnone" | "optsize" |
  		//
  		//	"readnone" | "readonly" | "returns_twice" | "sanitize_address" | "sanitize_memory" | "sanitize_thread" | "ssp" |
  		//
  		//	"sspreq" | "sspstrong" | "uwtable" | // Removed:
  		//
  		//	"address_safety" | "thread_safety" | "uninitialized_checks");
  		public ParserRule getRule() { return rule; }
  
  		//attribute=("alwaysinline" | "builtin" | "cold" | "inlinehint" | "naked" | "nobuiltin" | "noduplicate" |
  		//
  		//"noimplicitfloat" | "noinline" | "nonlazybind" | "noredzone" | "noreturn" | "nounwind" | "optnone" | "optsize" |
  		//
  		//"readnone" | "readonly" | "returns_twice" | "sanitize_address" | "sanitize_memory" | "sanitize_thread" | "ssp" |
  		//
  		//"sspreq" | "sspstrong" | "uwtable" | // Removed:
  		//
  		//"address_safety" | "thread_safety" | "uninitialized_checks")
  		public Assignment getAttributeAssignment() { return cAttributeAssignment; }
  
  		//"alwaysinline" | "builtin" | "cold" | "inlinehint" | "naked" | "nobuiltin" | "noduplicate" | "noimplicitfloat" |
  		//
  		//"noinline" | "nonlazybind" | "noredzone" | "noreturn" | "nounwind" | "optnone" | "optsize" | "readnone" | "readonly" |
  		//
  		//"returns_twice" | "sanitize_address" | "sanitize_memory" | "sanitize_thread" | "ssp" | "sspreq" | "sspstrong" |
  		//
  		//"uwtable" | // Removed:
  		//
  		//"address_safety" | "thread_safety" | "uninitialized_checks"
  		public Alternatives getAttributeAlternatives_0() { return cAttributeAlternatives_0; }
  
  		//"alwaysinline"
  		public Keyword getAttributeAlwaysinlineKeyword_0_0() { return cAttributeAlwaysinlineKeyword_0_0; }
  
  		//"builtin"
  		public Keyword getAttributeBuiltinKeyword_0_1() { return cAttributeBuiltinKeyword_0_1; }
  
  		//"cold"
  		public Keyword getAttributeColdKeyword_0_2() { return cAttributeColdKeyword_0_2; }
  
  		//"inlinehint"
  		public Keyword getAttributeInlinehintKeyword_0_3() { return cAttributeInlinehintKeyword_0_3; }
  
  		//"naked"
  		public Keyword getAttributeNakedKeyword_0_4() { return cAttributeNakedKeyword_0_4; }
  
  		//"nobuiltin"
  		public Keyword getAttributeNobuiltinKeyword_0_5() { return cAttributeNobuiltinKeyword_0_5; }
  
  		//"noduplicate"
  		public Keyword getAttributeNoduplicateKeyword_0_6() { return cAttributeNoduplicateKeyword_0_6; }
  
  		//"noimplicitfloat"
  		public Keyword getAttributeNoimplicitfloatKeyword_0_7() { return cAttributeNoimplicitfloatKeyword_0_7; }
  
  		//"noinline"
  		public Keyword getAttributeNoinlineKeyword_0_8() { return cAttributeNoinlineKeyword_0_8; }
  
  		//"nonlazybind"
  		public Keyword getAttributeNonlazybindKeyword_0_9() { return cAttributeNonlazybindKeyword_0_9; }
  
  		//"noredzone"
  		public Keyword getAttributeNoredzoneKeyword_0_10() { return cAttributeNoredzoneKeyword_0_10; }
  
  		//"noreturn"
  		public Keyword getAttributeNoreturnKeyword_0_11() { return cAttributeNoreturnKeyword_0_11; }
  
  		//"nounwind"
  		public Keyword getAttributeNounwindKeyword_0_12() { return cAttributeNounwindKeyword_0_12; }
  
  		//"optnone"
  		public Keyword getAttributeOptnoneKeyword_0_13() { return cAttributeOptnoneKeyword_0_13; }
  
  		//"optsize"
  		public Keyword getAttributeOptsizeKeyword_0_14() { return cAttributeOptsizeKeyword_0_14; }
  
  		//"readnone"
  		public Keyword getAttributeReadnoneKeyword_0_15() { return cAttributeReadnoneKeyword_0_15; }
  
  		//"readonly"
  		public Keyword getAttributeReadonlyKeyword_0_16() { return cAttributeReadonlyKeyword_0_16; }
  
  		//"returns_twice"
  		public Keyword getAttributeReturns_twiceKeyword_0_17() { return cAttributeReturns_twiceKeyword_0_17; }
  
  		//"sanitize_address"
  		public Keyword getAttributeSanitize_addressKeyword_0_18() { return cAttributeSanitize_addressKeyword_0_18; }
  
  		//"sanitize_memory"
  		public Keyword getAttributeSanitize_memoryKeyword_0_19() { return cAttributeSanitize_memoryKeyword_0_19; }
  
  		//"sanitize_thread"
  		public Keyword getAttributeSanitize_threadKeyword_0_20() { return cAttributeSanitize_threadKeyword_0_20; }
  
  		//"ssp"
  		public Keyword getAttributeSspKeyword_0_21() { return cAttributeSspKeyword_0_21; }
  
  		//"sspreq"
  		public Keyword getAttributeSspreqKeyword_0_22() { return cAttributeSspreqKeyword_0_22; }
  
  		//"sspstrong"
  		public Keyword getAttributeSspstrongKeyword_0_23() { return cAttributeSspstrongKeyword_0_23; }
  
  		//"uwtable"
  		public Keyword getAttributeUwtableKeyword_0_24() { return cAttributeUwtableKeyword_0_24; }
  
  		//// Removed:
  		//
  		//"address_safety"
  		public Keyword getAttributeAddress_safetyKeyword_0_25() { return cAttributeAddress_safetyKeyword_0_25; }
  
  		//"thread_safety"
  		public Keyword getAttributeThread_safetyKeyword_0_26() { return cAttributeThread_safetyKeyword_0_26; }
  
  		//"uninitialized_checks"
  		public Keyword getAttributeUninitialized_checksKeyword_0_27() { return cAttributeUninitialized_checksKeyword_0_27; }
  	}
  
  	public class BasicBlockElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "BasicBlock");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cNameAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final RuleCall cNameBasicBlockNameParserRuleCall_0_0 = (RuleCall)cNameAssignment_0.eContents().get(0);
  		private final Assignment cInstructionsAssignment_1 = (Assignment)cGroup.eContents().get(1);
  		private final RuleCall cInstructionsStartingInstructionParserRuleCall_1_0 = (RuleCall)cInstructionsAssignment_1.eContents().get(0);
  		private final Assignment cInstructionsAssignment_2 = (Assignment)cGroup.eContents().get(2);
  		private final RuleCall cInstructionsMiddleInstructionParserRuleCall_2_0 = (RuleCall)cInstructionsAssignment_2.eContents().get(0);
  		private final Assignment cInstructionsAssignment_3 = (Assignment)cGroup.eContents().get(3);
  		private final RuleCall cInstructionsTerminatorInstructionParserRuleCall_3_0 = (RuleCall)cInstructionsAssignment_3.eContents().get(0);
  		
  		//BasicBlock:
  		//
  		//	name=BasicBlockName instructions+=StartingInstruction* instructions+=MiddleInstruction*
  		//
  		//	instructions+=TerminatorInstruction;
  		public ParserRule getRule() { return rule; }
  
  		//name=BasicBlockName instructions+=StartingInstruction* instructions+=MiddleInstruction*
  		//
  		//instructions+=TerminatorInstruction
  		public Group getGroup() { return cGroup; }
  
  		//name=BasicBlockName
  		public Assignment getNameAssignment_0() { return cNameAssignment_0; }
  
  		//BasicBlockName
  		public RuleCall getNameBasicBlockNameParserRuleCall_0_0() { return cNameBasicBlockNameParserRuleCall_0_0; }
  
  		//instructions+=StartingInstruction*
  		public Assignment getInstructionsAssignment_1() { return cInstructionsAssignment_1; }
  
  		//StartingInstruction
  		public RuleCall getInstructionsStartingInstructionParserRuleCall_1_0() { return cInstructionsStartingInstructionParserRuleCall_1_0; }
  
  		//instructions+=MiddleInstruction*
  		public Assignment getInstructionsAssignment_2() { return cInstructionsAssignment_2; }
  
  		//MiddleInstruction
  		public RuleCall getInstructionsMiddleInstructionParserRuleCall_2_0() { return cInstructionsMiddleInstructionParserRuleCall_2_0; }
  
  		//instructions+=TerminatorInstruction
  		public Assignment getInstructionsAssignment_3() { return cInstructionsAssignment_3; }
  
  		//TerminatorInstruction
  		public RuleCall getInstructionsTerminatorInstructionParserRuleCall_3_0() { return cInstructionsTerminatorInstructionParserRuleCall_3_0; }
  	}
  
  	public class BasicBlockNameElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "BasicBlockName");
  		private final RuleCall cBASIC_BLOCK_IDTerminalRuleCall = (RuleCall)rule.eContents().get(1);
  		
  		//BasicBlockName returns ecore::EString: // A value converter translates this into either %num (if this isn't provided)
  		//
  		//// or into %NAME if it is.
  		//
  		//	BASIC_BLOCK_ID?;
  		public ParserRule getRule() { return rule; }
  
  		//// A value converter translates this into either %num (if this isn't provided)
  		//
  		//// or into %NAME if it is.
  		//
  		//BASIC_BLOCK_ID?
  		public RuleCall getBASIC_BLOCK_IDTerminalRuleCall() { return cBASIC_BLOCK_IDTerminalRuleCall; }
  	}
  
  	public class MetadataSuffixElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "MetadataSuffix");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Keyword cCommaKeyword_0 = (Keyword)cGroup.eContents().get(0);
  		private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
  		private final RuleCall cNameMETA_NAMETerminalRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
  		private final Assignment cValueAssignment_2 = (Assignment)cGroup.eContents().get(2);
  		private final RuleCall cValueMetadataRefParserRuleCall_2_0 = (RuleCall)cValueAssignment_2.eContents().get(0);
  		
  		//MetadataSuffix:
  		//
  		//	"," name=META_NAME value=MetadataRef;
  		public ParserRule getRule() { return rule; }
  
  		//"," name=META_NAME value=MetadataRef
  		public Group getGroup() { return cGroup; }
  
  		//","
  		public Keyword getCommaKeyword_0() { return cCommaKeyword_0; }
  
  		//name=META_NAME
  		public Assignment getNameAssignment_1() { return cNameAssignment_1; }
  
  		//META_NAME
  		public RuleCall getNameMETA_NAMETerminalRuleCall_1_0() { return cNameMETA_NAMETerminalRuleCall_1_0; }
  
  		//value=MetadataRef
  		public Assignment getValueAssignment_2() { return cValueAssignment_2; }
  
  		//MetadataRef
  		public RuleCall getValueMetadataRefParserRuleCall_2_0() { return cValueMetadataRefParserRuleCall_2_0; }
  	}
  
  	public class StartingInstructionElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "StartingInstruction");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cNameAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final RuleCall cNameLocalNameParserRuleCall_0_0 = (RuleCall)cNameAssignment_0.eContents().get(0);
  		private final Assignment cInstructionAssignment_1 = (Assignment)cGroup.eContents().get(1);
  		private final RuleCall cInstructionInstruction_phiParserRuleCall_1_0 = (RuleCall)cInstructionAssignment_1.eContents().get(0);
  		private final Assignment cMetadataAssignment_2 = (Assignment)cGroup.eContents().get(2);
  		private final RuleCall cMetadataMetadataSuffixParserRuleCall_2_0 = (RuleCall)cMetadataAssignment_2.eContents().get(0);
  		
  		//StartingInstruction:
  		//
  		//	name=LocalName instruction=Instruction_phi metadata+=MetadataSuffix*;
  		public ParserRule getRule() { return rule; }
  
  		//name=LocalName instruction=Instruction_phi metadata+=MetadataSuffix*
  		public Group getGroup() { return cGroup; }
  
  		//name=LocalName
  		public Assignment getNameAssignment_0() { return cNameAssignment_0; }
  
  		//LocalName
  		public RuleCall getNameLocalNameParserRuleCall_0_0() { return cNameLocalNameParserRuleCall_0_0; }
  
  		//instruction=Instruction_phi
  		public Assignment getInstructionAssignment_1() { return cInstructionAssignment_1; }
  
  		//Instruction_phi
  		public RuleCall getInstructionInstruction_phiParserRuleCall_1_0() { return cInstructionInstruction_phiParserRuleCall_1_0; }
  
  		//metadata+=MetadataSuffix*
  		public Assignment getMetadataAssignment_2() { return cMetadataAssignment_2; }
  
  		//MetadataSuffix
  		public RuleCall getMetadataMetadataSuffixParserRuleCall_2_0() { return cMetadataMetadataSuffixParserRuleCall_2_0; }
  	}
  
  	public class MiddleInstructionElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "MiddleInstruction");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cInstructionAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final Alternatives cInstructionAlternatives_0_0 = (Alternatives)cInstructionAssignment_0.eContents().get(0);
  		private final RuleCall cInstructionNamedMiddleInstructionParserRuleCall_0_0_0 = (RuleCall)cInstructionAlternatives_0_0.eContents().get(0);
  		private final RuleCall cInstructionInstruction_storeParserRuleCall_0_0_1 = (RuleCall)cInstructionAlternatives_0_0.eContents().get(1);
  		private final RuleCall cInstructionInstruction_fenceParserRuleCall_0_0_2 = (RuleCall)cInstructionAlternatives_0_0.eContents().get(2);
  		private final RuleCall cInstructionInstruction_call_voidParserRuleCall_0_0_3 = (RuleCall)cInstructionAlternatives_0_0.eContents().get(3);
  		private final Assignment cMetadataAssignment_1 = (Assignment)cGroup.eContents().get(1);
  		private final RuleCall cMetadataMetadataSuffixParserRuleCall_1_0 = (RuleCall)cMetadataAssignment_1.eContents().get(0);
  		
  		//MiddleInstruction:
  		//
  		//	instruction=(NamedMiddleInstruction | Instruction_store | Instruction_fence | Instruction_call_void)
  		//
  		//	metadata+=MetadataSuffix*;
  		public ParserRule getRule() { return rule; }
  
  		//instruction=(NamedMiddleInstruction | Instruction_store | Instruction_fence | Instruction_call_void)
  		//
  		//metadata+=MetadataSuffix*
  		public Group getGroup() { return cGroup; }
  
  		//instruction=(NamedMiddleInstruction | Instruction_store | Instruction_fence | Instruction_call_void)
  		public Assignment getInstructionAssignment_0() { return cInstructionAssignment_0; }
  
  		//NamedMiddleInstruction | Instruction_store | Instruction_fence | Instruction_call_void
  		public Alternatives getInstructionAlternatives_0_0() { return cInstructionAlternatives_0_0; }
  
  		//NamedMiddleInstruction
  		public RuleCall getInstructionNamedMiddleInstructionParserRuleCall_0_0_0() { return cInstructionNamedMiddleInstructionParserRuleCall_0_0_0; }
  
  		//Instruction_store
  		public RuleCall getInstructionInstruction_storeParserRuleCall_0_0_1() { return cInstructionInstruction_storeParserRuleCall_0_0_1; }
  
  		//Instruction_fence
  		public RuleCall getInstructionInstruction_fenceParserRuleCall_0_0_2() { return cInstructionInstruction_fenceParserRuleCall_0_0_2; }
  
  		//Instruction_call_void
  		public RuleCall getInstructionInstruction_call_voidParserRuleCall_0_0_3() { return cInstructionInstruction_call_voidParserRuleCall_0_0_3; }
  
  		//metadata+=MetadataSuffix*
  		public Assignment getMetadataAssignment_1() { return cMetadataAssignment_1; }
  
  		//MetadataSuffix
  		public RuleCall getMetadataMetadataSuffixParserRuleCall_1_0() { return cMetadataMetadataSuffixParserRuleCall_1_0; }
  	}
  
  	public class NamedMiddleInstructionElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "NamedMiddleInstruction");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cNameAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final RuleCall cNameLocalNameParserRuleCall_0_0 = (RuleCall)cNameAssignment_0.eContents().get(0);
  		private final Assignment cInstructionAssignment_1 = (Assignment)cGroup.eContents().get(1);
  		private final Alternatives cInstructionAlternatives_1_0 = (Alternatives)cInstructionAssignment_1.eContents().get(0);
  		private final RuleCall cInstructionBinaryInstructionParserRuleCall_1_0_0 = (RuleCall)cInstructionAlternatives_1_0.eContents().get(0);
  		private final RuleCall cInstructionBitwiseBinaryInstructionParserRuleCall_1_0_1 = (RuleCall)cInstructionAlternatives_1_0.eContents().get(1);
  		private final RuleCall cInstructionVectorInstructionsParserRuleCall_1_0_2 = (RuleCall)cInstructionAlternatives_1_0.eContents().get(2);
  		private final RuleCall cInstructionAggregateInstructionParserRuleCall_1_0_3 = (RuleCall)cInstructionAlternatives_1_0.eContents().get(3);
  		private final RuleCall cInstructionInstruction_allocaParserRuleCall_1_0_4 = (RuleCall)cInstructionAlternatives_1_0.eContents().get(4);
  		private final RuleCall cInstructionInstruction_loadParserRuleCall_1_0_5 = (RuleCall)cInstructionAlternatives_1_0.eContents().get(5);
  		private final RuleCall cInstructionInstruction_getelementptrParserRuleCall_1_0_6 = (RuleCall)cInstructionAlternatives_1_0.eContents().get(6);
  		private final RuleCall cInstructionInstruction_cmpxchgParserRuleCall_1_0_7 = (RuleCall)cInstructionAlternatives_1_0.eContents().get(7);
  		private final RuleCall cInstructionInstruction_atomicrmwParserRuleCall_1_0_8 = (RuleCall)cInstructionAlternatives_1_0.eContents().get(8);
  		private final RuleCall cInstructionConversionInstructionParserRuleCall_1_0_9 = (RuleCall)cInstructionAlternatives_1_0.eContents().get(9);
  		private final RuleCall cInstructionOtherInstructionParserRuleCall_1_0_10 = (RuleCall)cInstructionAlternatives_1_0.eContents().get(10);
  		private final RuleCall cInstructionInstruction_call_nonVoidParserRuleCall_1_0_11 = (RuleCall)cInstructionAlternatives_1_0.eContents().get(11);
  		
  		//NamedMiddleInstruction:
  		//
  		//	name=LocalName instruction=(BinaryInstruction | BitwiseBinaryInstruction | VectorInstructions | AggregateInstruction
  		//
  		//	| Instruction_alloca | Instruction_load | Instruction_getelementptr | Instruction_cmpxchg | Instruction_atomicrmw |
  		//
  		//	ConversionInstruction | OtherInstruction | Instruction_call_nonVoid);
  		public ParserRule getRule() { return rule; }
  
  		//name=LocalName instruction=(BinaryInstruction | BitwiseBinaryInstruction | VectorInstructions | AggregateInstruction |
  		//
  		//Instruction_alloca | Instruction_load | Instruction_getelementptr | Instruction_cmpxchg | Instruction_atomicrmw |
  		//
  		//ConversionInstruction | OtherInstruction | Instruction_call_nonVoid)
  		public Group getGroup() { return cGroup; }
  
  		//name=LocalName
  		public Assignment getNameAssignment_0() { return cNameAssignment_0; }
  
  		//LocalName
  		public RuleCall getNameLocalNameParserRuleCall_0_0() { return cNameLocalNameParserRuleCall_0_0; }
  
  		//instruction=(BinaryInstruction | BitwiseBinaryInstruction | VectorInstructions | AggregateInstruction |
  		//
  		//Instruction_alloca | Instruction_load | Instruction_getelementptr | Instruction_cmpxchg | Instruction_atomicrmw |
  		//
  		//ConversionInstruction | OtherInstruction | Instruction_call_nonVoid)
  		public Assignment getInstructionAssignment_1() { return cInstructionAssignment_1; }
  
  		//BinaryInstruction | BitwiseBinaryInstruction | VectorInstructions | AggregateInstruction | Instruction_alloca |
  		//
  		//Instruction_load | Instruction_getelementptr | Instruction_cmpxchg | Instruction_atomicrmw | ConversionInstruction |
  		//
  		//OtherInstruction | Instruction_call_nonVoid
  		public Alternatives getInstructionAlternatives_1_0() { return cInstructionAlternatives_1_0; }
  
  		//BinaryInstruction
  		public RuleCall getInstructionBinaryInstructionParserRuleCall_1_0_0() { return cInstructionBinaryInstructionParserRuleCall_1_0_0; }
  
  		//BitwiseBinaryInstruction
  		public RuleCall getInstructionBitwiseBinaryInstructionParserRuleCall_1_0_1() { return cInstructionBitwiseBinaryInstructionParserRuleCall_1_0_1; }
  
  		//VectorInstructions
  		public RuleCall getInstructionVectorInstructionsParserRuleCall_1_0_2() { return cInstructionVectorInstructionsParserRuleCall_1_0_2; }
  
  		//AggregateInstruction
  		public RuleCall getInstructionAggregateInstructionParserRuleCall_1_0_3() { return cInstructionAggregateInstructionParserRuleCall_1_0_3; }
  
  		//Instruction_alloca
  		public RuleCall getInstructionInstruction_allocaParserRuleCall_1_0_4() { return cInstructionInstruction_allocaParserRuleCall_1_0_4; }
  
  		//Instruction_load
  		public RuleCall getInstructionInstruction_loadParserRuleCall_1_0_5() { return cInstructionInstruction_loadParserRuleCall_1_0_5; }
  
  		//Instruction_getelementptr
  		public RuleCall getInstructionInstruction_getelementptrParserRuleCall_1_0_6() { return cInstructionInstruction_getelementptrParserRuleCall_1_0_6; }
  
  		//Instruction_cmpxchg
  		public RuleCall getInstructionInstruction_cmpxchgParserRuleCall_1_0_7() { return cInstructionInstruction_cmpxchgParserRuleCall_1_0_7; }
  
  		//Instruction_atomicrmw
  		public RuleCall getInstructionInstruction_atomicrmwParserRuleCall_1_0_8() { return cInstructionInstruction_atomicrmwParserRuleCall_1_0_8; }
  
  		//ConversionInstruction
  		public RuleCall getInstructionConversionInstructionParserRuleCall_1_0_9() { return cInstructionConversionInstructionParserRuleCall_1_0_9; }
  
  		//OtherInstruction
  		public RuleCall getInstructionOtherInstructionParserRuleCall_1_0_10() { return cInstructionOtherInstructionParserRuleCall_1_0_10; }
  
  		//Instruction_call_nonVoid
  		public RuleCall getInstructionInstruction_call_nonVoidParserRuleCall_1_0_11() { return cInstructionInstruction_call_nonVoidParserRuleCall_1_0_11; }
  	}
  
  	public class ParamNameElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ParamName");
  		private final RuleCall cLOCAL_IDTerminalRuleCall = (RuleCall)rule.eContents().get(1);
  		
  		//ParamName returns ecore::EString: // A value converter translates this into either %num (if this isn't provided)
  		//
  		//// or into %NAME if it is.
  		//
  		//	LOCAL_ID?;
  		public ParserRule getRule() { return rule; }
  
  		//// A value converter translates this into either %num (if this isn't provided)
  		//
  		//// or into %NAME if it is.
  		//
  		//LOCAL_ID?
  		public RuleCall getLOCAL_IDTerminalRuleCall() { return cLOCAL_IDTerminalRuleCall; }
  	}
  
  	public class LocalNameElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "LocalName");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final RuleCall cLOCAL_IDTerminalRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
  		private final RuleCall cWSTerminalRuleCall_1 = (RuleCall)cGroup.eContents().get(1);
  		private final Keyword cEqualsSignKeyword_2 = (Keyword)cGroup.eContents().get(2);
  		
  		//// A value converter translates this into either %num (if this isn't provided)
  		//
  		//// or into %NAME if it is.
  		//
  		//LocalName returns ecore::EString:
  		//
  		//	(LOCAL_ID WS* "=")?;
  		public ParserRule getRule() { return rule; }
  
  		//(LOCAL_ID WS* "=")?
  		public Group getGroup() { return cGroup; }
  
  		//LOCAL_ID
  		public RuleCall getLOCAL_IDTerminalRuleCall_0() { return cLOCAL_IDTerminalRuleCall_0; }
  
  		//WS*
  		public RuleCall getWSTerminalRuleCall_1() { return cWSTerminalRuleCall_1; }
  
  		//"="
  		public Keyword getEqualsSignKeyword_2() { return cEqualsSignKeyword_2; }
  	}
  
  	public class GlobalNameElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "GlobalName");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final RuleCall cGLOBAL_IDTerminalRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
  		private final RuleCall cWSTerminalRuleCall_1 = (RuleCall)cGroup.eContents().get(1);
  		private final Keyword cEqualsSignKeyword_2 = (Keyword)cGroup.eContents().get(2);
  		
  		//// A value converter translates this into either %num (if this isn't provided)
  		//
  		//// or into %NAME if it is.
  		//
  		//GlobalName returns ecore::EString:
  		//
  		//	(GLOBAL_ID WS* "=")?;
  		public ParserRule getRule() { return rule; }
  
  		//(GLOBAL_ID WS* "=")?
  		public Group getGroup() { return cGroup; }
  
  		//GLOBAL_ID
  		public RuleCall getGLOBAL_IDTerminalRuleCall_0() { return cGLOBAL_IDTerminalRuleCall_0; }
  
  		//WS*
  		public RuleCall getWSTerminalRuleCall_1() { return cWSTerminalRuleCall_1; }
  
  		//"="
  		public Keyword getEqualsSignKeyword_2() { return cEqualsSignKeyword_2; }
  	}
  
  	public class TerminatorInstructionElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "TerminatorInstruction");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cInstructionAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final Alternatives cInstructionAlternatives_0_0 = (Alternatives)cInstructionAssignment_0.eContents().get(0);
  		private final RuleCall cInstructionNamedTerminatorInstructionParserRuleCall_0_0_0 = (RuleCall)cInstructionAlternatives_0_0.eContents().get(0);
  		private final RuleCall cInstructionInstruction_retParserRuleCall_0_0_1 = (RuleCall)cInstructionAlternatives_0_0.eContents().get(1);
  		private final RuleCall cInstructionInstruction_brParserRuleCall_0_0_2 = (RuleCall)cInstructionAlternatives_0_0.eContents().get(2);
  		private final RuleCall cInstructionInstruction_switchParserRuleCall_0_0_3 = (RuleCall)cInstructionAlternatives_0_0.eContents().get(3);
  		private final RuleCall cInstructionInstruction_indirectbrParserRuleCall_0_0_4 = (RuleCall)cInstructionAlternatives_0_0.eContents().get(4);
  		private final RuleCall cInstructionInstruction_resumeParserRuleCall_0_0_5 = (RuleCall)cInstructionAlternatives_0_0.eContents().get(5);
  		private final RuleCall cInstructionInstruction_unreachableParserRuleCall_0_0_6 = (RuleCall)cInstructionAlternatives_0_0.eContents().get(6);
  		private final RuleCall cInstructionInstruction_invoke_voidParserRuleCall_0_0_7 = (RuleCall)cInstructionAlternatives_0_0.eContents().get(7);
  		private final Assignment cMetadataAssignment_1 = (Assignment)cGroup.eContents().get(1);
  		private final RuleCall cMetadataMetadataSuffixParserRuleCall_1_0 = (RuleCall)cMetadataAssignment_1.eContents().get(0);
  		
  		//TerminatorInstruction:
  		//
  		//	instruction=(NamedTerminatorInstruction | Instruction_ret | Instruction_br | Instruction_switch |
  		//
  		//	Instruction_indirectbr | Instruction_resume | Instruction_unreachable | Instruction_invoke_void)
  		//
  		//	metadata+=MetadataSuffix*;
  		public ParserRule getRule() { return rule; }
  
  		//instruction=(NamedTerminatorInstruction | Instruction_ret | Instruction_br | Instruction_switch | Instruction_indirectbr
  		//
  		//| Instruction_resume | Instruction_unreachable | Instruction_invoke_void) metadata+=MetadataSuffix*
  		public Group getGroup() { return cGroup; }
  
  		//instruction=(NamedTerminatorInstruction | Instruction_ret | Instruction_br | Instruction_switch | Instruction_indirectbr
  		//
  		//| Instruction_resume | Instruction_unreachable | Instruction_invoke_void)
  		public Assignment getInstructionAssignment_0() { return cInstructionAssignment_0; }
  
  		//NamedTerminatorInstruction | Instruction_ret | Instruction_br | Instruction_switch | Instruction_indirectbr |
  		//
  		//Instruction_resume | Instruction_unreachable | Instruction_invoke_void
  		public Alternatives getInstructionAlternatives_0_0() { return cInstructionAlternatives_0_0; }
  
  		//NamedTerminatorInstruction
  		public RuleCall getInstructionNamedTerminatorInstructionParserRuleCall_0_0_0() { return cInstructionNamedTerminatorInstructionParserRuleCall_0_0_0; }
  
  		//Instruction_ret
  		public RuleCall getInstructionInstruction_retParserRuleCall_0_0_1() { return cInstructionInstruction_retParserRuleCall_0_0_1; }
  
  		//Instruction_br
  		public RuleCall getInstructionInstruction_brParserRuleCall_0_0_2() { return cInstructionInstruction_brParserRuleCall_0_0_2; }
  
  		//Instruction_switch
  		public RuleCall getInstructionInstruction_switchParserRuleCall_0_0_3() { return cInstructionInstruction_switchParserRuleCall_0_0_3; }
  
  		//Instruction_indirectbr
  		public RuleCall getInstructionInstruction_indirectbrParserRuleCall_0_0_4() { return cInstructionInstruction_indirectbrParserRuleCall_0_0_4; }
  
  		//Instruction_resume
  		public RuleCall getInstructionInstruction_resumeParserRuleCall_0_0_5() { return cInstructionInstruction_resumeParserRuleCall_0_0_5; }
  
  		//Instruction_unreachable
  		public RuleCall getInstructionInstruction_unreachableParserRuleCall_0_0_6() { return cInstructionInstruction_unreachableParserRuleCall_0_0_6; }
  
  		//Instruction_invoke_void
  		public RuleCall getInstructionInstruction_invoke_voidParserRuleCall_0_0_7() { return cInstructionInstruction_invoke_voidParserRuleCall_0_0_7; }
  
  		//metadata+=MetadataSuffix*
  		public Assignment getMetadataAssignment_1() { return cMetadataAssignment_1; }
  
  		//MetadataSuffix
  		public RuleCall getMetadataMetadataSuffixParserRuleCall_1_0() { return cMetadataMetadataSuffixParserRuleCall_1_0; }
  	}
  
  	public class NamedTerminatorInstructionElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "NamedTerminatorInstruction");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cNameAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final RuleCall cNameLocalNameParserRuleCall_0_0 = (RuleCall)cNameAssignment_0.eContents().get(0);
  		private final Assignment cInstructionAssignment_1 = (Assignment)cGroup.eContents().get(1);
  		private final RuleCall cInstructionInstruction_invoke_nonVoidParserRuleCall_1_0 = (RuleCall)cInstructionAssignment_1.eContents().get(0);
  		
  		//NamedTerminatorInstruction:
  		//
  		//	name=LocalName instruction=Instruction_invoke_nonVoid;
  		public ParserRule getRule() { return rule; }
  
  		//name=LocalName instruction=Instruction_invoke_nonVoid
  		public Group getGroup() { return cGroup; }
  
  		//name=LocalName
  		public Assignment getNameAssignment_0() { return cNameAssignment_0; }
  
  		//LocalName
  		public RuleCall getNameLocalNameParserRuleCall_0_0() { return cNameLocalNameParserRuleCall_0_0; }
  
  		//instruction=Instruction_invoke_nonVoid
  		public Assignment getInstructionAssignment_1() { return cInstructionAssignment_1; }
  
  		//Instruction_invoke_nonVoid
  		public RuleCall getInstructionInstruction_invoke_nonVoidParserRuleCall_1_0() { return cInstructionInstruction_invoke_nonVoidParserRuleCall_1_0; }
  	}
  
  	public class Instruction_retElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Instruction_ret");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cOpcodeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final Keyword cOpcodeRetKeyword_0_0 = (Keyword)cOpcodeAssignment_0.eContents().get(0);
  		private final Alternatives cAlternatives_1 = (Alternatives)cGroup.eContents().get(1);
  		private final Assignment cValAssignment_1_0 = (Assignment)cAlternatives_1.eContents().get(0);
  		private final RuleCall cValTypedValueParserRuleCall_1_0_0 = (RuleCall)cValAssignment_1_0.eContents().get(0);
  		private final Keyword cVoidKeyword_1_1 = (Keyword)cAlternatives_1.eContents().get(1);
  		
  		//// ret <type> <value>       ; Return a value from a non-void function
  		//
  		//// ret void                 ; Return from void function
  		//
  		//Instruction_ret:
  		//
  		//	opcode="ret" (val=TypedValue | "void");
  		public ParserRule getRule() { return rule; }
  
  		//opcode="ret" (val=TypedValue | "void")
  		public Group getGroup() { return cGroup; }
  
  		//opcode="ret"
  		public Assignment getOpcodeAssignment_0() { return cOpcodeAssignment_0; }
  
  		//"ret"
  		public Keyword getOpcodeRetKeyword_0_0() { return cOpcodeRetKeyword_0_0; }
  
  		//val=TypedValue | "void"
  		public Alternatives getAlternatives_1() { return cAlternatives_1; }
  
  		//val=TypedValue
  		public Assignment getValAssignment_1_0() { return cValAssignment_1_0; }
  
  		//TypedValue
  		public RuleCall getValTypedValueParserRuleCall_1_0_0() { return cValTypedValueParserRuleCall_1_0_0; }
  
  		//"void"
  		public Keyword getVoidKeyword_1_1() { return cVoidKeyword_1_1; }
  	}
  
  	public class Instruction_brElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Instruction_br");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cOpcodeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final Keyword cOpcodeBrKeyword_0_0 = (Keyword)cOpcodeAssignment_0.eContents().get(0);
  		private final Alternatives cAlternatives_1 = (Alternatives)cGroup.eContents().get(1);
  		private final Group cGroup_1_0 = (Group)cAlternatives_1.eContents().get(0);
  		private final Assignment cConditionAssignment_1_0_0 = (Assignment)cGroup_1_0.eContents().get(0);
  		private final RuleCall cConditionTypedValueParserRuleCall_1_0_0_0 = (RuleCall)cConditionAssignment_1_0_0.eContents().get(0);
  		private final Keyword cCommaKeyword_1_0_1 = (Keyword)cGroup_1_0.eContents().get(1);
  		private final Keyword cLabelKeyword_1_0_2 = (Keyword)cGroup_1_0.eContents().get(2);
  		private final Assignment cTrueAssignment_1_0_3 = (Assignment)cGroup_1_0.eContents().get(3);
  		private final RuleCall cTrueBasicBlockRefParserRuleCall_1_0_3_0 = (RuleCall)cTrueAssignment_1_0_3.eContents().get(0);
  		private final Keyword cCommaKeyword_1_0_4 = (Keyword)cGroup_1_0.eContents().get(4);
  		private final Keyword cLabelKeyword_1_0_5 = (Keyword)cGroup_1_0.eContents().get(5);
  		private final Assignment cFalseAssignment_1_0_6 = (Assignment)cGroup_1_0.eContents().get(6);
  		private final RuleCall cFalseBasicBlockRefParserRuleCall_1_0_6_0 = (RuleCall)cFalseAssignment_1_0_6.eContents().get(0);
  		private final Group cGroup_1_1 = (Group)cAlternatives_1.eContents().get(1);
  		private final Keyword cLabelKeyword_1_1_0 = (Keyword)cGroup_1_1.eContents().get(0);
  		private final Assignment cUnconditionalAssignment_1_1_1 = (Assignment)cGroup_1_1.eContents().get(1);
  		private final RuleCall cUnconditionalBasicBlockRefParserRuleCall_1_1_1_0 = (RuleCall)cUnconditionalAssignment_1_1_1.eContents().get(0);
  		
  		//// br i1 <cond>, label <iftrue>, label <iffalse>
  		//
  		//// br label <dest>          ; Unconditional branch
  		//
  		//Instruction_br:
  		//
  		//	opcode="br" (condition=TypedValue "," "label" true=BasicBlockRef "," "label" false=BasicBlockRef | "label"
  		//
  		//	unconditional=BasicBlockRef);
  		public ParserRule getRule() { return rule; }
  
  		//opcode="br" (condition=TypedValue "," "label" true=BasicBlockRef "," "label" false=BasicBlockRef | "label"
  		//
  		//unconditional=BasicBlockRef)
  		public Group getGroup() { return cGroup; }
  
  		//opcode="br"
  		public Assignment getOpcodeAssignment_0() { return cOpcodeAssignment_0; }
  
  		//"br"
  		public Keyword getOpcodeBrKeyword_0_0() { return cOpcodeBrKeyword_0_0; }
  
  		//condition=TypedValue "," "label" true=BasicBlockRef "," "label" false=BasicBlockRef | "label"
  		//
  		//unconditional=BasicBlockRef
  		public Alternatives getAlternatives_1() { return cAlternatives_1; }
  
  		//condition=TypedValue "," "label" true=BasicBlockRef "," "label" false=BasicBlockRef
  		public Group getGroup_1_0() { return cGroup_1_0; }
  
  		//condition=TypedValue
  		public Assignment getConditionAssignment_1_0_0() { return cConditionAssignment_1_0_0; }
  
  		//TypedValue
  		public RuleCall getConditionTypedValueParserRuleCall_1_0_0_0() { return cConditionTypedValueParserRuleCall_1_0_0_0; }
  
  		//","
  		public Keyword getCommaKeyword_1_0_1() { return cCommaKeyword_1_0_1; }
  
  		//"label"
  		public Keyword getLabelKeyword_1_0_2() { return cLabelKeyword_1_0_2; }
  
  		//true=BasicBlockRef
  		public Assignment getTrueAssignment_1_0_3() { return cTrueAssignment_1_0_3; }
  
  		//BasicBlockRef
  		public RuleCall getTrueBasicBlockRefParserRuleCall_1_0_3_0() { return cTrueBasicBlockRefParserRuleCall_1_0_3_0; }
  
  		//","
  		public Keyword getCommaKeyword_1_0_4() { return cCommaKeyword_1_0_4; }
  
  		//"label"
  		public Keyword getLabelKeyword_1_0_5() { return cLabelKeyword_1_0_5; }
  
  		//false=BasicBlockRef
  		public Assignment getFalseAssignment_1_0_6() { return cFalseAssignment_1_0_6; }
  
  		//BasicBlockRef
  		public RuleCall getFalseBasicBlockRefParserRuleCall_1_0_6_0() { return cFalseBasicBlockRefParserRuleCall_1_0_6_0; }
  
  		//"label" unconditional=BasicBlockRef
  		public Group getGroup_1_1() { return cGroup_1_1; }
  
  		//"label"
  		public Keyword getLabelKeyword_1_1_0() { return cLabelKeyword_1_1_0; }
  
  		//unconditional=BasicBlockRef
  		public Assignment getUnconditionalAssignment_1_1_1() { return cUnconditionalAssignment_1_1_1; }
  
  		//BasicBlockRef
  		public RuleCall getUnconditionalBasicBlockRefParserRuleCall_1_1_1_0() { return cUnconditionalBasicBlockRefParserRuleCall_1_1_1_0; }
  	}
  
  	public class Instruction_switchElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Instruction_switch");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cOpcodeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final Keyword cOpcodeSwitchKeyword_0_0 = (Keyword)cOpcodeAssignment_0.eContents().get(0);
  		private final Assignment cComparisonValueAssignment_1 = (Assignment)cGroup.eContents().get(1);
  		private final RuleCall cComparisonValueTypedValueParserRuleCall_1_0 = (RuleCall)cComparisonValueAssignment_1.eContents().get(0);
  		private final Keyword cCommaKeyword_2 = (Keyword)cGroup.eContents().get(2);
  		private final Keyword cLabelKeyword_3 = (Keyword)cGroup.eContents().get(3);
  		private final Assignment cDefaultDestAssignment_4 = (Assignment)cGroup.eContents().get(4);
  		private final RuleCall cDefaultDestBasicBlockRefParserRuleCall_4_0 = (RuleCall)cDefaultDestAssignment_4.eContents().get(0);
  		private final Keyword cLeftSquareBracketKeyword_5 = (Keyword)cGroup.eContents().get(5);
  		private final Group cGroup_6 = (Group)cGroup.eContents().get(6);
  		private final Assignment cCaseConditionsAssignment_6_0 = (Assignment)cGroup_6.eContents().get(0);
  		private final RuleCall cCaseConditionsTypedValueParserRuleCall_6_0_0 = (RuleCall)cCaseConditionsAssignment_6_0.eContents().get(0);
  		private final Keyword cCommaKeyword_6_1 = (Keyword)cGroup_6.eContents().get(1);
  		private final Keyword cLabelKeyword_6_2 = (Keyword)cGroup_6.eContents().get(2);
  		private final Assignment cDestinationsAssignment_6_3 = (Assignment)cGroup_6.eContents().get(3);
  		private final RuleCall cDestinationsBasicBlockRefParserRuleCall_6_3_0 = (RuleCall)cDestinationsAssignment_6_3.eContents().get(0);
  		private final Keyword cRightSquareBracketKeyword_7 = (Keyword)cGroup.eContents().get(7);
  		
  		//// switch <intty> <value>, label <defaultdest> [ <intty> <val>, label <dest> ... ]
  		//
  		//Instruction_switch:
  		//
  		//	opcode="switch" comparisonValue=TypedValue "," "label" defaultDest=BasicBlockRef "[" (caseConditions+=TypedValue ","
  		//
  		//	"label" destinations+=BasicBlockRef)* "]";
  		public ParserRule getRule() { return rule; }
  
  		//opcode="switch" comparisonValue=TypedValue "," "label" defaultDest=BasicBlockRef "[" (caseConditions+=TypedValue ","
  		//
  		//"label" destinations+=BasicBlockRef)* "]"
  		public Group getGroup() { return cGroup; }
  
  		//opcode="switch"
  		public Assignment getOpcodeAssignment_0() { return cOpcodeAssignment_0; }
  
  		//"switch"
  		public Keyword getOpcodeSwitchKeyword_0_0() { return cOpcodeSwitchKeyword_0_0; }
  
  		//comparisonValue=TypedValue
  		public Assignment getComparisonValueAssignment_1() { return cComparisonValueAssignment_1; }
  
  		//TypedValue
  		public RuleCall getComparisonValueTypedValueParserRuleCall_1_0() { return cComparisonValueTypedValueParserRuleCall_1_0; }
  
  		//","
  		public Keyword getCommaKeyword_2() { return cCommaKeyword_2; }
  
  		//"label"
  		public Keyword getLabelKeyword_3() { return cLabelKeyword_3; }
  
  		//defaultDest=BasicBlockRef
  		public Assignment getDefaultDestAssignment_4() { return cDefaultDestAssignment_4; }
  
  		//BasicBlockRef
  		public RuleCall getDefaultDestBasicBlockRefParserRuleCall_4_0() { return cDefaultDestBasicBlockRefParserRuleCall_4_0; }
  
  		//"["
  		public Keyword getLeftSquareBracketKeyword_5() { return cLeftSquareBracketKeyword_5; }
  
  		//(caseConditions+=TypedValue "," "label" destinations+=BasicBlockRef)*
  		public Group getGroup_6() { return cGroup_6; }
  
  		//caseConditions+=TypedValue
  		public Assignment getCaseConditionsAssignment_6_0() { return cCaseConditionsAssignment_6_0; }
  
  		//TypedValue
  		public RuleCall getCaseConditionsTypedValueParserRuleCall_6_0_0() { return cCaseConditionsTypedValueParserRuleCall_6_0_0; }
  
  		//","
  		public Keyword getCommaKeyword_6_1() { return cCommaKeyword_6_1; }
  
  		//"label"
  		public Keyword getLabelKeyword_6_2() { return cLabelKeyword_6_2; }
  
  		//destinations+=BasicBlockRef
  		public Assignment getDestinationsAssignment_6_3() { return cDestinationsAssignment_6_3; }
  
  		//BasicBlockRef
  		public RuleCall getDestinationsBasicBlockRefParserRuleCall_6_3_0() { return cDestinationsBasicBlockRefParserRuleCall_6_3_0; }
  
  		//"]"
  		public Keyword getRightSquareBracketKeyword_7() { return cRightSquareBracketKeyword_7; }
  	}
  
  	public class Instruction_indirectbrElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Instruction_indirectbr");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cOpcodeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final Keyword cOpcodeIndirectbrKeyword_0_0 = (Keyword)cOpcodeAssignment_0.eContents().get(0);
  		private final Assignment cAddressAssignment_1 = (Assignment)cGroup.eContents().get(1);
  		private final RuleCall cAddressTypedValueParserRuleCall_1_0 = (RuleCall)cAddressAssignment_1.eContents().get(0);
  		private final Keyword cCommaKeyword_2 = (Keyword)cGroup.eContents().get(2);
  		private final Keyword cLeftSquareBracketKeyword_3 = (Keyword)cGroup.eContents().get(3);
  		private final Group cGroup_4 = (Group)cGroup.eContents().get(4);
  		private final Keyword cLabelKeyword_4_0 = (Keyword)cGroup_4.eContents().get(0);
  		private final Assignment cDestinationsAssignment_4_1 = (Assignment)cGroup_4.eContents().get(1);
  		private final RuleCall cDestinationsBasicBlockRefParserRuleCall_4_1_0 = (RuleCall)cDestinationsAssignment_4_1.eContents().get(0);
  		private final Group cGroup_4_2 = (Group)cGroup_4.eContents().get(2);
  		private final Keyword cCommaKeyword_4_2_0 = (Keyword)cGroup_4_2.eContents().get(0);
  		private final Keyword cLabelKeyword_4_2_1 = (Keyword)cGroup_4_2.eContents().get(1);
  		private final Assignment cDestinationsAssignment_4_2_2 = (Assignment)cGroup_4_2.eContents().get(2);
  		private final RuleCall cDestinationsBasicBlockRefParserRuleCall_4_2_2_0 = (RuleCall)cDestinationsAssignment_4_2_2.eContents().get(0);
  		private final Keyword cRightSquareBracketKeyword_5 = (Keyword)cGroup.eContents().get(5);
  		
  		//// indirectbr <somety>* <address>, [ label <dest1>, label <dest2>, ... ]
  		//
  		//Instruction_indirectbr:
  		//
  		//	opcode="indirectbr" address=TypedValue "," "[" ("label" destinations+=BasicBlockRef ("," "label"
  		//
  		//	destinations+=BasicBlockRef)*)? "]";
  		public ParserRule getRule() { return rule; }
  
  		//opcode="indirectbr" address=TypedValue "," "[" ("label" destinations+=BasicBlockRef ("," "label"
  		//
  		//destinations+=BasicBlockRef)*)? "]"
  		public Group getGroup() { return cGroup; }
  
  		//opcode="indirectbr"
  		public Assignment getOpcodeAssignment_0() { return cOpcodeAssignment_0; }
  
  		//"indirectbr"
  		public Keyword getOpcodeIndirectbrKeyword_0_0() { return cOpcodeIndirectbrKeyword_0_0; }
  
  		//address=TypedValue
  		public Assignment getAddressAssignment_1() { return cAddressAssignment_1; }
  
  		//TypedValue
  		public RuleCall getAddressTypedValueParserRuleCall_1_0() { return cAddressTypedValueParserRuleCall_1_0; }
  
  		//","
  		public Keyword getCommaKeyword_2() { return cCommaKeyword_2; }
  
  		//"["
  		public Keyword getLeftSquareBracketKeyword_3() { return cLeftSquareBracketKeyword_3; }
  
  		//("label" destinations+=BasicBlockRef ("," "label" destinations+=BasicBlockRef)*)?
  		public Group getGroup_4() { return cGroup_4; }
  
  		//"label"
  		public Keyword getLabelKeyword_4_0() { return cLabelKeyword_4_0; }
  
  		//destinations+=BasicBlockRef
  		public Assignment getDestinationsAssignment_4_1() { return cDestinationsAssignment_4_1; }
  
  		//BasicBlockRef
  		public RuleCall getDestinationsBasicBlockRefParserRuleCall_4_1_0() { return cDestinationsBasicBlockRefParserRuleCall_4_1_0; }
  
  		//("," "label" destinations+=BasicBlockRef)*
  		public Group getGroup_4_2() { return cGroup_4_2; }
  
  		//","
  		public Keyword getCommaKeyword_4_2_0() { return cCommaKeyword_4_2_0; }
  
  		//"label"
  		public Keyword getLabelKeyword_4_2_1() { return cLabelKeyword_4_2_1; }
  
  		//destinations+=BasicBlockRef
  		public Assignment getDestinationsAssignment_4_2_2() { return cDestinationsAssignment_4_2_2; }
  
  		//BasicBlockRef
  		public RuleCall getDestinationsBasicBlockRefParserRuleCall_4_2_2_0() { return cDestinationsBasicBlockRefParserRuleCall_4_2_2_0; }
  
  		//"]"
  		public Keyword getRightSquareBracketKeyword_5() { return cRightSquareBracketKeyword_5; }
  	}
  
  	public class Instruction_invoke_voidElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Instruction_invoke_void");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cOpcodeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final Keyword cOpcodeInvokeKeyword_0_0 = (Keyword)cOpcodeAssignment_0.eContents().get(0);
  		private final Assignment cCconvAssignment_1 = (Assignment)cGroup.eContents().get(1);
  		private final RuleCall cCconvCConvParserRuleCall_1_0 = (RuleCall)cCconvAssignment_1.eContents().get(0);
  		private final UnorderedGroup cUnorderedGroup_2 = (UnorderedGroup)cGroup.eContents().get(2);
  		private final Keyword cZeroextKeyword_2_0 = (Keyword)cUnorderedGroup_2.eContents().get(0);
  		private final Keyword cSignextKeyword_2_1 = (Keyword)cUnorderedGroup_2.eContents().get(1);
  		private final Keyword cInregKeyword_2_2 = (Keyword)cUnorderedGroup_2.eContents().get(2);
  		private final Assignment cTypeAssignment_3 = (Assignment)cGroup.eContents().get(3);
  		private final RuleCall cTypeVoidTypeParserRuleCall_3_0 = (RuleCall)cTypeAssignment_3.eContents().get(0);
  		private final Assignment cCalleeAssignment_4 = (Assignment)cGroup.eContents().get(4);
  		private final RuleCall cCalleeCalleeParserRuleCall_4_0 = (RuleCall)cCalleeAssignment_4.eContents().get(0);
  		private final Assignment cArgsAssignment_5 = (Assignment)cGroup.eContents().get(5);
  		private final RuleCall cArgsArgListParserRuleCall_5_0 = (RuleCall)cArgsAssignment_5.eContents().get(0);
  		private final Assignment cAttributesAssignment_6 = (Assignment)cGroup.eContents().get(6);
  		private final RuleCall cAttributesFunctionAttributesParserRuleCall_6_0 = (RuleCall)cAttributesAssignment_6.eContents().get(0);
  		private final Keyword cToKeyword_7 = (Keyword)cGroup.eContents().get(7);
  		private final Keyword cLabelKeyword_8 = (Keyword)cGroup.eContents().get(8);
  		private final Assignment cToLabelAssignment_9 = (Assignment)cGroup.eContents().get(9);
  		private final RuleCall cToLabelBasicBlockRefParserRuleCall_9_0 = (RuleCall)cToLabelAssignment_9.eContents().get(0);
  		private final Keyword cUnwindKeyword_10 = (Keyword)cGroup.eContents().get(10);
  		private final Keyword cLabelKeyword_11 = (Keyword)cGroup.eContents().get(11);
  		private final Assignment cExceptionLabelAssignment_12 = (Assignment)cGroup.eContents().get(12);
  		private final RuleCall cExceptionLabelBasicBlockRefParserRuleCall_12_0 = (RuleCall)cExceptionLabelAssignment_12.eContents().get(0);
  		
  		//// <result> = invoke [cconv] [ret attrs] <ptr to function ty> <function ptr val>(<function args>) [fn attrs]
  		//
  		////                 to label <normal label> unwind label <exception label>
  		//
  		//// Notice this template as it appears in the reference is incorrect, <ptr to function ty> actually
  		//
  		//// behaves just like in a call instruction, so it's possible to provide return type only.
  		//
  		//Instruction_invoke_void:
  		//
  		//	opcode="invoke" cconv=CConv? ("zeroext"? & "signext"? & "inreg"?) type=VoidType callee=Callee args=ArgList
  		//
  		//	attributes=FunctionAttributes? "to" "label" toLabel=BasicBlockRef "unwind" "label" exceptionLabel=BasicBlockRef;
  		public ParserRule getRule() { return rule; }
  
  		//opcode="invoke" cconv=CConv? ("zeroext"? & "signext"? & "inreg"?) type=VoidType callee=Callee args=ArgList
  		//
  		//attributes=FunctionAttributes? "to" "label" toLabel=BasicBlockRef "unwind" "label" exceptionLabel=BasicBlockRef
  		public Group getGroup() { return cGroup; }
  
  		//opcode="invoke"
  		public Assignment getOpcodeAssignment_0() { return cOpcodeAssignment_0; }
  
  		//"invoke"
  		public Keyword getOpcodeInvokeKeyword_0_0() { return cOpcodeInvokeKeyword_0_0; }
  
  		//cconv=CConv?
  		public Assignment getCconvAssignment_1() { return cCconvAssignment_1; }
  
  		//CConv
  		public RuleCall getCconvCConvParserRuleCall_1_0() { return cCconvCConvParserRuleCall_1_0; }
  
  		//"zeroext"? & "signext"? & "inreg"?
  		public UnorderedGroup getUnorderedGroup_2() { return cUnorderedGroup_2; }
  
  		//"zeroext"?
  		public Keyword getZeroextKeyword_2_0() { return cZeroextKeyword_2_0; }
  
  		//"signext"?
  		public Keyword getSignextKeyword_2_1() { return cSignextKeyword_2_1; }
  
  		//"inreg"?
  		public Keyword getInregKeyword_2_2() { return cInregKeyword_2_2; }
  
  		//type=VoidType
  		public Assignment getTypeAssignment_3() { return cTypeAssignment_3; }
  
  		//VoidType
  		public RuleCall getTypeVoidTypeParserRuleCall_3_0() { return cTypeVoidTypeParserRuleCall_3_0; }
  
  		//callee=Callee
  		public Assignment getCalleeAssignment_4() { return cCalleeAssignment_4; }
  
  		//Callee
  		public RuleCall getCalleeCalleeParserRuleCall_4_0() { return cCalleeCalleeParserRuleCall_4_0; }
  
  		//args=ArgList
  		public Assignment getArgsAssignment_5() { return cArgsAssignment_5; }
  
  		//ArgList
  		public RuleCall getArgsArgListParserRuleCall_5_0() { return cArgsArgListParserRuleCall_5_0; }
  
  		//attributes=FunctionAttributes?
  		public Assignment getAttributesAssignment_6() { return cAttributesAssignment_6; }
  
  		//FunctionAttributes
  		public RuleCall getAttributesFunctionAttributesParserRuleCall_6_0() { return cAttributesFunctionAttributesParserRuleCall_6_0; }
  
  		//"to"
  		public Keyword getToKeyword_7() { return cToKeyword_7; }
  
  		//"label"
  		public Keyword getLabelKeyword_8() { return cLabelKeyword_8; }
  
  		//toLabel=BasicBlockRef
  		public Assignment getToLabelAssignment_9() { return cToLabelAssignment_9; }
  
  		//BasicBlockRef
  		public RuleCall getToLabelBasicBlockRefParserRuleCall_9_0() { return cToLabelBasicBlockRefParserRuleCall_9_0; }
  
  		//"unwind"
  		public Keyword getUnwindKeyword_10() { return cUnwindKeyword_10; }
  
  		//"label"
  		public Keyword getLabelKeyword_11() { return cLabelKeyword_11; }
  
  		//exceptionLabel=BasicBlockRef
  		public Assignment getExceptionLabelAssignment_12() { return cExceptionLabelAssignment_12; }
  
  		//BasicBlockRef
  		public RuleCall getExceptionLabelBasicBlockRefParserRuleCall_12_0() { return cExceptionLabelBasicBlockRefParserRuleCall_12_0; }
  	}
  
  	public class Instruction_invoke_nonVoidElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Instruction_invoke_nonVoid");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cOpcodeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final Keyword cOpcodeInvokeKeyword_0_0 = (Keyword)cOpcodeAssignment_0.eContents().get(0);
  		private final Assignment cCconvAssignment_1 = (Assignment)cGroup.eContents().get(1);
  		private final RuleCall cCconvCConvParserRuleCall_1_0 = (RuleCall)cCconvAssignment_1.eContents().get(0);
  		private final UnorderedGroup cUnorderedGroup_2 = (UnorderedGroup)cGroup.eContents().get(2);
  		private final Keyword cZeroextKeyword_2_0 = (Keyword)cUnorderedGroup_2.eContents().get(0);
  		private final Keyword cSignextKeyword_2_1 = (Keyword)cUnorderedGroup_2.eContents().get(1);
  		private final Keyword cInregKeyword_2_2 = (Keyword)cUnorderedGroup_2.eContents().get(2);
  		private final Assignment cTypeAssignment_3 = (Assignment)cGroup.eContents().get(3);
  		private final RuleCall cTypeNonVoidTypeParserRuleCall_3_0 = (RuleCall)cTypeAssignment_3.eContents().get(0);
  		private final Assignment cCalleeAssignment_4 = (Assignment)cGroup.eContents().get(4);
  		private final RuleCall cCalleeCalleeParserRuleCall_4_0 = (RuleCall)cCalleeAssignment_4.eContents().get(0);
  		private final Assignment cArgsAssignment_5 = (Assignment)cGroup.eContents().get(5);
  		private final RuleCall cArgsArgListParserRuleCall_5_0 = (RuleCall)cArgsAssignment_5.eContents().get(0);
  		private final Assignment cAttributesAssignment_6 = (Assignment)cGroup.eContents().get(6);
  		private final RuleCall cAttributesFunctionAttributesParserRuleCall_6_0 = (RuleCall)cAttributesAssignment_6.eContents().get(0);
  		private final Keyword cToKeyword_7 = (Keyword)cGroup.eContents().get(7);
  		private final Keyword cLabelKeyword_8 = (Keyword)cGroup.eContents().get(8);
  		private final Assignment cToLabelAssignment_9 = (Assignment)cGroup.eContents().get(9);
  		private final RuleCall cToLabelBasicBlockRefParserRuleCall_9_0 = (RuleCall)cToLabelAssignment_9.eContents().get(0);
  		private final Keyword cUnwindKeyword_10 = (Keyword)cGroup.eContents().get(10);
  		private final Keyword cLabelKeyword_11 = (Keyword)cGroup.eContents().get(11);
  		private final Assignment cExceptionLabelAssignment_12 = (Assignment)cGroup.eContents().get(12);
  		private final RuleCall cExceptionLabelBasicBlockRefParserRuleCall_12_0 = (RuleCall)cExceptionLabelAssignment_12.eContents().get(0);
  		
  		//// <result> = invoke [cconv] [ret attrs] <ptr to function ty> <function ptr val>(<function args>) [fn attrs]
  		//
  		////                 to label <normal label> unwind label <exception label>
  		//
  		//// Notice this template as it appears in the reference is incorrect, <ptr to function ty> actually
  		//
  		//// behaves just like in a call instruction, so it's possible to provide return type only.
  		//
  		//Instruction_invoke_nonVoid:
  		//
  		//	opcode="invoke" cconv=CConv? ("zeroext"? & "signext"? & "inreg"?) type=NonVoidType callee=Callee args=ArgList
  		//
  		//	attributes=FunctionAttributes? "to" "label" toLabel=BasicBlockRef "unwind" "label" exceptionLabel=BasicBlockRef;
  		public ParserRule getRule() { return rule; }
  
  		//opcode="invoke" cconv=CConv? ("zeroext"? & "signext"? & "inreg"?) type=NonVoidType callee=Callee args=ArgList
  		//
  		//attributes=FunctionAttributes? "to" "label" toLabel=BasicBlockRef "unwind" "label" exceptionLabel=BasicBlockRef
  		public Group getGroup() { return cGroup; }
  
  		//opcode="invoke"
  		public Assignment getOpcodeAssignment_0() { return cOpcodeAssignment_0; }
  
  		//"invoke"
  		public Keyword getOpcodeInvokeKeyword_0_0() { return cOpcodeInvokeKeyword_0_0; }
  
  		//cconv=CConv?
  		public Assignment getCconvAssignment_1() { return cCconvAssignment_1; }
  
  		//CConv
  		public RuleCall getCconvCConvParserRuleCall_1_0() { return cCconvCConvParserRuleCall_1_0; }
  
  		//"zeroext"? & "signext"? & "inreg"?
  		public UnorderedGroup getUnorderedGroup_2() { return cUnorderedGroup_2; }
  
  		//"zeroext"?
  		public Keyword getZeroextKeyword_2_0() { return cZeroextKeyword_2_0; }
  
  		//"signext"?
  		public Keyword getSignextKeyword_2_1() { return cSignextKeyword_2_1; }
  
  		//"inreg"?
  		public Keyword getInregKeyword_2_2() { return cInregKeyword_2_2; }
  
  		//type=NonVoidType
  		public Assignment getTypeAssignment_3() { return cTypeAssignment_3; }
  
  		//NonVoidType
  		public RuleCall getTypeNonVoidTypeParserRuleCall_3_0() { return cTypeNonVoidTypeParserRuleCall_3_0; }
  
  		//callee=Callee
  		public Assignment getCalleeAssignment_4() { return cCalleeAssignment_4; }
  
  		//Callee
  		public RuleCall getCalleeCalleeParserRuleCall_4_0() { return cCalleeCalleeParserRuleCall_4_0; }
  
  		//args=ArgList
  		public Assignment getArgsAssignment_5() { return cArgsAssignment_5; }
  
  		//ArgList
  		public RuleCall getArgsArgListParserRuleCall_5_0() { return cArgsArgListParserRuleCall_5_0; }
  
  		//attributes=FunctionAttributes?
  		public Assignment getAttributesAssignment_6() { return cAttributesAssignment_6; }
  
  		//FunctionAttributes
  		public RuleCall getAttributesFunctionAttributesParserRuleCall_6_0() { return cAttributesFunctionAttributesParserRuleCall_6_0; }
  
  		//"to"
  		public Keyword getToKeyword_7() { return cToKeyword_7; }
  
  		//"label"
  		public Keyword getLabelKeyword_8() { return cLabelKeyword_8; }
  
  		//toLabel=BasicBlockRef
  		public Assignment getToLabelAssignment_9() { return cToLabelAssignment_9; }
  
  		//BasicBlockRef
  		public RuleCall getToLabelBasicBlockRefParserRuleCall_9_0() { return cToLabelBasicBlockRefParserRuleCall_9_0; }
  
  		//"unwind"
  		public Keyword getUnwindKeyword_10() { return cUnwindKeyword_10; }
  
  		//"label"
  		public Keyword getLabelKeyword_11() { return cLabelKeyword_11; }
  
  		//exceptionLabel=BasicBlockRef
  		public Assignment getExceptionLabelAssignment_12() { return cExceptionLabelAssignment_12; }
  
  		//BasicBlockRef
  		public RuleCall getExceptionLabelBasicBlockRefParserRuleCall_12_0() { return cExceptionLabelBasicBlockRefParserRuleCall_12_0; }
  	}
  
  	public class Instruction_resumeElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Instruction_resume");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cOpcodeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final Keyword cOpcodeResumeKeyword_0_0 = (Keyword)cOpcodeAssignment_0.eContents().get(0);
  		private final Assignment cValueAssignment_1 = (Assignment)cGroup.eContents().get(1);
  		private final RuleCall cValueTypedValueParserRuleCall_1_0 = (RuleCall)cValueAssignment_1.eContents().get(0);
  		
  		//// resume <type> <value>
  		//
  		//Instruction_resume:
  		//
  		//	opcode="resume" value=TypedValue;
  		public ParserRule getRule() { return rule; }
  
  		//opcode="resume" value=TypedValue
  		public Group getGroup() { return cGroup; }
  
  		//opcode="resume"
  		public Assignment getOpcodeAssignment_0() { return cOpcodeAssignment_0; }
  
  		//"resume"
  		public Keyword getOpcodeResumeKeyword_0_0() { return cOpcodeResumeKeyword_0_0; }
  
  		//value=TypedValue
  		public Assignment getValueAssignment_1() { return cValueAssignment_1; }
  
  		//TypedValue
  		public RuleCall getValueTypedValueParserRuleCall_1_0() { return cValueTypedValueParserRuleCall_1_0; }
  	}
  
  	public class Instruction_unreachableElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Instruction_unreachable");
  		private final Assignment cOpcodeAssignment = (Assignment)rule.eContents().get(1);
  		private final Keyword cOpcodeUnreachableKeyword_0 = (Keyword)cOpcodeAssignment.eContents().get(0);
  		
  		//// unreachable
  		//
  		//Instruction_unreachable:
  		//
  		//	opcode="unreachable";
  		public ParserRule getRule() { return rule; }
  
  		//opcode="unreachable"
  		public Assignment getOpcodeAssignment() { return cOpcodeAssignment; }
  
  		//"unreachable"
  		public Keyword getOpcodeUnreachableKeyword_0() { return cOpcodeUnreachableKeyword_0; }
  	}
  
  	public class BasicBlockRefElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "BasicBlockRef");
  		private final Assignment cRefAssignment = (Assignment)rule.eContents().get(1);
  		private final CrossReference cRefBasicBlockCrossReference_0 = (CrossReference)cRefAssignment.eContents().get(0);
  		private final RuleCall cRefBasicBlockLOCAL_IDTerminalRuleCall_0_1 = (RuleCall)cRefBasicBlockCrossReference_0.eContents().get(1);
  		
  		//BasicBlockRef:
  		//
  		//	ref=[BasicBlock|LOCAL_ID];
  		public ParserRule getRule() { return rule; }
  
  		//ref=[BasicBlock|LOCAL_ID]
  		public Assignment getRefAssignment() { return cRefAssignment; }
  
  		//[BasicBlock|LOCAL_ID]
  		public CrossReference getRefBasicBlockCrossReference_0() { return cRefBasicBlockCrossReference_0; }
  
  		//LOCAL_ID
  		public RuleCall getRefBasicBlockLOCAL_IDTerminalRuleCall_0_1() { return cRefBasicBlockLOCAL_IDTerminalRuleCall_0_1; }
  	}
  
  	public class BinaryInstructionElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "BinaryInstruction");
  		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
  		private final RuleCall cInstruction_addParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
  		private final RuleCall cInstruction_faddParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
  		private final RuleCall cInstruction_subParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
  		private final RuleCall cInstruction_fsubParserRuleCall_3 = (RuleCall)cAlternatives.eContents().get(3);
  		private final RuleCall cInstruction_mulParserRuleCall_4 = (RuleCall)cAlternatives.eContents().get(4);
  		private final RuleCall cInstruction_fmulParserRuleCall_5 = (RuleCall)cAlternatives.eContents().get(5);
  		private final RuleCall cInstruction_udivParserRuleCall_6 = (RuleCall)cAlternatives.eContents().get(6);
  		private final RuleCall cInstruction_sdivParserRuleCall_7 = (RuleCall)cAlternatives.eContents().get(7);
  		private final RuleCall cInstruction_fdivParserRuleCall_8 = (RuleCall)cAlternatives.eContents().get(8);
  		private final RuleCall cInstruction_uremParserRuleCall_9 = (RuleCall)cAlternatives.eContents().get(9);
  		private final RuleCall cInstruction_sremParserRuleCall_10 = (RuleCall)cAlternatives.eContents().get(10);
  		private final RuleCall cInstruction_fremParserRuleCall_11 = (RuleCall)cAlternatives.eContents().get(11);
  		
  		//BinaryInstruction:
  		//
  		//	Instruction_add | Instruction_fadd | Instruction_sub | Instruction_fsub | Instruction_mul | Instruction_fmul |
  		//
  		//	Instruction_udiv | Instruction_sdiv | Instruction_fdiv | Instruction_urem | Instruction_srem | Instruction_frem;
  		public ParserRule getRule() { return rule; }
  
  		//Instruction_add | Instruction_fadd | Instruction_sub | Instruction_fsub | Instruction_mul | Instruction_fmul |
  		//
  		//Instruction_udiv | Instruction_sdiv | Instruction_fdiv | Instruction_urem | Instruction_srem | Instruction_frem
  		public Alternatives getAlternatives() { return cAlternatives; }
  
  		//Instruction_add
  		public RuleCall getInstruction_addParserRuleCall_0() { return cInstruction_addParserRuleCall_0; }
  
  		//Instruction_fadd
  		public RuleCall getInstruction_faddParserRuleCall_1() { return cInstruction_faddParserRuleCall_1; }
  
  		//Instruction_sub
  		public RuleCall getInstruction_subParserRuleCall_2() { return cInstruction_subParserRuleCall_2; }
  
  		//Instruction_fsub
  		public RuleCall getInstruction_fsubParserRuleCall_3() { return cInstruction_fsubParserRuleCall_3; }
  
  		//Instruction_mul
  		public RuleCall getInstruction_mulParserRuleCall_4() { return cInstruction_mulParserRuleCall_4; }
  
  		//Instruction_fmul
  		public RuleCall getInstruction_fmulParserRuleCall_5() { return cInstruction_fmulParserRuleCall_5; }
  
  		//Instruction_udiv
  		public RuleCall getInstruction_udivParserRuleCall_6() { return cInstruction_udivParserRuleCall_6; }
  
  		//Instruction_sdiv
  		public RuleCall getInstruction_sdivParserRuleCall_7() { return cInstruction_sdivParserRuleCall_7; }
  
  		//Instruction_fdiv
  		public RuleCall getInstruction_fdivParserRuleCall_8() { return cInstruction_fdivParserRuleCall_8; }
  
  		//Instruction_urem
  		public RuleCall getInstruction_uremParserRuleCall_9() { return cInstruction_uremParserRuleCall_9; }
  
  		//Instruction_srem
  		public RuleCall getInstruction_sremParserRuleCall_10() { return cInstruction_sremParserRuleCall_10; }
  
  		//Instruction_frem
  		public RuleCall getInstruction_fremParserRuleCall_11() { return cInstruction_fremParserRuleCall_11; }
  	}
  
  	public class Instruction_addElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Instruction_add");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cOpcodeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final Keyword cOpcodeAddKeyword_0_0 = (Keyword)cOpcodeAssignment_0.eContents().get(0);
  		private final UnorderedGroup cUnorderedGroup_1 = (UnorderedGroup)cGroup.eContents().get(1);
  		private final Keyword cNuwKeyword_1_0 = (Keyword)cUnorderedGroup_1.eContents().get(0);
  		private final Keyword cNswKeyword_1_1 = (Keyword)cUnorderedGroup_1.eContents().get(1);
  		private final Assignment cTypeAssignment_2 = (Assignment)cGroup.eContents().get(2);
  		private final RuleCall cTypeTypeParserRuleCall_2_0 = (RuleCall)cTypeAssignment_2.eContents().get(0);
  		private final Assignment cOp1Assignment_3 = (Assignment)cGroup.eContents().get(3);
  		private final RuleCall cOp1ValueRefParserRuleCall_3_0 = (RuleCall)cOp1Assignment_3.eContents().get(0);
  		private final Keyword cCommaKeyword_4 = (Keyword)cGroup.eContents().get(4);
  		private final Assignment cOp2Assignment_5 = (Assignment)cGroup.eContents().get(5);
  		private final RuleCall cOp2ValueRefParserRuleCall_5_0 = (RuleCall)cOp2Assignment_5.eContents().get(0);
  		
  		//// <result> = add <ty> <op1>, <op2>          ; yields {ty}:result
  		//
  		//// <result> = add nuw <ty> <op1>, <op2>      ; yields {ty}:result
  		//
  		//// <result> = add nsw <ty> <op1>, <op2>      ; yields {ty}:result
  		//
  		//// <result> = add nuw nsw <ty> <op1>, <op2>  ; yields {ty}:result
  		//
  		//Instruction_add:
  		//
  		//	opcode="add" ("nuw"? & "nsw"?) type=Type op1=ValueRef "," op2=ValueRef;
  		public ParserRule getRule() { return rule; }
  
  		//opcode="add" ("nuw"? & "nsw"?) type=Type op1=ValueRef "," op2=ValueRef
  		public Group getGroup() { return cGroup; }
  
  		//opcode="add"
  		public Assignment getOpcodeAssignment_0() { return cOpcodeAssignment_0; }
  
  		//"add"
  		public Keyword getOpcodeAddKeyword_0_0() { return cOpcodeAddKeyword_0_0; }
  
  		//"nuw"? & "nsw"?
  		public UnorderedGroup getUnorderedGroup_1() { return cUnorderedGroup_1; }
  
  		//"nuw"?
  		public Keyword getNuwKeyword_1_0() { return cNuwKeyword_1_0; }
  
  		//"nsw"?
  		public Keyword getNswKeyword_1_1() { return cNswKeyword_1_1; }
  
  		//type=Type
  		public Assignment getTypeAssignment_2() { return cTypeAssignment_2; }
  
  		//Type
  		public RuleCall getTypeTypeParserRuleCall_2_0() { return cTypeTypeParserRuleCall_2_0; }
  
  		//op1=ValueRef
  		public Assignment getOp1Assignment_3() { return cOp1Assignment_3; }
  
  		//ValueRef
  		public RuleCall getOp1ValueRefParserRuleCall_3_0() { return cOp1ValueRefParserRuleCall_3_0; }
  
  		//","
  		public Keyword getCommaKeyword_4() { return cCommaKeyword_4; }
  
  		//op2=ValueRef
  		public Assignment getOp2Assignment_5() { return cOp2Assignment_5; }
  
  		//ValueRef
  		public RuleCall getOp2ValueRefParserRuleCall_5_0() { return cOp2ValueRefParserRuleCall_5_0; }
  	}
  
  	public class Instruction_faddElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Instruction_fadd");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cOpcodeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final Keyword cOpcodeFaddKeyword_0_0 = (Keyword)cOpcodeAssignment_0.eContents().get(0);
  		private final Assignment cFastMathFlagsAssignment_1 = (Assignment)cGroup.eContents().get(1);
  		private final RuleCall cFastMathFlagsFastMathFlagParserRuleCall_1_0 = (RuleCall)cFastMathFlagsAssignment_1.eContents().get(0);
  		private final Assignment cTypeAssignment_2 = (Assignment)cGroup.eContents().get(2);
  		private final RuleCall cTypeTypeParserRuleCall_2_0 = (RuleCall)cTypeAssignment_2.eContents().get(0);
  		private final Assignment cOp1Assignment_3 = (Assignment)cGroup.eContents().get(3);
  		private final RuleCall cOp1ValueRefParserRuleCall_3_0 = (RuleCall)cOp1Assignment_3.eContents().get(0);
  		private final Keyword cCommaKeyword_4 = (Keyword)cGroup.eContents().get(4);
  		private final Assignment cOp2Assignment_5 = (Assignment)cGroup.eContents().get(5);
  		private final RuleCall cOp2ValueRefParserRuleCall_5_0 = (RuleCall)cOp2Assignment_5.eContents().get(0);
  		
  		//// <result> = fadd [fast-math flags]* <ty> <op1>, <op2>   ; yields {ty}:result
  		//
  		//Instruction_fadd:
  		//
  		//	opcode="fadd" fastMathFlags+=FastMathFlag* type=Type op1=ValueRef "," op2=ValueRef;
  		public ParserRule getRule() { return rule; }
  
  		//opcode="fadd" fastMathFlags+=FastMathFlag* type=Type op1=ValueRef "," op2=ValueRef
  		public Group getGroup() { return cGroup; }
  
  		//opcode="fadd"
  		public Assignment getOpcodeAssignment_0() { return cOpcodeAssignment_0; }
  
  		//"fadd"
  		public Keyword getOpcodeFaddKeyword_0_0() { return cOpcodeFaddKeyword_0_0; }
  
  		//fastMathFlags+=FastMathFlag*
  		public Assignment getFastMathFlagsAssignment_1() { return cFastMathFlagsAssignment_1; }
  
  		//FastMathFlag
  		public RuleCall getFastMathFlagsFastMathFlagParserRuleCall_1_0() { return cFastMathFlagsFastMathFlagParserRuleCall_1_0; }
  
  		//type=Type
  		public Assignment getTypeAssignment_2() { return cTypeAssignment_2; }
  
  		//Type
  		public RuleCall getTypeTypeParserRuleCall_2_0() { return cTypeTypeParserRuleCall_2_0; }
  
  		//op1=ValueRef
  		public Assignment getOp1Assignment_3() { return cOp1Assignment_3; }
  
  		//ValueRef
  		public RuleCall getOp1ValueRefParserRuleCall_3_0() { return cOp1ValueRefParserRuleCall_3_0; }
  
  		//","
  		public Keyword getCommaKeyword_4() { return cCommaKeyword_4; }
  
  		//op2=ValueRef
  		public Assignment getOp2Assignment_5() { return cOp2Assignment_5; }
  
  		//ValueRef
  		public RuleCall getOp2ValueRefParserRuleCall_5_0() { return cOp2ValueRefParserRuleCall_5_0; }
  	}
  
  	public class FastMathFlagElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "FastMathFlag");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Action cFastMathFlagAction_0 = (Action)cGroup.eContents().get(0);
  		private final Assignment cKindAssignment_1 = (Assignment)cGroup.eContents().get(1);
  		private final Alternatives cKindAlternatives_1_0 = (Alternatives)cKindAssignment_1.eContents().get(0);
  		private final Keyword cKindNnanKeyword_1_0_0 = (Keyword)cKindAlternatives_1_0.eContents().get(0);
  		private final Keyword cKindNinfKeyword_1_0_1 = (Keyword)cKindAlternatives_1_0.eContents().get(1);
  		private final Keyword cKindNszKeyword_1_0_2 = (Keyword)cKindAlternatives_1_0.eContents().get(2);
  		private final Keyword cKindArcpKeyword_1_0_3 = (Keyword)cKindAlternatives_1_0.eContents().get(3);
  		private final Keyword cKindFastKeyword_1_0_4 = (Keyword)cKindAlternatives_1_0.eContents().get(4);
  		
  		//FastMathFlag:
  		//
  		//	{FastMathFlag} kind=("nnan" | "ninf" | "nsz" | "arcp" | "fast");
  		public ParserRule getRule() { return rule; }
  
  		//{FastMathFlag} kind=("nnan" | "ninf" | "nsz" | "arcp" | "fast")
  		public Group getGroup() { return cGroup; }
  
  		//{FastMathFlag}
  		public Action getFastMathFlagAction_0() { return cFastMathFlagAction_0; }
  
  		//kind=("nnan" | "ninf" | "nsz" | "arcp" | "fast")
  		public Assignment getKindAssignment_1() { return cKindAssignment_1; }
  
  		//"nnan" | "ninf" | "nsz" | "arcp" | "fast"
  		public Alternatives getKindAlternatives_1_0() { return cKindAlternatives_1_0; }
  
  		//"nnan"
  		public Keyword getKindNnanKeyword_1_0_0() { return cKindNnanKeyword_1_0_0; }
  
  		//"ninf"
  		public Keyword getKindNinfKeyword_1_0_1() { return cKindNinfKeyword_1_0_1; }
  
  		//"nsz"
  		public Keyword getKindNszKeyword_1_0_2() { return cKindNszKeyword_1_0_2; }
  
  		//"arcp"
  		public Keyword getKindArcpKeyword_1_0_3() { return cKindArcpKeyword_1_0_3; }
  
  		//"fast"
  		public Keyword getKindFastKeyword_1_0_4() { return cKindFastKeyword_1_0_4; }
  	}
  
  	public class Instruction_subElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Instruction_sub");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cOpcodeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final Keyword cOpcodeSubKeyword_0_0 = (Keyword)cOpcodeAssignment_0.eContents().get(0);
  		private final UnorderedGroup cUnorderedGroup_1 = (UnorderedGroup)cGroup.eContents().get(1);
  		private final Keyword cNuwKeyword_1_0 = (Keyword)cUnorderedGroup_1.eContents().get(0);
  		private final Keyword cNswKeyword_1_1 = (Keyword)cUnorderedGroup_1.eContents().get(1);
  		private final Assignment cTypeAssignment_2 = (Assignment)cGroup.eContents().get(2);
  		private final RuleCall cTypeTypeParserRuleCall_2_0 = (RuleCall)cTypeAssignment_2.eContents().get(0);
  		private final Assignment cOp1Assignment_3 = (Assignment)cGroup.eContents().get(3);
  		private final RuleCall cOp1ValueRefParserRuleCall_3_0 = (RuleCall)cOp1Assignment_3.eContents().get(0);
  		private final Keyword cCommaKeyword_4 = (Keyword)cGroup.eContents().get(4);
  		private final Assignment cOp2Assignment_5 = (Assignment)cGroup.eContents().get(5);
  		private final RuleCall cOp2ValueRefParserRuleCall_5_0 = (RuleCall)cOp2Assignment_5.eContents().get(0);
  		
  		//// <result> = sub <ty> <op1>, <op2>          ; yields {ty}:result
  		//
  		//// <result> = sub nuw <ty> <op1>, <op2>      ; yields {ty}:result
  		//
  		//// <result> = sub nsw <ty> <op1>, <op2>      ; yields {ty}:result
  		//
  		//// <result> = sub nuw nsw <ty> <op1>, <op2>  ; yields {ty}:result
  		//
  		//Instruction_sub:
  		//
  		//	opcode="sub" ("nuw"? & "nsw"?) type=Type op1=ValueRef "," op2=ValueRef;
  		public ParserRule getRule() { return rule; }
  
  		//opcode="sub" ("nuw"? & "nsw"?) type=Type op1=ValueRef "," op2=ValueRef
  		public Group getGroup() { return cGroup; }
  
  		//opcode="sub"
  		public Assignment getOpcodeAssignment_0() { return cOpcodeAssignment_0; }
  
  		//"sub"
  		public Keyword getOpcodeSubKeyword_0_0() { return cOpcodeSubKeyword_0_0; }
  
  		//"nuw"? & "nsw"?
  		public UnorderedGroup getUnorderedGroup_1() { return cUnorderedGroup_1; }
  
  		//"nuw"?
  		public Keyword getNuwKeyword_1_0() { return cNuwKeyword_1_0; }
  
  		//"nsw"?
  		public Keyword getNswKeyword_1_1() { return cNswKeyword_1_1; }
  
  		//type=Type
  		public Assignment getTypeAssignment_2() { return cTypeAssignment_2; }
  
  		//Type
  		public RuleCall getTypeTypeParserRuleCall_2_0() { return cTypeTypeParserRuleCall_2_0; }
  
  		//op1=ValueRef
  		public Assignment getOp1Assignment_3() { return cOp1Assignment_3; }
  
  		//ValueRef
  		public RuleCall getOp1ValueRefParserRuleCall_3_0() { return cOp1ValueRefParserRuleCall_3_0; }
  
  		//","
  		public Keyword getCommaKeyword_4() { return cCommaKeyword_4; }
  
  		//op2=ValueRef
  		public Assignment getOp2Assignment_5() { return cOp2Assignment_5; }
  
  		//ValueRef
  		public RuleCall getOp2ValueRefParserRuleCall_5_0() { return cOp2ValueRefParserRuleCall_5_0; }
  	}
  
  	public class Instruction_fsubElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Instruction_fsub");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cOpcodeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final Keyword cOpcodeFsubKeyword_0_0 = (Keyword)cOpcodeAssignment_0.eContents().get(0);
  		private final Assignment cFastMathFlagsAssignment_1 = (Assignment)cGroup.eContents().get(1);
  		private final RuleCall cFastMathFlagsFastMathFlagParserRuleCall_1_0 = (RuleCall)cFastMathFlagsAssignment_1.eContents().get(0);
  		private final Assignment cTypeAssignment_2 = (Assignment)cGroup.eContents().get(2);
  		private final RuleCall cTypeTypeParserRuleCall_2_0 = (RuleCall)cTypeAssignment_2.eContents().get(0);
  		private final Assignment cOp1Assignment_3 = (Assignment)cGroup.eContents().get(3);
  		private final RuleCall cOp1ValueRefParserRuleCall_3_0 = (RuleCall)cOp1Assignment_3.eContents().get(0);
  		private final Keyword cCommaKeyword_4 = (Keyword)cGroup.eContents().get(4);
  		private final Assignment cOp2Assignment_5 = (Assignment)cGroup.eContents().get(5);
  		private final RuleCall cOp2ValueRefParserRuleCall_5_0 = (RuleCall)cOp2Assignment_5.eContents().get(0);
  		
  		//// <result> = fsub [fast-math flags]* <ty> <op1>, <op2>   ; yields {ty}:result
  		//
  		//Instruction_fsub:
  		//
  		//	opcode="fsub" fastMathFlags+=FastMathFlag* type=Type op1=ValueRef "," op2=ValueRef;
  		public ParserRule getRule() { return rule; }
  
  		//opcode="fsub" fastMathFlags+=FastMathFlag* type=Type op1=ValueRef "," op2=ValueRef
  		public Group getGroup() { return cGroup; }
  
  		//opcode="fsub"
  		public Assignment getOpcodeAssignment_0() { return cOpcodeAssignment_0; }
  
  		//"fsub"
  		public Keyword getOpcodeFsubKeyword_0_0() { return cOpcodeFsubKeyword_0_0; }
  
  		//fastMathFlags+=FastMathFlag*
  		public Assignment getFastMathFlagsAssignment_1() { return cFastMathFlagsAssignment_1; }
  
  		//FastMathFlag
  		public RuleCall getFastMathFlagsFastMathFlagParserRuleCall_1_0() { return cFastMathFlagsFastMathFlagParserRuleCall_1_0; }
  
  		//type=Type
  		public Assignment getTypeAssignment_2() { return cTypeAssignment_2; }
  
  		//Type
  		public RuleCall getTypeTypeParserRuleCall_2_0() { return cTypeTypeParserRuleCall_2_0; }
  
  		//op1=ValueRef
  		public Assignment getOp1Assignment_3() { return cOp1Assignment_3; }
  
  		//ValueRef
  		public RuleCall getOp1ValueRefParserRuleCall_3_0() { return cOp1ValueRefParserRuleCall_3_0; }
  
  		//","
  		public Keyword getCommaKeyword_4() { return cCommaKeyword_4; }
  
  		//op2=ValueRef
  		public Assignment getOp2Assignment_5() { return cOp2Assignment_5; }
  
  		//ValueRef
  		public RuleCall getOp2ValueRefParserRuleCall_5_0() { return cOp2ValueRefParserRuleCall_5_0; }
  	}
  
  	public class Instruction_mulElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Instruction_mul");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cOpcodeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final Keyword cOpcodeMulKeyword_0_0 = (Keyword)cOpcodeAssignment_0.eContents().get(0);
  		private final UnorderedGroup cUnorderedGroup_1 = (UnorderedGroup)cGroup.eContents().get(1);
  		private final Keyword cNuwKeyword_1_0 = (Keyword)cUnorderedGroup_1.eContents().get(0);
  		private final Keyword cNswKeyword_1_1 = (Keyword)cUnorderedGroup_1.eContents().get(1);
  		private final Assignment cTypeAssignment_2 = (Assignment)cGroup.eContents().get(2);
  		private final RuleCall cTypeTypeParserRuleCall_2_0 = (RuleCall)cTypeAssignment_2.eContents().get(0);
  		private final Assignment cOp1Assignment_3 = (Assignment)cGroup.eContents().get(3);
  		private final RuleCall cOp1ValueRefParserRuleCall_3_0 = (RuleCall)cOp1Assignment_3.eContents().get(0);
  		private final Keyword cCommaKeyword_4 = (Keyword)cGroup.eContents().get(4);
  		private final Assignment cOp2Assignment_5 = (Assignment)cGroup.eContents().get(5);
  		private final RuleCall cOp2ValueRefParserRuleCall_5_0 = (RuleCall)cOp2Assignment_5.eContents().get(0);
  		
  		//// <result> = mul <ty> <op1>, <op2>          ; yields {ty}:result
  		//
  		//// <result> = mul nuw <ty> <op1>, <op2>      ; yields {ty}:result
  		//
  		//// <result> = mul nsw <ty> <op1>, <op2>      ; yields {ty}:result
  		//
  		//// <result> = mul nuw nsw <ty> <op1>, <op2>  ; yields {ty}:result
  		//
  		//Instruction_mul:
  		//
  		//	opcode="mul" ("nuw"? & "nsw"?) type=Type op1=ValueRef "," op2=ValueRef;
  		public ParserRule getRule() { return rule; }
  
  		//opcode="mul" ("nuw"? & "nsw"?) type=Type op1=ValueRef "," op2=ValueRef
  		public Group getGroup() { return cGroup; }
  
  		//opcode="mul"
  		public Assignment getOpcodeAssignment_0() { return cOpcodeAssignment_0; }
  
  		//"mul"
  		public Keyword getOpcodeMulKeyword_0_0() { return cOpcodeMulKeyword_0_0; }
  
  		//"nuw"? & "nsw"?
  		public UnorderedGroup getUnorderedGroup_1() { return cUnorderedGroup_1; }
  
  		//"nuw"?
  		public Keyword getNuwKeyword_1_0() { return cNuwKeyword_1_0; }
  
  		//"nsw"?
  		public Keyword getNswKeyword_1_1() { return cNswKeyword_1_1; }
  
  		//type=Type
  		public Assignment getTypeAssignment_2() { return cTypeAssignment_2; }
  
  		//Type
  		public RuleCall getTypeTypeParserRuleCall_2_0() { return cTypeTypeParserRuleCall_2_0; }
  
  		//op1=ValueRef
  		public Assignment getOp1Assignment_3() { return cOp1Assignment_3; }
  
  		//ValueRef
  		public RuleCall getOp1ValueRefParserRuleCall_3_0() { return cOp1ValueRefParserRuleCall_3_0; }
  
  		//","
  		public Keyword getCommaKeyword_4() { return cCommaKeyword_4; }
  
  		//op2=ValueRef
  		public Assignment getOp2Assignment_5() { return cOp2Assignment_5; }
  
  		//ValueRef
  		public RuleCall getOp2ValueRefParserRuleCall_5_0() { return cOp2ValueRefParserRuleCall_5_0; }
  	}
  
  	public class Instruction_fmulElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Instruction_fmul");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cOpcodeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final Keyword cOpcodeFmulKeyword_0_0 = (Keyword)cOpcodeAssignment_0.eContents().get(0);
  		private final Assignment cFastMathFlagsAssignment_1 = (Assignment)cGroup.eContents().get(1);
  		private final RuleCall cFastMathFlagsFastMathFlagParserRuleCall_1_0 = (RuleCall)cFastMathFlagsAssignment_1.eContents().get(0);
  		private final Assignment cTypeAssignment_2 = (Assignment)cGroup.eContents().get(2);
  		private final RuleCall cTypeTypeParserRuleCall_2_0 = (RuleCall)cTypeAssignment_2.eContents().get(0);
  		private final Assignment cOp1Assignment_3 = (Assignment)cGroup.eContents().get(3);
  		private final RuleCall cOp1ValueRefParserRuleCall_3_0 = (RuleCall)cOp1Assignment_3.eContents().get(0);
  		private final Keyword cCommaKeyword_4 = (Keyword)cGroup.eContents().get(4);
  		private final Assignment cOp2Assignment_5 = (Assignment)cGroup.eContents().get(5);
  		private final RuleCall cOp2ValueRefParserRuleCall_5_0 = (RuleCall)cOp2Assignment_5.eContents().get(0);
  		
  		//// <result> = fmul [fast-math flags]* <ty> <op1>, <op2>   ; yields {ty}:result
  		//
  		//Instruction_fmul:
  		//
  		//	opcode="fmul" fastMathFlags+=FastMathFlag* type=Type op1=ValueRef "," op2=ValueRef;
  		public ParserRule getRule() { return rule; }
  
  		//opcode="fmul" fastMathFlags+=FastMathFlag* type=Type op1=ValueRef "," op2=ValueRef
  		public Group getGroup() { return cGroup; }
  
  		//opcode="fmul"
  		public Assignment getOpcodeAssignment_0() { return cOpcodeAssignment_0; }
  
  		//"fmul"
  		public Keyword getOpcodeFmulKeyword_0_0() { return cOpcodeFmulKeyword_0_0; }
  
  		//fastMathFlags+=FastMathFlag*
  		public Assignment getFastMathFlagsAssignment_1() { return cFastMathFlagsAssignment_1; }
  
  		//FastMathFlag
  		public RuleCall getFastMathFlagsFastMathFlagParserRuleCall_1_0() { return cFastMathFlagsFastMathFlagParserRuleCall_1_0; }
  
  		//type=Type
  		public Assignment getTypeAssignment_2() { return cTypeAssignment_2; }
  
  		//Type
  		public RuleCall getTypeTypeParserRuleCall_2_0() { return cTypeTypeParserRuleCall_2_0; }
  
  		//op1=ValueRef
  		public Assignment getOp1Assignment_3() { return cOp1Assignment_3; }
  
  		//ValueRef
  		public RuleCall getOp1ValueRefParserRuleCall_3_0() { return cOp1ValueRefParserRuleCall_3_0; }
  
  		//","
  		public Keyword getCommaKeyword_4() { return cCommaKeyword_4; }
  
  		//op2=ValueRef
  		public Assignment getOp2Assignment_5() { return cOp2Assignment_5; }
  
  		//ValueRef
  		public RuleCall getOp2ValueRefParserRuleCall_5_0() { return cOp2ValueRefParserRuleCall_5_0; }
  	}
  
  	public class Instruction_udivElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Instruction_udiv");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cOpcodeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final Keyword cOpcodeUdivKeyword_0_0 = (Keyword)cOpcodeAssignment_0.eContents().get(0);
  		private final Keyword cExactKeyword_1 = (Keyword)cGroup.eContents().get(1);
  		private final Assignment cTypeAssignment_2 = (Assignment)cGroup.eContents().get(2);
  		private final RuleCall cTypeTypeParserRuleCall_2_0 = (RuleCall)cTypeAssignment_2.eContents().get(0);
  		private final Assignment cOp1Assignment_3 = (Assignment)cGroup.eContents().get(3);
  		private final RuleCall cOp1ValueRefParserRuleCall_3_0 = (RuleCall)cOp1Assignment_3.eContents().get(0);
  		private final Keyword cCommaKeyword_4 = (Keyword)cGroup.eContents().get(4);
  		private final Assignment cOp2Assignment_5 = (Assignment)cGroup.eContents().get(5);
  		private final RuleCall cOp2ValueRefParserRuleCall_5_0 = (RuleCall)cOp2Assignment_5.eContents().get(0);
  		
  		//// <result> = udiv <ty> <op1>, <op2>         ; yields {ty}:result
  		//
  		//// <result> = udiv exact <ty> <op1>, <op2>   ; yields {ty}:result
  		//
  		//Instruction_udiv:
  		//
  		//	opcode="udiv" "exact"? type=Type op1=ValueRef "," op2=ValueRef;
  		public ParserRule getRule() { return rule; }
  
  		//opcode="udiv" "exact"? type=Type op1=ValueRef "," op2=ValueRef
  		public Group getGroup() { return cGroup; }
  
  		//opcode="udiv"
  		public Assignment getOpcodeAssignment_0() { return cOpcodeAssignment_0; }
  
  		//"udiv"
  		public Keyword getOpcodeUdivKeyword_0_0() { return cOpcodeUdivKeyword_0_0; }
  
  		//"exact"?
  		public Keyword getExactKeyword_1() { return cExactKeyword_1; }
  
  		//type=Type
  		public Assignment getTypeAssignment_2() { return cTypeAssignment_2; }
  
  		//Type
  		public RuleCall getTypeTypeParserRuleCall_2_0() { return cTypeTypeParserRuleCall_2_0; }
  
  		//op1=ValueRef
  		public Assignment getOp1Assignment_3() { return cOp1Assignment_3; }
  
  		//ValueRef
  		public RuleCall getOp1ValueRefParserRuleCall_3_0() { return cOp1ValueRefParserRuleCall_3_0; }
  
  		//","
  		public Keyword getCommaKeyword_4() { return cCommaKeyword_4; }
  
  		//op2=ValueRef
  		public Assignment getOp2Assignment_5() { return cOp2Assignment_5; }
  
  		//ValueRef
  		public RuleCall getOp2ValueRefParserRuleCall_5_0() { return cOp2ValueRefParserRuleCall_5_0; }
  	}
  
  	public class Instruction_sdivElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Instruction_sdiv");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cOpcodeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final Keyword cOpcodeSdivKeyword_0_0 = (Keyword)cOpcodeAssignment_0.eContents().get(0);
  		private final Keyword cExactKeyword_1 = (Keyword)cGroup.eContents().get(1);
  		private final Assignment cTypeAssignment_2 = (Assignment)cGroup.eContents().get(2);
  		private final RuleCall cTypeTypeParserRuleCall_2_0 = (RuleCall)cTypeAssignment_2.eContents().get(0);
  		private final Assignment cOp1Assignment_3 = (Assignment)cGroup.eContents().get(3);
  		private final RuleCall cOp1ValueRefParserRuleCall_3_0 = (RuleCall)cOp1Assignment_3.eContents().get(0);
  		private final Keyword cCommaKeyword_4 = (Keyword)cGroup.eContents().get(4);
  		private final Assignment cOp2Assignment_5 = (Assignment)cGroup.eContents().get(5);
  		private final RuleCall cOp2ValueRefParserRuleCall_5_0 = (RuleCall)cOp2Assignment_5.eContents().get(0);
  		
  		//// <result> = sdiv <ty> <op1>, <op2>         ; yields {ty}:result
  		//
  		//// <result> = sdiv exact <ty> <op1>, <op2>   ; yields {ty}:result
  		//
  		//Instruction_sdiv:
  		//
  		//	opcode="sdiv" "exact"? type=Type op1=ValueRef "," op2=ValueRef;
  		public ParserRule getRule() { return rule; }
  
  		//opcode="sdiv" "exact"? type=Type op1=ValueRef "," op2=ValueRef
  		public Group getGroup() { return cGroup; }
  
  		//opcode="sdiv"
  		public Assignment getOpcodeAssignment_0() { return cOpcodeAssignment_0; }
  
  		//"sdiv"
  		public Keyword getOpcodeSdivKeyword_0_0() { return cOpcodeSdivKeyword_0_0; }
  
  		//"exact"?
  		public Keyword getExactKeyword_1() { return cExactKeyword_1; }
  
  		//type=Type
  		public Assignment getTypeAssignment_2() { return cTypeAssignment_2; }
  
  		//Type
  		public RuleCall getTypeTypeParserRuleCall_2_0() { return cTypeTypeParserRuleCall_2_0; }
  
  		//op1=ValueRef
  		public Assignment getOp1Assignment_3() { return cOp1Assignment_3; }
  
  		//ValueRef
  		public RuleCall getOp1ValueRefParserRuleCall_3_0() { return cOp1ValueRefParserRuleCall_3_0; }
  
  		//","
  		public Keyword getCommaKeyword_4() { return cCommaKeyword_4; }
  
  		//op2=ValueRef
  		public Assignment getOp2Assignment_5() { return cOp2Assignment_5; }
  
  		//ValueRef
  		public RuleCall getOp2ValueRefParserRuleCall_5_0() { return cOp2ValueRefParserRuleCall_5_0; }
  	}
  
  	public class Instruction_fdivElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Instruction_fdiv");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cOpcodeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final Keyword cOpcodeFdivKeyword_0_0 = (Keyword)cOpcodeAssignment_0.eContents().get(0);
  		private final Assignment cFastMathFlagsAssignment_1 = (Assignment)cGroup.eContents().get(1);
  		private final RuleCall cFastMathFlagsFastMathFlagParserRuleCall_1_0 = (RuleCall)cFastMathFlagsAssignment_1.eContents().get(0);
  		private final Assignment cTypeAssignment_2 = (Assignment)cGroup.eContents().get(2);
  		private final RuleCall cTypeTypeParserRuleCall_2_0 = (RuleCall)cTypeAssignment_2.eContents().get(0);
  		private final Assignment cOp1Assignment_3 = (Assignment)cGroup.eContents().get(3);
  		private final RuleCall cOp1ValueRefParserRuleCall_3_0 = (RuleCall)cOp1Assignment_3.eContents().get(0);
  		private final Keyword cCommaKeyword_4 = (Keyword)cGroup.eContents().get(4);
  		private final Assignment cOp2Assignment_5 = (Assignment)cGroup.eContents().get(5);
  		private final RuleCall cOp2ValueRefParserRuleCall_5_0 = (RuleCall)cOp2Assignment_5.eContents().get(0);
  		
  		//// <result> = fdiv [fast-math flags]* <ty> <op1>, <op2>   ; yields {ty}:result
  		//
  		//Instruction_fdiv:
  		//
  		//	opcode="fdiv" fastMathFlags+=FastMathFlag* type=Type op1=ValueRef "," op2=ValueRef;
  		public ParserRule getRule() { return rule; }
  
  		//opcode="fdiv" fastMathFlags+=FastMathFlag* type=Type op1=ValueRef "," op2=ValueRef
  		public Group getGroup() { return cGroup; }
  
  		//opcode="fdiv"
  		public Assignment getOpcodeAssignment_0() { return cOpcodeAssignment_0; }
  
  		//"fdiv"
  		public Keyword getOpcodeFdivKeyword_0_0() { return cOpcodeFdivKeyword_0_0; }
  
  		//fastMathFlags+=FastMathFlag*
  		public Assignment getFastMathFlagsAssignment_1() { return cFastMathFlagsAssignment_1; }
  
  		//FastMathFlag
  		public RuleCall getFastMathFlagsFastMathFlagParserRuleCall_1_0() { return cFastMathFlagsFastMathFlagParserRuleCall_1_0; }
  
  		//type=Type
  		public Assignment getTypeAssignment_2() { return cTypeAssignment_2; }
  
  		//Type
  		public RuleCall getTypeTypeParserRuleCall_2_0() { return cTypeTypeParserRuleCall_2_0; }
  
  		//op1=ValueRef
  		public Assignment getOp1Assignment_3() { return cOp1Assignment_3; }
  
  		//ValueRef
  		public RuleCall getOp1ValueRefParserRuleCall_3_0() { return cOp1ValueRefParserRuleCall_3_0; }
  
  		//","
  		public Keyword getCommaKeyword_4() { return cCommaKeyword_4; }
  
  		//op2=ValueRef
  		public Assignment getOp2Assignment_5() { return cOp2Assignment_5; }
  
  		//ValueRef
  		public RuleCall getOp2ValueRefParserRuleCall_5_0() { return cOp2ValueRefParserRuleCall_5_0; }
  	}
  
  	public class Instruction_uremElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Instruction_urem");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cOpcodeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final Keyword cOpcodeUremKeyword_0_0 = (Keyword)cOpcodeAssignment_0.eContents().get(0);
  		private final Assignment cTypeAssignment_1 = (Assignment)cGroup.eContents().get(1);
  		private final RuleCall cTypeTypeParserRuleCall_1_0 = (RuleCall)cTypeAssignment_1.eContents().get(0);
  		private final Assignment cOp1Assignment_2 = (Assignment)cGroup.eContents().get(2);
  		private final RuleCall cOp1ValueRefParserRuleCall_2_0 = (RuleCall)cOp1Assignment_2.eContents().get(0);
  		private final Keyword cCommaKeyword_3 = (Keyword)cGroup.eContents().get(3);
  		private final Assignment cOp2Assignment_4 = (Assignment)cGroup.eContents().get(4);
  		private final RuleCall cOp2ValueRefParserRuleCall_4_0 = (RuleCall)cOp2Assignment_4.eContents().get(0);
  		
  		//// <result> = urem <ty> <op1>, <op2>   ; yields {ty}:result
  		//
  		//Instruction_urem:
  		//
  		//	opcode="urem" type=Type op1=ValueRef "," op2=ValueRef;
  		public ParserRule getRule() { return rule; }
  
  		//opcode="urem" type=Type op1=ValueRef "," op2=ValueRef
  		public Group getGroup() { return cGroup; }
  
  		//opcode="urem"
  		public Assignment getOpcodeAssignment_0() { return cOpcodeAssignment_0; }
  
  		//"urem"
  		public Keyword getOpcodeUremKeyword_0_0() { return cOpcodeUremKeyword_0_0; }
  
  		//type=Type
  		public Assignment getTypeAssignment_1() { return cTypeAssignment_1; }
  
  		//Type
  		public RuleCall getTypeTypeParserRuleCall_1_0() { return cTypeTypeParserRuleCall_1_0; }
  
  		//op1=ValueRef
  		public Assignment getOp1Assignment_2() { return cOp1Assignment_2; }
  
  		//ValueRef
  		public RuleCall getOp1ValueRefParserRuleCall_2_0() { return cOp1ValueRefParserRuleCall_2_0; }
  
  		//","
  		public Keyword getCommaKeyword_3() { return cCommaKeyword_3; }
  
  		//op2=ValueRef
  		public Assignment getOp2Assignment_4() { return cOp2Assignment_4; }
  
  		//ValueRef
  		public RuleCall getOp2ValueRefParserRuleCall_4_0() { return cOp2ValueRefParserRuleCall_4_0; }
  	}
  
  	public class Instruction_sremElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Instruction_srem");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cOpcodeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final Keyword cOpcodeSremKeyword_0_0 = (Keyword)cOpcodeAssignment_0.eContents().get(0);
  		private final Assignment cTypeAssignment_1 = (Assignment)cGroup.eContents().get(1);
  		private final RuleCall cTypeTypeParserRuleCall_1_0 = (RuleCall)cTypeAssignment_1.eContents().get(0);
  		private final Assignment cOp1Assignment_2 = (Assignment)cGroup.eContents().get(2);
  		private final RuleCall cOp1ValueRefParserRuleCall_2_0 = (RuleCall)cOp1Assignment_2.eContents().get(0);
  		private final Keyword cCommaKeyword_3 = (Keyword)cGroup.eContents().get(3);
  		private final Assignment cOp2Assignment_4 = (Assignment)cGroup.eContents().get(4);
  		private final RuleCall cOp2ValueRefParserRuleCall_4_0 = (RuleCall)cOp2Assignment_4.eContents().get(0);
  		
  		//// <result> = srem <ty> <op1>, <op2>   ; yields {ty}:result
  		//
  		//Instruction_srem:
  		//
  		//	opcode="srem" type=Type op1=ValueRef "," op2=ValueRef;
  		public ParserRule getRule() { return rule; }
  
  		//opcode="srem" type=Type op1=ValueRef "," op2=ValueRef
  		public Group getGroup() { return cGroup; }
  
  		//opcode="srem"
  		public Assignment getOpcodeAssignment_0() { return cOpcodeAssignment_0; }
  
  		//"srem"
  		public Keyword getOpcodeSremKeyword_0_0() { return cOpcodeSremKeyword_0_0; }
  
  		//type=Type
  		public Assignment getTypeAssignment_1() { return cTypeAssignment_1; }
  
  		//Type
  		public RuleCall getTypeTypeParserRuleCall_1_0() { return cTypeTypeParserRuleCall_1_0; }
  
  		//op1=ValueRef
  		public Assignment getOp1Assignment_2() { return cOp1Assignment_2; }
  
  		//ValueRef
  		public RuleCall getOp1ValueRefParserRuleCall_2_0() { return cOp1ValueRefParserRuleCall_2_0; }
  
  		//","
  		public Keyword getCommaKeyword_3() { return cCommaKeyword_3; }
  
  		//op2=ValueRef
  		public Assignment getOp2Assignment_4() { return cOp2Assignment_4; }
  
  		//ValueRef
  		public RuleCall getOp2ValueRefParserRuleCall_4_0() { return cOp2ValueRefParserRuleCall_4_0; }
  	}
  
  	public class Instruction_fremElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Instruction_frem");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cOpcodeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final Keyword cOpcodeFremKeyword_0_0 = (Keyword)cOpcodeAssignment_0.eContents().get(0);
  		private final Assignment cTypeAssignment_1 = (Assignment)cGroup.eContents().get(1);
  		private final RuleCall cTypeTypeParserRuleCall_1_0 = (RuleCall)cTypeAssignment_1.eContents().get(0);
  		private final Assignment cOp1Assignment_2 = (Assignment)cGroup.eContents().get(2);
  		private final RuleCall cOp1ValueRefParserRuleCall_2_0 = (RuleCall)cOp1Assignment_2.eContents().get(0);
  		private final Keyword cCommaKeyword_3 = (Keyword)cGroup.eContents().get(3);
  		private final Assignment cOp2Assignment_4 = (Assignment)cGroup.eContents().get(4);
  		private final RuleCall cOp2ValueRefParserRuleCall_4_0 = (RuleCall)cOp2Assignment_4.eContents().get(0);
  		
  		//// <result> = frem <ty> <op1>, <op2>   ; yields {ty}:result
  		//
  		//Instruction_frem:
  		//
  		//	opcode="frem" type=Type op1=ValueRef "," op2=ValueRef;
  		public ParserRule getRule() { return rule; }
  
  		//opcode="frem" type=Type op1=ValueRef "," op2=ValueRef
  		public Group getGroup() { return cGroup; }
  
  		//opcode="frem"
  		public Assignment getOpcodeAssignment_0() { return cOpcodeAssignment_0; }
  
  		//"frem"
  		public Keyword getOpcodeFremKeyword_0_0() { return cOpcodeFremKeyword_0_0; }
  
  		//type=Type
  		public Assignment getTypeAssignment_1() { return cTypeAssignment_1; }
  
  		//Type
  		public RuleCall getTypeTypeParserRuleCall_1_0() { return cTypeTypeParserRuleCall_1_0; }
  
  		//op1=ValueRef
  		public Assignment getOp1Assignment_2() { return cOp1Assignment_2; }
  
  		//ValueRef
  		public RuleCall getOp1ValueRefParserRuleCall_2_0() { return cOp1ValueRefParserRuleCall_2_0; }
  
  		//","
  		public Keyword getCommaKeyword_3() { return cCommaKeyword_3; }
  
  		//op2=ValueRef
  		public Assignment getOp2Assignment_4() { return cOp2Assignment_4; }
  
  		//ValueRef
  		public RuleCall getOp2ValueRefParserRuleCall_4_0() { return cOp2ValueRefParserRuleCall_4_0; }
  	}
  
  	public class BitwiseBinaryInstructionElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "BitwiseBinaryInstruction");
  		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
  		private final RuleCall cInstruction_shlParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
  		private final RuleCall cInstruction_lshrParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
  		private final RuleCall cInstruction_ashrParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
  		private final RuleCall cInstruction_andParserRuleCall_3 = (RuleCall)cAlternatives.eContents().get(3);
  		private final RuleCall cInstruction_orParserRuleCall_4 = (RuleCall)cAlternatives.eContents().get(4);
  		private final RuleCall cInstruction_xorParserRuleCall_5 = (RuleCall)cAlternatives.eContents().get(5);
  		
  		//BitwiseBinaryInstruction:
  		//
  		//	Instruction_shl | Instruction_lshr | Instruction_ashr | Instruction_and | Instruction_or | Instruction_xor;
  		public ParserRule getRule() { return rule; }
  
  		//Instruction_shl | Instruction_lshr | Instruction_ashr | Instruction_and | Instruction_or | Instruction_xor
  		public Alternatives getAlternatives() { return cAlternatives; }
  
  		//Instruction_shl
  		public RuleCall getInstruction_shlParserRuleCall_0() { return cInstruction_shlParserRuleCall_0; }
  
  		//Instruction_lshr
  		public RuleCall getInstruction_lshrParserRuleCall_1() { return cInstruction_lshrParserRuleCall_1; }
  
  		//Instruction_ashr
  		public RuleCall getInstruction_ashrParserRuleCall_2() { return cInstruction_ashrParserRuleCall_2; }
  
  		//Instruction_and
  		public RuleCall getInstruction_andParserRuleCall_3() { return cInstruction_andParserRuleCall_3; }
  
  		//Instruction_or
  		public RuleCall getInstruction_orParserRuleCall_4() { return cInstruction_orParserRuleCall_4; }
  
  		//Instruction_xor
  		public RuleCall getInstruction_xorParserRuleCall_5() { return cInstruction_xorParserRuleCall_5; }
  	}
  
  	public class Instruction_shlElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Instruction_shl");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cOpcodeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final Keyword cOpcodeShlKeyword_0_0 = (Keyword)cOpcodeAssignment_0.eContents().get(0);
  		private final UnorderedGroup cUnorderedGroup_1 = (UnorderedGroup)cGroup.eContents().get(1);
  		private final Keyword cNuwKeyword_1_0 = (Keyword)cUnorderedGroup_1.eContents().get(0);
  		private final Keyword cNswKeyword_1_1 = (Keyword)cUnorderedGroup_1.eContents().get(1);
  		private final Assignment cTypeAssignment_2 = (Assignment)cGroup.eContents().get(2);
  		private final RuleCall cTypeTypeParserRuleCall_2_0 = (RuleCall)cTypeAssignment_2.eContents().get(0);
  		private final Assignment cOp1Assignment_3 = (Assignment)cGroup.eContents().get(3);
  		private final RuleCall cOp1ValueRefParserRuleCall_3_0 = (RuleCall)cOp1Assignment_3.eContents().get(0);
  		private final Keyword cCommaKeyword_4 = (Keyword)cGroup.eContents().get(4);
  		private final Assignment cOp2Assignment_5 = (Assignment)cGroup.eContents().get(5);
  		private final RuleCall cOp2ValueRefParserRuleCall_5_0 = (RuleCall)cOp2Assignment_5.eContents().get(0);
  		
  		//// <result> = shl <ty> <op1>, <op2>           ; yields {ty}:result
  		//
  		//// <result> = shl nuw <ty> <op1>, <op2>       ; yields {ty}:result
  		//
  		//// <result> = shl nsw <ty> <op1>, <op2>       ; yields {ty}:result
  		//
  		//// <result> = shl nuw nsw <ty> <op1>, <op2>   ; yields {ty}:result
  		//
  		//Instruction_shl:
  		//
  		//	opcode="shl" ("nuw"? & "nsw"?) type=Type op1=ValueRef "," op2=ValueRef;
  		public ParserRule getRule() { return rule; }
  
  		//opcode="shl" ("nuw"? & "nsw"?) type=Type op1=ValueRef "," op2=ValueRef
  		public Group getGroup() { return cGroup; }
  
  		//opcode="shl"
  		public Assignment getOpcodeAssignment_0() { return cOpcodeAssignment_0; }
  
  		//"shl"
  		public Keyword getOpcodeShlKeyword_0_0() { return cOpcodeShlKeyword_0_0; }
  
  		//"nuw"? & "nsw"?
  		public UnorderedGroup getUnorderedGroup_1() { return cUnorderedGroup_1; }
  
  		//"nuw"?
  		public Keyword getNuwKeyword_1_0() { return cNuwKeyword_1_0; }
  
  		//"nsw"?
  		public Keyword getNswKeyword_1_1() { return cNswKeyword_1_1; }
  
  		//type=Type
  		public Assignment getTypeAssignment_2() { return cTypeAssignment_2; }
  
  		//Type
  		public RuleCall getTypeTypeParserRuleCall_2_0() { return cTypeTypeParserRuleCall_2_0; }
  
  		//op1=ValueRef
  		public Assignment getOp1Assignment_3() { return cOp1Assignment_3; }
  
  		//ValueRef
  		public RuleCall getOp1ValueRefParserRuleCall_3_0() { return cOp1ValueRefParserRuleCall_3_0; }
  
  		//","
  		public Keyword getCommaKeyword_4() { return cCommaKeyword_4; }
  
  		//op2=ValueRef
  		public Assignment getOp2Assignment_5() { return cOp2Assignment_5; }
  
  		//ValueRef
  		public RuleCall getOp2ValueRefParserRuleCall_5_0() { return cOp2ValueRefParserRuleCall_5_0; }
  	}
  
  	public class Instruction_lshrElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Instruction_lshr");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cOpcodeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final Keyword cOpcodeLshrKeyword_0_0 = (Keyword)cOpcodeAssignment_0.eContents().get(0);
  		private final Keyword cExactKeyword_1 = (Keyword)cGroup.eContents().get(1);
  		private final Assignment cTypeAssignment_2 = (Assignment)cGroup.eContents().get(2);
  		private final RuleCall cTypeTypeParserRuleCall_2_0 = (RuleCall)cTypeAssignment_2.eContents().get(0);
  		private final Assignment cOp1Assignment_3 = (Assignment)cGroup.eContents().get(3);
  		private final RuleCall cOp1ValueRefParserRuleCall_3_0 = (RuleCall)cOp1Assignment_3.eContents().get(0);
  		private final Keyword cCommaKeyword_4 = (Keyword)cGroup.eContents().get(4);
  		private final Assignment cOp2Assignment_5 = (Assignment)cGroup.eContents().get(5);
  		private final RuleCall cOp2ValueRefParserRuleCall_5_0 = (RuleCall)cOp2Assignment_5.eContents().get(0);
  		
  		//// <result> = lshr <ty> <op1>, <op2>         ; yields {ty}:result
  		//
  		//// <result> = lshr exact <ty> <op1>, <op2>   ; yields {ty}:result
  		//
  		//Instruction_lshr:
  		//
  		//	opcode="lshr" "exact"? type=Type op1=ValueRef "," op2=ValueRef;
  		public ParserRule getRule() { return rule; }
  
  		//opcode="lshr" "exact"? type=Type op1=ValueRef "," op2=ValueRef
  		public Group getGroup() { return cGroup; }
  
  		//opcode="lshr"
  		public Assignment getOpcodeAssignment_0() { return cOpcodeAssignment_0; }
  
  		//"lshr"
  		public Keyword getOpcodeLshrKeyword_0_0() { return cOpcodeLshrKeyword_0_0; }
  
  		//"exact"?
  		public Keyword getExactKeyword_1() { return cExactKeyword_1; }
  
  		//type=Type
  		public Assignment getTypeAssignment_2() { return cTypeAssignment_2; }
  
  		//Type
  		public RuleCall getTypeTypeParserRuleCall_2_0() { return cTypeTypeParserRuleCall_2_0; }
  
  		//op1=ValueRef
  		public Assignment getOp1Assignment_3() { return cOp1Assignment_3; }
  
  		//ValueRef
  		public RuleCall getOp1ValueRefParserRuleCall_3_0() { return cOp1ValueRefParserRuleCall_3_0; }
  
  		//","
  		public Keyword getCommaKeyword_4() { return cCommaKeyword_4; }
  
  		//op2=ValueRef
  		public Assignment getOp2Assignment_5() { return cOp2Assignment_5; }
  
  		//ValueRef
  		public RuleCall getOp2ValueRefParserRuleCall_5_0() { return cOp2ValueRefParserRuleCall_5_0; }
  	}
  
  	public class Instruction_ashrElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Instruction_ashr");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cOpcodeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final Keyword cOpcodeAshrKeyword_0_0 = (Keyword)cOpcodeAssignment_0.eContents().get(0);
  		private final Keyword cExactKeyword_1 = (Keyword)cGroup.eContents().get(1);
  		private final Assignment cTypeAssignment_2 = (Assignment)cGroup.eContents().get(2);
  		private final RuleCall cTypeTypeParserRuleCall_2_0 = (RuleCall)cTypeAssignment_2.eContents().get(0);
  		private final Assignment cOp1Assignment_3 = (Assignment)cGroup.eContents().get(3);
  		private final RuleCall cOp1ValueRefParserRuleCall_3_0 = (RuleCall)cOp1Assignment_3.eContents().get(0);
  		private final Keyword cCommaKeyword_4 = (Keyword)cGroup.eContents().get(4);
  		private final Assignment cOp2Assignment_5 = (Assignment)cGroup.eContents().get(5);
  		private final RuleCall cOp2ValueRefParserRuleCall_5_0 = (RuleCall)cOp2Assignment_5.eContents().get(0);
  		
  		//// <result> = ashr <ty> <op1>, <op2>         ; yields {ty}:result
  		//
  		//// <result> = ashr exact <ty> <op1>, <op2>   ; yields {ty}:result
  		//
  		//Instruction_ashr:
  		//
  		//	opcode="ashr" "exact"? type=Type op1=ValueRef "," op2=ValueRef;
  		public ParserRule getRule() { return rule; }
  
  		//opcode="ashr" "exact"? type=Type op1=ValueRef "," op2=ValueRef
  		public Group getGroup() { return cGroup; }
  
  		//opcode="ashr"
  		public Assignment getOpcodeAssignment_0() { return cOpcodeAssignment_0; }
  
  		//"ashr"
  		public Keyword getOpcodeAshrKeyword_0_0() { return cOpcodeAshrKeyword_0_0; }
  
  		//"exact"?
  		public Keyword getExactKeyword_1() { return cExactKeyword_1; }
  
  		//type=Type
  		public Assignment getTypeAssignment_2() { return cTypeAssignment_2; }
  
  		//Type
  		public RuleCall getTypeTypeParserRuleCall_2_0() { return cTypeTypeParserRuleCall_2_0; }
  
  		//op1=ValueRef
  		public Assignment getOp1Assignment_3() { return cOp1Assignment_3; }
  
  		//ValueRef
  		public RuleCall getOp1ValueRefParserRuleCall_3_0() { return cOp1ValueRefParserRuleCall_3_0; }
  
  		//","
  		public Keyword getCommaKeyword_4() { return cCommaKeyword_4; }
  
  		//op2=ValueRef
  		public Assignment getOp2Assignment_5() { return cOp2Assignment_5; }
  
  		//ValueRef
  		public RuleCall getOp2ValueRefParserRuleCall_5_0() { return cOp2ValueRefParserRuleCall_5_0; }
  	}
  
  	public class Instruction_andElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Instruction_and");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cOpcodeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final Keyword cOpcodeAndKeyword_0_0 = (Keyword)cOpcodeAssignment_0.eContents().get(0);
  		private final Assignment cTypeAssignment_1 = (Assignment)cGroup.eContents().get(1);
  		private final RuleCall cTypeTypeParserRuleCall_1_0 = (RuleCall)cTypeAssignment_1.eContents().get(0);
  		private final Assignment cOp1Assignment_2 = (Assignment)cGroup.eContents().get(2);
  		private final RuleCall cOp1ValueRefParserRuleCall_2_0 = (RuleCall)cOp1Assignment_2.eContents().get(0);
  		private final Keyword cCommaKeyword_3 = (Keyword)cGroup.eContents().get(3);
  		private final Assignment cOp2Assignment_4 = (Assignment)cGroup.eContents().get(4);
  		private final RuleCall cOp2ValueRefParserRuleCall_4_0 = (RuleCall)cOp2Assignment_4.eContents().get(0);
  		
  		//// <result> = and <ty> <op1>, <op2>   ; yields {ty}:result
  		//
  		//Instruction_and:
  		//
  		//	opcode="and" type=Type op1=ValueRef "," op2=ValueRef;
  		public ParserRule getRule() { return rule; }
  
  		//opcode="and" type=Type op1=ValueRef "," op2=ValueRef
  		public Group getGroup() { return cGroup; }
  
  		//opcode="and"
  		public Assignment getOpcodeAssignment_0() { return cOpcodeAssignment_0; }
  
  		//"and"
  		public Keyword getOpcodeAndKeyword_0_0() { return cOpcodeAndKeyword_0_0; }
  
  		//type=Type
  		public Assignment getTypeAssignment_1() { return cTypeAssignment_1; }
  
  		//Type
  		public RuleCall getTypeTypeParserRuleCall_1_0() { return cTypeTypeParserRuleCall_1_0; }
  
  		//op1=ValueRef
  		public Assignment getOp1Assignment_2() { return cOp1Assignment_2; }
  
  		//ValueRef
  		public RuleCall getOp1ValueRefParserRuleCall_2_0() { return cOp1ValueRefParserRuleCall_2_0; }
  
  		//","
  		public Keyword getCommaKeyword_3() { return cCommaKeyword_3; }
  
  		//op2=ValueRef
  		public Assignment getOp2Assignment_4() { return cOp2Assignment_4; }
  
  		//ValueRef
  		public RuleCall getOp2ValueRefParserRuleCall_4_0() { return cOp2ValueRefParserRuleCall_4_0; }
  	}
  
  	public class Instruction_orElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Instruction_or");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cOpcodeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final Keyword cOpcodeOrKeyword_0_0 = (Keyword)cOpcodeAssignment_0.eContents().get(0);
  		private final Assignment cTypeAssignment_1 = (Assignment)cGroup.eContents().get(1);
  		private final RuleCall cTypeTypeParserRuleCall_1_0 = (RuleCall)cTypeAssignment_1.eContents().get(0);
  		private final Assignment cOp1Assignment_2 = (Assignment)cGroup.eContents().get(2);
  		private final RuleCall cOp1ValueRefParserRuleCall_2_0 = (RuleCall)cOp1Assignment_2.eContents().get(0);
  		private final Keyword cCommaKeyword_3 = (Keyword)cGroup.eContents().get(3);
  		private final Assignment cOp2Assignment_4 = (Assignment)cGroup.eContents().get(4);
  		private final RuleCall cOp2ValueRefParserRuleCall_4_0 = (RuleCall)cOp2Assignment_4.eContents().get(0);
  		
  		//// <result> = or <ty> <op1>, <op2>   ; yields {ty}:result
  		//
  		//Instruction_or:
  		//
  		//	opcode="or" type=Type op1=ValueRef "," op2=ValueRef;
  		public ParserRule getRule() { return rule; }
  
  		//opcode="or" type=Type op1=ValueRef "," op2=ValueRef
  		public Group getGroup() { return cGroup; }
  
  		//opcode="or"
  		public Assignment getOpcodeAssignment_0() { return cOpcodeAssignment_0; }
  
  		//"or"
  		public Keyword getOpcodeOrKeyword_0_0() { return cOpcodeOrKeyword_0_0; }
  
  		//type=Type
  		public Assignment getTypeAssignment_1() { return cTypeAssignment_1; }
  
  		//Type
  		public RuleCall getTypeTypeParserRuleCall_1_0() { return cTypeTypeParserRuleCall_1_0; }
  
  		//op1=ValueRef
  		public Assignment getOp1Assignment_2() { return cOp1Assignment_2; }
  
  		//ValueRef
  		public RuleCall getOp1ValueRefParserRuleCall_2_0() { return cOp1ValueRefParserRuleCall_2_0; }
  
  		//","
  		public Keyword getCommaKeyword_3() { return cCommaKeyword_3; }
  
  		//op2=ValueRef
  		public Assignment getOp2Assignment_4() { return cOp2Assignment_4; }
  
  		//ValueRef
  		public RuleCall getOp2ValueRefParserRuleCall_4_0() { return cOp2ValueRefParserRuleCall_4_0; }
  	}
  
  	public class Instruction_xorElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Instruction_xor");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cOpcodeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final Keyword cOpcodeXorKeyword_0_0 = (Keyword)cOpcodeAssignment_0.eContents().get(0);
  		private final Assignment cTypeAssignment_1 = (Assignment)cGroup.eContents().get(1);
  		private final RuleCall cTypeTypeParserRuleCall_1_0 = (RuleCall)cTypeAssignment_1.eContents().get(0);
  		private final Assignment cOp1Assignment_2 = (Assignment)cGroup.eContents().get(2);
  		private final RuleCall cOp1ValueRefParserRuleCall_2_0 = (RuleCall)cOp1Assignment_2.eContents().get(0);
  		private final Keyword cCommaKeyword_3 = (Keyword)cGroup.eContents().get(3);
  		private final Assignment cOp2Assignment_4 = (Assignment)cGroup.eContents().get(4);
  		private final RuleCall cOp2ValueRefParserRuleCall_4_0 = (RuleCall)cOp2Assignment_4.eContents().get(0);
  		
  		//// <result> = xor <ty> <op1>, <op2>   ; yields {ty}:result
  		//
  		//Instruction_xor:
  		//
  		//	opcode="xor" type=Type op1=ValueRef "," op2=ValueRef;
  		public ParserRule getRule() { return rule; }
  
  		//opcode="xor" type=Type op1=ValueRef "," op2=ValueRef
  		public Group getGroup() { return cGroup; }
  
  		//opcode="xor"
  		public Assignment getOpcodeAssignment_0() { return cOpcodeAssignment_0; }
  
  		//"xor"
  		public Keyword getOpcodeXorKeyword_0_0() { return cOpcodeXorKeyword_0_0; }
  
  		//type=Type
  		public Assignment getTypeAssignment_1() { return cTypeAssignment_1; }
  
  		//Type
  		public RuleCall getTypeTypeParserRuleCall_1_0() { return cTypeTypeParserRuleCall_1_0; }
  
  		//op1=ValueRef
  		public Assignment getOp1Assignment_2() { return cOp1Assignment_2; }
  
  		//ValueRef
  		public RuleCall getOp1ValueRefParserRuleCall_2_0() { return cOp1ValueRefParserRuleCall_2_0; }
  
  		//","
  		public Keyword getCommaKeyword_3() { return cCommaKeyword_3; }
  
  		//op2=ValueRef
  		public Assignment getOp2Assignment_4() { return cOp2Assignment_4; }
  
  		//ValueRef
  		public RuleCall getOp2ValueRefParserRuleCall_4_0() { return cOp2ValueRefParserRuleCall_4_0; }
  	}
  
  	public class VectorInstructionsElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "VectorInstructions");
  		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
  		private final RuleCall cInstruction_extractelementParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
  		private final RuleCall cInstruction_insertelementParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
  		private final RuleCall cInstruction_shufflevectorParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
  		
  		//VectorInstructions:
  		//
  		//	Instruction_extractelement | Instruction_insertelement | Instruction_shufflevector;
  		public ParserRule getRule() { return rule; }
  
  		//Instruction_extractelement | Instruction_insertelement | Instruction_shufflevector
  		public Alternatives getAlternatives() { return cAlternatives; }
  
  		//Instruction_extractelement
  		public RuleCall getInstruction_extractelementParserRuleCall_0() { return cInstruction_extractelementParserRuleCall_0; }
  
  		//Instruction_insertelement
  		public RuleCall getInstruction_insertelementParserRuleCall_1() { return cInstruction_insertelementParserRuleCall_1; }
  
  		//Instruction_shufflevector
  		public RuleCall getInstruction_shufflevectorParserRuleCall_2() { return cInstruction_shufflevectorParserRuleCall_2; }
  	}
  
  	public class Instruction_extractelementElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Instruction_extractelement");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cOpcodeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final Keyword cOpcodeExtractelementKeyword_0_0 = (Keyword)cOpcodeAssignment_0.eContents().get(0);
  		private final Assignment cVectorAssignment_1 = (Assignment)cGroup.eContents().get(1);
  		private final RuleCall cVectorTypedValueParserRuleCall_1_0 = (RuleCall)cVectorAssignment_1.eContents().get(0);
  		private final Keyword cCommaKeyword_2 = (Keyword)cGroup.eContents().get(2);
  		private final Assignment cIndexAssignment_3 = (Assignment)cGroup.eContents().get(3);
  		private final RuleCall cIndexTypedValueParserRuleCall_3_0 = (RuleCall)cIndexAssignment_3.eContents().get(0);
  		
  		//// <result> = extractelement <n x <ty>> <val>, i32 <idx>    ; yields <ty>
  		//
  		//Instruction_extractelement:
  		//
  		//	opcode="extractelement" vector=TypedValue "," index=TypedValue;
  		public ParserRule getRule() { return rule; }
  
  		//opcode="extractelement" vector=TypedValue "," index=TypedValue
  		public Group getGroup() { return cGroup; }
  
  		//opcode="extractelement"
  		public Assignment getOpcodeAssignment_0() { return cOpcodeAssignment_0; }
  
  		//"extractelement"
  		public Keyword getOpcodeExtractelementKeyword_0_0() { return cOpcodeExtractelementKeyword_0_0; }
  
  		//vector=TypedValue
  		public Assignment getVectorAssignment_1() { return cVectorAssignment_1; }
  
  		//TypedValue
  		public RuleCall getVectorTypedValueParserRuleCall_1_0() { return cVectorTypedValueParserRuleCall_1_0; }
  
  		//","
  		public Keyword getCommaKeyword_2() { return cCommaKeyword_2; }
  
  		//index=TypedValue
  		public Assignment getIndexAssignment_3() { return cIndexAssignment_3; }
  
  		//TypedValue
  		public RuleCall getIndexTypedValueParserRuleCall_3_0() { return cIndexTypedValueParserRuleCall_3_0; }
  	}
  
  	public class Instruction_insertelementElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Instruction_insertelement");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cOpcodeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final Keyword cOpcodeInsertelementKeyword_0_0 = (Keyword)cOpcodeAssignment_0.eContents().get(0);
  		private final Assignment cVectorAssignment_1 = (Assignment)cGroup.eContents().get(1);
  		private final RuleCall cVectorTypedValueParserRuleCall_1_0 = (RuleCall)cVectorAssignment_1.eContents().get(0);
  		private final Keyword cCommaKeyword_2 = (Keyword)cGroup.eContents().get(2);
  		private final Assignment cElementAssignment_3 = (Assignment)cGroup.eContents().get(3);
  		private final RuleCall cElementTypedValueParserRuleCall_3_0 = (RuleCall)cElementAssignment_3.eContents().get(0);
  		private final Keyword cCommaKeyword_4 = (Keyword)cGroup.eContents().get(4);
  		private final Assignment cIndexAssignment_5 = (Assignment)cGroup.eContents().get(5);
  		private final RuleCall cIndexTypedValueParserRuleCall_5_0 = (RuleCall)cIndexAssignment_5.eContents().get(0);
  		
  		//// <result> = insertelement <n x <ty>> <val>, <ty> <elt>, i32 <idx>    ; yields <n x <ty>>
  		//
  		//Instruction_insertelement:
  		//
  		//	opcode="insertelement" vector=TypedValue "," element=TypedValue "," index=TypedValue;
  		public ParserRule getRule() { return rule; }
  
  		//opcode="insertelement" vector=TypedValue "," element=TypedValue "," index=TypedValue
  		public Group getGroup() { return cGroup; }
  
  		//opcode="insertelement"
  		public Assignment getOpcodeAssignment_0() { return cOpcodeAssignment_0; }
  
  		//"insertelement"
  		public Keyword getOpcodeInsertelementKeyword_0_0() { return cOpcodeInsertelementKeyword_0_0; }
  
  		//vector=TypedValue
  		public Assignment getVectorAssignment_1() { return cVectorAssignment_1; }
  
  		//TypedValue
  		public RuleCall getVectorTypedValueParserRuleCall_1_0() { return cVectorTypedValueParserRuleCall_1_0; }
  
  		//","
  		public Keyword getCommaKeyword_2() { return cCommaKeyword_2; }
  
  		//element=TypedValue
  		public Assignment getElementAssignment_3() { return cElementAssignment_3; }
  
  		//TypedValue
  		public RuleCall getElementTypedValueParserRuleCall_3_0() { return cElementTypedValueParserRuleCall_3_0; }
  
  		//","
  		public Keyword getCommaKeyword_4() { return cCommaKeyword_4; }
  
  		//index=TypedValue
  		public Assignment getIndexAssignment_5() { return cIndexAssignment_5; }
  
  		//TypedValue
  		public RuleCall getIndexTypedValueParserRuleCall_5_0() { return cIndexTypedValueParserRuleCall_5_0; }
  	}
  
  	public class Instruction_shufflevectorElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Instruction_shufflevector");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cOpcodeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final Keyword cOpcodeShufflevectorKeyword_0_0 = (Keyword)cOpcodeAssignment_0.eContents().get(0);
  		private final Assignment cVector1Assignment_1 = (Assignment)cGroup.eContents().get(1);
  		private final RuleCall cVector1TypedValueParserRuleCall_1_0 = (RuleCall)cVector1Assignment_1.eContents().get(0);
  		private final Keyword cCommaKeyword_2 = (Keyword)cGroup.eContents().get(2);
  		private final Assignment cVector2Assignment_3 = (Assignment)cGroup.eContents().get(3);
  		private final RuleCall cVector2TypedValueParserRuleCall_3_0 = (RuleCall)cVector2Assignment_3.eContents().get(0);
  		private final Keyword cCommaKeyword_4 = (Keyword)cGroup.eContents().get(4);
  		private final Assignment cMaskAssignment_5 = (Assignment)cGroup.eContents().get(5);
  		private final RuleCall cMaskTypedValueParserRuleCall_5_0 = (RuleCall)cMaskAssignment_5.eContents().get(0);
  		
  		//// <result> = shufflevector <n x <ty>> <v1>, <n x <ty>> <v2>, <m x i32> <mask>    ; yields <m x <ty>>
  		//
  		//Instruction_shufflevector:
  		//
  		//	opcode="shufflevector" vector1=TypedValue "," vector2=TypedValue "," mask=TypedValue;
  		public ParserRule getRule() { return rule; }
  
  		//opcode="shufflevector" vector1=TypedValue "," vector2=TypedValue "," mask=TypedValue
  		public Group getGroup() { return cGroup; }
  
  		//opcode="shufflevector"
  		public Assignment getOpcodeAssignment_0() { return cOpcodeAssignment_0; }
  
  		//"shufflevector"
  		public Keyword getOpcodeShufflevectorKeyword_0_0() { return cOpcodeShufflevectorKeyword_0_0; }
  
  		//vector1=TypedValue
  		public Assignment getVector1Assignment_1() { return cVector1Assignment_1; }
  
  		//TypedValue
  		public RuleCall getVector1TypedValueParserRuleCall_1_0() { return cVector1TypedValueParserRuleCall_1_0; }
  
  		//","
  		public Keyword getCommaKeyword_2() { return cCommaKeyword_2; }
  
  		//vector2=TypedValue
  		public Assignment getVector2Assignment_3() { return cVector2Assignment_3; }
  
  		//TypedValue
  		public RuleCall getVector2TypedValueParserRuleCall_3_0() { return cVector2TypedValueParserRuleCall_3_0; }
  
  		//","
  		public Keyword getCommaKeyword_4() { return cCommaKeyword_4; }
  
  		//mask=TypedValue
  		public Assignment getMaskAssignment_5() { return cMaskAssignment_5; }
  
  		//TypedValue
  		public RuleCall getMaskTypedValueParserRuleCall_5_0() { return cMaskTypedValueParserRuleCall_5_0; }
  	}
  
  	public class AggregateInstructionElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "AggregateInstruction");
  		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
  		private final RuleCall cInstruction_extractvalueParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
  		private final RuleCall cInstruction_insertvalueParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
  		
  		//AggregateInstruction:
  		//
  		//	Instruction_extractvalue | Instruction_insertvalue;
  		public ParserRule getRule() { return rule; }
  
  		//Instruction_extractvalue | Instruction_insertvalue
  		public Alternatives getAlternatives() { return cAlternatives; }
  
  		//Instruction_extractvalue
  		public RuleCall getInstruction_extractvalueParserRuleCall_0() { return cInstruction_extractvalueParserRuleCall_0; }
  
  		//Instruction_insertvalue
  		public RuleCall getInstruction_insertvalueParserRuleCall_1() { return cInstruction_insertvalueParserRuleCall_1; }
  	}
  
  	public class Instruction_extractvalueElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Instruction_extractvalue");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cOpcodeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final Keyword cOpcodeExtractvalueKeyword_0_0 = (Keyword)cOpcodeAssignment_0.eContents().get(0);
  		private final Assignment cAggregateAssignment_1 = (Assignment)cGroup.eContents().get(1);
  		private final RuleCall cAggregateTypedValueParserRuleCall_1_0 = (RuleCall)cAggregateAssignment_1.eContents().get(0);
  		private final Group cGroup_2 = (Group)cGroup.eContents().get(2);
  		private final Keyword cCommaKeyword_2_0 = (Keyword)cGroup_2.eContents().get(0);
  		private final Assignment cIndicesAssignment_2_1 = (Assignment)cGroup_2.eContents().get(1);
  		private final RuleCall cIndicesConstantParserRuleCall_2_1_0 = (RuleCall)cIndicesAssignment_2_1.eContents().get(0);
  		
  		//// <result> = extractvalue <aggregate type> <val>, <idx>{, <idx>}*
  		//
  		//Instruction_extractvalue:
  		//
  		//	opcode="extractvalue" aggregate=TypedValue ("," indices+=Constant)+;
  		public ParserRule getRule() { return rule; }
  
  		//opcode="extractvalue" aggregate=TypedValue ("," indices+=Constant)+
  		public Group getGroup() { return cGroup; }
  
  		//opcode="extractvalue"
  		public Assignment getOpcodeAssignment_0() { return cOpcodeAssignment_0; }
  
  		//"extractvalue"
  		public Keyword getOpcodeExtractvalueKeyword_0_0() { return cOpcodeExtractvalueKeyword_0_0; }
  
  		//aggregate=TypedValue
  		public Assignment getAggregateAssignment_1() { return cAggregateAssignment_1; }
  
  		//TypedValue
  		public RuleCall getAggregateTypedValueParserRuleCall_1_0() { return cAggregateTypedValueParserRuleCall_1_0; }
  
  		//("," indices+=Constant)+
  		public Group getGroup_2() { return cGroup_2; }
  
  		//","
  		public Keyword getCommaKeyword_2_0() { return cCommaKeyword_2_0; }
  
  		//indices+=Constant
  		public Assignment getIndicesAssignment_2_1() { return cIndicesAssignment_2_1; }
  
  		//Constant
  		public RuleCall getIndicesConstantParserRuleCall_2_1_0() { return cIndicesConstantParserRuleCall_2_1_0; }
  	}
  
  	public class Instruction_insertvalueElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Instruction_insertvalue");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cOpcodeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final Keyword cOpcodeInsertvalueKeyword_0_0 = (Keyword)cOpcodeAssignment_0.eContents().get(0);
  		private final Assignment cAggregateAssignment_1 = (Assignment)cGroup.eContents().get(1);
  		private final RuleCall cAggregateTypedValueParserRuleCall_1_0 = (RuleCall)cAggregateAssignment_1.eContents().get(0);
  		private final Keyword cCommaKeyword_2 = (Keyword)cGroup.eContents().get(2);
  		private final Assignment cElementAssignment_3 = (Assignment)cGroup.eContents().get(3);
  		private final RuleCall cElementTypedValueParserRuleCall_3_0 = (RuleCall)cElementAssignment_3.eContents().get(0);
  		private final Group cGroup_4 = (Group)cGroup.eContents().get(4);
  		private final Keyword cCommaKeyword_4_0 = (Keyword)cGroup_4.eContents().get(0);
  		private final Assignment cIndicesAssignment_4_1 = (Assignment)cGroup_4.eContents().get(1);
  		private final RuleCall cIndicesConstantParserRuleCall_4_1_0 = (RuleCall)cIndicesAssignment_4_1.eContents().get(0);
  		
  		//// <result> = insertvalue <aggregate type> <val>, <ty> <elt>, <idx>{, <idx>}*    ; yields <aggregate type>
  		//
  		//Instruction_insertvalue:
  		//
  		//	opcode="insertvalue" aggregate=TypedValue "," element=TypedValue ("," indices+=Constant)+;
  		public ParserRule getRule() { return rule; }
  
  		//opcode="insertvalue" aggregate=TypedValue "," element=TypedValue ("," indices+=Constant)+
  		public Group getGroup() { return cGroup; }
  
  		//opcode="insertvalue"
  		public Assignment getOpcodeAssignment_0() { return cOpcodeAssignment_0; }
  
  		//"insertvalue"
  		public Keyword getOpcodeInsertvalueKeyword_0_0() { return cOpcodeInsertvalueKeyword_0_0; }
  
  		//aggregate=TypedValue
  		public Assignment getAggregateAssignment_1() { return cAggregateAssignment_1; }
  
  		//TypedValue
  		public RuleCall getAggregateTypedValueParserRuleCall_1_0() { return cAggregateTypedValueParserRuleCall_1_0; }
  
  		//","
  		public Keyword getCommaKeyword_2() { return cCommaKeyword_2; }
  
  		//element=TypedValue
  		public Assignment getElementAssignment_3() { return cElementAssignment_3; }
  
  		//TypedValue
  		public RuleCall getElementTypedValueParserRuleCall_3_0() { return cElementTypedValueParserRuleCall_3_0; }
  
  		//("," indices+=Constant)+
  		public Group getGroup_4() { return cGroup_4; }
  
  		//","
  		public Keyword getCommaKeyword_4_0() { return cCommaKeyword_4_0; }
  
  		//indices+=Constant
  		public Assignment getIndicesAssignment_4_1() { return cIndicesAssignment_4_1; }
  
  		//Constant
  		public RuleCall getIndicesConstantParserRuleCall_4_1_0() { return cIndicesConstantParserRuleCall_4_1_0; }
  	}
  
  	public class MemoryInstructionElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "MemoryInstruction");
  		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
  		private final RuleCall cInstruction_allocaParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
  		private final RuleCall cInstruction_loadParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
  		private final RuleCall cInstruction_storeParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
  		private final RuleCall cInstruction_fenceParserRuleCall_3 = (RuleCall)cAlternatives.eContents().get(3);
  		private final RuleCall cInstruction_cmpxchgParserRuleCall_4 = (RuleCall)cAlternatives.eContents().get(4);
  		private final RuleCall cInstruction_atomicrmwParserRuleCall_5 = (RuleCall)cAlternatives.eContents().get(5);
  		private final RuleCall cInstruction_getelementptrParserRuleCall_6 = (RuleCall)cAlternatives.eContents().get(6);
  		
  		//MemoryInstruction:
  		//
  		//	Instruction_alloca | Instruction_load | Instruction_store | Instruction_fence | Instruction_cmpxchg |
  		//
  		//	Instruction_atomicrmw | Instruction_getelementptr;
  		public ParserRule getRule() { return rule; }
  
  		//Instruction_alloca | Instruction_load | Instruction_store | Instruction_fence | Instruction_cmpxchg |
  		//
  		//Instruction_atomicrmw | Instruction_getelementptr
  		public Alternatives getAlternatives() { return cAlternatives; }
  
  		//Instruction_alloca
  		public RuleCall getInstruction_allocaParserRuleCall_0() { return cInstruction_allocaParserRuleCall_0; }
  
  		//Instruction_load
  		public RuleCall getInstruction_loadParserRuleCall_1() { return cInstruction_loadParserRuleCall_1; }
  
  		//Instruction_store
  		public RuleCall getInstruction_storeParserRuleCall_2() { return cInstruction_storeParserRuleCall_2; }
  
  		//Instruction_fence
  		public RuleCall getInstruction_fenceParserRuleCall_3() { return cInstruction_fenceParserRuleCall_3; }
  
  		//Instruction_cmpxchg
  		public RuleCall getInstruction_cmpxchgParserRuleCall_4() { return cInstruction_cmpxchgParserRuleCall_4; }
  
  		//Instruction_atomicrmw
  		public RuleCall getInstruction_atomicrmwParserRuleCall_5() { return cInstruction_atomicrmwParserRuleCall_5; }
  
  		//Instruction_getelementptr
  		public RuleCall getInstruction_getelementptrParserRuleCall_6() { return cInstruction_getelementptrParserRuleCall_6; }
  	}
  
  	public class Instruction_allocaElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Instruction_alloca");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cOpcodeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final Keyword cOpcodeAllocaKeyword_0_0 = (Keyword)cOpcodeAssignment_0.eContents().get(0);
  		private final Assignment cTypeAssignment_1 = (Assignment)cGroup.eContents().get(1);
  		private final RuleCall cTypeTypeParserRuleCall_1_0 = (RuleCall)cTypeAssignment_1.eContents().get(0);
  		private final Group cGroup_2 = (Group)cGroup.eContents().get(2);
  		private final Keyword cCommaKeyword_2_0 = (Keyword)cGroup_2.eContents().get(0);
  		private final Assignment cNumElementsAssignment_2_1 = (Assignment)cGroup_2.eContents().get(1);
  		private final RuleCall cNumElementsTypedValueParserRuleCall_2_1_0 = (RuleCall)cNumElementsAssignment_2_1.eContents().get(0);
  		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
  		private final Keyword cCommaKeyword_3_0 = (Keyword)cGroup_3.eContents().get(0);
  		private final Assignment cAlignmentAssignment_3_1 = (Assignment)cGroup_3.eContents().get(1);
  		private final RuleCall cAlignmentAlignParserRuleCall_3_1_0 = (RuleCall)cAlignmentAssignment_3_1.eContents().get(0);
  		
  		//// <result> = alloca <type>[, <ty> <NumElements>][, align <alignment>]     ; yields {type*}:result
  		//
  		//Instruction_alloca:
  		//
  		//	opcode="alloca" type=Type ("," numElements=TypedValue)? ("," alignment=Align)?;
  		public ParserRule getRule() { return rule; }
  
  		//opcode="alloca" type=Type ("," numElements=TypedValue)? ("," alignment=Align)?
  		public Group getGroup() { return cGroup; }
  
  		//opcode="alloca"
  		public Assignment getOpcodeAssignment_0() { return cOpcodeAssignment_0; }
  
  		//"alloca"
  		public Keyword getOpcodeAllocaKeyword_0_0() { return cOpcodeAllocaKeyword_0_0; }
  
  		//type=Type
  		public Assignment getTypeAssignment_1() { return cTypeAssignment_1; }
  
  		//Type
  		public RuleCall getTypeTypeParserRuleCall_1_0() { return cTypeTypeParserRuleCall_1_0; }
  
  		//("," numElements=TypedValue)?
  		public Group getGroup_2() { return cGroup_2; }
  
  		//","
  		public Keyword getCommaKeyword_2_0() { return cCommaKeyword_2_0; }
  
  		//numElements=TypedValue
  		public Assignment getNumElementsAssignment_2_1() { return cNumElementsAssignment_2_1; }
  
  		//TypedValue
  		public RuleCall getNumElementsTypedValueParserRuleCall_2_1_0() { return cNumElementsTypedValueParserRuleCall_2_1_0; }
  
  		//("," alignment=Align)?
  		public Group getGroup_3() { return cGroup_3; }
  
  		//","
  		public Keyword getCommaKeyword_3_0() { return cCommaKeyword_3_0; }
  
  		//alignment=Align
  		public Assignment getAlignmentAssignment_3_1() { return cAlignmentAssignment_3_1; }
  
  		//Align
  		public RuleCall getAlignmentAlignParserRuleCall_3_1_0() { return cAlignmentAlignParserRuleCall_3_1_0; }
  	}
  
  	public class Instruction_loadElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Instruction_load");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cOpcodeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final Keyword cOpcodeLoadKeyword_0_0 = (Keyword)cOpcodeAssignment_0.eContents().get(0);
  		private final Alternatives cAlternatives_1 = (Alternatives)cGroup.eContents().get(1);
  		private final Group cGroup_1_0 = (Group)cAlternatives_1.eContents().get(0);
  		private final Keyword cVolatileKeyword_1_0_0 = (Keyword)cGroup_1_0.eContents().get(0);
  		private final Assignment cPointerAssignment_1_0_1 = (Assignment)cGroup_1_0.eContents().get(1);
  		private final RuleCall cPointerTypedValueParserRuleCall_1_0_1_0 = (RuleCall)cPointerAssignment_1_0_1.eContents().get(0);
  		private final Group cGroup_1_0_2 = (Group)cGroup_1_0.eContents().get(2);
  		private final Keyword cCommaKeyword_1_0_2_0 = (Keyword)cGroup_1_0_2.eContents().get(0);
  		private final Assignment cAlignmentAssignment_1_0_2_1 = (Assignment)cGroup_1_0_2.eContents().get(1);
  		private final RuleCall cAlignmentAlignParserRuleCall_1_0_2_1_0 = (RuleCall)cAlignmentAssignment_1_0_2_1.eContents().get(0);
  		private final Group cGroup_1_0_3 = (Group)cGroup_1_0.eContents().get(3);
  		private final Keyword cCommaKeyword_1_0_3_0 = (Keyword)cGroup_1_0_3.eContents().get(0);
  		private final Keyword cNontemporalKeyword_1_0_3_1 = (Keyword)cGroup_1_0_3.eContents().get(1);
  		private final Assignment cNontemporalIndexAssignment_1_0_3_2 = (Assignment)cGroup_1_0_3.eContents().get(2);
  		private final RuleCall cNontemporalIndexMetadataRefParserRuleCall_1_0_3_2_0 = (RuleCall)cNontemporalIndexAssignment_1_0_3_2.eContents().get(0);
  		private final Group cGroup_1_0_4 = (Group)cGroup_1_0.eContents().get(4);
  		private final Keyword cCommaKeyword_1_0_4_0 = (Keyword)cGroup_1_0_4.eContents().get(0);
  		private final Keyword cInvariantLoadKeyword_1_0_4_1 = (Keyword)cGroup_1_0_4.eContents().get(1);
  		private final Assignment cInvariantLoadIndexAssignment_1_0_4_2 = (Assignment)cGroup_1_0_4.eContents().get(2);
  		private final RuleCall cInvariantLoadIndexMetadataRefParserRuleCall_1_0_4_2_0 = (RuleCall)cInvariantLoadIndexAssignment_1_0_4_2.eContents().get(0);
  		private final Group cGroup_1_1 = (Group)cAlternatives_1.eContents().get(1);
  		private final Keyword cAtomicKeyword_1_1_0 = (Keyword)cGroup_1_1.eContents().get(0);
  		private final Keyword cVolatileKeyword_1_1_1 = (Keyword)cGroup_1_1.eContents().get(1);
  		private final Assignment cPointerAssignment_1_1_2 = (Assignment)cGroup_1_1.eContents().get(2);
  		private final RuleCall cPointerTypedValueParserRuleCall_1_1_2_0 = (RuleCall)cPointerAssignment_1_1_2.eContents().get(0);
  		private final Keyword cSinglethreadKeyword_1_1_3 = (Keyword)cGroup_1_1.eContents().get(3);
  		private final Assignment cOrderingAssignment_1_1_4 = (Assignment)cGroup_1_1.eContents().get(4);
  		private final RuleCall cOrderingOrderingParserRuleCall_1_1_4_0 = (RuleCall)cOrderingAssignment_1_1_4.eContents().get(0);
  		private final Assignment cAlignmentAssignment_1_1_5 = (Assignment)cGroup_1_1.eContents().get(5);
  		private final RuleCall cAlignmentAlignParserRuleCall_1_1_5_0 = (RuleCall)cAlignmentAssignment_1_1_5.eContents().get(0);
  		
  		//// <result> = load [volatile] <ty>* <pointer>[, align <alignment>][, !nontemporal !<index>][, !invariant.load !<index>]
  		//
  		//// <result> = load atomic [volatile] <ty>* <pointer> [singlethread] <ordering>, align <alignment>
  		//
  		//// !<index> = !{ i32 1 }
  		//
  		//Instruction_load:
  		//
  		//	opcode="load" ("volatile"? pointer=TypedValue ("," alignment=Align)? ("," "!nontemporal"
  		//
  		//	nontemporalIndex=MetadataRef)? ("," "!invariant.load" invariantLoadIndex=MetadataRef)? | "atomic" "volatile"?
  		//
  		//	pointer=TypedValue "singlethread"? ordering=Ordering alignment=Align);
  		public ParserRule getRule() { return rule; }
  
  		//opcode="load" ("volatile"? pointer=TypedValue ("," alignment=Align)? ("," "!nontemporal" nontemporalIndex=MetadataRef)?
  		//
  		//("," "!invariant.load" invariantLoadIndex=MetadataRef)? | "atomic" "volatile"? pointer=TypedValue "singlethread"?
  		//
  		//ordering=Ordering alignment=Align)
  		public Group getGroup() { return cGroup; }
  
  		//opcode="load"
  		public Assignment getOpcodeAssignment_0() { return cOpcodeAssignment_0; }
  
  		//"load"
  		public Keyword getOpcodeLoadKeyword_0_0() { return cOpcodeLoadKeyword_0_0; }
  
  		//"volatile"? pointer=TypedValue ("," alignment=Align)? ("," "!nontemporal" nontemporalIndex=MetadataRef)? (","
  		//
  		//"!invariant.load" invariantLoadIndex=MetadataRef)? | "atomic" "volatile"? pointer=TypedValue "singlethread"?
  		//
  		//ordering=Ordering alignment=Align
  		public Alternatives getAlternatives_1() { return cAlternatives_1; }
  
  		//"volatile"? pointer=TypedValue ("," alignment=Align)? ("," "!nontemporal" nontemporalIndex=MetadataRef)? (","
  		//
  		//"!invariant.load" invariantLoadIndex=MetadataRef)?
  		public Group getGroup_1_0() { return cGroup_1_0; }
  
  		//"volatile"?
  		public Keyword getVolatileKeyword_1_0_0() { return cVolatileKeyword_1_0_0; }
  
  		//pointer=TypedValue
  		public Assignment getPointerAssignment_1_0_1() { return cPointerAssignment_1_0_1; }
  
  		//TypedValue
  		public RuleCall getPointerTypedValueParserRuleCall_1_0_1_0() { return cPointerTypedValueParserRuleCall_1_0_1_0; }
  
  		//("," alignment=Align)?
  		public Group getGroup_1_0_2() { return cGroup_1_0_2; }
  
  		//","
  		public Keyword getCommaKeyword_1_0_2_0() { return cCommaKeyword_1_0_2_0; }
  
  		//alignment=Align
  		public Assignment getAlignmentAssignment_1_0_2_1() { return cAlignmentAssignment_1_0_2_1; }
  
  		//Align
  		public RuleCall getAlignmentAlignParserRuleCall_1_0_2_1_0() { return cAlignmentAlignParserRuleCall_1_0_2_1_0; }
  
  		//("," "!nontemporal" nontemporalIndex=MetadataRef)?
  		public Group getGroup_1_0_3() { return cGroup_1_0_3; }
  
  		//","
  		public Keyword getCommaKeyword_1_0_3_0() { return cCommaKeyword_1_0_3_0; }
  
  		//"!nontemporal"
  		public Keyword getNontemporalKeyword_1_0_3_1() { return cNontemporalKeyword_1_0_3_1; }
  
  		//nontemporalIndex=MetadataRef
  		public Assignment getNontemporalIndexAssignment_1_0_3_2() { return cNontemporalIndexAssignment_1_0_3_2; }
  
  		//MetadataRef
  		public RuleCall getNontemporalIndexMetadataRefParserRuleCall_1_0_3_2_0() { return cNontemporalIndexMetadataRefParserRuleCall_1_0_3_2_0; }
  
  		//("," "!invariant.load" invariantLoadIndex=MetadataRef)?
  		public Group getGroup_1_0_4() { return cGroup_1_0_4; }
  
  		//","
  		public Keyword getCommaKeyword_1_0_4_0() { return cCommaKeyword_1_0_4_0; }
  
  		//"!invariant.load"
  		public Keyword getInvariantLoadKeyword_1_0_4_1() { return cInvariantLoadKeyword_1_0_4_1; }
  
  		//invariantLoadIndex=MetadataRef
  		public Assignment getInvariantLoadIndexAssignment_1_0_4_2() { return cInvariantLoadIndexAssignment_1_0_4_2; }
  
  		//MetadataRef
  		public RuleCall getInvariantLoadIndexMetadataRefParserRuleCall_1_0_4_2_0() { return cInvariantLoadIndexMetadataRefParserRuleCall_1_0_4_2_0; }
  
  		//"atomic" "volatile"? pointer=TypedValue "singlethread"? ordering=Ordering alignment=Align
  		public Group getGroup_1_1() { return cGroup_1_1; }
  
  		//"atomic"
  		public Keyword getAtomicKeyword_1_1_0() { return cAtomicKeyword_1_1_0; }
  
  		//"volatile"?
  		public Keyword getVolatileKeyword_1_1_1() { return cVolatileKeyword_1_1_1; }
  
  		//pointer=TypedValue
  		public Assignment getPointerAssignment_1_1_2() { return cPointerAssignment_1_1_2; }
  
  		//TypedValue
  		public RuleCall getPointerTypedValueParserRuleCall_1_1_2_0() { return cPointerTypedValueParserRuleCall_1_1_2_0; }
  
  		//"singlethread"?
  		public Keyword getSinglethreadKeyword_1_1_3() { return cSinglethreadKeyword_1_1_3; }
  
  		//ordering=Ordering
  		public Assignment getOrderingAssignment_1_1_4() { return cOrderingAssignment_1_1_4; }
  
  		//Ordering
  		public RuleCall getOrderingOrderingParserRuleCall_1_1_4_0() { return cOrderingOrderingParserRuleCall_1_1_4_0; }
  
  		//alignment=Align
  		public Assignment getAlignmentAssignment_1_1_5() { return cAlignmentAssignment_1_1_5; }
  
  		//Align
  		public RuleCall getAlignmentAlignParserRuleCall_1_1_5_0() { return cAlignmentAlignParserRuleCall_1_1_5_0; }
  	}
  
  	public class Instruction_storeElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Instruction_store");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cOpcodeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final Keyword cOpcodeStoreKeyword_0_0 = (Keyword)cOpcodeAssignment_0.eContents().get(0);
  		private final Alternatives cAlternatives_1 = (Alternatives)cGroup.eContents().get(1);
  		private final Group cGroup_1_0 = (Group)cAlternatives_1.eContents().get(0);
  		private final Keyword cVolatileKeyword_1_0_0 = (Keyword)cGroup_1_0.eContents().get(0);
  		private final Assignment cValueAssignment_1_0_1 = (Assignment)cGroup_1_0.eContents().get(1);
  		private final RuleCall cValueTypedValueParserRuleCall_1_0_1_0 = (RuleCall)cValueAssignment_1_0_1.eContents().get(0);
  		private final Keyword cCommaKeyword_1_0_2 = (Keyword)cGroup_1_0.eContents().get(2);
  		private final Assignment cPointerAssignment_1_0_3 = (Assignment)cGroup_1_0.eContents().get(3);
  		private final RuleCall cPointerTypedValueParserRuleCall_1_0_3_0 = (RuleCall)cPointerAssignment_1_0_3.eContents().get(0);
  		private final Group cGroup_1_0_4 = (Group)cGroup_1_0.eContents().get(4);
  		private final Keyword cCommaKeyword_1_0_4_0 = (Keyword)cGroup_1_0_4.eContents().get(0);
  		private final Assignment cAlignmentAssignment_1_0_4_1 = (Assignment)cGroup_1_0_4.eContents().get(1);
  		private final RuleCall cAlignmentAlignParserRuleCall_1_0_4_1_0 = (RuleCall)cAlignmentAssignment_1_0_4_1.eContents().get(0);
  		private final Group cGroup_1_0_5 = (Group)cGroup_1_0.eContents().get(5);
  		private final Keyword cCommaKeyword_1_0_5_0 = (Keyword)cGroup_1_0_5.eContents().get(0);
  		private final Keyword cNontemporalKeyword_1_0_5_1 = (Keyword)cGroup_1_0_5.eContents().get(1);
  		private final Assignment cNontemporalIndexAssignment_1_0_5_2 = (Assignment)cGroup_1_0_5.eContents().get(2);
  		private final RuleCall cNontemporalIndexMetadataRefParserRuleCall_1_0_5_2_0 = (RuleCall)cNontemporalIndexAssignment_1_0_5_2.eContents().get(0);
  		private final Group cGroup_1_1 = (Group)cAlternatives_1.eContents().get(1);
  		private final Keyword cAtomicKeyword_1_1_0 = (Keyword)cGroup_1_1.eContents().get(0);
  		private final Keyword cVolatileKeyword_1_1_1 = (Keyword)cGroup_1_1.eContents().get(1);
  		private final Assignment cValueAssignment_1_1_2 = (Assignment)cGroup_1_1.eContents().get(2);
  		private final RuleCall cValueTypedValueParserRuleCall_1_1_2_0 = (RuleCall)cValueAssignment_1_1_2.eContents().get(0);
  		private final Assignment cPointerAssignment_1_1_3 = (Assignment)cGroup_1_1.eContents().get(3);
  		private final RuleCall cPointerTypedValueParserRuleCall_1_1_3_0 = (RuleCall)cPointerAssignment_1_1_3.eContents().get(0);
  		private final Keyword cSinglethreadKeyword_1_1_4 = (Keyword)cGroup_1_1.eContents().get(4);
  		private final Assignment cOrderingAssignment_1_1_5 = (Assignment)cGroup_1_1.eContents().get(5);
  		private final RuleCall cOrderingOrderingParserRuleCall_1_1_5_0 = (RuleCall)cOrderingAssignment_1_1_5.eContents().get(0);
  		private final Assignment cAlignmentAssignment_1_1_6 = (Assignment)cGroup_1_1.eContents().get(6);
  		private final RuleCall cAlignmentAlignParserRuleCall_1_1_6_0 = (RuleCall)cAlignmentAssignment_1_1_6.eContents().get(0);
  		
  		//// store [volatile] <ty> <value>, <ty>* <pointer>[, align <alignment>][, !nontemporal !<index>]        ; yields {void}
  		//
  		//// store atomic [volatile] <ty> <value>, <ty>* <pointer> [singlethread] <ordering>, align <alignment>  ; yields {void}
  		//
  		//Instruction_store:
  		//
  		//	opcode="store" ("volatile"? value=TypedValue "," pointer=TypedValue ("," alignment=Align)? ("," "!nontemporal"
  		//
  		//	nontemporalIndex=MetadataRef)? | "atomic" "volatile"? value=TypedValue pointer=TypedValue "singlethread"?
  		//
  		//	ordering=Ordering alignment=Align);
  		public ParserRule getRule() { return rule; }
  
  		//opcode="store" ("volatile"? value=TypedValue "," pointer=TypedValue ("," alignment=Align)? ("," "!nontemporal"
  		//
  		//nontemporalIndex=MetadataRef)? | "atomic" "volatile"? value=TypedValue pointer=TypedValue "singlethread"?
  		//
  		//ordering=Ordering alignment=Align)
  		public Group getGroup() { return cGroup; }
  
  		//opcode="store"
  		public Assignment getOpcodeAssignment_0() { return cOpcodeAssignment_0; }
  
  		//"store"
  		public Keyword getOpcodeStoreKeyword_0_0() { return cOpcodeStoreKeyword_0_0; }
  
  		//"volatile"? value=TypedValue "," pointer=TypedValue ("," alignment=Align)? ("," "!nontemporal"
  		//
  		//nontemporalIndex=MetadataRef)? | "atomic" "volatile"? value=TypedValue pointer=TypedValue "singlethread"?
  		//
  		//ordering=Ordering alignment=Align
  		public Alternatives getAlternatives_1() { return cAlternatives_1; }
  
  		//"volatile"? value=TypedValue "," pointer=TypedValue ("," alignment=Align)? ("," "!nontemporal"
  		//
  		//nontemporalIndex=MetadataRef)?
  		public Group getGroup_1_0() { return cGroup_1_0; }
  
  		//"volatile"?
  		public Keyword getVolatileKeyword_1_0_0() { return cVolatileKeyword_1_0_0; }
  
  		//value=TypedValue
  		public Assignment getValueAssignment_1_0_1() { return cValueAssignment_1_0_1; }
  
  		//TypedValue
  		public RuleCall getValueTypedValueParserRuleCall_1_0_1_0() { return cValueTypedValueParserRuleCall_1_0_1_0; }
  
  		//","
  		public Keyword getCommaKeyword_1_0_2() { return cCommaKeyword_1_0_2; }
  
  		//pointer=TypedValue
  		public Assignment getPointerAssignment_1_0_3() { return cPointerAssignment_1_0_3; }
  
  		//TypedValue
  		public RuleCall getPointerTypedValueParserRuleCall_1_0_3_0() { return cPointerTypedValueParserRuleCall_1_0_3_0; }
  
  		//("," alignment=Align)?
  		public Group getGroup_1_0_4() { return cGroup_1_0_4; }
  
  		//","
  		public Keyword getCommaKeyword_1_0_4_0() { return cCommaKeyword_1_0_4_0; }
  
  		//alignment=Align
  		public Assignment getAlignmentAssignment_1_0_4_1() { return cAlignmentAssignment_1_0_4_1; }
  
  		//Align
  		public RuleCall getAlignmentAlignParserRuleCall_1_0_4_1_0() { return cAlignmentAlignParserRuleCall_1_0_4_1_0; }
  
  		//("," "!nontemporal" nontemporalIndex=MetadataRef)?
  		public Group getGroup_1_0_5() { return cGroup_1_0_5; }
  
  		//","
  		public Keyword getCommaKeyword_1_0_5_0() { return cCommaKeyword_1_0_5_0; }
  
  		//"!nontemporal"
  		public Keyword getNontemporalKeyword_1_0_5_1() { return cNontemporalKeyword_1_0_5_1; }
  
  		//nontemporalIndex=MetadataRef
  		public Assignment getNontemporalIndexAssignment_1_0_5_2() { return cNontemporalIndexAssignment_1_0_5_2; }
  
  		//MetadataRef
  		public RuleCall getNontemporalIndexMetadataRefParserRuleCall_1_0_5_2_0() { return cNontemporalIndexMetadataRefParserRuleCall_1_0_5_2_0; }
  
  		//"atomic" "volatile"? value=TypedValue pointer=TypedValue "singlethread"? ordering=Ordering alignment=Align
  		public Group getGroup_1_1() { return cGroup_1_1; }
  
  		//"atomic"
  		public Keyword getAtomicKeyword_1_1_0() { return cAtomicKeyword_1_1_0; }
  
  		//"volatile"?
  		public Keyword getVolatileKeyword_1_1_1() { return cVolatileKeyword_1_1_1; }
  
  		//value=TypedValue
  		public Assignment getValueAssignment_1_1_2() { return cValueAssignment_1_1_2; }
  
  		//TypedValue
  		public RuleCall getValueTypedValueParserRuleCall_1_1_2_0() { return cValueTypedValueParserRuleCall_1_1_2_0; }
  
  		//pointer=TypedValue
  		public Assignment getPointerAssignment_1_1_3() { return cPointerAssignment_1_1_3; }
  
  		//TypedValue
  		public RuleCall getPointerTypedValueParserRuleCall_1_1_3_0() { return cPointerTypedValueParserRuleCall_1_1_3_0; }
  
  		//"singlethread"?
  		public Keyword getSinglethreadKeyword_1_1_4() { return cSinglethreadKeyword_1_1_4; }
  
  		//ordering=Ordering
  		public Assignment getOrderingAssignment_1_1_5() { return cOrderingAssignment_1_1_5; }
  
  		//Ordering
  		public RuleCall getOrderingOrderingParserRuleCall_1_1_5_0() { return cOrderingOrderingParserRuleCall_1_1_5_0; }
  
  		//alignment=Align
  		public Assignment getAlignmentAssignment_1_1_6() { return cAlignmentAssignment_1_1_6; }
  
  		//Align
  		public RuleCall getAlignmentAlignParserRuleCall_1_1_6_0() { return cAlignmentAlignParserRuleCall_1_1_6_0; }
  	}
  
  	public class Instruction_fenceElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Instruction_fence");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cOpcodeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final Keyword cOpcodeFenceKeyword_0_0 = (Keyword)cOpcodeAssignment_0.eContents().get(0);
  		private final Keyword cSinglethreadKeyword_1 = (Keyword)cGroup.eContents().get(1);
  		private final Assignment cOrderingAssignment_2 = (Assignment)cGroup.eContents().get(2);
  		private final RuleCall cOrderingOrderingParserRuleCall_2_0 = (RuleCall)cOrderingAssignment_2.eContents().get(0);
  		
  		//// fence [singlethread] <ordering>                   ; yields {void}
  		//
  		//Instruction_fence:
  		//
  		//	opcode="fence" "singlethread"? ordering=Ordering;
  		public ParserRule getRule() { return rule; }
  
  		//opcode="fence" "singlethread"? ordering=Ordering
  		public Group getGroup() { return cGroup; }
  
  		//opcode="fence"
  		public Assignment getOpcodeAssignment_0() { return cOpcodeAssignment_0; }
  
  		//"fence"
  		public Keyword getOpcodeFenceKeyword_0_0() { return cOpcodeFenceKeyword_0_0; }
  
  		//"singlethread"?
  		public Keyword getSinglethreadKeyword_1() { return cSinglethreadKeyword_1; }
  
  		//ordering=Ordering
  		public Assignment getOrderingAssignment_2() { return cOrderingAssignment_2; }
  
  		//Ordering
  		public RuleCall getOrderingOrderingParserRuleCall_2_0() { return cOrderingOrderingParserRuleCall_2_0; }
  	}
  
  	public class Instruction_cmpxchgElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Instruction_cmpxchg");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cOpcodeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final Keyword cOpcodeCmpxchgKeyword_0_0 = (Keyword)cOpcodeAssignment_0.eContents().get(0);
  		private final Keyword cVolatileKeyword_1 = (Keyword)cGroup.eContents().get(1);
  		private final Assignment cPointerAssignment_2 = (Assignment)cGroup.eContents().get(2);
  		private final RuleCall cPointerTypedValueParserRuleCall_2_0 = (RuleCall)cPointerAssignment_2.eContents().get(0);
  		private final Keyword cCommaKeyword_3 = (Keyword)cGroup.eContents().get(3);
  		private final Assignment cComparedWithAssignment_4 = (Assignment)cGroup.eContents().get(4);
  		private final RuleCall cComparedWithTypedValueParserRuleCall_4_0 = (RuleCall)cComparedWithAssignment_4.eContents().get(0);
  		private final Keyword cCommaKeyword_5 = (Keyword)cGroup.eContents().get(5);
  		private final Assignment cNewValueAssignment_6 = (Assignment)cGroup.eContents().get(6);
  		private final RuleCall cNewValueTypedValueParserRuleCall_6_0 = (RuleCall)cNewValueAssignment_6.eContents().get(0);
  		private final Keyword cSinglethreadKeyword_7 = (Keyword)cGroup.eContents().get(7);
  		private final Assignment cOrderingAssignment_8 = (Assignment)cGroup.eContents().get(8);
  		private final RuleCall cOrderingOrderingParserRuleCall_8_0 = (RuleCall)cOrderingAssignment_8.eContents().get(0);
  		
  		//// cmpxchg [volatile] <ty>* <pointer>, <ty> <cmp>, <ty> <new> [singlethread] <ordering>  ; yields {ty}
  		//
  		//Instruction_cmpxchg:
  		//
  		//	opcode="cmpxchg" "volatile"? pointer=TypedValue "," comparedWith=TypedValue "," newValue=TypedValue "singlethread"?
  		//
  		//	ordering=Ordering;
  		public ParserRule getRule() { return rule; }
  
  		//opcode="cmpxchg" "volatile"? pointer=TypedValue "," comparedWith=TypedValue "," newValue=TypedValue "singlethread"?
  		//
  		//ordering=Ordering
  		public Group getGroup() { return cGroup; }
  
  		//opcode="cmpxchg"
  		public Assignment getOpcodeAssignment_0() { return cOpcodeAssignment_0; }
  
  		//"cmpxchg"
  		public Keyword getOpcodeCmpxchgKeyword_0_0() { return cOpcodeCmpxchgKeyword_0_0; }
  
  		//"volatile"?
  		public Keyword getVolatileKeyword_1() { return cVolatileKeyword_1; }
  
  		//pointer=TypedValue
  		public Assignment getPointerAssignment_2() { return cPointerAssignment_2; }
  
  		//TypedValue
  		public RuleCall getPointerTypedValueParserRuleCall_2_0() { return cPointerTypedValueParserRuleCall_2_0; }
  
  		//","
  		public Keyword getCommaKeyword_3() { return cCommaKeyword_3; }
  
  		//comparedWith=TypedValue
  		public Assignment getComparedWithAssignment_4() { return cComparedWithAssignment_4; }
  
  		//TypedValue
  		public RuleCall getComparedWithTypedValueParserRuleCall_4_0() { return cComparedWithTypedValueParserRuleCall_4_0; }
  
  		//","
  		public Keyword getCommaKeyword_5() { return cCommaKeyword_5; }
  
  		//newValue=TypedValue
  		public Assignment getNewValueAssignment_6() { return cNewValueAssignment_6; }
  
  		//TypedValue
  		public RuleCall getNewValueTypedValueParserRuleCall_6_0() { return cNewValueTypedValueParserRuleCall_6_0; }
  
  		//"singlethread"?
  		public Keyword getSinglethreadKeyword_7() { return cSinglethreadKeyword_7; }
  
  		//ordering=Ordering
  		public Assignment getOrderingAssignment_8() { return cOrderingAssignment_8; }
  
  		//Ordering
  		public RuleCall getOrderingOrderingParserRuleCall_8_0() { return cOrderingOrderingParserRuleCall_8_0; }
  	}
  
  	public class Instruction_atomicrmwElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Instruction_atomicrmw");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cOpcodeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final Keyword cOpcodeAtomicrmwKeyword_0_0 = (Keyword)cOpcodeAssignment_0.eContents().get(0);
  		private final Keyword cVolatileKeyword_1 = (Keyword)cGroup.eContents().get(1);
  		private final Assignment cOperationAssignment_2 = (Assignment)cGroup.eContents().get(2);
  		private final RuleCall cOperationAtomicrmw_operationParserRuleCall_2_0 = (RuleCall)cOperationAssignment_2.eContents().get(0);
  		private final Assignment cPointerAssignment_3 = (Assignment)cGroup.eContents().get(3);
  		private final RuleCall cPointerTypedValueParserRuleCall_3_0 = (RuleCall)cPointerAssignment_3.eContents().get(0);
  		private final Keyword cCommaKeyword_4 = (Keyword)cGroup.eContents().get(4);
  		private final Assignment cArgumentAssignment_5 = (Assignment)cGroup.eContents().get(5);
  		private final RuleCall cArgumentTypedValueParserRuleCall_5_0 = (RuleCall)cArgumentAssignment_5.eContents().get(0);
  		private final Keyword cSinglethreadKeyword_6 = (Keyword)cGroup.eContents().get(6);
  		private final Assignment cOrderingAssignment_7 = (Assignment)cGroup.eContents().get(7);
  		private final RuleCall cOrderingOrderingParserRuleCall_7_0 = (RuleCall)cOrderingAssignment_7.eContents().get(0);
  		
  		//// atomicrmw [volatile] <operation> <ty>* <pointer>, <ty> <value> [singlethread] <ordering>
  		//
  		////                   ; yields {ty}
  		//
  		//Instruction_atomicrmw:
  		//
  		//	opcode="atomicrmw" "volatile"? operation=Atomicrmw_operation pointer=TypedValue "," argument=TypedValue
  		//
  		//	"singlethread"? ordering=Ordering;
  		public ParserRule getRule() { return rule; }
  
  		//opcode="atomicrmw" "volatile"? operation=Atomicrmw_operation pointer=TypedValue "," argument=TypedValue "singlethread"?
  		//
  		//ordering=Ordering
  		public Group getGroup() { return cGroup; }
  
  		//opcode="atomicrmw"
  		public Assignment getOpcodeAssignment_0() { return cOpcodeAssignment_0; }
  
  		//"atomicrmw"
  		public Keyword getOpcodeAtomicrmwKeyword_0_0() { return cOpcodeAtomicrmwKeyword_0_0; }
  
  		//"volatile"?
  		public Keyword getVolatileKeyword_1() { return cVolatileKeyword_1; }
  
  		//operation=Atomicrmw_operation
  		public Assignment getOperationAssignment_2() { return cOperationAssignment_2; }
  
  		//Atomicrmw_operation
  		public RuleCall getOperationAtomicrmw_operationParserRuleCall_2_0() { return cOperationAtomicrmw_operationParserRuleCall_2_0; }
  
  		//pointer=TypedValue
  		public Assignment getPointerAssignment_3() { return cPointerAssignment_3; }
  
  		//TypedValue
  		public RuleCall getPointerTypedValueParserRuleCall_3_0() { return cPointerTypedValueParserRuleCall_3_0; }
  
  		//","
  		public Keyword getCommaKeyword_4() { return cCommaKeyword_4; }
  
  		//argument=TypedValue
  		public Assignment getArgumentAssignment_5() { return cArgumentAssignment_5; }
  
  		//TypedValue
  		public RuleCall getArgumentTypedValueParserRuleCall_5_0() { return cArgumentTypedValueParserRuleCall_5_0; }
  
  		//"singlethread"?
  		public Keyword getSinglethreadKeyword_6() { return cSinglethreadKeyword_6; }
  
  		//ordering=Ordering
  		public Assignment getOrderingAssignment_7() { return cOrderingAssignment_7; }
  
  		//Ordering
  		public RuleCall getOrderingOrderingParserRuleCall_7_0() { return cOrderingOrderingParserRuleCall_7_0; }
  	}
  
  	public class Atomicrmw_operationElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Atomicrmw_operation");
  		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
  		private final Keyword cXchgKeyword_0 = (Keyword)cAlternatives.eContents().get(0);
  		private final Keyword cAddKeyword_1 = (Keyword)cAlternatives.eContents().get(1);
  		private final Keyword cSubKeyword_2 = (Keyword)cAlternatives.eContents().get(2);
  		private final Keyword cAndKeyword_3 = (Keyword)cAlternatives.eContents().get(3);
  		private final Keyword cNandKeyword_4 = (Keyword)cAlternatives.eContents().get(4);
  		private final Keyword cOrKeyword_5 = (Keyword)cAlternatives.eContents().get(5);
  		private final Keyword cXorKeyword_6 = (Keyword)cAlternatives.eContents().get(6);
  		private final Keyword cMaxKeyword_7 = (Keyword)cAlternatives.eContents().get(7);
  		private final Keyword cMinKeyword_8 = (Keyword)cAlternatives.eContents().get(8);
  		private final Keyword cUmaxKeyword_9 = (Keyword)cAlternatives.eContents().get(9);
  		private final Keyword cUminKeyword_10 = (Keyword)cAlternatives.eContents().get(10);
  		
  		//Atomicrmw_operation:
  		//
  		//	"xchg" | "add" | "sub" | "and" | "nand" | "or" | "xor" | "max" | "min" | "umax" | "umin";
  		public ParserRule getRule() { return rule; }
  
  		//"xchg" | "add" | "sub" | "and" | "nand" | "or" | "xor" | "max" | "min" | "umax" | "umin"
  		public Alternatives getAlternatives() { return cAlternatives; }
  
  		//"xchg"
  		public Keyword getXchgKeyword_0() { return cXchgKeyword_0; }
  
  		//"add"
  		public Keyword getAddKeyword_1() { return cAddKeyword_1; }
  
  		//"sub"
  		public Keyword getSubKeyword_2() { return cSubKeyword_2; }
  
  		//"and"
  		public Keyword getAndKeyword_3() { return cAndKeyword_3; }
  
  		//"nand"
  		public Keyword getNandKeyword_4() { return cNandKeyword_4; }
  
  		//"or"
  		public Keyword getOrKeyword_5() { return cOrKeyword_5; }
  
  		//"xor"
  		public Keyword getXorKeyword_6() { return cXorKeyword_6; }
  
  		//"max"
  		public Keyword getMaxKeyword_7() { return cMaxKeyword_7; }
  
  		//"min"
  		public Keyword getMinKeyword_8() { return cMinKeyword_8; }
  
  		//"umax"
  		public Keyword getUmaxKeyword_9() { return cUmaxKeyword_9; }
  
  		//"umin"
  		public Keyword getUminKeyword_10() { return cUminKeyword_10; }
  	}
  
  	public class Instruction_getelementptrElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Instruction_getelementptr");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cOpcodeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final Keyword cOpcodeGetelementptrKeyword_0_0 = (Keyword)cOpcodeAssignment_0.eContents().get(0);
  		private final Keyword cInboundsKeyword_1 = (Keyword)cGroup.eContents().get(1);
  		private final Assignment cBaseAssignment_2 = (Assignment)cGroup.eContents().get(2);
  		private final RuleCall cBaseTypedValueParserRuleCall_2_0 = (RuleCall)cBaseAssignment_2.eContents().get(0);
  		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
  		private final Keyword cCommaKeyword_3_0 = (Keyword)cGroup_3.eContents().get(0);
  		private final Assignment cIndicesAssignment_3_1 = (Assignment)cGroup_3.eContents().get(1);
  		private final RuleCall cIndicesTypedValueParserRuleCall_3_1_0 = (RuleCall)cIndicesAssignment_3_1.eContents().get(0);
  		
  		//// <result> = getelementptr <pty>* <ptrval>{, <ty> <idx>}*
  		//
  		//// <result> = getelementptr inbounds <pty>* <ptrval>{, <ty> <idx>}*
  		//
  		//// <result> = getelementptr <ptr vector> ptrval, <vector index type> idx 
  		//
  		//Instruction_getelementptr:
  		//
  		//	opcode="getelementptr" "inbounds"? base=TypedValue ("," indices+=TypedValue)*;
  		public ParserRule getRule() { return rule; }
  
  		//opcode="getelementptr" "inbounds"? base=TypedValue ("," indices+=TypedValue)*
  		public Group getGroup() { return cGroup; }
  
  		//opcode="getelementptr"
  		public Assignment getOpcodeAssignment_0() { return cOpcodeAssignment_0; }
  
  		//"getelementptr"
  		public Keyword getOpcodeGetelementptrKeyword_0_0() { return cOpcodeGetelementptrKeyword_0_0; }
  
  		//"inbounds"?
  		public Keyword getInboundsKeyword_1() { return cInboundsKeyword_1; }
  
  		//base=TypedValue
  		public Assignment getBaseAssignment_2() { return cBaseAssignment_2; }
  
  		//TypedValue
  		public RuleCall getBaseTypedValueParserRuleCall_2_0() { return cBaseTypedValueParserRuleCall_2_0; }
  
  		//("," indices+=TypedValue)*
  		public Group getGroup_3() { return cGroup_3; }
  
  		//","
  		public Keyword getCommaKeyword_3_0() { return cCommaKeyword_3_0; }
  
  		//indices+=TypedValue
  		public Assignment getIndicesAssignment_3_1() { return cIndicesAssignment_3_1; }
  
  		//TypedValue
  		public RuleCall getIndicesTypedValueParserRuleCall_3_1_0() { return cIndicesTypedValueParserRuleCall_3_1_0; }
  	}
  
  	public class ConversionInstructionElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ConversionInstruction");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cOpcodeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final RuleCall cOpcodeConvertionOpcodeParserRuleCall_0_0 = (RuleCall)cOpcodeAssignment_0.eContents().get(0);
  		private final Assignment cFromTypeAssignment_1 = (Assignment)cGroup.eContents().get(1);
  		private final RuleCall cFromTypeTypeParserRuleCall_1_0 = (RuleCall)cFromTypeAssignment_1.eContents().get(0);
  		private final Assignment cValueAssignment_2 = (Assignment)cGroup.eContents().get(2);
  		private final RuleCall cValueValueRefParserRuleCall_2_0 = (RuleCall)cValueAssignment_2.eContents().get(0);
  		private final Keyword cToKeyword_3 = (Keyword)cGroup.eContents().get(3);
  		private final Assignment cTargetTypeAssignment_4 = (Assignment)cGroup.eContents().get(4);
  		private final RuleCall cTargetTypeTypeParserRuleCall_4_0 = (RuleCall)cTargetTypeAssignment_4.eContents().get(0);
  		
  		//ConversionInstruction: // Merged since they all look exactly the same except the opcode
  		//
  		//	opcode=ConvertionOpcode fromType=Type value=ValueRef "to" targetType=Type;
  		public ParserRule getRule() { return rule; }
  
  		//// Merged since they all look exactly the same except the opcode
  		//
  		//opcode=ConvertionOpcode fromType=Type value=ValueRef "to" targetType=Type
  		public Group getGroup() { return cGroup; }
  
  		//// Merged since they all look exactly the same except the opcode
  		//
  		//opcode=ConvertionOpcode
  		public Assignment getOpcodeAssignment_0() { return cOpcodeAssignment_0; }
  
  		//ConvertionOpcode
  		public RuleCall getOpcodeConvertionOpcodeParserRuleCall_0_0() { return cOpcodeConvertionOpcodeParserRuleCall_0_0; }
  
  		//fromType=Type
  		public Assignment getFromTypeAssignment_1() { return cFromTypeAssignment_1; }
  
  		//Type
  		public RuleCall getFromTypeTypeParserRuleCall_1_0() { return cFromTypeTypeParserRuleCall_1_0; }
  
  		//value=ValueRef
  		public Assignment getValueAssignment_2() { return cValueAssignment_2; }
  
  		//ValueRef
  		public RuleCall getValueValueRefParserRuleCall_2_0() { return cValueValueRefParserRuleCall_2_0; }
  
  		//"to"
  		public Keyword getToKeyword_3() { return cToKeyword_3; }
  
  		//targetType=Type
  		public Assignment getTargetTypeAssignment_4() { return cTargetTypeAssignment_4; }
  
  		//Type
  		public RuleCall getTargetTypeTypeParserRuleCall_4_0() { return cTargetTypeTypeParserRuleCall_4_0; }
  	}
  
  	public class ConvertionOpcodeElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ConvertionOpcode");
  		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
  		private final Keyword cTruncKeyword_0 = (Keyword)cAlternatives.eContents().get(0);
  		private final Keyword cZextKeyword_1 = (Keyword)cAlternatives.eContents().get(1);
  		private final Keyword cSextKeyword_2 = (Keyword)cAlternatives.eContents().get(2);
  		private final Keyword cFptruncKeyword_3 = (Keyword)cAlternatives.eContents().get(3);
  		private final Keyword cFpextKeyword_4 = (Keyword)cAlternatives.eContents().get(4);
  		private final Keyword cFptouiKeyword_5 = (Keyword)cAlternatives.eContents().get(5);
  		private final Keyword cFptosiKeyword_6 = (Keyword)cAlternatives.eContents().get(6);
  		private final Keyword cUitofpKeyword_7 = (Keyword)cAlternatives.eContents().get(7);
  		private final Keyword cSitofpKeyword_8 = (Keyword)cAlternatives.eContents().get(8);
  		private final Keyword cPtrtointKeyword_9 = (Keyword)cAlternatives.eContents().get(9);
  		private final Keyword cInttoptrKeyword_10 = (Keyword)cAlternatives.eContents().get(10);
  		private final Keyword cBitcastKeyword_11 = (Keyword)cAlternatives.eContents().get(11);
  		private final Keyword cAddrspacecastKeyword_12 = (Keyword)cAlternatives.eContents().get(12);
  		
  		//ConvertionOpcode:
  		//
  		//	"trunc" | "zext" | "sext" | "fptrunc" | "fpext" | "fptoui" | "fptosi" | "uitofp" | "sitofp" | "ptrtoint" | "inttoptr"
  		//
  		//	| "bitcast" | "addrspacecast";
  		public ParserRule getRule() { return rule; }
  
  		//"trunc" | "zext" | "sext" | "fptrunc" | "fpext" | "fptoui" | "fptosi" | "uitofp" | "sitofp" | "ptrtoint" | "inttoptr" |
  		//
  		//"bitcast" | "addrspacecast"
  		public Alternatives getAlternatives() { return cAlternatives; }
  
  		//"trunc"
  		public Keyword getTruncKeyword_0() { return cTruncKeyword_0; }
  
  		//"zext"
  		public Keyword getZextKeyword_1() { return cZextKeyword_1; }
  
  		//"sext"
  		public Keyword getSextKeyword_2() { return cSextKeyword_2; }
  
  		//"fptrunc"
  		public Keyword getFptruncKeyword_3() { return cFptruncKeyword_3; }
  
  		//"fpext"
  		public Keyword getFpextKeyword_4() { return cFpextKeyword_4; }
  
  		//"fptoui"
  		public Keyword getFptouiKeyword_5() { return cFptouiKeyword_5; }
  
  		//"fptosi"
  		public Keyword getFptosiKeyword_6() { return cFptosiKeyword_6; }
  
  		//"uitofp"
  		public Keyword getUitofpKeyword_7() { return cUitofpKeyword_7; }
  
  		//"sitofp"
  		public Keyword getSitofpKeyword_8() { return cSitofpKeyword_8; }
  
  		//"ptrtoint"
  		public Keyword getPtrtointKeyword_9() { return cPtrtointKeyword_9; }
  
  		//"inttoptr"
  		public Keyword getInttoptrKeyword_10() { return cInttoptrKeyword_10; }
  
  		//"bitcast"
  		public Keyword getBitcastKeyword_11() { return cBitcastKeyword_11; }
  
  		//"addrspacecast"
  		public Keyword getAddrspacecastKeyword_12() { return cAddrspacecastKeyword_12; }
  	}
  
  	public class OtherInstructionElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "OtherInstruction");
  		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
  		private final RuleCall cInstruction_icmpParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
  		private final RuleCall cInstruction_fcmpParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
  		private final RuleCall cInstruction_selectParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
  		private final RuleCall cInstruction_va_argParserRuleCall_3 = (RuleCall)cAlternatives.eContents().get(3);
  		private final RuleCall cInstruction_landingpadParserRuleCall_4 = (RuleCall)cAlternatives.eContents().get(4);
  		
  		//OtherInstruction:
  		//
  		//	Instruction_icmp | Instruction_fcmp | Instruction_select | Instruction_va_arg | Instruction_landingpad;
  		public ParserRule getRule() { return rule; }
  
  		//Instruction_icmp | Instruction_fcmp | Instruction_select | Instruction_va_arg | Instruction_landingpad
  		public Alternatives getAlternatives() { return cAlternatives; }
  
  		//Instruction_icmp
  		public RuleCall getInstruction_icmpParserRuleCall_0() { return cInstruction_icmpParserRuleCall_0; }
  
  		//Instruction_fcmp
  		public RuleCall getInstruction_fcmpParserRuleCall_1() { return cInstruction_fcmpParserRuleCall_1; }
  
  		//Instruction_select
  		public RuleCall getInstruction_selectParserRuleCall_2() { return cInstruction_selectParserRuleCall_2; }
  
  		//Instruction_va_arg
  		public RuleCall getInstruction_va_argParserRuleCall_3() { return cInstruction_va_argParserRuleCall_3; }
  
  		//Instruction_landingpad
  		public RuleCall getInstruction_landingpadParserRuleCall_4() { return cInstruction_landingpadParserRuleCall_4; }
  	}
  
  	public class Instruction_icmpElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Instruction_icmp");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cOpcodeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final Keyword cOpcodeIcmpKeyword_0_0 = (Keyword)cOpcodeAssignment_0.eContents().get(0);
  		private final Assignment cConditionAssignment_1 = (Assignment)cGroup.eContents().get(1);
  		private final RuleCall cConditionIcmpConditionParserRuleCall_1_0 = (RuleCall)cConditionAssignment_1.eContents().get(0);
  		private final Assignment cTypeAssignment_2 = (Assignment)cGroup.eContents().get(2);
  		private final RuleCall cTypeTypeParserRuleCall_2_0 = (RuleCall)cTypeAssignment_2.eContents().get(0);
  		private final Assignment cOp1Assignment_3 = (Assignment)cGroup.eContents().get(3);
  		private final RuleCall cOp1ValueRefParserRuleCall_3_0 = (RuleCall)cOp1Assignment_3.eContents().get(0);
  		private final Keyword cCommaKeyword_4 = (Keyword)cGroup.eContents().get(4);
  		private final Assignment cOp2Assignment_5 = (Assignment)cGroup.eContents().get(5);
  		private final RuleCall cOp2ValueRefParserRuleCall_5_0 = (RuleCall)cOp2Assignment_5.eContents().get(0);
  		
  		//// <result> = icmp <cond> <ty> <op1>, <op2>   ; yields {i1} or {<N x i1>}:result
  		//
  		//Instruction_icmp:
  		//
  		//	opcode="icmp" condition=IcmpCondition type=Type op1=ValueRef "," op2=ValueRef;
  		public ParserRule getRule() { return rule; }
  
  		//opcode="icmp" condition=IcmpCondition type=Type op1=ValueRef "," op2=ValueRef
  		public Group getGroup() { return cGroup; }
  
  		//opcode="icmp"
  		public Assignment getOpcodeAssignment_0() { return cOpcodeAssignment_0; }
  
  		//"icmp"
  		public Keyword getOpcodeIcmpKeyword_0_0() { return cOpcodeIcmpKeyword_0_0; }
  
  		//condition=IcmpCondition
  		public Assignment getConditionAssignment_1() { return cConditionAssignment_1; }
  
  		//IcmpCondition
  		public RuleCall getConditionIcmpConditionParserRuleCall_1_0() { return cConditionIcmpConditionParserRuleCall_1_0; }
  
  		//type=Type
  		public Assignment getTypeAssignment_2() { return cTypeAssignment_2; }
  
  		//Type
  		public RuleCall getTypeTypeParserRuleCall_2_0() { return cTypeTypeParserRuleCall_2_0; }
  
  		//op1=ValueRef
  		public Assignment getOp1Assignment_3() { return cOp1Assignment_3; }
  
  		//ValueRef
  		public RuleCall getOp1ValueRefParserRuleCall_3_0() { return cOp1ValueRefParserRuleCall_3_0; }
  
  		//","
  		public Keyword getCommaKeyword_4() { return cCommaKeyword_4; }
  
  		//op2=ValueRef
  		public Assignment getOp2Assignment_5() { return cOp2Assignment_5; }
  
  		//ValueRef
  		public RuleCall getOp2ValueRefParserRuleCall_5_0() { return cOp2ValueRefParserRuleCall_5_0; }
  	}
  
  	public class IcmpConditionElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "IcmpCondition");
  		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
  		private final Keyword cEqKeyword_0 = (Keyword)cAlternatives.eContents().get(0);
  		private final Keyword cNeKeyword_1 = (Keyword)cAlternatives.eContents().get(1);
  		private final Keyword cUgtKeyword_2 = (Keyword)cAlternatives.eContents().get(2);
  		private final Keyword cUgeKeyword_3 = (Keyword)cAlternatives.eContents().get(3);
  		private final Keyword cUltKeyword_4 = (Keyword)cAlternatives.eContents().get(4);
  		private final Keyword cUleKeyword_5 = (Keyword)cAlternatives.eContents().get(5);
  		private final Keyword cSgtKeyword_6 = (Keyword)cAlternatives.eContents().get(6);
  		private final Keyword cSgeKeyword_7 = (Keyword)cAlternatives.eContents().get(7);
  		private final Keyword cSltKeyword_8 = (Keyword)cAlternatives.eContents().get(8);
  		private final Keyword cSleKeyword_9 = (Keyword)cAlternatives.eContents().get(9);
  		
  		//IcmpCondition:
  		//
  		//	"eq" | "ne" | "ugt" | "uge" | "ult" | "ule" | "sgt" | "sge" | "slt" | "sle";
  		public ParserRule getRule() { return rule; }
  
  		//"eq" | "ne" | "ugt" | "uge" | "ult" | "ule" | "sgt" | "sge" | "slt" | "sle"
  		public Alternatives getAlternatives() { return cAlternatives; }
  
  		//"eq"
  		public Keyword getEqKeyword_0() { return cEqKeyword_0; }
  
  		//"ne"
  		public Keyword getNeKeyword_1() { return cNeKeyword_1; }
  
  		//"ugt"
  		public Keyword getUgtKeyword_2() { return cUgtKeyword_2; }
  
  		//"uge"
  		public Keyword getUgeKeyword_3() { return cUgeKeyword_3; }
  
  		//"ult"
  		public Keyword getUltKeyword_4() { return cUltKeyword_4; }
  
  		//"ule"
  		public Keyword getUleKeyword_5() { return cUleKeyword_5; }
  
  		//"sgt"
  		public Keyword getSgtKeyword_6() { return cSgtKeyword_6; }
  
  		//"sge"
  		public Keyword getSgeKeyword_7() { return cSgeKeyword_7; }
  
  		//"slt"
  		public Keyword getSltKeyword_8() { return cSltKeyword_8; }
  
  		//"sle"
  		public Keyword getSleKeyword_9() { return cSleKeyword_9; }
  	}
  
  	public class Instruction_fcmpElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Instruction_fcmp");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cOpcodeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final Keyword cOpcodeFcmpKeyword_0_0 = (Keyword)cOpcodeAssignment_0.eContents().get(0);
  		private final Assignment cConditionAssignment_1 = (Assignment)cGroup.eContents().get(1);
  		private final RuleCall cConditionFcmpConditionParserRuleCall_1_0 = (RuleCall)cConditionAssignment_1.eContents().get(0);
  		private final Assignment cTypeAssignment_2 = (Assignment)cGroup.eContents().get(2);
  		private final RuleCall cTypeTypeParserRuleCall_2_0 = (RuleCall)cTypeAssignment_2.eContents().get(0);
  		private final Assignment cOp1Assignment_3 = (Assignment)cGroup.eContents().get(3);
  		private final RuleCall cOp1ValueRefParserRuleCall_3_0 = (RuleCall)cOp1Assignment_3.eContents().get(0);
  		private final Keyword cCommaKeyword_4 = (Keyword)cGroup.eContents().get(4);
  		private final Assignment cOp2Assignment_5 = (Assignment)cGroup.eContents().get(5);
  		private final RuleCall cOp2ValueRefParserRuleCall_5_0 = (RuleCall)cOp2Assignment_5.eContents().get(0);
  		
  		//// <result> = fcmp <cond> <ty> <op1>, <op2>     ; yields {i1} or {<N x i1>}:result
  		//
  		//Instruction_fcmp:
  		//
  		//	opcode="fcmp" condition=FcmpCondition type=Type op1=ValueRef "," op2=ValueRef;
  		public ParserRule getRule() { return rule; }
  
  		//opcode="fcmp" condition=FcmpCondition type=Type op1=ValueRef "," op2=ValueRef
  		public Group getGroup() { return cGroup; }
  
  		//opcode="fcmp"
  		public Assignment getOpcodeAssignment_0() { return cOpcodeAssignment_0; }
  
  		//"fcmp"
  		public Keyword getOpcodeFcmpKeyword_0_0() { return cOpcodeFcmpKeyword_0_0; }
  
  		//condition=FcmpCondition
  		public Assignment getConditionAssignment_1() { return cConditionAssignment_1; }
  
  		//FcmpCondition
  		public RuleCall getConditionFcmpConditionParserRuleCall_1_0() { return cConditionFcmpConditionParserRuleCall_1_0; }
  
  		//type=Type
  		public Assignment getTypeAssignment_2() { return cTypeAssignment_2; }
  
  		//Type
  		public RuleCall getTypeTypeParserRuleCall_2_0() { return cTypeTypeParserRuleCall_2_0; }
  
  		//op1=ValueRef
  		public Assignment getOp1Assignment_3() { return cOp1Assignment_3; }
  
  		//ValueRef
  		public RuleCall getOp1ValueRefParserRuleCall_3_0() { return cOp1ValueRefParserRuleCall_3_0; }
  
  		//","
  		public Keyword getCommaKeyword_4() { return cCommaKeyword_4; }
  
  		//op2=ValueRef
  		public Assignment getOp2Assignment_5() { return cOp2Assignment_5; }
  
  		//ValueRef
  		public RuleCall getOp2ValueRefParserRuleCall_5_0() { return cOp2ValueRefParserRuleCall_5_0; }
  	}
  
  	public class FcmpConditionElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "FcmpCondition");
  		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
  		private final RuleCall cBOOLEANTerminalRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
  		private final Keyword cOeqKeyword_1 = (Keyword)cAlternatives.eContents().get(1);
  		private final Keyword cOgtKeyword_2 = (Keyword)cAlternatives.eContents().get(2);
  		private final Keyword cOgeKeyword_3 = (Keyword)cAlternatives.eContents().get(3);
  		private final Keyword cOltKeyword_4 = (Keyword)cAlternatives.eContents().get(4);
  		private final Keyword cOleKeyword_5 = (Keyword)cAlternatives.eContents().get(5);
  		private final Keyword cOneKeyword_6 = (Keyword)cAlternatives.eContents().get(6);
  		private final Keyword cOrdKeyword_7 = (Keyword)cAlternatives.eContents().get(7);
  		private final Keyword cUeqKeyword_8 = (Keyword)cAlternatives.eContents().get(8);
  		private final Keyword cUgtKeyword_9 = (Keyword)cAlternatives.eContents().get(9);
  		private final Keyword cUgeKeyword_10 = (Keyword)cAlternatives.eContents().get(10);
  		private final Keyword cUltKeyword_11 = (Keyword)cAlternatives.eContents().get(11);
  		private final Keyword cUleKeyword_12 = (Keyword)cAlternatives.eContents().get(12);
  		private final Keyword cUneKeyword_13 = (Keyword)cAlternatives.eContents().get(13);
  		private final Keyword cUnoKeyword_14 = (Keyword)cAlternatives.eContents().get(14);
  		
  		//FcmpCondition:
  		//
  		//	BOOLEAN | "oeq" | "ogt" | "oge" | "olt" | "ole" | "one" | "ord" | "ueq" | "ugt" | "uge" | "ult" | "ule" | "une" |
  		//
  		//	"uno";
  		public ParserRule getRule() { return rule; }
  
  		//BOOLEAN | "oeq" | "ogt" | "oge" | "olt" | "ole" | "one" | "ord" | "ueq" | "ugt" | "uge" | "ult" | "ule" | "une" | "uno"
  		public Alternatives getAlternatives() { return cAlternatives; }
  
  		//BOOLEAN
  		public RuleCall getBOOLEANTerminalRuleCall_0() { return cBOOLEANTerminalRuleCall_0; }
  
  		//"oeq"
  		public Keyword getOeqKeyword_1() { return cOeqKeyword_1; }
  
  		//"ogt"
  		public Keyword getOgtKeyword_2() { return cOgtKeyword_2; }
  
  		//"oge"
  		public Keyword getOgeKeyword_3() { return cOgeKeyword_3; }
  
  		//"olt"
  		public Keyword getOltKeyword_4() { return cOltKeyword_4; }
  
  		//"ole"
  		public Keyword getOleKeyword_5() { return cOleKeyword_5; }
  
  		//"one"
  		public Keyword getOneKeyword_6() { return cOneKeyword_6; }
  
  		//"ord"
  		public Keyword getOrdKeyword_7() { return cOrdKeyword_7; }
  
  		//"ueq"
  		public Keyword getUeqKeyword_8() { return cUeqKeyword_8; }
  
  		//"ugt"
  		public Keyword getUgtKeyword_9() { return cUgtKeyword_9; }
  
  		//"uge"
  		public Keyword getUgeKeyword_10() { return cUgeKeyword_10; }
  
  		//"ult"
  		public Keyword getUltKeyword_11() { return cUltKeyword_11; }
  
  		//"ule"
  		public Keyword getUleKeyword_12() { return cUleKeyword_12; }
  
  		//"une"
  		public Keyword getUneKeyword_13() { return cUneKeyword_13; }
  
  		//"uno"
  		public Keyword getUnoKeyword_14() { return cUnoKeyword_14; }
  	}
  
  	public class Instruction_phiElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Instruction_phi");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cOpcodeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final Keyword cOpcodePhiKeyword_0_0 = (Keyword)cOpcodeAssignment_0.eContents().get(0);
  		private final Assignment cTypeAssignment_1 = (Assignment)cGroup.eContents().get(1);
  		private final RuleCall cTypeTypeParserRuleCall_1_0 = (RuleCall)cTypeAssignment_1.eContents().get(0);
  		private final Group cGroup_2 = (Group)cGroup.eContents().get(2);
  		private final Keyword cLeftSquareBracketKeyword_2_0 = (Keyword)cGroup_2.eContents().get(0);
  		private final Assignment cValuesAssignment_2_1 = (Assignment)cGroup_2.eContents().get(1);
  		private final RuleCall cValuesValueRefParserRuleCall_2_1_0 = (RuleCall)cValuesAssignment_2_1.eContents().get(0);
  		private final Keyword cCommaKeyword_2_2 = (Keyword)cGroup_2.eContents().get(2);
  		private final Assignment cLabelsAssignment_2_3 = (Assignment)cGroup_2.eContents().get(3);
  		private final RuleCall cLabelsBasicBlockRefParserRuleCall_2_3_0 = (RuleCall)cLabelsAssignment_2_3.eContents().get(0);
  		private final Keyword cRightSquareBracketKeyword_2_4 = (Keyword)cGroup_2.eContents().get(4);
  		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
  		private final Keyword cCommaKeyword_3_0 = (Keyword)cGroup_3.eContents().get(0);
  		private final Keyword cLeftSquareBracketKeyword_3_1 = (Keyword)cGroup_3.eContents().get(1);
  		private final Assignment cValuesAssignment_3_2 = (Assignment)cGroup_3.eContents().get(2);
  		private final RuleCall cValuesValueRefParserRuleCall_3_2_0 = (RuleCall)cValuesAssignment_3_2.eContents().get(0);
  		private final Keyword cCommaKeyword_3_3 = (Keyword)cGroup_3.eContents().get(3);
  		private final Assignment cLabelsAssignment_3_4 = (Assignment)cGroup_3.eContents().get(4);
  		private final RuleCall cLabelsBasicBlockRefParserRuleCall_3_4_0 = (RuleCall)cLabelsAssignment_3_4.eContents().get(0);
  		private final Keyword cRightSquareBracketKeyword_3_5 = (Keyword)cGroup_3.eContents().get(5);
  		
  		//// <result> = phi <ty> [ <val0>, <label0>], ...
  		//
  		//Instruction_phi:
  		//
  		//	opcode="phi" type=Type ("[" values+=ValueRef "," labels+=BasicBlockRef "]") ("," "[" values+=ValueRef ","
  		//
  		//	labels+=BasicBlockRef "]")*;
  		public ParserRule getRule() { return rule; }
  
  		//opcode="phi" type=Type ("[" values+=ValueRef "," labels+=BasicBlockRef "]") ("," "[" values+=ValueRef ","
  		//
  		//labels+=BasicBlockRef "]")*
  		public Group getGroup() { return cGroup; }
  
  		//opcode="phi"
  		public Assignment getOpcodeAssignment_0() { return cOpcodeAssignment_0; }
  
  		//"phi"
  		public Keyword getOpcodePhiKeyword_0_0() { return cOpcodePhiKeyword_0_0; }
  
  		//type=Type
  		public Assignment getTypeAssignment_1() { return cTypeAssignment_1; }
  
  		//Type
  		public RuleCall getTypeTypeParserRuleCall_1_0() { return cTypeTypeParserRuleCall_1_0; }
  
  		//"[" values+=ValueRef "," labels+=BasicBlockRef "]"
  		public Group getGroup_2() { return cGroup_2; }
  
  		//"["
  		public Keyword getLeftSquareBracketKeyword_2_0() { return cLeftSquareBracketKeyword_2_0; }
  
  		//values+=ValueRef
  		public Assignment getValuesAssignment_2_1() { return cValuesAssignment_2_1; }
  
  		//ValueRef
  		public RuleCall getValuesValueRefParserRuleCall_2_1_0() { return cValuesValueRefParserRuleCall_2_1_0; }
  
  		//","
  		public Keyword getCommaKeyword_2_2() { return cCommaKeyword_2_2; }
  
  		//labels+=BasicBlockRef
  		public Assignment getLabelsAssignment_2_3() { return cLabelsAssignment_2_3; }
  
  		//BasicBlockRef
  		public RuleCall getLabelsBasicBlockRefParserRuleCall_2_3_0() { return cLabelsBasicBlockRefParserRuleCall_2_3_0; }
  
  		//"]"
  		public Keyword getRightSquareBracketKeyword_2_4() { return cRightSquareBracketKeyword_2_4; }
  
  		//("," "[" values+=ValueRef "," labels+=BasicBlockRef "]")*
  		public Group getGroup_3() { return cGroup_3; }
  
  		//","
  		public Keyword getCommaKeyword_3_0() { return cCommaKeyword_3_0; }
  
  		//"["
  		public Keyword getLeftSquareBracketKeyword_3_1() { return cLeftSquareBracketKeyword_3_1; }
  
  		//values+=ValueRef
  		public Assignment getValuesAssignment_3_2() { return cValuesAssignment_3_2; }
  
  		//ValueRef
  		public RuleCall getValuesValueRefParserRuleCall_3_2_0() { return cValuesValueRefParserRuleCall_3_2_0; }
  
  		//","
  		public Keyword getCommaKeyword_3_3() { return cCommaKeyword_3_3; }
  
  		//labels+=BasicBlockRef
  		public Assignment getLabelsAssignment_3_4() { return cLabelsAssignment_3_4; }
  
  		//BasicBlockRef
  		public RuleCall getLabelsBasicBlockRefParserRuleCall_3_4_0() { return cLabelsBasicBlockRefParserRuleCall_3_4_0; }
  
  		//"]"
  		public Keyword getRightSquareBracketKeyword_3_5() { return cRightSquareBracketKeyword_3_5; }
  	}
  
  	public class Instruction_selectElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Instruction_select");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cOpcodeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final Keyword cOpcodeSelectKeyword_0_0 = (Keyword)cOpcodeAssignment_0.eContents().get(0);
  		private final Assignment cConditionAssignment_1 = (Assignment)cGroup.eContents().get(1);
  		private final RuleCall cConditionTypedValueParserRuleCall_1_0 = (RuleCall)cConditionAssignment_1.eContents().get(0);
  		private final Keyword cCommaKeyword_2 = (Keyword)cGroup.eContents().get(2);
  		private final Assignment cValue1Assignment_3 = (Assignment)cGroup.eContents().get(3);
  		private final RuleCall cValue1TypedValueParserRuleCall_3_0 = (RuleCall)cValue1Assignment_3.eContents().get(0);
  		private final Keyword cCommaKeyword_4 = (Keyword)cGroup.eContents().get(4);
  		private final Assignment cValue2Assignment_5 = (Assignment)cGroup.eContents().get(5);
  		private final RuleCall cValue2TypedValueParserRuleCall_5_0 = (RuleCall)cValue2Assignment_5.eContents().get(0);
  		
  		//// <result> = select selty <cond>, <ty> <val1>, <ty> <val2>             ; yields ty
  		//
  		//// selty is either i1 or {<N x i1>}
  		//
  		//Instruction_select:
  		//
  		//	opcode="select" condition=TypedValue "," value1=TypedValue "," value2=TypedValue;
  		public ParserRule getRule() { return rule; }
  
  		//opcode="select" condition=TypedValue "," value1=TypedValue "," value2=TypedValue
  		public Group getGroup() { return cGroup; }
  
  		//opcode="select"
  		public Assignment getOpcodeAssignment_0() { return cOpcodeAssignment_0; }
  
  		//"select"
  		public Keyword getOpcodeSelectKeyword_0_0() { return cOpcodeSelectKeyword_0_0; }
  
  		//condition=TypedValue
  		public Assignment getConditionAssignment_1() { return cConditionAssignment_1; }
  
  		//TypedValue
  		public RuleCall getConditionTypedValueParserRuleCall_1_0() { return cConditionTypedValueParserRuleCall_1_0; }
  
  		//","
  		public Keyword getCommaKeyword_2() { return cCommaKeyword_2; }
  
  		//value1=TypedValue
  		public Assignment getValue1Assignment_3() { return cValue1Assignment_3; }
  
  		//TypedValue
  		public RuleCall getValue1TypedValueParserRuleCall_3_0() { return cValue1TypedValueParserRuleCall_3_0; }
  
  		//","
  		public Keyword getCommaKeyword_4() { return cCommaKeyword_4; }
  
  		//value2=TypedValue
  		public Assignment getValue2Assignment_5() { return cValue2Assignment_5; }
  
  		//TypedValue
  		public RuleCall getValue2TypedValueParserRuleCall_5_0() { return cValue2TypedValueParserRuleCall_5_0; }
  	}
  
  	public class Instruction_call_nonVoidElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Instruction_call_nonVoid");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cIsTailAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final Keyword cIsTailTailKeyword_0_0 = (Keyword)cIsTailAssignment_0.eContents().get(0);
  		private final Assignment cOpcodeAssignment_1 = (Assignment)cGroup.eContents().get(1);
  		private final Keyword cOpcodeCallKeyword_1_0 = (Keyword)cOpcodeAssignment_1.eContents().get(0);
  		private final Assignment cCconvAssignment_2 = (Assignment)cGroup.eContents().get(2);
  		private final RuleCall cCconvCConvParserRuleCall_2_0 = (RuleCall)cCconvAssignment_2.eContents().get(0);
  		private final Assignment cReturnAttributesAssignment_3 = (Assignment)cGroup.eContents().get(3);
  		private final RuleCall cReturnAttributesParameterAttributesParserRuleCall_3_0 = (RuleCall)cReturnAttributesAssignment_3.eContents().get(0);
  		private final Assignment cTypeAssignment_4 = (Assignment)cGroup.eContents().get(4);
  		private final RuleCall cTypeNonVoidTypeParserRuleCall_4_0 = (RuleCall)cTypeAssignment_4.eContents().get(0);
  		private final Assignment cCalleeAssignment_5 = (Assignment)cGroup.eContents().get(5);
  		private final RuleCall cCalleeCalleeParserRuleCall_5_0 = (RuleCall)cCalleeAssignment_5.eContents().get(0);
  		private final Assignment cArgsAssignment_6 = (Assignment)cGroup.eContents().get(6);
  		private final RuleCall cArgsArgListParserRuleCall_6_0 = (RuleCall)cArgsAssignment_6.eContents().get(0);
  		private final Assignment cFunctionAttributesAssignment_7 = (Assignment)cGroup.eContents().get(7);
  		private final RuleCall cFunctionAttributesFunctionAttributesParserRuleCall_7_0 = (RuleCall)cFunctionAttributesAssignment_7.eContents().get(0);
  		
  		//// <result> = [tail] call [cconv] [ret attrs] <ty> [<fnty>*] <fnptrval>(<function args>) [fn attrs]
  		//
  		//Instruction_call_nonVoid:
  		//
  		//	isTail?="tail"? opcode="call" cconv=CConv? returnAttributes=ParameterAttributes? type=NonVoidType callee=Callee
  		//
  		//	args=ArgList functionAttributes=FunctionAttributes?;
  		public ParserRule getRule() { return rule; }
  
  		//isTail?="tail"? opcode="call" cconv=CConv? returnAttributes=ParameterAttributes? type=NonVoidType callee=Callee
  		//
  		//args=ArgList functionAttributes=FunctionAttributes?
  		public Group getGroup() { return cGroup; }
  
  		//isTail?="tail"?
  		public Assignment getIsTailAssignment_0() { return cIsTailAssignment_0; }
  
  		//"tail"
  		public Keyword getIsTailTailKeyword_0_0() { return cIsTailTailKeyword_0_0; }
  
  		//opcode="call"
  		public Assignment getOpcodeAssignment_1() { return cOpcodeAssignment_1; }
  
  		//"call"
  		public Keyword getOpcodeCallKeyword_1_0() { return cOpcodeCallKeyword_1_0; }
  
  		//cconv=CConv?
  		public Assignment getCconvAssignment_2() { return cCconvAssignment_2; }
  
  		//CConv
  		public RuleCall getCconvCConvParserRuleCall_2_0() { return cCconvCConvParserRuleCall_2_0; }
  
  		//returnAttributes=ParameterAttributes?
  		public Assignment getReturnAttributesAssignment_3() { return cReturnAttributesAssignment_3; }
  
  		//ParameterAttributes
  		public RuleCall getReturnAttributesParameterAttributesParserRuleCall_3_0() { return cReturnAttributesParameterAttributesParserRuleCall_3_0; }
  
  		//type=NonVoidType
  		public Assignment getTypeAssignment_4() { return cTypeAssignment_4; }
  
  		//NonVoidType
  		public RuleCall getTypeNonVoidTypeParserRuleCall_4_0() { return cTypeNonVoidTypeParserRuleCall_4_0; }
  
  		//callee=Callee
  		public Assignment getCalleeAssignment_5() { return cCalleeAssignment_5; }
  
  		//Callee
  		public RuleCall getCalleeCalleeParserRuleCall_5_0() { return cCalleeCalleeParserRuleCall_5_0; }
  
  		//args=ArgList
  		public Assignment getArgsAssignment_6() { return cArgsAssignment_6; }
  
  		//ArgList
  		public RuleCall getArgsArgListParserRuleCall_6_0() { return cArgsArgListParserRuleCall_6_0; }
  
  		//functionAttributes=FunctionAttributes?
  		public Assignment getFunctionAttributesAssignment_7() { return cFunctionAttributesAssignment_7; }
  
  		//FunctionAttributes
  		public RuleCall getFunctionAttributesFunctionAttributesParserRuleCall_7_0() { return cFunctionAttributesFunctionAttributesParserRuleCall_7_0; }
  	}
  
  	public class Instruction_call_voidElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Instruction_call_void");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cIsTailAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final Keyword cIsTailTailKeyword_0_0 = (Keyword)cIsTailAssignment_0.eContents().get(0);
  		private final Assignment cOpcodeAssignment_1 = (Assignment)cGroup.eContents().get(1);
  		private final Keyword cOpcodeCallKeyword_1_0 = (Keyword)cOpcodeAssignment_1.eContents().get(0);
  		private final Assignment cCconvAssignment_2 = (Assignment)cGroup.eContents().get(2);
  		private final RuleCall cCconvCConvParserRuleCall_2_0 = (RuleCall)cCconvAssignment_2.eContents().get(0);
  		private final Assignment cReturnAttributesAssignment_3 = (Assignment)cGroup.eContents().get(3);
  		private final RuleCall cReturnAttributesParameterAttributesParserRuleCall_3_0 = (RuleCall)cReturnAttributesAssignment_3.eContents().get(0);
  		private final Assignment cTypeAssignment_4 = (Assignment)cGroup.eContents().get(4);
  		private final RuleCall cTypeVoidTypeParserRuleCall_4_0 = (RuleCall)cTypeAssignment_4.eContents().get(0);
  		private final Assignment cCalleeAssignment_5 = (Assignment)cGroup.eContents().get(5);
  		private final RuleCall cCalleeCalleeParserRuleCall_5_0 = (RuleCall)cCalleeAssignment_5.eContents().get(0);
  		private final Assignment cArgsAssignment_6 = (Assignment)cGroup.eContents().get(6);
  		private final RuleCall cArgsArgListParserRuleCall_6_0 = (RuleCall)cArgsAssignment_6.eContents().get(0);
  		private final Assignment cFunctionAttributesAssignment_7 = (Assignment)cGroup.eContents().get(7);
  		private final RuleCall cFunctionAttributesFunctionAttributesParserRuleCall_7_0 = (RuleCall)cFunctionAttributesAssignment_7.eContents().get(0);
  		
  		//Instruction_call_void:
  		//
  		//	isTail?="tail"? opcode="call" cconv=CConv? returnAttributes=ParameterAttributes? type=VoidType callee=Callee
  		//
  		//	args=ArgList functionAttributes=FunctionAttributes?;
  		public ParserRule getRule() { return rule; }
  
  		//isTail?="tail"? opcode="call" cconv=CConv? returnAttributes=ParameterAttributes? type=VoidType callee=Callee
  		//
  		//args=ArgList functionAttributes=FunctionAttributes?
  		public Group getGroup() { return cGroup; }
  
  		//isTail?="tail"?
  		public Assignment getIsTailAssignment_0() { return cIsTailAssignment_0; }
  
  		//"tail"
  		public Keyword getIsTailTailKeyword_0_0() { return cIsTailTailKeyword_0_0; }
  
  		//opcode="call"
  		public Assignment getOpcodeAssignment_1() { return cOpcodeAssignment_1; }
  
  		//"call"
  		public Keyword getOpcodeCallKeyword_1_0() { return cOpcodeCallKeyword_1_0; }
  
  		//cconv=CConv?
  		public Assignment getCconvAssignment_2() { return cCconvAssignment_2; }
  
  		//CConv
  		public RuleCall getCconvCConvParserRuleCall_2_0() { return cCconvCConvParserRuleCall_2_0; }
  
  		//returnAttributes=ParameterAttributes?
  		public Assignment getReturnAttributesAssignment_3() { return cReturnAttributesAssignment_3; }
  
  		//ParameterAttributes
  		public RuleCall getReturnAttributesParameterAttributesParserRuleCall_3_0() { return cReturnAttributesParameterAttributesParserRuleCall_3_0; }
  
  		//type=VoidType
  		public Assignment getTypeAssignment_4() { return cTypeAssignment_4; }
  
  		//VoidType
  		public RuleCall getTypeVoidTypeParserRuleCall_4_0() { return cTypeVoidTypeParserRuleCall_4_0; }
  
  		//callee=Callee
  		public Assignment getCalleeAssignment_5() { return cCalleeAssignment_5; }
  
  		//Callee
  		public RuleCall getCalleeCalleeParserRuleCall_5_0() { return cCalleeCalleeParserRuleCall_5_0; }
  
  		//args=ArgList
  		public Assignment getArgsAssignment_6() { return cArgsAssignment_6; }
  
  		//ArgList
  		public RuleCall getArgsArgListParserRuleCall_6_0() { return cArgsArgListParserRuleCall_6_0; }
  
  		//functionAttributes=FunctionAttributes?
  		public Assignment getFunctionAttributesAssignment_7() { return cFunctionAttributesAssignment_7; }
  
  		//FunctionAttributes
  		public RuleCall getFunctionAttributesFunctionAttributesParserRuleCall_7_0() { return cFunctionAttributesFunctionAttributesParserRuleCall_7_0; }
  	}
  
  	public class ArgListElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ArgList");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Action cArgListAction_0 = (Action)cGroup.eContents().get(0);
  		private final Keyword cLeftParenthesisKeyword_1 = (Keyword)cGroup.eContents().get(1);
  		private final Group cGroup_2 = (Group)cGroup.eContents().get(2);
  		private final Assignment cArgumentsAssignment_2_0 = (Assignment)cGroup_2.eContents().get(0);
  		private final RuleCall cArgumentsArgumentParserRuleCall_2_0_0 = (RuleCall)cArgumentsAssignment_2_0.eContents().get(0);
  		private final Group cGroup_2_1 = (Group)cGroup_2.eContents().get(1);
  		private final Keyword cCommaKeyword_2_1_0 = (Keyword)cGroup_2_1.eContents().get(0);
  		private final Assignment cArgumentsAssignment_2_1_1 = (Assignment)cGroup_2_1.eContents().get(1);
  		private final RuleCall cArgumentsArgumentParserRuleCall_2_1_1_0 = (RuleCall)cArgumentsAssignment_2_1_1.eContents().get(0);
  		private final Keyword cRightParenthesisKeyword_3 = (Keyword)cGroup.eContents().get(3);
  		
  		//ArgList:
  		//
  		//	{ArgList} "(" (arguments+=Argument ("," arguments+=Argument)*)? ")";
  		public ParserRule getRule() { return rule; }
  
  		//{ArgList} "(" (arguments+=Argument ("," arguments+=Argument)*)? ")"
  		public Group getGroup() { return cGroup; }
  
  		//{ArgList}
  		public Action getArgListAction_0() { return cArgListAction_0; }
  
  		//"("
  		public Keyword getLeftParenthesisKeyword_1() { return cLeftParenthesisKeyword_1; }
  
  		//(arguments+=Argument ("," arguments+=Argument)*)?
  		public Group getGroup_2() { return cGroup_2; }
  
  		//arguments+=Argument
  		public Assignment getArgumentsAssignment_2_0() { return cArgumentsAssignment_2_0; }
  
  		//Argument
  		public RuleCall getArgumentsArgumentParserRuleCall_2_0_0() { return cArgumentsArgumentParserRuleCall_2_0_0; }
  
  		//("," arguments+=Argument)*
  		public Group getGroup_2_1() { return cGroup_2_1; }
  
  		//","
  		public Keyword getCommaKeyword_2_1_0() { return cCommaKeyword_2_1_0; }
  
  		//arguments+=Argument
  		public Assignment getArgumentsAssignment_2_1_1() { return cArgumentsAssignment_2_1_1; }
  
  		//Argument
  		public RuleCall getArgumentsArgumentParserRuleCall_2_1_1_0() { return cArgumentsArgumentParserRuleCall_2_1_1_0; }
  
  		//")"
  		public Keyword getRightParenthesisKeyword_3() { return cRightParenthesisKeyword_3; }
  	}
  
  	public class CalleeElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Callee");
  		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
  		private final RuleCall cValueRefParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
  		private final RuleCall cInlineAssemblerParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
  		
  		//Callee:
  		//
  		//	ValueRef | InlineAssembler;
  		public ParserRule getRule() { return rule; }
  
  		//ValueRef | InlineAssembler
  		public Alternatives getAlternatives() { return cAlternatives; }
  
  		//ValueRef
  		public RuleCall getValueRefParserRuleCall_0() { return cValueRefParserRuleCall_0; }
  
  		//InlineAssembler
  		public RuleCall getInlineAssemblerParserRuleCall_1() { return cInlineAssemblerParserRuleCall_1; }
  	}
  
  	public class InlineAssemblerElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "InlineAssembler");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Keyword cAsmKeyword_0 = (Keyword)cGroup.eContents().get(0);
  		private final Keyword cSideeffectKeyword_1 = (Keyword)cGroup.eContents().get(1);
  		private final Keyword cAlignstackKeyword_2 = (Keyword)cGroup.eContents().get(2);
  		private final Keyword cInteldialectKeyword_3 = (Keyword)cGroup.eContents().get(3);
  		private final Assignment cAssemblerAssignment_4 = (Assignment)cGroup.eContents().get(4);
  		private final RuleCall cAssemblerSTRINGTerminalRuleCall_4_0 = (RuleCall)cAssemblerAssignment_4.eContents().get(0);
  		private final Keyword cCommaKeyword_5 = (Keyword)cGroup.eContents().get(5);
  		private final Assignment cFlagsAssignment_6 = (Assignment)cGroup.eContents().get(6);
  		private final RuleCall cFlagsSTRINGTerminalRuleCall_6_0 = (RuleCall)cFlagsAssignment_6.eContents().get(0);
  		
  		//InlineAssembler:
  		//
  		//	"asm" "sideeffect"? "alignstack"? "inteldialect"? assembler=STRING "," flags=STRING;
  		public ParserRule getRule() { return rule; }
  
  		//"asm" "sideeffect"? "alignstack"? "inteldialect"? assembler=STRING "," flags=STRING
  		public Group getGroup() { return cGroup; }
  
  		//"asm"
  		public Keyword getAsmKeyword_0() { return cAsmKeyword_0; }
  
  		//"sideeffect"?
  		public Keyword getSideeffectKeyword_1() { return cSideeffectKeyword_1; }
  
  		//"alignstack"?
  		public Keyword getAlignstackKeyword_2() { return cAlignstackKeyword_2; }
  
  		//"inteldialect"?
  		public Keyword getInteldialectKeyword_3() { return cInteldialectKeyword_3; }
  
  		//assembler=STRING
  		public Assignment getAssemblerAssignment_4() { return cAssemblerAssignment_4; }
  
  		//STRING
  		public RuleCall getAssemblerSTRINGTerminalRuleCall_4_0() { return cAssemblerSTRINGTerminalRuleCall_4_0; }
  
  		//","
  		public Keyword getCommaKeyword_5() { return cCommaKeyword_5; }
  
  		//flags=STRING
  		public Assignment getFlagsAssignment_6() { return cFlagsAssignment_6; }
  
  		//STRING
  		public RuleCall getFlagsSTRINGTerminalRuleCall_6_0() { return cFlagsSTRINGTerminalRuleCall_6_0; }
  	}
  
  	public class Instruction_va_argElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Instruction_va_arg");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cOpcodeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final Keyword cOpcodeVa_argKeyword_0_0 = (Keyword)cOpcodeAssignment_0.eContents().get(0);
  		private final Assignment cArglistAssignment_1 = (Assignment)cGroup.eContents().get(1);
  		private final RuleCall cArglistTypedValueParserRuleCall_1_0 = (RuleCall)cArglistAssignment_1.eContents().get(0);
  		private final Keyword cCommaKeyword_2 = (Keyword)cGroup.eContents().get(2);
  		private final Assignment cTypeAssignment_3 = (Assignment)cGroup.eContents().get(3);
  		private final RuleCall cTypeTypeParserRuleCall_3_0 = (RuleCall)cTypeAssignment_3.eContents().get(0);
  		
  		//// <resultval> = va_arg <va_list*> <arglist>, <argty>
  		//
  		//Instruction_va_arg:
  		//
  		//	opcode="va_arg" arglist=TypedValue "," type=Type;
  		public ParserRule getRule() { return rule; }
  
  		//opcode="va_arg" arglist=TypedValue "," type=Type
  		public Group getGroup() { return cGroup; }
  
  		//opcode="va_arg"
  		public Assignment getOpcodeAssignment_0() { return cOpcodeAssignment_0; }
  
  		//"va_arg"
  		public Keyword getOpcodeVa_argKeyword_0_0() { return cOpcodeVa_argKeyword_0_0; }
  
  		//arglist=TypedValue
  		public Assignment getArglistAssignment_1() { return cArglistAssignment_1; }
  
  		//TypedValue
  		public RuleCall getArglistTypedValueParserRuleCall_1_0() { return cArglistTypedValueParserRuleCall_1_0; }
  
  		//","
  		public Keyword getCommaKeyword_2() { return cCommaKeyword_2; }
  
  		//type=Type
  		public Assignment getTypeAssignment_3() { return cTypeAssignment_3; }
  
  		//Type
  		public RuleCall getTypeTypeParserRuleCall_3_0() { return cTypeTypeParserRuleCall_3_0; }
  	}
  
  	public class Instruction_landingpadElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Instruction_landingpad");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cOpcodeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final Keyword cOpcodeLandingpadKeyword_0_0 = (Keyword)cOpcodeAssignment_0.eContents().get(0);
  		private final Assignment cResultTypeAssignment_1 = (Assignment)cGroup.eContents().get(1);
  		private final RuleCall cResultTypeTypeParserRuleCall_1_0 = (RuleCall)cResultTypeAssignment_1.eContents().get(0);
  		private final Keyword cPersonalityKeyword_2 = (Keyword)cGroup.eContents().get(2);
  		private final Assignment cPersonalityAssignment_3 = (Assignment)cGroup.eContents().get(3);
  		private final RuleCall cPersonalityTypedValueParserRuleCall_3_0 = (RuleCall)cPersonalityAssignment_3.eContents().get(0);
  		private final Alternatives cAlternatives_4 = (Alternatives)cGroup.eContents().get(4);
  		private final Assignment cClausesAssignment_4_0 = (Assignment)cAlternatives_4.eContents().get(0);
  		private final RuleCall cClausesLandingpadClauseParserRuleCall_4_0_0 = (RuleCall)cClausesAssignment_4_0.eContents().get(0);
  		private final Keyword cCleanupKeyword_4_1 = (Keyword)cAlternatives_4.eContents().get(1);
  		private final Assignment cClausesAssignment_5 = (Assignment)cGroup.eContents().get(5);
  		private final RuleCall cClausesLandingpadClauseParserRuleCall_5_0 = (RuleCall)cClausesAssignment_5.eContents().get(0);
  		
  		//// <resultval> = landingpad <resultty> personality <type> <pers_fn> <clause>+
  		//
  		//// <resultval> = landingpad <resultty> personality <type> <pers_fn> cleanup <clause>*
  		//
  		//// <clause> := catch <type> <value>
  		//
  		//// <clause> := filter <array constant type> <array constant>
  		//
  		//Instruction_landingpad:
  		//
  		//	opcode="landingpad" resultType=Type "personality" personality=TypedValue (clauses+=LandingpadClause | "cleanup")
  		//
  		//	clauses+=LandingpadClause*;
  		public ParserRule getRule() { return rule; }
  
  		//opcode="landingpad" resultType=Type "personality" personality=TypedValue (clauses+=LandingpadClause | "cleanup")
  		//
  		//clauses+=LandingpadClause*
  		public Group getGroup() { return cGroup; }
  
  		//opcode="landingpad"
  		public Assignment getOpcodeAssignment_0() { return cOpcodeAssignment_0; }
  
  		//"landingpad"
  		public Keyword getOpcodeLandingpadKeyword_0_0() { return cOpcodeLandingpadKeyword_0_0; }
  
  		//resultType=Type
  		public Assignment getResultTypeAssignment_1() { return cResultTypeAssignment_1; }
  
  		//Type
  		public RuleCall getResultTypeTypeParserRuleCall_1_0() { return cResultTypeTypeParserRuleCall_1_0; }
  
  		//"personality"
  		public Keyword getPersonalityKeyword_2() { return cPersonalityKeyword_2; }
  
  		//personality=TypedValue
  		public Assignment getPersonalityAssignment_3() { return cPersonalityAssignment_3; }
  
  		//TypedValue
  		public RuleCall getPersonalityTypedValueParserRuleCall_3_0() { return cPersonalityTypedValueParserRuleCall_3_0; }
  
  		//clauses+=LandingpadClause | "cleanup"
  		public Alternatives getAlternatives_4() { return cAlternatives_4; }
  
  		//clauses+=LandingpadClause
  		public Assignment getClausesAssignment_4_0() { return cClausesAssignment_4_0; }
  
  		//LandingpadClause
  		public RuleCall getClausesLandingpadClauseParserRuleCall_4_0_0() { return cClausesLandingpadClauseParserRuleCall_4_0_0; }
  
  		//"cleanup"
  		public Keyword getCleanupKeyword_4_1() { return cCleanupKeyword_4_1; }
  
  		//clauses+=LandingpadClause*
  		public Assignment getClausesAssignment_5() { return cClausesAssignment_5; }
  
  		//LandingpadClause
  		public RuleCall getClausesLandingpadClauseParserRuleCall_5_0() { return cClausesLandingpadClauseParserRuleCall_5_0; }
  	}
  
  	public class LandingpadClauseElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "LandingpadClause");
  		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
  		private final Group cGroup_0 = (Group)cAlternatives.eContents().get(0);
  		private final Assignment cLandingPadTypeAssignment_0_0 = (Assignment)cGroup_0.eContents().get(0);
  		private final Keyword cLandingPadTypeCatchKeyword_0_0_0 = (Keyword)cLandingPadTypeAssignment_0_0.eContents().get(0);
  		private final Assignment cCatchTypeAssignment_0_1 = (Assignment)cGroup_0.eContents().get(1);
  		private final RuleCall cCatchTypeTypedValueParserRuleCall_0_1_0 = (RuleCall)cCatchTypeAssignment_0_1.eContents().get(0);
  		private final Group cGroup_1 = (Group)cAlternatives.eContents().get(1);
  		private final Assignment cLandingPadTypeAssignment_1_0 = (Assignment)cGroup_1.eContents().get(0);
  		private final Keyword cLandingPadTypeFilterKeyword_1_0_0 = (Keyword)cLandingPadTypeAssignment_1_0.eContents().get(0);
  		private final Assignment cArrayTypeAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
  		private final RuleCall cArrayTypeArrayTypeParserRuleCall_1_1_0 = (RuleCall)cArrayTypeAssignment_1_1.eContents().get(0);
  		private final Assignment cArrayConstantAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
  		private final RuleCall cArrayConstantArrayConstantParserRuleCall_1_2_0 = (RuleCall)cArrayConstantAssignment_1_2.eContents().get(0);
  		
  		//LandingpadClause:
  		//
  		//	landingPadType="catch" catchType=TypedValue | landingPadType="filter" arrayType=ArrayType
  		//
  		//	arrayConstant=ArrayConstant;
  		public ParserRule getRule() { return rule; }
  
  		//landingPadType="catch" catchType=TypedValue | landingPadType="filter" arrayType=ArrayType arrayConstant=ArrayConstant
  		public Alternatives getAlternatives() { return cAlternatives; }
  
  		//landingPadType="catch" catchType=TypedValue
  		public Group getGroup_0() { return cGroup_0; }
  
  		//landingPadType="catch"
  		public Assignment getLandingPadTypeAssignment_0_0() { return cLandingPadTypeAssignment_0_0; }
  
  		//"catch"
  		public Keyword getLandingPadTypeCatchKeyword_0_0_0() { return cLandingPadTypeCatchKeyword_0_0_0; }
  
  		//catchType=TypedValue
  		public Assignment getCatchTypeAssignment_0_1() { return cCatchTypeAssignment_0_1; }
  
  		//TypedValue
  		public RuleCall getCatchTypeTypedValueParserRuleCall_0_1_0() { return cCatchTypeTypedValueParserRuleCall_0_1_0; }
  
  		//landingPadType="filter" arrayType=ArrayType arrayConstant=ArrayConstant
  		public Group getGroup_1() { return cGroup_1; }
  
  		//landingPadType="filter"
  		public Assignment getLandingPadTypeAssignment_1_0() { return cLandingPadTypeAssignment_1_0; }
  
  		//"filter"
  		public Keyword getLandingPadTypeFilterKeyword_1_0_0() { return cLandingPadTypeFilterKeyword_1_0_0; }
  
  		//arrayType=ArrayType
  		public Assignment getArrayTypeAssignment_1_1() { return cArrayTypeAssignment_1_1; }
  
  		//ArrayType
  		public RuleCall getArrayTypeArrayTypeParserRuleCall_1_1_0() { return cArrayTypeArrayTypeParserRuleCall_1_1_0; }
  
  		//arrayConstant=ArrayConstant
  		public Assignment getArrayConstantAssignment_1_2() { return cArrayConstantAssignment_1_2; }
  
  		//ArrayConstant
  		public RuleCall getArrayConstantArrayConstantParserRuleCall_1_2_0() { return cArrayConstantArrayConstantParserRuleCall_1_2_0; }
  	}
  
  	public class OrderingElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Ordering");
  		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
  		private final Keyword cUnorderedKeyword_0 = (Keyword)cAlternatives.eContents().get(0);
  		private final Keyword cMonotonicKeyword_1 = (Keyword)cAlternatives.eContents().get(1);
  		private final Keyword cAcquireKeyword_2 = (Keyword)cAlternatives.eContents().get(2);
  		private final Keyword cReleaseKeyword_3 = (Keyword)cAlternatives.eContents().get(3);
  		private final Keyword cAcq_relKeyword_4 = (Keyword)cAlternatives.eContents().get(4);
  		private final Keyword cSeq_cstKeyword_5 = (Keyword)cAlternatives.eContents().get(5);
  		
  		//Ordering:
  		//
  		//	"unordered" | "monotonic" | "acquire" | "release" | "acq_rel" | "seq_cst";
  		public ParserRule getRule() { return rule; }
  
  		//"unordered" | "monotonic" | "acquire" | "release" | "acq_rel" | "seq_cst"
  		public Alternatives getAlternatives() { return cAlternatives; }
  
  		//"unordered"
  		public Keyword getUnorderedKeyword_0() { return cUnorderedKeyword_0; }
  
  		//"monotonic"
  		public Keyword getMonotonicKeyword_1() { return cMonotonicKeyword_1; }
  
  		//"acquire"
  		public Keyword getAcquireKeyword_2() { return cAcquireKeyword_2; }
  
  		//"release"
  		public Keyword getReleaseKeyword_3() { return cReleaseKeyword_3; }
  
  		//"acq_rel"
  		public Keyword getAcq_relKeyword_4() { return cAcq_relKeyword_4; }
  
  		//"seq_cst"
  		public Keyword getSeq_cstKeyword_5() { return cSeq_cstKeyword_5; }
  	}
  
  	public class TypedValueElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "TypedValue");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cTypeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final RuleCall cTypeTypeParserRuleCall_0_0 = (RuleCall)cTypeAssignment_0.eContents().get(0);
  		private final Assignment cRefAssignment_1 = (Assignment)cGroup.eContents().get(1);
  		private final RuleCall cRefValueRefParserRuleCall_1_0 = (RuleCall)cRefAssignment_1.eContents().get(0);
  		
  		//TypedValue:
  		//
  		//	type=Type ref=ValueRef;
  		public ParserRule getRule() { return rule; }
  
  		//type=Type ref=ValueRef
  		public Group getGroup() { return cGroup; }
  
  		//type=Type
  		public Assignment getTypeAssignment_0() { return cTypeAssignment_0; }
  
  		//Type
  		public RuleCall getTypeTypeParserRuleCall_0_0() { return cTypeTypeParserRuleCall_0_0; }
  
  		//ref=ValueRef
  		public Assignment getRefAssignment_1() { return cRefAssignment_1; }
  
  		//ValueRef
  		public RuleCall getRefValueRefParserRuleCall_1_0() { return cRefValueRefParserRuleCall_1_0; }
  	}
  
  	public class ParameterTypeElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ParameterType");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cTypeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final RuleCall cTypeTypeParserRuleCall_0_0 = (RuleCall)cTypeAssignment_0.eContents().get(0);
  		private final Assignment cAttrsAssignment_1 = (Assignment)cGroup.eContents().get(1);
  		private final RuleCall cAttrsParameterAttributesParserRuleCall_1_0 = (RuleCall)cAttrsAssignment_1.eContents().get(0);
  		
  		//ParameterType:
  		//
  		//	type=Type attrs=ParameterAttributes?;
  		public ParserRule getRule() { return rule; }
  
  		//type=Type attrs=ParameterAttributes?
  		public Group getGroup() { return cGroup; }
  
  		//type=Type
  		public Assignment getTypeAssignment_0() { return cTypeAssignment_0; }
  
  		//Type
  		public RuleCall getTypeTypeParserRuleCall_0_0() { return cTypeTypeParserRuleCall_0_0; }
  
  		//attrs=ParameterAttributes?
  		public Assignment getAttrsAssignment_1() { return cAttrsAssignment_1; }
  
  		//ParameterAttributes
  		public RuleCall getAttrsParameterAttributesParserRuleCall_1_0() { return cAttrsParameterAttributesParserRuleCall_1_0; }
  	}
  
  	public class ParameterAttributesElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ParameterAttributes");
  		private final Assignment cAttributesAssignment = (Assignment)rule.eContents().get(1);
  		private final RuleCall cAttributesParameterAttributeParserRuleCall_0 = (RuleCall)cAttributesAssignment.eContents().get(0);
  		
  		//ParameterAttributes:
  		//
  		//	attributes+=ParameterAttribute+;
  		public ParserRule getRule() { return rule; }
  
  		//attributes+=ParameterAttribute+
  		public Assignment getAttributesAssignment() { return cAttributesAssignment; }
  
  		//ParameterAttribute
  		public RuleCall getAttributesParameterAttributeParserRuleCall_0() { return cAttributesParameterAttributeParserRuleCall_0; }
  	}
  
  	public class ParameterAttributeElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ParameterAttribute");
  		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
  		private final Keyword cZeroextKeyword_0 = (Keyword)cAlternatives.eContents().get(0);
  		private final Keyword cSignextKeyword_1 = (Keyword)cAlternatives.eContents().get(1);
  		private final Keyword cInregKeyword_2 = (Keyword)cAlternatives.eContents().get(2);
  		private final Group cGroup_3 = (Group)cAlternatives.eContents().get(3);
  		private final Keyword cByvalKeyword_3_0 = (Keyword)cGroup_3.eContents().get(0);
  		private final Group cGroup_3_1 = (Group)cGroup_3.eContents().get(1);
  		private final Keyword cAlignKeyword_3_1_0 = (Keyword)cGroup_3_1.eContents().get(0);
  		private final RuleCall cINTEGERTerminalRuleCall_3_1_1 = (RuleCall)cGroup_3_1.eContents().get(1);
  		private final Keyword cSretKeyword_4 = (Keyword)cAlternatives.eContents().get(4);
  		private final Keyword cNoaliasKeyword_5 = (Keyword)cAlternatives.eContents().get(5);
  		private final Keyword cNocaptureKeyword_6 = (Keyword)cAlternatives.eContents().get(6);
  		private final Keyword cNestKeyword_7 = (Keyword)cAlternatives.eContents().get(7);
  		private final Keyword cReturnedKeyword_8 = (Keyword)cAlternatives.eContents().get(8);
  		private final Keyword cInallocaKeyword_9 = (Keyword)cAlternatives.eContents().get(9);
  		
  		//ParameterAttribute:
  		//
  		//	"zeroext" | "signext" | "inreg" | "byval" ("align" INTEGER)? | "sret" | "noalias" | "nocapture" | "nest" | "returned"
  		//
  		//	| "inalloca";
  		public ParserRule getRule() { return rule; }
  
  		//"zeroext" | "signext" | "inreg" | "byval" ("align" INTEGER)? | "sret" | "noalias" | "nocapture" | "nest" | "returned" |
  		//
  		//"inalloca"
  		public Alternatives getAlternatives() { return cAlternatives; }
  
  		//"zeroext"
  		public Keyword getZeroextKeyword_0() { return cZeroextKeyword_0; }
  
  		//"signext"
  		public Keyword getSignextKeyword_1() { return cSignextKeyword_1; }
  
  		//"inreg"
  		public Keyword getInregKeyword_2() { return cInregKeyword_2; }
  
  		//"byval" ("align" INTEGER)?
  		public Group getGroup_3() { return cGroup_3; }
  
  		//"byval"
  		public Keyword getByvalKeyword_3_0() { return cByvalKeyword_3_0; }
  
  		//("align" INTEGER)?
  		public Group getGroup_3_1() { return cGroup_3_1; }
  
  		//"align"
  		public Keyword getAlignKeyword_3_1_0() { return cAlignKeyword_3_1_0; }
  
  		//INTEGER
  		public RuleCall getINTEGERTerminalRuleCall_3_1_1() { return cINTEGERTerminalRuleCall_3_1_1; }
  
  		//"sret"
  		public Keyword getSretKeyword_4() { return cSretKeyword_4; }
  
  		//"noalias"
  		public Keyword getNoaliasKeyword_5() { return cNoaliasKeyword_5; }
  
  		//"nocapture"
  		public Keyword getNocaptureKeyword_6() { return cNocaptureKeyword_6; }
  
  		//"nest"
  		public Keyword getNestKeyword_7() { return cNestKeyword_7; }
  
  		//"returned"
  		public Keyword getReturnedKeyword_8() { return cReturnedKeyword_8; }
  
  		//"inalloca"
  		public Keyword getInallocaKeyword_9() { return cInallocaKeyword_9; }
  	}
  
  	public class ArgumentElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Argument");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cTypeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final RuleCall cTypeParameterTypeParserRuleCall_0_0 = (RuleCall)cTypeAssignment_0.eContents().get(0);
  		private final Assignment cRefAssignment_1 = (Assignment)cGroup.eContents().get(1);
  		private final RuleCall cRefValueRefParserRuleCall_1_0 = (RuleCall)cRefAssignment_1.eContents().get(0);
  		
  		//Argument:
  		//
  		//	type=ParameterType ref=ValueRef;
  		public ParserRule getRule() { return rule; }
  
  		//type=ParameterType ref=ValueRef
  		public Group getGroup() { return cGroup; }
  
  		//type=ParameterType
  		public Assignment getTypeAssignment_0() { return cTypeAssignment_0; }
  
  		//ParameterType
  		public RuleCall getTypeParameterTypeParserRuleCall_0_0() { return cTypeParameterTypeParserRuleCall_0_0; }
  
  		//ref=ValueRef
  		public Assignment getRefAssignment_1() { return cRefAssignment_1; }
  
  		//ValueRef
  		public RuleCall getRefValueRefParserRuleCall_1_0() { return cRefValueRefParserRuleCall_1_0; }
  	}
  
  	public class ParameterElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Parameter");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cTypeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final RuleCall cTypeParameterTypeParserRuleCall_0_0 = (RuleCall)cTypeAssignment_0.eContents().get(0);
  		private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
  		private final RuleCall cNameParamNameParserRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
  		
  		//Parameter:
  		//
  		//	type=ParameterType name=ParamName;
  		public ParserRule getRule() { return rule; }
  
  		//type=ParameterType name=ParamName
  		public Group getGroup() { return cGroup; }
  
  		//type=ParameterType
  		public Assignment getTypeAssignment_0() { return cTypeAssignment_0; }
  
  		//ParameterType
  		public RuleCall getTypeParameterTypeParserRuleCall_0_0() { return cTypeParameterTypeParserRuleCall_0_0; }
  
  		//name=ParamName
  		public Assignment getNameAssignment_1() { return cNameAssignment_1; }
  
  		//ParamName
  		public RuleCall getNameParamNameParserRuleCall_1_0() { return cNameParamNameParserRuleCall_1_0; }
  	}
  
  	public class NonVoidTypeElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "NonVoidType");
  		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
  		private final Group cGroup_0 = (Group)cAlternatives.eContents().get(0);
  		private final Assignment cBaseTypeAssignment_0_0 = (Assignment)cGroup_0.eContents().get(0);
  		private final RuleCall cBaseTypeVoidTypeParserRuleCall_0_0_0 = (RuleCall)cBaseTypeAssignment_0_0.eContents().get(0);
  		private final Assignment cSuffixesAssignment_0_1 = (Assignment)cGroup_0.eContents().get(1);
  		private final RuleCall cSuffixesTypeSuffixParserRuleCall_0_1_0 = (RuleCall)cSuffixesAssignment_0_1.eContents().get(0);
  		private final Group cGroup_1 = (Group)cAlternatives.eContents().get(1);
  		private final Assignment cBaseTypeAssignment_1_0 = (Assignment)cGroup_1.eContents().get(0);
  		private final RuleCall cBaseTypeNonLeftRecursiveNonVoidTypeParserRuleCall_1_0_0 = (RuleCall)cBaseTypeAssignment_1_0.eContents().get(0);
  		private final Assignment cStarsAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
  		private final RuleCall cStarsStarParserRuleCall_1_1_0 = (RuleCall)cStarsAssignment_1_1.eContents().get(0);
  		private final Assignment cSuffixesAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
  		private final RuleCall cSuffixesTypeSuffixParserRuleCall_1_2_0 = (RuleCall)cSuffixesAssignment_1_2.eContents().get(0);
  		
  		//NonVoidType: // A function which returns void, or a pointer to such a function.
  		//
  		//	baseType=VoidType suffixes+=TypeSuffix+ | // A non-void single type, or a pointer to such a type, or a function which returns
  		//
  		//	// such a type or a pointer to such a type, or a pointer to such a function. In short,
  		//
  		//	// All type options not covered by the previous alternative, but not including "void",
  		//
  		//	// which is the only type not allowed.
  		//
  		//	baseType=NonLeftRecursiveNonVoidType stars+=Star* suffixes+=TypeSuffix*;
  		public ParserRule getRule() { return rule; }
  
  		//// A function which returns void, or a pointer to such a function.
  		//
  		//baseType=VoidType suffixes+=TypeSuffix+ | // A non-void single type, or a pointer to such a type, or a function which returns
  		//
  		//// such a type or a pointer to such a type, or a pointer to such a function. In short,
  		//
  		//// All type options not covered by the previous alternative, but not including "void",
  		//
  		//// which is the only type not allowed.
  		//
  		//baseType=NonLeftRecursiveNonVoidType stars+=Star* suffixes+=TypeSuffix*
  		public Alternatives getAlternatives() { return cAlternatives; }
  
  		//// A function which returns void, or a pointer to such a function.
  		//
  		//baseType=VoidType suffixes+=TypeSuffix+
  		public Group getGroup_0() { return cGroup_0; }
  
  		//// A function which returns void, or a pointer to such a function.
  		//
  		//baseType=VoidType
  		public Assignment getBaseTypeAssignment_0_0() { return cBaseTypeAssignment_0_0; }
  
  		//VoidType
  		public RuleCall getBaseTypeVoidTypeParserRuleCall_0_0_0() { return cBaseTypeVoidTypeParserRuleCall_0_0_0; }
  
  		//suffixes+=TypeSuffix+
  		public Assignment getSuffixesAssignment_0_1() { return cSuffixesAssignment_0_1; }
  
  		//TypeSuffix
  		public RuleCall getSuffixesTypeSuffixParserRuleCall_0_1_0() { return cSuffixesTypeSuffixParserRuleCall_0_1_0; }
  
  		//// A non-void single type, or a pointer to such a type, or a function which returns
  		//
  		//// such a type or a pointer to such a type, or a pointer to such a function. In short,
  		//
  		//// All type options not covered by the previous alternative, but not including "void",
  		//
  		//// which is the only type not allowed.
  		//
  		//baseType=NonLeftRecursiveNonVoidType stars+=Star* suffixes+=TypeSuffix*
  		public Group getGroup_1() { return cGroup_1; }
  
  		//// A non-void single type, or a pointer to such a type, or a function which returns
  		//
  		//// such a type or a pointer to such a type, or a pointer to such a function. In short,
  		//
  		//// All type options not covered by the previous alternative, but not including "void",
  		//
  		//// which is the only type not allowed.
  		//
  		//baseType=NonLeftRecursiveNonVoidType
  		public Assignment getBaseTypeAssignment_1_0() { return cBaseTypeAssignment_1_0; }
  
  		//NonLeftRecursiveNonVoidType
  		public RuleCall getBaseTypeNonLeftRecursiveNonVoidTypeParserRuleCall_1_0_0() { return cBaseTypeNonLeftRecursiveNonVoidTypeParserRuleCall_1_0_0; }
  
  		//stars+=Star*
  		public Assignment getStarsAssignment_1_1() { return cStarsAssignment_1_1; }
  
  		//Star
  		public RuleCall getStarsStarParserRuleCall_1_1_0() { return cStarsStarParserRuleCall_1_1_0; }
  
  		//suffixes+=TypeSuffix*
  		public Assignment getSuffixesAssignment_1_2() { return cSuffixesAssignment_1_2; }
  
  		//TypeSuffix
  		public RuleCall getSuffixesTypeSuffixParserRuleCall_1_2_0() { return cSuffixesTypeSuffixParserRuleCall_1_2_0; }
  	}
  
  	public class StarElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Star");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Action cStarAction_0 = (Action)cGroup.eContents().get(0);
  		private final Assignment cAddressSpaceAssignment_1 = (Assignment)cGroup.eContents().get(1);
  		private final RuleCall cAddressSpaceAddressSpaceParserRuleCall_1_0 = (RuleCall)cAddressSpaceAssignment_1.eContents().get(0);
  		private final Keyword cAsteriskKeyword_2 = (Keyword)cGroup.eContents().get(2);
  		
  		//Star:
  		//
  		//	{Star} addressSpace=AddressSpace? "*";
  		public ParserRule getRule() { return rule; }
  
  		//{Star} addressSpace=AddressSpace? "*"
  		public Group getGroup() { return cGroup; }
  
  		//{Star}
  		public Action getStarAction_0() { return cStarAction_0; }
  
  		//addressSpace=AddressSpace?
  		public Assignment getAddressSpaceAssignment_1() { return cAddressSpaceAssignment_1; }
  
  		//AddressSpace
  		public RuleCall getAddressSpaceAddressSpaceParserRuleCall_1_0() { return cAddressSpaceAddressSpaceParserRuleCall_1_0; }
  
  		//"*"
  		public Keyword getAsteriskKeyword_2() { return cAsteriskKeyword_2; }
  	}
  
  	public class TypeElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Type");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cBaseTypeAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final RuleCall cBaseTypeNonLeftRecursiveTypeParserRuleCall_0_0 = (RuleCall)cBaseTypeAssignment_0.eContents().get(0);
  		private final Assignment cStarsAssignment_1 = (Assignment)cGroup.eContents().get(1);
  		private final RuleCall cStarsStarParserRuleCall_1_0 = (RuleCall)cStarsAssignment_1.eContents().get(0);
  		private final Assignment cSuffixesAssignment_2 = (Assignment)cGroup.eContents().get(2);
  		private final RuleCall cSuffixesTypeSuffixParserRuleCall_2_0 = (RuleCall)cSuffixesAssignment_2.eContents().get(0);
  		
  		//Type:
  		//
  		//	baseType=NonLeftRecursiveType // Pointers or functions:
  		//
  		//	stars+=Star* suffixes+=TypeSuffix*;
  		public ParserRule getRule() { return rule; }
  
  		//baseType=NonLeftRecursiveType // Pointers or functions:
  		//
  		//stars+=Star* suffixes+=TypeSuffix*
  		public Group getGroup() { return cGroup; }
  
  		//baseType=NonLeftRecursiveType
  		public Assignment getBaseTypeAssignment_0() { return cBaseTypeAssignment_0; }
  
  		//NonLeftRecursiveType
  		public RuleCall getBaseTypeNonLeftRecursiveTypeParserRuleCall_0_0() { return cBaseTypeNonLeftRecursiveTypeParserRuleCall_0_0; }
  
  		//// Pointers or functions:
  		//
  		//stars+=Star*
  		public Assignment getStarsAssignment_1() { return cStarsAssignment_1; }
  
  		//Star
  		public RuleCall getStarsStarParserRuleCall_1_0() { return cStarsStarParserRuleCall_1_0; }
  
  		//suffixes+=TypeSuffix*
  		public Assignment getSuffixesAssignment_2() { return cSuffixesAssignment_2; }
  
  		//TypeSuffix
  		public RuleCall getSuffixesTypeSuffixParserRuleCall_2_0() { return cSuffixesTypeSuffixParserRuleCall_2_0; }
  	}
  
  	public class TypeSuffixElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "TypeSuffix");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Action cTypeSuffixAction_0 = (Action)cGroup.eContents().get(0);
  		private final Keyword cLeftParenthesisKeyword_1 = (Keyword)cGroup.eContents().get(1);
  		private final Alternatives cAlternatives_2 = (Alternatives)cGroup.eContents().get(2);
  		private final Group cGroup_2_0 = (Group)cAlternatives_2.eContents().get(0);
  		private final Assignment cContainedTypesAssignment_2_0_0 = (Assignment)cGroup_2_0.eContents().get(0);
  		private final RuleCall cContainedTypesParameterTypeParserRuleCall_2_0_0_0 = (RuleCall)cContainedTypesAssignment_2_0_0.eContents().get(0);
  		private final Group cGroup_2_0_1 = (Group)cGroup_2_0.eContents().get(1);
  		private final Keyword cCommaKeyword_2_0_1_0 = (Keyword)cGroup_2_0_1.eContents().get(0);
  		private final Assignment cContainedTypesAssignment_2_0_1_1 = (Assignment)cGroup_2_0_1.eContents().get(1);
  		private final RuleCall cContainedTypesParameterTypeParserRuleCall_2_0_1_1_0 = (RuleCall)cContainedTypesAssignment_2_0_1_1.eContents().get(0);
  		private final Group cGroup_2_0_2 = (Group)cGroup_2_0.eContents().get(2);
  		private final Keyword cCommaKeyword_2_0_2_0 = (Keyword)cGroup_2_0_2.eContents().get(0);
  		private final Assignment cVarargAssignment_2_0_2_1 = (Assignment)cGroup_2_0_2.eContents().get(1);
  		private final Keyword cVarargFullStopFullStopFullStopKeyword_2_0_2_1_0 = (Keyword)cVarargAssignment_2_0_2_1.eContents().get(0);
  		private final Assignment cVarargAssignment_2_1 = (Assignment)cAlternatives_2.eContents().get(1);
  		private final Keyword cVarargFullStopFullStopFullStopKeyword_2_1_0 = (Keyword)cVarargAssignment_2_1.eContents().get(0);
  		private final Keyword cRightParenthesisKeyword_3 = (Keyword)cGroup.eContents().get(3);
  		private final Assignment cStarsAssignment_4 = (Assignment)cGroup.eContents().get(4);
  		private final RuleCall cStarsStarParserRuleCall_4_0 = (RuleCall)cStarsAssignment_4.eContents().get(0);
  		
  		//// A suffix of a function type or a pointer to a function type - basically
  		//
  		//// the entire function type, not including the return type.  
  		//
  		//TypeSuffix:
  		//
  		//	{TypeSuffix} "(" ((containedTypes+=ParameterType ("," containedTypes+=ParameterType)* ("," vararg="...")?)? |
  		//
  		//	vararg="...") ")" stars+=Star*;
  		public ParserRule getRule() { return rule; }
  
  		//{TypeSuffix} "(" ((containedTypes+=ParameterType ("," containedTypes+=ParameterType)* ("," vararg="...")?)? |
  		//
  		//vararg="...") ")" stars+=Star*
  		public Group getGroup() { return cGroup; }
  
  		//{TypeSuffix}
  		public Action getTypeSuffixAction_0() { return cTypeSuffixAction_0; }
  
  		//"("
  		public Keyword getLeftParenthesisKeyword_1() { return cLeftParenthesisKeyword_1; }
  
  		//(containedTypes+=ParameterType ("," containedTypes+=ParameterType)* ("," vararg="...")?)? | vararg="..."
  		public Alternatives getAlternatives_2() { return cAlternatives_2; }
  
  		//(containedTypes+=ParameterType ("," containedTypes+=ParameterType)* ("," vararg="...")?)?
  		public Group getGroup_2_0() { return cGroup_2_0; }
  
  		//containedTypes+=ParameterType
  		public Assignment getContainedTypesAssignment_2_0_0() { return cContainedTypesAssignment_2_0_0; }
  
  		//ParameterType
  		public RuleCall getContainedTypesParameterTypeParserRuleCall_2_0_0_0() { return cContainedTypesParameterTypeParserRuleCall_2_0_0_0; }
  
  		//("," containedTypes+=ParameterType)*
  		public Group getGroup_2_0_1() { return cGroup_2_0_1; }
  
  		//","
  		public Keyword getCommaKeyword_2_0_1_0() { return cCommaKeyword_2_0_1_0; }
  
  		//containedTypes+=ParameterType
  		public Assignment getContainedTypesAssignment_2_0_1_1() { return cContainedTypesAssignment_2_0_1_1; }
  
  		//ParameterType
  		public RuleCall getContainedTypesParameterTypeParserRuleCall_2_0_1_1_0() { return cContainedTypesParameterTypeParserRuleCall_2_0_1_1_0; }
  
  		//("," vararg="...")?
  		public Group getGroup_2_0_2() { return cGroup_2_0_2; }
  
  		//","
  		public Keyword getCommaKeyword_2_0_2_0() { return cCommaKeyword_2_0_2_0; }
  
  		//vararg="..."
  		public Assignment getVarargAssignment_2_0_2_1() { return cVarargAssignment_2_0_2_1; }
  
  		//"..."
  		public Keyword getVarargFullStopFullStopFullStopKeyword_2_0_2_1_0() { return cVarargFullStopFullStopFullStopKeyword_2_0_2_1_0; }
  
  		//vararg="..."
  		public Assignment getVarargAssignment_2_1() { return cVarargAssignment_2_1; }
  
  		//"..."
  		public Keyword getVarargFullStopFullStopFullStopKeyword_2_1_0() { return cVarargFullStopFullStopFullStopKeyword_2_1_0; }
  
  		//")"
  		public Keyword getRightParenthesisKeyword_3() { return cRightParenthesisKeyword_3; }
  
  		//stars+=Star*
  		public Assignment getStarsAssignment_4() { return cStarsAssignment_4; }
  
  		//Star
  		public RuleCall getStarsStarParserRuleCall_4_0() { return cStarsStarParserRuleCall_4_0; }
  	}
  
  	public class NonLeftRecursiveTypeElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "NonLeftRecursiveType");
  		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
  		private final Assignment cTypeAssignment_0 = (Assignment)cAlternatives.eContents().get(0);
  		private final Alternatives cTypeAlternatives_0_0 = (Alternatives)cTypeAssignment_0.eContents().get(0);
  		private final RuleCall cTypeIntTypeParserRuleCall_0_0_0 = (RuleCall)cTypeAlternatives_0_0.eContents().get(0);
  		private final RuleCall cTypeFloatingTypeParserRuleCall_0_0_1 = (RuleCall)cTypeAlternatives_0_0.eContents().get(1);
  		private final RuleCall cTypeVectorTypeParserRuleCall_0_0_2 = (RuleCall)cTypeAlternatives_0_0.eContents().get(2);
  		private final RuleCall cTypeArrayTypeParserRuleCall_0_0_3 = (RuleCall)cTypeAlternatives_0_0.eContents().get(3);
  		private final RuleCall cTypeX86mmxTypeParserRuleCall_0_0_4 = (RuleCall)cTypeAlternatives_0_0.eContents().get(4);
  		private final RuleCall cTypeVoidTypeParserRuleCall_0_0_5 = (RuleCall)cTypeAlternatives_0_0.eContents().get(5);
  		private final RuleCall cTypeMetadataTypeParserRuleCall_0_0_6 = (RuleCall)cTypeAlternatives_0_0.eContents().get(6);
  		private final RuleCall cTypeStructTypeParserRuleCall_0_0_7 = (RuleCall)cTypeAlternatives_0_0.eContents().get(7);
  		private final RuleCall cTypeOpaqueTypeParserRuleCall_0_0_8 = (RuleCall)cTypeAlternatives_0_0.eContents().get(8);
  		private final Assignment cTypedefAssignment_1 = (Assignment)cAlternatives.eContents().get(1);
  		private final CrossReference cTypedefTypeDefCrossReference_1_0 = (CrossReference)cTypedefAssignment_1.eContents().get(0);
  		private final RuleCall cTypedefTypeDefLOCAL_IDTerminalRuleCall_1_0_1 = (RuleCall)cTypedefTypeDefCrossReference_1_0.eContents().get(1);
  		
  		//NonLeftRecursiveType:
  		//
  		//	type=(IntType | FloatingType | VectorType | ArrayType | X86mmxType | VoidType | MetadataType | StructType |
  		//
  		//	OpaqueType) // Complete types:
  		//
  		//	| typedef=[TypeDef|LOCAL_ID];
  		public ParserRule getRule() { return rule; }
  
  		//type=(IntType | FloatingType | VectorType | ArrayType | X86mmxType | VoidType | MetadataType | StructType | OpaqueType) // Complete types:
  		//
  		//| typedef=[TypeDef|LOCAL_ID]
  		public Alternatives getAlternatives() { return cAlternatives; }
  
  		//type=(IntType | FloatingType | VectorType | ArrayType | X86mmxType | VoidType | MetadataType | StructType | OpaqueType)
  		public Assignment getTypeAssignment_0() { return cTypeAssignment_0; }
  
  		//IntType | FloatingType | VectorType | ArrayType | X86mmxType | VoidType | MetadataType | StructType | OpaqueType
  		public Alternatives getTypeAlternatives_0_0() { return cTypeAlternatives_0_0; }
  
  		//IntType
  		public RuleCall getTypeIntTypeParserRuleCall_0_0_0() { return cTypeIntTypeParserRuleCall_0_0_0; }
  
  		//FloatingType
  		public RuleCall getTypeFloatingTypeParserRuleCall_0_0_1() { return cTypeFloatingTypeParserRuleCall_0_0_1; }
  
  		//VectorType
  		public RuleCall getTypeVectorTypeParserRuleCall_0_0_2() { return cTypeVectorTypeParserRuleCall_0_0_2; }
  
  		//ArrayType
  		public RuleCall getTypeArrayTypeParserRuleCall_0_0_3() { return cTypeArrayTypeParserRuleCall_0_0_3; }
  
  		//X86mmxType
  		public RuleCall getTypeX86mmxTypeParserRuleCall_0_0_4() { return cTypeX86mmxTypeParserRuleCall_0_0_4; }
  
  		//VoidType
  		public RuleCall getTypeVoidTypeParserRuleCall_0_0_5() { return cTypeVoidTypeParserRuleCall_0_0_5; }
  
  		//MetadataType
  		public RuleCall getTypeMetadataTypeParserRuleCall_0_0_6() { return cTypeMetadataTypeParserRuleCall_0_0_6; }
  
  		//StructType
  		public RuleCall getTypeStructTypeParserRuleCall_0_0_7() { return cTypeStructTypeParserRuleCall_0_0_7; }
  
  		//OpaqueType
  		public RuleCall getTypeOpaqueTypeParserRuleCall_0_0_8() { return cTypeOpaqueTypeParserRuleCall_0_0_8; }
  
  		//typedef=[TypeDef|LOCAL_ID]
  		public Assignment getTypedefAssignment_1() { return cTypedefAssignment_1; }
  
  		//[TypeDef|LOCAL_ID]
  		public CrossReference getTypedefTypeDefCrossReference_1_0() { return cTypedefTypeDefCrossReference_1_0; }
  
  		//LOCAL_ID
  		public RuleCall getTypedefTypeDefLOCAL_IDTerminalRuleCall_1_0_1() { return cTypedefTypeDefLOCAL_IDTerminalRuleCall_1_0_1; }
  	}
  
  	public class NonLeftRecursiveNonVoidTypeElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "NonLeftRecursiveNonVoidType");
  		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
  		private final Assignment cTypeAssignment_0 = (Assignment)cAlternatives.eContents().get(0);
  		private final Alternatives cTypeAlternatives_0_0 = (Alternatives)cTypeAssignment_0.eContents().get(0);
  		private final RuleCall cTypeIntTypeParserRuleCall_0_0_0 = (RuleCall)cTypeAlternatives_0_0.eContents().get(0);
  		private final RuleCall cTypeFloatingTypeParserRuleCall_0_0_1 = (RuleCall)cTypeAlternatives_0_0.eContents().get(1);
  		private final RuleCall cTypeVectorTypeParserRuleCall_0_0_2 = (RuleCall)cTypeAlternatives_0_0.eContents().get(2);
  		private final RuleCall cTypeArrayTypeParserRuleCall_0_0_3 = (RuleCall)cTypeAlternatives_0_0.eContents().get(3);
  		private final RuleCall cTypeX86mmxTypeParserRuleCall_0_0_4 = (RuleCall)cTypeAlternatives_0_0.eContents().get(4);
  		private final RuleCall cTypeMetadataTypeParserRuleCall_0_0_5 = (RuleCall)cTypeAlternatives_0_0.eContents().get(5);
  		private final RuleCall cTypeStructTypeParserRuleCall_0_0_6 = (RuleCall)cTypeAlternatives_0_0.eContents().get(6);
  		private final RuleCall cTypeOpaqueTypeParserRuleCall_0_0_7 = (RuleCall)cTypeAlternatives_0_0.eContents().get(7);
  		private final Assignment cTypedefAssignment_1 = (Assignment)cAlternatives.eContents().get(1);
  		private final CrossReference cTypedefTypeDefCrossReference_1_0 = (CrossReference)cTypedefAssignment_1.eContents().get(0);
  		private final RuleCall cTypedefTypeDefLOCAL_IDTerminalRuleCall_1_0_1 = (RuleCall)cTypedefTypeDefCrossReference_1_0.eContents().get(1);
  		
  		//NonLeftRecursiveNonVoidType:
  		//
  		//	type=(IntType | FloatingType | VectorType | ArrayType | X86mmxType | MetadataType | StructType | OpaqueType) // Complete types:
  		//
  		//	| typedef=[TypeDef|LOCAL_ID];
  		public ParserRule getRule() { return rule; }
  
  		//type=(IntType | FloatingType | VectorType | ArrayType | X86mmxType | MetadataType | StructType | OpaqueType) // Complete types:
  		//
  		//| typedef=[TypeDef|LOCAL_ID]
  		public Alternatives getAlternatives() { return cAlternatives; }
  
  		//type=(IntType | FloatingType | VectorType | ArrayType | X86mmxType | MetadataType | StructType | OpaqueType)
  		public Assignment getTypeAssignment_0() { return cTypeAssignment_0; }
  
  		//IntType | FloatingType | VectorType | ArrayType | X86mmxType | MetadataType | StructType | OpaqueType
  		public Alternatives getTypeAlternatives_0_0() { return cTypeAlternatives_0_0; }
  
  		//IntType
  		public RuleCall getTypeIntTypeParserRuleCall_0_0_0() { return cTypeIntTypeParserRuleCall_0_0_0; }
  
  		//FloatingType
  		public RuleCall getTypeFloatingTypeParserRuleCall_0_0_1() { return cTypeFloatingTypeParserRuleCall_0_0_1; }
  
  		//VectorType
  		public RuleCall getTypeVectorTypeParserRuleCall_0_0_2() { return cTypeVectorTypeParserRuleCall_0_0_2; }
  
  		//ArrayType
  		public RuleCall getTypeArrayTypeParserRuleCall_0_0_3() { return cTypeArrayTypeParserRuleCall_0_0_3; }
  
  		//X86mmxType
  		public RuleCall getTypeX86mmxTypeParserRuleCall_0_0_4() { return cTypeX86mmxTypeParserRuleCall_0_0_4; }
  
  		//MetadataType
  		public RuleCall getTypeMetadataTypeParserRuleCall_0_0_5() { return cTypeMetadataTypeParserRuleCall_0_0_5; }
  
  		//StructType
  		public RuleCall getTypeStructTypeParserRuleCall_0_0_6() { return cTypeStructTypeParserRuleCall_0_0_6; }
  
  		//OpaqueType
  		public RuleCall getTypeOpaqueTypeParserRuleCall_0_0_7() { return cTypeOpaqueTypeParserRuleCall_0_0_7; }
  
  		//typedef=[TypeDef|LOCAL_ID]
  		public Assignment getTypedefAssignment_1() { return cTypedefAssignment_1; }
  
  		//[TypeDef|LOCAL_ID]
  		public CrossReference getTypedefTypeDefCrossReference_1_0() { return cTypedefTypeDefCrossReference_1_0; }
  
  		//LOCAL_ID
  		public RuleCall getTypedefTypeDefLOCAL_IDTerminalRuleCall_1_0_1() { return cTypedefTypeDefLOCAL_IDTerminalRuleCall_1_0_1; }
  	}
  
  	public class TypeDefElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "TypeDef");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Assignment cNameAssignment_0 = (Assignment)cGroup.eContents().get(0);
  		private final RuleCall cNameLocalNameParserRuleCall_0_0 = (RuleCall)cNameAssignment_0.eContents().get(0);
  		private final Keyword cTypeKeyword_1 = (Keyword)cGroup.eContents().get(1);
  		private final Assignment cTypeAssignment_2 = (Assignment)cGroup.eContents().get(2);
  		private final RuleCall cTypeNonVoidTypeParserRuleCall_2_0 = (RuleCall)cTypeAssignment_2.eContents().get(0);
  		
  		//TypeDef:
  		//
  		//	name=LocalName "type" type=NonVoidType;
  		public ParserRule getRule() { return rule; }
  
  		//name=LocalName "type" type=NonVoidType
  		public Group getGroup() { return cGroup; }
  
  		//name=LocalName
  		public Assignment getNameAssignment_0() { return cNameAssignment_0; }
  
  		//LocalName
  		public RuleCall getNameLocalNameParserRuleCall_0_0() { return cNameLocalNameParserRuleCall_0_0; }
  
  		//"type"
  		public Keyword getTypeKeyword_1() { return cTypeKeyword_1; }
  
  		//type=NonVoidType
  		public Assignment getTypeAssignment_2() { return cTypeAssignment_2; }
  
  		//NonVoidType
  		public RuleCall getTypeNonVoidTypeParserRuleCall_2_0() { return cTypeNonVoidTypeParserRuleCall_2_0; }
  	}
  
  	public class BinaryOpcodeElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "BinaryOpcode");
  		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
  		private final Keyword cMovKeyword_0 = (Keyword)cAlternatives.eContents().get(0);
  		private final Keyword cAddKeyword_1 = (Keyword)cAlternatives.eContents().get(1);
  		private final Keyword cSubKeyword_2 = (Keyword)cAlternatives.eContents().get(2);
  		
  		//BinaryOpcode:
  		//
  		//	"mov" | "add" | "sub";
  		public ParserRule getRule() { return rule; }
  
  		//"mov" | "add" | "sub"
  		public Alternatives getAlternatives() { return cAlternatives; }
  
  		//"mov"
  		public Keyword getMovKeyword_0() { return cMovKeyword_0; }
  
  		//"add"
  		public Keyword getAddKeyword_1() { return cAddKeyword_1; }
  
  		//"sub"
  		public Keyword getSubKeyword_2() { return cSubKeyword_2; }
  	}
  
  	public class IntTypeElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "IntType");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final RuleCall cINT_TYPETerminalRuleCall_0 = (RuleCall)cGroup.eContents().get(0);
  		private final Action cIntTypeAction_1 = (Action)cGroup.eContents().get(1);
  		
  		//IntType:
  		//
  		//	INT_TYPE {IntType};
  		public ParserRule getRule() { return rule; }
  
  		//INT_TYPE {IntType}
  		public Group getGroup() { return cGroup; }
  
  		//INT_TYPE
  		public RuleCall getINT_TYPETerminalRuleCall_0() { return cINT_TYPETerminalRuleCall_0; }
  
  		//{IntType}
  		public Action getIntTypeAction_1() { return cIntTypeAction_1; }
  	}
  
  	public class OpaqueTypeElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "OpaqueType");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Keyword cOpaqueKeyword_0 = (Keyword)cGroup.eContents().get(0);
  		private final Action cOpaqueTypeAction_1 = (Action)cGroup.eContents().get(1);
  		
  		//OpaqueType:
  		//
  		//	"opaque" {OpaqueType};
  		public ParserRule getRule() { return rule; }
  
  		//"opaque" {OpaqueType}
  		public Group getGroup() { return cGroup; }
  
  		//"opaque"
  		public Keyword getOpaqueKeyword_0() { return cOpaqueKeyword_0; }
  
  		//{OpaqueType}
  		public Action getOpaqueTypeAction_1() { return cOpaqueTypeAction_1; }
  	}
  
  	public class StructTypeElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "StructType");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Action cStructTypeAction_0 = (Action)cGroup.eContents().get(0);
  		private final Alternatives cAlternatives_1 = (Alternatives)cGroup.eContents().get(1);
  		private final Group cGroup_1_0 = (Group)cAlternatives_1.eContents().get(0);
  		private final Keyword cLeftCurlyBracketKeyword_1_0_0 = (Keyword)cGroup_1_0.eContents().get(0);
  		private final Group cGroup_1_0_1 = (Group)cGroup_1_0.eContents().get(1);
  		private final Assignment cTypesAssignment_1_0_1_0 = (Assignment)cGroup_1_0_1.eContents().get(0);
  		private final RuleCall cTypesTypeParserRuleCall_1_0_1_0_0 = (RuleCall)cTypesAssignment_1_0_1_0.eContents().get(0);
  		private final Group cGroup_1_0_1_1 = (Group)cGroup_1_0_1.eContents().get(1);
  		private final Keyword cCommaKeyword_1_0_1_1_0 = (Keyword)cGroup_1_0_1_1.eContents().get(0);
  		private final Assignment cTypesAssignment_1_0_1_1_1 = (Assignment)cGroup_1_0_1_1.eContents().get(1);
  		private final RuleCall cTypesTypeParserRuleCall_1_0_1_1_1_0 = (RuleCall)cTypesAssignment_1_0_1_1_1.eContents().get(0);
  		private final Keyword cRightCurlyBracketKeyword_1_0_2 = (Keyword)cGroup_1_0.eContents().get(2);
  		private final Group cGroup_1_1 = (Group)cAlternatives_1.eContents().get(1);
  		private final Assignment cPackedAssignment_1_1_0 = (Assignment)cGroup_1_1.eContents().get(0);
  		private final Keyword cPackedLessThanSignKeyword_1_1_0_0 = (Keyword)cPackedAssignment_1_1_0.eContents().get(0);
  		private final Keyword cLeftCurlyBracketKeyword_1_1_1 = (Keyword)cGroup_1_1.eContents().get(1);
  		private final Group cGroup_1_1_2 = (Group)cGroup_1_1.eContents().get(2);
  		private final Assignment cTypesAssignment_1_1_2_0 = (Assignment)cGroup_1_1_2.eContents().get(0);
  		private final RuleCall cTypesTypeParserRuleCall_1_1_2_0_0 = (RuleCall)cTypesAssignment_1_1_2_0.eContents().get(0);
  		private final Group cGroup_1_1_2_1 = (Group)cGroup_1_1_2.eContents().get(1);
  		private final Keyword cCommaKeyword_1_1_2_1_0 = (Keyword)cGroup_1_1_2_1.eContents().get(0);
  		private final Assignment cTypesAssignment_1_1_2_1_1 = (Assignment)cGroup_1_1_2_1.eContents().get(1);
  		private final RuleCall cTypesTypeParserRuleCall_1_1_2_1_1_0 = (RuleCall)cTypesAssignment_1_1_2_1_1.eContents().get(0);
  		private final Keyword cRightCurlyBracketKeyword_1_1_3 = (Keyword)cGroup_1_1.eContents().get(3);
  		private final Keyword cGreaterThanSignKeyword_1_1_4 = (Keyword)cGroup_1_1.eContents().get(4);
  		
  		//StructType:
  		//
  		//	{StructType} ("{" (types+=Type ("," types+=Type)*)? "}" | packed="<" "{" (types+=Type ("," types+=Type)*)? "}" ">");
  		public ParserRule getRule() { return rule; }
  
  		//{StructType} ("{" (types+=Type ("," types+=Type)*)? "}" | packed="<" "{" (types+=Type ("," types+=Type)*)? "}" ">")
  		public Group getGroup() { return cGroup; }
  
  		//{StructType}
  		public Action getStructTypeAction_0() { return cStructTypeAction_0; }
  
  		//"{" (types+=Type ("," types+=Type)*)? "}" | packed="<" "{" (types+=Type ("," types+=Type)*)? "}" ">"
  		public Alternatives getAlternatives_1() { return cAlternatives_1; }
  
  		//"{" (types+=Type ("," types+=Type)*)? "}"
  		public Group getGroup_1_0() { return cGroup_1_0; }
  
  		//"{"
  		public Keyword getLeftCurlyBracketKeyword_1_0_0() { return cLeftCurlyBracketKeyword_1_0_0; }
  
  		//(types+=Type ("," types+=Type)*)?
  		public Group getGroup_1_0_1() { return cGroup_1_0_1; }
  
  		//types+=Type
  		public Assignment getTypesAssignment_1_0_1_0() { return cTypesAssignment_1_0_1_0; }
  
  		//Type
  		public RuleCall getTypesTypeParserRuleCall_1_0_1_0_0() { return cTypesTypeParserRuleCall_1_0_1_0_0; }
  
  		//("," types+=Type)*
  		public Group getGroup_1_0_1_1() { return cGroup_1_0_1_1; }
  
  		//","
  		public Keyword getCommaKeyword_1_0_1_1_0() { return cCommaKeyword_1_0_1_1_0; }
  
  		//types+=Type
  		public Assignment getTypesAssignment_1_0_1_1_1() { return cTypesAssignment_1_0_1_1_1; }
  
  		//Type
  		public RuleCall getTypesTypeParserRuleCall_1_0_1_1_1_0() { return cTypesTypeParserRuleCall_1_0_1_1_1_0; }
  
  		//"}"
  		public Keyword getRightCurlyBracketKeyword_1_0_2() { return cRightCurlyBracketKeyword_1_0_2; }
  
  		//packed="<" "{" (types+=Type ("," types+=Type)*)? "}" ">"
  		public Group getGroup_1_1() { return cGroup_1_1; }
  
  		//packed="<"
  		public Assignment getPackedAssignment_1_1_0() { return cPackedAssignment_1_1_0; }
  
  		//"<"
  		public Keyword getPackedLessThanSignKeyword_1_1_0_0() { return cPackedLessThanSignKeyword_1_1_0_0; }
  
  		//"{"
  		public Keyword getLeftCurlyBracketKeyword_1_1_1() { return cLeftCurlyBracketKeyword_1_1_1; }
  
  		//(types+=Type ("," types+=Type)*)?
  		public Group getGroup_1_1_2() { return cGroup_1_1_2; }
  
  		//types+=Type
  		public Assignment getTypesAssignment_1_1_2_0() { return cTypesAssignment_1_1_2_0; }
  
  		//Type
  		public RuleCall getTypesTypeParserRuleCall_1_1_2_0_0() { return cTypesTypeParserRuleCall_1_1_2_0_0; }
  
  		//("," types+=Type)*
  		public Group getGroup_1_1_2_1() { return cGroup_1_1_2_1; }
  
  		//","
  		public Keyword getCommaKeyword_1_1_2_1_0() { return cCommaKeyword_1_1_2_1_0; }
  
  		//types+=Type
  		public Assignment getTypesAssignment_1_1_2_1_1() { return cTypesAssignment_1_1_2_1_1; }
  
  		//Type
  		public RuleCall getTypesTypeParserRuleCall_1_1_2_1_1_0() { return cTypesTypeParserRuleCall_1_1_2_1_1_0; }
  
  		//"}"
  		public Keyword getRightCurlyBracketKeyword_1_1_3() { return cRightCurlyBracketKeyword_1_1_3; }
  
  		//">"
  		public Keyword getGreaterThanSignKeyword_1_1_4() { return cGreaterThanSignKeyword_1_1_4; }
  	}
  
  	public class VectorTypeElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "VectorType");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Keyword cLessThanSignKeyword_0 = (Keyword)cGroup.eContents().get(0);
  		private final Assignment cSizeAssignment_1 = (Assignment)cGroup.eContents().get(1);
  		private final RuleCall cSizeINTEGERTerminalRuleCall_1_0 = (RuleCall)cSizeAssignment_1.eContents().get(0);
  		private final Keyword cXKeyword_2 = (Keyword)cGroup.eContents().get(2);
  		private final Assignment cElemTypeAssignment_3 = (Assignment)cGroup.eContents().get(3);
  		private final RuleCall cElemTypeTypeParserRuleCall_3_0 = (RuleCall)cElemTypeAssignment_3.eContents().get(0);
  		private final Keyword cGreaterThanSignKeyword_4 = (Keyword)cGroup.eContents().get(4);
  		
  		//VectorType:
  		//
  		//	"<" size=INTEGER "x" elemType=Type ">";
  		public ParserRule getRule() { return rule; }
  
  		//"<" size=INTEGER "x" elemType=Type ">"
  		public Group getGroup() { return cGroup; }
  
  		//"<"
  		public Keyword getLessThanSignKeyword_0() { return cLessThanSignKeyword_0; }
  
  		//size=INTEGER
  		public Assignment getSizeAssignment_1() { return cSizeAssignment_1; }
  
  		//INTEGER
  		public RuleCall getSizeINTEGERTerminalRuleCall_1_0() { return cSizeINTEGERTerminalRuleCall_1_0; }
  
  		//"x"
  		public Keyword getXKeyword_2() { return cXKeyword_2; }
  
  		//elemType=Type
  		public Assignment getElemTypeAssignment_3() { return cElemTypeAssignment_3; }
  
  		//Type
  		public RuleCall getElemTypeTypeParserRuleCall_3_0() { return cElemTypeTypeParserRuleCall_3_0; }
  
  		//">"
  		public Keyword getGreaterThanSignKeyword_4() { return cGreaterThanSignKeyword_4; }
  	}
  
  	public class ArrayTypeElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ArrayType");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Keyword cLeftSquareBracketKeyword_0 = (Keyword)cGroup.eContents().get(0);
  		private final Assignment cSizeAssignment_1 = (Assignment)cGroup.eContents().get(1);
  		private final RuleCall cSizeINTEGERTerminalRuleCall_1_0 = (RuleCall)cSizeAssignment_1.eContents().get(0);
  		private final Keyword cXKeyword_2 = (Keyword)cGroup.eContents().get(2);
  		private final Assignment cElemTypeAssignment_3 = (Assignment)cGroup.eContents().get(3);
  		private final RuleCall cElemTypeTypeParserRuleCall_3_0 = (RuleCall)cElemTypeAssignment_3.eContents().get(0);
  		private final Keyword cRightSquareBracketKeyword_4 = (Keyword)cGroup.eContents().get(4);
  		
  		//ArrayType:
  		//
  		//	"[" size=INTEGER "x" elemType=Type "]";
  		public ParserRule getRule() { return rule; }
  
  		//"[" size=INTEGER "x" elemType=Type "]"
  		public Group getGroup() { return cGroup; }
  
  		//"["
  		public Keyword getLeftSquareBracketKeyword_0() { return cLeftSquareBracketKeyword_0; }
  
  		//size=INTEGER
  		public Assignment getSizeAssignment_1() { return cSizeAssignment_1; }
  
  		//INTEGER
  		public RuleCall getSizeINTEGERTerminalRuleCall_1_0() { return cSizeINTEGERTerminalRuleCall_1_0; }
  
  		//"x"
  		public Keyword getXKeyword_2() { return cXKeyword_2; }
  
  		//elemType=Type
  		public Assignment getElemTypeAssignment_3() { return cElemTypeAssignment_3; }
  
  		//Type
  		public RuleCall getElemTypeTypeParserRuleCall_3_0() { return cElemTypeTypeParserRuleCall_3_0; }
  
  		//"]"
  		public Keyword getRightSquareBracketKeyword_4() { return cRightSquareBracketKeyword_4; }
  	}
  
  	public class X86mmxTypeElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "X86mmxType");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Keyword cX86_mmxKeyword_0 = (Keyword)cGroup.eContents().get(0);
  		private final Action cX86mmxTypeAction_1 = (Action)cGroup.eContents().get(1);
  		
  		//X86mmxType:
  		//
  		//	"x86_mmx" {X86mmxType};
  		public ParserRule getRule() { return rule; }
  
  		//"x86_mmx" {X86mmxType}
  		public Group getGroup() { return cGroup; }
  
  		//"x86_mmx"
  		public Keyword getX86_mmxKeyword_0() { return cX86_mmxKeyword_0; }
  
  		//{X86mmxType}
  		public Action getX86mmxTypeAction_1() { return cX86mmxTypeAction_1; }
  	}
  
  	public class VoidTypeElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "VoidType");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Keyword cVoidKeyword_0 = (Keyword)cGroup.eContents().get(0);
  		private final Action cVoidTypeAction_1 = (Action)cGroup.eContents().get(1);
  		
  		//VoidType:
  		//
  		//	"void" {VoidType};
  		public ParserRule getRule() { return rule; }
  
  		//"void" {VoidType}
  		public Group getGroup() { return cGroup; }
  
  		//"void"
  		public Keyword getVoidKeyword_0() { return cVoidKeyword_0; }
  
  		//{VoidType}
  		public Action getVoidTypeAction_1() { return cVoidTypeAction_1; }
  	}
  
  	public class MetadataTypeElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "MetadataType");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Keyword cMetadataKeyword_0 = (Keyword)cGroup.eContents().get(0);
  		private final Action cMetadataTypeAction_1 = (Action)cGroup.eContents().get(1);
  		
  		//MetadataType:
  		//
  		//	"metadata" {MetadataType};
  		public ParserRule getRule() { return rule; }
  
  		//"metadata" {MetadataType}
  		public Group getGroup() { return cGroup; }
  
  		//"metadata"
  		public Keyword getMetadataKeyword_0() { return cMetadataKeyword_0; }
  
  		//{MetadataType}
  		public Action getMetadataTypeAction_1() { return cMetadataTypeAction_1; }
  	}
  
  	public class FloatingTypeElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "FloatingType");
  		private final Group cGroup = (Group)rule.eContents().get(1);
  		private final Alternatives cAlternatives_0 = (Alternatives)cGroup.eContents().get(0);
  		private final Keyword cHalfKeyword_0_0 = (Keyword)cAlternatives_0.eContents().get(0);
  		private final Keyword cFloatKeyword_0_1 = (Keyword)cAlternatives_0.eContents().get(1);
  		private final Keyword cDoubleKeyword_0_2 = (Keyword)cAlternatives_0.eContents().get(2);
  		private final Keyword cFp128Keyword_0_3 = (Keyword)cAlternatives_0.eContents().get(3);
  		private final Keyword cX86_fp80Keyword_0_4 = (Keyword)cAlternatives_0.eContents().get(4);
  		private final Keyword cPpc_fp128Keyword_0_5 = (Keyword)cAlternatives_0.eContents().get(5);
  		private final Action cFloatingTypeAction_1 = (Action)cGroup.eContents().get(1);
  		
  		//FloatingType:
  		//
  		//	("half" | "float" | "double" | "fp128" | "x86_fp80" | "ppc_fp128") {FloatingType};
  		public ParserRule getRule() { return rule; }
  
  		//("half" | "float" | "double" | "fp128" | "x86_fp80" | "ppc_fp128") {FloatingType}
  		public Group getGroup() { return cGroup; }
  
  		//"half" | "float" | "double" | "fp128" | "x86_fp80" | "ppc_fp128"
  		public Alternatives getAlternatives_0() { return cAlternatives_0; }
  
  		//"half"
  		public Keyword getHalfKeyword_0_0() { return cHalfKeyword_0_0; }
  
  		//"float"
  		public Keyword getFloatKeyword_0_1() { return cFloatKeyword_0_1; }
  
  		//"double"
  		public Keyword getDoubleKeyword_0_2() { return cDoubleKeyword_0_2; }
  
  		//"fp128"
  		public Keyword getFp128Keyword_0_3() { return cFp128Keyword_0_3; }
  
  		//"x86_fp80"
  		public Keyword getX86_fp80Keyword_0_4() { return cX86_fp80Keyword_0_4; }
  
  		//"ppc_fp128"
  		public Keyword getPpc_fp128Keyword_0_5() { return cPpc_fp128Keyword_0_5; }
  
  		//{FloatingType}
  		public Action getFloatingTypeAction_1() { return cFloatingTypeAction_1; }
  	}
  
  	public class LinkageElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Linkage");
  		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
  		private final Keyword cPrivateKeyword_0 = (Keyword)cAlternatives.eContents().get(0);
  		private final Keyword cLinker_privateKeyword_1 = (Keyword)cAlternatives.eContents().get(1);
  		private final Keyword cLinker_private_weakKeyword_2 = (Keyword)cAlternatives.eContents().get(2);
  		private final Keyword cLinker_private_weak_def_autoKeyword_3 = (Keyword)cAlternatives.eContents().get(3);
  		private final Keyword cInternalKeyword_4 = (Keyword)cAlternatives.eContents().get(4);
  		private final Keyword cAvailable_externallyKeyword_5 = (Keyword)cAlternatives.eContents().get(5);
  		private final Keyword cLinkonceKeyword_6 = (Keyword)cAlternatives.eContents().get(6);
  		private final Keyword cWeakKeyword_7 = (Keyword)cAlternatives.eContents().get(7);
  		private final Keyword cCommonKeyword_8 = (Keyword)cAlternatives.eContents().get(8);
  		private final Keyword cAppendingKeyword_9 = (Keyword)cAlternatives.eContents().get(9);
  		private final Keyword cExtern_weakKeyword_10 = (Keyword)cAlternatives.eContents().get(10);
  		private final Keyword cLinkonce_odrKeyword_11 = (Keyword)cAlternatives.eContents().get(11);
  		private final Keyword cWeak_odrKeyword_12 = (Keyword)cAlternatives.eContents().get(12);
  		private final Keyword cExternalKeyword_13 = (Keyword)cAlternatives.eContents().get(13);
  		private final Keyword cDllimportKeyword_14 = (Keyword)cAlternatives.eContents().get(14);
  		private final Keyword cDllexportKeyword_15 = (Keyword)cAlternatives.eContents().get(15);
  		
  		//Linkage:
  		//
  		//	"private" | "linker_private" | "linker_private_weak" | "linker_private_weak_def_auto" | "internal" |
  		//
  		//	"available_externally" | "linkonce" | "weak" | "common" | "appending" | "extern_weak" | "linkonce_odr" | "weak_odr" |
  		//
  		//	"external" | "dllimport" | "dllexport";
  		public ParserRule getRule() { return rule; }
  
  		//"private" | "linker_private" | "linker_private_weak" | "linker_private_weak_def_auto" | "internal" |
  		//
  		//"available_externally" | "linkonce" | "weak" | "common" | "appending" | "extern_weak" | "linkonce_odr" | "weak_odr" |
  		//
  		//"external" | "dllimport" | "dllexport"
  		public Alternatives getAlternatives() { return cAlternatives; }
  
  		//"private"
  		public Keyword getPrivateKeyword_0() { return cPrivateKeyword_0; }
  
  		//"linker_private"
  		public Keyword getLinker_privateKeyword_1() { return cLinker_privateKeyword_1; }
  
  		//"linker_private_weak"
  		public Keyword getLinker_private_weakKeyword_2() { return cLinker_private_weakKeyword_2; }
  
  		//"linker_private_weak_def_auto"
  		public Keyword getLinker_private_weak_def_autoKeyword_3() { return cLinker_private_weak_def_autoKeyword_3; }
  
  		//"internal"
  		public Keyword getInternalKeyword_4() { return cInternalKeyword_4; }
  
  		//"available_externally"
  		public Keyword getAvailable_externallyKeyword_5() { return cAvailable_externallyKeyword_5; }
  
  		//"linkonce"
  		public Keyword getLinkonceKeyword_6() { return cLinkonceKeyword_6; }
  
  		//"weak"
  		public Keyword getWeakKeyword_7() { return cWeakKeyword_7; }
  
  		//"common"
  		public Keyword getCommonKeyword_8() { return cCommonKeyword_8; }
  
  		//"appending"
  		public Keyword getAppendingKeyword_9() { return cAppendingKeyword_9; }
  
  		//"extern_weak"
  		public Keyword getExtern_weakKeyword_10() { return cExtern_weakKeyword_10; }
  
  		//"linkonce_odr"
  		public Keyword getLinkonce_odrKeyword_11() { return cLinkonce_odrKeyword_11; }
  
  		//"weak_odr"
  		public Keyword getWeak_odrKeyword_12() { return cWeak_odrKeyword_12; }
  
  		//"external"
  		public Keyword getExternalKeyword_13() { return cExternalKeyword_13; }
  
  		//"dllimport"
  		public Keyword getDllimportKeyword_14() { return cDllimportKeyword_14; }
  
  		//"dllexport"
  		public Keyword getDllexportKeyword_15() { return cDllexportKeyword_15; }
  	}
  
  	public class CConvElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "CConv");
  		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
  		private final Assignment cValAssignment_0 = (Assignment)cAlternatives.eContents().get(0);
  		private final Alternatives cValAlternatives_0_0 = (Alternatives)cValAssignment_0.eContents().get(0);
  		private final Keyword cValCccKeyword_0_0_0 = (Keyword)cValAlternatives_0_0.eContents().get(0);
  		private final Keyword cValFastccKeyword_0_0_1 = (Keyword)cValAlternatives_0_0.eContents().get(1);
  		private final Keyword cValColdccKeyword_0_0_2 = (Keyword)cValAlternatives_0_0.eContents().get(2);
  		private final Keyword cValWebkit_jsccKeyword_0_0_3 = (Keyword)cValAlternatives_0_0.eContents().get(3);
  		private final Keyword cValAnyregccKeyword_0_0_4 = (Keyword)cValAlternatives_0_0.eContents().get(4);
  		private final Keyword cValPreserve_mostccKeyword_0_0_5 = (Keyword)cValAlternatives_0_0.eContents().get(5);
  		private final Keyword cValPreserve_allccKeyword_0_0_6 = (Keyword)cValAlternatives_0_0.eContents().get(6);
  		private final Keyword cValIntel_ocl_biccKeyword_0_0_7 = (Keyword)cValAlternatives_0_0.eContents().get(7);
  		private final Keyword cValX86_stdcallccKeyword_0_0_8 = (Keyword)cValAlternatives_0_0.eContents().get(8);
  		private final Keyword cValX86_fastcallccKeyword_0_0_9 = (Keyword)cValAlternatives_0_0.eContents().get(9);
  		private final Keyword cValX86_thiscallccKeyword_0_0_10 = (Keyword)cValAlternatives_0_0.eContents().get(10);
  		private final Keyword cValArm_apcsccKeyword_0_0_11 = (Keyword)cValAlternatives_0_0.eContents().get(11);
  		private final Keyword cValArm_aapcsccKeyword_0_0_12 = (Keyword)cValAlternatives_0_0.eContents().get(12);
  		private final Keyword cValArm_aapcs_vfpccKeyword_0_0_13 = (Keyword)cValAlternatives_0_0.eContents().get(13);
  		private final Keyword cValMsp430_intrccKeyword_0_0_14 = (Keyword)cValAlternatives_0_0.eContents().get(14);
  		private final Keyword cValPtx_kernelKeyword_0_0_15 = (Keyword)cValAlternatives_0_0.eContents().get(15);
  		private final Keyword cValPtx_deviceKeyword_0_0_16 = (Keyword)cValAlternatives_0_0.eContents().get(16);
  		private final Keyword cValSpir_kernelKeyword_0_0_17 = (Keyword)cValAlternatives_0_0.eContents().get(17);
  		private final Keyword cValSpir_funcKeyword_0_0_18 = (Keyword)cValAlternatives_0_0.eContents().get(18);
  		private final Keyword cValX86_64_sysvccKeyword_0_0_19 = (Keyword)cValAlternatives_0_0.eContents().get(19);
  		private final Keyword cValX86_64_win64ccKeyword_0_0_20 = (Keyword)cValAlternatives_0_0.eContents().get(20);
  		private final Group cGroup_1 = (Group)cAlternatives.eContents().get(1);
  		private final Assignment cValAssignment_1_0 = (Assignment)cGroup_1.eContents().get(0);
  		private final Keyword cValCcKeyword_1_0_0 = (Keyword)cValAssignment_1_0.eContents().get(0);
  		private final Assignment cCustomNumberAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
  		private final RuleCall cCustomNumberINTEGERTerminalRuleCall_1_1_0 = (RuleCall)cCustomNumberAssignment_1_1.eContents().get(0);
  		
  		//CConv:
  		//
  		//	val=("ccc" | "fastcc" | "coldcc" | "webkit_jscc" | "anyregcc" | "preserve_mostcc" | "preserve_allcc" | // The following are not documented in the langref:
  		//
  		//	"intel_ocl_bicc" | "x86_stdcallcc" | "x86_fastcallcc" | "x86_thiscallcc" | "arm_apcscc" | "arm_aapcscc" |
  		//
  		//	"arm_aapcs_vfpcc" | "msp430_intrcc" | "ptx_kernel" | "ptx_device" | "spir_kernel" | "spir_func" | "x86_64_sysvcc" |
  		//
  		//	"x86_64_win64cc") | // Custom
  		//
  		//	val="cc" customNumber=INTEGER;
  		public ParserRule getRule() { return rule; }
  
  		//val=("ccc" | "fastcc" | "coldcc" | "webkit_jscc" | "anyregcc" | "preserve_mostcc" | "preserve_allcc" | // The following are not documented in the langref:
  		//
  		//"intel_ocl_bicc" | "x86_stdcallcc" | "x86_fastcallcc" | "x86_thiscallcc" | "arm_apcscc" | "arm_aapcscc" |
  		//
  		//"arm_aapcs_vfpcc" | "msp430_intrcc" | "ptx_kernel" | "ptx_device" | "spir_kernel" | "spir_func" | "x86_64_sysvcc" |
  		//
  		//"x86_64_win64cc") | // Custom
  		//
  		//val="cc" customNumber=INTEGER
  		public Alternatives getAlternatives() { return cAlternatives; }
  
  		//val=("ccc" | "fastcc" | "coldcc" | "webkit_jscc" | "anyregcc" | "preserve_mostcc" | "preserve_allcc" | // The following are not documented in the langref:
  		//
  		//"intel_ocl_bicc" | "x86_stdcallcc" | "x86_fastcallcc" | "x86_thiscallcc" | "arm_apcscc" | "arm_aapcscc" |
  		//
  		//"arm_aapcs_vfpcc" | "msp430_intrcc" | "ptx_kernel" | "ptx_device" | "spir_kernel" | "spir_func" | "x86_64_sysvcc" |
  		//
  		//"x86_64_win64cc")
  		public Assignment getValAssignment_0() { return cValAssignment_0; }
  
  		//"ccc" | "fastcc" | "coldcc" | "webkit_jscc" | "anyregcc" | "preserve_mostcc" | "preserve_allcc" | // The following are not documented in the langref:
  		//
  		//"intel_ocl_bicc" | "x86_stdcallcc" | "x86_fastcallcc" | "x86_thiscallcc" | "arm_apcscc" | "arm_aapcscc" |
  		//
  		//"arm_aapcs_vfpcc" | "msp430_intrcc" | "ptx_kernel" | "ptx_device" | "spir_kernel" | "spir_func" | "x86_64_sysvcc" |
  		//
  		//"x86_64_win64cc"
  		public Alternatives getValAlternatives_0_0() { return cValAlternatives_0_0; }
  
  		//"ccc"
  		public Keyword getValCccKeyword_0_0_0() { return cValCccKeyword_0_0_0; }
  
  		//"fastcc"
  		public Keyword getValFastccKeyword_0_0_1() { return cValFastccKeyword_0_0_1; }
  
  		//"coldcc"
  		public Keyword getValColdccKeyword_0_0_2() { return cValColdccKeyword_0_0_2; }
  
  		//"webkit_jscc"
  		public Keyword getValWebkit_jsccKeyword_0_0_3() { return cValWebkit_jsccKeyword_0_0_3; }
  
  		//"anyregcc"
  		public Keyword getValAnyregccKeyword_0_0_4() { return cValAnyregccKeyword_0_0_4; }
  
  		//"preserve_mostcc"
  		public Keyword getValPreserve_mostccKeyword_0_0_5() { return cValPreserve_mostccKeyword_0_0_5; }
  
  		//"preserve_allcc"
  		public Keyword getValPreserve_allccKeyword_0_0_6() { return cValPreserve_allccKeyword_0_0_6; }
  
  		//// The following are not documented in the langref:
  		//
  		//"intel_ocl_bicc"
  		public Keyword getValIntel_ocl_biccKeyword_0_0_7() { return cValIntel_ocl_biccKeyword_0_0_7; }
  
  		//"x86_stdcallcc"
  		public Keyword getValX86_stdcallccKeyword_0_0_8() { return cValX86_stdcallccKeyword_0_0_8; }
  
  		//"x86_fastcallcc"
  		public Keyword getValX86_fastcallccKeyword_0_0_9() { return cValX86_fastcallccKeyword_0_0_9; }
  
  		//"x86_thiscallcc"
  		public Keyword getValX86_thiscallccKeyword_0_0_10() { return cValX86_thiscallccKeyword_0_0_10; }
  
  		//"arm_apcscc"
  		public Keyword getValArm_apcsccKeyword_0_0_11() { return cValArm_apcsccKeyword_0_0_11; }
  
  		//"arm_aapcscc"
  		public Keyword getValArm_aapcsccKeyword_0_0_12() { return cValArm_aapcsccKeyword_0_0_12; }
  
  		//"arm_aapcs_vfpcc"
  		public Keyword getValArm_aapcs_vfpccKeyword_0_0_13() { return cValArm_aapcs_vfpccKeyword_0_0_13; }
  
  		//"msp430_intrcc"
  		public Keyword getValMsp430_intrccKeyword_0_0_14() { return cValMsp430_intrccKeyword_0_0_14; }
  
  		//"ptx_kernel"
  		public Keyword getValPtx_kernelKeyword_0_0_15() { return cValPtx_kernelKeyword_0_0_15; }
  
  		//"ptx_device"
  		public Keyword getValPtx_deviceKeyword_0_0_16() { return cValPtx_deviceKeyword_0_0_16; }
  
  		//"spir_kernel"
  		public Keyword getValSpir_kernelKeyword_0_0_17() { return cValSpir_kernelKeyword_0_0_17; }
  
  		//"spir_func"
  		public Keyword getValSpir_funcKeyword_0_0_18() { return cValSpir_funcKeyword_0_0_18; }
  
  		//"x86_64_sysvcc"
  		public Keyword getValX86_64_sysvccKeyword_0_0_19() { return cValX86_64_sysvccKeyword_0_0_19; }
  
  		//"x86_64_win64cc"
  		public Keyword getValX86_64_win64ccKeyword_0_0_20() { return cValX86_64_win64ccKeyword_0_0_20; }
  
  		//// Custom
  		//
  		//val="cc" customNumber=INTEGER
  		public Group getGroup_1() { return cGroup_1; }
  
  		//// Custom
  		//
  		//val="cc"
  		public Assignment getValAssignment_1_0() { return cValAssignment_1_0; }
  
  		//"cc"
  		public Keyword getValCcKeyword_1_0_0() { return cValCcKeyword_1_0_0; }
  
  		//customNumber=INTEGER
  		public Assignment getCustomNumberAssignment_1_1() { return cCustomNumberAssignment_1_1; }
  
  		//INTEGER
  		public RuleCall getCustomNumberINTEGERTerminalRuleCall_1_1_0() { return cCustomNumberINTEGERTerminalRuleCall_1_1_0; }
  	}
  
  	public class VisibilityElements extends AbstractParserRuleElementFinder {
  		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Visibility");
  		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
  		private final Keyword cDefaultKeyword_0 = (Keyword)cAlternatives.eContents().get(0);
  		private final Keyword cHiddenKeyword_1 = (Keyword)cAlternatives.eContents().get(1);
  		private final Keyword cProtectedKeyword_2 = (Keyword)cAlternatives.eContents().get(2);
  		
  		//Visibility:
  		//
  		//	"default" | "hidden" | "protected";
  		public ParserRule getRule() { return rule; }
  
  		//"default" | "hidden" | "protected"
  		public Alternatives getAlternatives() { return cAlternatives; }
  
  		//"default"
  		public Keyword getDefaultKeyword_0() { return cDefaultKeyword_0; }
  
  		//"hidden"
  		public Keyword getHiddenKeyword_1() { return cHiddenKeyword_1; }
  
  		//"protected"
  		public Keyword getProtectedKeyword_2() { return cProtectedKeyword_2; }
  	}
  	
  	
  	private ModelElements pModel;
  	private TopLevelElementElements pTopLevelElement;
  	private AttributeGroupElements pAttributeGroup;
  	private TargetSpecificAttributeElements pTargetSpecificAttribute;
  	private NamedMetadataElements pNamedMetadata;
  	private MetadataRefElements pMetadataRef;
  	private MetadataIdentifierElements pMetadataIdentifier;
  	private ValueRefElements pValueRef;
  	private GlobalValueRefElements pGlobalValueRef;
  	private LocalValueRefElements pLocalValueRef;
  	private GlobalValueElements pGlobalValue;
  	private GlobalValueDefElements pGlobalValueDef;
  	private LocalValueElements pLocalValue;
  	private NamedInstructionElements pNamedInstruction;
  	private InstructionElements pInstruction;
  	private AliasElements pAlias;
  	private AliaseeElements pAliasee;
  	private TargetInfoElements pTargetInfo;
  	private InlineAsmElements pInlineAsm;
  	private GlobalVariableElements pGlobalVariable;
  	private ConstantElements pConstant;
  	private ConstantExpressionElements pConstantExpression;
  	private ConstantExpression_convertElements pConstantExpression_convert;
  	private ConstantExpression_getelementptrElements pConstantExpression_getelementptr;
  	private ConstantExpression_selectElements pConstantExpression_select;
  	private ConstantExpression_compareElements pConstantExpression_compare;
  	private ConstantExpression_extractelementElements pConstantExpression_extractelement;
  	private ConstantExpression_insertelementElements pConstantExpression_insertelement;
  	private ConstantExpression_shufflevectorElements pConstantExpression_shufflevector;
  	private ConstantExpression_extractvalueElements pConstantExpression_extractvalue;
  	private ConstantExpression_insertvalueElements pConstantExpression_insertvalue;
  	private ConstantExpression_binaryElements pConstantExpression_binary;
  	private UndefElements pUndef;
  	private BlockAddressElements pBlockAddress;
  	private ZeroInitializerElements pZeroInitializer;
  	private StructureConstantElements pStructureConstant;
  	private ArrayConstantElements pArrayConstant;
  	private VectorConstantElements pVectorConstant;
  	private ConstantListElements pConstantList;
  	private TypedConstantElements pTypedConstant;
  	private SimpleConstantElements pSimpleConstant;
  	private MetadataNodeElements pMetadataNode;
  	private MetadataNodeElementElements pMetadataNodeElement;
  	private MetadataStringElements pMetadataString;
  	private TLSmodelElements pTLSmodel;
  	private TLSoptionElements pTLSoption;
  	private AddressSpaceElements pAddressSpace;
  	private SectionElements pSection;
  	private AlignElements pAlign;
  	private GcElements pGc;
  	private FunctionElements pFunction;
  	private FunctionDefElements pFunctionDef;
  	private FunctionDeclElements pFunctionDecl;
  	private FunctionHeaderElements pFunctionHeader;
  	private FunctionPrefixElements pFunctionPrefix;
  	private ParametersElements pParameters;
  	private FunctionAttributesElements pFunctionAttributes;
  	private AlignStackElements pAlignStack;
  	private FunctionAttributeElements pFunctionAttribute;
  	private BasicBlockElements pBasicBlock;
  	private BasicBlockNameElements pBasicBlockName;
  	private MetadataSuffixElements pMetadataSuffix;
  	private StartingInstructionElements pStartingInstruction;
  	private MiddleInstructionElements pMiddleInstruction;
  	private NamedMiddleInstructionElements pNamedMiddleInstruction;
  	private ParamNameElements pParamName;
  	private LocalNameElements pLocalName;
  	private GlobalNameElements pGlobalName;
  	private TerminatorInstructionElements pTerminatorInstruction;
  	private NamedTerminatorInstructionElements pNamedTerminatorInstruction;
  	private Instruction_retElements pInstruction_ret;
  	private Instruction_brElements pInstruction_br;
  	private Instruction_switchElements pInstruction_switch;
  	private Instruction_indirectbrElements pInstruction_indirectbr;
  	private Instruction_invoke_voidElements pInstruction_invoke_void;
  	private Instruction_invoke_nonVoidElements pInstruction_invoke_nonVoid;
  	private Instruction_resumeElements pInstruction_resume;
  	private Instruction_unreachableElements pInstruction_unreachable;
  	private BasicBlockRefElements pBasicBlockRef;
  	private BinaryInstructionElements pBinaryInstruction;
  	private Instruction_addElements pInstruction_add;
  	private Instruction_faddElements pInstruction_fadd;
  	private FastMathFlagElements pFastMathFlag;
  	private Instruction_subElements pInstruction_sub;
  	private Instruction_fsubElements pInstruction_fsub;
  	private Instruction_mulElements pInstruction_mul;
  	private Instruction_fmulElements pInstruction_fmul;
  	private Instruction_udivElements pInstruction_udiv;
  	private Instruction_sdivElements pInstruction_sdiv;
  	private Instruction_fdivElements pInstruction_fdiv;
  	private Instruction_uremElements pInstruction_urem;
  	private Instruction_sremElements pInstruction_srem;
  	private Instruction_fremElements pInstruction_frem;
  	private BitwiseBinaryInstructionElements pBitwiseBinaryInstruction;
  	private Instruction_shlElements pInstruction_shl;
  	private Instruction_lshrElements pInstruction_lshr;
  	private Instruction_ashrElements pInstruction_ashr;
  	private Instruction_andElements pInstruction_and;
  	private Instruction_orElements pInstruction_or;
  	private Instruction_xorElements pInstruction_xor;
  	private VectorInstructionsElements pVectorInstructions;
  	private Instruction_extractelementElements pInstruction_extractelement;
  	private Instruction_insertelementElements pInstruction_insertelement;
  	private Instruction_shufflevectorElements pInstruction_shufflevector;
  	private AggregateInstructionElements pAggregateInstruction;
  	private Instruction_extractvalueElements pInstruction_extractvalue;
  	private Instruction_insertvalueElements pInstruction_insertvalue;
  	private MemoryInstructionElements pMemoryInstruction;
  	private Instruction_allocaElements pInstruction_alloca;
  	private Instruction_loadElements pInstruction_load;
  	private Instruction_storeElements pInstruction_store;
  	private Instruction_fenceElements pInstruction_fence;
  	private Instruction_cmpxchgElements pInstruction_cmpxchg;
  	private Instruction_atomicrmwElements pInstruction_atomicrmw;
  	private Atomicrmw_operationElements pAtomicrmw_operation;
  	private Instruction_getelementptrElements pInstruction_getelementptr;
  	private ConversionInstructionElements pConversionInstruction;
  	private ConvertionOpcodeElements pConvertionOpcode;
  	private OtherInstructionElements pOtherInstruction;
  	private Instruction_icmpElements pInstruction_icmp;
  	private IcmpConditionElements pIcmpCondition;
  	private Instruction_fcmpElements pInstruction_fcmp;
  	private FcmpConditionElements pFcmpCondition;
  	private Instruction_phiElements pInstruction_phi;
  	private Instruction_selectElements pInstruction_select;
  	private Instruction_call_nonVoidElements pInstruction_call_nonVoid;
  	private Instruction_call_voidElements pInstruction_call_void;
  	private ArgListElements pArgList;
  	private CalleeElements pCallee;
  	private InlineAssemblerElements pInlineAssembler;
  	private Instruction_va_argElements pInstruction_va_arg;
  	private Instruction_landingpadElements pInstruction_landingpad;
  	private LandingpadClauseElements pLandingpadClause;
  	private OrderingElements pOrdering;
  	private TypedValueElements pTypedValue;
  	private ParameterTypeElements pParameterType;
  	private ParameterAttributesElements pParameterAttributes;
  	private ParameterAttributeElements pParameterAttribute;
  	private ArgumentElements pArgument;
  	private ParameterElements pParameter;
  	private NonVoidTypeElements pNonVoidType;
  	private StarElements pStar;
  	private TypeElements pType;
  	private TypeSuffixElements pTypeSuffix;
  	private NonLeftRecursiveTypeElements pNonLeftRecursiveType;
  	private NonLeftRecursiveNonVoidTypeElements pNonLeftRecursiveNonVoidType;
  	private TypeDefElements pTypeDef;
  	private BinaryOpcodeElements pBinaryOpcode;
  	private IntTypeElements pIntType;
  	private OpaqueTypeElements pOpaqueType;
  	private StructTypeElements pStructType;
  	private VectorTypeElements pVectorType;
  	private ArrayTypeElements pArrayType;
  	private X86mmxTypeElements pX86mmxType;
  	private VoidTypeElements pVoidType;
  	private MetadataTypeElements pMetadataType;
  	private FloatingTypeElements pFloatingType;
  	private LinkageElements pLinkage;
  	private CConvElements pCConv;
  	private VisibilityElements pVisibility;
  	private TerminalRule tBOOLEAN;
  	private TerminalRule tNULL;
  	private TerminalRule tINT_TYPE;
  	private TerminalRule tGLOBAL_ID;
  	private TerminalRule tLOCAL_ID;
  	private TerminalRule tBASIC_BLOCK_ID;
  	private TerminalRule tMETA_INT;
  	private TerminalRule tMETA_NAME;
  	private TerminalRule tATTRIBUTE_ID;
  	private TerminalRule tINTEGER;
  	private TerminalRule tSIGNED_INT;
  	private TerminalRule tNAME;
  	private TerminalRule tCSTRING;
  	private TerminalRule tSTRING;
  	private TerminalRule tMETADATA_STRING;
  	private TerminalRule tFLOAT;
  	private TerminalRule tFILECHECK_COMMENT;
  	private TerminalRule tSL_COMMENT;
  	private TerminalRule tWS;
  	private TerminalRule tANY_OTHER;
  	
  	private final Grammar grammar;
  
  	@Inject
  	public LLVM_IRGrammarAccess(GrammarProvider grammarProvider) {
  		this.grammar = internalFindGrammar(grammarProvider);
  	}
  	
  	protected Grammar internalFindGrammar(GrammarProvider grammarProvider) {
  		Grammar grammar = grammarProvider.getGrammar(this);
  		while (grammar != null) {
  			if ("com.intel.llvm.ireditor.LLVM_IR".equals(grammar.getName())) {
  				return grammar;
  			}
  			List<Grammar> grammars = grammar.getUsedGrammars();
  			if (!grammars.isEmpty()) {
  				grammar = grammars.iterator().next();
  			} else {
  				return null;
  			}
  		}
  		return grammar;
  	}
  	
  	
  	public Grammar getGrammar() {
  		return grammar;
  	}
  	
  
  	
  	//Model:
  	//
  	//	elements+=TopLevelElement*;
  	public ModelElements getModelAccess() {
  		return (pModel != null) ? pModel : (pModel = new ModelElements());
  	}
  	
  	public ParserRule getModelRule() {
  		return getModelAccess().getRule();
  	}
  
  	//TopLevelElement:
  	//
  	//	TypeDef | InlineAsm | TargetInfo | GlobalValue | NamedMetadata | AttributeGroup;
  	public TopLevelElementElements getTopLevelElementAccess() {
  		return (pTopLevelElement != null) ? pTopLevelElement : (pTopLevelElement = new TopLevelElementElements());
  	}
  	
  	public ParserRule getTopLevelElementRule() {
  		return getTopLevelElementAccess().getRule();
  	}
  
  	//AttributeGroup:
  	//
  	//	"attributes" name=ATTRIBUTE_ID "=" "{" (attributes+=FunctionAttribute | alignstack+=AlignStack "="
  	//
  	//	alignstackValue+=INTEGER | targetSpecificAttributes+=TargetSpecificAttribute)+ "}";
  	public AttributeGroupElements getAttributeGroupAccess() {
  		return (pAttributeGroup != null) ? pAttributeGroup : (pAttributeGroup = new AttributeGroupElements());
  	}
  	
  	public ParserRule getAttributeGroupRule() {
  		return getAttributeGroupAccess().getRule();
  	}
  
  	//TargetSpecificAttribute:
  	//
  	//	name=STRING ("=" value=STRING)?;
  	public TargetSpecificAttributeElements getTargetSpecificAttributeAccess() {
  		return (pTargetSpecificAttribute != null) ? pTargetSpecificAttribute : (pTargetSpecificAttribute = new TargetSpecificAttributeElements());
  	}
  	
  	public ParserRule getTargetSpecificAttributeRule() {
  		return getTargetSpecificAttributeAccess().getRule();
  	}
  
  	//NamedMetadata:
  	//
  	//	name=META_INT "=" "metadata" node=MetadataNode | name=META_NAME "=" node=MetadataNode;
  	public NamedMetadataElements getNamedMetadataAccess() {
  		return (pNamedMetadata != null) ? pNamedMetadata : (pNamedMetadata = new NamedMetadataElements());
  	}
  	
  	public ParserRule getNamedMetadataRule() {
  		return getNamedMetadataAccess().getRule();
  	}
  
  	//MetadataRef:
  	//
  	//	ref=[NamedMetadata|MetadataIdentifier];
  	public MetadataRefElements getMetadataRefAccess() {
  		return (pMetadataRef != null) ? pMetadataRef : (pMetadataRef = new MetadataRefElements());
  	}
  	
  	public ParserRule getMetadataRefRule() {
  		return getMetadataRefAccess().getRule();
  	}
  
  	//MetadataIdentifier:
  	//
  	//	META_INT | META_NAME;
  	public MetadataIdentifierElements getMetadataIdentifierAccess() {
  		return (pMetadataIdentifier != null) ? pMetadataIdentifier : (pMetadataIdentifier = new MetadataIdentifierElements());
  	}
  	
  	public ParserRule getMetadataIdentifierRule() {
  		return getMetadataIdentifierAccess().getRule();
  	}
  
  	//ValueRef:
  	//
  	//	GlobalValueRef | LocalValueRef;
  	public ValueRefElements getValueRefAccess() {
  		return (pValueRef != null) ? pValueRef : (pValueRef = new ValueRefElements());
  	}
  	
  	public ParserRule getValueRefRule() {
  		return getValueRefAccess().getRule();
  	}
  
  	//GlobalValueRef:
  	//
  	//	constant=Constant | metadata=MetadataRef;
  	public GlobalValueRefElements getGlobalValueRefAccess() {
  		return (pGlobalValueRef != null) ? pGlobalValueRef : (pGlobalValueRef = new GlobalValueRefElements());
  	}
  	
  	public ParserRule getGlobalValueRefRule() {
  		return getGlobalValueRefAccess().getRule();
  	}
  
  	//LocalValueRef:
  	//
  	//	ref=[LocalValue|LOCAL_ID];
  	public LocalValueRefElements getLocalValueRefAccess() {
  		return (pLocalValueRef != null) ? pLocalValueRef : (pLocalValueRef = new LocalValueRefElements());
  	}
  	
  	public ParserRule getLocalValueRefRule() {
  		return getLocalValueRefAccess().getRule();
  	}
  
  	//GlobalValue:
  	//
  	//	GlobalVariable | Function | Alias;
  	public GlobalValueElements getGlobalValueAccess() {
  		return (pGlobalValue != null) ? pGlobalValue : (pGlobalValue = new GlobalValueElements());
  	}
  	
  	public ParserRule getGlobalValueRule() {
  		return getGlobalValueAccess().getRule();
  	}
  
  	//GlobalValueDef:
  	//
  	//	GlobalVariable | FunctionHeader | Alias;
  	public GlobalValueDefElements getGlobalValueDefAccess() {
  		return (pGlobalValueDef != null) ? pGlobalValueDef : (pGlobalValueDef = new GlobalValueDefElements());
  	}
  	
  	public ParserRule getGlobalValueDefRule() {
  		return getGlobalValueDefAccess().getRule();
  	}
  
  	//LocalValue:
  	//
  	//	NamedInstruction | Parameter;
  	public LocalValueElements getLocalValueAccess() {
  		return (pLocalValue != null) ? pLocalValue : (pLocalValue = new LocalValueElements());
  	}
  	
  	public ParserRule getLocalValueRule() {
  		return getLocalValueAccess().getRule();
  	}
  
  	//NamedInstruction:
  	//
  	//	StartingInstruction | NamedMiddleInstruction | NamedTerminatorInstruction;
  	public NamedInstructionElements getNamedInstructionAccess() {
  		return (pNamedInstruction != null) ? pNamedInstruction : (pNamedInstruction = new NamedInstructionElements());
  	}
  	
  	public ParserRule getNamedInstructionRule() {
  		return getNamedInstructionAccess().getRule();
  	}
  
  	//Instruction:
  	//
  	//	StartingInstruction | MiddleInstruction | TerminatorInstruction;
  	public InstructionElements getInstructionAccess() {
  		return (pInstruction != null) ? pInstruction : (pInstruction = new InstructionElements());
  	}
  	
  	public ParserRule getInstructionRule() {
  		return getInstructionAccess().getRule();
  	}
  
  	//Alias:
  	//
  	//	name=GlobalName "alias" linkage=Linkage? visibility=Visibility? type=Type aliasee=Aliasee;
  	public AliasElements getAliasAccess() {
  		return (pAlias != null) ? pAlias : (pAlias = new AliasElements());
  	}
  	
  	public ParserRule getAliasRule() {
  		return getAliasAccess().getRule();
  	}
  
  	//Aliasee:
  	//
  	//	ref=[GlobalValueDef|GLOBAL_ID] | bitcast=ConstantExpression_convert;
  	public AliaseeElements getAliaseeAccess() {
  		return (pAliasee != null) ? pAliasee : (pAliasee = new AliaseeElements());
  	}
  	
  	public ParserRule getAliaseeRule() {
  		return getAliaseeAccess().getRule();
  	}
  
  	//TargetInfo:
  	//
  	//	"target" infoType=("datalayout" | "triple") "=" layout=STRING;
  	public TargetInfoElements getTargetInfoAccess() {
  		return (pTargetInfo != null) ? pTargetInfo : (pTargetInfo = new TargetInfoElements());
  	}
  	
  	public ParserRule getTargetInfoRule() {
  		return getTargetInfoAccess().getRule();
  	}
  
  	//InlineAsm:
  	//
  	//	"module" "asm" asmLine=STRING;
  	public InlineAsmElements getInlineAsmAccess() {
  		return (pInlineAsm != null) ? pInlineAsm : (pInlineAsm = new InlineAsmElements());
  	}
  	
  	public ParserRule getInlineAsmRule() {
  		return getInlineAsmAccess().getRule();
  	}
  
  	//GlobalVariable:
  	//
  	//	name=GlobalName linkage=Linkage? addrspace=AddressSpace? tlsModel=TLSmodel? "unnamed_addr"? ("constant" | "global")
  	//
  	//	type=Type initialValue=Constant? ("," section=Section)? ("," align=Align)?;
  	public GlobalVariableElements getGlobalVariableAccess() {
  		return (pGlobalVariable != null) ? pGlobalVariable : (pGlobalVariable = new GlobalVariableElements());
  	}
  	
  	public ParserRule getGlobalVariableRule() {
  		return getGlobalVariableAccess().getRule();
  	}
  
  	//Constant:
  	//
  	//	SimpleConstant // predicate because a vector constant and a structure constant can start with '<'
  	//
  	//	| => StructureConstant | ArrayConstant | VectorConstant | ZeroInitializer | MetadataNode | MetadataString |
  	//
  	//	BlockAddress | Undef | ConstantExpression | ref=[GlobalValueDef|GLOBAL_ID];
  	public ConstantElements getConstantAccess() {
  		return (pConstant != null) ? pConstant : (pConstant = new ConstantElements());
  	}
  	
  	public ParserRule getConstantRule() {
  		return getConstantAccess().getRule();
  	}
  
  	//ConstantExpression:
  	//
  	//	ConstantExpression_convert | ConstantExpression_getelementptr | ConstantExpression_select |
  	//
  	//	ConstantExpression_compare | ConstantExpression_extractelement | ConstantExpression_insertelement |
  	//
  	//	ConstantExpression_shufflevector | ConstantExpression_extractvalue | ConstantExpression_insertvalue |
  	//
  	//	ConstantExpression_binary;
  	public ConstantExpressionElements getConstantExpressionAccess() {
  		return (pConstantExpression != null) ? pConstantExpression : (pConstantExpression = new ConstantExpressionElements());
  	}
  	
  	public ParserRule getConstantExpressionRule() {
  		return getConstantExpressionAccess().getRule();
  	}
  
  	//ConstantExpression_convert:
  	//
  	//	opcode=ConvertionOpcode "(" fromType=Type constant=GlobalValueRef "to" targetType=Type ")";
  	public ConstantExpression_convertElements getConstantExpression_convertAccess() {
  		return (pConstantExpression_convert != null) ? pConstantExpression_convert : (pConstantExpression_convert = new ConstantExpression_convertElements());
  	}
  	
  	public ParserRule getConstantExpression_convertRule() {
  		return getConstantExpression_convertAccess().getRule();
  	}
  
  	//ConstantExpression_getelementptr:
  	//
  	//	opcode="getelementptr" "inbounds"? "(" constantType=Type constant=GlobalValueRef ("," indexTypes+=Type
  	//
  	//	indices+=Constant)* ")";
  	public ConstantExpression_getelementptrElements getConstantExpression_getelementptrAccess() {
  		return (pConstantExpression_getelementptr != null) ? pConstantExpression_getelementptr : (pConstantExpression_getelementptr = new ConstantExpression_getelementptrElements());
  	}
  	
  	public ParserRule getConstantExpression_getelementptrRule() {
  		return getConstantExpression_getelementptrAccess().getRule();
  	}
  
  	//ConstantExpression_select:
  	//
  	//	opcode="select" "(" condition=TypedValue "," op1=TypedValue "," op2=TypedValue ")";
  	public ConstantExpression_selectElements getConstantExpression_selectAccess() {
  		return (pConstantExpression_select != null) ? pConstantExpression_select : (pConstantExpression_select = new ConstantExpression_selectElements());
  	}
  	
  	public ParserRule getConstantExpression_selectRule() {
  		return getConstantExpression_selectAccess().getRule();
  	}
  
  	//ConstantExpression_compare:
  	//
  	//	(opcode="icmp" condition=IcmpCondition | opcode="fcmp" condition=FcmpCondition) "(" op1=TypedValue "," op2=TypedValue
  	//
  	//	")";
  	public ConstantExpression_compareElements getConstantExpression_compareAccess() {
  		return (pConstantExpression_compare != null) ? pConstantExpression_compare : (pConstantExpression_compare = new ConstantExpression_compareElements());
  	}
  	
  	public ParserRule getConstantExpression_compareRule() {
  		return getConstantExpression_compareAccess().getRule();
  	}
  
  	//ConstantExpression_extractelement:
  	//
  	//	opcode="extractelement" "(" vector=TypedValue "," index=TypedValue ")";
  	public ConstantExpression_extractelementElements getConstantExpression_extractelementAccess() {
  		return (pConstantExpression_extractelement != null) ? pConstantExpression_extractelement : (pConstantExpression_extractelement = new ConstantExpression_extractelementElements());
  	}
  	
  	public ParserRule getConstantExpression_extractelementRule() {
  		return getConstantExpression_extractelementAccess().getRule();
  	}
  
  	//ConstantExpression_insertelement:
  	//
  	//	opcode="insertelement" "(" vectorType=VectorType vector=ValueRef "," element=TypedValue "," index=TypedValue ")";
  	public ConstantExpression_insertelementElements getConstantExpression_insertelementAccess() {
  		return (pConstantExpression_insertelement != null) ? pConstantExpression_insertelement : (pConstantExpression_insertelement = new ConstantExpression_insertelementElements());
  	}
  	
  	public ParserRule getConstantExpression_insertelementRule() {
  		return getConstantExpression_insertelementAccess().getRule();
  	}
  
  	//ConstantExpression_shufflevector:
  	//
  	//	opcode="shufflevector" "(" vector1=TypedValue "," vector2=TypedValue "," mask=TypedValue ")";
  	public ConstantExpression_shufflevectorElements getConstantExpression_shufflevectorAccess() {
  		return (pConstantExpression_shufflevector != null) ? pConstantExpression_shufflevector : (pConstantExpression_shufflevector = new ConstantExpression_shufflevectorElements());
  	}
  	
  	public ParserRule getConstantExpression_shufflevectorRule() {
  		return getConstantExpression_shufflevectorAccess().getRule();
  	}
  
  	//ConstantExpression_extractvalue:
  	//
  	//	opcode="extractvalue" "(" value=TypedValue ("," indices+=INTEGER)+ ")";
  	public ConstantExpression_extractvalueElements getConstantExpression_extractvalueAccess() {
  		return (pConstantExpression_extractvalue != null) ? pConstantExpression_extractvalue : (pConstantExpression_extractvalue = new ConstantExpression_extractvalueElements());
  	}
  	
  	public ParserRule getConstantExpression_extractvalueRule() {
  		return getConstantExpression_extractvalueAccess().getRule();
  	}
  
  	//ConstantExpression_insertvalue:
  	//
  	//	opcode="insertvalue" "(" value=TypedValue "," element=TypedValue ("," indices+=INTEGER)+ ")";
  	public ConstantExpression_insertvalueElements getConstantExpression_insertvalueAccess() {
  		return (pConstantExpression_insertvalue != null) ? pConstantExpression_insertvalue : (pConstantExpression_insertvalue = new ConstantExpression_insertvalueElements());
  	}
  	
  	public ParserRule getConstantExpression_insertvalueRule() {
  		return getConstantExpression_insertvalueAccess().getRule();
  	}
  
  	//ConstantExpression_binary:
  	//
  	//	(opcode=("add" | "sub" | "mul" | "shl") ("nuw"? & "nsw"?) | opcode=("sdiv" | "udiv" | "lshr" | "ashr") "exact"? |
  	//
  	//	opcode=("fadd" | "fsub" | "fmul" | "fdiv" | "urem" | "srem" | "frem" | "and" | "or" | "xor")) "(" op1=TypedValue ","
  	//
  	//	op2=TypedValue ")";
  	public ConstantExpression_binaryElements getConstantExpression_binaryAccess() {
  		return (pConstantExpression_binary != null) ? pConstantExpression_binary : (pConstantExpression_binary = new ConstantExpression_binaryElements());
  	}
  	
  	public ParserRule getConstantExpression_binaryRule() {
  		return getConstantExpression_binaryAccess().getRule();
  	}
  
  	//Undef:
  	//
  	//	"undef" {Undef};
  	public UndefElements getUndefAccess() {
  		return (pUndef != null) ? pUndef : (pUndef = new UndefElements());
  	}
  	
  	public ParserRule getUndefRule() {
  		return getUndefAccess().getRule();
  	}
  
  	//BlockAddress:
  	//
  	//	"blockaddress" "(" function=GlobalValueRef "," basicBlock=BasicBlockRef ")";
  	public BlockAddressElements getBlockAddressAccess() {
  		return (pBlockAddress != null) ? pBlockAddress : (pBlockAddress = new BlockAddressElements());
  	}
  	
  	public ParserRule getBlockAddressRule() {
  		return getBlockAddressAccess().getRule();
  	}
  
  	//ZeroInitializer:
  	//
  	//	"zeroinitializer" {ZeroInitializer};
  	public ZeroInitializerElements getZeroInitializerAccess() {
  		return (pZeroInitializer != null) ? pZeroInitializer : (pZeroInitializer = new ZeroInitializerElements());
  	}
  	
  	public ParserRule getZeroInitializerRule() {
  		return getZeroInitializerAccess().getRule();
  	}
  
  	//StructureConstant:
  	//
  	//	{StructureConstant} ("{" list=ConstantList? "}" | packed="<" "{" list=ConstantList? "}" ">");
  	public StructureConstantElements getStructureConstantAccess() {
  		return (pStructureConstant != null) ? pStructureConstant : (pStructureConstant = new StructureConstantElements());
  	}
  	
  	public ParserRule getStructureConstantRule() {
  		return getStructureConstantAccess().getRule();
  	}
  
  	//ArrayConstant:
  	//
  	//	{ArrayConstant} "[" list=ConstantList? "]";
  	public ArrayConstantElements getArrayConstantAccess() {
  		return (pArrayConstant != null) ? pArrayConstant : (pArrayConstant = new ArrayConstantElements());
  	}
  	
  	public ParserRule getArrayConstantRule() {
  		return getArrayConstantAccess().getRule();
  	}
  
  	//VectorConstant:
  	//
  	//	{VectorConstant} "<" list=ConstantList? ">";
  	public VectorConstantElements getVectorConstantAccess() {
  		return (pVectorConstant != null) ? pVectorConstant : (pVectorConstant = new VectorConstantElements());
  	}
  	
  	public ParserRule getVectorConstantRule() {
  		return getVectorConstantAccess().getRule();
  	}
  
  	////types+=Type constants+=Constant (',' types+=Type constants+=Constant)*
  	//
  	//ConstantList:
  	//
  	//	typedConstants+=TypedConstant ("," typedConstants+=TypedConstant)*;
  	public ConstantListElements getConstantListAccess() {
  		return (pConstantList != null) ? pConstantList : (pConstantList = new ConstantListElements());
  	}
  	
  	public ParserRule getConstantListRule() {
  		return getConstantListAccess().getRule();
  	}
  
  	//TypedConstant:
  	//
  	//	type=Type value=Constant;
  	public TypedConstantElements getTypedConstantAccess() {
  		return (pTypedConstant != null) ? pTypedConstant : (pTypedConstant = new TypedConstantElements());
  	}
  	
  	public ParserRule getTypedConstantRule() {
  		return getTypedConstantAccess().getRule();
  	}
  
  	//SimpleConstant:
  	//
  	//	value=(INTEGER | SIGNED_INT | FLOAT | BOOLEAN | NULL | CSTRING);
  	public SimpleConstantElements getSimpleConstantAccess() {
  		return (pSimpleConstant != null) ? pSimpleConstant : (pSimpleConstant = new SimpleConstantElements());
  	}
  	
  	public ParserRule getSimpleConstantRule() {
  		return getSimpleConstantAccess().getRule();
  	}
  
  	//MetadataNode:
  	//
  	//	{MetadataNode} "!" "{" (elements+=MetadataNodeElement ("," elements+=MetadataNodeElement)*)? "}";
  	public MetadataNodeElements getMetadataNodeAccess() {
  		return (pMetadataNode != null) ? pMetadataNode : (pMetadataNode = new MetadataNodeElements());
  	}
  	
  	public ParserRule getMetadataNodeRule() {
  		return getMetadataNodeAccess().getRule();
  	}
  
  	//MetadataNodeElement:
  	//
  	//	value=TypedValue | metadataRef=MetadataRef | null=NULL;
  	public MetadataNodeElementElements getMetadataNodeElementAccess() {
  		return (pMetadataNodeElement != null) ? pMetadataNodeElement : (pMetadataNodeElement = new MetadataNodeElementElements());
  	}
  	
  	public ParserRule getMetadataNodeElementRule() {
  		return getMetadataNodeElementAccess().getRule();
  	}
  
  	//MetadataString:
  	//
  	//	name=METADATA_STRING;
  	public MetadataStringElements getMetadataStringAccess() {
  		return (pMetadataString != null) ? pMetadataString : (pMetadataString = new MetadataStringElements());
  	}
  	
  	public ParserRule getMetadataStringRule() {
  		return getMetadataStringAccess().getRule();
  	}
  
  	//TLSmodel:
  	//
  	//	"thread_local" "(" TLSoption ")";
  	public TLSmodelElements getTLSmodelAccess() {
  		return (pTLSmodel != null) ? pTLSmodel : (pTLSmodel = new TLSmodelElements());
  	}
  	
  	public ParserRule getTLSmodelRule() {
  		return getTLSmodelAccess().getRule();
  	}
  
  	//TLSoption:
  	//
  	//	"localdynamic" | "initialexec" | "localexec";
  	public TLSoptionElements getTLSoptionAccess() {
  		return (pTLSoption != null) ? pTLSoption : (pTLSoption = new TLSoptionElements());
  	}
  	
  	public ParserRule getTLSoptionRule() {
  		return getTLSoptionAccess().getRule();
  	}
  
  	//AddressSpace:
  	//
  	//	"addrspace" "(" value=INTEGER ")";
  	public AddressSpaceElements getAddressSpaceAccess() {
  		return (pAddressSpace != null) ? pAddressSpace : (pAddressSpace = new AddressSpaceElements());
  	}
  	
  	public ParserRule getAddressSpaceRule() {
  		return getAddressSpaceAccess().getRule();
  	}
  
  	//Section:
  	//
  	//	"section" STRING;
  	public SectionElements getSectionAccess() {
  		return (pSection != null) ? pSection : (pSection = new SectionElements());
  	}
  	
  	public ParserRule getSectionRule() {
  		return getSectionAccess().getRule();
  	}
  
  	//Align:
  	//
  	//	"align" INTEGER;
  	public AlignElements getAlignAccess() {
  		return (pAlign != null) ? pAlign : (pAlign = new AlignElements());
  	}
  	
  	public ParserRule getAlignRule() {
  		return getAlignAccess().getRule();
  	}
  
  	//Gc:
  	//
  	//	"gc" STRING;
  	public GcElements getGcAccess() {
  		return (pGc != null) ? pGc : (pGc = new GcElements());
  	}
  	
  	public ParserRule getGcRule() {
  		return getGcAccess().getRule();
  	}
  
  	//Function:
  	//
  	//	FunctionDef | FunctionDecl;
  	public FunctionElements getFunctionAccess() {
  		return (pFunction != null) ? pFunction : (pFunction = new FunctionElements());
  	}
  	
  	public ParserRule getFunctionRule() {
  		return getFunctionAccess().getRule();
  	}
  
  	//FunctionDef:
  	//
  	//	"define" header=FunctionHeader "{" basicBlocks+=BasicBlock+ "}";
  	public FunctionDefElements getFunctionDefAccess() {
  		return (pFunctionDef != null) ? pFunctionDef : (pFunctionDef = new FunctionDefElements());
  	}
  	
  	public ParserRule getFunctionDefRule() {
  		return getFunctionDefAccess().getRule();
  	}
  
  	//FunctionDecl:
  	//
  	//	"declare" header=FunctionHeader;
  	public FunctionDeclElements getFunctionDeclAccess() {
  		return (pFunctionDecl != null) ? pFunctionDecl : (pFunctionDecl = new FunctionDeclElements());
  	}
  	
  	public ParserRule getFunctionDeclRule() {
  		return getFunctionDeclAccess().getRule();
  	}
  
  	//FunctionHeader:
  	//
  	//	linkage=Linkage? visibility=Visibility? cconv=CConv? "unnamed_addr"? rettypeAttrs=ParameterAttributes? rettype=Type
  	//
  	//	name=GLOBAL_ID "(" parameters=Parameters ")" attrs=FunctionAttributes? section=Section? align=Align? gc=Gc?
  	//
  	//	functionPrefix=FunctionPrefix?;
  	public FunctionHeaderElements getFunctionHeaderAccess() {
  		return (pFunctionHeader != null) ? pFunctionHeader : (pFunctionHeader = new FunctionHeaderElements());
  	}
  	
  	public ParserRule getFunctionHeaderRule() {
  		return getFunctionHeaderAccess().getRule();
  	}
  
  	//FunctionPrefix:
  	//
  	//	"prefix" value=TypedConstant;
  	public FunctionPrefixElements getFunctionPrefixAccess() {
  		return (pFunctionPrefix != null) ? pFunctionPrefix : (pFunctionPrefix = new FunctionPrefixElements());
  	}
  	
  	public ParserRule getFunctionPrefixRule() {
  		return getFunctionPrefixAccess().getRule();
  	}
  
  	//Parameters:
  	//
  	//	{Parameters} ((parameters+=Parameter ("," parameters+=Parameter)* ("," vararg="...")?)? | vararg="...");
  	public ParametersElements getParametersAccess() {
  		return (pParameters != null) ? pParameters : (pParameters = new ParametersElements());
  	}
  	
  	public ParserRule getParametersRule() {
  		return getParametersAccess().getRule();
  	}
  
  	//FunctionAttributes:
  	//
  	//	(functionAttributes+=FunctionAttribute | alignstack+=AlignStack "(" alignstackValue+=INTEGER ")" |
  	//
  	//	functionAttributeGroupRefs+=[AttributeGroup|ATTRIBUTE_ID])+;
  	public FunctionAttributesElements getFunctionAttributesAccess() {
  		return (pFunctionAttributes != null) ? pFunctionAttributes : (pFunctionAttributes = new FunctionAttributesElements());
  	}
  	
  	public ParserRule getFunctionAttributesRule() {
  		return getFunctionAttributesAccess().getRule();
  	}
  
  	//AlignStack:
  	//
  	//	{AlignStack} "alignstack";
  	public AlignStackElements getAlignStackAccess() {
  		return (pAlignStack != null) ? pAlignStack : (pAlignStack = new AlignStackElements());
  	}
  	
  	public ParserRule getAlignStackRule() {
  		return getAlignStackAccess().getRule();
  	}
  
  	//FunctionAttribute:
  	//
  	//	attribute=("alwaysinline" | "builtin" | "cold" | "inlinehint" | "naked" | "nobuiltin" | "noduplicate" |
  	//
  	//	"noimplicitfloat" | "noinline" | "nonlazybind" | "noredzone" | "noreturn" | "nounwind" | "optnone" | "optsize" |
  	//
  	//	"readnone" | "readonly" | "returns_twice" | "sanitize_address" | "sanitize_memory" | "sanitize_thread" | "ssp" |
  	//
  	//	"sspreq" | "sspstrong" | "uwtable" | // Removed:
  	//
  	//	"address_safety" | "thread_safety" | "uninitialized_checks");
  	public FunctionAttributeElements getFunctionAttributeAccess() {
  		return (pFunctionAttribute != null) ? pFunctionAttribute : (pFunctionAttribute = new FunctionAttributeElements());
  	}
  	
  	public ParserRule getFunctionAttributeRule() {
  		return getFunctionAttributeAccess().getRule();
  	}
  
  	//BasicBlock:
  	//
  	//	name=BasicBlockName instructions+=StartingInstruction* instructions+=MiddleInstruction*
  	//
  	//	instructions+=TerminatorInstruction;
  	public BasicBlockElements getBasicBlockAccess() {
  		return (pBasicBlock != null) ? pBasicBlock : (pBasicBlock = new BasicBlockElements());
  	}
  	
  	public ParserRule getBasicBlockRule() {
  		return getBasicBlockAccess().getRule();
  	}
  
  	//BasicBlockName returns ecore::EString: // A value converter translates this into either %num (if this isn't provided)
  	//
  	//// or into %NAME if it is.
  	//
  	//	BASIC_BLOCK_ID?;
  	public BasicBlockNameElements getBasicBlockNameAccess() {
  		return (pBasicBlockName != null) ? pBasicBlockName : (pBasicBlockName = new BasicBlockNameElements());
  	}
  	
  	public ParserRule getBasicBlockNameRule() {
  		return getBasicBlockNameAccess().getRule();
  	}
  
  	//MetadataSuffix:
  	//
  	//	"," name=META_NAME value=MetadataRef;
  	public MetadataSuffixElements getMetadataSuffixAccess() {
  		return (pMetadataSuffix != null) ? pMetadataSuffix : (pMetadataSuffix = new MetadataSuffixElements());
  	}
  	
  	public ParserRule getMetadataSuffixRule() {
  		return getMetadataSuffixAccess().getRule();
  	}
  
  	//StartingInstruction:
  	//
  	//	name=LocalName instruction=Instruction_phi metadata+=MetadataSuffix*;
  	public StartingInstructionElements getStartingInstructionAccess() {
  		return (pStartingInstruction != null) ? pStartingInstruction : (pStartingInstruction = new StartingInstructionElements());
  	}
  	
  	public ParserRule getStartingInstructionRule() {
  		return getStartingInstructionAccess().getRule();
  	}
  
  	//MiddleInstruction:
  	//
  	//	instruction=(NamedMiddleInstruction | Instruction_store | Instruction_fence | Instruction_call_void)
  	//
  	//	metadata+=MetadataSuffix*;
  	public MiddleInstructionElements getMiddleInstructionAccess() {
  		return (pMiddleInstruction != null) ? pMiddleInstruction : (pMiddleInstruction = new MiddleInstructionElements());
  	}
  	
  	public ParserRule getMiddleInstructionRule() {
  		return getMiddleInstructionAccess().getRule();
  	}
  
  	//NamedMiddleInstruction:
  	//
  	//	name=LocalName instruction=(BinaryInstruction | BitwiseBinaryInstruction | VectorInstructions | AggregateInstruction
  	//
  	//	| Instruction_alloca | Instruction_load | Instruction_getelementptr | Instruction_cmpxchg | Instruction_atomicrmw |
  	//
  	//	ConversionInstruction | OtherInstruction | Instruction_call_nonVoid);
  	public NamedMiddleInstructionElements getNamedMiddleInstructionAccess() {
  		return (pNamedMiddleInstruction != null) ? pNamedMiddleInstruction : (pNamedMiddleInstruction = new NamedMiddleInstructionElements());
  	}
  	
  	public ParserRule getNamedMiddleInstructionRule() {
  		return getNamedMiddleInstructionAccess().getRule();
  	}
  
  	//ParamName returns ecore::EString: // A value converter translates this into either %num (if this isn't provided)
  	//
  	//// or into %NAME if it is.
  	//
  	//	LOCAL_ID?;
  	public ParamNameElements getParamNameAccess() {
  		return (pParamName != null) ? pParamName : (pParamName = new ParamNameElements());
  	}
  	
  	public ParserRule getParamNameRule() {
  		return getParamNameAccess().getRule();
  	}
  
  	//// A value converter translates this into either %num (if this isn't provided)
  	//
  	//// or into %NAME if it is.
  	//
  	//LocalName returns ecore::EString:
  	//
  	//	(LOCAL_ID WS* "=")?;
  	public LocalNameElements getLocalNameAccess() {
  		return (pLocalName != null) ? pLocalName : (pLocalName = new LocalNameElements());
  	}
  	
  	public ParserRule getLocalNameRule() {
  		return getLocalNameAccess().getRule();
  	}
  
  	//// A value converter translates this into either %num (if this isn't provided)
  	//
  	//// or into %NAME if it is.
  	//
  	//GlobalName returns ecore::EString:
  	//
  	//	(GLOBAL_ID WS* "=")?;
  	public GlobalNameElements getGlobalNameAccess() {
  		return (pGlobalName != null) ? pGlobalName : (pGlobalName = new GlobalNameElements());
  	}
  	
  	public ParserRule getGlobalNameRule() {
  		return getGlobalNameAccess().getRule();
  	}
  
  	//TerminatorInstruction:
  	//
  	//	instruction=(NamedTerminatorInstruction | Instruction_ret | Instruction_br | Instruction_switch |
  	//
  	//	Instruction_indirectbr | Instruction_resume | Instruction_unreachable | Instruction_invoke_void)
  	//
  	//	metadata+=MetadataSuffix*;
  	public TerminatorInstructionElements getTerminatorInstructionAccess() {
  		return (pTerminatorInstruction != null) ? pTerminatorInstruction : (pTerminatorInstruction = new TerminatorInstructionElements());
  	}
  	
  	public ParserRule getTerminatorInstructionRule() {
  		return getTerminatorInstructionAccess().getRule();
  	}
  
  	//NamedTerminatorInstruction:
  	//
  	//	name=LocalName instruction=Instruction_invoke_nonVoid;
  	public NamedTerminatorInstructionElements getNamedTerminatorInstructionAccess() {
  		return (pNamedTerminatorInstruction != null) ? pNamedTerminatorInstruction : (pNamedTerminatorInstruction = new NamedTerminatorInstructionElements());
  	}
  	
  	public ParserRule getNamedTerminatorInstructionRule() {
  		return getNamedTerminatorInstructionAccess().getRule();
  	}
  
  	//// ret <type> <value>       ; Return a value from a non-void function
  	//
  	//// ret void                 ; Return from void function
  	//
  	//Instruction_ret:
  	//
  	//	opcode="ret" (val=TypedValue | "void");
  	public Instruction_retElements getInstruction_retAccess() {
  		return (pInstruction_ret != null) ? pInstruction_ret : (pInstruction_ret = new Instruction_retElements());
  	}
  	
  	public ParserRule getInstruction_retRule() {
  		return getInstruction_retAccess().getRule();
  	}
  
  	//// br i1 <cond>, label <iftrue>, label <iffalse>
  	//
  	//// br label <dest>          ; Unconditional branch
  	//
  	//Instruction_br:
  	//
  	//	opcode="br" (condition=TypedValue "," "label" true=BasicBlockRef "," "label" false=BasicBlockRef | "label"
  	//
  	//	unconditional=BasicBlockRef);
  	public Instruction_brElements getInstruction_brAccess() {
  		return (pInstruction_br != null) ? pInstruction_br : (pInstruction_br = new Instruction_brElements());
  	}
  	
  	public ParserRule getInstruction_brRule() {
  		return getInstruction_brAccess().getRule();
  	}
  
  	//// switch <intty> <value>, label <defaultdest> [ <intty> <val>, label <dest> ... ]
  	//
  	//Instruction_switch:
  	//
  	//	opcode="switch" comparisonValue=TypedValue "," "label" defaultDest=BasicBlockRef "[" (caseConditions+=TypedValue ","
  	//
  	//	"label" destinations+=BasicBlockRef)* "]";
  	public Instruction_switchElements getInstruction_switchAccess() {
  		return (pInstruction_switch != null) ? pInstruction_switch : (pInstruction_switch = new Instruction_switchElements());
  	}
  	
  	public ParserRule getInstruction_switchRule() {
  		return getInstruction_switchAccess().getRule();
  	}
  
  	//// indirectbr <somety>* <address>, [ label <dest1>, label <dest2>, ... ]
  	//
  	//Instruction_indirectbr:
  	//
  	//	opcode="indirectbr" address=TypedValue "," "[" ("label" destinations+=BasicBlockRef ("," "label"
  	//
  	//	destinations+=BasicBlockRef)*)? "]";
  	public Instruction_indirectbrElements getInstruction_indirectbrAccess() {
  		return (pInstruction_indirectbr != null) ? pInstruction_indirectbr : (pInstruction_indirectbr = new Instruction_indirectbrElements());
  	}
  	
  	public ParserRule getInstruction_indirectbrRule() {
  		return getInstruction_indirectbrAccess().getRule();
  	}
  
  	//// <result> = invoke [cconv] [ret attrs] <ptr to function ty> <function ptr val>(<function args>) [fn attrs]
  	//
  	////                 to label <normal label> unwind label <exception label>
  	//
  	//// Notice this template as it appears in the reference is incorrect, <ptr to function ty> actually
  	//
  	//// behaves just like in a call instruction, so it's possible to provide return type only.
  	//
  	//Instruction_invoke_void:
  	//
  	//	opcode="invoke" cconv=CConv? ("zeroext"? & "signext"? & "inreg"?) type=VoidType callee=Callee args=ArgList
  	//
  	//	attributes=FunctionAttributes? "to" "label" toLabel=BasicBlockRef "unwind" "label" exceptionLabel=BasicBlockRef;
  	public Instruction_invoke_voidElements getInstruction_invoke_voidAccess() {
  		return (pInstruction_invoke_void != null) ? pInstruction_invoke_void : (pInstruction_invoke_void = new Instruction_invoke_voidElements());
  	}
  	
  	public ParserRule getInstruction_invoke_voidRule() {
  		return getInstruction_invoke_voidAccess().getRule();
  	}
  
  	//// <result> = invoke [cconv] [ret attrs] <ptr to function ty> <function ptr val>(<function args>) [fn attrs]
  	//
  	////                 to label <normal label> unwind label <exception label>
  	//
  	//// Notice this template as it appears in the reference is incorrect, <ptr to function ty> actually
  	//
  	//// behaves just like in a call instruction, so it's possible to provide return type only.
  	//
  	//Instruction_invoke_nonVoid:
  	//
  	//	opcode="invoke" cconv=CConv? ("zeroext"? & "signext"? & "inreg"?) type=NonVoidType callee=Callee args=ArgList
  	//
  	//	attributes=FunctionAttributes? "to" "label" toLabel=BasicBlockRef "unwind" "label" exceptionLabel=BasicBlockRef;
  	public Instruction_invoke_nonVoidElements getInstruction_invoke_nonVoidAccess() {
  		return (pInstruction_invoke_nonVoid != null) ? pInstruction_invoke_nonVoid : (pInstruction_invoke_nonVoid = new Instruction_invoke_nonVoidElements());
  	}
  	
  	public ParserRule getInstruction_invoke_nonVoidRule() {
  		return getInstruction_invoke_nonVoidAccess().getRule();
  	}
  
  	//// resume <type> <value>
  	//
  	//Instruction_resume:
  	//
  	//	opcode="resume" value=TypedValue;
  	public Instruction_resumeElements getInstruction_resumeAccess() {
  		return (pInstruction_resume != null) ? pInstruction_resume : (pInstruction_resume = new Instruction_resumeElements());
  	}
  	
  	public ParserRule getInstruction_resumeRule() {
  		return getInstruction_resumeAccess().getRule();
  	}
  
  	//// unreachable
  	//
  	//Instruction_unreachable:
  	//
  	//	opcode="unreachable";
  	public Instruction_unreachableElements getInstruction_unreachableAccess() {
  		return (pInstruction_unreachable != null) ? pInstruction_unreachable : (pInstruction_unreachable = new Instruction_unreachableElements());
  	}
  	
  	public ParserRule getInstruction_unreachableRule() {
  		return getInstruction_unreachableAccess().getRule();
  	}
  
  	//BasicBlockRef:
  	//
  	//	ref=[BasicBlock|LOCAL_ID];
  	public BasicBlockRefElements getBasicBlockRefAccess() {
  		return (pBasicBlockRef != null) ? pBasicBlockRef : (pBasicBlockRef = new BasicBlockRefElements());
  	}
  	
  	public ParserRule getBasicBlockRefRule() {
  		return getBasicBlockRefAccess().getRule();
  	}
  
  	//BinaryInstruction:
  	//
  	//	Instruction_add | Instruction_fadd | Instruction_sub | Instruction_fsub | Instruction_mul | Instruction_fmul |
  	//
  	//	Instruction_udiv | Instruction_sdiv | Instruction_fdiv | Instruction_urem | Instruction_srem | Instruction_frem;
  	public BinaryInstructionElements getBinaryInstructionAccess() {
  		return (pBinaryInstruction != null) ? pBinaryInstruction : (pBinaryInstruction = new BinaryInstructionElements());
  	}
  	
  	public ParserRule getBinaryInstructionRule() {
  		return getBinaryInstructionAccess().getRule();
  	}
  
  	//// <result> = add <ty> <op1>, <op2>          ; yields {ty}:result
  	//
  	//// <result> = add nuw <ty> <op1>, <op2>      ; yields {ty}:result
  	//
  	//// <result> = add nsw <ty> <op1>, <op2>      ; yields {ty}:result
  	//
  	//// <result> = add nuw nsw <ty> <op1>, <op2>  ; yields {ty}:result
  	//
  	//Instruction_add:
  	//
  	//	opcode="add" ("nuw"? & "nsw"?) type=Type op1=ValueRef "," op2=ValueRef;
  	public Instruction_addElements getInstruction_addAccess() {
  		return (pInstruction_add != null) ? pInstruction_add : (pInstruction_add = new Instruction_addElements());
  	}
  	
  	public ParserRule getInstruction_addRule() {
  		return getInstruction_addAccess().getRule();
  	}
  
  	//// <result> = fadd [fast-math flags]* <ty> <op1>, <op2>   ; yields {ty}:result
  	//
  	//Instruction_fadd:
  	//
  	//	opcode="fadd" fastMathFlags+=FastMathFlag* type=Type op1=ValueRef "," op2=ValueRef;
  	public Instruction_faddElements getInstruction_faddAccess() {
  		return (pInstruction_fadd != null) ? pInstruction_fadd : (pInstruction_fadd = new Instruction_faddElements());
  	}
  	
  	public ParserRule getInstruction_faddRule() {
  		return getInstruction_faddAccess().getRule();
  	}
  
  	//FastMathFlag:
  	//
  	//	{FastMathFlag} kind=("nnan" | "ninf" | "nsz" | "arcp" | "fast");
  	public FastMathFlagElements getFastMathFlagAccess() {
  		return (pFastMathFlag != null) ? pFastMathFlag : (pFastMathFlag = new FastMathFlagElements());
  	}
  	
  	public ParserRule getFastMathFlagRule() {
  		return getFastMathFlagAccess().getRule();
  	}
  
  	//// <result> = sub <ty> <op1>, <op2>          ; yields {ty}:result
  	//
  	//// <result> = sub nuw <ty> <op1>, <op2>      ; yields {ty}:result
  	//
  	//// <result> = sub nsw <ty> <op1>, <op2>      ; yields {ty}:result
  	//
  	//// <result> = sub nuw nsw <ty> <op1>, <op2>  ; yields {ty}:result
  	//
  	//Instruction_sub:
  	//
  	//	opcode="sub" ("nuw"? & "nsw"?) type=Type op1=ValueRef "," op2=ValueRef;
  	public Instruction_subElements getInstruction_subAccess() {
  		return (pInstruction_sub != null) ? pInstruction_sub : (pInstruction_sub = new Instruction_subElements());
  	}
  	
  	public ParserRule getInstruction_subRule() {
  		return getInstruction_subAccess().getRule();
  	}
  
  	//// <result> = fsub [fast-math flags]* <ty> <op1>, <op2>   ; yields {ty}:result
  	//
  	//Instruction_fsub:
  	//
  	//	opcode="fsub" fastMathFlags+=FastMathFlag* type=Type op1=ValueRef "," op2=ValueRef;
  	public Instruction_fsubElements getInstruction_fsubAccess() {
  		return (pInstruction_fsub != null) ? pInstruction_fsub : (pInstruction_fsub = new Instruction_fsubElements());
  	}
  	
  	public ParserRule getInstruction_fsubRule() {
  		return getInstruction_fsubAccess().getRule();
  	}
  
  	//// <result> = mul <ty> <op1>, <op2>          ; yields {ty}:result
  	//
  	//// <result> = mul nuw <ty> <op1>, <op2>      ; yields {ty}:result
  	//
  	//// <result> = mul nsw <ty> <op1>, <op2>      ; yields {ty}:result
  	//
  	//// <result> = mul nuw nsw <ty> <op1>, <op2>  ; yields {ty}:result
  	//
  	//Instruction_mul:
  	//
  	//	opcode="mul" ("nuw"? & "nsw"?) type=Type op1=ValueRef "," op2=ValueRef;
  	public Instruction_mulElements getInstruction_mulAccess() {
  		return (pInstruction_mul != null) ? pInstruction_mul : (pInstruction_mul = new Instruction_mulElements());
  	}
  	
  	public ParserRule getInstruction_mulRule() {
  		return getInstruction_mulAccess().getRule();
  	}
  
  	//// <result> = fmul [fast-math flags]* <ty> <op1>, <op2>   ; yields {ty}:result
  	//
  	//Instruction_fmul:
  	//
  	//	opcode="fmul" fastMathFlags+=FastMathFlag* type=Type op1=ValueRef "," op2=ValueRef;
  	public Instruction_fmulElements getInstruction_fmulAccess() {
  		return (pInstruction_fmul != null) ? pInstruction_fmul : (pInstruction_fmul = new Instruction_fmulElements());
  	}
  	
  	public ParserRule getInstruction_fmulRule() {
  		return getInstruction_fmulAccess().getRule();
  	}
  
  	//// <result> = udiv <ty> <op1>, <op2>         ; yields {ty}:result
  	//
  	//// <result> = udiv exact <ty> <op1>, <op2>   ; yields {ty}:result
  	//
  	//Instruction_udiv:
  	//
  	//	opcode="udiv" "exact"? type=Type op1=ValueRef "," op2=ValueRef;
  	public Instruction_udivElements getInstruction_udivAccess() {
  		return (pInstruction_udiv != null) ? pInstruction_udiv : (pInstruction_udiv = new Instruction_udivElements());
  	}
  	
  	public ParserRule getInstruction_udivRule() {
  		return getInstruction_udivAccess().getRule();
  	}
  
  	//// <result> = sdiv <ty> <op1>, <op2>         ; yields {ty}:result
  	//
  	//// <result> = sdiv exact <ty> <op1>, <op2>   ; yields {ty}:result
  	//
  	//Instruction_sdiv:
  	//
  	//	opcode="sdiv" "exact"? type=Type op1=ValueRef "," op2=ValueRef;
  	public Instruction_sdivElements getInstruction_sdivAccess() {
  		return (pInstruction_sdiv != null) ? pInstruction_sdiv : (pInstruction_sdiv = new Instruction_sdivElements());
  	}
  	
  	public ParserRule getInstruction_sdivRule() {
  		return getInstruction_sdivAccess().getRule();
  	}
  
  	//// <result> = fdiv [fast-math flags]* <ty> <op1>, <op2>   ; yields {ty}:result
  	//
  	//Instruction_fdiv:
  	//
  	//	opcode="fdiv" fastMathFlags+=FastMathFlag* type=Type op1=ValueRef "," op2=ValueRef;
  	public Instruction_fdivElements getInstruction_fdivAccess() {
  		return (pInstruction_fdiv != null) ? pInstruction_fdiv : (pInstruction_fdiv = new Instruction_fdivElements());
  	}
  	
  	public ParserRule getInstruction_fdivRule() {
  		return getInstruction_fdivAccess().getRule();
  	}
  
  	//// <result> = urem <ty> <op1>, <op2>   ; yields {ty}:result
  	//
  	//Instruction_urem:
  	//
  	//	opcode="urem" type=Type op1=ValueRef "," op2=ValueRef;
  	public Instruction_uremElements getInstruction_uremAccess() {
  		return (pInstruction_urem != null) ? pInstruction_urem : (pInstruction_urem = new Instruction_uremElements());
  	}
  	
  	public ParserRule getInstruction_uremRule() {
  		return getInstruction_uremAccess().getRule();
  	}
  
  	//// <result> = srem <ty> <op1>, <op2>   ; yields {ty}:result
  	//
  	//Instruction_srem:
  	//
  	//	opcode="srem" type=Type op1=ValueRef "," op2=ValueRef;
  	public Instruction_sremElements getInstruction_sremAccess() {
  		return (pInstruction_srem != null) ? pInstruction_srem : (pInstruction_srem = new Instruction_sremElements());
  	}
  	
  	public ParserRule getInstruction_sremRule() {
  		return getInstruction_sremAccess().getRule();
  	}
  
  	//// <result> = frem <ty> <op1>, <op2>   ; yields {ty}:result
  	//
  	//Instruction_frem:
  	//
  	//	opcode="frem" type=Type op1=ValueRef "," op2=ValueRef;
  	public Instruction_fremElements getInstruction_fremAccess() {
  		return (pInstruction_frem != null) ? pInstruction_frem : (pInstruction_frem = new Instruction_fremElements());
  	}
  	
  	public ParserRule getInstruction_fremRule() {
  		return getInstruction_fremAccess().getRule();
  	}
  
  	//BitwiseBinaryInstruction:
  	//
  	//	Instruction_shl | Instruction_lshr | Instruction_ashr | Instruction_and | Instruction_or | Instruction_xor;
  	public BitwiseBinaryInstructionElements getBitwiseBinaryInstructionAccess() {
  		return (pBitwiseBinaryInstruction != null) ? pBitwiseBinaryInstruction : (pBitwiseBinaryInstruction = new BitwiseBinaryInstructionElements());
  	}
  	
  	public ParserRule getBitwiseBinaryInstructionRule() {
  		return getBitwiseBinaryInstructionAccess().getRule();
  	}
  
  	//// <result> = shl <ty> <op1>, <op2>           ; yields {ty}:result
  	//
  	//// <result> = shl nuw <ty> <op1>, <op2>       ; yields {ty}:result
  	//
  	//// <result> = shl nsw <ty> <op1>, <op2>       ; yields {ty}:result
  	//
  	//// <result> = shl nuw nsw <ty> <op1>, <op2>   ; yields {ty}:result
  	//
  	//Instruction_shl:
  	//
  	//	opcode="shl" ("nuw"? & "nsw"?) type=Type op1=ValueRef "," op2=ValueRef;
  	public Instruction_shlElements getInstruction_shlAccess() {
  		return (pInstruction_shl != null) ? pInstruction_shl : (pInstruction_shl = new Instruction_shlElements());
  	}
  	
  	public ParserRule getInstruction_shlRule() {
  		return getInstruction_shlAccess().getRule();
  	}
  
  	//// <result> = lshr <ty> <op1>, <op2>         ; yields {ty}:result
  	//
  	//// <result> = lshr exact <ty> <op1>, <op2>   ; yields {ty}:result
  	//
  	//Instruction_lshr:
  	//
  	//	opcode="lshr" "exact"? type=Type op1=ValueRef "," op2=ValueRef;
  	public Instruction_lshrElements getInstruction_lshrAccess() {
  		return (pInstruction_lshr != null) ? pInstruction_lshr : (pInstruction_lshr = new Instruction_lshrElements());
  	}
  	
  	public ParserRule getInstruction_lshrRule() {
  		return getInstruction_lshrAccess().getRule();
  	}
  
  	//// <result> = ashr <ty> <op1>, <op2>         ; yields {ty}:result
  	//
  	//// <result> = ashr exact <ty> <op1>, <op2>   ; yields {ty}:result
  	//
  	//Instruction_ashr:
  	//
  	//	opcode="ashr" "exact"? type=Type op1=ValueRef "," op2=ValueRef;
  	public Instruction_ashrElements getInstruction_ashrAccess() {
  		return (pInstruction_ashr != null) ? pInstruction_ashr : (pInstruction_ashr = new Instruction_ashrElements());
  	}
  	
  	public ParserRule getInstruction_ashrRule() {
  		return getInstruction_ashrAccess().getRule();
  	}
  
  	//// <result> = and <ty> <op1>, <op2>   ; yields {ty}:result
  	//
  	//Instruction_and:
  	//
  	//	opcode="and" type=Type op1=ValueRef "," op2=ValueRef;
  	public Instruction_andElements getInstruction_andAccess() {
  		return (pInstruction_and != null) ? pInstruction_and : (pInstruction_and = new Instruction_andElements());
  	}
  	
  	public ParserRule getInstruction_andRule() {
  		return getInstruction_andAccess().getRule();
  	}
  
  	//// <result> = or <ty> <op1>, <op2>   ; yields {ty}:result
  	//
  	//Instruction_or:
  	//
  	//	opcode="or" type=Type op1=ValueRef "," op2=ValueRef;
  	public Instruction_orElements getInstruction_orAccess() {
  		return (pInstruction_or != null) ? pInstruction_or : (pInstruction_or = new Instruction_orElements());
  	}
  	
  	public ParserRule getInstruction_orRule() {
  		return getInstruction_orAccess().getRule();
  	}
  
  	//// <result> = xor <ty> <op1>, <op2>   ; yields {ty}:result
  	//
  	//Instruction_xor:
  	//
  	//	opcode="xor" type=Type op1=ValueRef "," op2=ValueRef;
  	public Instruction_xorElements getInstruction_xorAccess() {
  		return (pInstruction_xor != null) ? pInstruction_xor : (pInstruction_xor = new Instruction_xorElements());
  	}
  	
  	public ParserRule getInstruction_xorRule() {
  		return getInstruction_xorAccess().getRule();
  	}
  
  	//VectorInstructions:
  	//
  	//	Instruction_extractelement | Instruction_insertelement | Instruction_shufflevector;
  	public VectorInstructionsElements getVectorInstructionsAccess() {
  		return (pVectorInstructions != null) ? pVectorInstructions : (pVectorInstructions = new VectorInstructionsElements());
  	}
  	
  	public ParserRule getVectorInstructionsRule() {
  		return getVectorInstructionsAccess().getRule();
  	}
  
  	//// <result> = extractelement <n x <ty>> <val>, i32 <idx>    ; yields <ty>
  	//
  	//Instruction_extractelement:
  	//
  	//	opcode="extractelement" vector=TypedValue "," index=TypedValue;
  	public Instruction_extractelementElements getInstruction_extractelementAccess() {
  		return (pInstruction_extractelement != null) ? pInstruction_extractelement : (pInstruction_extractelement = new Instruction_extractelementElements());
  	}
  	
  	public ParserRule getInstruction_extractelementRule() {
  		return getInstruction_extractelementAccess().getRule();
  	}
  
  	//// <result> = insertelement <n x <ty>> <val>, <ty> <elt>, i32 <idx>    ; yields <n x <ty>>
  	//
  	//Instruction_insertelement:
  	//
  	//	opcode="insertelement" vector=TypedValue "," element=TypedValue "," index=TypedValue;
  	public Instruction_insertelementElements getInstruction_insertelementAccess() {
  		return (pInstruction_insertelement != null) ? pInstruction_insertelement : (pInstruction_insertelement = new Instruction_insertelementElements());
  	}
  	
  	public ParserRule getInstruction_insertelementRule() {
  		return getInstruction_insertelementAccess().getRule();
  	}
  
  	//// <result> = shufflevector <n x <ty>> <v1>, <n x <ty>> <v2>, <m x i32> <mask>    ; yields <m x <ty>>
  	//
  	//Instruction_shufflevector:
  	//
  	//	opcode="shufflevector" vector1=TypedValue "," vector2=TypedValue "," mask=TypedValue;
  	public Instruction_shufflevectorElements getInstruction_shufflevectorAccess() {
  		return (pInstruction_shufflevector != null) ? pInstruction_shufflevector : (pInstruction_shufflevector = new Instruction_shufflevectorElements());
  	}
  	
  	public ParserRule getInstruction_shufflevectorRule() {
  		return getInstruction_shufflevectorAccess().getRule();
  	}
  
  	//AggregateInstruction:
  	//
  	//	Instruction_extractvalue | Instruction_insertvalue;
  	public AggregateInstructionElements getAggregateInstructionAccess() {
  		return (pAggregateInstruction != null) ? pAggregateInstruction : (pAggregateInstruction = new AggregateInstructionElements());
  	}
  	
  	public ParserRule getAggregateInstructionRule() {
  		return getAggregateInstructionAccess().getRule();
  	}
  
  	//// <result> = extractvalue <aggregate type> <val>, <idx>{, <idx>}*
  	//
  	//Instruction_extractvalue:
  	//
  	//	opcode="extractvalue" aggregate=TypedValue ("," indices+=Constant)+;
  	public Instruction_extractvalueElements getInstruction_extractvalueAccess() {
  		return (pInstruction_extractvalue != null) ? pInstruction_extractvalue : (pInstruction_extractvalue = new Instruction_extractvalueElements());
  	}
  	
  	public ParserRule getInstruction_extractvalueRule() {
  		return getInstruction_extractvalueAccess().getRule();
  	}
  
  	//// <result> = insertvalue <aggregate type> <val>, <ty> <elt>, <idx>{, <idx>}*    ; yields <aggregate type>
  	//
  	//Instruction_insertvalue:
  	//
  	//	opcode="insertvalue" aggregate=TypedValue "," element=TypedValue ("," indices+=Constant)+;
  	public Instruction_insertvalueElements getInstruction_insertvalueAccess() {
  		return (pInstruction_insertvalue != null) ? pInstruction_insertvalue : (pInstruction_insertvalue = new Instruction_insertvalueElements());
  	}
  	
  	public ParserRule getInstruction_insertvalueRule() {
  		return getInstruction_insertvalueAccess().getRule();
  	}
  
  	//MemoryInstruction:
  	//
  	//	Instruction_alloca | Instruction_load | Instruction_store | Instruction_fence | Instruction_cmpxchg |
  	//
  	//	Instruction_atomicrmw | Instruction_getelementptr;
  	public MemoryInstructionElements getMemoryInstructionAccess() {
  		return (pMemoryInstruction != null) ? pMemoryInstruction : (pMemoryInstruction = new MemoryInstructionElements());
  	}
  	
  	public ParserRule getMemoryInstructionRule() {
  		return getMemoryInstructionAccess().getRule();
  	}
  
  	//// <result> = alloca <type>[, <ty> <NumElements>][, align <alignment>]     ; yields {type*}:result
  	//
  	//Instruction_alloca:
  	//
  	//	opcode="alloca" type=Type ("," numElements=TypedValue)? ("," alignment=Align)?;
  	public Instruction_allocaElements getInstruction_allocaAccess() {
  		return (pInstruction_alloca != null) ? pInstruction_alloca : (pInstruction_alloca = new Instruction_allocaElements());
  	}
  	
  	public ParserRule getInstruction_allocaRule() {
  		return getInstruction_allocaAccess().getRule();
  	}
  
  	//// <result> = load [volatile] <ty>* <pointer>[, align <alignment>][, !nontemporal !<index>][, !invariant.load !<index>]
  	//
  	//// <result> = load atomic [volatile] <ty>* <pointer> [singlethread] <ordering>, align <alignment>
  	//
  	//// !<index> = !{ i32 1 }
  	//
  	//Instruction_load:
  	//
  	//	opcode="load" ("volatile"? pointer=TypedValue ("," alignment=Align)? ("," "!nontemporal"
  	//
  	//	nontemporalIndex=MetadataRef)? ("," "!invariant.load" invariantLoadIndex=MetadataRef)? | "atomic" "volatile"?
  	//
  	//	pointer=TypedValue "singlethread"? ordering=Ordering alignment=Align);
  	public Instruction_loadElements getInstruction_loadAccess() {
  		return (pInstruction_load != null) ? pInstruction_load : (pInstruction_load = new Instruction_loadElements());
  	}
  	
  	public ParserRule getInstruction_loadRule() {
  		return getInstruction_loadAccess().getRule();
  	}
  
  	//// store [volatile] <ty> <value>, <ty>* <pointer>[, align <alignment>][, !nontemporal !<index>]        ; yields {void}
  	//
  	//// store atomic [volatile] <ty> <value>, <ty>* <pointer> [singlethread] <ordering>, align <alignment>  ; yields {void}
  	//
  	//Instruction_store:
  	//
  	//	opcode="store" ("volatile"? value=TypedValue "," pointer=TypedValue ("," alignment=Align)? ("," "!nontemporal"
  	//
  	//	nontemporalIndex=MetadataRef)? | "atomic" "volatile"? value=TypedValue pointer=TypedValue "singlethread"?
  	//
  	//	ordering=Ordering alignment=Align);
  	public Instruction_storeElements getInstruction_storeAccess() {
  		return (pInstruction_store != null) ? pInstruction_store : (pInstruction_store = new Instruction_storeElements());
  	}
  	
  	public ParserRule getInstruction_storeRule() {
  		return getInstruction_storeAccess().getRule();
  	}
  
  	//// fence [singlethread] <ordering>                   ; yields {void}
  	//
  	//Instruction_fence:
  	//
  	//	opcode="fence" "singlethread"? ordering=Ordering;
  	public Instruction_fenceElements getInstruction_fenceAccess() {
  		return (pInstruction_fence != null) ? pInstruction_fence : (pInstruction_fence = new Instruction_fenceElements());
  	}
  	
  	public ParserRule getInstruction_fenceRule() {
  		return getInstruction_fenceAccess().getRule();
  	}
  
  	//// cmpxchg [volatile] <ty>* <pointer>, <ty> <cmp>, <ty> <new> [singlethread] <ordering>  ; yields {ty}
  	//
  	//Instruction_cmpxchg:
  	//
  	//	opcode="cmpxchg" "volatile"? pointer=TypedValue "," comparedWith=TypedValue "," newValue=TypedValue "singlethread"?
  	//
  	//	ordering=Ordering;
  	public Instruction_cmpxchgElements getInstruction_cmpxchgAccess() {
  		return (pInstruction_cmpxchg != null) ? pInstruction_cmpxchg : (pInstruction_cmpxchg = new Instruction_cmpxchgElements());
  	}
  	
  	public ParserRule getInstruction_cmpxchgRule() {
  		return getInstruction_cmpxchgAccess().getRule();
  	}
  
  	//// atomicrmw [volatile] <operation> <ty>* <pointer>, <ty> <value> [singlethread] <ordering>
  	//
  	////                   ; yields {ty}
  	//
  	//Instruction_atomicrmw:
  	//
  	//	opcode="atomicrmw" "volatile"? operation=Atomicrmw_operation pointer=TypedValue "," argument=TypedValue
  	//
  	//	"singlethread"? ordering=Ordering;
  	public Instruction_atomicrmwElements getInstruction_atomicrmwAccess() {
  		return (pInstruction_atomicrmw != null) ? pInstruction_atomicrmw : (pInstruction_atomicrmw = new Instruction_atomicrmwElements());
  	}
  	
  	public ParserRule getInstruction_atomicrmwRule() {
  		return getInstruction_atomicrmwAccess().getRule();
  	}
  
  	//Atomicrmw_operation:
  	//
  	//	"xchg" | "add" | "sub" | "and" | "nand" | "or" | "xor" | "max" | "min" | "umax" | "umin";
  	public Atomicrmw_operationElements getAtomicrmw_operationAccess() {
  		return (pAtomicrmw_operation != null) ? pAtomicrmw_operation : (pAtomicrmw_operation = new Atomicrmw_operationElements());
  	}
  	
  	public ParserRule getAtomicrmw_operationRule() {
  		return getAtomicrmw_operationAccess().getRule();
  	}
  
  	//// <result> = getelementptr <pty>* <ptrval>{, <ty> <idx>}*
  	//
  	//// <result> = getelementptr inbounds <pty>* <ptrval>{, <ty> <idx>}*
  	//
  	//// <result> = getelementptr <ptr vector> ptrval, <vector index type> idx 
  	//
  	//Instruction_getelementptr:
  	//
  	//	opcode="getelementptr" "inbounds"? base=TypedValue ("," indices+=TypedValue)*;
  	public Instruction_getelementptrElements getInstruction_getelementptrAccess() {
  		return (pInstruction_getelementptr != null) ? pInstruction_getelementptr : (pInstruction_getelementptr = new Instruction_getelementptrElements());
  	}
  	
  	public ParserRule getInstruction_getelementptrRule() {
  		return getInstruction_getelementptrAccess().getRule();
  	}
  
  	//ConversionInstruction: // Merged since they all look exactly the same except the opcode
  	//
  	//	opcode=ConvertionOpcode fromType=Type value=ValueRef "to" targetType=Type;
  	public ConversionInstructionElements getConversionInstructionAccess() {
  		return (pConversionInstruction != null) ? pConversionInstruction : (pConversionInstruction = new ConversionInstructionElements());
  	}
  	
  	public ParserRule getConversionInstructionRule() {
  		return getConversionInstructionAccess().getRule();
  	}
  
  	//ConvertionOpcode:
  	//
  	//	"trunc" | "zext" | "sext" | "fptrunc" | "fpext" | "fptoui" | "fptosi" | "uitofp" | "sitofp" | "ptrtoint" | "inttoptr"
  	//
  	//	| "bitcast" | "addrspacecast";
  	public ConvertionOpcodeElements getConvertionOpcodeAccess() {
  		return (pConvertionOpcode != null) ? pConvertionOpcode : (pConvertionOpcode = new ConvertionOpcodeElements());
  	}
  	
  	public ParserRule getConvertionOpcodeRule() {
  		return getConvertionOpcodeAccess().getRule();
  	}
  
  	//OtherInstruction:
  	//
  	//	Instruction_icmp | Instruction_fcmp | Instruction_select | Instruction_va_arg | Instruction_landingpad;
  	public OtherInstructionElements getOtherInstructionAccess() {
  		return (pOtherInstruction != null) ? pOtherInstruction : (pOtherInstruction = new OtherInstructionElements());
  	}
  	
  	public ParserRule getOtherInstructionRule() {
  		return getOtherInstructionAccess().getRule();
  	}
  
  	//// <result> = icmp <cond> <ty> <op1>, <op2>   ; yields {i1} or {<N x i1>}:result
  	//
  	//Instruction_icmp:
  	//
  	//	opcode="icmp" condition=IcmpCondition type=Type op1=ValueRef "," op2=ValueRef;
  	public Instruction_icmpElements getInstruction_icmpAccess() {
  		return (pInstruction_icmp != null) ? pInstruction_icmp : (pInstruction_icmp = new Instruction_icmpElements());
  	}
  	
  	public ParserRule getInstruction_icmpRule() {
  		return getInstruction_icmpAccess().getRule();
  	}
  
  	//IcmpCondition:
  	//
  	//	"eq" | "ne" | "ugt" | "uge" | "ult" | "ule" | "sgt" | "sge" | "slt" | "sle";
  	public IcmpConditionElements getIcmpConditionAccess() {
  		return (pIcmpCondition != null) ? pIcmpCondition : (pIcmpCondition = new IcmpConditionElements());
  	}
  	
  	public ParserRule getIcmpConditionRule() {
  		return getIcmpConditionAccess().getRule();
  	}
  
  	//// <result> = fcmp <cond> <ty> <op1>, <op2>     ; yields {i1} or {<N x i1>}:result
  	//
  	//Instruction_fcmp:
  	//
  	//	opcode="fcmp" condition=FcmpCondition type=Type op1=ValueRef "," op2=ValueRef;
  	public Instruction_fcmpElements getInstruction_fcmpAccess() {
  		return (pInstruction_fcmp != null) ? pInstruction_fcmp : (pInstruction_fcmp = new Instruction_fcmpElements());
  	}
  	
  	public ParserRule getInstruction_fcmpRule() {
  		return getInstruction_fcmpAccess().getRule();
  	}
  
  	//FcmpCondition:
  	//
  	//	BOOLEAN | "oeq" | "ogt" | "oge" | "olt" | "ole" | "one" | "ord" | "ueq" | "ugt" | "uge" | "ult" | "ule" | "une" |
  	//
  	//	"uno";
  	public FcmpConditionElements getFcmpConditionAccess() {
  		return (pFcmpCondition != null) ? pFcmpCondition : (pFcmpCondition = new FcmpConditionElements());
  	}
  	
  	public ParserRule getFcmpConditionRule() {
  		return getFcmpConditionAccess().getRule();
  	}
  
  	//// <result> = phi <ty> [ <val0>, <label0>], ...
  	//
  	//Instruction_phi:
  	//
  	//	opcode="phi" type=Type ("[" values+=ValueRef "," labels+=BasicBlockRef "]") ("," "[" values+=ValueRef ","
  	//
  	//	labels+=BasicBlockRef "]")*;
  	public Instruction_phiElements getInstruction_phiAccess() {
  		return (pInstruction_phi != null) ? pInstruction_phi : (pInstruction_phi = new Instruction_phiElements());
  	}
  	
  	public ParserRule getInstruction_phiRule() {
  		return getInstruction_phiAccess().getRule();
  	}
  
  	//// <result> = select selty <cond>, <ty> <val1>, <ty> <val2>             ; yields ty
  	//
  	//// selty is either i1 or {<N x i1>}
  	//
  	//Instruction_select:
  	//
  	//	opcode="select" condition=TypedValue "," value1=TypedValue "," value2=TypedValue;
  	public Instruction_selectElements getInstruction_selectAccess() {
  		return (pInstruction_select != null) ? pInstruction_select : (pInstruction_select = new Instruction_selectElements());
  	}
  	
  	public ParserRule getInstruction_selectRule() {
  		return getInstruction_selectAccess().getRule();
  	}
  
  	//// <result> = [tail] call [cconv] [ret attrs] <ty> [<fnty>*] <fnptrval>(<function args>) [fn attrs]
  	//
  	//Instruction_call_nonVoid:
  	//
  	//	isTail?="tail"? opcode="call" cconv=CConv? returnAttributes=ParameterAttributes? type=NonVoidType callee=Callee
  	//
  	//	args=ArgList functionAttributes=FunctionAttributes?;
  	public Instruction_call_nonVoidElements getInstruction_call_nonVoidAccess() {
  		return (pInstruction_call_nonVoid != null) ? pInstruction_call_nonVoid : (pInstruction_call_nonVoid = new Instruction_call_nonVoidElements());
  	}
  	
  	public ParserRule getInstruction_call_nonVoidRule() {
  		return getInstruction_call_nonVoidAccess().getRule();
  	}
  
  	//Instruction_call_void:
  	//
  	//	isTail?="tail"? opcode="call" cconv=CConv? returnAttributes=ParameterAttributes? type=VoidType callee=Callee
  	//
  	//	args=ArgList functionAttributes=FunctionAttributes?;
  	public Instruction_call_voidElements getInstruction_call_voidAccess() {
  		return (pInstruction_call_void != null) ? pInstruction_call_void : (pInstruction_call_void = new Instruction_call_voidElements());
  	}
  	
  	public ParserRule getInstruction_call_voidRule() {
  		return getInstruction_call_voidAccess().getRule();
  	}
  
  	//ArgList:
  	//
  	//	{ArgList} "(" (arguments+=Argument ("," arguments+=Argument)*)? ")";
  	public ArgListElements getArgListAccess() {
  		return (pArgList != null) ? pArgList : (pArgList = new ArgListElements());
  	}
  	
  	public ParserRule getArgListRule() {
  		return getArgListAccess().getRule();
  	}
  
  	//Callee:
  	//
  	//	ValueRef | InlineAssembler;
  	public CalleeElements getCalleeAccess() {
  		return (pCallee != null) ? pCallee : (pCallee = new CalleeElements());
  	}
  	
  	public ParserRule getCalleeRule() {
  		return getCalleeAccess().getRule();
  	}
  
  	//InlineAssembler:
  	//
  	//	"asm" "sideeffect"? "alignstack"? "inteldialect"? assembler=STRING "," flags=STRING;
  	public InlineAssemblerElements getInlineAssemblerAccess() {
  		return (pInlineAssembler != null) ? pInlineAssembler : (pInlineAssembler = new InlineAssemblerElements());
  	}
  	
  	public ParserRule getInlineAssemblerRule() {
  		return getInlineAssemblerAccess().getRule();
  	}
  
  	//// <resultval> = va_arg <va_list*> <arglist>, <argty>
  	//
  	//Instruction_va_arg:
  	//
  	//	opcode="va_arg" arglist=TypedValue "," type=Type;
  	public Instruction_va_argElements getInstruction_va_argAccess() {
  		return (pInstruction_va_arg != null) ? pInstruction_va_arg : (pInstruction_va_arg = new Instruction_va_argElements());
  	}
  	
  	public ParserRule getInstruction_va_argRule() {
  		return getInstruction_va_argAccess().getRule();
  	}
  
  	//// <resultval> = landingpad <resultty> personality <type> <pers_fn> <clause>+
  	//
  	//// <resultval> = landingpad <resultty> personality <type> <pers_fn> cleanup <clause>*
  	//
  	//// <clause> := catch <type> <value>
  	//
  	//// <clause> := filter <array constant type> <array constant>
  	//
  	//Instruction_landingpad:
  	//
  	//	opcode="landingpad" resultType=Type "personality" personality=TypedValue (clauses+=LandingpadClause | "cleanup")
  	//
  	//	clauses+=LandingpadClause*;
  	public Instruction_landingpadElements getInstruction_landingpadAccess() {
  		return (pInstruction_landingpad != null) ? pInstruction_landingpad : (pInstruction_landingpad = new Instruction_landingpadElements());
  	}
  	
  	public ParserRule getInstruction_landingpadRule() {
  		return getInstruction_landingpadAccess().getRule();
  	}
  
  	//LandingpadClause:
  	//
  	//	landingPadType="catch" catchType=TypedValue | landingPadType="filter" arrayType=ArrayType
  	//
  	//	arrayConstant=ArrayConstant;
  	public LandingpadClauseElements getLandingpadClauseAccess() {
  		return (pLandingpadClause != null) ? pLandingpadClause : (pLandingpadClause = new LandingpadClauseElements());
  	}
  	
  	public ParserRule getLandingpadClauseRule() {
  		return getLandingpadClauseAccess().getRule();
  	}
  
  	//Ordering:
  	//
  	//	"unordered" | "monotonic" | "acquire" | "release" | "acq_rel" | "seq_cst";
  	public OrderingElements getOrderingAccess() {
  		return (pOrdering != null) ? pOrdering : (pOrdering = new OrderingElements());
  	}
  	
  	public ParserRule getOrderingRule() {
  		return getOrderingAccess().getRule();
  	}
  
  	//TypedValue:
  	//
  	//	type=Type ref=ValueRef;
  	public TypedValueElements getTypedValueAccess() {
  		return (pTypedValue != null) ? pTypedValue : (pTypedValue = new TypedValueElements());
  	}
  	
  	public ParserRule getTypedValueRule() {
  		return getTypedValueAccess().getRule();
  	}
  
  	//ParameterType:
  	//
  	//	type=Type attrs=ParameterAttributes?;
  	public ParameterTypeElements getParameterTypeAccess() {
  		return (pParameterType != null) ? pParameterType : (pParameterType = new ParameterTypeElements());
  	}
  	
  	public ParserRule getParameterTypeRule() {
  		return getParameterTypeAccess().getRule();
  	}
  
  	//ParameterAttributes:
  	//
  	//	attributes+=ParameterAttribute+;
  	public ParameterAttributesElements getParameterAttributesAccess() {
  		return (pParameterAttributes != null) ? pParameterAttributes : (pParameterAttributes = new ParameterAttributesElements());
  	}
  	
  	public ParserRule getParameterAttributesRule() {
  		return getParameterAttributesAccess().getRule();
  	}
  
  	//ParameterAttribute:
  	//
  	//	"zeroext" | "signext" | "inreg" | "byval" ("align" INTEGER)? | "sret" | "noalias" | "nocapture" | "nest" | "returned"
  	//
  	//	| "inalloca";
  	public ParameterAttributeElements getParameterAttributeAccess() {
  		return (pParameterAttribute != null) ? pParameterAttribute : (pParameterAttribute = new ParameterAttributeElements());
  	}
  	
  	public ParserRule getParameterAttributeRule() {
  		return getParameterAttributeAccess().getRule();
  	}
  
  	//Argument:
  	//
  	//	type=ParameterType ref=ValueRef;
  	public ArgumentElements getArgumentAccess() {
  		return (pArgument != null) ? pArgument : (pArgument = new ArgumentElements());
  	}
  	
  	public ParserRule getArgumentRule() {
  		return getArgumentAccess().getRule();
  	}
  
  	//Parameter:
  	//
  	//	type=ParameterType name=ParamName;
  	public ParameterElements getParameterAccess() {
  		return (pParameter != null) ? pParameter : (pParameter = new ParameterElements());
  	}
  	
  	public ParserRule getParameterRule() {
  		return getParameterAccess().getRule();
  	}
  
  	//NonVoidType: // A function which returns void, or a pointer to such a function.
  	//
  	//	baseType=VoidType suffixes+=TypeSuffix+ | // A non-void single type, or a pointer to such a type, or a function which returns
  	//
  	//	// such a type or a pointer to such a type, or a pointer to such a function. In short,
  	//
  	//	// All type options not covered by the previous alternative, but not including "void",
  	//
  	//	// which is the only type not allowed.
  	//
  	//	baseType=NonLeftRecursiveNonVoidType stars+=Star* suffixes+=TypeSuffix*;
  	public NonVoidTypeElements getNonVoidTypeAccess() {
  		return (pNonVoidType != null) ? pNonVoidType : (pNonVoidType = new NonVoidTypeElements());
  	}
  	
  	public ParserRule getNonVoidTypeRule() {
  		return getNonVoidTypeAccess().getRule();
  	}
  
  	//Star:
  	//
  	//	{Star} addressSpace=AddressSpace? "*";
  	public StarElements getStarAccess() {
  		return (pStar != null) ? pStar : (pStar = new StarElements());
  	}
  	
  	public ParserRule getStarRule() {
  		return getStarAccess().getRule();
  	}
  
  	//Type:
  	//
  	//	baseType=NonLeftRecursiveType // Pointers or functions:
  	//
  	//	stars+=Star* suffixes+=TypeSuffix*;
  	public TypeElements getTypeAccess() {
  		return (pType != null) ? pType : (pType = new TypeElements());
  	}
  	
  	public ParserRule getTypeRule() {
  		return getTypeAccess().getRule();
  	}
  
  	//// A suffix of a function type or a pointer to a function type - basically
  	//
  	//// the entire function type, not including the return type.  
  	//
  	//TypeSuffix:
  	//
  	//	{TypeSuffix} "(" ((containedTypes+=ParameterType ("," containedTypes+=ParameterType)* ("," vararg="...")?)? |
  	//
  	//	vararg="...") ")" stars+=Star*;
  	public TypeSuffixElements getTypeSuffixAccess() {
  		return (pTypeSuffix != null) ? pTypeSuffix : (pTypeSuffix = new TypeSuffixElements());
  	}
  	
  	public ParserRule getTypeSuffixRule() {
  		return getTypeSuffixAccess().getRule();
  	}
  
  	//NonLeftRecursiveType:
  	//
  	//	type=(IntType | FloatingType | VectorType | ArrayType | X86mmxType | VoidType | MetadataType | StructType |
  	//
  	//	OpaqueType) // Complete types:
  	//
  	//	| typedef=[TypeDef|LOCAL_ID];
  	public NonLeftRecursiveTypeElements getNonLeftRecursiveTypeAccess() {
  		return (pNonLeftRecursiveType != null) ? pNonLeftRecursiveType : (pNonLeftRecursiveType = new NonLeftRecursiveTypeElements());
  	}
  	
  	public ParserRule getNonLeftRecursiveTypeRule() {
  		return getNonLeftRecursiveTypeAccess().getRule();
  	}
  
  	//NonLeftRecursiveNonVoidType:
  	//
  	//	type=(IntType | FloatingType | VectorType | ArrayType | X86mmxType | MetadataType | StructType | OpaqueType) // Complete types:
  	//
  	//	| typedef=[TypeDef|LOCAL_ID];
  	public NonLeftRecursiveNonVoidTypeElements getNonLeftRecursiveNonVoidTypeAccess() {
  		return (pNonLeftRecursiveNonVoidType != null) ? pNonLeftRecursiveNonVoidType : (pNonLeftRecursiveNonVoidType = new NonLeftRecursiveNonVoidTypeElements());
  	}
  	
  	public ParserRule getNonLeftRecursiveNonVoidTypeRule() {
  		return getNonLeftRecursiveNonVoidTypeAccess().getRule();
  	}
  
  	//TypeDef:
  	//
  	//	name=LocalName "type" type=NonVoidType;
  	public TypeDefElements getTypeDefAccess() {
  		return (pTypeDef != null) ? pTypeDef : (pTypeDef = new TypeDefElements());
  	}
  	
  	public ParserRule getTypeDefRule() {
  		return getTypeDefAccess().getRule();
  	}
  
  	//BinaryOpcode:
  	//
  	//	"mov" | "add" | "sub";
  	public BinaryOpcodeElements getBinaryOpcodeAccess() {
  		return (pBinaryOpcode != null) ? pBinaryOpcode : (pBinaryOpcode = new BinaryOpcodeElements());
  	}
  	
  	public ParserRule getBinaryOpcodeRule() {
  		return getBinaryOpcodeAccess().getRule();
  	}
  
  	//IntType:
  	//
  	//	INT_TYPE {IntType};
  	public IntTypeElements getIntTypeAccess() {
  		return (pIntType != null) ? pIntType : (pIntType = new IntTypeElements());
  	}
  	
  	public ParserRule getIntTypeRule() {
  		return getIntTypeAccess().getRule();
  	}
  
  	//OpaqueType:
  	//
  	//	"opaque" {OpaqueType};
  	public OpaqueTypeElements getOpaqueTypeAccess() {
  		return (pOpaqueType != null) ? pOpaqueType : (pOpaqueType = new OpaqueTypeElements());
  	}
  	
  	public ParserRule getOpaqueTypeRule() {
  		return getOpaqueTypeAccess().getRule();
  	}
  
  	//StructType:
  	//
  	//	{StructType} ("{" (types+=Type ("," types+=Type)*)? "}" | packed="<" "{" (types+=Type ("," types+=Type)*)? "}" ">");
  	public StructTypeElements getStructTypeAccess() {
  		return (pStructType != null) ? pStructType : (pStructType = new StructTypeElements());
  	}
  	
  	public ParserRule getStructTypeRule() {
  		return getStructTypeAccess().getRule();
  	}
  
  	//VectorType:
  	//
  	//	"<" size=INTEGER "x" elemType=Type ">";
  	public VectorTypeElements getVectorTypeAccess() {
  		return (pVectorType != null) ? pVectorType : (pVectorType = new VectorTypeElements());
  	}
  	
  	public ParserRule getVectorTypeRule() {
  		return getVectorTypeAccess().getRule();
  	}
  
  	//ArrayType:
  	//
  	//	"[" size=INTEGER "x" elemType=Type "]";
  	public ArrayTypeElements getArrayTypeAccess() {
  		return (pArrayType != null) ? pArrayType : (pArrayType = new ArrayTypeElements());
  	}
  	
  	public ParserRule getArrayTypeRule() {
  		return getArrayTypeAccess().getRule();
  	}
  
  	//X86mmxType:
  	//
  	//	"x86_mmx" {X86mmxType};
  	public X86mmxTypeElements getX86mmxTypeAccess() {
  		return (pX86mmxType != null) ? pX86mmxType : (pX86mmxType = new X86mmxTypeElements());
  	}
  	
  	public ParserRule getX86mmxTypeRule() {
  		return getX86mmxTypeAccess().getRule();
  	}
  
  	//VoidType:
  	//
  	//	"void" {VoidType};
  	public VoidTypeElements getVoidTypeAccess() {
  		return (pVoidType != null) ? pVoidType : (pVoidType = new VoidTypeElements());
  	}
  	
  	public ParserRule getVoidTypeRule() {
  		return getVoidTypeAccess().getRule();
  	}
  
  	//MetadataType:
  	//
  	//	"metadata" {MetadataType};
  	public MetadataTypeElements getMetadataTypeAccess() {
  		return (pMetadataType != null) ? pMetadataType : (pMetadataType = new MetadataTypeElements());
  	}
  	
  	public ParserRule getMetadataTypeRule() {
  		return getMetadataTypeAccess().getRule();
  	}
  
  	//FloatingType:
  	//
  	//	("half" | "float" | "double" | "fp128" | "x86_fp80" | "ppc_fp128") {FloatingType};
  	public FloatingTypeElements getFloatingTypeAccess() {
  		return (pFloatingType != null) ? pFloatingType : (pFloatingType = new FloatingTypeElements());
  	}
  	
  	public ParserRule getFloatingTypeRule() {
  		return getFloatingTypeAccess().getRule();
  	}
  
  	//Linkage:
  	//
  	//	"private" | "linker_private" | "linker_private_weak" | "linker_private_weak_def_auto" | "internal" |
  	//
  	//	"available_externally" | "linkonce" | "weak" | "common" | "appending" | "extern_weak" | "linkonce_odr" | "weak_odr" |
  	//
  	//	"external" | "dllimport" | "dllexport";
  	public LinkageElements getLinkageAccess() {
  		return (pLinkage != null) ? pLinkage : (pLinkage = new LinkageElements());
  	}
  	
  	public ParserRule getLinkageRule() {
  		return getLinkageAccess().getRule();
  	}
  
  	//CConv:
  	//
  	//	val=("ccc" | "fastcc" | "coldcc" | "webkit_jscc" | "anyregcc" | "preserve_mostcc" | "preserve_allcc" | // The following are not documented in the langref:
  	//
  	//	"intel_ocl_bicc" | "x86_stdcallcc" | "x86_fastcallcc" | "x86_thiscallcc" | "arm_apcscc" | "arm_aapcscc" |
  	//
  	//	"arm_aapcs_vfpcc" | "msp430_intrcc" | "ptx_kernel" | "ptx_device" | "spir_kernel" | "spir_func" | "x86_64_sysvcc" |
  	//
  	//	"x86_64_win64cc") | // Custom
  	//
  	//	val="cc" customNumber=INTEGER;
  	public CConvElements getCConvAccess() {
  		return (pCConv != null) ? pCConv : (pCConv = new CConvElements());
  	}
  	
  	public ParserRule getCConvRule() {
  		return getCConvAccess().getRule();
  	}
  
  	//Visibility:
  	//
  	//	"default" | "hidden" | "protected";
  	public VisibilityElements getVisibilityAccess() {
  		return (pVisibility != null) ? pVisibility : (pVisibility = new VisibilityElements());
  	}
  	
  	public ParserRule getVisibilityRule() {
  		return getVisibilityAccess().getRule();
  	}
  
  	//terminal BOOLEAN:
  	//
  	//	"true" | "false";
  	public TerminalRule getBOOLEANRule() {
  		return (tBOOLEAN != null) ? tBOOLEAN : (tBOOLEAN = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "BOOLEAN"));
  	} 
  
  	//terminal NULL:
  	//
  	//	"null";
  	public TerminalRule getNULLRule() {
  		return (tNULL != null) ? tNULL : (tNULL = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "NULL"));
  	} 
  
  	//terminal INT_TYPE:
  	//
  	//	"i" INTEGER;
  	public TerminalRule getINT_TYPERule() {
  		return (tINT_TYPE != null) ? tINT_TYPE : (tINT_TYPE = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "INT_TYPE"));
  	} 
  
  	//terminal GLOBAL_ID:
  	//
  	//	"@" (INTEGER | NAME | STRING);
  	public TerminalRule getGLOBAL_IDRule() {
  		return (tGLOBAL_ID != null) ? tGLOBAL_ID : (tGLOBAL_ID = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "GLOBAL_ID"));
  	} 
  
  	//terminal LOCAL_ID:
  	//
  	//	"%" (INTEGER | NAME | STRING);
  	public TerminalRule getLOCAL_IDRule() {
  		return (tLOCAL_ID != null) ? tLOCAL_ID : (tLOCAL_ID = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "LOCAL_ID"));
  	} 
  
  	//terminal BASIC_BLOCK_ID:
  	//
  	//	(INTEGER | NAME | STRING) ":";
  	public TerminalRule getBASIC_BLOCK_IDRule() {
  		return (tBASIC_BLOCK_ID != null) ? tBASIC_BLOCK_ID : (tBASIC_BLOCK_ID = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "BASIC_BLOCK_ID"));
  	} 
  
  	//terminal META_INT:
  	//
  	//	"!" INTEGER;
  	public TerminalRule getMETA_INTRule() {
  		return (tMETA_INT != null) ? tMETA_INT : (tMETA_INT = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "META_INT"));
  	} 
  
  	//terminal META_NAME:
  	//
  	//	"!" NAME;
  	public TerminalRule getMETA_NAMERule() {
  		return (tMETA_NAME != null) ? tMETA_NAME : (tMETA_NAME = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "META_NAME"));
  	} 
  
  	//terminal ATTRIBUTE_ID:
  	//
  	//	"#" (INTEGER | NAME);
  	public TerminalRule getATTRIBUTE_IDRule() {
  		return (tATTRIBUTE_ID != null) ? tATTRIBUTE_ID : (tATTRIBUTE_ID = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "ATTRIBUTE_ID"));
  	} 
  
  	//terminal INTEGER:
  	//
  	//	"0".."9"+;
  	public TerminalRule getINTEGERRule() {
  		return (tINTEGER != null) ? tINTEGER : (tINTEGER = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "INTEGER"));
  	} 
  
  	//terminal SIGNED_INT:
  	//
  	//	("+" | "-") INTEGER;
  	public TerminalRule getSIGNED_INTRule() {
  		return (tSIGNED_INT != null) ? tSIGNED_INT : (tSIGNED_INT = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "SIGNED_INT"));
  	} 
  
  	//terminal fragment NAME:
  	//
  	//	("a".."z" | "A".."Z" | "$" | "." | "_" | "-") ("a".."z" | "A".."Z" | "$" | "." | "_" | "0".."9" | "-")*;
  	public TerminalRule getNAMERule() {
  		return (tNAME != null) ? tNAME : (tNAME = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "NAME"));
  	} 
  
  	//terminal CSTRING:
  	//
  	//	"c" STRING;
  	public TerminalRule getCSTRINGRule() {
  		return (tCSTRING != null) ? tCSTRING : (tCSTRING = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "CSTRING"));
  	} 
  
  	//terminal STRING:
  	//
  	//	"\"" ("\\" ("\\" | ("a".."f" | "A".."F" | "0".."9") ("a".."f" | "A".."F" | "0".."9")) | !("\\" | "\""))* "\"";
  	public TerminalRule getSTRINGRule() {
  		return (tSTRING != null) ? tSTRING : (tSTRING = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "STRING"));
  	} 
  
  	//terminal METADATA_STRING:
  	//
  	//	"!" STRING;
  	public TerminalRule getMETADATA_STRINGRule() {
  		return (tMETADATA_STRING != null) ? tMETADATA_STRING : (tMETADATA_STRING = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "METADATA_STRING"));
  	} 
  
  	//terminal FLOAT:
  	//
  	//	(SIGNED_INT | INTEGER) "." INTEGER ("e" (SIGNED_INT | INTEGER))? | "0x" ("K" | "L" | "M" | "H")? ("a".."f" | "A".."F"
  	//
  	//	| "0".."9")+;
  	public TerminalRule getFLOATRule() {
  		return (tFLOAT != null) ? tFLOAT : (tFLOAT = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "FLOAT"));
  	} 
  
  	//terminal FILECHECK_COMMENT:
  	//
  	//	"; " ("A".."Z" | "_" | "-")+ ": " !("\n" | "\r")* ("\r"? "\n")?;
  	public TerminalRule getFILECHECK_COMMENTRule() {
  		return (tFILECHECK_COMMENT != null) ? tFILECHECK_COMMENT : (tFILECHECK_COMMENT = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "FILECHECK_COMMENT"));
  	} 
  
  	//terminal SL_COMMENT:
  	//
  	//	";" !("\n" | "\r")* ("\r"? "\n")?;
  	public TerminalRule getSL_COMMENTRule() {
  		return (tSL_COMMENT != null) ? tSL_COMMENT : (tSL_COMMENT = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "SL_COMMENT"));
  	} 
  
  	//terminal WS:
  	//
  	//	(" " | "\t" | "\r" | "\n")+;
  	public TerminalRule getWSRule() {
  		return (tWS != null) ? tWS : (tWS = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "WS"));
  	} 
  
  	//terminal ANY_OTHER:
  	//
  	//	.;
  	public TerminalRule getANY_OTHERRule() {
  		return (tANY_OTHER != null) ? tANY_OTHER : (tANY_OTHER = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "ANY_OTHER"));
  	} 
  }
  