1; RUN: opt %loadNPMPolly '-passes=print<polly-function-scops>' -disable-output < %s 2>&1 | FileCheck %s 2; 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_BC 48; 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_BC 55; 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_BC 62; 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_BC 69; 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_BC 76; 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_BC 83; 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_SLT 90; 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_SLT 97; 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_SLT 104; 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_SLE 111; 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_SLE 118; 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_SLE 125; 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_SGT 132; 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_SGT 139; 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_SGT 146; 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_SGE 153; 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_SGE 160; 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_SGE 167; 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_EQ 174; 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_EQ 181; 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_EQ 188; 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_NEQ 195; 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_NEQ 202; 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_NEQ 209; 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 %BC 222 223BC: ; preds = %entry 224 store i32 0, ptr %A, align 4 225 %tobool = icmp eq i32 %bool_cond, 0 226 br i1 %tobool, label %M_BC, label %S_BC 227 228S_BC: ; preds = %if.then 229 store i32 0, ptr %A, align 4 230 br label %M_BC 231 232M_BC: ; preds = %BC, %S_BC 233 store i32 0, ptr %A, align 4 234 br label %NEG_BC 235 236NEG_BC: ; preds = %if.end 237 store i32 0, ptr %A, align 4 238 %tobool1 = icmp eq i32 %bool_cond, 0 239 br i1 %tobool1, label %S_NEG_BC, label %M_NEG_BC 240 241S_NEG_BC: ; preds = %if.then.2 242 store i32 0, ptr %A, align 4 243 br label %M_NEG_BC 244 245M_NEG_BC: ; preds = %NEG_BC, %S_NEG_BC 246 store i32 0, ptr %A, align 4 247 br label %SLT 248 249SLT: ; preds = %if.end.3 250 store i32 0, ptr %A, align 4 251 %cmp = icmp slt i32 %lhs, %rhs 252 br i1 %cmp, label %S_SLT, label %M_SLT 253 254S_SLT: ; preds = %if.then.4 255 store i32 0, ptr %A, align 4 256 br label %M_SLT 257 258M_SLT: ; preds = %S_SLT, %SLT 259 store i32 0, ptr %A, align 4 260 br label %SLE 261 262SLE: ; preds = %if.end.5 263 store i32 0, ptr %A, align 4 264 %cmp6 = icmp sgt i32 %lhs, %rhs 265 br i1 %cmp6, label %M_SLE, label %S_SLE 266 267S_SLE: ; preds = %if.then.7 268 store i32 0, ptr %A, align 4 269 br label %M_SLE 270 271M_SLE: ; preds = %SLE, %S_SLE 272 store i32 0, ptr %A, align 4 273 br label %SGT 274 275SGT: ; preds = %if.end.8 276 store i32 0, ptr %A, align 4 277 %cmp9 = icmp sgt i32 %lhs, %rhs 278 br i1 %cmp9, label %S_SGT, label %M_SGT 279 280S_SGT: ; preds = %if.then.10 281 store i32 0, ptr %A, align 4 282 br label %M_SGT 283 284M_SGT: ; preds = %S_SGT, %SGT 285 store i32 0, ptr %A, align 4 286 br label %SGE 287 288SGE: ; preds = %if.end.11 289 store i32 0, ptr %A, align 4 290 %cmp12 = icmp slt i32 %lhs, %rhs 291 br i1 %cmp12, label %M_SGE, label %S_SGE 292 293S_SGE: ; preds = %if.then.13 294 store i32 0, ptr %A, align 4 295 br label %M_SGE 296 297M_SGE: ; preds = %SGE, %S_SGE 298 store i32 0, ptr %A, align 4 299 br label %EQ 300 301EQ: ; preds = %if.end.14 302 store i32 0, ptr %A, align 4 303 %cmp15 = icmp eq i32 %lhs, %rhs 304 br i1 %cmp15, label %S_EQ, label %M_EQ 305 306S_EQ: ; preds = %if.then.16 307 store i32 0, ptr %A, align 4 308 br label %M_EQ 309 310M_EQ: ; preds = %S_EQ, %EQ 311 store i32 0, ptr %A, align 4 312 br label %NEQ 313 314NEQ: ; preds = %if.end.17 315 store i32 0, ptr %A, align 4 316 %cmp18 = icmp eq i32 %lhs, %rhs 317 br i1 %cmp18, label %M_NEQ, label %S_NEQ 318 319S_NEQ: ; preds = %if.then.19 320 store i32 0, ptr %A, align 4 321 br label %M_NEQ 322 323M_NEQ: ; preds = %NEQ, %S_NEQ 324 store i32 0, ptr %A, align 4 325 br label %exit 326 327exit: 328 ret void 329} 330