github.com/bir3/gocompiler@v0.3.205/src/cmd/compile/internal/ssa/rewriteRISCV64latelower.go (about) 1 // Code generated from _gen/RISCV64latelower.rules; DO NOT EDIT. 2 // generated with: cd _gen; go run . 3 4 package ssa 5 6 func rewriteValueRISCV64latelower(v *Value) bool { 7 switch v.Op { 8 case OpRISCV64SLLI: 9 return rewriteValueRISCV64latelower_OpRISCV64SLLI(v) 10 case OpRISCV64SRAI: 11 return rewriteValueRISCV64latelower_OpRISCV64SRAI(v) 12 case OpRISCV64SRLI: 13 return rewriteValueRISCV64latelower_OpRISCV64SRLI(v) 14 } 15 return false 16 } 17 func rewriteValueRISCV64latelower_OpRISCV64SLLI(v *Value) bool { 18 v_0 := v.Args[0] 19 b := v.Block 20 typ := &b.Func.Config.Types 21 // match: (SLLI [c] (MOVBUreg x)) 22 // cond: c <= 56 23 // result: (SRLI [56-c] (SLLI <typ.UInt64> [56] x)) 24 for { 25 c := auxIntToInt64(v.AuxInt) 26 if v_0.Op != OpRISCV64MOVBUreg { 27 break 28 } 29 x := v_0.Args[0] 30 if !(c <= 56) { 31 break 32 } 33 v.reset(OpRISCV64SRLI) 34 v.AuxInt = int64ToAuxInt(56 - c) 35 v0 := b.NewValue0(v.Pos, OpRISCV64SLLI, typ.UInt64) 36 v0.AuxInt = int64ToAuxInt(56) 37 v0.AddArg(x) 38 v.AddArg(v0) 39 return true 40 } 41 // match: (SLLI [c] (MOVHUreg x)) 42 // cond: c <= 48 43 // result: (SRLI [48-c] (SLLI <typ.UInt64> [48] x)) 44 for { 45 c := auxIntToInt64(v.AuxInt) 46 if v_0.Op != OpRISCV64MOVHUreg { 47 break 48 } 49 x := v_0.Args[0] 50 if !(c <= 48) { 51 break 52 } 53 v.reset(OpRISCV64SRLI) 54 v.AuxInt = int64ToAuxInt(48 - c) 55 v0 := b.NewValue0(v.Pos, OpRISCV64SLLI, typ.UInt64) 56 v0.AuxInt = int64ToAuxInt(48) 57 v0.AddArg(x) 58 v.AddArg(v0) 59 return true 60 } 61 // match: (SLLI [c] (MOVWUreg x)) 62 // cond: c <= 32 63 // result: (SRLI [32-c] (SLLI <typ.UInt64> [32] x)) 64 for { 65 c := auxIntToInt64(v.AuxInt) 66 if v_0.Op != OpRISCV64MOVWUreg { 67 break 68 } 69 x := v_0.Args[0] 70 if !(c <= 32) { 71 break 72 } 73 v.reset(OpRISCV64SRLI) 74 v.AuxInt = int64ToAuxInt(32 - c) 75 v0 := b.NewValue0(v.Pos, OpRISCV64SLLI, typ.UInt64) 76 v0.AuxInt = int64ToAuxInt(32) 77 v0.AddArg(x) 78 v.AddArg(v0) 79 return true 80 } 81 // match: (SLLI [0] x) 82 // result: x 83 for { 84 if auxIntToInt64(v.AuxInt) != 0 { 85 break 86 } 87 x := v_0 88 v.copyOf(x) 89 return true 90 } 91 return false 92 } 93 func rewriteValueRISCV64latelower_OpRISCV64SRAI(v *Value) bool { 94 v_0 := v.Args[0] 95 b := v.Block 96 typ := &b.Func.Config.Types 97 // match: (SRAI [c] (MOVBreg x)) 98 // cond: c < 8 99 // result: (SRAI [56+c] (SLLI <typ.Int64> [56] x)) 100 for { 101 c := auxIntToInt64(v.AuxInt) 102 if v_0.Op != OpRISCV64MOVBreg { 103 break 104 } 105 x := v_0.Args[0] 106 if !(c < 8) { 107 break 108 } 109 v.reset(OpRISCV64SRAI) 110 v.AuxInt = int64ToAuxInt(56 + c) 111 v0 := b.NewValue0(v.Pos, OpRISCV64SLLI, typ.Int64) 112 v0.AuxInt = int64ToAuxInt(56) 113 v0.AddArg(x) 114 v.AddArg(v0) 115 return true 116 } 117 // match: (SRAI [c] (MOVHreg x)) 118 // cond: c < 16 119 // result: (SRAI [48+c] (SLLI <typ.Int64> [48] x)) 120 for { 121 c := auxIntToInt64(v.AuxInt) 122 if v_0.Op != OpRISCV64MOVHreg { 123 break 124 } 125 x := v_0.Args[0] 126 if !(c < 16) { 127 break 128 } 129 v.reset(OpRISCV64SRAI) 130 v.AuxInt = int64ToAuxInt(48 + c) 131 v0 := b.NewValue0(v.Pos, OpRISCV64SLLI, typ.Int64) 132 v0.AuxInt = int64ToAuxInt(48) 133 v0.AddArg(x) 134 v.AddArg(v0) 135 return true 136 } 137 // match: (SRAI [c] (MOVWreg x)) 138 // cond: c < 32 139 // result: (SRAI [32+c] (SLLI <typ.Int64> [32] x)) 140 for { 141 c := auxIntToInt64(v.AuxInt) 142 if v_0.Op != OpRISCV64MOVWreg { 143 break 144 } 145 x := v_0.Args[0] 146 if !(c < 32) { 147 break 148 } 149 v.reset(OpRISCV64SRAI) 150 v.AuxInt = int64ToAuxInt(32 + c) 151 v0 := b.NewValue0(v.Pos, OpRISCV64SLLI, typ.Int64) 152 v0.AuxInt = int64ToAuxInt(32) 153 v0.AddArg(x) 154 v.AddArg(v0) 155 return true 156 } 157 // match: (SRAI [0] x) 158 // result: x 159 for { 160 if auxIntToInt64(v.AuxInt) != 0 { 161 break 162 } 163 x := v_0 164 v.copyOf(x) 165 return true 166 } 167 return false 168 } 169 func rewriteValueRISCV64latelower_OpRISCV64SRLI(v *Value) bool { 170 v_0 := v.Args[0] 171 b := v.Block 172 typ := &b.Func.Config.Types 173 // match: (SRLI [c] (MOVBUreg x)) 174 // cond: c < 8 175 // result: (SRLI [56+c] (SLLI <typ.UInt64> [56] x)) 176 for { 177 c := auxIntToInt64(v.AuxInt) 178 if v_0.Op != OpRISCV64MOVBUreg { 179 break 180 } 181 x := v_0.Args[0] 182 if !(c < 8) { 183 break 184 } 185 v.reset(OpRISCV64SRLI) 186 v.AuxInt = int64ToAuxInt(56 + c) 187 v0 := b.NewValue0(v.Pos, OpRISCV64SLLI, typ.UInt64) 188 v0.AuxInt = int64ToAuxInt(56) 189 v0.AddArg(x) 190 v.AddArg(v0) 191 return true 192 } 193 // match: (SRLI [c] (MOVHUreg x)) 194 // cond: c < 16 195 // result: (SRLI [48+c] (SLLI <typ.UInt64> [48] x)) 196 for { 197 c := auxIntToInt64(v.AuxInt) 198 if v_0.Op != OpRISCV64MOVHUreg { 199 break 200 } 201 x := v_0.Args[0] 202 if !(c < 16) { 203 break 204 } 205 v.reset(OpRISCV64SRLI) 206 v.AuxInt = int64ToAuxInt(48 + c) 207 v0 := b.NewValue0(v.Pos, OpRISCV64SLLI, typ.UInt64) 208 v0.AuxInt = int64ToAuxInt(48) 209 v0.AddArg(x) 210 v.AddArg(v0) 211 return true 212 } 213 // match: (SRLI [c] (MOVWUreg x)) 214 // cond: c < 32 215 // result: (SRLI [32+c] (SLLI <typ.UInt64> [32] x)) 216 for { 217 c := auxIntToInt64(v.AuxInt) 218 if v_0.Op != OpRISCV64MOVWUreg { 219 break 220 } 221 x := v_0.Args[0] 222 if !(c < 32) { 223 break 224 } 225 v.reset(OpRISCV64SRLI) 226 v.AuxInt = int64ToAuxInt(32 + c) 227 v0 := b.NewValue0(v.Pos, OpRISCV64SLLI, typ.UInt64) 228 v0.AuxInt = int64ToAuxInt(32) 229 v0.AddArg(x) 230 v.AddArg(v0) 231 return true 232 } 233 // match: (SRLI [0] x) 234 // result: x 235 for { 236 if auxIntToInt64(v.AuxInt) != 0 { 237 break 238 } 239 x := v_0 240 v.copyOf(x) 241 return true 242 } 243 return false 244 } 245 func rewriteBlockRISCV64latelower(b *Block) bool { 246 return false 247 }