github.com/slayercat/go@v0.0.0-20170428012452-c51559813f61/src/cmd/compile/internal/ssa/rewritedec.go (about) 1 // Code generated from gen/dec.rules; DO NOT EDIT. 2 // generated with: cd gen; go run *.go 3 4 package ssa 5 6 import "math" 7 import "cmd/internal/obj" 8 import "cmd/internal/objabi" 9 10 var _ = math.MinInt8 // in case not otherwise used 11 var _ = obj.ANOP // in case not otherwise used 12 var _ = objabi.GOROOT // in case not otherwise used 13 14 func rewriteValuedec(v *Value) bool { 15 switch v.Op { 16 case OpComplexImag: 17 return rewriteValuedec_OpComplexImag_0(v) 18 case OpComplexReal: 19 return rewriteValuedec_OpComplexReal_0(v) 20 case OpIData: 21 return rewriteValuedec_OpIData_0(v) 22 case OpITab: 23 return rewriteValuedec_OpITab_0(v) 24 case OpLoad: 25 return rewriteValuedec_OpLoad_0(v) 26 case OpSliceCap: 27 return rewriteValuedec_OpSliceCap_0(v) 28 case OpSliceLen: 29 return rewriteValuedec_OpSliceLen_0(v) 30 case OpSlicePtr: 31 return rewriteValuedec_OpSlicePtr_0(v) 32 case OpStore: 33 return rewriteValuedec_OpStore_0(v) 34 case OpStringLen: 35 return rewriteValuedec_OpStringLen_0(v) 36 case OpStringPtr: 37 return rewriteValuedec_OpStringPtr_0(v) 38 } 39 return false 40 } 41 func rewriteValuedec_OpComplexImag_0(v *Value) bool { 42 // match: (ComplexImag (ComplexMake _ imag)) 43 // cond: 44 // result: imag 45 for { 46 v_0 := v.Args[0] 47 if v_0.Op != OpComplexMake { 48 break 49 } 50 imag := v_0.Args[1] 51 v.reset(OpCopy) 52 v.Type = imag.Type 53 v.AddArg(imag) 54 return true 55 } 56 return false 57 } 58 func rewriteValuedec_OpComplexReal_0(v *Value) bool { 59 // match: (ComplexReal (ComplexMake real _)) 60 // cond: 61 // result: real 62 for { 63 v_0 := v.Args[0] 64 if v_0.Op != OpComplexMake { 65 break 66 } 67 real := v_0.Args[0] 68 v.reset(OpCopy) 69 v.Type = real.Type 70 v.AddArg(real) 71 return true 72 } 73 return false 74 } 75 func rewriteValuedec_OpIData_0(v *Value) bool { 76 // match: (IData (IMake _ data)) 77 // cond: 78 // result: data 79 for { 80 v_0 := v.Args[0] 81 if v_0.Op != OpIMake { 82 break 83 } 84 data := v_0.Args[1] 85 v.reset(OpCopy) 86 v.Type = data.Type 87 v.AddArg(data) 88 return true 89 } 90 return false 91 } 92 func rewriteValuedec_OpITab_0(v *Value) bool { 93 b := v.Block 94 _ = b 95 // match: (ITab (IMake itab _)) 96 // cond: 97 // result: itab 98 for { 99 v_0 := v.Args[0] 100 if v_0.Op != OpIMake { 101 break 102 } 103 itab := v_0.Args[0] 104 v.reset(OpCopy) 105 v.Type = itab.Type 106 v.AddArg(itab) 107 return true 108 } 109 return false 110 } 111 func rewriteValuedec_OpLoad_0(v *Value) bool { 112 b := v.Block 113 _ = b 114 config := b.Func.Config 115 _ = config 116 types := &b.Func.Config.Types 117 _ = types 118 // match: (Load <t> ptr mem) 119 // cond: t.IsComplex() && t.Size() == 8 120 // result: (ComplexMake (Load <types.Float32> ptr mem) (Load <types.Float32> (OffPtr <types.Float32Ptr> [4] ptr) mem) ) 121 for { 122 t := v.Type 123 ptr := v.Args[0] 124 mem := v.Args[1] 125 if !(t.IsComplex() && t.Size() == 8) { 126 break 127 } 128 v.reset(OpComplexMake) 129 v0 := b.NewValue0(v.Pos, OpLoad, types.Float32) 130 v0.AddArg(ptr) 131 v0.AddArg(mem) 132 v.AddArg(v0) 133 v1 := b.NewValue0(v.Pos, OpLoad, types.Float32) 134 v2 := b.NewValue0(v.Pos, OpOffPtr, types.Float32Ptr) 135 v2.AuxInt = 4 136 v2.AddArg(ptr) 137 v1.AddArg(v2) 138 v1.AddArg(mem) 139 v.AddArg(v1) 140 return true 141 } 142 // match: (Load <t> ptr mem) 143 // cond: t.IsComplex() && t.Size() == 16 144 // result: (ComplexMake (Load <types.Float64> ptr mem) (Load <types.Float64> (OffPtr <types.Float64Ptr> [8] ptr) mem) ) 145 for { 146 t := v.Type 147 ptr := v.Args[0] 148 mem := v.Args[1] 149 if !(t.IsComplex() && t.Size() == 16) { 150 break 151 } 152 v.reset(OpComplexMake) 153 v0 := b.NewValue0(v.Pos, OpLoad, types.Float64) 154 v0.AddArg(ptr) 155 v0.AddArg(mem) 156 v.AddArg(v0) 157 v1 := b.NewValue0(v.Pos, OpLoad, types.Float64) 158 v2 := b.NewValue0(v.Pos, OpOffPtr, types.Float64Ptr) 159 v2.AuxInt = 8 160 v2.AddArg(ptr) 161 v1.AddArg(v2) 162 v1.AddArg(mem) 163 v.AddArg(v1) 164 return true 165 } 166 // match: (Load <t> ptr mem) 167 // cond: t.IsString() 168 // result: (StringMake (Load <types.BytePtr> ptr mem) (Load <types.Int> (OffPtr <types.IntPtr> [config.PtrSize] ptr) mem)) 169 for { 170 t := v.Type 171 ptr := v.Args[0] 172 mem := v.Args[1] 173 if !(t.IsString()) { 174 break 175 } 176 v.reset(OpStringMake) 177 v0 := b.NewValue0(v.Pos, OpLoad, types.BytePtr) 178 v0.AddArg(ptr) 179 v0.AddArg(mem) 180 v.AddArg(v0) 181 v1 := b.NewValue0(v.Pos, OpLoad, types.Int) 182 v2 := b.NewValue0(v.Pos, OpOffPtr, types.IntPtr) 183 v2.AuxInt = config.PtrSize 184 v2.AddArg(ptr) 185 v1.AddArg(v2) 186 v1.AddArg(mem) 187 v.AddArg(v1) 188 return true 189 } 190 // match: (Load <t> ptr mem) 191 // cond: t.IsSlice() 192 // result: (SliceMake (Load <t.ElemType().PtrTo()> ptr mem) (Load <types.Int> (OffPtr <types.IntPtr> [config.PtrSize] ptr) mem) (Load <types.Int> (OffPtr <types.IntPtr> [2*config.PtrSize] ptr) mem)) 193 for { 194 t := v.Type 195 ptr := v.Args[0] 196 mem := v.Args[1] 197 if !(t.IsSlice()) { 198 break 199 } 200 v.reset(OpSliceMake) 201 v0 := b.NewValue0(v.Pos, OpLoad, t.ElemType().PtrTo()) 202 v0.AddArg(ptr) 203 v0.AddArg(mem) 204 v.AddArg(v0) 205 v1 := b.NewValue0(v.Pos, OpLoad, types.Int) 206 v2 := b.NewValue0(v.Pos, OpOffPtr, types.IntPtr) 207 v2.AuxInt = config.PtrSize 208 v2.AddArg(ptr) 209 v1.AddArg(v2) 210 v1.AddArg(mem) 211 v.AddArg(v1) 212 v3 := b.NewValue0(v.Pos, OpLoad, types.Int) 213 v4 := b.NewValue0(v.Pos, OpOffPtr, types.IntPtr) 214 v4.AuxInt = 2 * config.PtrSize 215 v4.AddArg(ptr) 216 v3.AddArg(v4) 217 v3.AddArg(mem) 218 v.AddArg(v3) 219 return true 220 } 221 // match: (Load <t> ptr mem) 222 // cond: t.IsInterface() 223 // result: (IMake (Load <types.BytePtr> ptr mem) (Load <types.BytePtr> (OffPtr <types.BytePtrPtr> [config.PtrSize] ptr) mem)) 224 for { 225 t := v.Type 226 ptr := v.Args[0] 227 mem := v.Args[1] 228 if !(t.IsInterface()) { 229 break 230 } 231 v.reset(OpIMake) 232 v0 := b.NewValue0(v.Pos, OpLoad, types.BytePtr) 233 v0.AddArg(ptr) 234 v0.AddArg(mem) 235 v.AddArg(v0) 236 v1 := b.NewValue0(v.Pos, OpLoad, types.BytePtr) 237 v2 := b.NewValue0(v.Pos, OpOffPtr, types.BytePtrPtr) 238 v2.AuxInt = config.PtrSize 239 v2.AddArg(ptr) 240 v1.AddArg(v2) 241 v1.AddArg(mem) 242 v.AddArg(v1) 243 return true 244 } 245 return false 246 } 247 func rewriteValuedec_OpSliceCap_0(v *Value) bool { 248 // match: (SliceCap (SliceMake _ _ cap)) 249 // cond: 250 // result: cap 251 for { 252 v_0 := v.Args[0] 253 if v_0.Op != OpSliceMake { 254 break 255 } 256 cap := v_0.Args[2] 257 v.reset(OpCopy) 258 v.Type = cap.Type 259 v.AddArg(cap) 260 return true 261 } 262 return false 263 } 264 func rewriteValuedec_OpSliceLen_0(v *Value) bool { 265 // match: (SliceLen (SliceMake _ len _)) 266 // cond: 267 // result: len 268 for { 269 v_0 := v.Args[0] 270 if v_0.Op != OpSliceMake { 271 break 272 } 273 len := v_0.Args[1] 274 v.reset(OpCopy) 275 v.Type = len.Type 276 v.AddArg(len) 277 return true 278 } 279 return false 280 } 281 func rewriteValuedec_OpSlicePtr_0(v *Value) bool { 282 // match: (SlicePtr (SliceMake ptr _ _)) 283 // cond: 284 // result: ptr 285 for { 286 v_0 := v.Args[0] 287 if v_0.Op != OpSliceMake { 288 break 289 } 290 ptr := v_0.Args[0] 291 v.reset(OpCopy) 292 v.Type = ptr.Type 293 v.AddArg(ptr) 294 return true 295 } 296 return false 297 } 298 func rewriteValuedec_OpStore_0(v *Value) bool { 299 b := v.Block 300 _ = b 301 config := b.Func.Config 302 _ = config 303 types := &b.Func.Config.Types 304 _ = types 305 // match: (Store {t} dst (ComplexMake real imag) mem) 306 // cond: t.(Type).Size() == 8 307 // result: (Store {types.Float32} (OffPtr <types.Float32Ptr> [4] dst) imag (Store {types.Float32} dst real mem)) 308 for { 309 t := v.Aux 310 dst := v.Args[0] 311 v_1 := v.Args[1] 312 if v_1.Op != OpComplexMake { 313 break 314 } 315 real := v_1.Args[0] 316 imag := v_1.Args[1] 317 mem := v.Args[2] 318 if !(t.(Type).Size() == 8) { 319 break 320 } 321 v.reset(OpStore) 322 v.Aux = types.Float32 323 v0 := b.NewValue0(v.Pos, OpOffPtr, types.Float32Ptr) 324 v0.AuxInt = 4 325 v0.AddArg(dst) 326 v.AddArg(v0) 327 v.AddArg(imag) 328 v1 := b.NewValue0(v.Pos, OpStore, TypeMem) 329 v1.Aux = types.Float32 330 v1.AddArg(dst) 331 v1.AddArg(real) 332 v1.AddArg(mem) 333 v.AddArg(v1) 334 return true 335 } 336 // match: (Store {t} dst (ComplexMake real imag) mem) 337 // cond: t.(Type).Size() == 16 338 // result: (Store {types.Float64} (OffPtr <types.Float64Ptr> [8] dst) imag (Store {types.Float64} dst real mem)) 339 for { 340 t := v.Aux 341 dst := v.Args[0] 342 v_1 := v.Args[1] 343 if v_1.Op != OpComplexMake { 344 break 345 } 346 real := v_1.Args[0] 347 imag := v_1.Args[1] 348 mem := v.Args[2] 349 if !(t.(Type).Size() == 16) { 350 break 351 } 352 v.reset(OpStore) 353 v.Aux = types.Float64 354 v0 := b.NewValue0(v.Pos, OpOffPtr, types.Float64Ptr) 355 v0.AuxInt = 8 356 v0.AddArg(dst) 357 v.AddArg(v0) 358 v.AddArg(imag) 359 v1 := b.NewValue0(v.Pos, OpStore, TypeMem) 360 v1.Aux = types.Float64 361 v1.AddArg(dst) 362 v1.AddArg(real) 363 v1.AddArg(mem) 364 v.AddArg(v1) 365 return true 366 } 367 // match: (Store dst (StringMake ptr len) mem) 368 // cond: 369 // result: (Store {types.Int} (OffPtr <types.IntPtr> [config.PtrSize] dst) len (Store {types.BytePtr} dst ptr mem)) 370 for { 371 dst := v.Args[0] 372 v_1 := v.Args[1] 373 if v_1.Op != OpStringMake { 374 break 375 } 376 ptr := v_1.Args[0] 377 len := v_1.Args[1] 378 mem := v.Args[2] 379 v.reset(OpStore) 380 v.Aux = types.Int 381 v0 := b.NewValue0(v.Pos, OpOffPtr, types.IntPtr) 382 v0.AuxInt = config.PtrSize 383 v0.AddArg(dst) 384 v.AddArg(v0) 385 v.AddArg(len) 386 v1 := b.NewValue0(v.Pos, OpStore, TypeMem) 387 v1.Aux = types.BytePtr 388 v1.AddArg(dst) 389 v1.AddArg(ptr) 390 v1.AddArg(mem) 391 v.AddArg(v1) 392 return true 393 } 394 // match: (Store dst (SliceMake ptr len cap) mem) 395 // cond: 396 // result: (Store {types.Int} (OffPtr <types.IntPtr> [2*config.PtrSize] dst) cap (Store {types.Int} (OffPtr <types.IntPtr> [config.PtrSize] dst) len (Store {types.BytePtr} dst ptr mem))) 397 for { 398 dst := v.Args[0] 399 v_1 := v.Args[1] 400 if v_1.Op != OpSliceMake { 401 break 402 } 403 ptr := v_1.Args[0] 404 len := v_1.Args[1] 405 cap := v_1.Args[2] 406 mem := v.Args[2] 407 v.reset(OpStore) 408 v.Aux = types.Int 409 v0 := b.NewValue0(v.Pos, OpOffPtr, types.IntPtr) 410 v0.AuxInt = 2 * config.PtrSize 411 v0.AddArg(dst) 412 v.AddArg(v0) 413 v.AddArg(cap) 414 v1 := b.NewValue0(v.Pos, OpStore, TypeMem) 415 v1.Aux = types.Int 416 v2 := b.NewValue0(v.Pos, OpOffPtr, types.IntPtr) 417 v2.AuxInt = config.PtrSize 418 v2.AddArg(dst) 419 v1.AddArg(v2) 420 v1.AddArg(len) 421 v3 := b.NewValue0(v.Pos, OpStore, TypeMem) 422 v3.Aux = types.BytePtr 423 v3.AddArg(dst) 424 v3.AddArg(ptr) 425 v3.AddArg(mem) 426 v1.AddArg(v3) 427 v.AddArg(v1) 428 return true 429 } 430 // match: (Store dst (IMake itab data) mem) 431 // cond: 432 // result: (Store {types.BytePtr} (OffPtr <types.BytePtrPtr> [config.PtrSize] dst) data (Store {types.Uintptr} dst itab mem)) 433 for { 434 dst := v.Args[0] 435 v_1 := v.Args[1] 436 if v_1.Op != OpIMake { 437 break 438 } 439 itab := v_1.Args[0] 440 data := v_1.Args[1] 441 mem := v.Args[2] 442 v.reset(OpStore) 443 v.Aux = types.BytePtr 444 v0 := b.NewValue0(v.Pos, OpOffPtr, types.BytePtrPtr) 445 v0.AuxInt = config.PtrSize 446 v0.AddArg(dst) 447 v.AddArg(v0) 448 v.AddArg(data) 449 v1 := b.NewValue0(v.Pos, OpStore, TypeMem) 450 v1.Aux = types.Uintptr 451 v1.AddArg(dst) 452 v1.AddArg(itab) 453 v1.AddArg(mem) 454 v.AddArg(v1) 455 return true 456 } 457 return false 458 } 459 func rewriteValuedec_OpStringLen_0(v *Value) bool { 460 // match: (StringLen (StringMake _ len)) 461 // cond: 462 // result: len 463 for { 464 v_0 := v.Args[0] 465 if v_0.Op != OpStringMake { 466 break 467 } 468 len := v_0.Args[1] 469 v.reset(OpCopy) 470 v.Type = len.Type 471 v.AddArg(len) 472 return true 473 } 474 return false 475 } 476 func rewriteValuedec_OpStringPtr_0(v *Value) bool { 477 // match: (StringPtr (StringMake ptr _)) 478 // cond: 479 // result: ptr 480 for { 481 v_0 := v.Args[0] 482 if v_0.Op != OpStringMake { 483 break 484 } 485 ptr := v_0.Args[0] 486 v.reset(OpCopy) 487 v.Type = ptr.Type 488 v.AddArg(ptr) 489 return true 490 } 491 return false 492 } 493 func rewriteBlockdec(b *Block) bool { 494 config := b.Func.Config 495 _ = config 496 fe := b.Func.fe 497 _ = fe 498 types := &config.Types 499 _ = types 500 switch b.Kind { 501 } 502 return false 503 }