[InstCombine] Signed saturation patterns
[llvm-complete.git] / test / CodeGen / AArch64 / misched-fusion-arith-logic.mir
blob62276779d1423991acbd81d09cf4071a30b1015b
1 # RUN: llc -o /dev/null 2>&1 %s -mtriple aarch64-unknown -mattr=fuse-arith-logic -run-pass=machine-scheduler -misched-print-dags | FileCheck %s
2 # RUN: llc -o /dev/null 2>&1 %s -mtriple aarch64-unknown -mcpu=exynos-m4         -run-pass=machine-scheduler -misched-print-dags | FileCheck %s
3 # REQUIRES: asserts
5 ---
6 name: arith
7 body: |
8   bb.0.entry:
9     %0:gpr32 = SUBWrr undef $w0, undef $w1
10     %1:gpr32 = ADDWrr undef $w1, undef $w2
11     %2:gpr32 = SUBWrs %0, undef $w2, 0
12     %3:gpr32 = ADDWrs %1, undef $w3, 0
14     ; CHECK: SU(0): %0:gpr32 = SUBWrr undef $w0, undef $w1
15     ; CHECK: Successors:
16     ; CHECK: SU(2): Ord  Latency=0 Cluster
17     ; CHECK: SU(1): %1:gpr32 = ADDWrr undef $w1, undef $w2
18     ; CHECK: Successors:
19     ; CHECK: SU(3): Ord  Latency=0 Cluster
20     ; CHECK: SU(2): dead %2:gpr32 = SUBWrs %0:gpr32, undef $w2, 0
21     ; CHECK: Predecessors:
22     ; CHECK: SU(0): Ord  Latency=0 Cluster
23     ; CHECK: SU(3): dead %3:gpr32 = ADDWrs %1:gpr32, undef $w3, 0
24     ; CHECK: Predecessors:
25     ; CHECK: SU(1): Ord  Latency=0 Cluster
26 ...
27 ---
28 name: compare
29 body: |
30   bb.0.entry:
31     %0:gpr64 = ADDXrr undef $x0, undef $x1
32     %1:gpr64 = SUBXrs undef $x1, undef $x2, 0
33     %2:gpr64 = ADDSXrr %0, undef $x3, implicit-def $nzcv
34     %3:gpr64 = SUBSXrs %1, undef $x4, 0, implicit-def $nzcv
36     ; CHECK: SU(0): %0:gpr64 = ADDXrr undef $x0, undef $x1
37     ; CHECK: Successors:
38     ; CHECK: SU(2): Ord  Latency=0 Cluster
39     ; CHECK: SU(1): %1:gpr64 = SUBXrs undef $x1, undef $x2, 0
40     ; CHECK: Successors:
41     ; CHECK: SU(3): Ord  Latency=0 Cluster
42     ; CHECK: SU(2): dead %2:gpr64 = ADDSXrr %0:gpr64, undef $x3, implicit-def $nzcv
43     ; CHECK: Predecessors:
44     ; CHECK: SU(0): Ord  Latency=0 Cluster
45     ; CHECK: SU(3): dead %3:gpr64 = SUBSXrs %1:gpr64, undef $x4, 0, implicit-def $nzcv
46     ; CHECK: Predecessors:
47     ; CHECK: SU(1): Ord  Latency=0 Cluster
48 ...
49 ---
50 name: logic
51 body: |
52   bb.0.entry:
53     %0:gpr32 = ADDWrr undef $w0, undef $w1
54     %1:gpr64 = SUBXrs undef $x1, undef $x2, 0
55     %3:gpr32 = ANDWrs %0, undef $w3, 0
56     %4:gpr64 = ORRXrr %1, undef $x4
58     ; CHECK: SU(0): %0:gpr32 = ADDWrr undef $w0, undef $w1
59     ; CHECK: Successors:
60     ; CHECK: SU(2): Ord  Latency=0 Cluster
61     ; CHECK: SU(1): %1:gpr64 = SUBXrs undef $x1, undef $x2, 0
62     ; CHECK: Successors:
63     ; CHECK: SU(3): Ord  Latency=0 Cluster
64     ; CHECK: SU(2): dead %2:gpr32 = ANDWrs %0:gpr32, undef $w3, 0
65     ; CHECK: Predecessors:
66     ; CHECK: SU(0): Ord  Latency=0 Cluster
67     ; CHECK: SU(3): dead %3:gpr64 = ORRXrr %1:gpr64, undef $x4
68     ; CHECK: Predecessors:
69     ; CHECK: SU(1): Ord  Latency=0 Cluster
70 ...
71 ---
72 name: nope
73 body: |
74   bb.0.entry:
75     ; Shifted register.
76     %0:gpr32 = SUBWrr undef $w0, undef $w1
77     %1:gpr32 = SUBWrs %0, undef $w2, 1
78     ; CHECK: SU(0): %0:gpr32 = SUBWrr undef $w0, undef $w1
79     ; CHECK: Successors:
80     ; CHECK-NOT: SU(1): Ord  Latency=0 Cluster
81     ; CHECK: SU(1): dead %1:gpr32 = SUBWrs %0:gpr32, undef $w2, 1
83     ; Multiple successors.
84     %2:gpr64 = ADDXrr undef $x0, undef $x1
85     %3:gpr32 = EXTRACT_SUBREG %2, %subreg.sub_32
86     %4:gpr32 = ANDWrs %3, undef $w2, 0
87     %5:gpr64 = ADDSXrr %2, undef $x3, implicit-def $nzcv
88     ; CHECK: SU(2): %2:gpr64 = ADDXrr undef $x0, undef $x1
89     ; CHECK: Successors:
90     ; CHECK-NOT: SU(3): Ord  Latency=0 Cluster
91     ; CHECK: SU(5): Ord  Latency=0 Cluster
92     ; CHECK: SU(3): %3:gpr32 = EXTRACT_SUBREG %2:gpr64, %subreg.sub_32
93     ; CHECK: SU(5): dead %5:gpr64 = ADDSXrr %2:gpr64, undef $x3, implicit-def $nzcv
95     ; Different register sizes.
96     %6:gpr32 = SUBWrr undef $w0, undef $w1
97     %7:gpr64 = ADDXrr undef $x1, undef $x2
98     %8:gpr64 = SUBXrr %7, undef $x3
99     %9:gpr32 = ADDWrr %6, undef $w4
100     ; CHECK: SU(6): %6:gpr32 = SUBWrr undef $w0, undef $w1
101     ; CHECK: Successors:
102     ; CHECK-NOT: SU(8): Ord  Latency=0 Cluster
103     ; CHECK: SU(7): %7:gpr64 = ADDXrr undef $x1, undef $x2
104     ; CHECK: Successors:
105     ; CHECK-NOT: SU(9): Ord  Latency=0 Cluster
106     ; CHECK: SU(8): dead %8:gpr64 = SUBXrr %7:gpr64, undef $x3
107     ; CHECK: Predecessors:
108     ; CHECK: SU(7): Ord  Latency=0 Cluster
109     ; CHECK: SU(9): dead %9:gpr32 = ADDWrr %6:gpr32, undef $w4
110     ; CHECK: Predecessors:
111     ; CHECK: SU(6): Ord  Latency=0 Cluster