[PATCH] D130466: [LICM] - Add option to allow data races

Shubham Narlawar via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Fri Aug 12 05:59:30 PDT 2022


gsocshubham added a comment.

Now for `arm-linux` when compiled with `-Ofast` -

  int u, v;
  
  void f(int a[restrict], int b[restrict], int n) {
      for (int i = 0; i < n; ++i) {
          if (a[i]) {
              ++u;
              break;
          }
          ++u;
          if (b[i])
              ++v;
      }
  }

we get -

  target triple = "armv4t-unknown-linux"
  
  @u = dso_local local_unnamed_addr global i32 0, align 4
  @v = dso_local local_unnamed_addr global i32 0, align 4
  
  ; Function Attrs: nofree norecurse nosync nounwind
  define dso_local arm_aapcscc void @f(ptr noalias nocapture noundef readonly %0, ptr noalias nocapture noundef readonly %1, i32 noundef %2) local_unnamed_addr #0 {
    %4 = load i32, ptr @u, align 4, !tbaa !5
    %5 = load i32, ptr @v, align 4, !tbaa !5
    %6 = icmp sgt i32 %2, 0
    br i1 %6, label %7, label %27
  
  7:                                                ; preds = %3
    %8 = add i32 %4, %2
    br label %9
  
  9:                                                ; preds = %7, %18
    %10 = phi i32 [ %25, %18 ], [ 0, %7 ]
    %11 = phi i32 [ %19, %18 ], [ %4, %7 ]
    %12 = phi i32 [ %24, %18 ], [ %5, %7 ]
    %13 = getelementptr inbounds i32, ptr %0, i32 %10
    %14 = load i32, ptr %13, align 4, !tbaa !5
    %15 = icmp eq i32 %14, 0
    br i1 %15, label %18, label %16
  
  16:                                               ; preds = %9
    store i32 %12, ptr @v, align 4, !tbaa !5
    %17 = add nsw i32 %11, 1
    store i32 %17, ptr @u, align 4, !tbaa !5
    br label %30
  
  18:                                               ; preds = %9
    %19 = add nsw i32 %11, 1
    %20 = getelementptr inbounds i32, ptr %1, i32 %10
    %21 = load i32, ptr %20, align 4, !tbaa !5
    %22 = icmp ne i32 %21, 0
    %23 = zext i1 %22 to i32
    %24 = add nsw i32 %12, %23
    %25 = add nuw nsw i32 %10, 1
    %26 = icmp eq i32 %25, %2
    br i1 %26, label %27, label %9, !llvm.loop !9
  
  27:                                               ; preds = %18, %3
    %28 = phi i32 [ %5, %3 ], [ %24, %18 ]
    %29 = phi i32 [ %4, %3 ], [ %8, %18 ]
    store i32 %29, ptr @u, align 4, !tbaa !5
    store i32 %28, ptr @v, align 4, !tbaa !5
    br label %30
  
  30:                                               ; preds = %27, %16
    ret void
  }

Note that - store to u, v both got sinked out of loop.

  store i32 %29, ptr @u, align 4, !tbaa !5
  store i32 %28, ptr @v, align 4, !tbaa !5


CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D130466/new/

https://reviews.llvm.org/D130466



More information about the llvm-commits mailing list