Test source: git
Source: <stdin> ---------------------------------------- define void @test(* %base, i32 %limit, i32 %start) { %for.body.lr.ph: br label %for.body %for.body: %i = phi i32 [ %start, %for.body.lr.ph ], [ %i.inc, %for.inc ] %within_limits = icmp ult i32 %i, 64 br i1 %within_limits, label %continue, label %for.end %continue: %i.i64 = zext i32 %i to i64 %arrayidx = gep inbounds * %base, 4 x i64 %i.i64 %val = load i32, * %arrayidx, align 4 br label %for.inc %for.inc: %i.inc = add nsw nuw i32 %i, 1 %cmp = icmp slt i32 %i.inc, %limit br i1 %cmp, label %for.body, label %for.end %for.end: br label %exit %exit: ret void } => define void @test(* %base, i32 %limit, i32 %start) { %for.body.lr.ph: %umax = umax i32 %start, 64 %0 = sub i32 %umax, %start %1 = add i32 %start, 1 %smax = smax i32 %limit, %1 %2 = add i32 %smax, 4294967295 %3 = sub i32 %2, %start %umin = umin i32 %3, %0 %4 = icmp ne i32 %0, %umin %5 = icmp ne i32 %3, %umin br label %for.body %for.body: br i1 %4, label %continue, label %for.end %continue: br label %for.inc %for.inc: br i1 %5, label %for.body, label %for.end %for.end: br label %exit %exit: ret void } Transformation doesn't verify! ERROR: Source is more defined than target Example: * %base = poison i32 %limit = poison i32 %start = #x3ffffff2 (1073741810) Source: i32 %i = #x3ffffff2 (1073741810) i1 %within_limits = #x0 (0) i64 %i.i64 = #x000000003ffffff2 (1073741810) * %arrayidx = poison i32 %val = poison i32 %i.inc = #x3ffffff3 (1073741811) i1 %cmp = poison SOURCE MEMORY STATE =================== NON-LOCAL BLOCKS: Block 0 > size: 0 align: 4 alloc type: 0 Block 1 > align: 512 alloc type: 0 Target: i32 %umax = #x3ffffff2 (1073741810) i32 %0 = #x00000000 (0) i32 %1 = #x3ffffff3 (1073741811) i32 %smax = poison i32 %2 = poison i32 %3 = poison i32 %umin = poison i1 %4 = poison i1 %5 = poison ------------------- SMT STATS ------------------- Num queries: 4 Num invalid: 0 Num skips: 0 Num trivial: 8 (66.7%) Num timeout: 0 (0.0%) Num errors: 0 (0.0%) Num SAT: 4 (100.0%) Num UNSAT: 0 (0.0%) Alive2: Transform doesn't verify; aborting!
+ : 'RUN: at line 1' + /home/nlopes/alive2/build/opt-alive.sh -indvars -indvars-post-increment-ranges -S + /home/nlopes/llvm/build/bin/FileCheck /home/nlopes/llvm/llvm/test/Transforms/IndVarSimplify/post-inc-range.ll FileCheck error: '<stdin>' is empty. FileCheck command line: /home/nlopes/llvm/build/bin/FileCheck /home/nlopes/llvm/llvm/test/Transforms/IndVarSimplify/post-inc-range.ll