[flang] Fix length handling in character kind implicit conversion (#74586)
[llvm-project.git] / polly / test / ScopInfo / invariant_load_complex_condition.ll
blobe721c222db5f8feccab60555e63b5d6950f96bc5
1 ; RUN: opt %loadPolly -polly-stmt-granularity=bb -S -polly-print-scops -disable-output \
2 ; RUN: -polly-invariant-load-hoisting=true < %s | FileCheck %s
4 target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"
6 %struct.IP = type { ptr, ptr, %struct.P, %struct.S, %struct.m }
7 %struct.P = type { i32 }
8 %struct.S = type { i32 }
9 %struct.D = type { i32 }
10 %struct.B = type { i32 }
11 %struct.E = type { i32 }
12 %struct.s = type { i32 }
13 %struct.M = type { i32 }
14 %struct.C = type { i32 }
15 %struct.T = type { i32 }
16 %struct.R = type { i32 }
17 %struct.m = type { i32 }
18 %struct.d = type { i32 }
21 ; Verify that we do not invariant load hoist very complex conditions.
23 ; CHECK:      Statements {
24 ; CHECK-NEXT:   Stmt_entry_split
25 ; CHECK-NEXT:         Domain :=
26 ; CHECK-NEXT:             [block_y, block_x] -> { Stmt_entry_split[] };
27 ; CHECK-NEXT:         Schedule :=
28 ; CHECK-NEXT:             [block_y, block_x] -> { Stmt_entry_split[] -> [] };
29 ; CHECK-NEXT:         ReadAccess :=     [Reduction Type: NONE] [Scalar: 0]
30 ; CHECK-NEXT:             [block_y, block_x] -> { Stmt_entry_split[] -> MemRef4[o0] : (-3 <= block_y < 0 and block_x <= -4 and -8 + block_x - 4o0 <= 8*floor((-1 + block_x)/8) <= -5 + block_x - 4o0) or (-3 <= block_y < 0 and block_x >= 0 and -3 + block_x - 4o0 <= 8*floor((block_x)/8) <= block_x - 4o0) or (block_y <= -4 and block_x <= -4 and -16 + block_x - 4o0 - 8*floor((-1 + block_x)/8) + 8*floor((-1 + block_y)/4) <= 16*floor((-1 + block_y)/8) <= -13 + block_x - 4o0 - 8*floor((-1 + block_x)/8) + 8*floor((-1 + block_y)/4)) or (block_y <= -4 and block_x >= 0 and -11 + block_x - 4o0 - 8*floor((block_x)/8) + 8*floor((-1 + block_y)/4) <= 16*floor((-1 + block_y)/8) <= -8 + block_x - 4o0 - 8*floor((block_x)/8) + 8*floor((-1 + block_y)/4)) or (block_y >= 0 and block_x <= -4 and -8 + block_x - 4o0 - 8*floor((-1 + block_x)/8) + 8*floor((block_y)/4) <= 16*floor((block_y)/8) <= -5 + block_x - 4o0 - 8*floor((-1 + block_x)/8) + 8*floor((block_y)/4)) or (block_y >= 0 and block_x >= 0 and -3 + block_x - 4o0 - 8*floor((block_x)/8) + 8*floor((block_y)/4) <= 16*floor((block_y)/8) <= block_x - 4o0 - 8*floor((block_x)/8) + 8*floor((block_y)/4)) or (4*floor((block_y)/8) = -o0 + 2*floor((block_y)/4) and block_y >= 0 and -3 <= block_x < 0 and 4*floor((block_y)/4) >= -7 + block_y + 2o0 and 4*floor((block_y)/4) <= block_y + 2o0) or (4*floor((-1 + block_y)/8) = -2 - o0 + 2*floor((-1 + block_y)/4) and block_y <= -4 and -3 <= block_x < 0 and 4*floor((-1 + block_y)/4) >= -4 + block_y + 2o0 and 4*floor((-1 + block_y)/4) <= 3 + block_y + 2o0); Stmt_entry_split[] -> MemRef4[0] : -3 <= block_y < 0 and -3 <= block_x < 0 };
31 ; CHECK-NEXT:         MustWriteAccess :=        [Reduction Type: NONE] [Scalar: 1]
32 ; CHECK-NEXT:             [block_y, block_x] -> { Stmt_entry_split[] -> MemRef0[] };
33 ; CHECK-NEXT: }
35 @img = external global ptr, align 8
37 ; Function Attrs: nounwind uwtable
38 define void @dct_luma(i32 %block_x, i32 %block_y) #0 {
39 entry:
40   br label %entry.split
42 entry.split:                                      ; preds = %entry
43   %div = sdiv i32 %block_x, 4
44   %div1 = sdiv i32 %block_y, 4
45   %rem = srem i32 %div1, 2
46   %mul4 = shl nsw i32 %rem, 1
47   %rem5 = srem i32 %div, 2
48   %add6 = add nsw i32 %mul4, %rem5
49   %idxprom = sext i32 %add6 to i64
50   %0 = load ptr, ptr @img, align 8
51   %1 = load ptr, ptr %0, align 8
52   %2 = load ptr, ptr %1, align 8
53   %arrayidx8 = getelementptr inbounds ptr, ptr %2, i64 %idxprom
54   %3 = load ptr, ptr %arrayidx8, align 8
55   %mb_data = getelementptr inbounds %struct.IP, ptr %0, i64 0, i32 4
56   %4 = load %struct.m, ptr %mb_data, align 8
57   br i1 false, label %land.rhs, label %land.end
59 land.rhs:                                         ; preds = %entry.split
60   br label %land.end
62 land.end:                                         ; preds = %land.rhs, %entry.split
63   %5 = phi i1 [ false, %entry.split ], [ undef, %land.rhs ]
64   br i1 %5, label %for.cond104.preheader, label %for.cond34.preheader
66 for.cond34.preheader:                             ; preds = %land.end
67   ret void
69 for.cond104.preheader:                            ; preds = %land.end
70   ret void