xref: /llvm-project/llvm/test/CodeGen/RISCV/macro-fusions.mir (revision 59eebb40fbedf6bc35746a0639f823a19ab0f030)
1f9c90886SWang Pengcheng# REQUIRES: asserts
2f9c90886SWang Pengcheng# RUN: llc -mtriple=riscv64-linux-gnu -x=mir < %s \
3f9c90886SWang Pengcheng# RUN:   -debug-only=machine-scheduler -start-before=machine-scheduler 2>&1 \
4f9c90886SWang Pengcheng# RUN:   -mattr=+lui-addi-fusion,+auipc-addi-fusion,+zexth-fusion,+zextw-fusion,+shifted-zextw-fusion,+ld-add-fusion \
5f9c90886SWang Pengcheng# RUN:   | FileCheck %s
6f9c90886SWang Pengcheng
7f9c90886SWang Pengcheng# CHECK: lui_addi:%bb.0
8f9c90886SWang Pengcheng# CHECK: Macro fuse: {{.*}}LUI - ADDI
9f9c90886SWang Pengcheng---
10f9c90886SWang Pengchengname: lui_addi
11f9c90886SWang PengchengtracksRegLiveness: true
12f9c90886SWang Pengchengbody:             |
13f9c90886SWang Pengcheng  bb.0.entry:
14f9c90886SWang Pengcheng    liveins: $x10
15f9c90886SWang Pengcheng    %1:gpr = COPY $x10
16f9c90886SWang Pengcheng    %2:gpr = LUI 1
17f9c90886SWang Pengcheng    %3:gpr = XORI %1, 2
18f9c90886SWang Pengcheng    %4:gpr = ADDI %2, 3
19f9c90886SWang Pengcheng    $x10 = COPY %3
20f9c90886SWang Pengcheng    $x11 = COPY %4
21f9c90886SWang Pengcheng    PseudoRET
22f9c90886SWang Pengcheng...
23f9c90886SWang Pengcheng
24f9c90886SWang Pengcheng# CHECK: auipc_addi
25f9c90886SWang Pengcheng# CHECK: Macro fuse: {{.*}}AUIPC - ADDI
26f9c90886SWang Pengcheng---
27f9c90886SWang Pengchengname: auipc_addi
28f9c90886SWang PengchengtracksRegLiveness: true
29f9c90886SWang Pengchengbody:             |
30f9c90886SWang Pengcheng  bb.0.entry:
31f9c90886SWang Pengcheng    liveins: $x10
32f9c90886SWang Pengcheng    %1:gpr = COPY $x10
33f9c90886SWang Pengcheng    %2:gpr = AUIPC 1
34f9c90886SWang Pengcheng    %3:gpr = XORI %1, 2
35f9c90886SWang Pengcheng    %4:gpr = ADDI %2, 3
36f9c90886SWang Pengcheng    $x10 = COPY %3
37f9c90886SWang Pengcheng    $x11 = COPY %4
38f9c90886SWang Pengcheng    PseudoRET
39f9c90886SWang Pengcheng...
40f9c90886SWang Pengcheng
41f9c90886SWang Pengcheng# CHECK: slli_srli_shifted_zext
42f9c90886SWang Pengcheng# CHECK: Macro fuse: {{.*}}SLLI - SRLI
43f9c90886SWang Pengcheng---
44*59eebb40Swangpcname: slli_srli_shifted_zext
45f9c90886SWang PengchengtracksRegLiveness: true
46f9c90886SWang Pengchengbody:             |
47f9c90886SWang Pengcheng  bb.0.entry:
48f9c90886SWang Pengcheng    liveins: $x10
49f9c90886SWang Pengcheng    %1:gpr = COPY $x10
50f9c90886SWang Pengcheng    %2:gpr = SLLI %1, 32
51f9c90886SWang Pengcheng    %3:gpr = XORI %1, 3
52f9c90886SWang Pengcheng    %4:gpr = SRLI %2, 4
53f9c90886SWang Pengcheng    $x10 = COPY %3
54f9c90886SWang Pengcheng    $x11 = COPY %4
55f9c90886SWang Pengcheng    PseudoRET
56f9c90886SWang Pengcheng...
57f9c90886SWang Pengcheng
58f9c90886SWang Pengcheng# CHECK: slli_srli_zexth
59f9c90886SWang Pengcheng# CHECK: Macro fuse: {{.*}}SLLI - SRLI
60f9c90886SWang Pengcheng---
61*59eebb40Swangpcname: slli_srli_zexth
62f9c90886SWang PengchengtracksRegLiveness: true
63f9c90886SWang Pengchengbody:             |
64f9c90886SWang Pengcheng  bb.0.entry:
65f9c90886SWang Pengcheng    liveins: $x10
66f9c90886SWang Pengcheng    %1:gpr = COPY $x10
67f9c90886SWang Pengcheng    %2:gpr = SLLI %1, 48
68f9c90886SWang Pengcheng    %3:gpr = XORI %1, 3
69f9c90886SWang Pengcheng    %4:gpr = SRLI %2, 48
70f9c90886SWang Pengcheng    $x10 = COPY %3
71f9c90886SWang Pengcheng    $x11 = COPY %4
72f9c90886SWang Pengcheng    PseudoRET
73f9c90886SWang Pengcheng...
74f9c90886SWang Pengcheng
75f9c90886SWang Pengcheng# CHECK: slli_srli_zextw
76f9c90886SWang Pengcheng# CHECK: Macro fuse: {{.*}}SLLI - SRLI
77f9c90886SWang Pengcheng---
78*59eebb40Swangpcname: slli_srli_zextw
79f9c90886SWang PengchengtracksRegLiveness: true
80f9c90886SWang Pengchengbody:             |
81f9c90886SWang Pengcheng  bb.0.entry:
82f9c90886SWang Pengcheng    liveins: $x10
83f9c90886SWang Pengcheng    %1:gpr = COPY $x10
84f9c90886SWang Pengcheng    %2:gpr = SLLI %1, 32
85f9c90886SWang Pengcheng    %3:gpr = XORI %1, 3
86f9c90886SWang Pengcheng    %4:gpr = SRLI %2, 32
87f9c90886SWang Pengcheng    $x10 = COPY %3
88f9c90886SWang Pengcheng    $x11 = COPY %4
89f9c90886SWang Pengcheng    PseudoRET
90f9c90886SWang Pengcheng...
91f9c90886SWang Pengcheng
92f9c90886SWang Pengcheng# CHECK: slli_srli_no_fusion_0
93f9c90886SWang Pengcheng# CHECK-NOT: Macro fuse: {{.*}}SLLI - SRLI
94f9c90886SWang Pengcheng---
95f9c90886SWang Pengchengname: slli_srli_no_fusion_0
96f9c90886SWang PengchengtracksRegLiveness: true
97f9c90886SWang Pengchengbody:             |
98f9c90886SWang Pengcheng  bb.0.entry:
99f9c90886SWang Pengcheng    liveins: $x10
100f9c90886SWang Pengcheng    %1:gpr = COPY $x10
101f9c90886SWang Pengcheng    %2:gpr = SLLI %1, 32
102f9c90886SWang Pengcheng    %3:gpr = XORI %1, 3
103f9c90886SWang Pengcheng    %4:gpr = SRLI %2, 33
104f9c90886SWang Pengcheng    $x10 = COPY %3
105f9c90886SWang Pengcheng    $x11 = COPY %4
106f9c90886SWang Pengcheng    PseudoRET
107f9c90886SWang Pengcheng...
108f9c90886SWang Pengcheng
109f9c90886SWang Pengcheng# CHECK: slli_srli_no_fusion_1
110f9c90886SWang Pengcheng# CHECK-NOT: Macro fuse: {{.*}}SLLI - SRLI
111f9c90886SWang Pengcheng---
112f9c90886SWang Pengchengname: slli_srli_no_fusion_1
113f9c90886SWang PengchengtracksRegLiveness: true
114f9c90886SWang Pengchengbody:             |
115f9c90886SWang Pengcheng  bb.0.entry:
116f9c90886SWang Pengcheng    liveins: $x10
117f9c90886SWang Pengcheng    %1:gpr = COPY $x10
118f9c90886SWang Pengcheng    %2:gpr = SLLI %1, 48
119f9c90886SWang Pengcheng    %3:gpr = XORI %1, 3
120f9c90886SWang Pengcheng    %4:gpr = SRLI %2, 4
121f9c90886SWang Pengcheng    $x10 = COPY %3
122f9c90886SWang Pengcheng    $x11 = COPY %4
123f9c90886SWang Pengcheng    PseudoRET
124f9c90886SWang Pengcheng...
125f9c90886SWang Pengcheng
126f9c90886SWang Pengcheng# CHECK: slli_srli_no_fusion_2
127f9c90886SWang Pengcheng# CHECK-NOT: Macro fuse: {{.*}}SLLI - SRLI
128f9c90886SWang Pengcheng---
129f9c90886SWang Pengchengname: slli_srli_no_fusion_2
130f9c90886SWang PengchengtracksRegLiveness: true
131f9c90886SWang Pengchengbody:             |
132f9c90886SWang Pengcheng  bb.0.entry:
133f9c90886SWang Pengcheng    liveins: $x10
134f9c90886SWang Pengcheng    %1:gpr = COPY $x10
135f9c90886SWang Pengcheng    %2:gpr = SLLI %1, 31
136f9c90886SWang Pengcheng    %3:gpr = XORI %1, 3
137f9c90886SWang Pengcheng    %4:gpr = SRLI %2, 4
138f9c90886SWang Pengcheng    $x10 = COPY %3
139f9c90886SWang Pengcheng    $x11 = COPY %4
140f9c90886SWang Pengcheng    PseudoRET
141f9c90886SWang Pengcheng...
142f9c90886SWang Pengcheng
143f9c90886SWang Pengcheng# CHECK: slli_srli_no_fusion_3
144f9c90886SWang Pengcheng# CHECK-NOT: Macro fuse: {{.*}}SLLI - SRLI
145f9c90886SWang Pengcheng---
146f9c90886SWang Pengchengname: slli_srli_no_fusion_3
147f9c90886SWang PengchengtracksRegLiveness: true
148f9c90886SWang Pengchengbody:             |
149f9c90886SWang Pengcheng  bb.0.entry:
150f9c90886SWang Pengcheng    liveins: $x10
151f9c90886SWang Pengcheng    %1:gpr = COPY $x10
152f9c90886SWang Pengcheng    %2:gpr = SLLI %1, 31
153f9c90886SWang Pengcheng    %3:gpr = XORI %1, 3
154f9c90886SWang Pengcheng    %4:gpr = SRLI %2, 48
155f9c90886SWang Pengcheng    $x10 = COPY %3
156f9c90886SWang Pengcheng    $x11 = COPY %4
157f9c90886SWang Pengcheng    PseudoRET
158f9c90886SWang Pengcheng...
159f9c90886SWang Pengcheng
160f9c90886SWang Pengcheng# CHECK: ld_add
161f9c90886SWang Pengcheng# CHECK: Macro fuse: {{.*}}ADD - LD
162f9c90886SWang Pengcheng---
163f9c90886SWang Pengchengname: ld_add
164f9c90886SWang PengchengtracksRegLiveness: true
165f9c90886SWang Pengchengbody:             |
166f9c90886SWang Pengcheng  bb.0.entry:
167f9c90886SWang Pengcheng    liveins: $x10, $x11
168f9c90886SWang Pengcheng    %1:gpr = COPY $x10
169f9c90886SWang Pengcheng    %2:gpr = COPY $x11
170f9c90886SWang Pengcheng    %3:gpr = ADD %1, %2
171f9c90886SWang Pengcheng    %4:gpr = XORI %2, 3
172f9c90886SWang Pengcheng    %5:gpr = LD %3, 0
173f9c90886SWang Pengcheng    $x10 = COPY %4
174f9c90886SWang Pengcheng    $x11 = COPY %5
175f9c90886SWang Pengcheng    PseudoRET
176f9c90886SWang Pengcheng...
177