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  }