Test source: git
Comments: LLVM PR51669
Source: <stdin> ---------------------------------------- define i8 @p0(i8 %val, i8 %start, i8 %extraoffset) { %entry: br label %loop %loop: %iv = phi i8 [ %start, %entry ], [ %iv.next, %loop ] %nbits = add nsw i8 %iv, %extraoffset %val.shifted = lshr i8 %val, %nbits %val.shifted.iszero = icmp eq i8 %val.shifted, 0 %iv.next = add i8 %iv, 1 call void @escape_inner(i8 %iv, i8 %nbits, i8 %val.shifted, i1 %val.shifted.iszero, i8 %iv.next) br i1 %val.shifted.iszero, label %end, label %loop %end: %iv.res = phi i8 [ %iv, %loop ] %nbits.res = phi i8 [ %nbits, %loop ] %val.shifted.res = phi i8 [ %val.shifted, %loop ] %val.shifted.iszero.res = phi i1 [ %val.shifted.iszero, %loop ] %iv.next.res = phi i8 [ %iv.next, %loop ] call void @escape_outer(i8 %iv.res, i8 %nbits.res, i8 %val.shifted.res, i1 %val.shifted.iszero.res, i8 %iv.next.res) ret i8 %iv.res } => define i8 @p0(i8 %val, i8 %start, i8 %extraoffset) { %entry: %val.numleadingzeros = ctlz i8 %val, 0 %val.numactivebits = sub nsw nuw i8 8, %val.numleadingzeros %0 = sub i8 0, %extraoffset %val.numactivebits.offset = add nsw i8 %val.numactivebits, %0 %iv.final = smax i8 %val.numactivebits.offset, %start %loop.backedgetakencount = sub nsw i8 %iv.final, %start %loop.tripcount = add nsw nuw i8 %loop.backedgetakencount, 1 br label %loop %loop: %loop.iv = phi i8 [ 0, %entry ], [ %loop.iv.next, %loop ] %loop.iv.next = add nsw nuw i8 %loop.iv, 1 %loop.ivcheck = icmp eq i8 %loop.iv.next, %loop.tripcount %iv = add nsw i8 %loop.iv, %start %nbits = add nsw i8 %iv, %extraoffset %val.shifted = lshr i8 %val, %nbits %iv.next = add i8 %iv, 1 call void @escape_inner(i8 %iv, i8 %nbits, i8 %val.shifted, i1 %loop.ivcheck, i8 %iv.next) br i1 %loop.ivcheck, label %end, label %loop %end: %iv.res = phi i8 [ %iv.final, %loop ] %nbits.res = phi i8 [ %nbits, %loop ] %val.shifted.res = phi i8 [ %val.shifted, %loop ] %val.shifted.iszero.res = phi i1 [ %loop.ivcheck, %loop ] %iv.next.res = phi i8 [ %iv.next, %loop ] call void @escape_outer(i8 %iv.res, i8 %nbits.res, i8 %val.shifted.res, i1 %val.shifted.iszero.res, i8 %iv.next.res) ret i8 %iv.res } Transformation doesn't verify! ERROR: Source is more defined than target Example: i8 %val = #xe0 (224, -32) i8 %start = #x7a (122) i8 %extraoffset = #x86 (134, -122) Source: >> Jump to %loop i8 %iv = #x7a (122) i8 %nbits = #x00 (0) i8 %val.shifted = #xe0 (224, -32) i1 %val.shifted.iszero = #x0 (0) i8 %iv.next = #x7b (123) void = UB triggered! SOURCE MEMORY STATE =================== NON-LOCAL BLOCKS: Block 0 > size: 0 align: 1 alloc type: 0 Block 1 > size: 0 align: 1 Target: i8 %val.numleadingzeros = #x00 (0) i8 %val.numactivebits = #x08 (8) i8 %0 = #x7a (122) i8 %val.numactivebits.offset = poison i8 %iv.final = poison i8 %loop.backedgetakencount = poison i8 %loop.tripcount = poison >> Jump to %loop i8 %loop.iv = #x00 (0) i8 %loop.iv.next = #x01 (1) i1 %loop.ivcheck = poison i8 %iv = #x7a (122) i8 %nbits = #x00 (0) i8 %val.shifted = #xe0 (224, -32) i8 %iv.next = #x7b (123) void = UB triggered! ------------------- SMT STATS ------------------- Num queries: 4 Num invalid: 0 Num skips: 0 Num trivial: 17 (81.0%) 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 2' + /home/nlopes/alive2/build/opt-alive.sh -loop-idiom -mtriple=x86_64 -mcpu=core-avx2 -S + /home/nlopes/llvm/build/bin/FileCheck /home/nlopes/llvm/llvm/test/Transforms/LoopIdiom/X86/logical-right-shift-until-zero.ll FileCheck error: '<stdin>' is empty. FileCheck command line: /home/nlopes/llvm/build/bin/FileCheck /home/nlopes/llvm/llvm/test/Transforms/LoopIdiom/X86/logical-right-shift-until-zero.ll