Test Failure: Transforms/InstCombine/select-binop-cmp.ll

Test source: git

Comments: Alive2 missing support for speculatable attribute

Log:

Source: <stdin>

----------------------------------------
define i32 @select_xor_icmp(i32 %x, i32 %y, i32 %z) {
%0:
  %A = icmp eq i32 %x, 0
  %B = xor i32 %x, %z
  %C = select i1 %A, i32 %B, i32 %y
  ret i32 %C
}
=>
define i32 @select_xor_icmp(i32 %x, i32 %y, i32 %z) {
%0:
  %A = icmp eq i32 %x, 0
  %C = select i1 %A, i32 %z, i32 %y
  ret i32 %C
}
Transformation seems to be correct!


----------------------------------------
define i32 @select_xor_icmp2(i32 %x, i32 %y, i32 %z) {
%0:
  %A = icmp ne i32 %x, 0
  %B = xor i32 %x, %z
  %C = select i1 %A, i32 %y, i32 %B
  ret i32 %C
}
=>
define i32 @select_xor_icmp2(i32 %x, i32 %y, i32 %z) {
%0:
  %A.not = icmp eq i32 %x, 0
  %C = select i1 %A.not, i32 %z, i32 %y
  ret i32 %C
}
Transformation seems to be correct!


----------------------------------------
define i32 @select_xor_icmp_meta(i32 %x, i32 %y, i32 %z) {
%0:
  %A = icmp eq i32 %x, 0
  %B = xor i32 %x, %z
  %C = select i1 %A, i32 %B, i32 %y
  ret i32 %C
}
=>
define i32 @select_xor_icmp_meta(i32 %x, i32 %y, i32 %z) {
%0:
  %A = icmp eq i32 %x, 0
  %C = select i1 %A, i32 %z, i32 %y
  ret i32 %C
}
Transformation seems to be correct!


----------------------------------------
define i32 @select_mul_icmp(i32 %x, i32 %y, i32 %z) {
%0:
  %A = icmp eq i32 %x, 1
  %B = mul i32 %x, %z
  %C = select i1 %A, i32 %B, i32 %y
  ret i32 %C
}
=>
define i32 @select_mul_icmp(i32 %x, i32 %y, i32 %z) {
%0:
  %A = icmp eq i32 %x, 1
  %C = select i1 %A, i32 %z, i32 %y
  ret i32 %C
}
Transformation seems to be correct!


----------------------------------------
define i32 @select_add_icmp(i32 %x, i32 %y, i32 %z) {
%0:
  %A = icmp eq i32 %x, 0
  %B = add i32 %x, %z
  %C = select i1 %A, i32 %B, i32 %y
  ret i32 %C
}
=>
define i32 @select_add_icmp(i32 %x, i32 %y, i32 %z) {
%0:
  %A = icmp eq i32 %x, 0
  %C = select i1 %A, i32 %z, i32 %y
  ret i32 %C
}
Transformation seems to be correct!


----------------------------------------
define i32 @select_or_icmp(i32 %x, i32 %y, i32 %z) {
%0:
  %A = icmp eq i32 %x, 0
  %B = or i32 %x, %z
  %C = select i1 %A, i32 %B, i32 %y
  ret i32 %C
}
=>
define i32 @select_or_icmp(i32 %x, i32 %y, i32 %z) {
%0:
  %A = icmp eq i32 %x, 0
  %C = select i1 %A, i32 %z, i32 %y
  ret i32 %C
}
Transformation seems to be correct!


----------------------------------------
define i32 @select_and_icmp(i32 %x, i32 %y, i32 %z) {
%0:
  %A = icmp eq i32 %x, 4294967295
  %B = and i32 %x, %z
  %C = select i1 %A, i32 %B, i32 %y
  ret i32 %C
}
=>
define i32 @select_and_icmp(i32 %x, i32 %y, i32 %z) {
%0:
  %A = icmp eq i32 %x, 4294967295
  %C = select i1 %A, i32 %z, i32 %y
  ret i32 %C
}
Transformation seems to be correct!


----------------------------------------
define <2 x i8> @select_xor_icmp_vec(<2 x i8> %x, <2 x i8> %y, <2 x i8> %z) {
%0:
  %A = icmp eq <2 x i8> %x, { 0, 0 }
  %B = xor <2 x i8> %x, %z
  %C = select <2 x i1> %A, <2 x i8> %B, <2 x i8> %y
  ret <2 x i8> %C
}
=>
define <2 x i8> @select_xor_icmp_vec(<2 x i8> %x, <2 x i8> %y, <2 x i8> %z) {
%0:
  %A = icmp eq <2 x i8> %x, { 0, 0 }
  %C = select <2 x i1> %A, <2 x i8> %z, <2 x i8> %y
  ret <2 x i8> %C
}
Transformation doesn't verify!
ERROR: Timeout


----------------------------------------
define <2 x i8> @select_xor_icmp_vec_use(<2 x i8> %x, <2 x i8> %y, <2 x i8> %z) {
%0:
  %A = icmp ne <2 x i8> %x, { 0, 0 }
  call void @use(<2 x i1> %A)
  %B = xor <2 x i8> %x, %z
  %C = select <2 x i1> %A, <2 x i8> %y, <2 x i8> %B
  ret <2 x i8> %C
}
=>
define <2 x i8> @select_xor_icmp_vec_use(<2 x i8> %x, <2 x i8> %y, <2 x i8> %z) {
%0:
  %A = icmp ne <2 x i8> %x, { 0, 0 }
  call void @use(<2 x i1> %A)
  %C = select <2 x i1> %A, <2 x i8> %y, <2 x i8> %z
  ret <2 x i8> %C
}
Transformation doesn't verify!
ERROR: Timeout


----------------------------------------
define i32 @select_xor_inv_icmp(i32 %x, i32 %y, i32 %z) {
%0:
  %A = icmp eq i32 %x, 0
  %B = xor i32 %z, %x
  %C = select i1 %A, i32 %B, i32 %y
  ret i32 %C
}
=>
define i32 @select_xor_inv_icmp(i32 %x, i32 %y, i32 %z) {
%0:
  %A = icmp eq i32 %x, 0
  %C = select i1 %A, i32 %z, i32 %y
  ret i32 %C
}
Transformation seems to be correct!


----------------------------------------
define i32 @select_xor_inv_icmp2(i32 %x, i32 %y, i32 %z) {
%0:
  %A = icmp ne i32 %x, 0
  call void @use2(i1 %A)
  %B = xor i32 %x, %z
  %C = select i1 %A, i32 %y, i32 %B
  ret i32 %C
}
=>
define i32 @select_xor_inv_icmp2(i32 %x, i32 %y, i32 %z) {
%0:
  %A = icmp ne i32 %x, 0
  call void @use2(i1 %A)
  %C = select i1 %A, i32 %y, i32 %z
  ret i32 %C
}
Transformation seems to be correct!


----------------------------------------
define float @select_fadd_fcmp(float %x, float %y, float %z) {
%0:
  %A = fcmp oeq float %x, -0.000000
  %B = fadd nsz float %x, %z
  %C = select i1 %A, float %B, float %y
  ret float %C
}
=>
define float @select_fadd_fcmp(float %x, float %y, float %z) {
%0:
  %A = fcmp oeq float %x, 0.000000
  %C = select i1 %A, float %z, float %y
  ret float %C
}
Transformation doesn't verify!
ERROR: Timeout


----------------------------------------
define float @select_fadd_fcmp_poszero(float %x, float %y, float %z) {
%0:
  %A = fcmp oeq float %x, 0.000000
  %B = fadd nsz float %z, %x
  %C = select i1 %A, float %B, float %y
  ret float %C
}
=>
define float @select_fadd_fcmp_poszero(float %x, float %y, float %z) {
%0:
  %A = fcmp oeq float %x, 0.000000
  %C = select i1 %A, float %z, float %y
  ret float %C
}
Transformation doesn't verify!
ERROR: Timeout


----------------------------------------
define float @select_fadd_fcmp_2(float %x, float %y, float %v) {
%0:
  %A = fcmp une float %x, -0.000000
  %z = fadd float %v, 0.000000
  %B = fadd float %z, %x
  %C = select i1 %A, float %y, float %B
  ret float %C
}
=>
define float @select_fadd_fcmp_2(float %x, float %y, float %v) {
%0:
  %A = fcmp une float %x, 0.000000
  %z = fadd float %v, 0.000000
  %C = select i1 %A, float %y, float %z
  ret float %C
}
Transformation doesn't verify!
ERROR: Timeout


----------------------------------------
define float @select_fadd_fcmp_2_poszero(float %x, float %y, float %v) {
%0:
  %A = fcmp une float %x, 0.000000
  %z = fadd float %v, 0.000000
  %B = fadd float %z, %x
  %C = select i1 %A, float %y, float %B
  ret float %C
}
=>
define float @select_fadd_fcmp_2_poszero(float %x, float %y, float %v) {
%0:
  %A = fcmp une float %x, 0.000000
  %z = fadd float %v, 0.000000
  %C = select i1 %A, float %y, float %z
  ret float %C
}
Transformation doesn't verify!
ERROR: Timeout


----------------------------------------
define float @select_fadd_fcmp_3(float %x, float %y) {
%0:
  %A = fcmp une float %x, -0.000000
  %B = fadd float 6.000000, %x
  %C = select i1 %A, float %y, float %B
  ret float %C
}
=>
define float @select_fadd_fcmp_3(float %x, float %y) {
%0:
  %A = fcmp une float %x, 0.000000
  %C = select i1 %A, float %y, float 6.000000
  ret float %C
}
Transformation seems to be correct!


----------------------------------------
define float @select_fadd_fcmp_3_poszero(float %x, float %y) {
%0:
  %A = fcmp une float %x, 0.000000
  %B = fadd float 6.000000, %x
  %C = select i1 %A, float %y, float %B
  ret float %C
}
=>
define float @select_fadd_fcmp_3_poszero(float %x, float %y) {
%0:
  %A = fcmp une float %x, 0.000000
  %C = select i1 %A, float %y, float 6.000000
  ret float %C
}
Transformation seems to be correct!


----------------------------------------
define float @select_fadd_fcmp_4(float %x, float %y, float %z) {
%0:
  %A = fcmp une float %x, -0.000000
  %B = fadd nsz float %z, %x
  %C = select i1 %A, float %y, float %B
  ret float %C
}
=>
define float @select_fadd_fcmp_4(float %x, float %y, float %z) {
%0:
  %A = fcmp une float %x, 0.000000
  %C = select i1 %A, float %y, float %z
  ret float %C
}
Transformation doesn't verify!
ERROR: Timeout


----------------------------------------
define float @select_fadd_fcmp_4_poszero(float %x, float %y, float %z) {
%0:
  %A = fcmp une float %x, 0.000000
  %B = fadd nsz float %z, %x
  %C = select i1 %A, float %y, float %B
  ret float %C
}
=>
define float @select_fadd_fcmp_4_poszero(float %x, float %y, float %z) {
%0:
  %A = fcmp une float %x, 0.000000
  %C = select i1 %A, float %y, float %z
  ret float %C
}
Transformation doesn't verify!
ERROR: Timeout


----------------------------------------
define float @select_fadd_fcmp_5(float %x, float %y, float %v) {
%0:
  %A = fcmp oeq float %x, -0.000000
  %z = fadd float %v, 0.000000
  %B = fadd float %z, %x
  %C = select i1 %A, float %B, float %y
  ret float %C
}
=>
define float @select_fadd_fcmp_5(float %x, float %y, float %v) {
%0:
  %A = fcmp oeq float %x, 0.000000
  %z = fadd float %v, 0.000000
  %C = select i1 %A, float %z, float %y
  ret float %C
}
Transformation seems to be correct!


----------------------------------------
define float @select_fadd_fcmp_5_poszero(float %x, float %y, float %v) {
%0:
  %A = fcmp oeq float %x, 0.000000
  %z = fadd float %v, 0.000000
  %B = fadd float %z, %x
  %C = select i1 %A, float %B, float %y
  ret float %C
}
=>
define float @select_fadd_fcmp_5_poszero(float %x, float %y, float %v) {
%0:
  %A = fcmp oeq float %x, 0.000000
  %z = fadd float %v, 0.000000
  %C = select i1 %A, float %z, float %y
  ret float %C
}
Transformation seems to be correct!


----------------------------------------
define float @select_fadd_fcmp_6(float %x, float %y, float %z) {
%0:
  %A = fcmp oeq float %x, -0.000000
  %B = fadd float %x, 6.000000
  %C = select i1 %A, float %B, float %y
  ret float %C
}
=>
define float @select_fadd_fcmp_6(float %x, float %y, float %z) {
%0:
  %A = fcmp oeq float %x, 0.000000
  %C = select i1 %A, float 6.000000, float %y
  ret float %C
}
Transformation seems to be correct!


----------------------------------------
define float @select_fadd_fcmp_6_poszero(float %x, float %y, float %z) {
%0:
  %A = fcmp oeq float %x, 0.000000
  %B = fadd float %x, 6.000000
  %C = select i1 %A, float %B, float %y
  ret float %C
}
=>
define float @select_fadd_fcmp_6_poszero(float %x, float %y, float %z) {
%0:
  %A = fcmp oeq float %x, 0.000000
  %C = select i1 %A, float 6.000000, float %y
  ret float %C
}
Transformation seems to be correct!


----------------------------------------
define float @select_fmul_fcmp(float %x, float %y, float %z) {
%0:
  %A = fcmp oeq float %x, 1.000000
  %B = fmul nsz float %x, %z
  %C = select i1 %A, float %B, float %y
  ret float %C
}
=>
define float @select_fmul_fcmp(float %x, float %y, float %z) {
%0:
  %A = fcmp oeq float %x, 1.000000
  %C = select i1 %A, float %z, float %y
  ret float %C
}
Transformation doesn't verify!
ERROR: Timeout


----------------------------------------
define float @select_fsub_fcmp(float %x, float %y, float %z) {
%0:
  %A = fcmp oeq float %x, 0.000000
  %B = fsub nsz float %z, %x
  %C = select i1 %A, float %B, float %y
  ret float %C
}
=>
define float @select_fsub_fcmp(float %x, float %y, float %z) {
%0:
  %A = fcmp oeq float %x, 0.000000
  %C = select i1 %A, float %z, float %y
  ret float %C
}
Transformation doesn't verify!
ERROR: Timeout


----------------------------------------
define float @select_fsub_fcmp_negzero(float %x, float %y, float %z) {
%0:
  %A = fcmp oeq float %x, -0.000000
  %B = fsub nsz float %z, %x
  %C = select i1 %A, float %B, float %y
  ret float %C
}
=>
define float @select_fsub_fcmp_negzero(float %x, float %y, float %z) {
%0:
  %A = fcmp oeq float %x, 0.000000
  %C = select i1 %A, float %z, float %y
  ret float %C
}
Transformation doesn't verify!
ERROR: Timeout


----------------------------------------
define float @select_fdiv_fcmp(float %x, float %y, float %z) {
%0:
  %A = fcmp oeq float %x, 1.000000
  %B = fdiv nsz float %z, %x
  %C = select i1 %A, float %B, float %y
  ret float %C
}
=>
define float @select_fdiv_fcmp(float %x, float %y, float %z) {
%0:
  %A = fcmp oeq float %x, 1.000000
  %C = select i1 %A, float %z, float %y
  ret float %C
}
Transformation doesn't verify!
ERROR: Timeout


----------------------------------------
define i32 @select_sub_icmp(i32 %x, i32 %y, i32 %z) {
%0:
  %A = icmp eq i32 %x, 0
  %B = sub i32 %z, %x
  %C = select i1 %A, i32 %B, i32 %y
  ret i32 %C
}
=>
define i32 @select_sub_icmp(i32 %x, i32 %y, i32 %z) {
%0:
  %A = icmp eq i32 %x, 0
  %C = select i1 %A, i32 %z, i32 %y
  ret i32 %C
}
Transformation doesn't verify!
ERROR: Timeout


----------------------------------------
define i32 @select_sub_icmp_2(i32 %x, i32 %y, i32 %z) {
%0:
  %A = icmp eq i32 %x, 0
  call void @use2(i1 %A)
  %B = sub i32 %z, %x
  %C = select i1 %A, i32 %B, i32 %y
  ret i32 %C
}
=>
define i32 @select_sub_icmp_2(i32 %x, i32 %y, i32 %z) {
%0:
  %A = icmp eq i32 %x, 0
  call void @use2(i1 %A)
  %C = select i1 %A, i32 %z, i32 %y
  ret i32 %C
}
Transformation doesn't verify!
ERROR: Timeout


----------------------------------------
define i32 @select_sub_icmp_3(i32 %x, i32 %y, i32 %z) {
%0:
  %A = icmp ne i32 %x, 0
  call void @use2(i1 %A)
  %B = sub i32 %z, %x
  %C = select i1 %A, i32 %y, i32 %B
  ret i32 %C
}
=>
define i32 @select_sub_icmp_3(i32 %x, i32 %y, i32 %z) {
%0:
  %A = icmp ne i32 %x, 0
  call void @use2(i1 %A)
  %C = select i1 %A, i32 %y, i32 %z
  ret i32 %C
}
Transformation doesn't verify!
ERROR: Timeout


----------------------------------------
define <2 x i8> @select_sub_icmp_vec(<2 x i8> %x, <2 x i8> %y, <2 x i8> %z) {
%0:
  %A = icmp eq <2 x i8> %x, { 0, 0 }
  %B = sub <2 x i8> %z, %x
  %C = select <2 x i1> %A, <2 x i8> %B, <2 x i8> %y
  ret <2 x i8> %C
}
=>
define <2 x i8> @select_sub_icmp_vec(<2 x i8> %x, <2 x i8> %y, <2 x i8> %z) {
%0:
  %A = icmp eq <2 x i8> %x, { 0, 0 }
  %C = select <2 x i1> %A, <2 x i8> %z, <2 x i8> %y
  ret <2 x i8> %C
}
Transformation doesn't verify!
ERROR: Timeout


----------------------------------------
define i32 @select_shl_icmp(i32 %x, i32 %y, i32 %z) {
%0:
  %A = icmp ne i32 %x, 0
  call void @use2(i1 %A)
  %B = shl i32 %z, %x
  %C = select i1 %A, i32 %y, i32 %B
  ret i32 %C
}
=>
define i32 @select_shl_icmp(i32 %x, i32 %y, i32 %z) {
%0:
  %A = icmp ne i32 %x, 0
  call void @use2(i1 %A)
  %C = select i1 %A, i32 %y, i32 %z
  ret i32 %C
}
Transformation seems to be correct!


----------------------------------------
define i32 @select_lshr_icmp(i32 %x, i32 %y, i32 %z) {
%0:
  %A = icmp eq i32 %x, 0
  %B = lshr i32 %z, %x
  %C = select i1 %A, i32 %B, i32 %y
  ret i32 %C
}
=>
define i32 @select_lshr_icmp(i32 %x, i32 %y, i32 %z) {
%0:
  %A = icmp eq i32 %x, 0
  %C = select i1 %A, i32 %z, i32 %y
  ret i32 %C
}
Transformation seems to be correct!


----------------------------------------
define i32 @select_ashr_icmp(i32 %x, i32 %y, i32 %z) {
%0:
  %A = icmp ne i32 %x, 0
  call void @use2(i1 %A)
  %B = ashr i32 %z, %x
  %C = select i1 %A, i32 %y, i32 %B
  ret i32 %C
}
=>
define i32 @select_ashr_icmp(i32 %x, i32 %y, i32 %z) {
%0:
  %A = icmp ne i32 %x, 0
  call void @use2(i1 %A)
  %C = select i1 %A, i32 %y, i32 %z
  ret i32 %C
}
Transformation seems to be correct!


----------------------------------------
define i32 @select_udiv_icmp(i32 %x, i32 %y, i32 %z) {
%0:
  %A = icmp eq i32 %x, 1
  %B = udiv i32 %z, %x
  %C = select i1 %A, i32 %B, i32 %y
  ret i32 %C
}
=>
define i32 @select_udiv_icmp(i32 %x, i32 %y, i32 %z) {
%0:
  %A = icmp eq i32 %x, 1
  %C = select i1 %A, i32 %z, i32 %y
  ret i32 %C
}
Transformation seems to be correct!


----------------------------------------
define i32 @select_sdiv_icmp(i32 %x, i32 %y, i32 %z) {
%0:
  %A = icmp ne i32 %x, 1
  call void @use2(i1 %A)
  %B = sdiv i32 %z, %x
  %C = select i1 %A, i32 %y, i32 %B
  ret i32 %C
}
=>
define i32 @select_sdiv_icmp(i32 %x, i32 %y, i32 %z) {
%0:
  %A = icmp ne i32 %x, 1
  call void @use2(i1 %A)
  %C = select i1 %A, i32 %y, i32 %z
  ret i32 %C
}
Transformation doesn't verify!
ERROR: Timeout


----------------------------------------
define i32 @select_xor_icmp_bad_1(i32 %x, i32 %y, i32 %z, i32 %k) {
%0:
  %A = icmp eq i32 %x, %k
  %B = xor i32 %x, %z
  %C = select i1 %A, i32 %B, i32 %y
  ret i32 %C
}
=>
define i32 @select_xor_icmp_bad_1(i32 %x, i32 %y, i32 %z, i32 %k) {
%0:
  %A = icmp eq i32 %x, %k
  %B = xor i32 %x, %z
  %C = select i1 %A, i32 %B, i32 %y
  ret i32 %C
}
Transformation seems to be correct!


----------------------------------------
define i32 @select_xor_icmp_bad_2(i32 %x, i32 %y, i32 %z, i32 %k) {
%0:
  %A = icmp eq i32 %x, 0
  %B = xor i32 %k, %z
  %C = select i1 %A, i32 %B, i32 %y
  ret i32 %C
}
=>
define i32 @select_xor_icmp_bad_2(i32 %x, i32 %y, i32 %z, i32 %k) {
%0:
  %A = icmp eq i32 %x, 0
  %B = xor i32 %k, %z
  %C = select i1 %A, i32 %B, i32 %y
  ret i32 %C
}
Transformation seems to be correct!


----------------------------------------
define i32 @select_xor_icmp_bad_3(i32 %x, i32 %y, i32 %z) {
%0:
  %A = icmp eq i32 %x, 3
  %B = xor i32 %x, %z
  %C = select i1 %A, i32 %B, i32 %y
  ret i32 %C
}
=>
define i32 @select_xor_icmp_bad_3(i32 %x, i32 %y, i32 %z) {
%0:
  %A = icmp eq i32 %x, 3
  %B = xor i32 %x, %z
  %C = select i1 %A, i32 %B, i32 %y
  ret i32 %C
}
Transformation seems to be correct!


----------------------------------------
define i32 @select_xor_fcmp_bad_4(i32 %x, i32 %y, i32 %z, float %k) {
%0:
  %A = fcmp oeq float %k, 0.000000
  %B = xor i32 %x, %z
  %C = select i1 %A, i32 %B, i32 %y
  ret i32 %C
}
=>
define i32 @select_xor_fcmp_bad_4(i32 %x, i32 %y, i32 %z, float %k) {
%0:
  %A = fcmp oeq float %k, 0.000000
  %B = xor i32 %x, %z
  %C = select i1 %A, i32 %B, i32 %y
  ret i32 %C
}
Transformation seems to be correct!


----------------------------------------
define i32 @select_xor_icmp_bad_5(i32 %x, i32 %y, i32 %z) {
%0:
  %A = icmp ne i32 %x, 0
  %B = xor i32 %x, %z
  %C = select i1 %A, i32 %B, i32 %y
  ret i32 %C
}
=>
define i32 @select_xor_icmp_bad_5(i32 %x, i32 %y, i32 %z) {
%0:
  %A.not = icmp eq i32 %x, 0
  %B = xor i32 %x, %z
  %C = select i1 %A.not, i32 %y, i32 %B
  ret i32 %C
}
Transformation seems to be correct!


----------------------------------------
define i32 @select_xor_icmp_bad_6(i32 %x, i32 %y, i32 %z) {
%0:
  %A = icmp ne i32 %x, 1
  %B = xor i32 %x, %z
  %C = select i1 %A, i32 %y, i32 %B
  ret i32 %C
}
=>
define i32 @select_xor_icmp_bad_6(i32 %x, i32 %y, i32 %z) {
%0:
  %A.not = icmp eq i32 %x, 1
  %B = xor i32 %x, %z
  %C = select i1 %A.not, i32 %B, i32 %y
  ret i32 %C
}
Transformation seems to be correct!


----------------------------------------
define <2 x i8> @select_xor_icmp_vec_bad(<2 x i8> %x, <2 x i8> %y, <2 x i8> %z) {
%0:
  %A = icmp eq <2 x i8> %x, { 5, 3 }
  %B = xor <2 x i8> %x, %z
  %C = select <2 x i1> %A, <2 x i8> %B, <2 x i8> %y
  ret <2 x i8> %C
}
=>
define <2 x i8> @select_xor_icmp_vec_bad(<2 x i8> %x, <2 x i8> %y, <2 x i8> %z) {
%0:
  %A = icmp eq <2 x i8> %x, { 5, 3 }
  %B = xor <2 x i8> %x, %z
  %C = select <2 x i1> %A, <2 x i8> %B, <2 x i8> %y
  ret <2 x i8> %C
}
Transformation doesn't verify!
ERROR: Timeout


----------------------------------------
define <2 x i8> @select_xor_icmp_vec_undef(<2 x i8> %x, <2 x i8> %y, <2 x i8> %z) {
%0:
  %A = icmp eq <2 x i8> %x, { 0, undef }
  %B = xor <2 x i8> %x, %z
  %C = select <2 x i1> %A, <2 x i8> %B, <2 x i8> %y
  ret <2 x i8> %C
}
=>
define <2 x i8> @select_xor_icmp_vec_undef(<2 x i8> %x, <2 x i8> %y, <2 x i8> %z) {
%0:
  %A = icmp eq <2 x i8> %x, { 0, undef }
  %C = select <2 x i1> %A, <2 x i8> %z, <2 x i8> %y
  ret <2 x i8> %C
}
Transformation doesn't verify!
ERROR: Target's return value is more undefined

Example:
<2 x i8> %x = < poison, #x01 (1) >
<2 x i8> %y = < poison, #x00 (0) >
<2 x i8> %z = < poison, #x01 (1) >

Source:
<2 x i1> %A = < poison, any >
<2 x i8> %B = < poison, #x00 (0) >
<2 x i8> %C = < poison, #x00 (0) >

Target:
<2 x i1> %A = < poison, #x1 (1) >
<2 x i8> %C = < poison, #x01 (1) >
Source value: < poison, #x00 (0) >
Target value: < poison, #x01 (1) >


------------------- SMT STATS -------------------
Num queries: 183
Num invalid: 0
Num skips:   0
Num trivial: 103 (36.0%)
Num timeout: 18 (9.8%)
Num errors:  0 (0.0%)
Num SAT:     45 (24.6%)
Num UNSAT:   120 (65.6%)

stderr:

+ : 'RUN: at line 2'
+ /home/nlopes/alive2/scripts/opt-alive.sh -instcombine -S
+ /home/nlopes/llvm/build/bin/FileCheck /home/nlopes/llvm/llvm/test/Transforms/InstCombine/select-binop-cmp.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/InstCombine/select-binop-cmp.ll

 

<-- Back