Ticket #8731: Constant.hs

File Constant.hs, 4.4 KB (added by carter, 6 years ago)

data type example module

Line 
1module Constant where 
2
3import Data.Word (Word32)
4import Data.Bits ((.|.), (.&.), complement, testBit, shiftL)
5
6
7data Name = MkName 
8  deriving (Eq, Ord, Read, Show)
9data SomeFloat= NoFloat 
10  deriving (Eq, Ord, Read, Show)
11data Type = UniType 
12  deriving (Eq, Ord, Read, Show)
13
14data FloatingPointPredicate = FPred 
15  deriving (Eq, Ord, Read, Show)
16data IntegerPredicate = IntPred 
17  deriving (Eq, Ord, Read, Show)
18
19data Constant
20    = Int { integerBits :: Word32, integerValue :: Integer }
21    | Float { floatValue :: SomeFloat }
22    | Null { constantType :: Type }
23    | Struct { isPacked :: Bool, memberValues :: [ Constant ] }
24    | Array { memberType :: Type, memberValues :: [ Constant ] }
25    | Vector { memberValues :: [ Constant ] }
26    | Undef { constantType :: Type }
27    | BlockAddress { blockAddressFunction :: Name, blockAddressBlock :: Name }
28    | GlobalReference Name 
29    | Add { 
30        nsw :: Bool,
31        nuw :: Bool,
32        operand0 :: Constant,
33        operand1 :: Constant
34      }
35    | FAdd {
36        operand0 :: Constant,
37        operand1 :: Constant
38      }
39    | Sub {
40        nsw :: Bool,
41        nuw :: Bool,
42        operand0 :: Constant,
43        operand1 :: Constant
44      }
45    | FSub { 
46        operand0 :: Constant, 
47        operand1 :: Constant
48      }
49    | Mul { 
50        nsw :: Bool,
51        nuw :: Bool,
52        operand0 :: Constant, 
53        operand1 :: Constant
54      }
55    | FMul { 
56        operand0 :: Constant, 
57        operand1 :: Constant
58      }
59    | UDiv { 
60        exact :: Bool,
61        operand0 :: Constant, 
62        operand1 :: Constant
63      }
64    | SDiv { 
65        exact :: Bool,
66        operand0 :: Constant, 
67        operand1 :: Constant
68      }
69    | FDiv { 
70        operand0 :: Constant, 
71        operand1 :: Constant
72      }
73    | URem { 
74        operand0 :: Constant, 
75        operand1 :: Constant
76      }
77    | SRem { 
78        operand0 :: Constant, 
79        operand1 :: Constant
80      }
81    | FRem { 
82        operand0 :: Constant, 
83        operand1 :: Constant
84      }
85    | Shl { 
86        nsw :: Bool,
87        nuw :: Bool,
88        operand0 :: Constant, 
89        operand1 :: Constant
90      }
91    | LShr { 
92        exact :: Bool,
93        operand0 :: Constant, 
94        operand1 :: Constant
95      }
96    | AShr { 
97        exact :: Bool,
98        operand0 :: Constant, 
99        operand1 :: Constant
100      }
101    | And { 
102        operand0 :: Constant, 
103        operand1 :: Constant
104      }
105    | Or { 
106        operand0 :: Constant, 
107        operand1 :: Constant
108      }
109    | Xor { 
110        operand0 :: Constant, 
111        operand1 :: Constant
112      }
113    | GetElementPtr { 
114        inBounds :: Bool,
115        address :: Constant,
116        indices :: [Constant]
117      }
118    | Trunc { 
119        operand0 :: Constant,
120        type' :: Type
121      }
122    | ZExt {
123        operand0 :: Constant,
124        type' :: Type
125      }
126    | SExt {
127        operand0 :: Constant,
128        type' :: Type
129      }
130    | FPToUI {
131        operand0 :: Constant,
132        type' :: Type
133      }
134    | FPToSI {
135        operand0 :: Constant,
136        type' :: Type
137      }
138    | UIToFP {
139        operand0 :: Constant,
140        type' :: Type
141      }
142    | SIToFP {
143        operand0 :: Constant,
144        type' :: Type
145      }
146    | FPTrunc {
147        operand0 :: Constant,
148        type' :: Type
149      }
150    | FPExt {
151        operand0 :: Constant,
152        type' :: Type
153      }
154    | PtrToInt {
155        operand0 :: Constant,
156        type' :: Type
157      }
158    | IntToPtr {
159        operand0 :: Constant,
160        type' :: Type
161      }
162    | BitCast {
163        operand0 :: Constant,
164        type' :: Type
165      }
166    | ICmp {
167        iPredicate :: IntegerPredicate,
168        operand0 :: Constant,
169        operand1 :: Constant
170      }
171    | FCmp {
172        fpPredicate :: FloatingPointPredicate,
173        operand0 :: Constant,
174        operand1 :: Constant
175      }
176    | Select { 
177        condition' :: Constant,
178        trueValue :: Constant,
179        falseValue :: Constant
180      }
181    | ExtractElement { 
182        vector :: Constant,
183        index :: Constant
184      }
185    | InsertElement { 
186        vector :: Constant,
187        element :: Constant,
188        index :: Constant
189      }
190    | ShuffleVector { 
191        operand0 :: Constant,
192        operand1 :: Constant,
193        mask :: Constant
194      }
195    | ExtractValue { 
196        aggregate :: Constant,
197        indices' :: [Word32]
198      }
199    | InsertValue { 
200        aggregate :: Constant,
201        element :: Constant,
202        indices' :: [Word32]
203      }
204    deriving (Eq, Ord, Read, Show)