[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / CodeGen / AArch64 / GlobalISel / combine-ptradd-reassociation.mir
blob1936473f15eb38ab810a1a634d9e04b9fbf7edf9
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 name:            test1_noreassoc_legal_already_new_is_illegal
5 alignment:       4
6 tracksRegLiveness: true
7 liveins:
8   - { reg: '$x0' }
9 body:             |
10   bb.1:
11     liveins: $x0
13     ; CHECK-LABEL: name: test1_noreassoc_legal_already_new_is_illegal
14     ; CHECK: liveins: $x0
15     ; CHECK: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
16     ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1600
17     ; CHECK: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 6
18     ; CHECK: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
19     ; CHECK: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s64)
20     ; CHECK: [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD]], [[C1]](s64)
21     ; CHECK: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD1]](p0) :: (load (s32))
22     ; CHECK: G_STORE [[C2]](s32), [[PTR_ADD]](p0) :: (store (s32))
23     ; CHECK: $w0 = COPY [[LOAD]](s32)
24     ; CHECK: RET_ReallyLR implicit $w0
25     %0:_(p0) = COPY $x0
26     %2:_(s64) = G_CONSTANT i64 1600
27     %4:_(s64) = G_CONSTANT i64 6
28     %9:_(s32) = G_CONSTANT i32 0
29     %10:_(p0) = G_PTR_ADD %0, %2(s64)
30     %11:_(p0) = G_PTR_ADD %10, %4(s64)
31     %7:_(s32) = G_LOAD %11(p0) :: (load 4)
32     G_STORE %9(s32), %10(p0) :: (store 4) ; other use of %10
33     $w0 = COPY %7(s32)
34     RET_ReallyLR implicit $w0
36 ...
37 ---
38 name:            test2_reassoc_already_legal_new_also_legal
39 alignment:       4
40 liveins:
41   - { reg: '$x0' }
42 body:             |
43   bb.1:
44     liveins: $x0
46     ; CHECK-LABEL: name: test2_reassoc_already_legal_new_also_legal
47     ; CHECK: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
48     ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 10
49     ; CHECK: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
50     ; CHECK: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s64)
51     ; CHECK: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 16
52     ; CHECK: [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C2]](s64)
53     ; CHECK: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD1]](p0) :: (load (s32))
54     ; CHECK: G_STORE [[C1]](s32), [[PTR_ADD]](p0) :: (store (s32))
55     ; CHECK: $w0 = COPY [[LOAD]](s32)
56     ; CHECK: RET_ReallyLR implicit $w0
57     %0:_(p0) = COPY $x0
58     %2:_(s64) = G_CONSTANT i64 10
59     %4:_(s64) = G_CONSTANT i64 6
60     %9:_(s32) = G_CONSTANT i32 0
61     %10:_(p0) = G_PTR_ADD %0, %2(s64)
62     %11:_(p0) = G_PTR_ADD %10, %4(s64)
63     %7:_(s32) = G_LOAD %11(p0) :: (load 4)
64     G_STORE %9(s32), %10(p0) :: (store 4) ; other use of %10
65     $w0 = COPY %7(s32)
66     RET_ReallyLR implicit $w0
68 ...
69 ---
70 name:            test3_noreassoc_only_oneuse
71 alignment:       4
72 liveins:
73   - { reg: '$x0' }
74 body:             |
75   bb.1:
76     liveins: $x0
78     ; CHECK-LABEL: name: test3_noreassoc_only_oneuse
79     ; CHECK: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
80     ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 4783
81     ; CHECK: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s64)
82     ; CHECK: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD]](p0) :: (load (s32))
83     ; CHECK: $w0 = COPY [[LOAD]](s32)
84     ; CHECK: RET_ReallyLR implicit $w0
85     %0:_(p0) = COPY $x0
86     %10:_(s64) = G_CONSTANT i64 4783
87     %9:_(p0) = G_PTR_ADD %0, %10(s64)
88     %7:_(s32) = G_LOAD %9(p0) :: (load 4)
89     $w0 = COPY %7(s32)
90     RET_ReallyLR implicit $w0
92 ...
93 ---
94 name:            test4_reassoc_existing_is_already_illegal
95 alignment:       4
96 liveins:
97   - { reg: '$x0' }
98 body:             |
99   bb.1:
100     liveins: $x0
102     ; CHECK-LABEL: name: test4_reassoc_existing_is_already_illegal
103     ; CHECK: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
104     ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 17
105     ; CHECK: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
106     ; CHECK: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s64)
107     ; CHECK: [[C2:%[0-9]+]]:_(s64) = G_CONSTANT i64 4096
108     ; CHECK: [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C2]](s64)
109     ; CHECK: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD1]](p0) :: (load (s32))
110     ; CHECK: G_STORE [[C1]](s32), [[PTR_ADD]](p0) :: (store (s32))
111     ; CHECK: $w0 = COPY [[LOAD]](s32)
112     ; CHECK: RET_ReallyLR implicit $w0
113     %0:_(p0) = COPY $x0
114     %2:_(s64) = G_CONSTANT i64 17
115     %4:_(s64) = G_CONSTANT i64 4079
116     %9:_(s32) = G_CONSTANT i32 0
117     %10:_(p0) = G_PTR_ADD %0, %2(s64)
118     %11:_(p0) = G_PTR_ADD %10, %4(s64)
119     %7:_(s32) = G_LOAD %11(p0) :: (load 4)
120     G_STORE %9(s32), %10(p0) :: (store 4) ; other use of %10
121     $w0 = COPY %7(s32)
122     RET_ReallyLR implicit $w0
126 name:            test5_add_on_rhs
127 alignment:       4
128 liveins:
129   - { reg: '$x0' }
130   - { reg: '$x1' }
131 body:             |
132   bb.1:
133     liveins: $x0, $x1
135     ; CHECK-LABEL: name: test5_add_on_rhs
136     ; CHECK: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
137     ; CHECK: [[COPY1:%[0-9]+]]:_(s64) = COPY $x1
138     ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1
139     ; CHECK: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[COPY1]](s64)
140     ; CHECK: [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD]], [[C]](s64)
141     ; CHECK: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD1]](p0) :: (load (s8))
142     ; CHECK: $w0 = COPY [[LOAD]](s32)
143     ; CHECK: RET_ReallyLR implicit $w0
144     %0:_(p0) = COPY $x0
145     %1:_(s64) = COPY $x1
146     %2:_(s64) = G_CONSTANT i64 1
147     %3:_(s64) = G_ADD %1, %2
148     %4:_(p0) = G_PTR_ADD %0, %3(s64)
149     %7:_(s32) = G_LOAD %4(p0) :: (load 1)
150     $w0 = COPY %7(s32)
151     RET_ReallyLR implicit $w0
155 name:            walk_through_inttoptr
156 alignment:       4
157 tracksRegLiveness: true
158 body:             |
159   bb.1:
160     liveins: $x0
161     ; CHECK-LABEL: name: walk_through_inttoptr
162     ; CHECK: liveins: $x0
163     ; CHECK: [[COPY:%[0-9]+]]:_(p0) = COPY $x0
164     ; CHECK: [[C:%[0-9]+]]:_(s64) = G_CONSTANT i64 1600
165     ; CHECK: [[C1:%[0-9]+]]:_(s64) = G_CONSTANT i64 6
166     ; CHECK: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 0
167     ; CHECK: [[PTR_ADD:%[0-9]+]]:_(p0) = G_PTR_ADD [[COPY]], [[C]](s64)
168     ; CHECK: %ptr_to_int:_(s64) = G_PTRTOINT [[PTR_ADD]](p0)
169     ; CHECK: [[PTR_ADD1:%[0-9]+]]:_(p0) = G_PTR_ADD [[PTR_ADD]], [[C1]](s64)
170     ; CHECK: [[LOAD:%[0-9]+]]:_(s32) = G_LOAD [[PTR_ADD1]](p0) :: (load (s32))
171     ; CHECK: G_STORE [[C2]](s32), [[PTR_ADD]](p0) :: (store (s32))
172     ; CHECK: G_STORE %ptr_to_int(s64), [[PTR_ADD]](p0) :: (store (s64))
173     ; CHECK: $w0 = COPY [[LOAD]](s32)
174     ; CHECK: RET_ReallyLR implicit $w0
175     %0:_(p0) = COPY $x0
176     %2:_(s64) = G_CONSTANT i64 1600
177     %4:_(s64) = G_CONSTANT i64 6
178     %9:_(s32) = G_CONSTANT i32 0
179     %10:_(p0) = G_PTR_ADD %0, %2(s64)
180     %ptr_to_int:_(s64) = G_PTRTOINT %10
181     %11:_(p0) = G_PTR_ADD %10, %4(s64)
182     %7:_(s32) = G_LOAD %11(p0) :: (load 4)
183     G_STORE %9(s32), %10(p0) :: (store 4) ; other use of %10
184     G_STORE %ptr_to_int(s64), %10(p0) :: (store 8)
185     $w0 = COPY %7(s32)
186     RET_ReallyLR implicit $w0