[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / AArch64 / GlobalISel / legalize-usub-sat.mir
blob5fc30343b42f995107eda68f60080c50c3c66073
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -O0 -mtriple=aarch64 -run-pass=legalizer -global-isel-abort=1 %s -o - | FileCheck %s
3 ---
4 name:            func
5 alignment:       4
6 tracksRegLiveness: true
7 liveins:
8   - { reg: '$w0' }
9   - { reg: '$w1' }
10 body:             |
11   bb.1:
12     liveins: $w0, $w1
14     ; CHECK-LABEL: name: func
15     ; CHECK: liveins: $w0, $w1
16     ; CHECK-NEXT: {{  $}}
17     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
18     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
19     ; CHECK-NEXT: [[USUBO:%[0-9]+]]:_(s32), [[USUBO1:%[0-9]+]]:_(s32) = G_USUBO [[COPY]], [[COPY1]]
20     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
21     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
22     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[USUBO1]], [[C1]]
23     ; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[AND]](s32), [[C]], [[USUBO]]
24     ; CHECK-NEXT: $w0 = COPY [[SELECT]](s32)
25     ; CHECK-NEXT: RET_ReallyLR implicit $w0
26     %0:_(s32) = COPY $w0
27     %1:_(s32) = COPY $w1
28     %2:_(s32) = G_USUBSAT %0, %1
29     $w0 = COPY %2(s32)
30     RET_ReallyLR implicit $w0
32 ...
33 ---
34 name:            func2
35 alignment:       4
36 tracksRegLiveness: true
37 liveins:
38   - { reg: '$x0' }
39   - { reg: '$x1' }
40 body:             |
41   bb.1:
42     liveins: $x0, $x1
44     ; CHECK-LABEL: name: func2
45     ; CHECK: liveins: $x0, $x1
46     ; CHECK-NEXT: {{  $}}
47     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
48     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1
49     ; CHECK-NEXT: [[USUBO:%[0-9]+]]:_(s64), [[USUBO1:%[0-9]+]]:_(s32) = G_USUBO [[COPY]], [[COPY1]]
50     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
51     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
52     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[USUBO1]], [[C1]]
53     ; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(s64) = G_SELECT [[AND]](s32), [[C]], [[USUBO]]
54     ; CHECK-NEXT: $x0 = COPY [[SELECT]](s64)
55     ; CHECK-NEXT: RET_ReallyLR implicit $x0
56     %0:_(s64) = COPY $x0
57     %1:_(s64) = COPY $x1
58     %2:_(s64) = G_USUBSAT %0, %1
59     $x0 = COPY %2(s64)
60     RET_ReallyLR implicit $x0
62 ...
63 ---
64 name:            func16
65 alignment:       4
66 tracksRegLiveness: true
67 liveins:
68   - { reg: '$w0' }
69   - { reg: '$w1' }
70 body:             |
71   bb.1:
72     liveins: $w0, $w1
74     ; CHECK-LABEL: name: func16
75     ; CHECK: liveins: $w0, $w1
76     ; CHECK-NEXT: {{  $}}
77     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
78     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
79     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
80     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
81     ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C]]
82     ; CHECK-NEXT: [[SUB:%[0-9]+]]:_(s32) = G_SUB [[AND]], [[AND1]]
83     ; CHECK-NEXT: [[AND2:%[0-9]+]]:_(s32) = G_AND [[SUB]], [[C]]
84     ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ne), [[SUB]](s32), [[AND2]]
85     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
86     ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
87     ; CHECK-NEXT: [[AND3:%[0-9]+]]:_(s32) = G_AND [[ICMP]], [[C2]]
88     ; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[AND3]](s32), [[C1]], [[SUB]]
89     ; CHECK-NEXT: $w0 = COPY [[SELECT]](s32)
90     ; CHECK-NEXT: RET_ReallyLR implicit $w0
91     %2:_(s32) = COPY $w0
92     %0:_(s16) = G_TRUNC %2(s32)
93     %3:_(s32) = COPY $w1
94     %1:_(s16) = G_TRUNC %3(s32)
95     %4:_(s16) = G_USUBSAT %0, %1
96     %5:_(s32) = G_ANYEXT %4(s16)
97     $w0 = COPY %5(s32)
98     RET_ReallyLR implicit $w0
102 name:            func8
103 alignment:       4
104 tracksRegLiveness: true
105 liveins:
106   - { reg: '$w0' }
107   - { reg: '$w1' }
108 body:             |
109   bb.1:
110     liveins: $w0, $w1
112     ; CHECK-LABEL: name: func8
113     ; CHECK: liveins: $w0, $w1
114     ; CHECK-NEXT: {{  $}}
115     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
116     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
117     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
118     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
119     ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C]]
120     ; CHECK-NEXT: [[SUB:%[0-9]+]]:_(s32) = G_SUB [[AND]], [[AND1]]
121     ; CHECK-NEXT: [[AND2:%[0-9]+]]:_(s32) = G_AND [[SUB]], [[C]]
122     ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ne), [[SUB]](s32), [[AND2]]
123     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
124     ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
125     ; CHECK-NEXT: [[AND3:%[0-9]+]]:_(s32) = G_AND [[ICMP]], [[C2]]
126     ; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[AND3]](s32), [[C1]], [[SUB]]
127     ; CHECK-NEXT: $w0 = COPY [[SELECT]](s32)
128     ; CHECK-NEXT: RET_ReallyLR implicit $w0
129     %2:_(s32) = COPY $w0
130     %0:_(s8) = G_TRUNC %2(s32)
131     %3:_(s32) = COPY $w1
132     %1:_(s8) = G_TRUNC %3(s32)
133     %4:_(s8) = G_USUBSAT %0, %1
134     %5:_(s32) = G_ANYEXT %4(s8)
135     $w0 = COPY %5(s32)
136     RET_ReallyLR implicit $w0
140 name:            func3
141 alignment:       4
142 tracksRegLiveness: true
143 liveins:
144   - { reg: '$w0' }
145   - { reg: '$w1' }
146 body:             |
147   bb.1:
148     liveins: $w0, $w1
150     ; CHECK-LABEL: name: func3
151     ; CHECK: liveins: $w0, $w1
152     ; CHECK-NEXT: {{  $}}
153     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s32) = COPY $w0
154     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $w1
155     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 15
156     ; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
157     ; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C]]
158     ; CHECK-NEXT: [[SUB:%[0-9]+]]:_(s32) = G_SUB [[AND]], [[AND1]]
159     ; CHECK-NEXT: [[AND2:%[0-9]+]]:_(s32) = G_AND [[SUB]], [[C]]
160     ; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ne), [[SUB]](s32), [[AND2]]
161     ; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
162     ; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
163     ; CHECK-NEXT: [[AND3:%[0-9]+]]:_(s32) = G_AND [[ICMP]], [[C2]]
164     ; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[AND3]](s32), [[C1]], [[SUB]]
165     ; CHECK-NEXT: $w0 = COPY [[SELECT]](s32)
166     ; CHECK-NEXT: RET_ReallyLR implicit $w0
167     %2:_(s32) = COPY $w0
168     %0:_(s4) = G_TRUNC %2(s32)
169     %3:_(s32) = COPY $w1
170     %1:_(s4) = G_TRUNC %3(s32)
171     %4:_(s4) = G_USUBSAT %0, %1
172     %5:_(s32) = G_ANYEXT %4(s4)
173     $w0 = COPY %5(s32)
174     RET_ReallyLR implicit $w0