[PATCH] D153004: [LSR] Consider post-inc form when creating extends/truncates.

Peixin Qiao via Phabricator via llvm-commits llvm-commits at lists.llvm.org
Wed Jun 28 18:22:51 PDT 2023


peixin added a comment.

In D153004#4451053 <https://reviews.llvm.org/D153004#4451053>, @peixin wrote:

> There may be one more case which this patch does not capture? Check the following input:
>
>   target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
>   target triple = "aarch64-unknown-linux-gnu"
>   
>   @c = internal global i32 0, align 4
>   @g = dso_local local_unnamed_addr global ptr @c, align 8
>   @h = dso_local global i8 0, align 4
>   @j = dso_local local_unnamed_addr global ptr @h, align 8
>   @b = internal unnamed_addr global i32 0, align 4
>   @e = dso_local local_unnamed_addr global i16 0, align 4
>   @f = dso_local local_unnamed_addr global i64 0, align 8
>   @l = dso_local local_unnamed_addr global i64 0, align 8
>   @i = dso_local local_unnamed_addr global i64 0, align 8
>   @.str = private unnamed_addr constant [5 x i8] c"%lX\0A\00", align 1
>   @a = dso_local local_unnamed_addr global i8 0, align 1
>   
>   ; Function Attrs: mustprogress nofree norecurse nosync nounwind readnone willreturn uwtable
>   define dso_local void @n(ptr nocapture noundef %0) {
>     ret void
>   }
>   
>   ; Function Attrs: nofree nounwind uwtable
>   define dso_local i32 @main() {
>     %1 = load ptr, ptr @g, align 8
>     %2 = load i64, ptr @f, align 8
>     br label %3
>   
>   3:                                                ; preds = %0, %18
>     %4 = phi i32 [ 0, %0 ], [ %19, %18 ]
>     %5 = phi i64 [ %2, %0 ], [ %15, %18 ]
>     br label %6
>   
>   6:                                                ; preds = %3, %6
>     %7 = phi i32 [ 1, %3 ], [ %10, %6 ]
>     %8 = phi i64 [ %5, %3 ], [ %9, %6 ]
>     %9 = add nsw i64 %8, 1
>     %10 = add nsw i32 %7, -1
>     %11 = icmp sgt i32 %7, 0
>     br i1 %11, label %6, label %12
>   
>   12:                                               ; preds = %6, %12
>     %13 = phi i32 [ %16, %12 ], [ 1, %6 ]
>     %14 = phi i64 [ %15, %12 ], [ %9, %6 ]
>     %15 = add nsw i64 %14, 1
>     %16 = add nsw i32 %13, -1
>     %17 = icmp sgt i32 %13, 0
>     br i1 %17, label %12, label %18
>   
>   18:                                               ; preds = %12
>     %19 = add nuw nsw i32 %4, 1
>     %20 = icmp eq i32 %19, 8
>     br i1 %20, label %21, label %3
>   
>   21:                                               ; preds = %18
>     store i32 %16, ptr @b, align 4
>     store i32 0, ptr %1, align 4
>     %22 = zext i32 %13 to i64
>     store i16 -1, ptr @e, align 4
>     store i64 %15, ptr @f, align 8
>     store i64 %14, ptr @l, align 8
>     store i64 %22, ptr @i, align 8
>     %23 = urem i32 %16, 53
>     %24 = trunc i32 %23 to i8
>     %25 = load ptr, ptr @j, align 8
>     store i8 %24, ptr %25, align 1
>     %26 = load i8, ptr @h, align 4
>     %27 = xor i8 %26, 5
>     %28 = zext i8 %27 to i64
>     %29 = tail call i32 (ptr, ...) @printf(ptr noundef nonnull @.str, i64 noundef %28)
>     ret i32 0
>   }
>   
>   declare noundef i32 @printf(ptr nocapture noundef readonly, ...)
>
>   $ opt -loop-reduce reduced.ll -S -o out.ll && clang out.ll -o a.out && ./a.out
>   B
>   $ clang reduced.ll -o a.out && ./a.out
>   2C

@fhahn Do you plan to fix this? If not, I will file one ticket for this.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D153004



More information about the llvm-commits mailing list