[llvm] fcd6549 - [LIR] Add test for #82337 (NFC)

Nikita Popov via llvm-commits llvm-commits at lists.llvm.org
Tue Feb 20 05:42:49 PST 2024


Author: Nikita Popov
Date: 2024-02-20T14:42:40+01:00
New Revision: fcd6549e5801de938935b93fd2d13020b42eebdb

URL: https://github.com/llvm/llvm-project/commit/fcd6549e5801de938935b93fd2d13020b42eebdb
DIFF: https://github.com/llvm/llvm-project/commit/fcd6549e5801de938935b93fd2d13020b42eebdb.diff

LOG: [LIR] Add test for #82337 (NFC)

Added: 
    llvm/test/Transforms/LoopIdiom/pr82337.ll

Modified: 
    

Removed: 
    


################################################################################
diff  --git a/llvm/test/Transforms/LoopIdiom/pr82337.ll b/llvm/test/Transforms/LoopIdiom/pr82337.ll
new file mode 100644
index 00000000000000..e8a6e1704f7c17
--- /dev/null
+++ b/llvm/test/Transforms/LoopIdiom/pr82337.ll
@@ -0,0 +1,59 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 4
+; RUN: opt -S -passes=loop-idiom < %s | FileCheck %s
+
+; FIXME: The poison flags should be preserved, as no transform takes place.
+define void @test(ptr %p.end, ptr %p.start) {
+; CHECK-LABEL: define void @test(
+; CHECK-SAME: ptr [[P_END:%.*]], ptr [[P_START:%.*]]) {
+; CHECK-NEXT:  entry:
+; CHECK-NEXT:    [[P_END_INT:%.*]] = ptrtoint ptr [[P_END]] to i64
+; CHECK-NEXT:    [[P_START_INT:%.*]] = ptrtoint ptr [[P_START]] to i64
+; CHECK-NEXT:    [[DIST:%.*]] = sub i64 [[P_END_INT]], [[P_START_INT]]
+; CHECK-NEXT:    [[LEN:%.*]] = lshr i64 [[DIST]], 5
+; CHECK-NEXT:    [[CMP:%.*]] = icmp eq ptr [[P_END]], [[P_START]]
+; CHECK-NEXT:    br i1 [[CMP]], label [[EXIT:%.*]], label [[PREHEADER:%.*]]
+; CHECK:       preheader:
+; CHECK-NEXT:    br label [[LOOP:%.*]]
+; CHECK:       loop:
+; CHECK-NEXT:    [[IV:%.*]] = phi i64 [ [[LEN]], [[PREHEADER]] ], [ [[IV_DEC:%.*]], [[LOOP]] ]
+; CHECK-NEXT:    [[IV_NEG:%.*]] = sub nsw i64 0, [[IV]]
+; CHECK-NEXT:    [[SRC:%.*]] = getelementptr inbounds [32 x i8], ptr [[P_END]], i64 [[IV_NEG]]
+; CHECK-NEXT:    [[V:%.*]] = load <4 x i64>, ptr [[SRC]], align 8
+; CHECK-NEXT:    [[DST:%.*]] = getelementptr inbounds [32 x i8], ptr [[P_START]], i64 [[IV_NEG]]
+; CHECK-NEXT:    store <4 x i64> [[V]], ptr [[DST]], align 8
+; CHECK-NEXT:    [[IV_DEC]] = add i64 [[IV]], -1
+; CHECK-NEXT:    [[CMP2:%.*]] = icmp eq i64 [[IV_DEC]], 0
+; CHECK-NEXT:    br i1 [[CMP2]], label [[LOOP_EXIT:%.*]], label [[LOOP]]
+; CHECK:       loop.exit:
+; CHECK-NEXT:    br label [[EXIT]]
+; CHECK:       exit:
+; CHECK-NEXT:    ret void
+;
+entry:
+  %p.end.int = ptrtoint ptr %p.end to i64
+  %p.start.int = ptrtoint ptr %p.start to i64
+  %dist = sub nuw i64 %p.end.int, %p.start.int
+  %len = lshr exact i64 %dist, 5
+  %cmp = icmp eq ptr %p.end, %p.start
+  br i1 %cmp, label %exit, label %preheader
+
+preheader:
+  br label %loop
+
+loop:
+  %iv = phi i64 [ %len, %preheader ], [ %iv.dec, %loop ]
+  %iv.neg = sub nsw i64 0, %iv
+  %src = getelementptr inbounds [32 x i8], ptr %p.end, i64 %iv.neg
+  %v = load <4 x i64>, ptr %src, align 8
+  %dst = getelementptr inbounds [32 x i8], ptr %p.start, i64 %iv.neg
+  store <4 x i64> %v, ptr %dst, align 8
+  %iv.dec = add i64 %iv, -1
+  %cmp2 = icmp eq i64 %iv.dec, 0
+  br i1 %cmp2, label %loop.exit, label %loop
+
+loop.exit:
+  br label %exit
+
+exit:
+  ret void
+}


        


More information about the llvm-commits mailing list