<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/64851>64851</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[InferAddrSpace] The operand with non-address-space got Undefined when inferring its user
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
TBodyAltra
</td>
</tr>
</table>
<pre>
Consider the following IR targeted to AMDGPU:
```
%agg.tmp1 = alloca %struct.float4, align 16, addrspace(5)
%agg.tmp12.sroa.0.0..sroa_idx.i = getelementptr inbounds %struct.float4, %struct.float4 addrspace(5)* %agg.tmp1, i64 0, i32 0
```
In InferAddrSpace pass, the `%agg.tmp12.sroa.0.0..sroa_idx.i` is considered to be in FLAT address space (0) so it's specific address space
need to be inferred. From `%agg.tmp1`, the address space is inferred to be PRIVATE address space (5).
When rewriting `%agg.tmp12.sroa.0.0..sroa_idx.i` to the new address space, the operand `%agg.tmp1` is not taken care of, so `%agg.tmp1` is set to be `Undef`, which is wrong.
To resolve this issue, in the function of `static Value *operandWithNewAddressSpaceOrCreatePoison`, I think below code snippet need to be inserted:
```
static Value *operandWithNewAddressSpaceOrCreatePoison(
...
if (Value *NewOperand = ValueWithNewAddrSpace.lookup(Operand))
return NewOperand;
// __Insert this code snippet below__
// If the address space of the operand already meets the requirement, just return it
if (Operand->getType()->getPointerAddressSpace() == NewAddrSpace)
return Operand;
...
```
Any ideas? Thanks in advance.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJycVdtu2zgQ_Rr6ZRCBpixfHvyg1vXCwG4bdN32MaDEkcSGJrXkqN78_YKU0thO9oINApmiOGfOnLlQhqBbi7hlxTtW7GZyoM757fGdU0-lIS9nlVNP2_fOBq3QA3UIjTPGnbVt4fAZSPoWCRWQg_K33S_3X1heMr5j_Pm55NP_-CoK2bYZnfo5sHwH0hhXS2CiCOSHmrLGOEkLJt6DNLq1MF-mtVI-9LJGJtYFE5tXYCIL3smMZzxLqwet_sx0chH5GTyhpZ48aFu5warwpsvbvdd-RQkXXqONXi6Ap0UugL8ddHoeLBxsg75Uyv8eMaGXIUTLqGo8_G_hsCUHHaCesjGqXiFoC_tfy2NiiyFAYgxMrDkTGwgONDGxivtY60bXtwcTPYsXeA16jyqDvXenG2rpbeR8DaPDT8MJ5_7z4Wt5_PCaV5Qyg0txvnVowePZa4qV9V_VIJeIWDxfO3lm6Hr00qrXIUS21hGQfEQLtfQIrolWwb19OCBNUbEl_2IVNpMQ507XXTxx9s622WVQRwcegzM_EKiL8oQwJGrajp002Jq0s-CaiBpIkq7hqzRDVKmcyH_T1H3EcznGlyrnk3_vURLeOx2cnYgcohP7CBUad4baKYRgdd8jwVVuA3pCxfIS_qFP_zcXsR4BAACy7EqOuKWbmP-fsB_x_Ok5RfludHfhIznIjHOPQ8_Eejqa-nADL6DxzyMN3sILIMvf3TpnYs_EHh4eDkmEMSlXQiXtHh5emRyaNwreNVc1Jo1HqZ7ghEghffH4x6B9Gj0xQd-HQM88NcGtKBPvO5Z_aJGOT30cOkxspo17py2N0-NZ-vF7VC6Kd6nZ3-pzK85Fjt6aWaV9Aq1QBpbv4dhJ-xibHKT6IW2N2Uxtc7XJN3KG2_lyI5Z8sVrxWbflCvO6yvm8EFws8uVmLSohcT6vm6IpVtVMbwUXOV-LOV8Vm5xnTd0UdV5VdaPy1aZSbMHxJLXJjPlxypxvZ6l7tsvFupjPjKzQhHRrCRG7f2otES8xv402d9XQBrbgRgcKLyikyaTr7noWs2IHx4tknjV1YJ29m1J-N6a8dQSp-bVFBec4tMaZF4eWpgBDQD8bvNl2RH2Id2EqoFZTN1RZ7U5M7COX6eeu9-471sTEPkUQmNinCP8KAAD__1P5YS0">