[ForwardOpTree] Support synthesizable values.
[polly-mirror.git] / test / ForwardOpTree / forward_synthesizable_indvar.ll
blobb034cd1a5ae253e3cd961f707a7cec7beef223b4
1 ; RUN: opt %loadPolly -polly-optree -analyze < %s | FileCheck %s -match-full-lines
3 ; Test support for (synthesizable) inducation variables.
5 ; for (int j = 0; j < n; j += 1) {
6 ; bodyA:
7 ;   double val = j;
9 ; bodyB:
10 ;   A[0] = val;
11 ; }
13 define void @func(i32 %n, double* noalias nonnull %A) {
14 entry:
15   br label %for
17 for:
18   %j = phi i32 [0, %entry], [%j.inc, %inc]
19   %j.cmp = icmp slt i32 %j, %n
20   br i1 %j.cmp, label %bodyA, label %exit
22     bodyA:
23       %val = sitofp i32 %j to double
24       br label %bodyB
26     bodyB:
27       store double %val, double* %A
28       br label %inc
30 inc:
31   %j.inc = add nuw nsw i32 %j, 1
32   br label %for
34 exit:
35   br label %return
37 return:
38   ret void
42 ; CHECK: Statistics {
43 ; CHECK:     Instructions copied: 1
44 ; CHECK:     Operand trees forwarded: 1
45 ; CHECK:     Statements with forwarded operand trees: 1
46 ; CHECK: }
48 ; CHECK:      After statements {
49 ; CHECK-NEXT:     Stmt_bodyA
50 ; CHECK-NEXT:             MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
51 ; CHECK-NEXT:                 [n] -> { Stmt_bodyA[i0] -> MemRef_val[] };
52 ; CHECK-NEXT:             Instructions {
53 ; CHECK-NEXT:                   %val = sitofp i32 %j to double
54 ; CHECK-NEXT:             }
55 ; CHECK-NEXT:     Stmt_bodyB
56 ; CHECK-NEXT:             MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
57 ; CHECK-NEXT:                 [n] -> { Stmt_bodyB[i0] -> MemRef_A[0] };
58 ; CHECK-NEXT:             Instructions {
59 ; CHECK-NEXT:                   %val = sitofp i32 %j to double
60 ; CHECK-NEXT:                   store double %val, double* %A
61 ; CHECK-NEXT:             }
62 ; CHECK-NEXT: }