[flang] Fix length handling in character kind implicit conversion (#74586)
[llvm-project.git] / polly / test / ForwardOpTree / forward_from_region.ll
blob53d22800081e254cecc0021c3049142d34fdae8d
1 ; RUN: opt %loadPolly -polly-print-optree -disable-output < %s | FileCheck %s -match-full-lines
3 ; Move instructions from region statements.
5 ; for (int j = 0; j < n; j += 1) {
6 ; bodyA:
7 ;   double val = 21.0 + 21.0;
8 ;   if (cond)
10 ; bodyA_true:
11 ;     A[0] = 42;
13 ; bodyB:
14 ;     A[0] = val;
15 ; }
17 define void @func(i32 %n, ptr noalias nonnull %A) {
18 entry:
19   br label %for
21 for:
22   %j = phi i32 [0, %entry], [%j.inc, %inc]
23   %j.cmp = icmp slt i32 %j, %n
24   br i1 %j.cmp, label %bodyA, label %exit
26     bodyA:
27       %val = fadd double 21.0, 21.0
28       %cond = fcmp oeq double 21.0, 21.0
29       br i1 %cond, label %bodyA_true, label %bodyB
31     bodyA_true:
32       store double 42.0, ptr %A
33       br label %bodyB
35     bodyB:
36       store double %val, ptr %A
37       br label %bodyB_exit
39     bodyB_exit:
40       br label %inc
42 inc:
43   %j.inc = add nuw nsw i32 %j, 1
44   br label %for
46 exit:
47   br label %return
49 return:
50   ret void
53 ; CHECK:      Statistics {
54 ; CHECK:     Instructions copied: 1
55 ; CHECK:     Known loads forwarded: 0
56 ; CHECK:     Read-only accesses copied: 0
57 ; CHECK:     Operand trees forwarded: 1
58 ; CHECK:     Statements with forwarded operand trees: 1
59 ; CHECK: }
60 ; CHECK: After statements {
61 ; CHECK:     Stmt_bodyA__TO__bodyB
62 ; CHECK:             MayWriteAccess :=  [Reduction Type: NONE] [Scalar: 0]
63 ; CHECK:                 [n] -> { Stmt_bodyA__TO__bodyB[i0] -> MemRef_A[0] };
64 ; CHECK:             MustWriteAccess := [Reduction Type: NONE] [Scalar: 1]
65 ; CHECK:                 [n] -> { Stmt_bodyA__TO__bodyB[i0] -> MemRef_val[] };
66 ; CHECK:             Instructions {
67 ; CHECK:                   %val = fadd double 2.100000e+01, 2.100000e+01
68 ; CHECK:                   %cond = fcmp oeq double 2.100000e+01, 2.100000e+01
69 ; CHECK:             }
70 ; CHECK:     Stmt_bodyB
71 ; CHECK:             MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]
72 ; CHECK:                 [n] -> { Stmt_bodyB[i0] -> MemRef_A[0] };
73 ; CHECK:             Instructions {
74 ; CHECK:                   %val = fadd double 2.100000e+01, 2.100000e+01
75 ; CHECK:                   store double %val, ptr %A, align 8
76 ; CHECK:             }
77 ; CHECK: }