<table border="1" cellspacing="0" cellpadding="8">
<tr>
<th>Issue</th>
<td>
<a href=https://github.com/llvm/llvm-project/issues/64791>64791</a>
</td>
</tr>
<tr>
<th>Summary</th>
<td>
No alias detected for store i128 and its associated loads
</td>
</tr>
<tr>
<th>Labels</th>
<td>
</td>
</tr>
<tr>
<th>Assignees</th>
<td>
</td>
</tr>
<tr>
<th>Reporter</th>
<td>
GengQi-mthreads
</td>
</tr>
</table>
<pre>
`
// sample.cpp
struct SS {
int x;
int y;
};
void test(int *a, int n) {
int T[2][2];
for (int i = 0; i < n; i++) {
asm("ANY ASM ASSIGN %0": "=r"(*((SS*)T[0])));
for (int j = 0; j < n; j++) {
a[j] += T[0][j&1];
}
}
}
`
clang++ -O2 -S -emit-llvm sample.cpp
`; ModuleID = 'sample.cpp'
source_filename = "sample.cpp"
target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
target triple = "x86_64-unknown-linux-gnu"
; Function Attrs: mustprogress nounwind memory(argmem: readwrite) uwtable
define dso_local void @_Z4testPii(ptr nocapture noundef %0, i32 noundef %1) local_unnamed_addr #0 {
%3 = alloca [2 x [2 x i32]], align 16
call void @llvm.lifetime.start.p0(i64 16, ptr nonnull %3) #2
%4 = icmp sgt i32 %1, 0
br i1 %4, label %5, label %15
5: ; preds = %2
%6 = tail call i64 asm "ANY ASM ASSIGN $0", "=r,~{dirflag},~{fpsr},~{flags}"() #3, !srcloc !5
%7 = zext i32 %1 to i64
%8 = and i64 %7, 1
%9 = icmp eq i32 %1, 1
%10 = and i64 %7, 4294967294
%11 = load i32, ptr %3, align 16
%12 = getelementptr inbounds [2 x i32], ptr %3, i64 0, i64 1
%13 = load i32, ptr %12, align 4
%14 = icmp eq i64 %8, 0
br label %16
15: ; preds = %27, %2
call void @llvm.lifetime.end.p0(i64 16, ptr nonnull %3) #2
ret void
16: ; preds = %27, %5
%17 = phi i32 [ 0, %5 ], [ %28, %27 ]
br i1 %9, label %18, label %30
18: ; preds = %30, %16
%19 = phi i64 [ 0, %16 ], [ %40, %30 ]
br i1 %14, label %27, label %20
20: ; preds = %18
%21 = and i64 %19, 1
%22 = getelementptr inbounds [2 x i32], ptr %3, i64 0, i64 %21
%23 = load i32, ptr %22, align 4, !tbaa !6
%24 = getelementptr inbounds i32, ptr %0, i64 %19
%25 = load i32, ptr %24, align 4, !tbaa !6
%26 = add nsw i32 %25, %23
store i32 %26, ptr %24, align 4, !tbaa !6
br label %27
27: ; preds = %18, %20
%28 = add nuw nsw i32 %17, 1
%29 = icmp eq i32 %28, %1
br i1 %29, label %15, label %16, !llvm.loop !10
30: ; preds = %16, %30
%31 = phi i64 [ %40, %30 ], [ 0, %16 ]
%32 = phi i64 [ %41, %30 ], [ 0, %16 ]
%33 = getelementptr inbounds i32, ptr %0, i64 %31
%34 = load i32, ptr %33, align 4, !tbaa !6
%35 = add nsw i32 %34, %11
store i32 %35, ptr %33, align 4, !tbaa !6
%36 = or i64 %31, 1
%37 = getelementptr inbounds i32, ptr %0, i64 %36
%38 = load i32, ptr %37, align 4, !tbaa !6
%39 = add nsw i32 %38, %13
store i32 %39, ptr %37, align 4, !tbaa !6
%40 = add nuw nsw i64 %31, 2
%41 = add i64 %32, 2
%42 = icmp eq i64 %41, %10
br i1 %42, label %18, label %30, !llvm.loop !12
}
; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.start.p0(i64 immarg, ptr nocapture) #1
; Function Attrs: mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite)
declare void @llvm.lifetime.end.p0(i64 immarg, ptr nocapture) #1
attributes #0 = { mustprogress nounwind memory(argmem: readwrite) uwtable "min-legal-vector-width"="0" "no-trapping-math"="true" "stack-protector-buffer-size"="8" "target-cpu"="x86-64" "target-features"="+cx8,+fxsr,+mmx,+sse,+sse2,+x87" "tune-cpu"="generic" }
attributes #1 = { mustprogress nocallback nofree nosync nounwind willreturn memory(argmem: readwrite) }
attributes #2 = { nounwind }
attributes #3 = { nounwind memory(none) }
!llvm.module.flags = !{!0, !1, !2, !3}
!llvm.ident = !{!4}
!0 = !{i32 1, !"wchar_size", i32 4}
!1 = !{i32 8, !"PIC Level", i32 2}
!2 = !{i32 7, !"PIE Level", i32 2}
!3 = !{i32 7, !"uwtable", i32 2}
!4 = !{!"clang version 16.0.0"}
!5 = !{i64 125}
!6 = !{!7, !7, i64 0}
!7 = !{!"int", !8, i64 0}
!8 = !{!"omnipotent char", !9, i64 0}
!9 = !{!"Simple C++ TBAA"}
!10 = distinct !{!10, !11}
!11 = !{!"llvm.loop.mustprogress"}
!12 = distinct !{!12, !11, !13}
!13 = !{!"llvm.loop.isvectorized", i32 1}
`
%6 should be stored, but I observed that it was erased at LICM pass.
</pre>
<img width="1px" height="1px" alt="" src="http://email.email.llvm.org/o/eJzMWEuT4ygS_jXUhZBDJHoefLCrtiY6YqZ3Nmouu5cKLGGbbglpAZVdfdjfvgF6IT96qnvnsB3VFkj5-Ei-BBKmtThIztco3qL46YF15tio9S9cHv4hgtocFWelftg15fsaJSEKn1C4QfCM4BlrVrcVXxVt27_WRnWFwS8vGKXb_hXGQhp8RnTRf5_6KH2a2-73rRElNlwbBJmVRbBhCB6dnkSQz7ZHi73NP1C8BRQ_jY_ZI8b7RuHBnMCIPuEQ0a1rPmLpmgi27s8zj5muEWQIYPP5n3jz8hvevLx8-uUzRhCHCADRDXaPJ2UfVnLjfrOXF9fMLaTQYoF8-PNBLWB9mWF9mWF9uQVr-MdQvP2C4idsBegTnpzZ15CQyxhgbGPdd6fW3Jim1v0WFZOH3jkO_g44eMEBr4UJquqtvpr32QTd4t-asqv4pyc3IASpJwzpwJOmUwV_3YuKS1bzQRJ8SeglDVMHbnDJDKvYe9OZUZYHNaIbHrSQhohuKLgf2yXLrm0lkfsJxNjYZ1aJQBbIzDaSUSeJghfi5nzh3yjRVhPOc5a8JlHQya-yOcmgErI7BwfZTVrDL93i504WRjQSb4xR2jKm7rRpVXNQXGssm06ehCxxzetGvSPImDrU3A4N27w7KWG4nf3uZNiu4r3hku-F5LjUzWvVFKzCLmVQFL7-K7KJ87sQCLLWKCybgrWmU9x5Kvl-4O4jFhT8d8Q6ccZeO2nnpHxlZWnZSUOfeghi6sLAKiuNbbLh8_gQtE_AJ-uBVeIgMUlG1YJVM1JLo1Ul9tyImq-0Ycqs2tDmQhJZHXjEPX4pu6pybl0SAAUPSuSgiKJusT4YN6Z-LI84HMV2CgvihO3riu24MxcveiT2Jy52mU23uFW81MOsx77jxL00TFT9sCxqpmt8a62I3FoBj_Na8fgflG5LofYVO9gE7F_sW628XsUO2nX7lcWNnfZmiFZF1RS2FXugUgfqGz_PkcCmsdg8oayfPVk6zFbL2iSeRD4Hlf97EVNfioQ3DUWQR3mSQu77JMTJVg0rHUWGye0n9ZooVgOcxoEbXvGaS2PlhdxZwuoLtl1Ys2jCsbFATO-hIDDDWOCOlqHox5ld0mtmUeKziNyhUdpP4syn7yQGl-WPpoXixhlbQEm-D8VnEelp1B5FP_fxtg-nFcNDvO1Lq5-NQ0ndl8uMy5c5li26dLHfkOwmQjq6XrIjnyHaOfEgkuQCYzR-sevYDYxkuSz0IZm7C5AQ3gRJMg8bkMu8IPll7sBfxG7nzrd7l-GwYHi_iJgdY_bpRxai7yFb2vRhkNw3Et-FEX0QRr--srLEUp_GNQjikW50lNWmUXz6nvyoKz95x7PJMNXpvakeIIQ-3GyG2518yORqdYWby-uUSeSKoJBf7lSLbjKMrV83mqa1HbKgLb1D22TKDH93J1e5dSOLhvy6yDrPCty0Qj5uxUrRnyMj9eNNo7t7D_0YGWl8i4w0GlGTm2Sk8c-46nnfKG8oF_yh6U8GZeEnuxuU9INI85tBmWh8O0Np_hOuovA6u_zoLA6EZJIdZeBKBm7t6hM3yY2TI_zJRnYrBeGywPp4TWAPBDtWfMWy2Stuz-76XRZzsXASVaW46ZT8s7phrBeKiin-scO3qGumDvNJYygghmMG-T8fzOLA9ANDYcYosesM10PJY9fIdPu_VWv2xF8LGVT8wKrgjRemUcFJlObYlwIIwNYGVkw2gVGsbYU8BDXzBIzq-CCjDSu-Bq1qTG9p1-33XAVafOOTeDbI9nVrULTd9OmcJUESLb_vObMR0ZMQgm1xtvxGsN2ftepbdX3uG1rzqQF965ylo81O8oXHA5dcicJ9HtNgGWhyL9B_HWvuuYbJ9WT0jiS9lpx8ykYunYz3Y_1qULu7kJUr5oZ9l9hqGsi4aAzLDhkqREJnS4MNUXJplsrRtbvQk7Cr7WgXAZyKI1OvI02G2j_y_ZAL5WxW_v3TI_6Vv_HK0wVfFy50U1_3b9_Xpfd1xwuPO5rRMiAIwN1Y4TeutF2NSLIKV67w9pRi350tqCD2PydLmyOYdD53e8LpFQAhzVTo91vElVJ2pdTUUrSNsTNsZ2k2kN80kF8ZeBF1W3H8ONzV_bHdbC5GPVCjFNoIWZhZe-YgWciTKyfTzrby0_TSD9zzA7OfobFg-YIGlw6F7tdN8Y2XHhnIvYtLdzmjj01XlXjH--NHabV2ncGfcLPTXL3xEpsjM1gYfGIac8U0LzEz-NdPj7_hlmm9eijXtMxpzh74miQ50ChJcng4rvM9YUVM97u0hDQHBnnCGM0JREUc0XL3INYQAg0zktn_BFY7EpdRYvXCjMV0h6KQ10xUKzfKRh0ehNYdXydRmpMHd67Q4228WluhYNcdtN3rhDZ6VjPCVHz9ubGHKKZxye3GwEt3rTycuwhkfS1qNGZaN4VgVsKe_PRDp6r10ZjWbtv9jf5BmGO3WxVNjeDZ-hkedtf5wguD4Nlh1QieHdz_BgAA___4B1-y">