[NFC][RemoveDIs] Prefer iterators over inst-pointers in InstCombine
[llvm-project.git] / llvm / test / CodeGen / AArch64 / GlobalISel / select-ptr-add.mir
blobd0314682a441ce3a21827e1ab3a0791e9b95ea54
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -O0 -mtriple=aarch64-apple-ios -run-pass=instruction-select -verify-machineinstrs %s -o - | FileCheck %s -check-prefix=CHECK
3 ---
4 name:            ptr_add
5 legalized:       true
6 regBankSelected: true
7 body:             |
8   bb.0:
9       liveins: $x0
10     ; CHECK-LABEL: name: ptr_add
11     ; CHECK: liveins: $x0
12     ; CHECK-NEXT: {{  $}}
13     ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
14     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64common = COPY [[COPY]]
15     ; CHECK-NEXT: [[ADDXri:%[0-9]+]]:gpr64sp = ADDXri [[COPY1]], 42, 0
16     ; CHECK-NEXT: $x0 = COPY [[ADDXri]]
17     %0:gpr(p0) = COPY $x0
18     %1:gpr(s64) = G_CONSTANT i64 42
19     %2:gpr(p0) = G_PTR_ADD %0, %1(s64)
20     $x0 = COPY %2(p0)
21 ...
23 ---
24 name:            ptr_add_no_constant
25 legalized:       true
26 regBankSelected: true
27 body:             |
28   bb.0:
29       liveins: $x0, $x1
30     ; CHECK-LABEL: name: ptr_add_no_constant
31     ; CHECK: liveins: $x0, $x1
32     ; CHECK-NEXT: {{  $}}
33     ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
34     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64 = COPY $x1
35     ; CHECK-NEXT: [[ADDXrr:%[0-9]+]]:gpr64 = ADDXrr [[COPY]], [[COPY1]]
36     ; CHECK-NEXT: $x0 = COPY [[ADDXrr]]
37     %0:gpr(p0) = COPY $x0
38     %1:gpr(s64) = COPY $x1
39     %2:gpr(p0) = G_PTR_ADD %0, %1(s64)
40     $x0 = COPY %2(p0)
41 ...
43 ---
44 name:            ptr_add_bad_imm
45 legalized:       true
46 regBankSelected: true
47 body:             |
48   bb.0:
49       liveins: $x0, $x1
50     ; CHECK-LABEL: name: ptr_add_bad_imm
51     ; CHECK: liveins: $x0, $x1
52     ; CHECK-NEXT: {{  $}}
53     ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
54     ; CHECK-NEXT: [[MOVi32imm:%[0-9]+]]:gpr32 = MOVi32imm 10000
55     ; CHECK-NEXT: [[SUBREG_TO_REG:%[0-9]+]]:gpr64 = SUBREG_TO_REG 0, [[MOVi32imm]], %subreg.sub_32
56     ; CHECK-NEXT: [[ADDXrr:%[0-9]+]]:gpr64 = ADDXrr [[COPY]], [[SUBREG_TO_REG]]
57     ; CHECK-NEXT: $x0 = COPY [[ADDXrr]]
58     %0:gpr(p0) = COPY $x0
59     %1:gpr(s64) = G_CONSTANT i64 10000
60     %2:gpr(p0) = G_PTR_ADD %0, %1(s64)
61     $x0 = COPY %2(p0)
62 ...
64 ---
65 name:            ptr_add_vec
66 legalized:       true
67 regBankSelected: true
68 body:             |
69   bb.0:
70       liveins: $q0, $q1
71     ; CHECK-LABEL: name: ptr_add_vec
72     ; CHECK: liveins: $q0, $q1
73     ; CHECK-NEXT: {{  $}}
74     ; CHECK-NEXT: [[COPY:%[0-9]+]]:fpr128 = COPY $q0
75     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:fpr128 = COPY $q1
76     ; CHECK-NEXT: [[ADDv2i64_:%[0-9]+]]:fpr128 = ADDv2i64 [[COPY]], [[COPY1]]
77     ; CHECK-NEXT: $q0 = COPY [[ADDv2i64_]]
78     %0:fpr(<2 x p0>) = COPY $q0
79     %1:fpr(<2 x s64>) = COPY $q1
80     %3:fpr(<2 x p0>) = G_PTR_ADD %0, %1(<2 x s64>)
81     $q0 = COPY %3(<2 x p0>)
82 ...
83 ---
84 name:            ptr_add_neg_imm
85 legalized:       true
86 regBankSelected: true
87 body:             |
88   bb.0:
89       liveins: $x0
90     ; CHECK-LABEL: name: ptr_add_neg_imm
91     ; CHECK: liveins: $x0
92     ; CHECK-NEXT: {{  $}}
93     ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
94     ; CHECK-NEXT: [[COPY1:%[0-9]+]]:gpr64common = COPY [[COPY]]
95     ; CHECK-NEXT: [[SUBSXri:%[0-9]+]]:gpr64 = SUBSXri [[COPY1]], 10, 0, implicit-def dead $nzcv
96     ; CHECK-NEXT: $x0 = COPY [[SUBSXri]]
97     %0:gpr(p0) = COPY $x0
98     %1:gpr(s64) = G_CONSTANT i64 -10
99     %2:gpr(p0) = G_PTR_ADD %0, %1(s64)
100     $x0 = COPY %2(p0)
103 name:            ptr_add_arith_extended
104 legalized:       true
105 regBankSelected: true
106 body:             |
107   bb.0:
108       liveins: $x0
109     ; CHECK-LABEL: name: ptr_add_arith_extended
110     ; CHECK: liveins: $x0
111     ; CHECK-NEXT: {{  $}}
112     ; CHECK-NEXT: %reg0:gpr32 = COPY $w0
113     ; CHECK-NEXT: %ptr:gpr64 = COPY $x1
114     ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64common = COPY %ptr
115     ; CHECK-NEXT: %ptr_add:gpr64sp = ADDXrx [[COPY]], %reg0, 18
116     ; CHECK-NEXT: $x0 = COPY %ptr_add
117     %reg0:gpr(s32) = COPY $w0
118     %ptr:gpr(p0) = COPY $x1
119     %ext:gpr(s64) = G_ZEXT %reg0(s32)
120     %cst:gpr(s64) = G_CONSTANT i64 2
121     %shift:gpr(s64) = G_SHL %ext, %cst(s64)
122     %ptr_add:gpr(p0) = G_PTR_ADD %ptr, %shift(s64)
123     $x0 = COPY %ptr_add(p0)
126 name:            ptr_add_negated_reg
127 legalized:       true
128 regBankSelected: true
129 body:             |
130   bb.0:
131       liveins: $x0, $x1
132     ; CHECK-LABEL: name: ptr_add_negated_reg
133     ; CHECK: liveins: $x0, $x1
134     ; CHECK-NEXT: {{  $}}
135     ; CHECK-NEXT: [[COPY:%[0-9]+]]:gpr64 = COPY $x0
136     ; CHECK-NEXT: %src:gpr64 = COPY $x1
137     ; CHECK-NEXT: [[SUBSXrr:%[0-9]+]]:gpr64 = SUBSXrr [[COPY]], %src, implicit-def dead $nzcv
138     ; CHECK-NEXT: $x0 = COPY [[SUBSXrr]]
139     %0:gpr(p0) = COPY $x0
140     %src:gpr(s64) = COPY $x1
141     %1:gpr(s64) = G_CONSTANT i64 0
142     %neg:gpr(s64) = G_SUB %1, %src
143     %2:gpr(p0) = G_PTR_ADD %0, %neg(s64)
144     $x0 = COPY %2(p0)