<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/104508>104508</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
[Attributor]: AAPointerInfo does not keep track of access bins properly when a pointer is copied to a new pointer.
</td>
</tr>
<tr>
<th>Labels</th>
<td>
new issue
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
vidsinghal
</td>
</tr>
</table>
<pre>
```
#include <stdio.h>
#include <stdlib.h>
typedef struct {
int a;
int b;
int c;
} Prod;
Prod* foo(){
Prod *P1 = (Prod*) malloc(sizeof(Prod));
P1->a = 9;
P1->b = 10;
Prod *P2;
P2 = P1;
P2->c = 20;
return P2;
}
int main(){
Prod *P = foo();
printf("a: %d, b: %d, c: %d\n", P->a, P->b, P->c);
}
```
> clang -Xclang -disable-O0-optnone -save-temps file.c
> opt -aa-pipeline=basic-aa -passes=attributor -attributor-manifest-internal -attributor-annotate-decl-cs -debug-only=attributor file.bc -o file.out.bc
Expected two distinct bins [0, 4] and [4, 8] for Pointer P1.
In reality records 4 accesses in one bin [0, 8]
[Attributor] Got 4 initial uses to check
[AAPointerInfo] Analyze %P1 = alloca ptr, align 8 in %0 = load ptr, ptr %P1, align 8
[AAPointerInfo] Analyze %P1 = alloca ptr, align 8 in %1 = load ptr, ptr %P1, align 8
[AAPointerInfo] Analyze %P1 = alloca ptr, align 8 in %2 = load ptr, ptr %P1, align 8
Accesses by bin after update:
[0-8] : 4
- 9 - store ptr %call, ptr %P1, align 8
- c: %call = call noalias ptr @malloc(i64 noundef 12) #3
- 5 - %0 = load ptr, ptr %P1, align 8
- c: <unknown>
- 5 - %1 = load ptr, ptr %P1, align 8
- c: <unknown>
- 5 - %2 = load ptr, ptr %P1, align 8
- c: <unknown>
Expected 3 bins for Pointer P2. ([0, 4], [4, 8], [8, 12])
In reality, records 3 access in one bin [0, 8]
The access to element c of struct is never recorded, [8, 12]
[Attributor] Got 3 initial uses to check
[AAPointerInfo] Analyze %P2 = alloca ptr, align 8 in store ptr %2, ptr %P2, align 8
[AAPointerInfo] Analyze %P2 = alloca ptr, align 8 in %3 = load ptr, ptr %P2, align 8
[AAPointerInfo] Analyze %P2 = alloca ptr, align 8 in %4 = load ptr, ptr %P2, align 8
Accesses by bin after update:
[0-8] : 3
- 9 - store ptr %2, ptr %P2, align 8
- c: %call = call noalias ptr @malloc(i64 noundef 12) #3
- 5 - %3 = load ptr, ptr %P2, align 8
- c: <unknown>
- 5 - %4 = load ptr, ptr %P2, align 8
- c: <unknown>
Expected 3 bins for Pointer P. ([0, 4], [4, 8], [8, 12])
In reality, records 4 accesses in one bin [0, 8]
bin [8, 12], ie, access to c is not there.
[AAPointerInfo] Analyze %P = alloca ptr, align 8 in store ptr %call, ptr %P, align 8
[AAPointerInfo] Analyze %P = alloca ptr, align 8 in %0 = load ptr, ptr %P, align 8
[AAPointerInfo] Analyze %P = alloca ptr, align 8 in %2 = load ptr, ptr %P, align 8
[AAPointerInfo] Analyze %P = alloca ptr, align 8 in %4 = load ptr, ptr %P, align 8
Accesses by bin after update:
[0-8] : 4
- 9 - store ptr %call, ptr %P, align 8
- c: %call = call noalias ptr @malloc(i64 noundef 12) #3
- 5 - %0 = load ptr, ptr %P, align 8
- c: <unknown>
- 5 - %2 = load ptr, ptr %P, align 8
- c: <unknown>
- 5 - %4 = load ptr, ptr %P, align 8
- c: <unknown>
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzEWE1z4ygQ_TX40iWXBJI_Dj44cbI1p_VhD3tFqGWzwaAClKzn12-BZVnyVMbjmWS2yqUPGl4_unkNFndO7jTiihQPpNhMeOv3xq5eZeWk3u25mpSmOq5IuiHpmszS7nd6pUxqodoKgbBH5ytppnvCnt6xKlkOzYOrPzZYYQ3O21Z4IPOHUzsAgNQeOGEPMG4qB03hXRDWDSLzDWytqS4Ng2s00DXUxhC6IHTZ-7rAhz5A6HqbAWEbIHTRjSJ0CQeulBGELpz8iqbujcvwYwPe2ywh7IlHiOWY_8lURlOWXvEcMaBjSBqHbLMrOBrgRLTRAAdwDWjRt1ZDxIM-TMNeIYYHLvVVVEZsoodL5EYkGiu1r6OFcsLWQGhREfoYEnV5Ef1L8agJpaFtG-PUP5X9kxiG9EL3ag2eruwJhOJ6B8nf3b2SjpcKkz_TxDReG42QOP6KicdD46CWCqfiMto0HhLOk0Y2qKRGwjYld1IknEPScOfQEbbh3ltZtt5YSC7PyYFrWaPzidQereZqZOVaG889JhUKlQgHSYVlu0uMVscxZiRVCkjM6dG0flqK4USf_m1QeKzAvxmopPNSCw-l1A5I8ZCG2OWk2ADXVWjIQ8MiNNTGwtZEfrDNpl3mvmiwyJX0R7AojK0c5MCFwDBfkBpC2Eqpe_CA1fEpHtY98-DhD-MhB6mll1xBGwC8AbFH8XIZse44fNG1CYPWmqvjVwQIq6ITXFQYh8bb4JErudOwCGRipzT2UYZX5x6Nt6fRg-4f6TH7nR4JLegd_tbnXJXHmCdehwS3TcU9ErbuSaVJXAVBfvlFtJDAEhIAcN5YPLsRXKnvewXoRkc9w3lQ5B0ftOFKcneCyNO-aMpZDtq0OhT7jIZ6SihjI0JFJHRnoseECHts9Ys2b7rfba7B78np3eD3JPAm-JXu2UnsIznTadikhvoP96H8u_dFuGc0NiyvK0CwnYsA64rA90vAX3s89_MGUOEBw04Mpt_JpQONr2g7YKy-JfJ-MWG_VkzoLWmPFj0dpon-hK5vuiO0YO8ujM_ymN_h8SdqCbtVS26E9bcUknuifrfW7wnwR2j9w6X-o_t91zrEfQSJcZJ9DRBR8caD36PF8ynj9lK-S6rX-9NPSOeXzhmf4-_9TeNz_L2_cD_nkHFfCv_nE8a3fD5i9_8V1DvS9YNl5vvXSbVi1ZIt-QRX2ZyyeTFjWT7ZrzBDrFhW1ozNijqd4XI2y-p6kdN0Wc-xnMgVTWmeLrKCZllW5NMsX84RC4Z8zuv5vCJ5igcu1VSp18PU2N1EOtfiKkvzIl1MFC9Rufg9glKNbxCt4c9isZnYVRiUlO3OkTxV0nl3gfHSq_ghY3SWCEEYyQUqg6cq9YLYgLdcvIQzS1fGYs1trGnQqiO87VEDh6arv9KBMI0Mf8AMcAj0OtMUJq1Vq733jQuioM-EPu-k37flVJgDoc-BZ3dLGmv-QeEJfY6zc4Q-d9N_XdH_AgAA___tAuVy">