Lines Matching refs:address

30  * and globals, have support for address arithmetic natively. In particularly,
32 * the address:
67 mir_match_constant(struct mir_address *address)
69 if (address->A.def && nir_ssa_scalar_is_const(address->A)) {
70 address->bias += nir_ssa_scalar_as_uint(address->A);
71 address->A.def = NULL;
74 if (address->B.def && nir_ssa_scalar_is_const(address->B)) {
75 address->bias += nir_ssa_scalar_as_uint(address->B);
76 address->B.def = NULL;
86 mir_match_iadd(struct mir_address *address, bool first_free)
88 if (!address->B.def || !nir_ssa_scalar_is_alu(address->B))
91 if (!mir_args_ssa(address->B, 2))
94 nir_op op = nir_ssa_scalar_alu_op(address->B);
98 nir_ssa_scalar op1 = nir_ssa_scalar_chase_alu_src(address->B, 0);
99 nir_ssa_scalar op2 = nir_ssa_scalar_chase_alu_src(address->B, 1);
103 address->bias += nir_ssa_scalar_as_uint(op1);
104 address->B = op2;
107 address->bias += nir_ssa_scalar_as_uint(op2);
108 address->B = op1;
111 first_free && !address->A.def) {
112 address->A = op1;
113 address->B = op2;
120 mir_match_u2u64(struct mir_address *address)
122 if (!address->B.def || !nir_ssa_scalar_is_alu(address->B))
125 if (!mir_args_ssa(address->B, 1))
128 nir_op op = nir_ssa_scalar_alu_op(address->B);
130 nir_ssa_scalar arg = nir_ssa_scalar_chase_alu_src(address->B, 0);
132 address->B = arg;
133 address->type = midgard_index_address_u32;
139 mir_match_i2i64(struct mir_address *address)
141 if (!address->B.def || !nir_ssa_scalar_is_alu(address->B))
144 if (!mir_args_ssa(address->B, 1))
147 nir_op op = nir_ssa_scalar_alu_op(address->B);
149 nir_ssa_scalar arg = nir_ssa_scalar_chase_alu_src(address->B, 0);
151 address->B = arg;
152 address->type = midgard_index_address_s32;
158 mir_match_ishl(struct mir_address *address)
160 if (!address->B.def || !nir_ssa_scalar_is_alu(address->B))
163 if (!mir_args_ssa(address->B, 2))
166 nir_op op = nir_ssa_scalar_alu_op(address->B);
168 nir_ssa_scalar op1 = nir_ssa_scalar_chase_alu_src(address->B, 0);
169 nir_ssa_scalar op2 = nir_ssa_scalar_chase_alu_src(address->B, 1);
176 address->B = op1;
177 address->shift = shift;
183 mir_match_mov(struct mir_address *address)
185 if (address->A.def && nir_ssa_scalar_is_alu(address->A)) {
186 nir_op op = nir_ssa_scalar_alu_op(address->A);
188 if (op == nir_op_mov && mir_args_ssa(address->A, 1))
189 address->A = nir_ssa_scalar_chase_alu_src(address->A, 0);
192 if (address->B.def && nir_ssa_scalar_is_alu(address->B)) {
193 nir_op op = nir_ssa_scalar_alu_op(address->B);
195 if (op == nir_op_mov && mir_args_ssa(address->B, 1))
196 address->B = nir_ssa_scalar_chase_alu_src(address->B, 0);
205 struct mir_address address = {
210 mir_match_mov(&address);
211 mir_match_constant(&address);
212 mir_match_mov(&address);
213 mir_match_iadd(&address, first_free);
214 mir_match_mov(&address);
217 mir_match_u2u64(&address);
218 mir_match_i2i64(&address);
219 mir_match_mov(&address);
222 mir_match_ishl(&address);
224 return address;
235 /* Sign extend instead of zero extend in case the address is something