Reproducer: https://alive2.llvm.org/ce/z/7-TgAf ``` define i32 @src(i32 %x, i32 %y) { entry: %cttz = call noundef i32 @llvm.cttz.i32(i32 %y, i1 false) %res = lshr i32 %x, %cttz ret i32 %res } define i32 @tgt(i32 %x, i32 %y) { entry: %cttz = call noundef i32 @llvm.cttz.i32(i32 %y, i1 true) %res = lshr i32 %x, %cttz ret i32 %res } define i32 @src2(i32 %x) { %ct = call noundef i32 @llvm.ctlz.i32(i32 %x, i1 false) %cmp = icmp ne i32 %x, 0 %res = select i1 %cmp, i32 %ct, i32 123 ret i32 %res } define i32 @tgt2(i32 %x) { %ct = call noundef i32 @llvm.ctlz.i32(i32 %x, i1 true) %cmp = icmp ne i32 %x, 0 %res = select i1 %cmp, i32 %ct, i32 123 ret i32 %res } ``` `noundef` attribute should be dropped. Otherwise we will convert a poison value to immediate UB.