330 lines · plain
1; RUN: opt %loadNPMPolly '-passes=polly-custom<scops>' -polly-print-scops -disable-output < %s 2>&1 | FileCheck %s2;3; void consequences(int *A, int bool_cond, int lhs, int rhs) {4;5; BC: *A = 0;6; if (bool_cond)7; S_BC: *A = 0;8; M_BC: *A = 0;9;10; NEG_BC: *A = 0;11; if (!bool_cond)12; S_NEG_BC: *A = 0;13; M_NEG_BC: *A = 0;14;15; SLT: *A = 0;16; if (lhs < rhs)17; S_SLT: *A = 0;18; M_SLT: *A = 0;19;20; SLE: *A = 0;21; if (lhs <= rhs)22; S_SLE: *A = 0;23; M_SLE: *A = 0;24;25; SGT: *A = 0;26; if (lhs > rhs)27; S_SGT: *A = 0;28; M_SGT: *A = 0;29;30; SGE: *A = 0;31; if (lhs >= rhs)32; S_SGE: *A = 0;33; M_SGE: *A = 0;34;35; EQ: *A = 0;36; if (lhs == rhs)37; S_EQ: *A = 0;38; M_EQ: *A = 0;39;40; NEQ: *A = 0;41; if (lhs != rhs)42; S_NEQ: *A = 0;43; M_NEQ: *A = 0;44;45; }46; CHECK: Statements {47; CHECK-NEXT: Stmt_BC48; CHECK-NEXT: Domain :=49; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_BC[] };50; CHECK-NEXT: Schedule :=51; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_BC[] -> [0] };52; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]53; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_BC[] -> MemRef_A[0] };54; CHECK-NEXT: Stmt_S_BC55; CHECK-NEXT: Domain :=56; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_S_BC[] : bool_cond < 0 or bool_cond > 0 };57; CHECK-NEXT: Schedule :=58; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_S_BC[] -> [1] : bool_cond < 0 or bool_cond > 0 };59; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]60; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_S_BC[] -> MemRef_A[0] };61; CHECK-NEXT: Stmt_M_BC62; CHECK-NEXT: Domain :=63; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_M_BC[] };64; CHECK-NEXT: Schedule :=65; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_M_BC[] -> [2] };66; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]67; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_M_BC[] -> MemRef_A[0] };68; CHECK-NEXT: Stmt_NEG_BC69; CHECK-NEXT: Domain :=70; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_NEG_BC[] };71; CHECK-NEXT: Schedule :=72; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_NEG_BC[] -> [3] };73; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]74; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_NEG_BC[] -> MemRef_A[0] };75; CHECK-NEXT: Stmt_S_NEG_BC76; CHECK-NEXT: Domain :=77; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_S_NEG_BC[] : bool_cond = 0 };78; CHECK-NEXT: Schedule :=79; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_S_NEG_BC[] -> [4] };80; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]81; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_S_NEG_BC[] -> MemRef_A[0] };82; CHECK-NEXT: Stmt_M_NEG_BC83; CHECK-NEXT: Domain :=84; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_M_NEG_BC[] };85; CHECK-NEXT: Schedule :=86; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_M_NEG_BC[] -> [5] };87; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]88; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_M_NEG_BC[] -> MemRef_A[0] };89; CHECK-NEXT: Stmt_SLT90; CHECK-NEXT: Domain :=91; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_SLT[] };92; CHECK-NEXT: Schedule :=93; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_SLT[] -> [6] };94; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]95; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_SLT[] -> MemRef_A[0] };96; CHECK-NEXT: Stmt_S_SLT97; CHECK-NEXT: Domain :=98; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_S_SLT[] : rhs > lhs };99; CHECK-NEXT: Schedule :=100; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_S_SLT[] -> [7] };101; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]102; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_S_SLT[] -> MemRef_A[0] };103; CHECK-NEXT: Stmt_M_SLT104; CHECK-NEXT: Domain :=105; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_M_SLT[] };106; CHECK-NEXT: Schedule :=107; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_M_SLT[] -> [8] };108; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]109; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_M_SLT[] -> MemRef_A[0] };110; CHECK-NEXT: Stmt_SLE111; CHECK-NEXT: Domain :=112; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_SLE[] };113; CHECK-NEXT: Schedule :=114; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_SLE[] -> [9] };115; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]116; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_SLE[] -> MemRef_A[0] };117; CHECK-NEXT: Stmt_S_SLE118; CHECK-NEXT: Domain :=119; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_S_SLE[] : rhs >= lhs };120; CHECK-NEXT: Schedule :=121; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_S_SLE[] -> [10] };122; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]123; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_S_SLE[] -> MemRef_A[0] };124; CHECK-NEXT: Stmt_M_SLE125; CHECK-NEXT: Domain :=126; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_M_SLE[] };127; CHECK-NEXT: Schedule :=128; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_M_SLE[] -> [11] };129; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]130; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_M_SLE[] -> MemRef_A[0] };131; CHECK-NEXT: Stmt_SGT132; CHECK-NEXT: Domain :=133; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_SGT[] };134; CHECK-NEXT: Schedule :=135; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_SGT[] -> [12] };136; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]137; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_SGT[] -> MemRef_A[0] };138; CHECK-NEXT: Stmt_S_SGT139; CHECK-NEXT: Domain :=140; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_S_SGT[] : rhs < lhs };141; CHECK-NEXT: Schedule :=142; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_S_SGT[] -> [13] };143; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]144; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_S_SGT[] -> MemRef_A[0] };145; CHECK-NEXT: Stmt_M_SGT146; CHECK-NEXT: Domain :=147; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_M_SGT[] };148; CHECK-NEXT: Schedule :=149; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_M_SGT[] -> [14] };150; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]151; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_M_SGT[] -> MemRef_A[0] };152; CHECK-NEXT: Stmt_SGE153; CHECK-NEXT: Domain :=154; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_SGE[] };155; CHECK-NEXT: Schedule :=156; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_SGE[] -> [15] };157; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]158; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_SGE[] -> MemRef_A[0] };159; CHECK-NEXT: Stmt_S_SGE160; CHECK-NEXT: Domain :=161; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_S_SGE[] : rhs <= lhs };162; CHECK-NEXT: Schedule :=163; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_S_SGE[] -> [16] };164; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]165; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_S_SGE[] -> MemRef_A[0] };166; CHECK-NEXT: Stmt_M_SGE167; CHECK-NEXT: Domain :=168; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_M_SGE[] };169; CHECK-NEXT: Schedule :=170; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_M_SGE[] -> [17] };171; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]172; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_M_SGE[] -> MemRef_A[0] };173; CHECK-NEXT: Stmt_EQ174; CHECK-NEXT: Domain :=175; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_EQ[] };176; CHECK-NEXT: Schedule :=177; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_EQ[] -> [18] };178; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]179; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_EQ[] -> MemRef_A[0] };180; CHECK-NEXT: Stmt_S_EQ181; CHECK-NEXT: Domain :=182; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_S_EQ[] : rhs = lhs };183; CHECK-NEXT: Schedule :=184; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_S_EQ[] -> [19] };185; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]186; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_S_EQ[] -> MemRef_A[0] };187; CHECK-NEXT: Stmt_M_EQ188; CHECK-NEXT: Domain :=189; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_M_EQ[] };190; CHECK-NEXT: Schedule :=191; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_M_EQ[] -> [20] };192; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]193; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_M_EQ[] -> MemRef_A[0] };194; CHECK-NEXT: Stmt_NEQ195; CHECK-NEXT: Domain :=196; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_NEQ[] };197; CHECK-NEXT: Schedule :=198; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_NEQ[] -> [21] };199; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]200; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_NEQ[] -> MemRef_A[0] };201; CHECK-NEXT: Stmt_S_NEQ202; CHECK-NEXT: Domain :=203; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_S_NEQ[] : rhs > lhs or rhs < lhs };204; CHECK-NEXT: Schedule :=205; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_S_NEQ[] -> [22] : rhs > lhs or rhs < lhs };206; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]207; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_S_NEQ[] -> MemRef_A[0] };208; CHECK-NEXT: Stmt_M_NEQ209; CHECK-NEXT: Domain :=210; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_M_NEQ[] };211; CHECK-NEXT: Schedule :=212; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_M_NEQ[] -> [23] };213; CHECK-NEXT: MustWriteAccess := [Reduction Type: NONE] [Scalar: 0]214; CHECK-NEXT: [bool_cond, lhs, rhs] -> { Stmt_M_NEQ[] -> MemRef_A[0] };215; CHECK-NEXT: }216;217target datalayout = "e-m:e-i64:64-f80:128-n8:16:32:64-S128"218 219define void @consequences(ptr %A, i32 %bool_cond, i32 %lhs, i32 %rhs) {220entry:221 br label %BC222 223BC: ; preds = %entry224 store i32 0, ptr %A, align 4225 %tobool = icmp eq i32 %bool_cond, 0226 br i1 %tobool, label %M_BC, label %S_BC227 228S_BC: ; preds = %if.then229 store i32 0, ptr %A, align 4230 br label %M_BC231 232M_BC: ; preds = %BC, %S_BC233 store i32 0, ptr %A, align 4234 br label %NEG_BC235 236NEG_BC: ; preds = %if.end237 store i32 0, ptr %A, align 4238 %tobool1 = icmp eq i32 %bool_cond, 0239 br i1 %tobool1, label %S_NEG_BC, label %M_NEG_BC240 241S_NEG_BC: ; preds = %if.then.2242 store i32 0, ptr %A, align 4243 br label %M_NEG_BC244 245M_NEG_BC: ; preds = %NEG_BC, %S_NEG_BC246 store i32 0, ptr %A, align 4247 br label %SLT248 249SLT: ; preds = %if.end.3250 store i32 0, ptr %A, align 4251 %cmp = icmp slt i32 %lhs, %rhs252 br i1 %cmp, label %S_SLT, label %M_SLT253 254S_SLT: ; preds = %if.then.4255 store i32 0, ptr %A, align 4256 br label %M_SLT257 258M_SLT: ; preds = %S_SLT, %SLT259 store i32 0, ptr %A, align 4260 br label %SLE261 262SLE: ; preds = %if.end.5263 store i32 0, ptr %A, align 4264 %cmp6 = icmp sgt i32 %lhs, %rhs265 br i1 %cmp6, label %M_SLE, label %S_SLE266 267S_SLE: ; preds = %if.then.7268 store i32 0, ptr %A, align 4269 br label %M_SLE270 271M_SLE: ; preds = %SLE, %S_SLE272 store i32 0, ptr %A, align 4273 br label %SGT274 275SGT: ; preds = %if.end.8276 store i32 0, ptr %A, align 4277 %cmp9 = icmp sgt i32 %lhs, %rhs278 br i1 %cmp9, label %S_SGT, label %M_SGT279 280S_SGT: ; preds = %if.then.10281 store i32 0, ptr %A, align 4282 br label %M_SGT283 284M_SGT: ; preds = %S_SGT, %SGT285 store i32 0, ptr %A, align 4286 br label %SGE287 288SGE: ; preds = %if.end.11289 store i32 0, ptr %A, align 4290 %cmp12 = icmp slt i32 %lhs, %rhs291 br i1 %cmp12, label %M_SGE, label %S_SGE292 293S_SGE: ; preds = %if.then.13294 store i32 0, ptr %A, align 4295 br label %M_SGE296 297M_SGE: ; preds = %SGE, %S_SGE298 store i32 0, ptr %A, align 4299 br label %EQ300 301EQ: ; preds = %if.end.14302 store i32 0, ptr %A, align 4303 %cmp15 = icmp eq i32 %lhs, %rhs304 br i1 %cmp15, label %S_EQ, label %M_EQ305 306S_EQ: ; preds = %if.then.16307 store i32 0, ptr %A, align 4308 br label %M_EQ309 310M_EQ: ; preds = %S_EQ, %EQ311 store i32 0, ptr %A, align 4312 br label %NEQ313 314NEQ: ; preds = %if.end.17315 store i32 0, ptr %A, align 4316 %cmp18 = icmp eq i32 %lhs, %rhs317 br i1 %cmp18, label %M_NEQ, label %S_NEQ318 319S_NEQ: ; preds = %if.then.19320 store i32 0, ptr %A, align 4321 br label %M_NEQ322 323M_NEQ: ; preds = %NEQ, %S_NEQ324 store i32 0, ptr %A, align 4325 br label %exit326 327exit:328 ret void329}330