|
23 | 23 | (SRAI [0] x) => x |
24 | 24 | (SRLI [0] x) => x |
25 | 25 | (SLLI [0] x) => x |
26 | | - |
27 | | -// "Zicond" Extension for Integer Conditional Operations |
28 | | -// Optimize specific patterns based on the unified OR(CZEROEQZ, CZERONEZ) form |
29 | | -// (x == 0) ? x : y -> CZEROEQZ y x (when x is the condition) |
30 | | -(OR (CZERONEZ <t> x x) (CZEROEQZ <t> y x)) => (CZEROEQZ <t> y x) |
31 | | - |
32 | | -// (z == 0) ? ((OP x y)) : x => (OP x (CZERONEZ y z)) |
33 | | -(OR (CZERONEZ <t> ((ADD|SUB|OR|XOR|SUBW) x y) z) (CZEROEQZ <t> x z)) => ((ADD|SUB|OR|XOR|SUBW) x (CZERONEZ <t> y z)) |
34 | | -// (z != 0) ? ((OP x y)) : x => (OP x (CZEROEQZ y z)) |
35 | | -(OR (CZEROEQZ <t> ((ADD|SUB|OR|XOR|SUBW) x y) z) (CZERONEZ <t> x z)) => ((ADD|SUB|OR|XOR|SUBW) x (CZEROEQZ <t> y z)) |
36 | | - |
37 | | -// (z == 0) ? (x & y) : x => OR(AND x y, CZEROEQZ x z) |
38 | | -(OR (CZERONEZ <t> (AND x y) z) (CZEROEQZ <t> x z)) => (OR (AND <t> x y) (CZEROEQZ <t> x z)) |
39 | | -// (z != 0) ? (x & y) : x => OR(AND x y, CZERONEZ x z) |
40 | | -(OR (CZEROEQZ <t> (AND x y) z) (CZERONEZ <t> x z)) => (OR (AND <t> x y) (CZERONEZ <t> x z)) |
41 | | - |
42 | | -// (z == 0) ? (x & c) : x => OR(AND x c, CZEROEQZ x z) |
43 | | -(OR (CZERONEZ <t> (ANDI [c] x) z) (CZEROEQZ <t> x z)) => (OR (AND <t> x (MOVDconst [c])) (CZEROEQZ <t> x z)) |
44 | | -// (z != 0) ? (x & c) : x => OR(AND x c, CZERONEZ x z) |
45 | | -(OR (CZEROEQZ <t> (ANDI [c] x) z) (CZERONEZ <t> x z)) => (OR (AND <t> x (MOVDconst [c])) (CZERONEZ <t> x z)) |
46 | | - |
47 | | -// (z == 0) ? ((OPI [c] x)) : x => (OP x (CZERONEZ c z)) |
48 | | -(OR (CZERONEZ <t> ((ADDI|ORI|XORI) [c] x) z) (CZEROEQZ <t> x z)) => ((ADD|OR|XOR) x (CZERONEZ <t> (MOVDconst [c]) z)) |
49 | | -// (z != 0) ? ((OPI [c] x)) : x => (OP x (CZEROEQZ c z)) |
50 | | -(OR (CZEROEQZ <t> ((ADDI|ORI|XORI) [c] x) z) (CZERONEZ <t> x z)) => ((ADD|OR|XOR) x (CZEROEQZ <t> (MOVDconst [c]) z)) |
51 | | - |
52 | | -// (z == 0) ? (ADDIW [c] x) : x |
53 | | -(OR (CZERONEZ <t> (ADDIW [c] x) z) (CZEROEQZ <t> x z)) => (ADD x (CZERONEZ <t> (MOVDconst [int64(int32(c))]) z)) |
54 | | -// (z != 0) ? (ADDIW [c] x) : x |
55 | | -(OR (CZEROEQZ <t> (ADDIW [c] x) z) (CZERONEZ <t> x z)) => (ADD x (CZEROEQZ <t> (MOVDconst [int64(int32(c))]) z)) |
56 | | - |
57 | | -// (cond == 0) ? 0 : const => CZERONEZ const cond |
58 | | -(OR (CZERONEZ <t> (MOVDconst [0]) cond) (CZEROEQZ <t> (MOVDconst [c]) cond)) => (CZERONEZ <t> (MOVDconst [c]) cond) |
59 | | -// (cond != 0) ? 0 : const => CZEROEQZ const cond |
60 | | -(OR (CZEROEQZ <t> (MOVDconst [0]) cond) (CZERONEZ <t> (MOVDconst [c]) cond)) => (CZEROEQZ <t> (MOVDconst [c]) cond) |
0 commit comments