@@ -54,11 +54,21 @@ private newtype TOpcode =
5454 TUnwind ( ) or
5555 TUnmodeledDefinition ( ) or
5656 TUnmodeledUse ( ) or
57+ TAliasedDefinition ( ) or
5758 TPhi ( ) or
5859 TVarArgsStart ( ) or
5960 TVarArgsEnd ( ) or
6061 TVarArg ( ) or
61- TVarArgCopy ( )
62+ TVarArgCopy ( ) or
63+ TCallSideEffect ( ) or
64+ TCallReadSideEffect ( ) or
65+ TIndirectReadSideEffect ( ) or
66+ TIndirectWriteSideEffect ( ) or
67+ TIndirectMayWriteSideEffect ( ) or
68+ TBufferReadSideEffect ( ) or
69+ TBufferWriteSideEffect ( ) or
70+ TBufferMayWriteSideEffect ( ) or
71+ TChi ( )
6272
6373class Opcode extends TOpcode {
6474 string toString ( ) {
@@ -92,6 +102,29 @@ abstract class OpcodeWithCondition extends Opcode {}
92102
93103abstract class BuiltInOpcode extends Opcode { }
94104
105+ abstract class SideEffectOpcode extends Opcode { }
106+
107+ /**
108+ * An opcode that reads from a set of memory locations as a side effect.
109+ */
110+ abstract class ReadSideEffectOpcode extends SideEffectOpcode { }
111+
112+ /**
113+ * An opcode that writes to a set of memory locations as a side effect.
114+ */
115+ abstract class WriteSideEffectOpcode extends SideEffectOpcode { }
116+
117+ /**
118+ * An opcode that may overwrite some, all, or none of an existing set of memory locations. Modeled
119+ * as a read of the original contents, plus a "may" write of the new contents.
120+ */
121+ abstract class MayWriteSideEffectOpcode extends SideEffectOpcode { }
122+
123+ /**
124+ * An opcode that accesses a buffer via an `AddressOperand` and a `BufferSizeOperand`.
125+ */
126+ abstract class BufferAccessOpcode extends MemoryAccessOpcode { }
127+
95128module Opcode {
96129 class NoOp extends Opcode , TNoOp { override final string toString ( ) { result = "NoOp" } }
97130 class Uninitialized extends MemoryAccessOpcode , TUninitialized { override final string toString ( ) { result = "Uninitialized" } }
@@ -148,9 +181,19 @@ module Opcode {
148181 class Unwind extends Opcode , TUnwind { override final string toString ( ) { result = "Unwind" } }
149182 class UnmodeledDefinition extends Opcode , TUnmodeledDefinition { override final string toString ( ) { result = "UnmodeledDefinition" } }
150183 class UnmodeledUse extends Opcode , TUnmodeledUse { override final string toString ( ) { result = "UnmodeledUse" } }
184+ class AliasedDefinition extends Opcode , TAliasedDefinition { override final string toString ( ) { result = "AliasedDefinition" } }
151185 class Phi extends Opcode , TPhi { override final string toString ( ) { result = "Phi" } }
152186 class VarArgsStart extends BuiltInOpcode , TVarArgsStart { override final string toString ( ) { result = "VarArgsStart" } }
153187 class VarArgsEnd extends BuiltInOpcode , TVarArgsEnd { override final string toString ( ) { result = "VarArgsEnd" } }
154188 class VarArg extends BuiltInOpcode , TVarArg { override final string toString ( ) { result = "VarArg" } }
155189 class VarArgCopy extends BuiltInOpcode , TVarArgCopy { override final string toString ( ) { result = "VarArgCopy" } }
190+ class CallSideEffect extends MayWriteSideEffectOpcode , TCallSideEffect { override final string toString ( ) { result = "CallSideEffect" } }
191+ class CallReadSideEffect extends ReadSideEffectOpcode , TCallReadSideEffect { override final string toString ( ) { result = "CallReadSideEffect" } }
192+ class IndirectReadSideEffect extends ReadSideEffectOpcode , MemoryAccessOpcode , TIndirectReadSideEffect { override final string toString ( ) { result = "IndirectReadSideEffect" } }
193+ class IndirectWriteSideEffect extends WriteSideEffectOpcode , MemoryAccessOpcode , TIndirectWriteSideEffect { override final string toString ( ) { result = "IndirectWriteSideEffect" } }
194+ class IndirectMayWriteSideEffect extends MayWriteSideEffectOpcode , MemoryAccessOpcode , TIndirectMayWriteSideEffect { override final string toString ( ) { result = "IndirectMayWriteSideEffect" } }
195+ class BufferReadSideEffect extends ReadSideEffectOpcode , BufferAccessOpcode , TBufferReadSideEffect { override final string toString ( ) { result = "BufferReadSideEffect" } }
196+ class BufferWriteSideEffect extends WriteSideEffectOpcode , BufferAccessOpcode , TBufferWriteSideEffect { override final string toString ( ) { result = "BufferWriteSideEffect" } }
197+ class BufferMayWriteSideEffect extends MayWriteSideEffectOpcode , BufferAccessOpcode , TBufferMayWriteSideEffect { override final string toString ( ) { result = "BufferMayWriteSideEffect" } }
198+ class Chi extends Opcode , TChi { override final string toString ( ) { result = "Chi" } }
156199}
0 commit comments