Test Failure: Transforms/InstCombine/fold-select-fmul-if-zero.ll

Test source: git

Log:

Source: <stdin>
-- 1. ModuleToFunctionPassAdaptor
-- 1. PassManager<Function> : Skipping NOP
-- 2. InstCombinePass

----------------------------------------
define i32 @fcmp_zero_select_is_not_fp(float %x) {
#0:
  %x.is.zero = fcmp oeq float %x, 0.000000
  %scaled.x = fmul float %x, 32.000000
  %bitcast.scaled.x = bitcast float %scaled.x to i32
  %bitcast.x = bitcast float %x to i32
  %scaled.if.denormal = select i1 %x.is.zero, i32 %bitcast.scaled.x, i32 %bitcast.x
  ret i32 %scaled.if.denormal
}
Transformation seems to be correct! (syntactically equal)

-- 3. InstCombinePass

----------------------------------------
define i32 @fcmp_zero_select_is_not_fp(float %x) {
#0:
  %x.is.zero = fcmp oeq float %x, 0.000000
  %scaled.x = fmul float %x, 32.000000
  %bitcast.scaled.x = bitcast float %scaled.x to i32
  %bitcast.x = bitcast float %x to i32
  %scaled.if.denormal = select i1 %x.is.zero, i32 %bitcast.scaled.x, i32 %bitcast.x
  ret i32 %scaled.if.denormal
}
=>
define i32 @fcmp_zero_select_is_not_fp(float %x) {
#0:
  %scaled.if.denormal = bitcast float %x to i32
  ret i32 %scaled.if.denormal
}
Transformation seems to be correct!

-- 4. PassManager<Function> : Skipping NOP
-- 5. PassManager<Function> : Skipping NOP
-- 6. InstCombinePass

----------------------------------------
define i32 @fcmp_zero_select_is_not_fp_unfoldable(float %x, i32 %y, i32 %z) {
#0:
  %x.is.zero = fcmp oeq float %x, 0.000000
  %select = select i1 %x.is.zero, i32 %y, i32 %z
  ret i32 %select
}
Transformation seems to be correct! (syntactically equal)

-- 7. InstCombinePass

----------------------------------------
define i32 @fcmp_zero_select_is_not_fp_unfoldable(float %x, i32 %y, i32 %z) {
#0:
  %x.is.zero = fcmp oeq float %x, 0.000000
  %select = select i1 %x.is.zero, i32 %y, i32 %z
  ret i32 %select
}
Transformation seems to be correct! (syntactically equal)

-- 8. PassManager<Function> : Skipping NOP
-- 9. PassManager<Function> : Skipping NOP
-- 10. InstCombinePass

----------------------------------------
define float @fmul_by_32_if_0_oeq_zero_f32(float %x) {
#0:
  %x.is.zero = fcmp oeq float %x, 0.000000
  %scaled.x = fmul float %x, 32.000000
  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %x
  ret float %scaled.if.denormal
}
Transformation seems to be correct! (syntactically equal)

-- 11. InstCombinePass

----------------------------------------
define float @fmul_by_32_if_0_oeq_zero_f32(float %x) {
#0:
  %x.is.zero = fcmp oeq float %x, 0.000000
  %scaled.x = fmul float %x, 32.000000
  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %x
  ret float %scaled.if.denormal
}
=>
define float @fmul_by_32_if_0_oeq_zero_f32(float %x) {
#0:
  ret float %x
}
Transformation seems to be correct!

-- 12. PassManager<Function> : Skipping NOP
-- 13. PassManager<Function> : Skipping NOP
-- 14. InstCombinePass

----------------------------------------
declare float @llvm.ldexp.f32.i32(float, i32)

define float @ldexp_by_5_if_0_oeq_zero_f32(float %x) {
#0:
  %x.is.zero = fcmp oeq float %x, 0.000000
  %scaled.x = call float @llvm.ldexp.f32.i32(float %x, i32 5) nofree willreturn memory(none)
  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %x
  ret float %scaled.if.denormal
}
Transformation seems to be correct! (syntactically equal)

-- 15. InstCombinePass

----------------------------------------
declare float @llvm.ldexp.f32.i32(float, i32)

define float @ldexp_by_5_if_0_oeq_zero_f32(float %x) {
#0:
  %x.is.zero = fcmp oeq float %x, 0.000000
  %scaled.x = call float @llvm.ldexp.f32.i32(float %x, i32 5) nofree willreturn memory(none)
  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %x
  ret float %scaled.if.denormal
}
Transformation seems to be correct! (syntactically equal)

-- 16. PassManager<Function> : Skipping NOP
-- 17. PassManager<Function> : Skipping NOP
-- 18. InstCombinePass

----------------------------------------
declare <2 x float> @llvm.ldexp.v2f32.v2i32(<2 x float>, <2 x i32>)

define <2 x float> @ldexp_by_5_if_0_oeq_zero_v2f32(<2 x float> %x) {
#0:
  %x.is.zero = fcmp oeq <2 x float> %x, { 0.000000, 0.000000 }
  %scaled.x = call <2 x float> @llvm.ldexp.v2f32.v2i32(<2 x float> %x, <2 x i32> { 5, 5 }) nofree willreturn memory(none)
  %scaled.if.denormal = select <2 x i1> %x.is.zero, <2 x float> %scaled.x, <2 x float> %x
  ret <2 x float> %scaled.if.denormal
}
Transformation seems to be correct! (syntactically equal)

-- 19. InstCombinePass

----------------------------------------
declare <2 x float> @llvm.ldexp.v2f32.v2i32(<2 x float>, <2 x i32>)

define <2 x float> @ldexp_by_5_if_0_oeq_zero_v2f32(<2 x float> %x) {
#0:
  %x.is.zero = fcmp oeq <2 x float> %x, { 0.000000, 0.000000 }
  %scaled.x = call <2 x float> @llvm.ldexp.v2f32.v2i32(<2 x float> %x, <2 x i32> { 5, 5 }) nofree willreturn memory(none)
  %scaled.if.denormal = select <2 x i1> %x.is.zero, <2 x float> %scaled.x, <2 x float> %x
  ret <2 x float> %scaled.if.denormal
}
Transformation seems to be correct! (syntactically equal)

-- 20. PassManager<Function> : Skipping NOP
-- 21. PassManager<Function> : Skipping NOP
-- 22. InstCombinePass

----------------------------------------
declare <2 x float> @llvm.ldexp.v2f32.v2i32(<2 x float>, <2 x i32>)

define <2 x float> @ldexp_by_n_if_0_oeq_zero_v2f32(<2 x float> %x, <2 x i32> %n) {
#0:
  %x.is.zero = fcmp oeq <2 x float> %x, { 0.000000, 0.000000 }
  %scaled.x = call <2 x float> @llvm.ldexp.v2f32.v2i32(<2 x float> %x, <2 x i32> %n) nofree willreturn memory(none)
  %scaled.if.denormal = select <2 x i1> %x.is.zero, <2 x float> %scaled.x, <2 x float> %x
  ret <2 x float> %scaled.if.denormal
}
Transformation seems to be correct! (syntactically equal)

-- 23. InstCombinePass

----------------------------------------
declare <2 x float> @llvm.ldexp.v2f32.v2i32(<2 x float>, <2 x i32>)

define <2 x float> @ldexp_by_n_if_0_oeq_zero_v2f32(<2 x float> %x, <2 x i32> %n) {
#0:
  %x.is.zero = fcmp oeq <2 x float> %x, { 0.000000, 0.000000 }
  %scaled.x = call <2 x float> @llvm.ldexp.v2f32.v2i32(<2 x float> %x, <2 x i32> %n) nofree willreturn memory(none)
  %scaled.if.denormal = select <2 x i1> %x.is.zero, <2 x float> %scaled.x, <2 x float> %x
  ret <2 x float> %scaled.if.denormal
}
Transformation seems to be correct! (syntactically equal)

-- 24. PassManager<Function> : Skipping NOP
-- 25. PassManager<Function> : Skipping NOP
-- 26. InstCombinePass

----------------------------------------
declare float @llvm.ldexp.f32.i32(float, i32)

define float @ldexp_by_n_if_0_oeq_zero_f32(float %x, i32 %n) {
#0:
  %x.is.zero = fcmp oeq float %x, 0.000000
  %scaled.x = call float @llvm.ldexp.f32.i32(float %x, i32 %n) nofree willreturn memory(none)
  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %x
  ret float %scaled.if.denormal
}
Transformation seems to be correct! (syntactically equal)

-- 27. InstCombinePass

----------------------------------------
declare float @llvm.ldexp.f32.i32(float, i32)

define float @ldexp_by_n_if_0_oeq_zero_f32(float %x, i32 %n) {
#0:
  %x.is.zero = fcmp oeq float %x, 0.000000
  %scaled.x = call float @llvm.ldexp.f32.i32(float %x, i32 %n) nofree willreturn memory(none)
  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %x
  ret float %scaled.if.denormal
}
Transformation seems to be correct! (syntactically equal)

-- 28. PassManager<Function> : Skipping NOP
-- 29. PassManager<Function> : Skipping NOP
-- 30. InstCombinePass

----------------------------------------
define <2 x float> @fmul_by_32_if_0_oeq_zero_v2f32_splat(<2 x float> %x) {
#0:
  %x.is.zero = fcmp oeq <2 x float> %x, { 0.000000, 0.000000 }
  %scaled.x = fmul <2 x float> %x, { 32.000000, 32.000000 }
  %scaled.if.denormal = select <2 x i1> %x.is.zero, <2 x float> %scaled.x, <2 x float> %x
  ret <2 x float> %scaled.if.denormal
}
Transformation seems to be correct! (syntactically equal)

-- 31. InstCombinePass

----------------------------------------
define <2 x float> @fmul_by_32_if_0_oeq_zero_v2f32_splat(<2 x float> %x) {
#0:
  %x.is.zero = fcmp oeq <2 x float> %x, { 0.000000, 0.000000 }
  %scaled.x = fmul <2 x float> %x, { 32.000000, 32.000000 }
  %scaled.if.denormal = select <2 x i1> %x.is.zero, <2 x float> %scaled.x, <2 x float> %x
  ret <2 x float> %scaled.if.denormal
}
=>
define <2 x float> @fmul_by_32_if_0_oeq_zero_v2f32_splat(<2 x float> %x) {
#0:
  ret <2 x float> %x
}
Transformation seems to be correct!

-- 32. PassManager<Function> : Skipping NOP
-- 33. PassManager<Function> : Skipping NOP
-- 34. InstCombinePass

----------------------------------------
define <2 x float> @fmul_by_32_if_0_oeq_zero_v2f32_nonsplat(<2 x float> %x) {
#0:
  %x.is.zero = fcmp oeq <2 x float> %x, { 0.000000, 0.000000 }
  %scaled.x = fmul <2 x float> %x, { 32.000000, 64.000000 }
  %scaled.if.denormal = select <2 x i1> %x.is.zero, <2 x float> %scaled.x, <2 x float> %x
  ret <2 x float> %scaled.if.denormal
}
Transformation seems to be correct! (syntactically equal)

-- 35. InstCombinePass

----------------------------------------
define <2 x float> @fmul_by_32_if_0_oeq_zero_v2f32_nonsplat(<2 x float> %x) {
#0:
  %x.is.zero = fcmp oeq <2 x float> %x, { 0.000000, 0.000000 }
  %scaled.x = fmul <2 x float> %x, { 32.000000, 64.000000 }
  %scaled.if.denormal = select <2 x i1> %x.is.zero, <2 x float> %scaled.x, <2 x float> %x
  ret <2 x float> %scaled.if.denormal
}
=>
define <2 x float> @fmul_by_32_if_0_oeq_zero_v2f32_nonsplat(<2 x float> %x) {
#0:
  ret <2 x float> %x
}
Transformation seems to be correct!

-- 36. PassManager<Function> : Skipping NOP
-- 37. PassManager<Function> : Skipping NOP
-- 38. InstCombinePass

----------------------------------------
define <2 x float> @fmul_by_32_if_0_oeq_zero_v2f32_eq_mixed_zero_vector(<2 x float> %x) {
#0:
  %x.is.zero = fcmp oeq <2 x float> %x, { 0.000000, -0.000000 }
  %scaled.x = fmul <2 x float> %x, { 32.000000, 32.000000 }
  %scaled.if.denormal = select <2 x i1> %x.is.zero, <2 x float> %scaled.x, <2 x float> %x
  ret <2 x float> %scaled.if.denormal
}
Transformation seems to be correct! (syntactically equal)

-- 39. InstCombinePass

----------------------------------------
define <2 x float> @fmul_by_32_if_0_oeq_zero_v2f32_eq_mixed_zero_vector(<2 x float> %x) {
#0:
  %x.is.zero = fcmp oeq <2 x float> %x, { 0.000000, -0.000000 }
  %scaled.x = fmul <2 x float> %x, { 32.000000, 32.000000 }
  %scaled.if.denormal = select <2 x i1> %x.is.zero, <2 x float> %scaled.x, <2 x float> %x
  ret <2 x float> %scaled.if.denormal
}
=>
define <2 x float> @fmul_by_32_if_0_oeq_zero_v2f32_eq_mixed_zero_vector(<2 x float> %x) {
#0:
  ret <2 x float> %x
}
Transformation seems to be correct!

-- 40. PassManager<Function> : Skipping NOP
-- 41. PassManager<Function> : Skipping NOP
-- 42. InstCombinePass

----------------------------------------
define <2 x float> @fmul_by_32_if_0_oeq_zero_v2f32_eq_zero_vector_undef(<2 x float> %x) {
#0:
  %x.is.zero = fcmp oeq <2 x float> %x, { 0.000000, poison }
  %scaled.x = fmul <2 x float> %x, { 32.000000, 32.000000 }
  %scaled.if.denormal = select <2 x i1> %x.is.zero, <2 x float> %scaled.x, <2 x float> %x
  ret <2 x float> %scaled.if.denormal
}
Transformation seems to be correct! (syntactically equal)

-- 43. InstCombinePass

----------------------------------------
define <2 x float> @fmul_by_32_if_0_oeq_zero_v2f32_eq_zero_vector_undef(<2 x float> %x) {
#0:
  %x.is.zero = fcmp oeq <2 x float> %x, { 0.000000, poison }
  %scaled.x = fmul <2 x float> %x, { 32.000000, 32.000000 }
  %scaled.if.denormal = select <2 x i1> %x.is.zero, <2 x float> %scaled.x, <2 x float> %x
  ret <2 x float> %scaled.if.denormal
}
=>
define <2 x float> @fmul_by_32_if_0_oeq_zero_v2f32_eq_zero_vector_undef(<2 x float> %x) {
#0:
  ret <2 x float> %x
}
Transformation seems to be correct!

-- 44. PassManager<Function> : Skipping NOP
-- 45. PassManager<Function> : Skipping NOP
-- 46. InstCombinePass

----------------------------------------
define float @select_wrong_value(float %x, float %y) {
#0:
  %x.is.zero = fcmp oeq float %x, 0.000000
  %scaled.x = fmul float %x, 32.000000
  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %y
  ret float %scaled.if.denormal
}
Transformation seems to be correct! (syntactically equal)

-- 47. InstCombinePass

----------------------------------------
define float @select_wrong_value(float %x, float %y) {
#0:
  %x.is.zero = fcmp oeq float %x, 0.000000
  %scaled.x = fmul float %x, 32.000000
  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %y
  ret float %scaled.if.denormal
}
Transformation seems to be correct! (syntactically equal)

-- 48. PassManager<Function> : Skipping NOP
-- 49. PassManager<Function> : Skipping NOP
-- 50. InstCombinePass

----------------------------------------
define float @fmul_wrong_value(float %x, float %y) {
#0:
  %x.is.zero = fcmp oeq float %x, 0.000000
  %scaled.x = fmul float %y, 32.000000
  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %x
  ret float %scaled.if.denormal
}
Transformation seems to be correct! (syntactically equal)

-- 51. InstCombinePass

----------------------------------------
define float @fmul_wrong_value(float %x, float %y) {
#0:
  %x.is.zero = fcmp oeq float %x, 0.000000
  %scaled.x = fmul float %y, 32.000000
  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %x
  ret float %scaled.if.denormal
}
Transformation seems to be correct! (syntactically equal)

-- 52. PassManager<Function> : Skipping NOP
-- 53. PassManager<Function> : Skipping NOP
-- 54. InstCombinePass

----------------------------------------
define float @fmul_by_32_if_1_oeq_zero_f32(float %x) {
#0:
  %x.is.one = fcmp oeq float %x, 1.000000
  %scaled.x = fmul float %x, 32.000000
  %scaled.if.denormal = select i1 %x.is.one, float %scaled.x, float %x
  ret float %scaled.if.denormal
}
Transformation seems to be correct! (syntactically equal)

-- 55. InstCombinePass

----------------------------------------
define float @fmul_by_32_if_1_oeq_zero_f32(float %x) {
#0:
  %x.is.one = fcmp oeq float %x, 1.000000
  %scaled.x = fmul float %x, 32.000000
  %scaled.if.denormal = select i1 %x.is.one, float %scaled.x, float %x
  ret float %scaled.if.denormal
}
=>
define float @fmul_by_32_if_1_oeq_zero_f32(float %x) {
#0:
  %x.is.one = fcmp oeq float %x, 1.000000
  %scaled.if.denormal = select i1 %x.is.one, float 32.000000, float %x
  ret float %scaled.if.denormal
}
Transformation seems to be correct!

-- 56. PassManager<Function> : Skipping NOP
-- 57. PassManager<Function> : Skipping NOP
-- 58. InstCombinePass

----------------------------------------
define float @fmul_by_32_if_var_oeq_zero_f32(float %x, float %y) {
#0:
  %x.is.one = fcmp oeq float %x, %y
  %scaled.x = fmul float %x, 32.000000
  %scaled.if.denormal = select i1 %x.is.one, float %scaled.x, float %x
  ret float %scaled.if.denormal
}
Transformation seems to be correct! (syntactically equal)

-- 59. InstCombinePass

----------------------------------------
define float @fmul_by_32_if_var_oeq_zero_f32(float %x, float %y) {
#0:
  %x.is.one = fcmp oeq float %x, %y
  %scaled.x = fmul float %x, 32.000000
  %scaled.if.denormal = select i1 %x.is.one, float %scaled.x, float %x
  ret float %scaled.if.denormal
}
Transformation seems to be correct! (syntactically equal)

-- 60. PassManager<Function> : Skipping NOP
-- 61. PassManager<Function> : Skipping NOP
-- 62. InstCombinePass

----------------------------------------
define float @fmul_by_32_if_0_ueq_zero_f32(float %x) {
#0:
  %x.is.zero = fcmp ueq float %x, 0.000000
  %scaled.x = fmul float %x, 32.000000
  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %x
  ret float %scaled.if.denormal
}
Transformation seems to be correct! (syntactically equal)

-- 63. InstCombinePass

----------------------------------------
define float @fmul_by_32_if_0_ueq_zero_f32(float %x) {
#0:
  %x.is.zero = fcmp ueq float %x, 0.000000
  %scaled.x = fmul float %x, 32.000000
  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %x
  ret float %scaled.if.denormal
}
=>
define float @fmul_by_32_if_0_ueq_zero_f32(float %x) {
#0:
  ret float %x
}
Transformation seems to be correct!

-- 64. PassManager<Function> : Skipping NOP
-- 65. PassManager<Function> : Skipping NOP
-- 66. InstCombinePass

----------------------------------------
define float @fmul_by_32_if_0_oeq_negzero_f32(float %x) {
#0:
  %x.is.zero = fcmp oeq float %x, -0.000000
  %scaled.x = fmul float %x, 32.000000
  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %x
  ret float %scaled.if.denormal
}
Transformation seems to be correct! (syntactically equal)

-- 67. InstCombinePass

----------------------------------------
define float @fmul_by_32_if_0_oeq_negzero_f32(float %x) {
#0:
  %x.is.zero = fcmp oeq float %x, -0.000000
  %scaled.x = fmul float %x, 32.000000
  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %x
  ret float %scaled.if.denormal
}
=>
define float @fmul_by_32_if_0_oeq_negzero_f32(float %x) {
#0:
  ret float %x
}
Transformation seems to be correct!

-- 68. PassManager<Function> : Skipping NOP
-- 69. PassManager<Function> : Skipping NOP
-- 70. InstCombinePass

----------------------------------------
define float @fmul_by_32_if_0_oeq_zero_f32_multiple_use_cmp(float %x, ptr %ptr) {
#0:
  %x.is.zero = fcmp oeq float %x, 0.000000
  %scaled.x = fmul float %x, 32.000000
  store i1 %x.is.zero, ptr %ptr, align 1
  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %x
  ret float %scaled.if.denormal
}
Transformation seems to be correct! (syntactically equal)

-- 71. InstCombinePass

----------------------------------------
define float @fmul_by_32_if_0_oeq_zero_f32_multiple_use_cmp(float %x, ptr %ptr) {
#0:
  %x.is.zero = fcmp oeq float %x, 0.000000
  %scaled.x = fmul float %x, 32.000000
  store i1 %x.is.zero, ptr %ptr, align 1
  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %x
  ret float %scaled.if.denormal
}
=>
define float @fmul_by_32_if_0_oeq_zero_f32_multiple_use_cmp(float %x, ptr %ptr) {
#0:
  %x.is.zero = fcmp oeq float %x, 0.000000
  store i1 %x.is.zero, ptr %ptr, align 1
  ret float %x
}
Transformation seems to be correct!

-- 72. PassManager<Function> : Skipping NOP
-- 73. PassManager<Function> : Skipping NOP
-- 74. InstCombinePass

----------------------------------------
define float @fmul_by_32_if_0_oeq_zero_f32_multiple_use_fmul(float %x, ptr %ptr) {
#0:
  %x.is.zero = fcmp oeq float %x, 0.000000
  %scaled.x = fmul float %x, 32.000000
  store float %scaled.x, ptr %ptr, align 4
  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %x
  ret float %scaled.if.denormal
}
Transformation seems to be correct! (syntactically equal)

-- 75. InstCombinePass

----------------------------------------
define float @fmul_by_32_if_0_oeq_zero_f32_multiple_use_fmul(float %x, ptr %ptr) {
#0:
  %x.is.zero = fcmp oeq float %x, 0.000000
  %scaled.x = fmul float %x, 32.000000
  store float %scaled.x, ptr %ptr, align 4
  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %x
  ret float %scaled.if.denormal
}
=>
define float @fmul_by_32_if_0_oeq_zero_f32_multiple_use_fmul(float %x, ptr %ptr) {
#0:
  %scaled.x = fmul float %x, 32.000000
  store float %scaled.x, ptr %ptr, align 4
  ret float %x
}
Transformation doesn't verify! (not unsound)
ERROR: Timeout
-- 76. PassManager<Function> : Skipping NOP
-- 77. PassManager<Function> : Skipping NOP
-- 78. InstCombinePass

----------------------------------------
define float @fmul_by_0_if_0_oeq_zero_f32(float %x) {
#0:
  %x.is.zero = fcmp oeq float %x, 0.000000
  %scaled.x = fmul float %x, 0.000000
  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %x
  ret float %scaled.if.denormal
}
Transformation seems to be correct! (syntactically equal)

-- 79. InstCombinePass

----------------------------------------
define float @fmul_by_0_if_0_oeq_zero_f32(float %x) {
#0:
  %x.is.zero = fcmp oeq float %x, 0.000000
  %scaled.x = fmul float %x, 0.000000
  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %x
  ret float %scaled.if.denormal
}
=>
define float @fmul_by_0_if_0_oeq_zero_f32(float %x) {
#0:
  ret float %x
}
Transformation seems to be correct!

-- 80. PassManager<Function> : Skipping NOP
-- 81. PassManager<Function> : Skipping NOP
-- 82. InstCombinePass

----------------------------------------
define float @x_if_one_zero_else_mul_by_32(float %x) {
#0:
  %x.is.not.zero = fcmp one float %x, 0.000000
  %scaled.x = fmul float %x, 32.000000
  %scaled.if.denormal = select i1 %x.is.not.zero, float %x, float %scaled.x
  ret float %scaled.if.denormal
}
Transformation seems to be correct! (syntactically equal)

-- 83. InstCombinePass

----------------------------------------
define float @x_if_one_zero_else_mul_by_32(float %x) {
#0:
  %x.is.not.zero = fcmp one float %x, 0.000000
  %scaled.x = fmul float %x, 32.000000
  %scaled.if.denormal = select i1 %x.is.not.zero, float %x, float %scaled.x
  ret float %scaled.if.denormal
}
=>
define float @x_if_one_zero_else_mul_by_32(float %x) {
#0:
  ret float %x
}
Transformation seems to be correct!

-- 84. PassManager<Function> : Skipping NOP
-- 85. PassManager<Function> : Skipping NOP
-- 86. InstCombinePass

----------------------------------------
define float @x_if_one_negzero_else_mul_by_32(float %x) {
#0:
  %x.is.not.zero = fcmp one float %x, -0.000000
  %scaled.x = fmul float %x, 32.000000
  %scaled.if.denormal = select i1 %x.is.not.zero, float %x, float %scaled.x
  ret float %scaled.if.denormal
}
Transformation seems to be correct! (syntactically equal)

-- 87. InstCombinePass

----------------------------------------
define float @x_if_one_negzero_else_mul_by_32(float %x) {
#0:
  %x.is.not.zero = fcmp one float %x, -0.000000
  %scaled.x = fmul float %x, 32.000000
  %scaled.if.denormal = select i1 %x.is.not.zero, float %x, float %scaled.x
  ret float %scaled.if.denormal
}
=>
define float @x_if_one_negzero_else_mul_by_32(float %x) {
#0:
  ret float %x
}
Transformation seems to be correct!

-- 88. PassManager<Function> : Skipping NOP
-- 89. PassManager<Function> : Skipping NOP
-- 90. InstCombinePass

----------------------------------------
define float @x_if_une_zero_else_mul_by_32(float %x) {
#0:
  %x.is.not.zero = fcmp une float %x, 0.000000
  %scaled.x = fmul float %x, 32.000000
  %scaled.if.denormal = select i1 %x.is.not.zero, float %x, float %scaled.x
  ret float %scaled.if.denormal
}
Transformation seems to be correct! (syntactically equal)

-- 91. InstCombinePass

----------------------------------------
define float @x_if_une_zero_else_mul_by_32(float %x) {
#0:
  %x.is.not.zero = fcmp une float %x, 0.000000
  %scaled.x = fmul float %x, 32.000000
  %scaled.if.denormal = select i1 %x.is.not.zero, float %x, float %scaled.x
  ret float %scaled.if.denormal
}
=>
define float @x_if_une_zero_else_mul_by_32(float %x) {
#0:
  ret float %x
}
Transformation seems to be correct!

-- 92. PassManager<Function> : Skipping NOP
-- 93. PassManager<Function> : Skipping NOP
-- 94. InstCombinePass

----------------------------------------
define float @x_if_une_negzero_else_mul_by_32(float %x) {
#0:
  %x.is.not.zero = fcmp une float %x, -0.000000
  %scaled.x = fmul float %x, 32.000000
  %scaled.if.denormal = select i1 %x.is.not.zero, float %x, float %scaled.x
  ret float %scaled.if.denormal
}
Transformation seems to be correct! (syntactically equal)

-- 95. InstCombinePass

----------------------------------------
define float @x_if_une_negzero_else_mul_by_32(float %x) {
#0:
  %x.is.not.zero = fcmp une float %x, -0.000000
  %scaled.x = fmul float %x, 32.000000
  %scaled.if.denormal = select i1 %x.is.not.zero, float %x, float %scaled.x
  ret float %scaled.if.denormal
}
=>
define float @x_if_une_negzero_else_mul_by_32(float %x) {
#0:
  ret float %x
}
Transformation seems to be correct!

-- 96. PassManager<Function> : Skipping NOP
-- 97. PassManager<Function> : Skipping NOP
-- 98. InstCombinePass

----------------------------------------
define float @fmul_by_neg32_if_0_oeq_zero_f32(float %x) {
#0:
  %x.is.zero = fcmp oeq float %x, 0.000000
  %scaled.x = fmul float %x, -32.000000
  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %x
  ret float %scaled.if.denormal
}
Transformation seems to be correct! (syntactically equal)

-- 99. InstCombinePass

----------------------------------------
define float @fmul_by_neg32_if_0_oeq_zero_f32(float %x) {
#0:
  %x.is.zero = fcmp oeq float %x, 0.000000
  %scaled.x = fmul float %x, -32.000000
  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %x
  ret float %scaled.if.denormal
}
Transformation seems to be correct! (syntactically equal)

-- 100. PassManager<Function> : Skipping NOP
-- 101. PassManager<Function> : Skipping NOP
-- 102. InstCombinePass

----------------------------------------
define float @fmul_by_neg32_if_0_one_zero_f32(float %x) {
#0:
  %x.is.not.zero = fcmp one float %x, 0.000000
  %scaled.x = fmul float %x, -32.000000
  %scaled.if.denormal = select i1 %x.is.not.zero, float %x, float %scaled.x
  ret float %scaled.if.denormal
}
Transformation seems to be correct! (syntactically equal)

-- 103. InstCombinePass

----------------------------------------
define float @fmul_by_neg32_if_0_one_zero_f32(float %x) {
#0:
  %x.is.not.zero = fcmp one float %x, 0.000000
  %scaled.x = fmul float %x, -32.000000
  %scaled.if.denormal = select i1 %x.is.not.zero, float %x, float %scaled.x
  ret float %scaled.if.denormal
}
Transformation seems to be correct! (syntactically equal)

-- 104. PassManager<Function> : Skipping NOP
-- 105. PassManager<Function> : Skipping NOP
-- 106. InstCombinePass

----------------------------------------
define float @fmul_by_neg32_if_0_oeq_zero_f32_select_nsz(float %x) {
#0:
  %x.is.zero = fcmp oeq float %x, 0.000000
  %scaled.x = fmul float %x, -32.000000
  %scaled.if.denormal = select nsz i1 %x.is.zero, float %scaled.x, float %x
  ret float %scaled.if.denormal
}
Transformation seems to be correct! (syntactically equal)

-- 107. InstCombinePass

----------------------------------------
define float @fmul_by_neg32_if_0_oeq_zero_f32_select_nsz(float %x) {
#0:
  %x.is.zero = fcmp oeq float %x, 0.000000
  %scaled.x = fmul float %x, -32.000000
  %scaled.if.denormal = select nsz i1 %x.is.zero, float %scaled.x, float %x
  ret float %scaled.if.denormal
}
=>
define float @fmul_by_neg32_if_0_oeq_zero_f32_select_nsz(float %x) {
#0:
  ret float %x
}
Transformation seems to be correct!

-- 108. PassManager<Function> : Skipping NOP
-- 109. PassManager<Function> : Skipping NOP
-- 110. InstCombinePass

----------------------------------------
define float @fmul_by_neg32_if_0_one_zero_f32_select_nsz(float %x) {
#0:
  %x.is.not.zero = fcmp one float %x, 0.000000
  %scaled.x = fmul float %x, -32.000000
  %scaled.if.denormal = select nsz i1 %x.is.not.zero, float %x, float %scaled.x
  ret float %scaled.if.denormal
}
Transformation seems to be correct! (syntactically equal)

-- 111. InstCombinePass

----------------------------------------
define float @fmul_by_neg32_if_0_one_zero_f32_select_nsz(float %x) {
#0:
  %x.is.not.zero = fcmp one float %x, 0.000000
  %scaled.x = fmul float %x, -32.000000
  %scaled.if.denormal = select nsz i1 %x.is.not.zero, float %x, float %scaled.x
  ret float %scaled.if.denormal
}
=>
define float @fmul_by_neg32_if_0_one_zero_f32_select_nsz(float %x) {
#0:
  ret float %x
}
Transformation seems to be correct!

-- 112. PassManager<Function> : Skipping NOP
-- 113. PassManager<Function> : Skipping NOP
-- 114. InstCombinePass

----------------------------------------
define float @fmul_by_neg32_if_0_oeq_zero_f32_fmul_nsz(float %x) {
#0:
  %x.is.zero = fcmp oeq float %x, 0.000000
  %scaled.x = fmul nsz float %x, -32.000000
  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %x
  ret float %scaled.if.denormal
}
Transformation seems to be correct! (syntactically equal)

-- 115. InstCombinePass

----------------------------------------
define float @fmul_by_neg32_if_0_oeq_zero_f32_fmul_nsz(float %x) {
#0:
  %x.is.zero = fcmp oeq float %x, 0.000000
  %scaled.x = fmul nsz float %x, -32.000000
  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %x
  ret float %scaled.if.denormal
}
Transformation seems to be correct! (syntactically equal)

-- 116. PassManager<Function> : Skipping NOP
-- 117. PassManager<Function> : Skipping NOP
-- 118. InstCombinePass

----------------------------------------
define float @fmul_by_neg32_if_0_one_zero_f32_mul_nsz(float %x) {
#0:
  %x.is.not.zero = fcmp one float %x, 0.000000
  %scaled.x = fmul nsz float %x, -32.000000
  %scaled.if.denormal = select i1 %x.is.not.zero, float %x, float %scaled.x
  ret float %scaled.if.denormal
}
Transformation seems to be correct! (syntactically equal)

-- 119. InstCombinePass

----------------------------------------
define float @fmul_by_neg32_if_0_one_zero_f32_mul_nsz(float %x) {
#0:
  %x.is.not.zero = fcmp one float %x, 0.000000
  %scaled.x = fmul nsz float %x, -32.000000
  %scaled.if.denormal = select i1 %x.is.not.zero, float %x, float %scaled.x
  ret float %scaled.if.denormal
}
Transformation seems to be correct! (syntactically equal)

-- 120. PassManager<Function> : Skipping NOP
-- 121. PassManager<Function> : Skipping NOP
-- 122. InstCombinePass

----------------------------------------
define float @fmul_by_neg0_if_0_oeq_zero_f32(float %x) {
#0:
  %x.is.zero = fcmp oeq float %x, 0.000000
  %scaled.x = fmul float %x, -0.000000
  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %x
  ret float %scaled.if.denormal
}
Transformation seems to be correct! (syntactically equal)

-- 123. InstCombinePass

----------------------------------------
define float @fmul_by_neg0_if_0_oeq_zero_f32(float %x) {
#0:
  %x.is.zero = fcmp oeq float %x, 0.000000
  %scaled.x = fmul float %x, -0.000000
  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %x
  ret float %scaled.if.denormal
}
Transformation seems to be correct! (syntactically equal)

-- 124. PassManager<Function> : Skipping NOP
-- 125. PassManager<Function> : Skipping NOP
-- 126. InstCombinePass

----------------------------------------
define float @fmul_by_neginf_if_0_oeq_zero_f32(float %x) {
#0:
  %x.is.zero = fcmp oeq float %x, 0.000000
  %scaled.x = fmul float %x, -inf
  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %x
  ret float %scaled.if.denormal
}
Transformation seems to be correct! (syntactically equal)

-- 127. InstCombinePass

----------------------------------------
define float @fmul_by_neginf_if_0_oeq_zero_f32(float %x) {
#0:
  %x.is.zero = fcmp oeq float %x, 0.000000
  %scaled.x = fmul float %x, -inf
  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %x
  ret float %scaled.if.denormal
}
Transformation seems to be correct! (syntactically equal)

-- 128. PassManager<Function> : Skipping NOP
-- 129. PassManager<Function> : Skipping NOP
-- 130. InstCombinePass

----------------------------------------
define float @fmul_by_posinf_if_0_oeq_zero_f32(float %x) {
#0:
  %x.is.zero = fcmp oeq float %x, 0.000000
  %scaled.x = fmul float %x, inf
  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %x
  ret float %scaled.if.denormal
}
Transformation seems to be correct! (syntactically equal)

-- 131. InstCombinePass

----------------------------------------
define float @fmul_by_posinf_if_0_oeq_zero_f32(float %x) {
#0:
  %x.is.zero = fcmp oeq float %x, 0.000000
  %scaled.x = fmul float %x, inf
  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %x
  ret float %scaled.if.denormal
}
Transformation seems to be correct! (syntactically equal)

-- 132. PassManager<Function> : Skipping NOP
-- 133. PassManager<Function> : Skipping NOP
-- 134. InstCombinePass

----------------------------------------
define float @fmul_by_qnan_if_0_oeq_zero_f32(float %x) {
#0:
  %x.is.zero = fcmp oeq float %x, 0.000000
  %scaled.x = fmul float %x, 0x7fc00000
  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %x
  ret float %scaled.if.denormal
}
Transformation seems to be correct! (syntactically equal)

-- 135. InstCombinePass

----------------------------------------
define float @fmul_by_qnan_if_0_oeq_zero_f32(float %x) {
#0:
  %x.is.zero = fcmp oeq float %x, 0.000000
  %scaled.x = fmul float %x, 0x7fc00000
  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %x
  ret float %scaled.if.denormal
}
=>
define float @fmul_by_qnan_if_0_oeq_zero_f32(float %x) {
#0:
  %x.is.zero = fcmp oeq float %x, 0.000000
  %scaled.if.denormal = select i1 %x.is.zero, float 0x7fc00000, float %x
  ret float %scaled.if.denormal
}
Transformation seems to be correct!

-- 136. PassManager<Function> : Skipping NOP
-- 137. PassManager<Function> : Skipping NOP
-- 138. InstCombinePass

----------------------------------------
define float @fmul_by_snan_if_0_oeq_zero_f32(float %x) {
#0:
  %x.is.zero = fcmp oeq float %x, 0.000000
  %scaled.x = fmul float %x, 0x7f840000
  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %x
  ret float %scaled.if.denormal
}
Transformation seems to be correct! (syntactically equal)

-- 139. InstCombinePass

----------------------------------------
define float @fmul_by_snan_if_0_oeq_zero_f32(float %x) {
#0:
  %x.is.zero = fcmp oeq float %x, 0.000000
  %scaled.x = fmul float %x, 0x7f840000
  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %x
  ret float %scaled.if.denormal
}
=>
define float @fmul_by_snan_if_0_oeq_zero_f32(float %x) {
#0:
  %x.is.zero = fcmp oeq float %x, 0.000000
  %scaled.if.denormal = select i1 %x.is.zero, float 0x7fc40000, float %x
  ret float %scaled.if.denormal
}
Transformation seems to be correct!

-- 140. PassManager<Function> : Skipping NOP
-- 141. PassManager<Function> : Skipping NOP
-- 142. InstCombinePass

----------------------------------------
define float @fmul_by_var_if_0_oeq_zero_f32(float %x, float %y) {
#0:
  %x.is.zero = fcmp oeq float %x, 0.000000
  %scaled.x = fmul float %x, %y
  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %x
  ret float %scaled.if.denormal
}
Transformation seems to be correct! (syntactically equal)

-- 143. InstCombinePass

----------------------------------------
define float @fmul_by_var_if_0_oeq_zero_f32(float %x, float %y) {
#0:
  %x.is.zero = fcmp oeq float %x, 0.000000
  %scaled.x = fmul float %x, %y
  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %x
  ret float %scaled.if.denormal
}
=>
define float @fmul_by_var_if_0_oeq_zero_f32(float %x, float %y) {
#0:
  %x.is.zero = fcmp oeq float %x, 0.000000
  %scaled.x = select i1 %x.is.zero, float %y, float 1.000000
  %scaled.if.denormal = fmul float %scaled.x, %x
  ret float %scaled.if.denormal
}
Transformation doesn't verify! (not unsound)
ERROR: Timeout
-- 144. PassManager<Function> : Skipping NOP
-- 145. PassManager<Function> : Skipping NOP
-- 146. InstCombinePass

----------------------------------------
define float @fmul_by_fabs_var_if_0_oeq_zero_f32(float %x, float %y) {
#0:
  %y.fabs = fabs float %y
  %x.is.zero = fcmp oeq float %x, 0.000000
  %scaled.x = fmul float %x, %y.fabs
  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %x
  ret float %scaled.if.denormal
}
Transformation seems to be correct! (syntactically equal)

-- 147. InstCombinePass

----------------------------------------
define float @fmul_by_fabs_var_if_0_oeq_zero_f32(float %x, float %y) {
#0:
  %y.fabs = fabs float %y
  %x.is.zero = fcmp oeq float %x, 0.000000
  %scaled.x = fmul float %x, %y.fabs
  %scaled.if.denormal = select i1 %x.is.zero, float %scaled.x, float %x
  ret float %scaled.if.denormal
}
=>
define float @fmul_by_fabs_var_if_0_oeq_zero_f32(float %x, float %y) {
#0:
  %y.fabs = fabs float %y
  %x.is.zero = fcmp oeq float %x, 0.000000
  %scaled.x = select i1 %x.is.zero, float %y.fabs, float 1.000000
  %scaled.if.denormal = fmul float %scaled.x, %x
  ret float %scaled.if.denormal
}
Transformation doesn't verify! (unsound)
ERROR: Target's return value is more undefined

Example:
float %x = #xff8000a9 (SNaN)
float %y = poison

Source:
float %y.fabs = poison
i1 %x.is.zero = #x0 (0)
float %scaled.x = poison
float %scaled.if.denormal = #xff8000a9 (SNaN)

Target:
float %y.fabs = poison
i1 %x.is.zero = #x0 (0)
float %scaled.x = #x3f800000 (1)
float %scaled.if.denormal = #x7f8000a9 (SNaN)
Source value: #xff8000a9 (SNaN)
Target value: #x7f8000a9 (SNaN)

Pass: InstCombinePass
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' '-S' '-passes=instcombine' '-tv-smt-to=20000' '-tv-report-dir=/home/nlopes/alive2/build/logs' '-tv-smt-stats'
Wrote bitcode to: "/home/nlopes/alive2/build/logs/in_jqyuBJtR_N0cE.bc"


------------------- SMT STATS -------------------
Num queries: 126
Num invalid: 0
Num skips:   0
Num trivial: 87 (40.8%)
Num timeout: 2 (1.6%)
Num errors:  0 (0.0%)
Num SAT:     74 (58.7%)
Num UNSAT:   50 (39.7%)
Alive2: Transform doesn't verify; aborting!

stderr:

RUN: at line 2: /home/nlopes/alive2/build/opt-alive.sh -S -passes=instcombine < /bitbucket/nlopes/llvm/llvm/test/Transforms/InstCombine/fold-select-fmul-if-zero.ll | /bitbucket/nlopes/llvm/build/bin/FileCheck -check-prefixes=CHECK,IEEE /bitbucket/nlopes/llvm/llvm/test/Transforms/InstCombine/fold-select-fmul-if-zero.ll
+ /home/nlopes/alive2/build/opt-alive.sh -S -passes=instcombine
+ /bitbucket/nlopes/llvm/build/bin/FileCheck -check-prefixes=CHECK,IEEE /bitbucket/nlopes/llvm/llvm/test/Transforms/InstCombine/fold-select-fmul-if-zero.ll

FileCheck error: '<stdin>' is empty.
FileCheck command line:  /bitbucket/nlopes/llvm/build/bin/FileCheck -check-prefixes=CHECK,IEEE /bitbucket/nlopes/llvm/llvm/test/Transforms/InstCombine/fold-select-fmul-if-zero.ll

 

<-- Back