Test source: git
Source: <stdin> ---------------------------------------- define i8 @and0(i8 %x) { %0: %r = and i8 %x, 0 ret i8 %r } => define i8 @and0(i8 %x) { %0: ret i8 0 } Transformation seems to be correct! ---------------------------------------- define <2 x i8> @and0_vec_undef_elt(<2 x i8> %x) { %0: %r = and <2 x i8> %x, { undef, 0 } ret <2 x i8> %r } => define <2 x i8> @and0_vec_undef_elt(<2 x i8> %x) { %0: ret <2 x i8> { 0, 0 } } Transformation seems to be correct! ---------------------------------------- define <2 x i32> @add_nsw_signbit(<2 x i32> %x) { %0: %y = xor <2 x i32> %x, { 2147483648, 2147483648 } %z = add nsw <2 x i32> %y, { 2147483648, 2147483648 } ret <2 x i32> %z } => define <2 x i32> @add_nsw_signbit(<2 x i32> %x) { %0: ret <2 x i32> %x } Transformation doesn't verify! (not unsound) ERROR: Timeout ---------------------------------------- define <2 x i32> @add_nsw_signbit_undef(<2 x i32> %x) { %0: %y = xor <2 x i32> %x, { undef, 2147483648 } %z = add nsw <2 x i32> %y, { 2147483648, undef } ret <2 x i32> %z } => define <2 x i32> @add_nsw_signbit_undef(<2 x i32> %x) { %0: ret <2 x i32> %x } Transformation doesn't verify! (not unsound) ERROR: Timeout ---------------------------------------- define <2 x i5> @add_nuw_signbit(<2 x i5> %x) { %0: %y = xor <2 x i5> %x, { 16, 16 } %z = add nuw <2 x i5> %y, { 16, 16 } ret <2 x i5> %z } => define <2 x i5> @add_nuw_signbit(<2 x i5> %x) { %0: ret <2 x i5> %x } Transformation seems to be correct! ---------------------------------------- define <2 x i5> @add_nuw_signbit_undef(<2 x i5> %x) { %0: %y = xor <2 x i5> %x, { 16, undef } %z = add nuw <2 x i5> %y, { undef, 16 } ret <2 x i5> %z } => define <2 x i5> @add_nuw_signbit_undef(<2 x i5> %x) { %0: ret <2 x i5> %x } Transformation seems to be correct! ---------------------------------------- define i64 @pow2(i32 %x) { %0: %negx = sub i32 0, %x %x2 = and i32 %x, %negx %e = zext i32 %x2 to i64 %nege = sub i64 0, %e %e2 = and i64 %e, %nege ret i64 %e2 } => define i64 @pow2(i32 %x) { %0: %negx = sub i32 0, %x %x2 = and i32 %x, %negx %e = zext i32 %x2 to i64 ret i64 %e } Transformation doesn't verify! (not unsound) ERROR: Timeout ---------------------------------------- define i64 @pow2b(i32 %x) { %0: %sh = shl i32 2, %x %e = zext i32 %sh to i64 %nege = sub i64 0, %e %e2 = and i64 %e, %nege ret i64 %e2 } => define i64 @pow2b(i32 %x) { %0: %sh = shl i32 2, %x %e = zext i32 %sh to i64 ret i64 %e } Transformation seems to be correct! ---------------------------------------- define i32 @pow2b_max(i32 %x, i32 %y) { %0: %shx = shl i32 2, %x %shy = shl i32 32, %y %m = smax i32 %shx, %shy %neg = sub i32 0, %m %r = and i32 %m, %neg ret i32 %r } => define i32 @pow2b_max(i32 %x, i32 %y) { %0: %shx = shl i32 2, %x %shy = shl i32 32, %y %m = smax i32 %shx, %shy ret i32 %m } Transformation seems to be correct! ---------------------------------------- define i32 @pow2_decrement(i32 %p) { %0: %x = shl i32 1, %p %a = add i32 %x, 4294967295 %r = and i32 %a, %x ret i32 %r } => define i32 @pow2_decrement(i32 %p) { %0: ret i32 0 } Transformation seems to be correct! ---------------------------------------- define <2 x i32> @pow2_decrement_commute_vec(<2 x i32> %p) { %0: %x = and <2 x i32> %p, { 2048, 2048 } %a = add <2 x i32> %x, { 4294967295, 4294967295 } %r = and <2 x i32> %x, %a ret <2 x i32> %r } => define <2 x i32> @pow2_decrement_commute_vec(<2 x i32> %p) { %0: ret <2 x i32> { 0, 0 } } Transformation seems to be correct! ---------------------------------------- define <2 x i32> @pow2_decrement_min_vec(<2 x i32> %x, <2 x i32> %y) { %0: %p1 = and <2 x i32> %x, { 2048, 2048 } %p2 = shl <2 x i32> { 1, 1 }, %y %m = umin <2 x i32> %p1, %p2 %a = add <2 x i32> %m, { 4294967295, 4294967295 } %r = and <2 x i32> %m, %a ret <2 x i32> %r } => define <2 x i32> @pow2_decrement_min_vec(<2 x i32> %x, <2 x i32> %y) { %0: ret <2 x i32> { 0, 0 } } Transformation seems to be correct! ---------------------------------------- define i1 @and_of_icmps0(i32 %b) { %0: %1 = add i32 %b, 2 %2 = icmp ult i32 %1, 4 %cmp3 = icmp sgt i32 %b, 2 %cmp = and i1 %2, %cmp3 ret i1 %cmp } => define i1 @and_of_icmps0(i32 %b) { %0: ret i1 0 } Transformation seems to be correct! ---------------------------------------- define <2 x i1> @and_of_icmps0_vec(<2 x i32> %b) { %0: %1 = add <2 x i32> %b, { 2, 2 } %2 = icmp ult <2 x i32> %1, { 4, 4 } %cmp3 = icmp sgt <2 x i32> %b, { 2, 2 } %cmp = and <2 x i1> %2, %cmp3 ret <2 x i1> %cmp } => define <2 x i1> @and_of_icmps0_vec(<2 x i32> %b) { %0: ret <2 x i1> { 0, 0 } } Transformation seems to be correct! ---------------------------------------- define i1 @and_of_icmps1(i32 %b) { %0: %1 = add nsw i32 %b, 2 %2 = icmp slt i32 %1, 4 %cmp3 = icmp sgt i32 %b, 2 %cmp = and i1 %2, %cmp3 ret i1 %cmp } => define i1 @and_of_icmps1(i32 %b) { %0: ret i1 0 } Transformation seems to be correct! ---------------------------------------- define <2 x i1> @and_of_icmps1_vec(<2 x i32> %b) { %0: %1 = add nsw <2 x i32> %b, { 2, 2 } %2 = icmp slt <2 x i32> %1, { 4, 4 } %cmp3 = icmp sgt <2 x i32> %b, { 2, 2 } %cmp = and <2 x i1> %2, %cmp3 ret <2 x i1> %cmp } => define <2 x i1> @and_of_icmps1_vec(<2 x i32> %b) { %0: ret <2 x i1> { 0, 0 } } Transformation seems to be correct! ---------------------------------------- define i1 @and_of_icmps2(i32 %b) { %0: %1 = add i32 %b, 2 %2 = icmp ule i32 %1, 3 %cmp3 = icmp sgt i32 %b, 2 %cmp = and i1 %2, %cmp3 ret i1 %cmp } => define i1 @and_of_icmps2(i32 %b) { %0: ret i1 0 } Transformation seems to be correct! ---------------------------------------- define <2 x i1> @and_of_icmps2_vec(<2 x i32> %b) { %0: %1 = add <2 x i32> %b, { 2, 2 } %2 = icmp ule <2 x i32> %1, { 3, 3 } %cmp3 = icmp sgt <2 x i32> %b, { 2, 2 } %cmp = and <2 x i1> %2, %cmp3 ret <2 x i1> %cmp } => define <2 x i1> @and_of_icmps2_vec(<2 x i32> %b) { %0: ret <2 x i1> { 0, 0 } } Transformation seems to be correct! ---------------------------------------- define i1 @and_of_icmps3(i32 %b) { %0: %1 = add nsw i32 %b, 2 %2 = icmp sle i32 %1, 3 %cmp3 = icmp sgt i32 %b, 2 %cmp = and i1 %2, %cmp3 ret i1 %cmp } => define i1 @and_of_icmps3(i32 %b) { %0: ret i1 0 } Transformation seems to be correct! ---------------------------------------- define <2 x i1> @and_of_icmps3_vec(<2 x i32> %b) { %0: %1 = add nsw <2 x i32> %b, { 2, 2 } %2 = icmp sle <2 x i32> %1, { 3, 3 } %cmp3 = icmp sgt <2 x i32> %b, { 2, 2 } %cmp = and <2 x i1> %2, %cmp3 ret <2 x i1> %cmp } => define <2 x i1> @and_of_icmps3_vec(<2 x i32> %b) { %0: ret <2 x i1> { 0, 0 } } Transformation seems to be correct! ---------------------------------------- define i1 @and_of_icmps4(i32 %b) { %0: %1 = add nuw i32 %b, 2 %2 = icmp ult i32 %1, 4 %cmp3 = icmp ugt i32 %b, 2 %cmp = and i1 %2, %cmp3 ret i1 %cmp } => define i1 @and_of_icmps4(i32 %b) { %0: ret i1 0 } Transformation seems to be correct! ---------------------------------------- define <2 x i1> @and_of_icmps4_vec(<2 x i32> %b) { %0: %1 = add nuw <2 x i32> %b, { 2, 2 } %2 = icmp ult <2 x i32> %1, { 4, 4 } %cmp3 = icmp ugt <2 x i32> %b, { 2, 2 } %cmp = and <2 x i1> %2, %cmp3 ret <2 x i1> %cmp } => define <2 x i1> @and_of_icmps4_vec(<2 x i32> %b) { %0: ret <2 x i1> { 0, 0 } } Transformation seems to be correct! ---------------------------------------- define i1 @and_of_icmps5(i32 %b) { %0: %1 = add nuw i32 %b, 2 %2 = icmp ule i32 %1, 3 %cmp3 = icmp ugt i32 %b, 2 %cmp = and i1 %2, %cmp3 ret i1 %cmp } => define i1 @and_of_icmps5(i32 %b) { %0: ret i1 0 } Transformation seems to be correct! ---------------------------------------- define <2 x i1> @and_of_icmps5_vec(<2 x i32> %b) { %0: %1 = add nuw <2 x i32> %b, { 2, 2 } %2 = icmp ule <2 x i32> %1, { 3, 3 } %cmp3 = icmp ugt <2 x i32> %b, { 2, 2 } %cmp = and <2 x i1> %2, %cmp3 ret <2 x i1> %cmp } => define <2 x i1> @and_of_icmps5_vec(<2 x i32> %b) { %0: ret <2 x i1> { 0, 0 } } Transformation seems to be correct! ---------------------------------------- define i1 @or_of_icmps0(i32 %b) { %0: %1 = add i32 %b, 2 %2 = icmp uge i32 %1, 4 %cmp3 = icmp sle i32 %b, 2 %cmp = or i1 %2, %cmp3 ret i1 %cmp } => define i1 @or_of_icmps0(i32 %b) { %0: ret i1 1 } Transformation seems to be correct! ---------------------------------------- define <2 x i1> @or_of_icmps0_vec(<2 x i32> %b) { %0: %1 = add <2 x i32> %b, { 2, 2 } %2 = icmp uge <2 x i32> %1, { 4, 4 } %cmp3 = icmp sle <2 x i32> %b, { 2, 2 } %cmp = or <2 x i1> %2, %cmp3 ret <2 x i1> %cmp } => define <2 x i1> @or_of_icmps0_vec(<2 x i32> %b) { %0: ret <2 x i1> { 1, 1 } } Transformation seems to be correct! ---------------------------------------- define i1 @or_of_icmps1(i32 %b) { %0: %1 = add nsw i32 %b, 2 %2 = icmp sge i32 %1, 4 %cmp3 = icmp sle i32 %b, 2 %cmp = or i1 %2, %cmp3 ret i1 %cmp } => define i1 @or_of_icmps1(i32 %b) { %0: ret i1 1 } Transformation seems to be correct! ---------------------------------------- define <2 x i1> @or_of_icmps1_vec(<2 x i32> %b) { %0: %1 = add nsw <2 x i32> %b, { 2, 2 } %2 = icmp sge <2 x i32> %1, { 4, 4 } %cmp3 = icmp sle <2 x i32> %b, { 2, 2 } %cmp = or <2 x i1> %2, %cmp3 ret <2 x i1> %cmp } => define <2 x i1> @or_of_icmps1_vec(<2 x i32> %b) { %0: ret <2 x i1> { 1, 1 } } Transformation seems to be correct! ---------------------------------------- define i1 @or_of_icmps2(i32 %b) { %0: %1 = add i32 %b, 2 %2 = icmp ugt i32 %1, 3 %cmp3 = icmp sle i32 %b, 2 %cmp = or i1 %2, %cmp3 ret i1 %cmp } => define i1 @or_of_icmps2(i32 %b) { %0: ret i1 1 } Transformation seems to be correct! ---------------------------------------- define <2 x i1> @or_of_icmps2_vec(<2 x i32> %b) { %0: %1 = add <2 x i32> %b, { 2, 2 } %2 = icmp ugt <2 x i32> %1, { 3, 3 } %cmp3 = icmp sle <2 x i32> %b, { 2, 2 } %cmp = or <2 x i1> %2, %cmp3 ret <2 x i1> %cmp } => define <2 x i1> @or_of_icmps2_vec(<2 x i32> %b) { %0: ret <2 x i1> { 1, 1 } } Transformation seems to be correct! ---------------------------------------- define i1 @or_of_icmps3(i32 %b) { %0: %1 = add nsw i32 %b, 2 %2 = icmp sgt i32 %1, 3 %cmp3 = icmp sle i32 %b, 2 %cmp = or i1 %2, %cmp3 ret i1 %cmp } => define i1 @or_of_icmps3(i32 %b) { %0: ret i1 1 } Transformation seems to be correct! ---------------------------------------- define <2 x i1> @or_of_icmps3_vec(<2 x i32> %b) { %0: %1 = add nsw <2 x i32> %b, { 2, 2 } %2 = icmp sgt <2 x i32> %1, { 3, 3 } %cmp3 = icmp sle <2 x i32> %b, { 2, 2 } %cmp = or <2 x i1> %2, %cmp3 ret <2 x i1> %cmp } => define <2 x i1> @or_of_icmps3_vec(<2 x i32> %b) { %0: ret <2 x i1> { 1, 1 } } Transformation seems to be correct! ---------------------------------------- define i1 @or_of_icmps4(i32 %b) { %0: %1 = add nuw i32 %b, 2 %2 = icmp uge i32 %1, 4 %cmp3 = icmp ule i32 %b, 2 %cmp = or i1 %2, %cmp3 ret i1 %cmp } => define i1 @or_of_icmps4(i32 %b) { %0: ret i1 1 } Transformation seems to be correct! ---------------------------------------- define <2 x i1> @or_of_icmps4_vec(<2 x i32> %b) { %0: %1 = add nuw <2 x i32> %b, { 2, 2 } %2 = icmp uge <2 x i32> %1, { 4, 4 } %cmp3 = icmp ule <2 x i32> %b, { 2, 2 } %cmp = or <2 x i1> %2, %cmp3 ret <2 x i1> %cmp } => define <2 x i1> @or_of_icmps4_vec(<2 x i32> %b) { %0: ret <2 x i1> { 1, 1 } } Transformation seems to be correct! ---------------------------------------- define i1 @or_of_icmps5(i32 %b) { %0: %1 = add nuw i32 %b, 2 %2 = icmp ugt i32 %1, 3 %cmp3 = icmp ule i32 %b, 2 %cmp = or i1 %2, %cmp3 ret i1 %cmp } => define i1 @or_of_icmps5(i32 %b) { %0: ret i1 1 } Transformation seems to be correct! ---------------------------------------- define <2 x i1> @or_of_icmps5_vec(<2 x i32> %b) { %0: %1 = add nuw <2 x i32> %b, { 2, 2 } %2 = icmp ugt <2 x i32> %1, { 3, 3 } %cmp3 = icmp ule <2 x i32> %b, { 2, 2 } %cmp = or <2 x i1> %2, %cmp3 ret <2 x i1> %cmp } => define <2 x i1> @or_of_icmps5_vec(<2 x i32> %b) { %0: ret <2 x i1> { 1, 1 } } Transformation seems to be correct! ---------------------------------------- define i32 @neg_nuw(i32 %x) { %0: %neg = sub nuw i32 0, %x ret i32 %neg } => define i32 @neg_nuw(i32 %x) { %0: ret i32 0 } Transformation seems to be correct! ---------------------------------------- define i32 @and_of_zexted_icmps(i32 %i) { %0: %cmp0 = icmp eq i32 %i, 0 %conv0 = zext i1 %cmp0 to i32 %cmp1 = icmp ugt i32 %i, 4 %conv1 = zext i1 %cmp1 to i32 %and = and i32 %conv0, %conv1 ret i32 %and } => define i32 @and_of_zexted_icmps(i32 %i) { %0: ret i32 0 } Transformation seems to be correct! ---------------------------------------- define <4 x i32> @and_of_zexted_icmps_vec(<4 x i32> %i) { %0: %cmp0 = icmp eq <4 x i32> %i, { 0, 0, 0, 0 } %conv0 = zext <4 x i1> %cmp0 to <4 x i32> %cmp1 = icmp slt <4 x i32> %i, { 0, 0, 0, 0 } %conv1 = zext <4 x i1> %cmp1 to <4 x i32> %and = and <4 x i32> %conv0, %conv1 ret <4 x i32> %and } => define <4 x i32> @and_of_zexted_icmps_vec(<4 x i32> %i) { %0: ret <4 x i32> { 0, 0, 0, 0 } } Transformation seems to be correct! ---------------------------------------- define i5 @and_of_sexted_icmps(i3 %i) { %0: %cmp0 = icmp eq i3 %i, 0 %conv0 = sext i1 %cmp0 to i5 %cmp1 = icmp ugt i3 %i, 1 %conv1 = sext i1 %cmp1 to i5 %and = and i5 %conv0, %conv1 ret i5 %and } => define i5 @and_of_sexted_icmps(i3 %i) { %0: ret i5 0 } Transformation seems to be correct! ---------------------------------------- define i3 @and_of_bitcast_icmps_vec(<3 x i65> %i) { %0: %cmp0 = icmp sgt <3 x i65> %i, { 0, 0, 0 } %conv0 = bitcast <3 x i1> %cmp0 to i3 %cmp1 = icmp slt <3 x i65> %i, { 0, 0, 0 } %conv1 = bitcast <3 x i1> %cmp1 to i3 %and = and i3 %conv0, %conv1 ret i3 %and } => define i3 @and_of_bitcast_icmps_vec(<3 x i65> %i) { %0: ret i3 0 } Transformation seems to be correct! ---------------------------------------- define i16 @and_of_different_cast_icmps(i8 %i) { %0: %cmp0 = icmp eq i8 %i, 0 %conv0 = zext i1 %cmp0 to i16 %cmp1 = icmp eq i8 %i, 1 %conv1 = sext i1 %cmp1 to i16 %and = and i16 %conv0, %conv1 ret i16 %and } => define i16 @and_of_different_cast_icmps(i8 %i) { %0: %cmp0 = icmp eq i8 %i, 0 %conv0 = zext i1 %cmp0 to i16 %cmp1 = icmp eq i8 %i, 1 %conv1 = sext i1 %cmp1 to i16 %and = and i16 %conv0, %conv1 ret i16 %and } Transformation seems to be correct! (syntactically equal) ---------------------------------------- define <2 x i3> @and_of_different_cast_icmps_vec(<2 x i8> %i, <2 x i16> %j) { %0: %cmp0 = icmp eq <2 x i8> %i, { 0, 0 } %conv0 = zext <2 x i1> %cmp0 to <2 x i3> %cmp1 = icmp ugt <2 x i16> %j, { 1, 1 } %conv1 = zext <2 x i1> %cmp1 to <2 x i3> %and = and <2 x i3> %conv0, %conv1 ret <2 x i3> %and } => define <2 x i3> @and_of_different_cast_icmps_vec(<2 x i8> %i, <2 x i16> %j) { %0: %cmp0 = icmp eq <2 x i8> %i, { 0, 0 } %conv0 = zext <2 x i1> %cmp0 to <2 x i3> %cmp1 = icmp ugt <2 x i16> %j, { 1, 1 } %conv1 = zext <2 x i1> %cmp1 to <2 x i3> %and = and <2 x i3> %conv0, %conv1 ret <2 x i3> %and } Transformation seems to be correct! (syntactically equal) ---------------------------------------- define i32 @or_of_zexted_icmps(i32 %i) { %0: %cmp0 = icmp ne i32 %i, 0 %conv0 = zext i1 %cmp0 to i32 %cmp1 = icmp uge i32 4, %i %conv1 = zext i1 %cmp1 to i32 %or = or i32 %conv0, %conv1 ret i32 %or } => define i32 @or_of_zexted_icmps(i32 %i) { %0: ret i32 1 } Transformation seems to be correct! ---------------------------------------- define i3 @or_of_bitcast_icmps_vec(<3 x i65> %i) { %0: %cmp0 = icmp sge <3 x i65> %i, { 0, 0, 0 } %conv0 = bitcast <3 x i1> %cmp0 to i3 %cmp1 = icmp slt <3 x i65> %i, { 0, 0, 0 } %conv1 = bitcast <3 x i1> %cmp1 to i3 %or = or i3 %conv0, %conv1 ret i3 %or } => define i3 @or_of_bitcast_icmps_vec(<3 x i65> %i) { %0: %__constexpr_0 = bitcast <3 x i1> { 1, 1, 1 } to i3 ret i3 %__constexpr_0 } Transformation seems to be correct! ---------------------------------------- define i16 @or_of_different_cast_icmps(i8 %i) { %0: %cmp0 = icmp ne i8 %i, 0 %conv0 = zext i1 %cmp0 to i16 %cmp1 = icmp ne i8 %i, 1 %conv1 = sext i1 %cmp1 to i16 %or = or i16 %conv0, %conv1 ret i16 %or } => define i16 @or_of_different_cast_icmps(i8 %i) { %0: %cmp0 = icmp ne i8 %i, 0 %conv0 = zext i1 %cmp0 to i16 %cmp1 = icmp ne i8 %i, 1 %conv1 = sext i1 %cmp1 to i16 %or = or i16 %conv0, %conv1 ret i16 %or } Transformation seems to be correct! (syntactically equal) ---------------------------------------- define i3 @or_xor_andn_commute0(i3 %a, i3 %b) { %0: %neg = xor i3 %b, 7 %and = and i3 %a, %neg %xor = xor i3 %a, %b %or = or i3 %and, %xor ret i3 %or } => define i3 @or_xor_andn_commute0(i3 %a, i3 %b) { %0: %xor = xor i3 %a, %b ret i3 %xor } Transformation seems to be correct! ---------------------------------------- define i32 @or_xor_andn_commute1(i32 %a, i32 %b) { %0: %neg = xor i32 %b, 4294967295 %and = and i32 %neg, %a %xor = xor i32 %a, %b %or = or i32 %and, %xor ret i32 %or } => define i32 @or_xor_andn_commute1(i32 %a, i32 %b) { %0: %xor = xor i32 %a, %b ret i32 %xor } Transformation doesn't verify! (not unsound) ERROR: Timeout ---------------------------------------- define <2 x i32> @or_xor_andn_commute2(<2 x i32> %a, <2 x i32> %b) { %0: %xor = xor <2 x i32> %a, %b %neg = xor <2 x i32> %b, { 4294967295, undef } %and = and <2 x i32> %a, %neg %or = or <2 x i32> %xor, %and ret <2 x i32> %or } => define <2 x i32> @or_xor_andn_commute2(<2 x i32> %a, <2 x i32> %b) { %0: %xor = xor <2 x i32> %a, %b ret <2 x i32> %xor } Transformation doesn't verify! (not unsound) ERROR: Timeout ---------------------------------------- define i32 @or_xor_andn_commute3(i32 %a, i32 %b) { %0: %xor = xor i32 %a, %b %neg = xor i32 %b, 4294967295 %and = and i32 %neg, %a %or = or i32 %xor, %and ret i32 %or } => define i32 @or_xor_andn_commute3(i32 %a, i32 %b) { %0: %xor = xor i32 %a, %b ret i32 %xor } Transformation doesn't verify! (not unsound) ERROR: Timeout ---------------------------------------- define i32 @or_xor_andn_commute4(i32 %a, i32 %b) { %0: %neg = xor i32 %b, 4294967295 %and = and i32 %a, %neg %xor = xor i32 %b, %a %or = or i32 %and, %xor ret i32 %or } => define i32 @or_xor_andn_commute4(i32 %a, i32 %b) { %0: %xor = xor i32 %b, %a ret i32 %xor } Transformation doesn't verify! (not unsound) ERROR: Timeout ---------------------------------------- define i32 @or_xor_andn_commute5(i32 %a, i32 %b) { %0: %neg = xor i32 %b, 4294967295 %and = and i32 %neg, %a %xor = xor i32 %b, %a %or = or i32 %and, %xor ret i32 %or } => define i32 @or_xor_andn_commute5(i32 %a, i32 %b) { %0: %xor = xor i32 %b, %a ret i32 %xor } Transformation doesn't verify! (not unsound) ERROR: Timeout ---------------------------------------- define i32 @or_xor_andn_commute6(i32 %a, i32 %b) { %0: %xor = xor i32 %b, %a %neg = xor i32 %b, 4294967295 %and = and i32 %a, %neg %or = or i32 %xor, %and ret i32 %or } => define i32 @or_xor_andn_commute6(i32 %a, i32 %b) { %0: %xor = xor i32 %b, %a ret i32 %xor } Transformation doesn't verify! (not unsound) ERROR: Timeout ---------------------------------------- define i32 @or_xor_andn_commute7(i32 %a, i32 %b) { %0: %xor = xor i32 %b, %a %neg = xor i32 %b, 4294967295 %and = and i32 %neg, %a %or = or i32 %xor, %and ret i32 %or } => define i32 @or_xor_andn_commute7(i32 %a, i32 %b) { %0: %xor = xor i32 %b, %a ret i32 %xor } Transformation doesn't verify! (not unsound) ERROR: Timeout ---------------------------------------- define i32 @or_xorn_and_commute0(i32 %a, i32 %b) { %0: %nega = xor i32 %a, 4294967295 %and = and i32 %a, %b %xor = xor i32 %nega, %b %or = or i32 %xor, %and ret i32 %or } => define i32 @or_xorn_and_commute0(i32 %a, i32 %b) { %0: %nega = xor i32 %a, 4294967295 %xor = xor i32 %nega, %b ret i32 %xor } Transformation doesn't verify! (not unsound) ERROR: Timeout ---------------------------------------- define i3 @or_xorn_and_commute1(i3 %a, i3 %b) { %0: %nega = xor i3 %a, 7 %and = and i3 %a, %b %xor = xor i3 %b, %nega %or = or i3 %xor, %and ret i3 %or } => define i3 @or_xorn_and_commute1(i3 %a, i3 %b) { %0: %nega = xor i3 %a, 7 %xor = xor i3 %b, %nega ret i3 %xor } Transformation seems to be correct! ---------------------------------------- define <2 x i32> @or_xorn_and_commute2(<2 x i32> %a, <2 x i32> %b) { %0: %nega = xor <2 x i32> %a, { undef, 4294967295 } %and = and <2 x i32> %b, %a %xor = xor <2 x i32> %b, %nega %or = or <2 x i32> %xor, %and ret <2 x i32> %or } => define <2 x i32> @or_xorn_and_commute2(<2 x i32> %a, <2 x i32> %b) { %0: %nega = xor <2 x i32> %a, { undef, 4294967295 } %xor = xor <2 x i32> %b, %nega ret <2 x i32> %xor } Transformation doesn't verify! (unsound) ERROR: Target's return value is more undefined Example: <2 x i32> %a = < #xffffffff (4294967295, -1), undef > <2 x i32> %b = < #xffffffff (4294967295, -1), undef > Source: <2 x i32> %nega = < #xffffffff (4294967295, -1) [based on undef value], #xffffffff (4294967295, -1) [based on undef value] > <2 x i32> %and = < #xffffffff (4294967295, -1), #x00000000 (0) [based on undef value] > <2 x i32> %xor = < #x00000000 (0), #xffffffff (4294967295, -1) [based on undef value] > <2 x i32> %or = < #xffffffff (4294967295, -1), #xffffffff (4294967295, -1) > Target: <2 x i32> %nega = < #xadda079c (2916747164, -1378220132), #x39deec07 (970910727) > <2 x i32> %xor = < #x5225f863 (1378220131), #xffffeeb7 (4294962871, -4425) > Source value: < #xffffffff (4294967295, -1), #xffffffff (4294967295, -1) > Target value: < #x5225f863 (1378220131), #xffffeeb7 (4294962871, -4425) > Pass: ModuleToFunctionPassAdaptor Command line: '/home/nlopes/llvm/build/bin/opt' '-load=/home/nlopes/alive2/build/tv/tv.so' '-load-pass-plugin=/home/nlopes/alive2/build/tv/tv.so' '-tv-exit-on-error' '-passes=module(tv),function(instsimplify),module(tv)' '-S' '-tv-smt-to=20000' '-tv-report-dir=/home/nlopes/alive2/build/logs' '-tv-smt-stats' ------------------- SMT STATS ------------------- Num queries: 243 Num invalid: 0 Num skips: 0 Num trivial: 250 (50.7%) Num timeout: 11 (4.5%) Num errors: 0 (0.0%) Num SAT: 163 (67.1%) Num UNSAT: 69 (28.4%) Alive2: Transform doesn't verify; aborting!
+ : 'RUN: at line 2' + /home/nlopes/alive2/build/opt-alive.sh -passes=instsimplify -S + /bitbucket/nlopes/llvm/build/bin/FileCheck /bitbucket/nlopes/llvm/llvm/test/Transforms/InstSimplify/AndOrXor.ll FileCheck error: '<stdin>' is empty. FileCheck command line: /bitbucket/nlopes/llvm/build/bin/FileCheck /bitbucket/nlopes/llvm/llvm/test/Transforms/InstSimplify/AndOrXor.ll