xref: /llvm-project/llvm/test/CodeGen/AArch64/GlobalISel/combine-mul.mir (revision 6c31f20feed55369cab14a404b989c7ab0bddbc0)
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
3
4---
5name:            mul_by_zero
6alignment:       4
7tracksRegLiveness: true
8frameInfo:
9  maxAlignment:    1
10machineFunctionInfo: {}
11body:             |
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---
25name:            mul_vector_by_zero
26alignment:       4
27tracksRegLiveness: true
28frameInfo:
29  maxAlignment:    1
30machineFunctionInfo: {}
31body:             |
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---
47name:            mul_by_one
48alignment:       4
49tracksRegLiveness: true
50frameInfo:
51  maxAlignment:    1
52machineFunctionInfo: {}
53body:             |
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---
67name:            fmul_by_one
68tracksRegLiveness: true
69body:             |
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---
83name:            fmul_vector_by_one
84alignment:       4
85tracksRegLiveness: true
86frameInfo:
87  maxAlignment:    1
88machineFunctionInfo: {}
89body:             |
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>)
102...
103---
104name:            mul_vector_by_one
105alignment:       4
106tracksRegLiveness: true
107frameInfo:
108  maxAlignment:    1
109machineFunctionInfo: {}
110body:             |
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>)
123...
124---
125name:            mul_by_neg_one
126alignment:       4
127tracksRegLiveness: true
128frameInfo:
129  maxAlignment:    1
130machineFunctionInfo: {}
131body:             |
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)
145...
146---
147name:            mul_vector_by_neg_one
148alignment:       4
149tracksRegLiveness: true
150frameInfo:
151  maxAlignment:    1
152machineFunctionInfo: {}
153body:             |
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>)
169...
170