<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">