Test source: git
Source: <stdin> ---------------------------------------- define void @test_chr_1(* %i) { %entry: %0 = load i32, * %i, align 4 %1 = and i32 %0, 1 %2 = icmp eq i32 %1, 0 br i1 %2, label %bb1, label %bb0 %bb0: call void @foo() br label %bb1 %bb1: %3 = and i32 %0, 2 %4 = icmp eq i32 %3, 0 br i1 %4, label %bb3, label %bb2 %bb2: call void @foo() br label %bb3 %bb3: ret void } => define void @test_chr_1(* %i) { %entry: %0 = load i32, * %i, align 4 %1 = and i32 %0, 3 %2 = icmp eq i32 %1, 3 br i1 %2, label %bb0, label %entry.split.nonchr %entry.split.nonchr: %3 = and i32 %0, 1 %4 = icmp eq i32 %3, 0 br i1 %4, label %bb1.nonchr, label %bb0.nonchr %bb0.nonchr: call void @foo() br label %bb1.nonchr %bb1.nonchr: %5 = and i32 %0, 2 %6 = icmp eq i32 %5, 0 br i1 %6, label %bb3, label %bb2.nonchr %bb2.nonchr: call void @foo() br label %bb3 %bb0: call void @foo() call void @foo() br label %bb3 %bb3: ret void } Transformation doesn't verify! ERROR: Timeout ---------------------------------------- define void @test_chr_1_1(* %i) { %entry: %0 = load i32, * %i, align 4 %1 = and i32 %0, 1 %2 = icmp eq i32 %1, 0 br i1 %2, label %bb1, label %bb0 %bb0: call void @foo() br label %bb1 %bb1: %3 = and i32 %0, 2 %4 = icmp eq i32 %3, 0 br i1 %4, label %bb2, label %bb3 %bb2: call void @bar() br label %bb3 %bb3: %5 = and i32 %0, 4 %6 = icmp eq i32 %5, 0 br i1 %6, label %bb5, label %bb4 %bb4: call void @foo() br label %bb5 %bb5: ret void } => define void @test_chr_1_1(* %i) { %entry: %0 = load i32, * %i, align 4 %1 = and i32 %0, 7 %2 = icmp eq i32 %1, 7 br i1 %2, label %bb0, label %entry.split.nonchr %entry.split.nonchr: %3 = and i32 %0, 1 %4 = icmp eq i32 %3, 0 br i1 %4, label %bb1.nonchr, label %bb0.nonchr %bb0.nonchr: call void @foo() br label %bb1.nonchr %bb1.nonchr: %5 = and i32 %0, 2 %6 = icmp eq i32 %5, 0 br i1 %6, label %bb2.nonchr, label %bb3.nonchr %bb2.nonchr: call void @bar() br label %bb3.nonchr %bb3.nonchr: %7 = and i32 %0, 4 %8 = icmp eq i32 %7, 0 br i1 %8, label %bb5, label %bb4.nonchr %bb4.nonchr: call void @foo() br label %bb5 %bb0: call void @foo() call void @foo() br label %bb5 %bb5: ret void } Transformation doesn't verify! ERROR: Timeout ---------------------------------------- define void @test_chr_2(* %i) { %entry: %0 = load i32, * %i, align 4 %1 = and i32 %0, 255 %2 = icmp eq i32 %1, 0 br i1 %2, label %bb4, label %bb0 %bb0: %3 = and i32 %0, 1 %4 = icmp eq i32 %3, 0 br i1 %4, label %bb2, label %bb1 %bb1: call void @foo() br label %bb2 %bb2: %5 = and i32 %0, 2 %6 = icmp eq i32 %5, 0 br i1 %6, label %bb4, label %bb3 %bb3: call void @foo() br label %bb4 %bb4: ret void } => define void @test_chr_2(* %i) { %entry: %0 = load i32, * %i, align 4 %1 = and i32 %0, 3 %2 = icmp eq i32 %1, 3 br i1 %2, label %bb1, label %entry.split.nonchr %entry.split.nonchr: %3 = and i32 %0, 255 %4 = icmp eq i32 %3, 0 br i1 %4, label %bb4, label %bb0.nonchr %bb0.nonchr: %5 = and i32 %0, 1 %6 = icmp eq i32 %5, 0 br i1 %6, label %bb2.nonchr, label %bb1.nonchr %bb1.nonchr: call void @foo() br label %bb2.nonchr %bb2.nonchr: %7 = and i32 %0, 2 %8 = icmp eq i32 %7, 0 br i1 %8, label %bb4, label %bb3.nonchr %bb3.nonchr: call void @foo() br label %bb4 %bb1: call void @foo() call void @foo() br label %bb4 %bb4: ret void } Transformation doesn't verify! ERROR: Timeout ---------------------------------------- define void @test_chr_3(* %i) { %entry: %0 = load i32, * %i, align 4 %1 = and i32 %0, 1 %2 = icmp eq i32 %1, 0 br i1 %2, label %bb1, label %bb0 %bb0: call void @foo() br label %bb1 %bb1: %3 = and i32 %0, 2 %4 = icmp eq i32 %3, 0 br i1 %4, label %bb3, label %bb2 %bb2: call void @foo() br label %bb3 %bb3: %5 = load i32, * %i, align 4 %6 = and i32 %5, 4 %7 = icmp eq i32 %6, 0 br i1 %7, label %bb5, label %bb4 %bb4: call void @foo() br label %bb5 %bb5: %8 = and i32 %5, 8 %9 = icmp eq i32 %8, 0 br i1 %9, label %bb7, label %bb6 %bb6: call void @foo() br label %bb7 %bb7: ret void } => define void @test_chr_3(* %i) { %entry: %0 = load i32, * %i, align 4 %1 = and i32 %0, 3 %2 = icmp eq i32 %1, 3 br i1 %2, label %bb0, label %entry.split.nonchr %entry.split.nonchr: %3 = and i32 %0, 1 %4 = icmp eq i32 %3, 0 br i1 %4, label %bb1.nonchr, label %bb0.nonchr %bb0.nonchr: call void @foo() br label %bb1.nonchr %bb1.nonchr: %5 = and i32 %0, 2 %6 = icmp eq i32 %5, 0 br i1 %6, label %bb3, label %bb2.nonchr %bb2.nonchr: call void @foo() br label %bb3 %bb0: call void @foo() call void @foo() br label %bb3 %bb3: %7 = load i32, * %i, align 4 %8 = and i32 %7, 12 %9 = icmp eq i32 %8, 12 br i1 %9, label %bb4, label %bb3.split.nonchr %bb4: call void @foo() call void @foo() br label %bb7 %bb3.split.nonchr: %10 = and i32 %7, 4 %11 = icmp eq i32 %10, 0 br i1 %11, label %bb5.nonchr, label %bb4.nonchr %bb4.nonchr: call void @foo() br label %bb5.nonchr %bb5.nonchr: %12 = and i32 %7, 8 %13 = icmp eq i32 %12, 0 br i1 %13, label %bb7, label %bb6.nonchr %bb6.nonchr: call void @foo() br label %bb7 %bb7: ret void } Transformation doesn't verify! ERROR: Timeout ---------------------------------------- define i32 @test_chr_4(* %i, i32 %sum0) { %entry: %0 = load i32, * %i, align 4 %1 = and i32 %0, 1 %2 = icmp eq i32 %1, 0 %3 = add i32 %sum0, 42 %sum1 = select i1 %2, i32 %sum0, i32 %3 %4 = and i32 %0, 2 %5 = icmp eq i32 %4, 0 %6 = add i32 %sum1, 43 %sum2 = select i1 %5, i32 %sum1, i32 %6 ret i32 %sum2 } => define i32 @test_chr_4(* %i, i32 %sum0) { %entry: %0 = load i32, * %i, align 4 %1 = and i32 %0, 3 %2 = icmp eq i32 %1, 3 br i1 %2, label %entry.split, label %entry.split.nonchr %entry.split.nonchr: %3 = add i32 %sum0, 42 %4 = and i32 %0, 1 %5 = icmp eq i32 %4, 0 %sum1.nonchr = select i1 %5, i32 %sum0, i32 %3 %6 = and i32 %0, 2 %7 = icmp eq i32 %6, 0 %8 = add i32 %sum1.nonchr, 43 %sum2.nonchr = select i1 %7, i32 %sum1.nonchr, i32 %8 ret i32 %sum2.nonchr %entry.split: %9 = add i32 %sum0, 85 ret i32 %9 } Transformation doesn't verify! ERROR: Source is more defined than target Example: * %i = pointer(non-local, block_id=1, offset=0) i32 %sum0 = poison Source: i32 %0 = poison i32 %1 = poison i1 %2 = poison i32 %3 = poison i32 %sum1 = poison i32 %4 = poison i1 %5 = poison i32 %6 = poison i32 %sum2 = poison SOURCE MEMORY STATE =================== NON-LOCAL BLOCKS: Block 0 > size: 0 align: 64 alloc type: 0 Block 1 > size: 4 align: 0 alloc type: 0 Target: i32 %0 = poison i32 %1 = poison i1 %2 = poison i32 %3 = poison i32 %4 = poison i1 %5 = poison i32 %sum1.nonchr = poison i32 %6 = poison i1 %7 = poison i32 %8 = poison i32 %sum2.nonchr = poison i32 %9 = poison ------------------- SMT STATS ------------------- Num queries: 10 Num invalid: 0 Num skips: 0 Num trivial: 0 (0.0%) Num timeout: 6 (60.0%) Num errors: 0 (0.0%) Num SAT: 4 (40.0%) Num UNSAT: 0 (0.0%)
+ : 'RUN: at line 2' + /home/nlopes/alive2/scripts/opt-alive.sh -chr -instcombine -simplifycfg -S + /home/nlopes/llvm/build/bin/FileCheck /home/nlopes/llvm/llvm/test/Transforms/PGOProfile/chr.ll Alive2: Transform doesn't verify; aborting! FileCheck error: '<stdin>' is empty. FileCheck command line: /home/nlopes/llvm/build/bin/FileCheck /home/nlopes/llvm/llvm/test/Transforms/PGOProfile/chr.ll