[llvm] 1515308 - [LoopFlatten] Precommit test for GH issue #59339. NFC.

Sjoerd Meijer via llvm-commits llvm-commits at lists.llvm.org
Mon Dec 5 07:39:12 PST 2022


Author: Sjoerd Meijer
Date: 2022-12-05T15:38:47Z
New Revision: 1515308a542b17d9ddf5403a836fbe8d17b9893d

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

LOG: [LoopFlatten] Precommit test for GH issue #59339. NFC.

Added: 
    llvm/test/Transforms/LoopFlatten/pr59339.ll

Modified: 
    

Removed: 
    


################################################################################
diff  --git a/llvm/test/Transforms/LoopFlatten/pr59339.ll b/llvm/test/Transforms/LoopFlatten/pr59339.ll
new file mode 100644
index 0000000000000..52ce4ba45bc0f
--- /dev/null
+++ b/llvm/test/Transforms/LoopFlatten/pr59339.ll
@@ -0,0 +1,59 @@
+; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
+; RUN: opt < %s -S -opaque-pointers -loop-flatten -verify-loop-info -verify-dom-info -verify-scev -verify | FileCheck %s
+
+; FIXME: This incorrectly triggers, thus resulting in a miscompilation.
+; The problem is that there is a linear use of the induction variable, i*3+j,
+; but only the part i*3 is used for indexing.
+
+define void @test0(i16* %0, i16* %1) {
+; CHECK-LABEL: @test0(
+; CHECK-NEXT:    [[FLATTEN_TRIPCOUNT:%.*]] = mul i64 3, 2
+; CHECK-NEXT:    br label [[DOTPREHEADER:%.*]]
+; CHECK:       .preheader:
+; CHECK-NEXT:    [[TMP3:%.*]] = phi i64 [ 0, [[TMP2:%.*]] ], [ [[TMP7:%.*]], [[TMP6:%.*]] ]
+; CHECK-NEXT:    [[TMP4:%.*]] = mul i64 [[TMP3]], 3
+; CHECK-NEXT:    [[TMP5:%.*]] = getelementptr i16, ptr [[TMP1:%.*]], i64 [[TMP4]]
+; CHECK-NEXT:    br label [[TMP9:%.*]]
+; CHECK:       6:
+; CHECK-NEXT:    [[TMP7]] = add i64 [[TMP3]], 1
+; CHECK-NEXT:    [[TMP8:%.*]] = icmp slt i64 [[TMP7]], [[FLATTEN_TRIPCOUNT]]
+; CHECK-NEXT:    br i1 [[TMP8]], label [[DOTPREHEADER]], label [[TMP16:%.*]]
+; CHECK:       9:
+; CHECK-NEXT:    [[TMP10:%.*]] = phi i64 [ 0, [[DOTPREHEADER]] ]
+; CHECK-NEXT:    [[TMP11:%.*]] = load i16, ptr [[TMP5]], align 2
+; CHECK-NEXT:    [[TMP12:%.*]] = add i64 [[TMP10]], [[TMP4]]
+; CHECK-NEXT:    [[TMP13:%.*]] = getelementptr i16, ptr [[TMP0:%.*]], i64 [[TMP3]]
+; CHECK-NEXT:    store i16 [[TMP11]], ptr [[TMP13]], align 2
+; CHECK-NEXT:    [[TMP14:%.*]] = add nuw nsw i64 [[TMP10]], 1
+; CHECK-NEXT:    [[TMP15:%.*]] = icmp ult i64 [[TMP14]], 3
+; CHECK-NEXT:    br label [[TMP6]]
+; CHECK:       16:
+; CHECK-NEXT:    ret void
+;
+2:
+  br label %.preheader
+
+.preheader:
+  %3 = phi i64 [ 0, %2 ], [ %7, %6 ]
+  %4 = mul i64 %3, 3
+  %5 = getelementptr i16, ptr %1, i64 %4
+  br label %9
+
+6:
+  %7 = add i64 %3, 1
+  %8 = icmp slt i64 %7, 2
+  br i1 %8, label %.preheader, label %16
+
+9:
+  %10 = phi i64 [ 0, %.preheader ], [ %14, %9 ]
+  %11 = load i16, ptr %5, align 2
+  %12 = add i64 %10, %4
+  %13 = getelementptr i16, ptr %0, i64 %12
+  store i16 %11, ptr %13, align 2
+  %14 = add nuw nsw i64 %10, 1
+  %15 = icmp ult i64 %14, 3
+  br i1 %15, label %9, label %6
+
+16:
+  ret void
+}


        


More information about the llvm-commits mailing list