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