The testcase is a unit test: test/Isl/CodeGen/pointer-type-pointer-type-comparison.ll produced Isl AST: ; CHECK: if (Q >= P + 1) { ; CHECK: for (int c0 = 0; c0 < N; c0 += 1) ; CHECK: Stmt_store(c0); ; CHECK: } else if (P >= Q + 1) ; CHECK: for (int c0 = 0; c0 < N; c0 += 1) ; CHECK: Stmt_store(c0); ; CHECK: } In some cases the duplication is severe and it end up impacting compile-time and code size (LLVM optimization will not CSE the code).
The input schedule tree is rather simple: domain: "[N, Q, P] -> { Stmt_store[i0] : 0 <= i0 < N and (P > Q or P < Q) }" child: schedule: "[N, Q, P] -> [{ Stmt_store[i0] -> [(i0)] }]"
Fixed in r272500.