[flang] Fix length handling in character kind implicit conversion (#74586)
[llvm-project.git] / polly / test / ForwardOpTree / forward_transitive.ll
blob243889437149ba55214571cfdaa3586f39b30422
1 ; RUN: opt %loadPolly -polly-print-optree -disable-output < %s | FileCheck %s -match-full-lines
3 ; Move %v and %val to %bodyB, so %bodyA can be removed (by -polly-simplify)
5 ; for (int j = 0; j < n; j += 1) {
6 ; bodyA:
7 ;   double val1 = 12.5 + 12.5;
9 ; bodyB:
10 ;   double val2 = 21.0 + 21.0;
12 ; bodyC:
13 ;   A[0] = val2;
14 ; }
16 define void @func(i32 %n, ptr noalias nonnull %A) {
17 entry:
18   br label %for
20 for:
21   %j = phi i32 [0, %entry], [%j.inc, %inc]
22   %j.cmp = icmp slt i32 %j, %n
23   br i1 %j.cmp, label %bodyA, label %exit
25     bodyA:
26       %val1 = fadd double 12.5, 12.5
27       br label %bodyB
29     bodyB:
30       %val2 = fadd double %val1, 21.0
31       br label %bodyC
33     bodyC:
34       store double %val2, ptr %A
35       br label %inc
37 inc:
38   %j.inc = add nuw nsw i32 %j, 1
39   br label %for
41 exit:
42   br label %return
44 return:
45   ret void
49 ; CHECK: Statistics {
50 ; CHECK:     Instructions copied: 3
51 ; CHECK:     Operand trees forwarded: 2
52 ; CHECK:     Statements with forwarded operand trees: 2
53 ; CHECK: }
55 ; CHECK:      After statements {
56 ; CHECK-NEXT:     Stmt_bodyA
57 ; CHECK-NEXT:             MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
58 ; CHECK-NEXT:                 [n] -> { Stmt_bodyA[i0] -> MemRef_val1[] };
59 ; CHECK-NEXT:             Instructions {
60 ; CHECK-NEXT:                   %val1 = fadd double 1.250000e+01, 1.250000e+01
61 ; CHECK-NEXT:             }
62 ; CHECK-NEXT:     Stmt_bodyB
63 ; CHECK-NEXT:             MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 1]
64 ; CHECK-NEXT:                 [n] -> { Stmt_bodyB[i0] -> MemRef_val2[] };
65 ; CHECK-NEXT:             Instructions {
66 ; CHECK-NEXT:                   %val1 = fadd double 1.250000e+01, 1.250000e+01
67 ; CHECK-NEXT:                   %val2 = fadd double %val1, 2.100000e+01
68 ; CHECK-NEXT:             }
69 ; CHECK-NEXT:     Stmt_bodyC
70 ; CHECK-NEXT:             MustWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
71 ; CHECK-NEXT:                 [n] -> { Stmt_bodyC[i0] -> MemRef_A[0] };
72 ; CHECK-NEXT:             Instructions {
73 ; CHECK-NEXT:                   %val1 = fadd double 1.250000e+01, 1.250000e+01
74 ; CHECK-NEXT:                   %val2 = fadd double %val1, 2.100000e+01
75 ; CHECK-NEXT:                   store double %val2, ptr %A, align 8
76 ; CHECK-NEXT:             }
77 ; CHECK-NEXT: }