|
523 | 523 | (MOVDstore [off1] {sym} (ADDconst [off2] ptr) val mem) -> (MOVDstore [off1+off2] {sym} ptr val mem)
|
524 | 524 | (FMOVSstore [off1] {sym} (ADDconst [off2] ptr) val mem) -> (FMOVSstore [off1+off2] {sym} ptr val mem)
|
525 | 525 | (FMOVDstore [off1] {sym} (ADDconst [off2] ptr) val mem) -> (FMOVDstore [off1+off2] {sym} ptr val mem)
|
| 526 | +(MOVBstorezero [off1] {sym} (ADDconst [off2] ptr) mem) -> (MOVBstorezero [off1+off2] {sym} ptr mem) |
| 527 | +(MOVHstorezero [off1] {sym} (ADDconst [off2] ptr) mem) -> (MOVHstorezero [off1+off2] {sym} ptr mem) |
| 528 | +(MOVWstorezero [off1] {sym} (ADDconst [off2] ptr) mem) -> (MOVWstorezero [off1+off2] {sym} ptr mem) |
| 529 | +(MOVDstorezero [off1] {sym} (ADDconst [off2] ptr) mem) -> (MOVDstorezero [off1+off2] {sym} ptr mem) |
526 | 530 |
|
527 | 531 | (MOVBload [off1] {sym1} (MOVDaddr [off2] {sym2} ptr) mem) && canMergeSym(sym1,sym2) ->
|
528 | 532 | (MOVBload [off1+off2] {mergeSym(sym1,sym2)} ptr mem)
|
|
555 | 559 | (FMOVSstore [off1+off2] {mergeSym(sym1,sym2)} ptr val mem)
|
556 | 560 | (FMOVDstore [off1] {sym1} (MOVDaddr [off2] {sym2} ptr) val mem) && canMergeSym(sym1,sym2) ->
|
557 | 561 | (FMOVDstore [off1+off2] {mergeSym(sym1,sym2)} ptr val mem)
|
| 562 | +(MOVBstorezero [off1] {sym1} (MOVDaddr [off2] {sym2} ptr) mem) && canMergeSym(sym1,sym2) -> |
| 563 | + (MOVBstorezero [off1+off2] {mergeSym(sym1,sym2)} ptr mem) |
| 564 | +(MOVHstorezero [off1] {sym1} (MOVDaddr [off2] {sym2} ptr) mem) && canMergeSym(sym1,sym2) -> |
| 565 | + (MOVHstorezero [off1+off2] {mergeSym(sym1,sym2)} ptr mem) |
| 566 | +(MOVWstorezero [off1] {sym1} (MOVDaddr [off2] {sym2} ptr) mem) && canMergeSym(sym1,sym2) -> |
| 567 | + (MOVWstorezero [off1+off2] {mergeSym(sym1,sym2)} ptr mem) |
| 568 | +(MOVDstorezero [off1] {sym1} (MOVDaddr [off2] {sym2} ptr) mem) && canMergeSym(sym1,sym2) -> |
| 569 | + (MOVDstorezero [off1+off2] {mergeSym(sym1,sym2)} ptr mem) |
| 570 | + |
| 571 | +// store zero |
| 572 | +(MOVBstore [off] {sym} ptr (MOVDconst [0]) mem) -> (MOVBstorezero [off] {sym} ptr mem) |
| 573 | +(MOVHstore [off] {sym} ptr (MOVDconst [0]) mem) -> (MOVHstorezero [off] {sym} ptr mem) |
| 574 | +(MOVWstore [off] {sym} ptr (MOVDconst [0]) mem) -> (MOVWstorezero [off] {sym} ptr mem) |
| 575 | +(MOVDstore [off] {sym} ptr (MOVDconst [0]) mem) -> (MOVDstorezero [off] {sym} ptr mem) |
558 | 576 |
|
559 | 577 | // replace load from same location as preceding store with copy
|
560 | 578 | (MOVBload [off] {sym} ptr (MOVBstore [off2] {sym2} ptr2 x _)) && sym == sym2 && off == off2 && isSamePtr(ptr, ptr2) -> x
|
|
567 | 585 | (FMOVSload [off] {sym} ptr (FMOVSstore [off2] {sym2} ptr2 x _)) && sym == sym2 && off == off2 && isSamePtr(ptr, ptr2) -> x
|
568 | 586 | (FMOVDload [off] {sym} ptr (FMOVDstore [off2] {sym2} ptr2 x _)) && sym == sym2 && off == off2 && isSamePtr(ptr, ptr2) -> x
|
569 | 587 |
|
| 588 | +(MOVBload [off] {sym} ptr (MOVBstorezero [off2] {sym2} ptr2 _)) && sym == sym2 && off == off2 && isSamePtr(ptr, ptr2) -> (MOVDconst [0]) |
| 589 | +(MOVBUload [off] {sym} ptr (MOVBstorezero [off2] {sym2} ptr2 _)) && sym == sym2 && off == off2 && isSamePtr(ptr, ptr2) -> (MOVDconst [0]) |
| 590 | +(MOVHload [off] {sym} ptr (MOVHstorezero [off2] {sym2} ptr2 _)) && sym == sym2 && off == off2 && isSamePtr(ptr, ptr2) -> (MOVDconst [0]) |
| 591 | +(MOVHUload [off] {sym} ptr (MOVHstorezero [off2] {sym2} ptr2 _)) && sym == sym2 && off == off2 && isSamePtr(ptr, ptr2) -> (MOVDconst [0]) |
| 592 | +(MOVWload [off] {sym} ptr (MOVWstorezero [off2] {sym2} ptr2 _)) && sym == sym2 && off == off2 && isSamePtr(ptr, ptr2) -> (MOVDconst [0]) |
| 593 | +(MOVWUload [off] {sym} ptr (MOVWstorezero [off2] {sym2} ptr2 _)) && sym == sym2 && off == off2 && isSamePtr(ptr, ptr2) -> (MOVDconst [0]) |
| 594 | +(MOVDload [off] {sym} ptr (MOVDstorezero [off2] {sym2} ptr2 _)) && sym == sym2 && off == off2 && isSamePtr(ptr, ptr2) -> (MOVDconst [0]) |
| 595 | + |
570 | 596 | // don't extend after proper load
|
571 | 597 | (MOVBreg x:(MOVBload _ _)) -> (MOVDreg x)
|
572 | 598 | (MOVBUreg x:(MOVBUload _ _)) -> (MOVDreg x)
|
|
645 | 671 | (MUL _ (MOVDconst [0])) -> (MOVDconst [0])
|
646 | 672 | (MUL x (MOVDconst [1])) -> x
|
647 | 673 | (MUL x (MOVDconst [c])) && isPowerOfTwo(c) -> (SLLconst [log2(c)] x)
|
| 674 | +(MUL x (MOVDconst [c])) && isPowerOfTwo(c-1) && c >= 3 -> (ADDshiftLL x x [log2(c-1)]) |
| 675 | +(MUL x (MOVDconst [c])) && isPowerOfTwo(c+1) && c >= 7 -> (ADDshiftLL (NEG <x.Type> x) x [log2(c+1)]) |
| 676 | +(MUL x (MOVDconst [c])) && c%3 == 0 && isPowerOfTwo(c/3) -> (SLLconst [log2(c/3)] (ADDshiftLL <x.Type> x x [1])) |
| 677 | +(MUL x (MOVDconst [c])) && c%5 == 0 && isPowerOfTwo(c/5) -> (SLLconst [log2(c/5)] (ADDshiftLL <x.Type> x x [2])) |
| 678 | +(MUL x (MOVDconst [c])) && c%7 == 0 && isPowerOfTwo(c/7) -> (SLLconst [log2(c/7)] (ADDshiftLL <x.Type> (NEG <x.Type> x) x [3])) |
| 679 | +(MUL x (MOVDconst [c])) && c%9 == 0 && isPowerOfTwo(c/9) -> (SLLconst [log2(c/9)] (ADDshiftLL <x.Type> x x [3])) |
648 | 680 |
|
649 | 681 | (MUL (MOVDconst [-1]) x) -> (NEG x)
|
650 | 682 | (MUL (MOVDconst [0]) _) -> (MOVDconst [0])
|
651 | 683 | (MUL (MOVDconst [1]) x) -> x
|
652 | 684 | (MUL (MOVDconst [c]) x) && isPowerOfTwo(c) -> (SLLconst [log2(c)] x)
|
| 685 | +(MUL (MOVDconst [c]) x) && isPowerOfTwo(c) -> (SLLconst [log2(c)] x) |
| 686 | +(MUL (MOVDconst [c]) x) && isPowerOfTwo(c-1) && c >= 3 -> (ADDshiftLL x x [log2(c-1)]) |
| 687 | +(MUL (MOVDconst [c]) x) && isPowerOfTwo(c+1) && c >= 7 -> (ADDshiftLL (NEG <x.Type> x) x [log2(c+1)]) |
| 688 | +(MUL (MOVDconst [c]) x) && c%3 == 0 && isPowerOfTwo(c/3) -> (SLLconst [log2(c/3)] (ADDshiftLL <x.Type> x x [1])) |
| 689 | +(MUL (MOVDconst [c]) x) && c%5 == 0 && isPowerOfTwo(c/5) -> (SLLconst [log2(c/5)] (ADDshiftLL <x.Type> x x [2])) |
| 690 | +(MUL (MOVDconst [c]) x) && c%7 == 0 && isPowerOfTwo(c/7) -> (SLLconst [log2(c/7)] (ADDshiftLL <x.Type> (NEG <x.Type> x) x [3])) |
| 691 | +(MUL (MOVDconst [c]) x) && c%9 == 0 && isPowerOfTwo(c/9) -> (SLLconst [log2(c/9)] (ADDshiftLL <x.Type> x x [3])) |
653 | 692 |
|
654 | 693 | (MULW x (MOVDconst [c])) && int32(c)==-1 -> (NEG x)
|
655 | 694 | (MULW _ (MOVDconst [c])) && int32(c)==0 -> (MOVDconst [0])
|
656 | 695 | (MULW x (MOVDconst [c])) && int32(c)==1 -> x
|
657 | 696 | (MULW x (MOVDconst [c])) && isPowerOfTwo(c) -> (SLLconst [log2(c)] x)
|
| 697 | +(MULW x (MOVDconst [c])) && isPowerOfTwo(c-1) && int32(c) >= 3 -> (ADDshiftLL x x [log2(c-1)]) |
| 698 | +(MULW x (MOVDconst [c])) && isPowerOfTwo(c+1) && int32(c) >= 7 -> (ADDshiftLL (NEG <x.Type> x) x [log2(c+1)]) |
| 699 | +(MULW x (MOVDconst [c])) && c%3 == 0 && isPowerOfTwo(c/3) && is32Bit(c) -> (SLLconst [log2(c/3)] (ADDshiftLL <x.Type> x x [1])) |
| 700 | +(MULW x (MOVDconst [c])) && c%5 == 0 && isPowerOfTwo(c/5) && is32Bit(c) -> (SLLconst [log2(c/5)] (ADDshiftLL <x.Type> x x [2])) |
| 701 | +(MULW x (MOVDconst [c])) && c%7 == 0 && isPowerOfTwo(c/7) && is32Bit(c) -> (SLLconst [log2(c/7)] (ADDshiftLL <x.Type> (NEG <x.Type> x) x [3])) |
| 702 | +(MULW x (MOVDconst [c])) && c%9 == 0 && isPowerOfTwo(c/9) && is32Bit(c) -> (SLLconst [log2(c/9)] (ADDshiftLL <x.Type> x x [3])) |
658 | 703 |
|
659 | 704 | (MULW (MOVDconst [c]) x) && int32(c)==-1 -> (NEG x)
|
660 | 705 | (MULW (MOVDconst [c]) _) && int32(c)==0 -> (MOVDconst [0])
|
661 | 706 | (MULW (MOVDconst [c]) x) && int32(c)==1 -> x
|
662 | 707 | (MULW (MOVDconst [c]) x) && isPowerOfTwo(c) -> (SLLconst [log2(c)] x)
|
| 708 | +(MULW (MOVDconst [c]) x) && isPowerOfTwo(c-1) && int32(c) >= 3 -> (ADDshiftLL x x [log2(c-1)]) |
| 709 | +(MULW (MOVDconst [c]) x) && isPowerOfTwo(c+1) && int32(c) >= 7 -> (ADDshiftLL (NEG <x.Type> x) x [log2(c+1)]) |
| 710 | +(MULW (MOVDconst [c]) x) && c%3 == 0 && isPowerOfTwo(c/3) && is32Bit(c) -> (SLLconst [log2(c/3)] (ADDshiftLL <x.Type> x x [1])) |
| 711 | +(MULW (MOVDconst [c]) x) && c%5 == 0 && isPowerOfTwo(c/5) && is32Bit(c) -> (SLLconst [log2(c/5)] (ADDshiftLL <x.Type> x x [2])) |
| 712 | +(MULW (MOVDconst [c]) x) && c%7 == 0 && isPowerOfTwo(c/7) && is32Bit(c) -> (SLLconst [log2(c/7)] (ADDshiftLL <x.Type> (NEG <x.Type> x) x [3])) |
| 713 | +(MULW (MOVDconst [c]) x) && c%9 == 0 && isPowerOfTwo(c/9) && is32Bit(c) -> (SLLconst [log2(c/9)] (ADDshiftLL <x.Type> x x [3])) |
663 | 714 |
|
664 | 715 | // div by constant
|
665 | 716 | (UDIV x (MOVDconst [1])) -> x
|
|
680 | 731 | (XOR x x) -> (MOVDconst [0])
|
681 | 732 | (BIC x x) -> (MOVDconst [0])
|
682 | 733 | (AND x (MVN y)) -> (BIC x y)
|
| 734 | +(CSELULT x (MOVDconst [0]) flag) -> (CSELULT0 x flag) |
683 | 735 |
|
684 | 736 | // remove redundant *const ops
|
685 | 737 | (ADDconst [0] x) -> x
|
|
903 | 955 | (CSELULT _ y (FlagLT_UGT)) -> y
|
904 | 956 | (CSELULT x _ (FlagGT_ULT)) -> x
|
905 | 957 | (CSELULT _ y (FlagGT_UGT)) -> y
|
| 958 | +(CSELULT0 _ (FlagEQ)) -> (MOVDconst [0]) |
| 959 | +(CSELULT0 x (FlagLT_ULT)) -> x |
| 960 | +(CSELULT0 _ (FlagLT_UGT)) -> (MOVDconst [0]) |
| 961 | +(CSELULT0 x (FlagGT_ULT)) -> x |
| 962 | +(CSELULT0 _ (FlagGT_UGT)) -> (MOVDconst [0]) |
| 963 | + |
| 964 | +// absorb shifts into ops |
| 965 | +(ADD x (SLLconst [c] y)) -> (ADDshiftLL x y [c]) |
| 966 | +(ADD (SLLconst [c] y) x) -> (ADDshiftLL x y [c]) |
| 967 | +(ADD x (SRLconst [c] y)) -> (ADDshiftRL x y [c]) |
| 968 | +(ADD (SRLconst [c] y) x) -> (ADDshiftRL x y [c]) |
| 969 | +(ADD x (SRAconst [c] y)) -> (ADDshiftRA x y [c]) |
| 970 | +(ADD (SRAconst [c] y) x) -> (ADDshiftRA x y [c]) |
| 971 | +(SUB x (SLLconst [c] y)) -> (SUBshiftLL x y [c]) |
| 972 | +(SUB x (SRLconst [c] y)) -> (SUBshiftRL x y [c]) |
| 973 | +(SUB x (SRAconst [c] y)) -> (SUBshiftRA x y [c]) |
| 974 | +(AND x (SLLconst [c] y)) -> (ANDshiftLL x y [c]) |
| 975 | +(AND (SLLconst [c] y) x) -> (ANDshiftLL x y [c]) |
| 976 | +(AND x (SRLconst [c] y)) -> (ANDshiftRL x y [c]) |
| 977 | +(AND (SRLconst [c] y) x) -> (ANDshiftRL x y [c]) |
| 978 | +(AND x (SRAconst [c] y)) -> (ANDshiftRA x y [c]) |
| 979 | +(AND (SRAconst [c] y) x) -> (ANDshiftRA x y [c]) |
| 980 | +(OR x (SLLconst [c] y)) -> (ORshiftLL x y [c]) |
| 981 | +(OR (SLLconst [c] y) x) -> (ORshiftLL x y [c]) |
| 982 | +(OR x (SRLconst [c] y)) -> (ORshiftRL x y [c]) |
| 983 | +(OR (SRLconst [c] y) x) -> (ORshiftRL x y [c]) |
| 984 | +(OR x (SRAconst [c] y)) -> (ORshiftRA x y [c]) |
| 985 | +(OR (SRAconst [c] y) x) -> (ORshiftRA x y [c]) |
| 986 | +(XOR x (SLLconst [c] y)) -> (XORshiftLL x y [c]) |
| 987 | +(XOR (SLLconst [c] y) x) -> (XORshiftLL x y [c]) |
| 988 | +(XOR x (SRLconst [c] y)) -> (XORshiftRL x y [c]) |
| 989 | +(XOR (SRLconst [c] y) x) -> (XORshiftRL x y [c]) |
| 990 | +(XOR x (SRAconst [c] y)) -> (XORshiftRA x y [c]) |
| 991 | +(XOR (SRAconst [c] y) x) -> (XORshiftRA x y [c]) |
| 992 | +(BIC x (SLLconst [c] y)) -> (BICshiftLL x y [c]) |
| 993 | +(BIC x (SRLconst [c] y)) -> (BICshiftRL x y [c]) |
| 994 | +(BIC x (SRAconst [c] y)) -> (BICshiftRA x y [c]) |
| 995 | +(CMP x (SLLconst [c] y)) -> (CMPshiftLL x y [c]) |
| 996 | +(CMP (SLLconst [c] y) x) -> (InvertFlags (CMPshiftLL x y [c])) |
| 997 | +(CMP x (SRLconst [c] y)) -> (CMPshiftRL x y [c]) |
| 998 | +(CMP (SRLconst [c] y) x) -> (InvertFlags (CMPshiftRL x y [c])) |
| 999 | +(CMP x (SRAconst [c] y)) -> (CMPshiftRA x y [c]) |
| 1000 | +(CMP (SRAconst [c] y) x) -> (InvertFlags (CMPshiftRA x y [c])) |
| 1001 | + |
| 1002 | +// prefer *const ops to *shift ops |
| 1003 | +(ADDshiftLL (MOVDconst [c]) x [d]) -> (ADDconst [c] (SLLconst <x.Type> x [d])) |
| 1004 | +(ADDshiftRL (MOVDconst [c]) x [d]) -> (ADDconst [c] (SRLconst <x.Type> x [d])) |
| 1005 | +(ADDshiftRA (MOVDconst [c]) x [d]) -> (ADDconst [c] (SRAconst <x.Type> x [d])) |
| 1006 | +(ANDshiftLL (MOVDconst [c]) x [d]) -> (ANDconst [c] (SLLconst <x.Type> x [d])) |
| 1007 | +(ANDshiftRL (MOVDconst [c]) x [d]) -> (ANDconst [c] (SRLconst <x.Type> x [d])) |
| 1008 | +(ANDshiftRA (MOVDconst [c]) x [d]) -> (ANDconst [c] (SRAconst <x.Type> x [d])) |
| 1009 | +(ORshiftLL (MOVDconst [c]) x [d]) -> (ORconst [c] (SLLconst <x.Type> x [d])) |
| 1010 | +(ORshiftRL (MOVDconst [c]) x [d]) -> (ORconst [c] (SRLconst <x.Type> x [d])) |
| 1011 | +(ORshiftRA (MOVDconst [c]) x [d]) -> (ORconst [c] (SRAconst <x.Type> x [d])) |
| 1012 | +(XORshiftLL (MOVDconst [c]) x [d]) -> (XORconst [c] (SLLconst <x.Type> x [d])) |
| 1013 | +(XORshiftRL (MOVDconst [c]) x [d]) -> (XORconst [c] (SRLconst <x.Type> x [d])) |
| 1014 | +(XORshiftRA (MOVDconst [c]) x [d]) -> (XORconst [c] (SRAconst <x.Type> x [d])) |
| 1015 | +(CMPshiftLL (MOVDconst [c]) x [d]) -> (InvertFlags (CMPconst [c] (SLLconst <x.Type> x [d]))) |
| 1016 | +(CMPshiftRL (MOVDconst [c]) x [d]) -> (InvertFlags (CMPconst [c] (SRLconst <x.Type> x [d]))) |
| 1017 | +(CMPshiftRA (MOVDconst [c]) x [d]) -> (InvertFlags (CMPconst [c] (SRAconst <x.Type> x [d]))) |
| 1018 | + |
| 1019 | +// constant folding in *shift ops |
| 1020 | +(ADDshiftLL x (MOVDconst [c]) [d]) -> (ADDconst x [int64(uint64(c)<<uint64(d))]) |
| 1021 | +(ADDshiftRL x (MOVDconst [c]) [d]) -> (ADDconst x [int64(uint64(c)>>uint64(d))]) |
| 1022 | +(ADDshiftRA x (MOVDconst [c]) [d]) -> (ADDconst x [int64(int64(c)>>uint64(d))]) |
| 1023 | +(SUBshiftLL x (MOVDconst [c]) [d]) -> (SUBconst x [int64(uint64(c)<<uint64(d))]) |
| 1024 | +(SUBshiftRL x (MOVDconst [c]) [d]) -> (SUBconst x [int64(uint64(c)>>uint64(d))]) |
| 1025 | +(SUBshiftRA x (MOVDconst [c]) [d]) -> (SUBconst x [int64(int64(c)>>uint64(d))]) |
| 1026 | +(ANDshiftLL x (MOVDconst [c]) [d]) -> (ANDconst x [int64(uint64(c)<<uint64(d))]) |
| 1027 | +(ANDshiftRL x (MOVDconst [c]) [d]) -> (ANDconst x [int64(uint64(c)>>uint64(d))]) |
| 1028 | +(ANDshiftRA x (MOVDconst [c]) [d]) -> (ANDconst x [int64(int64(c)>>uint64(d))]) |
| 1029 | +(ORshiftLL x (MOVDconst [c]) [d]) -> (ORconst x [int64(uint64(c)<<uint64(d))]) |
| 1030 | +(ORshiftRL x (MOVDconst [c]) [d]) -> (ORconst x [int64(uint64(c)>>uint64(d))]) |
| 1031 | +(ORshiftRA x (MOVDconst [c]) [d]) -> (ORconst x [int64(int64(c)>>uint64(d))]) |
| 1032 | +(XORshiftLL x (MOVDconst [c]) [d]) -> (XORconst x [int64(uint64(c)<<uint64(d))]) |
| 1033 | +(XORshiftRL x (MOVDconst [c]) [d]) -> (XORconst x [int64(uint64(c)>>uint64(d))]) |
| 1034 | +(XORshiftRA x (MOVDconst [c]) [d]) -> (XORconst x [int64(int64(c)>>uint64(d))]) |
| 1035 | +(BICshiftLL x (MOVDconst [c]) [d]) -> (BICconst x [int64(uint64(c)<<uint64(d))]) |
| 1036 | +(BICshiftRL x (MOVDconst [c]) [d]) -> (BICconst x [int64(uint64(c)>>uint64(d))]) |
| 1037 | +(BICshiftRA x (MOVDconst [c]) [d]) -> (BICconst x [int64(int64(c)>>uint64(d))]) |
| 1038 | +(CMPshiftLL x (MOVDconst [c]) [d]) -> (CMPconst x [int64(uint64(c)<<uint64(d))]) |
| 1039 | +(CMPshiftRL x (MOVDconst [c]) [d]) -> (CMPconst x [int64(uint64(c)>>uint64(d))]) |
| 1040 | +(CMPshiftRA x (MOVDconst [c]) [d]) -> (CMPconst x [int64(int64(c)>>uint64(d))]) |
| 1041 | + |
| 1042 | +// simplification with *shift ops |
| 1043 | +(SUBshiftLL x (SLLconst x [c]) [d]) && c==d -> (MOVDconst [0]) |
| 1044 | +(SUBshiftRL x (SRLconst x [c]) [d]) && c==d -> (MOVDconst [0]) |
| 1045 | +(SUBshiftRA x (SRAconst x [c]) [d]) && c==d -> (MOVDconst [0]) |
| 1046 | +(ANDshiftLL x y:(SLLconst x [c]) [d]) && c==d -> y |
| 1047 | +(ANDshiftRL x y:(SRLconst x [c]) [d]) && c==d -> y |
| 1048 | +(ANDshiftRA x y:(SRAconst x [c]) [d]) && c==d -> y |
| 1049 | +(ORshiftLL x y:(SLLconst x [c]) [d]) && c==d -> y |
| 1050 | +(ORshiftRL x y:(SRLconst x [c]) [d]) && c==d -> y |
| 1051 | +(ORshiftRA x y:(SRAconst x [c]) [d]) && c==d -> y |
| 1052 | +(XORshiftLL x (SLLconst x [c]) [d]) && c==d -> (MOVDconst [0]) |
| 1053 | +(XORshiftRL x (SRLconst x [c]) [d]) && c==d -> (MOVDconst [0]) |
| 1054 | +(XORshiftRA x (SRAconst x [c]) [d]) && c==d -> (MOVDconst [0]) |
| 1055 | +(BICshiftLL x (SLLconst x [c]) [d]) && c==d -> (MOVDconst [0]) |
| 1056 | +(BICshiftRL x (SRLconst x [c]) [d]) && c==d -> (MOVDconst [0]) |
| 1057 | +(BICshiftRA x (SRAconst x [c]) [d]) && c==d -> (MOVDconst [0]) |
0 commit comments