[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / AArch64 / GlobalISel / combine-mul-to-shl.mir
blob068f8e3beb9ed496ec93550cd784b2429ace7e91
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 ---
5 name:            mul_to_shl
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_to_shl
15     ; CHECK: liveins: $x0
16     ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
17     ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 2
18     ; CHECK: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[COPY]], [[C]](s64)
19     ; CHECK: $x0 = COPY [[SHL]](s64)
20     ; CHECK: RET_ReallyLR implicit-def $x0
21     %0:_(s64) = COPY $x0
22     %1:_(s64) = G_CONSTANT i64 4
23     %2:_(s64) = G_MUL %0, %1(s64)
24     $x0 = COPY %2(s64)
25     RET_ReallyLR implicit-def $x0
26 ...
27 ---
28 name:            mul_to_shl_16
29 alignment:       4
30 tracksRegLiveness: true
31 frameInfo:
32   maxAlignment:    1
33 machineFunctionInfo: {}
34 body:             |
35   bb.0:
36     liveins: $x0
37     ; CHECK-LABEL: name: mul_to_shl_16
38     ; CHECK: liveins: $x0
39     ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
40     ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 4
41     ; CHECK: [[SHL:%[0-9]+]]:_(s64) = G_SHL [[COPY]], [[C]](s64)
42     ; CHECK: $x0 = COPY [[SHL]](s64)
43     ; CHECK: RET_ReallyLR implicit-def $x0
44     %0:_(s64) = COPY $x0
45     %1:_(s64) = G_CONSTANT i64 16
46     %2:_(s64) = G_MUL %0, %1(s64)
47     $x0 = COPY %2(s64)
48     RET_ReallyLR implicit-def $x0
49 ...
50 ---
51 name:            mul_to_shl_vector_16
52 alignment:       4
53 tracksRegLiveness: true
54 frameInfo:
55   maxAlignment:    1
56 machineFunctionInfo: {}
57 body:             |
58   bb.0:
59     liveins: $q0
60     ; Currently not implemented.
61     ; CHECK-LABEL: name: mul_to_shl_vector_16
62     ; CHECK: liveins: $q0
63     ; CHECK: [[COPY:%[0-9]+]]:_(<4 x s32>) = COPY $q0
64     ; CHECK: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
65     ; CHECK: [[BUILD_VECTOR:%[0-9]+]]:_(<4 x s32>) = G_BUILD_VECTOR [[C]](s32), [[C]](s32), [[C]](s32), [[C]](s32)
66     ; CHECK: [[MUL:%[0-9]+]]:_(<4 x s32>) = G_MUL [[COPY]], [[BUILD_VECTOR]]
67     ; CHECK: $q0 = COPY [[MUL]](<4 x s32>)
68     ; CHECK: RET_ReallyLR implicit-def $q0
69     %0:_(<4 x s32>) = COPY $q0
70     %1:_(s32) = G_CONSTANT i32 16
71     %2:_(<4 x s32>) = G_BUILD_VECTOR %1(s32), %1(s32), %1(s32), %1(s32)
72     %3:_(<4 x s32>) = G_MUL %0, %2(<4 x s32>)
73     $q0 = COPY %3(<4 x s32>)
74     RET_ReallyLR implicit-def $q0
75 ...
76 ---
77 name:            mul_to_shl_non_pow2
78 alignment:       4
79 tracksRegLiveness: true
80 frameInfo:
81   maxAlignment:    1
82 machineFunctionInfo: {}
83 body:             |
84   bb.0:
85     liveins: $x0
86     ; CHECK-LABEL: name: mul_to_shl_non_pow2
87     ; CHECK: liveins: $x0
88     ; CHECK: [[COPY:%[0-9]+]]:_(s64) = COPY $x0
89     ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 10
90     ; CHECK: [[MUL:%[0-9]+]]:_(s64) = G_MUL [[COPY]], [[C]]
91     ; CHECK: $x0 = COPY [[MUL]](s64)
92     ; CHECK: RET_ReallyLR implicit-def $x0
93     %0:_(s64) = COPY $x0
94     %1:_(s64) = G_CONSTANT i64 10
95     %2:_(s64) = G_MUL %0, %1(s64)
96     $x0 = COPY %2(s64)
97     RET_ReallyLR implicit-def $x0
98 ...