brintos

brintos / llvm-project-archived public Read only

0
0
Text · 4.7 KiB · e5b6ddb Raw
151 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>" -da-dump-monotonicity-report \3; RUN:     -da-enable-monotonicity-check 2>&1 | FileCheck %s4 5; for (int i = 0; i < n; i++)6;   a[x] = 0;7define void @single_loop_invariant(ptr %a, i64 %x, i64 %n) {8; CHECK-LABEL: 'single_loop_invariant'9; CHECK-NEXT:  Monotonicity check:10; CHECK-NEXT:    Inst: store i8 0, ptr %idx, align 111; CHECK-NEXT:      Expr: %x12; CHECK-NEXT:      Monotonicity: Invariant13; CHECK-EMPTY:14; CHECK-NEXT:  Src: store i8 0, ptr %idx, align 1 --> Dst: store i8 0, ptr %idx, align 115; CHECK-NEXT:    da analyze - consistent output [S]!16;17entry:18  %guard = icmp sgt i64 %n, 019  br i1 %guard, label %loop, label %exit20 21loop:22  %i = phi i64 [ 0, %entry ], [ %i.inc, %loop ]23  %idx = getelementptr inbounds i8, ptr %a, i64 %x24  store i8 0, ptr %idx25  %i.inc = add nsw i64 %i, 126  %exitcond = icmp eq i64 %i.inc, %n27  br i1 %exitcond, label %exit, label %loop28 29exit:30  ret void31}32 33; for (int i = 0; i < n; i++)34;   a[(i % 2 == 0 ? x : y)] = 0;35define void @single_loop_variant(ptr %a, i64 %x, i64 %y, i64 %n) {36; CHECK-LABEL: 'single_loop_variant'37; CHECK-NEXT:  Monotonicity check:38; CHECK-NEXT:    Inst: store i8 0, ptr %idx, align 139; CHECK-NEXT:      Expr: %offset40; CHECK-NEXT:      Monotonicity: Unknown41; CHECK-NEXT:      Reason: %offset42; CHECK-EMPTY:43; CHECK-NEXT:  Src: store i8 0, ptr %idx, align 1 --> Dst: store i8 0, ptr %idx, align 144; CHECK-NEXT:    da analyze - confused!45;46entry:47  %guard = icmp sgt i64 %n, 048  br i1 %guard, label %loop, label %exit49 50loop:51  %i = phi i64 [ 0, %entry ], [ %i.inc, %loop ]52  %offset = phi i64 [ %x, %entry ], [ %offset.next, %loop ]53  %offset.next = phi i64 [ %y, %entry ], [ %offset, %loop ]54  %idx = getelementptr inbounds i8, ptr %a, i64 %offset55  store i8 0, ptr %idx56  %i.inc = add nsw i64 %i, 157  %exitcond = icmp eq i64 %i.inc, %n58  br i1 %exitcond, label %exit, label %loop59 60exit:61  ret void62}63 64; for (int i = 0; i < n; i++)65;   for (int j = 0; j < m; j++)66;     a[x + i] = 0;67define void @invariant_plus_monotonic0(ptr %a, i64 %x, i64 %n, i64 %m) {68; CHECK-LABEL: 'invariant_plus_monotonic0'69; CHECK-NEXT:  Monotonicity check:70; CHECK-NEXT:    Inst: store i8 0, ptr %idx, align 171; CHECK-NEXT:      Expr: {%x,+,1}<nsw><%loop.i.header>72; CHECK-NEXT:      Monotonicity: MultivariateSignedMonotonic73; CHECK-EMPTY:74; CHECK-NEXT:  Src: store i8 0, ptr %idx, align 1 --> Dst: store i8 0, ptr %idx, align 175; CHECK-NEXT:    da analyze - consistent output [0 S]!76;77entry:78  %guard.i = icmp sgt i64 %n, 079  br i1 %guard.i, label %loop.i.header, label %exit80 81loop.i.header:82  %i = phi i64 [ 0, %entry ], [ %i.inc, %loop.i.latch ]83  %offset = phi i64 [ %x, %entry ], [ %offset.inc, %loop.i.latch ]84  br label %loop.j.preheader85 86loop.j.preheader:87  %gurard.j = icmp sgt i64 %m, 088  br i1 %gurard.j, label %loop.j, label %loop.i.latch89 90loop.j:91  %j = phi i64 [ 0, %loop.j.preheader ], [ %j.inc, %loop.j ]92  %idx = getelementptr inbounds i8, ptr %a, i64 %offset93  store i8 0, ptr %idx94  %j.inc = add nuw nsw i64 %j, 195  %exitcond.j = icmp eq i64 %j.inc, %m96  br i1 %exitcond.j, label %loop.i.latch, label %loop.j97 98loop.i.latch:99  %i.inc = add nsw i64 %i, 1100  %offset.inc = add nsw i64 %offset, 1101  %exitcond.i = icmp eq i64 %i.inc, %n102  br i1 %exitcond.i, label %exit, label %loop.i.header103 104exit:105  ret void106}107 108; for (int i = 0; i < n; i++)109;   for (int j = 0; j < m; j++)110;     a[x + j] = 0;111define void @invariant_plus_monotonic1(ptr %a, i64 %x, i64 %n, i64 %m) {112; CHECK-LABEL: 'invariant_plus_monotonic1'113; CHECK-NEXT:  Monotonicity check:114; CHECK-NEXT:    Inst: store i8 0, ptr %idx, align 1115; CHECK-NEXT:      Expr: {%x,+,1}<nsw><%loop.j>116; CHECK-NEXT:      Monotonicity: MultivariateSignedMonotonic117; CHECK-EMPTY:118; CHECK-NEXT:  Src: store i8 0, ptr %idx, align 1 --> Dst: store i8 0, ptr %idx, align 1119; CHECK-NEXT:    da analyze - consistent output [S 0]!120;121entry:122  %guard.i = icmp sgt i64 %n, 0123  br i1 %guard.i, label %loop.i.header, label %exit124 125loop.i.header:126  %i = phi i64 [ 0, %entry ], [ %i.inc, %loop.i.latch ]127  br label %loop.j.preheader128 129loop.j.preheader:130  %gurard.j = icmp sgt i64 %m, 0131  br i1 %gurard.j, label %loop.j, label %loop.i.latch132 133loop.j:134  %j = phi i64 [ 0, %loop.j.preheader ], [ %j.inc, %loop.j ]135  %offset = phi i64 [ %x, %loop.j.preheader ], [ %offset.inc, %loop.j ]136  %idx = getelementptr inbounds i8, ptr %a, i64 %offset137  store i8 0, ptr %idx138  %j.inc = add nuw nsw i64 %j, 1139  %offset.inc = add nsw i64 %offset, 1140  %exitcond.j = icmp eq i64 %j.inc, %m141  br i1 %exitcond.j, label %loop.i.latch, label %loop.j142 143loop.i.latch:144  %i.inc = add nsw i64 %i, 1145  %exitcond.i = icmp eq i64 %i.inc, %n146  br i1 %exitcond.i, label %exit, label %loop.i.header147 148exit:149  ret void150}151