[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / AArch64 / GlobalISel / combine-mul.mir
blob30a13f8f8f393d460a9a562f4265e6144dfcd15c
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -run-pass=aarch64-prelegalizer-combiner -verify-machineinstrs -mtriple aarch64-unknown-unknown %s -o - | FileCheck %s
4 ---
5 name:            mul_by_zero
6 alignment:       4
7 tracksRegLiveness: true
8 frameInfo:
9   maxAlignment:    1
10 machineFunctionInfo: {}
11 body:             |
12   bb.0:
13     liveins: $x0
14     ; CHECK-LABEL: name: mul_by_zero
15     ; CHECK: liveins: $x0
16     ; CHECK-NEXT: {{  $}}
17     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
18     ; CHECK-NEXT: $x0 = COPY [[C]](s64)
19     %0:_(s64) = COPY $x0
20     %1:_(s64) = G_CONSTANT i64 0
21     %2:_(s64) = G_MUL %0, %1(s64)
22     $x0 = COPY %2(s64)
23 ...
24 ---
25 name:            mul_vector_by_zero
26 alignment:       4
27 tracksRegLiveness: true
28 frameInfo:
29   maxAlignment:    1
30 machineFunctionInfo: {}
31 body:             |
32   bb.0:
33     liveins: $q0
34     ; CHECK-LABEL: name: mul_vector_by_zero
35     ; CHECK: liveins: $q0
36     ; CHECK-NEXT: {{  $}}
37     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
38     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32)
39     ; CHECK-NEXT: $q0 = COPY [[BUILD_VECTOR]](<4 x s32>)
40     %0:_(<4 x s32>) = COPY $q0
41     %1:_(s32) = G_CONSTANT i32 0
42     %2:_(<4 x s32>) = G_BUILD_VECTOR %1(s32), %1(s32), %1(s32), %1(s32)
43     %3:_(<4 x s32>) = G_MUL %0, %2(<4 x s32>)
44     $q0 = COPY %3(<4 x s32>)
45 ...
46 ---
47 name:            mul_by_one
48 alignment:       4
49 tracksRegLiveness: true
50 frameInfo:
51   maxAlignment:    1
52 machineFunctionInfo: {}
53 body:             |
54   bb.0:
55     liveins: $x0
56     ; CHECK-LABEL: name: mul_by_one
57     ; CHECK: liveins: $x0
58     ; CHECK-NEXT: {{  $}}
59     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
60     ; CHECK-NEXT: $x0 = COPY [[COPY]](s64)
61     %0:_(s64) = COPY $x0
62     %1:_(s64) = G_CONSTANT i64 1
63     %2:_(s64) = G_MUL %0, %1(s64)
64     $x0 = COPY %2(s64)
65 ...
66 ---
67 name:            fmul_by_one
68 tracksRegLiveness: true
69 body:             |
70   bb.0:
71     liveins: $d0
72     ; CHECK-LABEL: name: fmul_by_one
73     ; CHECK: liveins: $d0
74     ; CHECK-NEXT: {{  $}}
75     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $d0
76     ; CHECK-NEXT: $d0 = COPY [[COPY]](s64)
77     %0:_(s64) = COPY $d0
78     %1:_(s64) = G_FCONSTANT double 1.000000e+00
79     %2:_(s64) = G_FMUL %0, %1(s64)
80     $d0 = COPY %2(s64)
81 ...
82 ---
83 name:            fmul_vector_by_one
84 alignment:       4
85 tracksRegLiveness: true
86 frameInfo:
87   maxAlignment:    1
88 machineFunctionInfo: {}
89 body:             |
90   bb.0:
91     liveins: $q0
92     ; CHECK-LABEL: name: fmul_vector_by_one
93     ; CHECK: liveins: $q0
94     ; CHECK-NEXT: {{  $}}
95     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0
96     ; CHECK-NEXT: $q0 = COPY [[COPY]](<4 x s32>)
97     %0:_(<4 x s32>) = COPY $q0
98     %1:_(s32) = G_FCONSTANT float 1.0
99     %2:_(<4 x s32>) = G_BUILD_VECTOR %1(s32), %1(s32), %1(s32), %1(s32)
100     %3:_(<4 x s32>) = G_FMUL %0, %2(<4 x s32>)
101     $q0 = COPY %3(<4 x s32>)
104 name:            mul_vector_by_one
105 alignment:       4
106 tracksRegLiveness: true
107 frameInfo:
108   maxAlignment:    1
109 machineFunctionInfo: {}
110 body:             |
111   bb.0:
112     liveins: $q0
113     ; CHECK-LABEL: name: mul_vector_by_one
114     ; CHECK: liveins: $q0
115     ; CHECK-NEXT: {{  $}}
116     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0
117     ; CHECK-NEXT: $q0 = COPY [[COPY]](<4 x s32>)
118     %0:_(<4 x s32>) = COPY $q0
119     %1:_(s32) = G_CONSTANT i32 1
120     %2:_(<4 x s32>) = G_BUILD_VECTOR %1(s32), %1(s32), %1(s32), %1(s32)
121     %3:_(<4 x s32>) = G_MUL %0, %2(<4 x s32>)
122     $q0 = COPY %3(<4 x s32>)
125 name:            mul_by_neg_one
126 alignment:       4
127 tracksRegLiveness: true
128 frameInfo:
129   maxAlignment:    1
130 machineFunctionInfo: {}
131 body:             |
132   bb.0:
133     liveins: $x0
134     ; CHECK-LABEL: name: mul_by_neg_one
135     ; CHECK: liveins: $x0
136     ; CHECK-NEXT: {{  $}}
137     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
138     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 0
139     ; CHECK-NEXT: [[SUB:%[0-9]+]]:_(s64) = G_SUB [[C]], [[COPY]]
140     ; CHECK-NEXT: $x0 = COPY [[SUB]](s64)
141     %0:_(s64) = COPY $x0
142     %1:_(s64) = G_CONSTANT i64 -1
143     %2:_(s64) = G_MUL %0, %1(s64)
144     $x0 = COPY %2(s64)
147 name:            mul_vector_by_neg_one
148 alignment:       4
149 tracksRegLiveness: true
150 frameInfo:
151   maxAlignment:    1
152 machineFunctionInfo: {}
153 body:             |
154   bb.0:
155     liveins: $q0
156     ; CHECK-LABEL: name: mul_vector_by_neg_one
157     ; CHECK: liveins: $q0
158     ; CHECK-NEXT: {{  $}}
159     ; CHECK-NEXT: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0
160     ; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
161     ; CHECK-NEXT: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32)
162     ; CHECK-NEXT: [[SUB:%[0-9]+]]:_(<4 x s32>) = G_SUB [[BUILD_VECTOR]], [[COPY]]
163     ; CHECK-NEXT: $q0 = COPY [[SUB]](<4 x s32>)
164     %0:_(<4 x s32>) = COPY $q0
165     %1:_(s32) = G_CONSTANT i32 -1
166     %2:_(<4 x s32>) = G_BUILD_VECTOR %1(s32), %1(s32), %1(s32), %1(s32)
167     %3:_(<4 x s32>) = G_MUL %0, %2(<4 x s32>)
168     $q0 = COPY %3(<4 x s32>)