| ... | ... | @@ -130,6 +130,67 @@ pub const String = enum(u32) { |
| 130 | 130 | }; |
| 131 | 131 | }; |
| 132 | 132 | |
| 133 | pub const BinaryOpcode = enum(u4) { |
| 134 | add = 0, |
| 135 | sub = 1, |
| 136 | mul = 2, |
| 137 | udiv = 3, |
| 138 | sdiv = 4, |
| 139 | urem = 5, |
| 140 | srem = 6, |
| 141 | shl = 7, |
| 142 | lshr = 8, |
| 143 | ashr = 9, |
| 144 | @"and" = 10, |
| 145 | @"or" = 11, |
| 146 | xor = 12, |
| 147 | }; |
| 148 | |
| 149 | pub const CastOpcode = enum(u4) { |
| 150 | trunc = 0, |
| 151 | zext = 1, |
| 152 | sext = 2, |
| 153 | fptoui = 3, |
| 154 | fptosi = 4, |
| 155 | uitofp = 5, |
| 156 | sitofp = 6, |
| 157 | fptrunc = 7, |
| 158 | fpext = 8, |
| 159 | ptrtoint = 9, |
| 160 | inttoptr = 10, |
| 161 | bitcast = 11, |
| 162 | addrspacecast = 12, |
| 163 | }; |
| 164 | |
| 165 | pub const CmpPredicate = enum(u6) { |
| 166 | fcmp_false = 0, |
| 167 | fcmp_oeq = 1, |
| 168 | fcmp_ogt = 2, |
| 169 | fcmp_oge = 3, |
| 170 | fcmp_olt = 4, |
| 171 | fcmp_ole = 5, |
| 172 | fcmp_one = 6, |
| 173 | fcmp_ord = 7, |
| 174 | fcmp_uno = 8, |
| 175 | fcmp_ueq = 9, |
| 176 | fcmp_ugt = 10, |
| 177 | fcmp_uge = 11, |
| 178 | fcmp_ult = 12, |
| 179 | fcmp_ule = 13, |
| 180 | fcmp_une = 14, |
| 181 | fcmp_true = 15, |
| 182 | icmp_eq = 32, |
| 183 | icmp_ne = 33, |
| 184 | icmp_ugt = 34, |
| 185 | icmp_uge = 35, |
| 186 | icmp_ult = 36, |
| 187 | icmp_ule = 37, |
| 188 | icmp_sgt = 38, |
| 189 | icmp_sge = 39, |
| 190 | icmp_slt = 40, |
| 191 | icmp_sle = 41, |
| 192 | }; |
| 193 | |
| 133 | 194 | pub const StrtabString = struct { |
| 134 | 195 | offset: usize, |
| 135 | 196 | size: usize, |
| ... | ... | @@ -4125,6 +4186,143 @@ pub const Function = struct { |
| 4125 | 4186 | va_arg, |
| 4126 | 4187 | xor, |
| 4127 | 4188 | zext, |
| 4189 | |
| 4190 | pub fn toBinaryOpcode(self: Tag) BinaryOpcode { |
| 4191 | return switch (self) { |
| 4192 | .add, |
| 4193 | .@"add nsw", |
| 4194 | .@"add nuw", |
| 4195 | .@"add nuw nsw", |
| 4196 | .fadd, |
| 4197 | .@"fadd fast", |
| 4198 | => .add, |
| 4199 | .sub, |
| 4200 | .@"sub nsw", |
| 4201 | .@"sub nuw", |
| 4202 | .@"sub nuw nsw", |
| 4203 | .fsub, |
| 4204 | .@"fsub fast", |
| 4205 | => .sub, |
| 4206 | .sdiv, |
| 4207 | .@"sdiv exact", |
| 4208 | .fdiv, |
| 4209 | .@"fdiv fast", |
| 4210 | => .sdiv, |
| 4211 | .fmul, |
| 4212 | .@"fmul fast", |
| 4213 | .mul, |
| 4214 | .@"mul nsw", |
| 4215 | .@"mul nuw", |
| 4216 | .@"mul nuw nsw", |
| 4217 | => .mul, |
| 4218 | .srem, |
| 4219 | .frem, |
| 4220 | .@"frem fast", |
| 4221 | => .srem, |
| 4222 | .udiv, |
| 4223 | .@"udiv exact", |
| 4224 | => .udiv, |
| 4225 | .shl, |
| 4226 | .@"shl nsw", |
| 4227 | .@"shl nuw", |
| 4228 | .@"shl nuw nsw", |
| 4229 | => .shl, |
| 4230 | .lshr, |
| 4231 | .@"lshr exact", |
| 4232 | => .lshr, |
| 4233 | .ashr, |
| 4234 | .@"ashr exact", |
| 4235 | => .ashr, |
| 4236 | .@"and" => .@"and", |
| 4237 | .@"or" => .@"or", |
| 4238 | .xor => .xor, |
| 4239 | .urem => .urem, |
| 4240 | else => unreachable, |
| 4241 | }; |
| 4242 | } |
| 4243 | |
| 4244 | pub fn toCastOpcode(self: Tag) CastOpcode { |
| 4245 | return switch (self) { |
| 4246 | .trunc => .trunc, |
| 4247 | .zext => .zext, |
| 4248 | .sext => .sext, |
| 4249 | .fptoui => .fptoui, |
| 4250 | .fptosi => .fptosi, |
| 4251 | .uitofp => .uitofp, |
| 4252 | .sitofp => .sitofp, |
| 4253 | .fptrunc => .fptrunc, |
| 4254 | .fpext => .fpext, |
| 4255 | .ptrtoint => .ptrtoint, |
| 4256 | .inttoptr => .inttoptr, |
| 4257 | .bitcast => .bitcast, |
| 4258 | .addrspacecast => .addrspacecast, |
| 4259 | else => unreachable, |
| 4260 | }; |
| 4261 | } |
| 4262 | |
| 4263 | pub fn toCmpPredicate(self: Tag) CmpPredicate { |
| 4264 | return switch (self) { |
| 4265 | .@"fcmp false", |
| 4266 | .@"fcmp fast false", |
| 4267 | => .fcmp_false, |
| 4268 | .@"fcmp oeq", |
| 4269 | .@"fcmp fast oeq", |
| 4270 | => .fcmp_oeq, |
| 4271 | .@"fcmp oge", |
| 4272 | .@"fcmp fast oge", |
| 4273 | => .fcmp_oge, |
| 4274 | .@"fcmp ogt", |
| 4275 | .@"fcmp fast ogt", |
| 4276 | => .fcmp_ogt, |
| 4277 | .@"fcmp ole", |
| 4278 | .@"fcmp fast ole", |
| 4279 | => .fcmp_ole, |
| 4280 | .@"fcmp olt", |
| 4281 | .@"fcmp fast olt", |
| 4282 | => .fcmp_olt, |
| 4283 | .@"fcmp one", |
| 4284 | .@"fcmp fast one", |
| 4285 | => .fcmp_one, |
| 4286 | .@"fcmp ord", |
| 4287 | .@"fcmp fast ord", |
| 4288 | => .fcmp_ord, |
| 4289 | .@"fcmp true", |
| 4290 | .@"fcmp fast true", |
| 4291 | => .fcmp_true, |
| 4292 | .@"fcmp ueq", |
| 4293 | .@"fcmp fast ueq", |
| 4294 | => .fcmp_ueq, |
| 4295 | .@"fcmp uge", |
| 4296 | .@"fcmp fast uge", |
| 4297 | => .fcmp_uge, |
| 4298 | .@"fcmp ugt", |
| 4299 | .@"fcmp fast ugt", |
| 4300 | => .fcmp_ugt, |
| 4301 | .@"fcmp ule", |
| 4302 | .@"fcmp fast ule", |
| 4303 | => .fcmp_ule, |
| 4304 | .@"fcmp ult", |
| 4305 | .@"fcmp fast ult", |
| 4306 | => .fcmp_ult, |
| 4307 | .@"fcmp une", |
| 4308 | .@"fcmp fast une", |
| 4309 | => .fcmp_une, |
| 4310 | .@"fcmp uno", |
| 4311 | .@"fcmp fast uno", |
| 4312 | => .fcmp_uno, |
| 4313 | .@"icmp eq" => .icmp_eq, |
| 4314 | .@"icmp ne" => .icmp_ne, |
| 4315 | .@"icmp sge" => .icmp_sge, |
| 4316 | .@"icmp sgt" => .icmp_sgt, |
| 4317 | .@"icmp sle" => .icmp_sle, |
| 4318 | .@"icmp slt" => .icmp_slt, |
| 4319 | .@"icmp uge" => .icmp_uge, |
| 4320 | .@"icmp ugt" => .icmp_ugt, |
| 4321 | .@"icmp ule" => .icmp_ule, |
| 4322 | .@"icmp ult" => .icmp_ult, |
| 4323 | else => unreachable, |
| 4324 | }; |
| 4325 | } |
| 4128 | 4326 | }; |
| 4129 | 4327 | |
| 4130 | 4328 | pub const Index = enum(u32) { |
| ... | ... | @@ -7239,6 +7437,49 @@ pub const Constant = enum(u32) { |
| 7239 | 7437 | @"asm sideeffect inteldialect unwind", |
| 7240 | 7438 | @"asm alignstack inteldialect unwind", |
| 7241 | 7439 | @"asm sideeffect alignstack inteldialect unwind", |
| 7440 | |
| 7441 | pub fn toBinaryOpcode(self: Tag) BinaryOpcode { |
| 7442 | return switch (self) { |
| 7443 | .add, |
| 7444 | .@"add nsw", |
| 7445 | .@"add nuw", |
| 7446 | => .add, |
| 7447 | .sub, |
| 7448 | .@"sub nsw", |
| 7449 | .@"sub nuw", |
| 7450 | => .sub, |
| 7451 | .mul, |
| 7452 | .@"mul nsw", |
| 7453 | .@"mul nuw", |
| 7454 | => .mul, |
| 7455 | .shl => .shl, |
| 7456 | .lshr => .lshr, |
| 7457 | .ashr => .ashr, |
| 7458 | .@"and" => .@"and", |
| 7459 | .@"or" => .@"or", |
| 7460 | .xor => .xor, |
| 7461 | else => unreachable, |
| 7462 | }; |
| 7463 | } |
| 7464 | |
| 7465 | pub fn toCastOpcode(self: Tag) CastOpcode { |
| 7466 | return switch (self) { |
| 7467 | .trunc => .trunc, |
| 7468 | .zext => .zext, |
| 7469 | .sext => .sext, |
| 7470 | .fptoui => .fptoui, |
| 7471 | .fptosi => .fptosi, |
| 7472 | .uitofp => .uitofp, |
| 7473 | .sitofp => .sitofp, |
| 7474 | .fptrunc => .fptrunc, |
| 7475 | .fpext => .fpext, |
| 7476 | .ptrtoint => .ptrtoint, |
| 7477 | .inttoptr => .inttoptr, |
| 7478 | .bitcast => .bitcast, |
| 7479 | .addrspacecast => .addrspacecast, |
| 7480 | else => unreachable, |
| 7481 | }; |
| 7482 | } |
| 7242 | 7483 | }; |
| 7243 | 7484 | |
| 7244 | 7485 | pub const Item = struct { |