diff --git a/llvm/test/Analysis/DependenceAnalysis/weak-crossing-siv-coeff-may-zero.ll b/llvm/test/Analysis/DependenceAnalysis/weak-crossing-siv-coeff-may-zero.ll new file mode 100644 index 000000000000..d4a0fd12343f --- /dev/null +++ b/llvm/test/Analysis/DependenceAnalysis/weak-crossing-siv-coeff-may-zero.ll @@ -0,0 +1,58 @@ +; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py UTC_ARGS: --version 6 +; RUN: opt < %s -disable-output "-passes=print" 2>&1 \ +; RUN: | FileCheck %s --check-prefixes=CHECK,CHECK-ALL +; RUN: opt < %s -disable-output "-passes=print" -da-enable-dependence-test=weak-crossing-siv 2>&1 \ +; RUN: | FileCheck %s --check-prefixes=CHECK,CHECK-WEAK-CROSSING-SIV + +; for (i = 0; i < 10; i++) { +; A[a*i] = 0; +; A[-a*i] = 1; +; } +; +; FIXME: When a == 0, there is a dependency with all directions between the two +; stores. +; +define void @weak_crossing_siv_coeff_may_zero(ptr %A, i64 %a) { +; CHECK-ALL-LABEL: 'weak_crossing_siv_coeff_may_zero' +; CHECK-ALL-NEXT: Src: store i8 0, ptr %gep.0, align 1 --> Dst: store i8 0, ptr %gep.0, align 1 +; CHECK-ALL-NEXT: da analyze - output [0]! +; CHECK-ALL-NEXT: Runtime Assumptions: +; CHECK-ALL-NEXT: Compare predicate: %a ne) 0 +; CHECK-ALL-NEXT: Src: store i8 0, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.1, align 1 +; CHECK-ALL-NEXT: da analyze - output [0|<]! +; CHECK-ALL-NEXT: Src: store i8 1, ptr %gep.1, align 1 --> Dst: store i8 1, ptr %gep.1, align 1 +; CHECK-ALL-NEXT: da analyze - output [0]! +; CHECK-ALL-NEXT: Runtime Assumptions: +; CHECK-ALL-NEXT: Compare predicate: (-1 * %a) ne) 0 +; +; CHECK-WEAK-CROSSING-SIV-LABEL: 'weak_crossing_siv_coeff_may_zero' +; CHECK-WEAK-CROSSING-SIV-NEXT: Src: store i8 0, ptr %gep.0, align 1 --> Dst: store i8 0, ptr %gep.0, align 1 +; CHECK-WEAK-CROSSING-SIV-NEXT: da analyze - output [*]! +; CHECK-WEAK-CROSSING-SIV-NEXT: Src: store i8 0, ptr %gep.0, align 1 --> Dst: store i8 1, ptr %gep.1, align 1 +; CHECK-WEAK-CROSSING-SIV-NEXT: da analyze - output [0|<]! +; CHECK-WEAK-CROSSING-SIV-NEXT: Src: store i8 1, ptr %gep.1, align 1 --> Dst: store i8 1, ptr %gep.1, align 1 +; CHECK-WEAK-CROSSING-SIV-NEXT: da analyze - output [*]! +; +entry: + %a.neg = sub nsw i64 0, %a + br label %loop + +loop: + %i = phi i64 [ 0, %entry ], [ %i.inc, %loop ] + %offset.0 = phi i64 [ 0, %entry ], [ %offset.0.next, %loop ] + %offset.1 = phi i64 [ 0, %entry ], [ %offset.1.next, %loop ] + %gep.0 = getelementptr i8, ptr %A, i64 %offset.0 + %gep.1 = getelementptr i8, ptr %A, i64 %offset.1 + store i8 0, ptr %gep.0 + store i8 1, ptr %gep.1 + %i.inc = add i64 %i, 1 + %offset.0.next = add nsw i64 %offset.0, %a + %offset.1.next = add nsw i64 %offset.1, %a.neg + %ec = icmp eq i64 %i.inc, 10 + br i1 %ec, label %exit, label %loop + +exit: + ret void +} +;; NOTE: These prefixes are unused and the list is autogenerated. Do not add tests below this line: +; CHECK: {{.*}}