Test source: git
Source: <stdin> ---------------------------------------- define void @test_br(i1 %cond, i1 %value) { %entry: br i1 %cond, label %L0, label %L3 %L3: call void @baz() br label %L0 %L0: %expr = select i1 %cond, i1 1, i1 %value br i1 %expr, label %L1, label %L2 %L1: call void @foo() ret void %L2: call void @bar() ret void } => define void @test_br(i1 %cond, i1 %value) { %entry: br i1 %cond, label %L1, label %L0 %L0: call void @baz() %expr = select i1 %cond, i1 1, i1 %value br i1 %expr, label %L1, label %L2 %L2: call void @bar() ret void %L1: call void @foo() ret void } Transformation seems to be correct! ---------------------------------------- define void @test_switch(i1 %cond, i8 %value) { %entry: br i1 %cond, label %L0, label %L4 %L4: call void @quux() br label %L0 %L0: %expr = select i1 %cond, i8 1, i8 %value switch i8 %expr, label %L3 [ i8 1, label %L1 i8 2, label %L2 ] %L1: call void @foo() ret void %L3: call void @baz() ret void %L2: call void @bar() ret void } => define void @test_switch(i1 %cond, i8 %value) { %entry: br i1 %cond, label %L1, label %L0 %L0: call void @quux() %expr = select i1 %cond, i8 1, i8 %value switch i8 %expr, label %L3 [ i8 1, label %L1 i8 2, label %L2 ] %L3: call void @baz() ret void %L2: call void @bar() ret void %L1: call void @foo() ret void } Transformation seems to be correct! ERROR: Unsupported instruction: %indirect.goto.dest = select i1 %cond, i8* blockaddress(@test_indirectbr, %L1), i8* %address ERROR: Unsupported instruction: %indirect.goto.dest = select i1 %cond, i8* blockaddress(@test_indirectbr_thresh, %L1), i8* %address ---------------------------------------- define void @test_switch_cmp(i1 %cond, i32 %val, i8 %value) { %entry: br i1 %cond, label %L0, label %L4 %L4: call void @quux() br label %L0 %L0: %val.phi = phi i32 [ %val, %entry ], [ 4294967295, %L4 ] %cmp = icmp slt i32 %val.phi, 0 %expr = select i1 %cmp, i8 1, i8 %value switch i8 %expr, label %L3 [ i8 1, label %L1 i8 2, label %L2 ] %L1: call void @foo() ret void %L3: call void @baz() ret void %L2: call void @bar() ret void } => define void @test_switch_cmp(i1 %cond, i32 %val, i8 %value) { %entry: br i1 %cond, label %L0, label %L0.thread %L0.thread: call void @quux() br label %L1 %L0: %val.phi = phi i32 [ %val, %entry ] %cmp = icmp slt i32 %val.phi, 0 br i1 %cmp, label %L1, label %0 %0: %1 = phi i8 [ %value, %L0 ] switch i8 %1, label %L3 [ i8 1, label %L1 i8 2, label %L2 ] %L1: call void @foo() ret void %L3: call void @baz() ret void %L2: call void @bar() ret void } Transformation doesn't verify! ERROR: Source is more defined than target Example: i1 %cond = #x1 (1) i32 %val = undef i8 %value = #x01 (1) Source: i32 %val.phi = undef i1 %cmp = undef i8 %expr = #x01 (1) SOURCE MEMORY STATE =================== NON-LOCAL BLOCKS: Block 0 > size: 0 align: 64 alloc type: 0 Block 1 > size: 0 align: 2 alloc type: 0 Target: i32 %val.phi = #x00000000 (0) i1 %cmp = #x0 (0) i8 %1 = #x01 (1) ------------------- SMT STATS ------------------- Num queries: 10 Num invalid: 0 Num skips: 0 Num trivial: 4 (28.6%) Num timeout: 0 (0.0%) Num errors: 0 (0.0%) Num SAT: 4 (40.0%) Num UNSAT: 6 (60.0%)
+ : 'RUN: at line 1' + /home/nlopes/alive2/scripts/opt-alive.sh -S -jump-threading + /home/nlopes/llvm/build/bin/FileCheck /home/nlopes/llvm/llvm/test/Transforms/JumpThreading/select.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/JumpThreading/select.ll