@@ -896,7 +896,9 @@ func (s *state) exit() *ssa.Block {
896
896
addr := s .decladdrs [n ]
897
897
val := s .variable (n , n .Type )
898
898
s .vars [& memVar ] = s .newValue1A (ssa .OpVarDef , ssa .TypeMem , n , s .mem ())
899
- s .vars [& memVar ] = s .newValue3I (ssa .OpStore , ssa .TypeMem , n .Type .Size (), addr , val , s .mem ())
899
+ store := s .newValue3I (ssa .OpStore , ssa .TypeMem , n .Type .Size (), addr , val , s .mem ())
900
+ store .Aux = n .Type
901
+ s .vars [& memVar ] = store
900
902
// TODO: if val is ever spilled, we'd like to use the
901
903
// PPARAMOUT slot for spilling it. That won't happen
902
904
// currently.
@@ -2129,9 +2131,13 @@ func (s *state) append(n *Node, inplace bool) *ssa.Value {
2129
2131
s .vars [& memVar ] = s .newValue1A (ssa .OpVarDef , ssa .TypeMem , sn , s .mem ())
2130
2132
}
2131
2133
capaddr := s .newValue1I (ssa .OpOffPtr , ptrto (Types [TINT ]), int64 (array_cap ), addr )
2132
- s .vars [& memVar ] = s .newValue3I (ssa .OpStore , ssa .TypeMem , s .config .IntSize , capaddr , r [2 ], s .mem ())
2134
+ store := s .newValue3I (ssa .OpStore , ssa .TypeMem , s .config .IntSize , capaddr , r [2 ], s .mem ())
2135
+ store .Aux = Types [TINT ]
2136
+ s .vars [& memVar ] = store
2133
2137
if ssa .IsStackAddr (addr ) {
2134
- s .vars [& memVar ] = s .newValue3I (ssa .OpStore , ssa .TypeMem , pt .Size (), addr , r [0 ], s .mem ())
2138
+ store := s .newValue3I (ssa .OpStore , ssa .TypeMem , pt .Size (), addr , r [0 ], s .mem ())
2139
+ store .Aux = pt
2140
+ s .vars [& memVar ] = store
2135
2141
} else {
2136
2142
s .insertWBstore (pt , addr , r [0 ], 0 )
2137
2143
}
@@ -2154,7 +2160,9 @@ func (s *state) append(n *Node, inplace bool) *ssa.Value {
2154
2160
l = s .variable (& lenVar , Types [TINT ]) // generates phi for len
2155
2161
nl = s .newValue2 (s .ssaOp (OADD , Types [TINT ]), Types [TINT ], l , s .constInt (Types [TINT ], nargs ))
2156
2162
lenaddr := s .newValue1I (ssa .OpOffPtr , ptrto (Types [TINT ]), int64 (array_nel ), addr )
2157
- s .vars [& memVar ] = s .newValue3I (ssa .OpStore , ssa .TypeMem , s .config .IntSize , lenaddr , nl , s .mem ())
2163
+ store := s .newValue3I (ssa .OpStore , ssa .TypeMem , s .config .IntSize , lenaddr , nl , s .mem ())
2164
+ store .Aux = Types [TINT ]
2165
+ s .vars [& memVar ] = store
2158
2166
}
2159
2167
2160
2168
// Evaluate args
@@ -2188,13 +2196,17 @@ func (s *state) append(n *Node, inplace bool) *ssa.Value {
2188
2196
if haspointers (et ) {
2189
2197
s .insertWBstore (et , addr , arg .v , 0 )
2190
2198
} else {
2191
- s .vars [& memVar ] = s .newValue3I (ssa .OpStore , ssa .TypeMem , et .Size (), addr , arg .v , s .mem ())
2199
+ store := s .newValue3I (ssa .OpStore , ssa .TypeMem , et .Size (), addr , arg .v , s .mem ())
2200
+ store .Aux = et
2201
+ s .vars [& memVar ] = store
2192
2202
}
2193
2203
} else {
2194
2204
if haspointers (et ) {
2195
2205
s .insertWBmove (et , addr , arg .v )
2196
2206
} else {
2197
- s .vars [& memVar ] = s .newValue3I (ssa .OpMove , ssa .TypeMem , sizeAlignAuxInt (et ), addr , arg .v , s .mem ())
2207
+ store := s .newValue3I (ssa .OpMove , ssa .TypeMem , sizeAlignAuxInt (et ), addr , arg .v , s .mem ())
2208
+ store .Aux = et
2209
+ s .vars [& memVar ] = store
2198
2210
}
2199
2211
}
2200
2212
}
@@ -2354,10 +2366,14 @@ func (s *state) assign(left *Node, right *ssa.Value, wb, deref bool, skip skipMa
2354
2366
return
2355
2367
}
2356
2368
if right == nil {
2357
- s .vars [& memVar ] = s .newValue2I (ssa .OpZero , ssa .TypeMem , sizeAlignAuxInt (t ), addr , s .mem ())
2369
+ store := s .newValue2I (ssa .OpZero , ssa .TypeMem , sizeAlignAuxInt (t ), addr , s .mem ())
2370
+ store .Aux = t
2371
+ s .vars [& memVar ] = store
2358
2372
return
2359
2373
}
2360
- s .vars [& memVar ] = s .newValue3I (ssa .OpMove , ssa .TypeMem , sizeAlignAuxInt (t ), addr , right , s .mem ())
2374
+ store := s .newValue3I (ssa .OpMove , ssa .TypeMem , sizeAlignAuxInt (t ), addr , right , s .mem ())
2375
+ store .Aux = t
2376
+ s .vars [& memVar ] = store
2361
2377
return
2362
2378
}
2363
2379
// Treat as a store.
@@ -2378,7 +2394,9 @@ func (s *state) assign(left *Node, right *ssa.Value, wb, deref bool, skip skipMa
2378
2394
s .storeTypeScalars (t , addr , right , skip )
2379
2395
return
2380
2396
}
2381
- s .vars [& memVar ] = s .newValue3I (ssa .OpStore , ssa .TypeMem , t .Size (), addr , right , s .mem ())
2397
+ store := s .newValue3I (ssa .OpStore , ssa .TypeMem , t .Size (), addr , right , s .mem ())
2398
+ store .Aux = t
2399
+ s .vars [& memVar ] = store
2382
2400
}
2383
2401
2384
2402
// zeroVal returns the zero value for type t.
@@ -2954,7 +2972,9 @@ func (s *state) call(n *Node, k callKind) *ssa.Value {
2954
2972
argStart += int64 (2 * Widthptr )
2955
2973
}
2956
2974
addr := s .constOffPtrSP (ptrto (Types [TUINTPTR ]), argStart )
2957
- s .vars [& memVar ] = s .newValue3I (ssa .OpStore , ssa .TypeMem , int64 (Widthptr ), addr , rcvr , s .mem ())
2975
+ store := s .newValue3I (ssa .OpStore , ssa .TypeMem , int64 (Widthptr ), addr , rcvr , s .mem ())
2976
+ store .Aux = Types [TUINTPTR ]
2977
+ s .vars [& memVar ] = store
2958
2978
}
2959
2979
2960
2980
// Defer/go args
@@ -2963,9 +2983,13 @@ func (s *state) call(n *Node, k callKind) *ssa.Value {
2963
2983
argStart := Ctxt .FixedFrameSize ()
2964
2984
argsize := s .constInt32 (Types [TUINT32 ], int32 (stksize ))
2965
2985
addr := s .constOffPtrSP (ptrto (Types [TUINT32 ]), argStart )
2966
- s .vars [& memVar ] = s .newValue3I (ssa .OpStore , ssa .TypeMem , 4 , addr , argsize , s .mem ())
2986
+ store := s .newValue3I (ssa .OpStore , ssa .TypeMem , 4 , addr , argsize , s .mem ())
2987
+ store .Aux = Types [TUINT32 ]
2988
+ s .vars [& memVar ] = store
2967
2989
addr = s .constOffPtrSP (ptrto (Types [TUINTPTR ]), argStart + int64 (Widthptr ))
2968
- s .vars [& memVar ] = s .newValue3I (ssa .OpStore , ssa .TypeMem , int64 (Widthptr ), addr , closure , s .mem ())
2990
+ store = s .newValue3I (ssa .OpStore , ssa .TypeMem , int64 (Widthptr ), addr , closure , s .mem ())
2991
+ store .Aux = Types [TUINTPTR ]
2992
+ s .vars [& memVar ] = store
2969
2993
stksize += 2 * int64 (Widthptr )
2970
2994
}
2971
2995
@@ -3328,7 +3352,9 @@ func (s *state) rtcall(fn *obj.LSym, returns bool, results []*Type, args ...*ssa
3328
3352
off = Rnd (off , t .Alignment ())
3329
3353
ptr := s .constOffPtrSP (t .PtrTo (), off )
3330
3354
size := t .Size ()
3331
- s .vars [& memVar ] = s .newValue3I (ssa .OpStore , ssa .TypeMem , size , ptr , arg , s .mem ())
3355
+ store := s .newValue3I (ssa .OpStore , ssa .TypeMem , size , ptr , arg , s .mem ())
3356
+ store .Aux = t
3357
+ s .vars [& memVar ] = store
3332
3358
off += size
3333
3359
}
3334
3360
off = Rnd (off , int64 (Widthptr ))
@@ -3400,7 +3426,8 @@ func (s *state) insertWBmove(t *Type, left, right *ssa.Value) {
3400
3426
} else {
3401
3427
val = s .newValue3I (ssa .OpMoveWB , ssa .TypeMem , sizeAlignAuxInt (t ), left , right , s .mem ())
3402
3428
}
3403
- val .Aux = & ssa.ExternSymbol {Typ : Types [TUINTPTR ], Sym : Linksym (typenamesym (t ))}
3429
+ //val.Aux = &ssa.ExternSymbol{Typ: Types[TUINTPTR], Sym: Linksym(typenamesym(t))}
3430
+ val .Aux = t
3404
3431
s .vars [& memVar ] = val
3405
3432
}
3406
3433
@@ -3433,7 +3460,9 @@ func (s *state) insertWBstore(t *Type, left, right *ssa.Value, skip skipMask) {
3433
3460
func (s * state ) storeTypeScalars (t * Type , left , right * ssa.Value , skip skipMask ) {
3434
3461
switch {
3435
3462
case t .IsBoolean () || t .IsInteger () || t .IsFloat () || t .IsComplex ():
3436
- s .vars [& memVar ] = s .newValue3I (ssa .OpStore , ssa .TypeMem , t .Size (), left , right , s .mem ())
3463
+ store := s .newValue3I (ssa .OpStore , ssa .TypeMem , t .Size (), left , right , s .mem ())
3464
+ store .Aux = t
3465
+ s .vars [& memVar ] = store
3437
3466
case t .IsPtrShaped ():
3438
3467
// no scalar fields.
3439
3468
case t .IsString ():
@@ -3442,22 +3471,30 @@ func (s *state) storeTypeScalars(t *Type, left, right *ssa.Value, skip skipMask)
3442
3471
}
3443
3472
len := s .newValue1 (ssa .OpStringLen , Types [TINT ], right )
3444
3473
lenAddr := s .newValue1I (ssa .OpOffPtr , ptrto (Types [TINT ]), s .config .IntSize , left )
3445
- s .vars [& memVar ] = s .newValue3I (ssa .OpStore , ssa .TypeMem , s .config .IntSize , lenAddr , len , s .mem ())
3474
+ store := s .newValue3I (ssa .OpStore , ssa .TypeMem , s .config .IntSize , lenAddr , len , s .mem ())
3475
+ store .Aux = Types [TINT ]
3476
+ s .vars [& memVar ] = store
3446
3477
case t .IsSlice ():
3447
3478
if skip & skipLen == 0 {
3448
3479
len := s .newValue1 (ssa .OpSliceLen , Types [TINT ], right )
3449
3480
lenAddr := s .newValue1I (ssa .OpOffPtr , ptrto (Types [TINT ]), s .config .IntSize , left )
3450
- s .vars [& memVar ] = s .newValue3I (ssa .OpStore , ssa .TypeMem , s .config .IntSize , lenAddr , len , s .mem ())
3481
+ store := s .newValue3I (ssa .OpStore , ssa .TypeMem , s .config .IntSize , lenAddr , len , s .mem ())
3482
+ store .Aux = Types [TINT ]
3483
+ s .vars [& memVar ] = store
3451
3484
}
3452
3485
if skip & skipCap == 0 {
3453
3486
cap := s .newValue1 (ssa .OpSliceCap , Types [TINT ], right )
3454
3487
capAddr := s .newValue1I (ssa .OpOffPtr , ptrto (Types [TINT ]), 2 * s .config .IntSize , left )
3455
- s .vars [& memVar ] = s .newValue3I (ssa .OpStore , ssa .TypeMem , s .config .IntSize , capAddr , cap , s .mem ())
3488
+ store := s .newValue3I (ssa .OpStore , ssa .TypeMem , s .config .IntSize , capAddr , cap , s .mem ())
3489
+ store .Aux = Types [TINT ]
3490
+ s .vars [& memVar ] = store
3456
3491
}
3457
3492
case t .IsInterface ():
3458
3493
// itab field doesn't need a write barrier (even though it is a pointer).
3459
3494
itab := s .newValue1 (ssa .OpITab , ptrto (Types [TUINT8 ]), right )
3460
- s .vars [& memVar ] = s .newValue3I (ssa .OpStore , ssa .TypeMem , s .config .IntSize , left , itab , s .mem ())
3495
+ store := s .newValue3I (ssa .OpStore , ssa .TypeMem , s .config .IntSize , left , itab , s .mem ())
3496
+ store .Aux = Types [TUINTPTR ]
3497
+ s .vars [& memVar ] = store
3461
3498
case t .IsStruct ():
3462
3499
n := t .NumFields ()
3463
3500
for i := 0 ; i < n ; i ++ {
@@ -3479,18 +3516,26 @@ func (s *state) storeTypeScalars(t *Type, left, right *ssa.Value, skip skipMask)
3479
3516
func (s * state ) storeTypePtrs (t * Type , left , right * ssa.Value ) {
3480
3517
switch {
3481
3518
case t .IsPtrShaped ():
3482
- s .vars [& memVar ] = s .newValue3I (ssa .OpStore , ssa .TypeMem , s .config .PtrSize , left , right , s .mem ())
3519
+ store := s .newValue3I (ssa .OpStore , ssa .TypeMem , s .config .PtrSize , left , right , s .mem ())
3520
+ store .Aux = t
3521
+ s .vars [& memVar ] = store
3483
3522
case t .IsString ():
3484
3523
ptr := s .newValue1 (ssa .OpStringPtr , ptrto (Types [TUINT8 ]), right )
3485
- s .vars [& memVar ] = s .newValue3I (ssa .OpStore , ssa .TypeMem , s .config .PtrSize , left , ptr , s .mem ())
3524
+ store := s .newValue3I (ssa .OpStore , ssa .TypeMem , s .config .PtrSize , left , ptr , s .mem ())
3525
+ store .Aux = ptrto (Types [TUINT8 ])
3526
+ s .vars [& memVar ] = store
3486
3527
case t .IsSlice ():
3487
3528
ptr := s .newValue1 (ssa .OpSlicePtr , ptrto (Types [TUINT8 ]), right )
3488
- s .vars [& memVar ] = s .newValue3I (ssa .OpStore , ssa .TypeMem , s .config .PtrSize , left , ptr , s .mem ())
3529
+ store := s .newValue3I (ssa .OpStore , ssa .TypeMem , s .config .PtrSize , left , ptr , s .mem ())
3530
+ store .Aux = ptrto (Types [TUINT8 ])
3531
+ s .vars [& memVar ] = store
3489
3532
case t .IsInterface ():
3490
3533
// itab field is treated as a scalar.
3491
3534
idata := s .newValue1 (ssa .OpIData , ptrto (Types [TUINT8 ]), right )
3492
3535
idataAddr := s .newValue1I (ssa .OpOffPtr , ptrto (ptrto (Types [TUINT8 ])), s .config .PtrSize , left )
3493
- s .vars [& memVar ] = s .newValue3I (ssa .OpStore , ssa .TypeMem , s .config .PtrSize , idataAddr , idata , s .mem ())
3536
+ store := s .newValue3I (ssa .OpStore , ssa .TypeMem , s .config .PtrSize , idataAddr , idata , s .mem ())
3537
+ store .Aux = ptrto (Types [TUINT8 ])
3538
+ s .vars [& memVar ] = store
3494
3539
case t .IsStruct ():
3495
3540
n := t .NumFields ()
3496
3541
for i := 0 ; i < n ; i ++ {
@@ -3515,18 +3560,26 @@ func (s *state) storeTypePtrs(t *Type, left, right *ssa.Value) {
3515
3560
func (s * state ) storeTypePtrsWB (t * Type , left , right * ssa.Value ) {
3516
3561
switch {
3517
3562
case t .IsPtrShaped ():
3518
- s .vars [& memVar ] = s .newValue3I (ssa .OpStoreWB , ssa .TypeMem , s .config .PtrSize , left , right , s .mem ())
3563
+ store := s .newValue3I (ssa .OpStoreWB , ssa .TypeMem , s .config .PtrSize , left , right , s .mem ())
3564
+ store .Aux = t
3565
+ s .vars [& memVar ] = store
3519
3566
case t .IsString ():
3520
3567
ptr := s .newValue1 (ssa .OpStringPtr , ptrto (Types [TUINT8 ]), right )
3521
- s .vars [& memVar ] = s .newValue3I (ssa .OpStoreWB , ssa .TypeMem , s .config .PtrSize , left , ptr , s .mem ())
3568
+ store := s .newValue3I (ssa .OpStoreWB , ssa .TypeMem , s .config .PtrSize , left , ptr , s .mem ())
3569
+ store .Aux = ptrto (Types [TUINT8 ])
3570
+ s .vars [& memVar ] = store
3522
3571
case t .IsSlice ():
3523
3572
ptr := s .newValue1 (ssa .OpSlicePtr , ptrto (Types [TUINT8 ]), right )
3524
- s .vars [& memVar ] = s .newValue3I (ssa .OpStoreWB , ssa .TypeMem , s .config .PtrSize , left , ptr , s .mem ())
3573
+ store := s .newValue3I (ssa .OpStoreWB , ssa .TypeMem , s .config .PtrSize , left , ptr , s .mem ())
3574
+ store .Aux = ptrto (Types [TUINT8 ])
3575
+ s .vars [& memVar ] = store
3525
3576
case t .IsInterface ():
3526
3577
// itab field is treated as a scalar.
3527
3578
idata := s .newValue1 (ssa .OpIData , ptrto (Types [TUINT8 ]), right )
3528
3579
idataAddr := s .newValue1I (ssa .OpOffPtr , ptrto (ptrto (Types [TUINT8 ])), s .config .PtrSize , left )
3529
- s .vars [& memVar ] = s .newValue3I (ssa .OpStoreWB , ssa .TypeMem , s .config .PtrSize , idataAddr , idata , s .mem ())
3580
+ store := s .newValue3I (ssa .OpStoreWB , ssa .TypeMem , s .config .PtrSize , idataAddr , idata , s .mem ())
3581
+ store .Aux = ptrto (Types [TUINT8 ])
3582
+ s .vars [& memVar ] = store
3530
3583
case t .IsStruct ():
3531
3584
n := t .NumFields ()
3532
3585
for i := 0 ; i < n ; i ++ {
@@ -4127,7 +4180,9 @@ func (s *state) dottype(n *Node, commaok bool) (res, resok *ssa.Value) {
4127
4180
}
4128
4181
} else {
4129
4182
p := s .newValue1 (ssa .OpIData , ptrto (n .Type ), iface )
4130
- s .vars [& memVar ] = s .newValue3I (ssa .OpMove , ssa .TypeMem , sizeAlignAuxInt (n .Type ), addr , p , s .mem ())
4183
+ store := s .newValue3I (ssa .OpMove , ssa .TypeMem , sizeAlignAuxInt (n .Type ), addr , p , s .mem ())
4184
+ store .Aux = n .Type
4185
+ s .vars [& memVar ] = store
4131
4186
}
4132
4187
s .vars [& okVar ] = s .constBool (true )
4133
4188
s .endBlock ()
@@ -4138,7 +4193,9 @@ func (s *state) dottype(n *Node, commaok bool) (res, resok *ssa.Value) {
4138
4193
if tmp == nil {
4139
4194
s .vars [valVar ] = s .zeroVal (n .Type )
4140
4195
} else {
4141
- s .vars [& memVar ] = s .newValue2I (ssa .OpZero , ssa .TypeMem , sizeAlignAuxInt (n .Type ), addr , s .mem ())
4196
+ store := s .newValue2I (ssa .OpZero , ssa .TypeMem , sizeAlignAuxInt (n .Type ), addr , s .mem ())
4197
+ store .Aux = n .Type
4198
+ s .vars [& memVar ] = store
4142
4199
}
4143
4200
s .vars [& okVar ] = s .constBool (false )
4144
4201
s .endBlock ()
0 commit comments