Description
define i40 @src(i40 %arg0) {
%1 = trunc i40 %arg0 to i8
%2 = icmp eq i8 %1, 2
%3 = and i40 %arg0, -256
%4 = select i1 %2, i8 0, i8 %1
%5 = select i1 %2, i40 0, i40 %3
%6 = zext i8 %4 to i40
%7 = or disjoint i40 %5, %6
ret i40 %7
}
define i40 @tgt(i40 %arg0) {
%1 = trunc i40 %arg0 to i8
%2 = icmp eq i8 %1, 2
%3 = select i1 %2, i40 0, i40 %arg0
ret i40 %3
}
alive2: https://alive2.llvm.org/ce/z/URiF_Y
godbolt: https://godbolt.org/z/Kj3qEv453
Occurrences in llvm-opt-benchmarks:
typst-rs/optimized/2i78fvbm4wocuesi.ll
%1 = trunc i40 %arg0 to i8 -> %.sroa.05.0.extract.trunc = trunc i40 %3 to i8
%2 = icmp eq i8 %1, 2 -> %4 = icmp eq i8 %.sroa.05.0.extract.trunc, 2
%3 = and i40 %arg0, -256 -> %.sroa.46.0.extract.shift = and i40 %3, -256
%4 = select i1 %2, i8 0, i8 %1 -> %.sroa.0.0 = select i1 %4, i8 0, i8 %.sroa.05.0.extract.trunc
%5 = select i1 %2, i40 0, i40 %3 -> %.sroa.3.0.insert.ext = select i1 %4, i40 0, i40 %.sroa.46.0.extract.shift
%6 = zext i8 %4 to i40 -> %.sroa.0.0.insert.ext = zext i8 %.sroa.0.0 to i40
%7 = or disjoint i40 %5, %6 -> %.sroa.0.0.insert.insert = or disjoint i40 %.sroa.3.0.insert.ext, %.sroa.0.0.insert.ext
typst-rs/optimized/m09o5qr68f5khss.ll
%1 = trunc i40 %arg0 to i8 -> %.sroa.05.0.extract.trunc.i.i = trunc i40 %35 to i8
%2 = icmp eq i8 %1, 2 -> %36 = icmp eq i8 %.sroa.05.0.extract.trunc.i.i, 2
%3 = and i40 %arg0, -256 -> %.sroa.46.0.extract.shift.i.i = and i40 %35, -256
%4 = select i1 %2, i8 0, i8 %1 -> %.sroa.0.0.i.i = select i1 %36, i8 0, i8 %.sroa.05.0.extract.trunc.i.i
%5 = select i1 %2, i40 0, i40 %3 -> %.sroa.3.0.insert.ext.i.i = select i1 %36, i40 0, i40 %.sroa.46.0.extract.shift.i.i
%6 = zext i8 %4 to i40 -> %.sroa.0.0.insert.ext.i.i = zext i8 %.sroa.0.0.i.i to i40
%7 = or disjoint i40 %5, %6 -> %.sroa.0.0.insert.insert.i.i = or disjoint i40 %.sroa.3.0.insert.ext.i.i, %.sroa.0.0.insert.ext.i.i
2 Occurrences