brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.9 KiB · 59e2ed3 Raw
125 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_analyze_test_checks.py UTC_ARGS: --version 62; RUN: opt < %s -disable-output "-passes=print<da>" 2>&1 | FileCheck %s3; RUN: opt < %s -disable-output "-passes=print<da>" -da-enable-dependence-test=exact-siv 2>&1 \4; RUN:     | FileCheck %s --check-prefix=CHECK-EXACT-SIV5 6;; max_i = INT64_MAX/6  // 15372286728091293017;; for (long long i = 0; i <= max_i; i++) {8;;   A[-6*i + INT64_MAX] = 0;9;;   if (i)10;;     A[3*i - 2] = 1;11;; }12;;13;; FIXME: DependencyAnalsysis currently detects no dependency between14;; `A[-6*i + INT64_MAX]` and `A[3*i - 2]`, but it does exist. For example,15;;16;; | memory location        | -6*i + INT64_MAX       | 3*i - 217;; |------------------------|------------------------|-----------18;; | A[1]                   | i = max_i              | i = 119;; | A[4611686018427387901] | i = 768614336404564651 | i = max_i20;;21;; Actually,22;;  * 1                   = -6*max_i              + INT64_MAX = 3*1     - 223;;  * 4611686018427387901 = -6*768614336404564651 + INT64_MAX = 3*max_i - 224;;25 26define void @exactsiv_const_ovfl(ptr %A) {27; CHECK-LABEL: 'exactsiv_const_ovfl'28; CHECK-NEXT:  Src: store i8 0, ptr %idx.0, align 1 --> Dst: store i8 0, ptr %idx.0, align 129; CHECK-NEXT:    da analyze - none!30; CHECK-NEXT:  Src: store i8 0, ptr %idx.0, align 1 --> Dst: store i8 1, ptr %idx.1, align 131; CHECK-NEXT:    da analyze - none!32; CHECK-NEXT:  Src: store i8 1, ptr %idx.1, align 1 --> Dst: store i8 1, ptr %idx.1, align 133; CHECK-NEXT:    da analyze - none!34;35; CHECK-EXACT-SIV-LABEL: 'exactsiv_const_ovfl'36; CHECK-EXACT-SIV-NEXT:  Src: store i8 0, ptr %idx.0, align 1 --> Dst: store i8 0, ptr %idx.0, align 137; CHECK-EXACT-SIV-NEXT:    da analyze - consistent output [*]!38; CHECK-EXACT-SIV-NEXT:  Src: store i8 0, ptr %idx.0, align 1 --> Dst: store i8 1, ptr %idx.1, align 139; CHECK-EXACT-SIV-NEXT:    da analyze - output [*|<]!40; CHECK-EXACT-SIV-NEXT:  Src: store i8 1, ptr %idx.1, align 1 --> Dst: store i8 1, ptr %idx.1, align 141; CHECK-EXACT-SIV-NEXT:    da analyze - consistent output [*]!42;43entry:44  br label %loop.header45 46loop.header:47  %i = phi i64 [ 0, %entry ], [ %i.inc, %loop.latch ]48  %subscript.0 = phi i64 [ 9223372036854775807, %entry ], [ %subscript.0.next, %loop.latch ]49  %subscript.1 = phi i64 [ -2, %entry ], [ %subscript.1.next, %loop.latch ]50  %idx.0 = getelementptr inbounds i8, ptr %A, i64 %subscript.051  store i8 0, ptr %idx.052  %cond.store = icmp ne i64 %i, 053  br i1 %cond.store, label %if.store, label %loop.latch54 55if.store:56  %idx.1 = getelementptr inbounds i8, ptr %A, i64 %subscript.157  store i8 1, ptr %idx.158  br label %loop.latch59 60loop.latch:61  %i.inc = add nuw nsw i64 %i, 162  %subscript.0.next = add nsw i64 %subscript.0, -663  %subscript.1.next = add nsw i64 %subscript.1, 364  %exitcond = icmp sgt i64 %i.inc, 153722867280912930165  br i1 %exitcond, label %exit, label %loop.header66 67exit:68  ret void69}70 71;; A generalized version of the above case.72;;73;; for (long long i = 0; i <= n / 6; i++) {74;;   A[-6*i + n] = 0;75;;   if (i)76;;     A[3*i - 2] = 1;77;; }78 79define void @exactsiv_param_ovfl(ptr %A, i64 %n) {80; CHECK-LABEL: 'exactsiv_param_ovfl'81; CHECK-NEXT:  Src: store i8 0, ptr %idx.0, align 1 --> Dst: store i8 0, ptr %idx.0, align 182; CHECK-NEXT:    da analyze - none!83; CHECK-NEXT:  Src: store i8 0, ptr %idx.0, align 1 --> Dst: store i8 1, ptr %idx.1, align 184; CHECK-NEXT:    da analyze - output [*|<]!85; CHECK-NEXT:  Src: store i8 1, ptr %idx.1, align 1 --> Dst: store i8 1, ptr %idx.1, align 186; CHECK-NEXT:    da analyze - none!87;88; CHECK-EXACT-SIV-LABEL: 'exactsiv_param_ovfl'89; CHECK-EXACT-SIV-NEXT:  Src: store i8 0, ptr %idx.0, align 1 --> Dst: store i8 0, ptr %idx.0, align 190; CHECK-EXACT-SIV-NEXT:    da analyze - consistent output [*]!91; CHECK-EXACT-SIV-NEXT:  Src: store i8 0, ptr %idx.0, align 1 --> Dst: store i8 1, ptr %idx.1, align 192; CHECK-EXACT-SIV-NEXT:    da analyze - output [*|<]!93; CHECK-EXACT-SIV-NEXT:  Src: store i8 1, ptr %idx.1, align 1 --> Dst: store i8 1, ptr %idx.1, align 194; CHECK-EXACT-SIV-NEXT:    da analyze - consistent output [*]!95;96entry:97  %bound = sdiv i64 %n, 698  %guard = icmp sgt i64 %n, 099  br i1 %guard, label %loop.header, label %exit100 101loop.header:102  %i = phi i64 [ 0, %entry ], [ %i.inc, %loop.latch ]103  %subscript.0 = phi i64 [ %n, %entry ], [ %subscript.0.next, %loop.latch ]104  %subscript.1 = phi i64 [ -2, %entry ], [ %subscript.1.next, %loop.latch ]105  %idx.0 = getelementptr inbounds i8, ptr %A, i64 %subscript.0106  store i8 0, ptr %idx.0107  %cond.store = icmp ne i64 %i, 0108  br i1 %cond.store, label %if.store, label %loop.latch109 110if.store:111  %idx.1 = getelementptr inbounds i8, ptr %A, i64 %subscript.1112  store i8 1, ptr %idx.1113  br label %loop.latch114 115loop.latch:116  %i.inc = add nuw nsw i64 %i, 1117  %subscript.0.next = add nsw i64 %subscript.0, -6118  %subscript.1.next = add nsw i64 %subscript.1, 3119  %exitcond = icmp sgt i64 %i.inc, %bound120  br i1 %exitcond, label %exit, label %loop.header121 122exit:123  ret void124}125