Test Failure: Transforms/InstCombine/vec_demanded_elts.ll

Test source: git

Log:

Source: <stdin>

----------------------------------------
define i32 @test2(float %f) {
%0:
  %t5 = fmul float %f, %f
  %t9 = insertelement <4 x float> undef, float %t5, i32 0
  %t10 = insertelement <4 x float> %t9, float 0.000000, i32 1
  %t11 = insertelement <4 x float> %t10, float 0.000000, i32 2
  %t12 = insertelement <4 x float> %t11, float 0.000000, i32 3
  %t19 = bitcast <4 x float> %t12 to <4 x i32>
  %t21 = extractelement <4 x i32> %t19, i32 0
  ret i32 %t21
}
=>
define i32 @test2(float %f) {
%0:
  %t5 = fmul float %f, %f
  %t21 = bitcast float %t5 to i32
  ret i32 %t21
}
Transformation doesn't verify!
ERROR: Timeout


----------------------------------------
define void @get_image() {
%entry:
  %0 = call i32 @fgetc(nocapture noundef * null) noundef nothrow
  %1 = trunc i32 %0 to i8
  %t2 = insertelement <100 x i8> { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, i8 %1, i32 1
  %t1 = extractelement <100 x i8> %t2, i32 0
  %2 = icmp eq i8 %t1, 80
  br i1 %2, label %bb2, label %bb3

%bb2:
  br label %bb3

%bb3:
  assume i1 0
}
=>
define void @get_image() {
%entry:
  %0 = call i32 @fgetc(nocapture noundef * null) noundef nothrow
  br i1 0, label %bb2, label %bb3

%bb2:
  br label %bb3

%bb3:
  assume i1 0
}
Transformation seems to be correct!


----------------------------------------
define void @vac(* nocapture %a) {
%entry:
  %t1 = load <4 x float>, * nocapture %a, align 16
  %vecins = insertelement <4 x float> %t1, float 0.000000, i32 0
  %vecins4 = insertelement <4 x float> %vecins, float 0.000000, i32 1
  %vecins6 = insertelement <4 x float> %vecins4, float 0.000000, i32 2
  %vecins8 = insertelement <4 x float> %vecins6, float 0.000000, i32 3
  store <4 x float> %vecins8, * nocapture %a, align 16
  ret void
}
=>
define void @vac(* nocapture %a) {
%entry:
  store <4 x float> { 0.000000, 0.000000, 0.000000, 0.000000 }, * nocapture %a, align 16
  ret void
}
Transformation seems to be correct!


----------------------------------------
define <4 x float> @dead_shuffle_elt(<4 x float> %x, <2 x float> %y) {
%0:
  %shuffle.i = shufflevector <2 x float> %y, <2 x float> %y, 0, 1, 0, 1
  %shuffle9.i = shufflevector <4 x float> %x, <4 x float> %shuffle.i, 4, 5, 2, 3
  ret <4 x float> %shuffle9.i
}
=>
define <4 x float> @dead_shuffle_elt(<4 x float> %x, <2 x float> %y) {
%0:
  %shuffle.i = shufflevector <2 x float> %y, <2 x float> undef, 0, 1, 4294967295, 4294967295
  %shuffle9.i = shufflevector <4 x float> %shuffle.i, <4 x float> %x, 0, 1, 6, 7
  ret <4 x float> %shuffle9.i
}
Transformation seems to be correct!


----------------------------------------
define <2 x float> @test_fptrunc(double %f) {
%0:
  %t9 = insertelement <4 x double> undef, double %f, i32 0
  %t10 = insertelement <4 x double> %t9, double 0.000000, i32 1
  %t11 = insertelement <4 x double> %t10, double 0.000000, i32 2
  %t12 = insertelement <4 x double> %t11, double 0.000000, i32 3
  %t5 = fptrunc <4 x double> %t12 to <4 x float>
  %ret = shufflevector <4 x float> %t5, <4 x float> undef, 0, 1
  ret <2 x float> %ret
}
=>
define <2 x float> @test_fptrunc(double %f) {
%0:
  %1 = insertelement <2 x double> { poison, 0.000000 }, double %f, i32 0
  %2 = fptrunc <2 x double> %1 to <2 x float>
  ret <2 x float> %2
}
Transformation doesn't verify!
ERROR: Timeout


----------------------------------------
define <2 x double> @test_fpext(float %f) {
%0:
  %t9 = insertelement <4 x float> undef, float %f, i32 0
  %t10 = insertelement <4 x float> %t9, float 0.000000, i32 1
  %t11 = insertelement <4 x float> %t10, float 0.000000, i32 2
  %t12 = insertelement <4 x float> %t11, float 0.000000, i32 3
  %t5 = fpext <4 x float> %t12 to <4 x double>
  %ret = shufflevector <4 x double> %t5, <4 x double> undef, 0, 1
  ret <2 x double> %ret
}
=>
define <2 x double> @test_fpext(float %f) {
%0:
  %1 = insertelement <2 x float> { poison, 0.000000 }, float %f, i32 0
  %2 = fpext <2 x float> %1 to <2 x double>
  ret <2 x double> %2
}
Transformation seems to be correct!


----------------------------------------
define <4 x double> @test_shuffle(<4 x double> %f) {
%0:
  %ret = shufflevector <4 x double> %f, <4 x double> { undef, 1.000000, undef, undef }, 0, 1, 2, 5
  ret <4 x double> %ret
}
=>
define <4 x double> @test_shuffle(<4 x double> %f) {
%0:
  %ret1 = insertelement <4 x double> %f, double 1.000000, i32 3
  ret <4 x double> %ret1
}
Transformation seems to be correct!


----------------------------------------
define <4 x float> @test_select(float %f, float %g) {
%0:
  %a0 = insertelement <4 x float> undef, float %f, i32 0
  %a1 = insertelement <4 x float> %a0, float 1.000000, i32 1
  %a2 = insertelement <4 x float> %a1, float 2.000000, i32 2
  %a3 = insertelement <4 x float> %a2, float 3.000000, i32 3
  %b0 = insertelement <4 x float> undef, float %g, i32 0
  %b1 = insertelement <4 x float> %b0, float 4.000000, i32 1
  %b2 = insertelement <4 x float> %b1, float 5.000000, i32 2
  %b3 = insertelement <4 x float> %b2, float 6.000000, i32 3
  %ret = select <4 x i1> { 1, 0, 0, 1 }, <4 x float> %a3, <4 x float> %b3
  ret <4 x float> %ret
}
=>
define <4 x float> @test_select(float %f, float %g) {
%0:
  %a3 = insertelement <4 x float> { poison, poison, poison, 3.000000 }, float %f, i32 0
  %ret = shufflevector <4 x float> %a3, <4 x float> { poison, 4.000000, 5.000000, poison }, 0, 5, 6, 3
  ret <4 x float> %ret
}
Transformation seems to be correct!


----------------------------------------
define <2 x i64> @PR24922(<2 x i64> %v) {
%0:
  %__constexpr_2 = bitcast <4 x i32> { 15, 15, 15, 15 } to <2 x i64>
  %__constexpr_1 = extractelement <2 x i64> %__constexpr_2, i64 0
  %__constexpr_0 = icmp eq i64 %__constexpr_1, 0
  %__copy_0 = <2 x i1> { %__constexpr_0, 1 }
  %result = select <2 x i1> %__copy_0, <2 x i64> %v, <2 x i64> { 0, 0 }
  ret <2 x i64> %result
}
=>
define <2 x i64> @PR24922(<2 x i64> %v) {
%0:
  %result1 = insertelement <2 x i64> %v, i64 0, i32 0
  ret <2 x i64> %result1
}
Transformation seems to be correct!


----------------------------------------
define <4 x float> @inselt_shuf_no_demand(float %a1, float %a2, float %a3) {
%0:
  %out1 = insertelement <4 x float> undef, float %a1, i32 1
  %out12 = insertelement <4 x float> %out1, float %a2, i32 2
  %out123 = insertelement <4 x float> %out12, float %a3, i32 3
  %shuffle = shufflevector <4 x float> %out123, <4 x float> undef, 0, 4294967295, 4294967295, 4294967295
  ret <4 x float> %shuffle
}
=>
define <4 x float> @inselt_shuf_no_demand(float %a1, float %a2, float %a3) {
%0:
  ret <4 x float> undef
}
Transformation doesn't verify!
ERROR: Timeout


----------------------------------------
define <4 x float> @inselt_shuf_no_demand_commute(float %a1, float %a2, float %a3) {
%0:
  %out1 = insertelement <4 x float> undef, float %a1, i32 1
  %out12 = insertelement <4 x float> %out1, float %a2, i32 2
  %out123 = insertelement <4 x float> %out12, float %a3, i32 3
  %shuffle = shufflevector <4 x float> undef, <4 x float> %out123, 4, 4294967295, 4294967295, 4294967295
  ret <4 x float> %shuffle
}
=>
define <4 x float> @inselt_shuf_no_demand_commute(float %a1, float %a2, float %a3) {
%0:
  ret <4 x float> undef
}
Transformation doesn't verify!
ERROR: Timeout


----------------------------------------
define <4 x i32> @inselt_shuf_no_demand_multiuse(i32 %a0, i32 %a1, <4 x i32> %b) {
%0:
  %out0 = insertelement <4 x i32> undef, i32 %a0, i32 0
  %out01 = insertelement <4 x i32> %out0, i32 %a1, i32 1
  %out012 = insertelement <4 x i32> %out01, i32 %a0, i32 2
  %foo = add <4 x i32> %out012, %b
  %out0123 = insertelement <4 x i32> %foo, i32 %a1, i32 3
  %shuffle = shufflevector <4 x i32> %out0123, <4 x i32> undef, 0, 1, 4294967295, 4294967295
  ret <4 x i32> %shuffle
}
=>
define <4 x i32> @inselt_shuf_no_demand_multiuse(i32 %a0, i32 %a1, <4 x i32> %b) {
%0:
  %out0 = insertelement <4 x i32> undef, i32 %a0, i32 0
  %out01 = insertelement <4 x i32> %out0, i32 %a1, i32 1
  %foo = add <4 x i32> %out01, %b
  %shuffle = shufflevector <4 x i32> %foo, <4 x i32> undef, 0, 1, 4294967295, 4294967295
  ret <4 x i32> %shuffle
}
Transformation doesn't verify!
ERROR: Timeout


----------------------------------------
define <4 x float> @inselt_shuf_no_demand_bogus_insert_index_in_chain(float %a1, float %a2, float %a3, i32 %variable_index) {
%0:
  %out1 = insertelement <4 x float> undef, float %a1, i32 1
  %out12 = insertelement <4 x float> %out1, float %a2, i32 %variable_index
  %out123 = insertelement <4 x float> %out12, float %a3, i32 3
  %shuffle = shufflevector <4 x float> %out123, <4 x float> undef, 0, 4294967295, 4294967295, 4294967295
  ret <4 x float> %shuffle
}
=>
define <4 x float> @inselt_shuf_no_demand_bogus_insert_index_in_chain(float %a1, float %a2, float %a3, i32 %variable_index) {
%0:
  %out12 = insertelement <4 x float> undef, float %a2, i32 %variable_index
  %shuffle = shufflevector <4 x float> %out12, <4 x float> undef, 0, 4294967295, 4294967295, 4294967295
  ret <4 x float> %shuffle
}
Transformation doesn't verify!
ERROR: Timeout


----------------------------------------
define <3 x i8> @shuf_add(<3 x i8> %x) {
%0:
  %bo = add nsw <3 x i8> %x, { 1, 2, 3 }
  %r = shufflevector <3 x i8> %bo, <3 x i8> undef, 1, 4294967295, 2
  ret <3 x i8> %r
}
=>
define <3 x i8> @shuf_add(<3 x i8> %x) {
%0:
  %bo = add <3 x i8> %x, { poison, 2, 3 }
  %r = shufflevector <3 x i8> %bo, <3 x i8> undef, 1, 4294967295, 2
  ret <3 x i8> %r
}
Transformation seems to be correct!


----------------------------------------
define <3 x i8> @shuf_sub(<3 x i8> %x) {
%0:
  %bo = sub nuw <3 x i8> { 1, 2, 3 }, %x
  %r = shufflevector <3 x i8> %bo, <3 x i8> undef, 0, 4294967295, 2
  ret <3 x i8> %r
}
=>
define <3 x i8> @shuf_sub(<3 x i8> %x) {
%0:
  %bo = sub <3 x i8> { 1, poison, 3 }, %x
  %r = shufflevector <3 x i8> %bo, <3 x i8> undef, 0, 4294967295, 2
  ret <3 x i8> %r
}
Transformation seems to be correct!


----------------------------------------
define <3 x i8> @shuf_mul(<3 x i8> %x) {
%0:
  %bo = mul nsw <3 x i8> %x, { 1, 2, 3 }
  %r = shufflevector <3 x i8> %bo, <3 x i8> undef, 0, 2, 0
  ret <3 x i8> %r
}
=>
define <3 x i8> @shuf_mul(<3 x i8> %x) {
%0:
  %bo = mul <3 x i8> %x, { 1, poison, 3 }
  %r = shufflevector <3 x i8> %bo, <3 x i8> undef, 0, 2, 0
  ret <3 x i8> %r
}
Transformation seems to be correct!


----------------------------------------
define <3 x i8> @shuf_and(<3 x i8> %x) {
%0:
  %bo = and <3 x i8> %x, { 1, 2, 3 }
  %r = shufflevector <3 x i8> %bo, <3 x i8> undef, 1, 1, 0
  ret <3 x i8> %r
}
=>
define <3 x i8> @shuf_and(<3 x i8> %x) {
%0:
  %bo = and <3 x i8> %x, { 1, 2, poison }
  %r = shufflevector <3 x i8> %bo, <3 x i8> undef, 1, 1, 0
  ret <3 x i8> %r
}
Transformation seems to be correct!


----------------------------------------
define <3 x i8> @shuf_or(<3 x i8> %x) {
%0:
  %bo = or <3 x i8> %x, { 1, 2, 3 }
  %r = shufflevector <3 x i8> %bo, <3 x i8> undef, 1, 4294967295, 0
  ret <3 x i8> %r
}
=>
define <3 x i8> @shuf_or(<3 x i8> %x) {
%0:
  %bo = or <3 x i8> %x, { 1, 2, poison }
  %r = shufflevector <3 x i8> %bo, <3 x i8> undef, 1, 4294967295, 0
  ret <3 x i8> %r
}
Transformation seems to be correct!


----------------------------------------
define <3 x i8> @shuf_xor(<3 x i8> %x) {
%0:
  %bo = xor <3 x i8> %x, { 1, 2, 3 }
  %r = shufflevector <3 x i8> %bo, <3 x i8> undef, 2, 4294967295, 0
  ret <3 x i8> %r
}
=>
define <3 x i8> @shuf_xor(<3 x i8> %x) {
%0:
  %bo = xor <3 x i8> %x, { 1, poison, 3 }
  %r = shufflevector <3 x i8> %bo, <3 x i8> undef, 2, 4294967295, 0
  ret <3 x i8> %r
}
Transformation seems to be correct!


----------------------------------------
define <3 x i8> @shuf_ashr_const_op0(<3 x i8> %x) {
%0:
  %bo = ashr <3 x i8> { 1, 2, 3 }, %x
  %r = shufflevector <3 x i8> %bo, <3 x i8> undef, 0, 4294967295, 1
  ret <3 x i8> %r
}
=>
define <3 x i8> @shuf_ashr_const_op0(<3 x i8> %x) {
%0:
  %bo = lshr <3 x i8> { 1, 2, 3 }, %x
  %r = shufflevector <3 x i8> %bo, <3 x i8> undef, 0, 4294967295, 1
  ret <3 x i8> %r
}
Transformation seems to be correct!


----------------------------------------
define <3 x float> @shuf_fadd(<3 x float> %x) {
%0:
  %bo = fadd <3 x float> %x, { 1.000000, 2.000000, 3.000000 }
  %r = shufflevector <3 x float> %bo, <3 x float> undef, 4294967295, 1, 0
  ret <3 x float> %r
}
=>
define <3 x float> @shuf_fadd(<3 x float> %x) {
%0:
  %bo = fadd <3 x float> %x, { 1.000000, 2.000000, poison }
  %r = shufflevector <3 x float> %bo, <3 x float> undef, 4294967295, 1, 0
  ret <3 x float> %r
}
Transformation seems to be correct!


----------------------------------------
define <3 x float> @shuf_fsub(<3 x float> %x) {
%0:
  %bo = fsub fast <3 x float> { 1.000000, 2.000000, 3.000000 }, %x
  %r = shufflevector <3 x float> %bo, <3 x float> undef, 4294967295, 0, 2
  ret <3 x float> %r
}
=>
define <3 x float> @shuf_fsub(<3 x float> %x) {
%0:
  %bo = fsub fast <3 x float> { 1.000000, poison, 3.000000 }, %x
  %r = shufflevector <3 x float> %bo, <3 x float> undef, 4294967295, 0, 2
  ret <3 x float> %r
}
Transformation doesn't verify!
ERROR: Timeout


----------------------------------------
define <3 x float> @shuf_fmul(<3 x float> %x) {
%0:
  %bo = fmul reassoc <3 x float> %x, { 1.000000, 2.000000, 3.000000 }
  %r = shufflevector <3 x float> %bo, <3 x float> undef, 4294967295, 1, 0
  ret <3 x float> %r
}
=>
define <3 x float> @shuf_fmul(<3 x float> %x) {
%0:
  %bo = fmul reassoc <3 x float> %x, { 1.000000, 2.000000, poison }
  %r = shufflevector <3 x float> %bo, <3 x float> undef, 4294967295, 1, 0
  ret <3 x float> %r
}
Transformation doesn't verify!
ERROR: Timeout


----------------------------------------
define <3 x float> @shuf_fdiv_const_op0(<3 x float> %x) {
%0:
  %bo = fdiv ninf reassoc <3 x float> { 1.000000, 2.000000, 3.000000 }, %x
  %r = shufflevector <3 x float> %bo, <3 x float> undef, 4294967295, 0, 2
  ret <3 x float> %r
}
=>
define <3 x float> @shuf_fdiv_const_op0(<3 x float> %x) {
%0:
  %bo = fdiv ninf reassoc <3 x float> { 1.000000, poison, 3.000000 }, %x
  %r = shufflevector <3 x float> %bo, <3 x float> undef, 4294967295, 0, 2
  ret <3 x float> %r
}
Transformation seems to be correct!


----------------------------------------
define <3 x float> @shuf_fdiv_const_op1(<3 x float> %x) {
%0:
  %bo = fdiv nnan ninf <3 x float> %x, { 1.000000, 2.000000, 3.000000 }
  %r = shufflevector <3 x float> %bo, <3 x float> undef, 4294967295, 1, 0
  ret <3 x float> %r
}
=>
define <3 x float> @shuf_fdiv_const_op1(<3 x float> %x) {
%0:
  %bo = fdiv nnan ninf <3 x float> %x, { 1.000000, 2.000000, poison }
  %r = shufflevector <3 x float> %bo, <3 x float> undef, 4294967295, 1, 0
  ret <3 x float> %r
}
Transformation doesn't verify!
ERROR: Timeout


----------------------------------------
define <3 x float> @shuf_frem_const_op0(<3 x float> %x) {
%0:
  %bo = frem nnan <3 x float> { 1.000000, 2.000000, 3.000000 }, %x
  %r = shufflevector <3 x float> %bo, <3 x float> undef, 4294967295, 2, 0
  ret <3 x float> %r
}
=>
define <3 x float> @shuf_frem_const_op0(<3 x float> %x) {
%0:
  %bo = frem nnan <3 x float> { 1.000000, poison, 3.000000 }, %x
  %r = shufflevector <3 x float> %bo, <3 x float> undef, 4294967295, 2, 0
  ret <3 x float> %r
}
Transformation doesn't verify!
ERROR: Timeout


----------------------------------------
define <3 x float> @shuf_frem_const_op1(<3 x float> %x) {
%0:
  %bo = frem ninf reassoc <3 x float> %x, { 1.000000, 2.000000, 3.000000 }
  %r = shufflevector <3 x float> %bo, <3 x float> undef, 1, 4294967295, 2
  ret <3 x float> %r
}
=>
define <3 x float> @shuf_frem_const_op1(<3 x float> %x) {
%0:
  %bo = frem ninf reassoc <3 x float> %x, { poison, 2.000000, 3.000000 }
  %r = shufflevector <3 x float> %bo, <3 x float> undef, 1, 4294967295, 2
  ret <3 x float> %r
}
Transformation doesn't verify!
ERROR: Timeout


----------------------------------------
define * @gep_splat_base_w_s_idx(* %base) {
%0:
  %basevec1 = insertelement <2 x *> undef, * %base, i32 0
  %basevec2 = shufflevector <2 x *> %basevec1, <2 x *> undef, 0, 0
  %gep = gep <2 x *> %basevec2, 4 x i64 1
  %ee = extractelement <2 x *> %gep, i32 1
  ret * %ee
}
=>
define * @gep_splat_base_w_s_idx(* %base) {
%0:
  %basevec2 = insertelement <2 x *> undef, * %base, i32 1
  %gep = gep <2 x *> %basevec2, 4 x i64 1
  %ee = extractelement <2 x *> %gep, i32 1
  ret * %ee
}
Transformation seems to be correct!


----------------------------------------
define * @gep_splat_base_w_cv_idx(* %base) {
%0:
  %basevec1 = insertelement <2 x *> undef, * %base, i32 0
  %basevec2 = shufflevector <2 x *> %basevec1, <2 x *> undef, 0, 0
  %gep = gep <2 x *> %basevec2, 4 x <2 x i64> { 0, 1 }
  %ee = extractelement <2 x *> %gep, i32 1
  ret * %ee
}
=>
define * @gep_splat_base_w_cv_idx(* %base) {
%0:
  %basevec2 = insertelement <2 x *> undef, * %base, i32 1
  %gep = gep <2 x *> %basevec2, 4 x <2 x i64> { poison, 1 }
  %ee = extractelement <2 x *> %gep, i32 1
  ret * %ee
}
Transformation seems to be correct!


----------------------------------------
define * @gep_splat_base_w_vidx(* %base, <2 x i64> %idxvec) {
%0:
  %basevec1 = insertelement <2 x *> undef, * %base, i32 0
  %basevec2 = shufflevector <2 x *> %basevec1, <2 x *> undef, 0, 0
  %gep = gep <2 x *> %basevec2, 4 x <2 x i64> %idxvec
  %ee = extractelement <2 x *> %gep, i32 1
  ret * %ee
}
=>
define * @gep_splat_base_w_vidx(* %base, <2 x i64> %idxvec) {
%0:
  %basevec2 = insertelement <2 x *> undef, * %base, i32 1
  %gep = gep <2 x *> %basevec2, 4 x <2 x i64> %idxvec
  %ee = extractelement <2 x *> %gep, i32 1
  ret * %ee
}
Transformation seems to be correct!


----------------------------------------
@GLOBAL = global 4 bytes, align 4

define * @gep_cvbase_w_s_idx(<2 x *> %base, i64 %raw_addr) {
%0:
  %__copy_0 = <2 x *> { @GLOBAL, @GLOBAL }
  %gep = gep <2 x *> %__copy_0, 4 x i64 %raw_addr
  %ee = extractelement <2 x *> %gep, i32 1
  ret * %ee
}
=>
@GLOBAL = global 4 bytes, align 4

define * @gep_cvbase_w_s_idx(<2 x *> %base, i64 %raw_addr) {
%0:
  %__copy_0 = <2 x *> { poison, @GLOBAL }
  %gep = gep <2 x *> %__copy_0, 4 x i64 %raw_addr
  %ee = extractelement <2 x *> %gep, i32 1
  ret * %ee
}
Transformation seems to be correct!


----------------------------------------
@GLOBAL = global 4 bytes, align 4

define * @gep_cvbase_w_cv_idx(<2 x *> %base, i64 %raw_addr) {
%0:
  %__copy_0 = <2 x *> { @GLOBAL, @GLOBAL }
  %gep = gep <2 x *> %__copy_0, 4 x <2 x i64> { 0, 1 }
  %ee = extractelement <2 x *> %gep, i32 1
  ret * %ee
}
=>
@GLOBAL = global 4 bytes, align 4

define * @gep_cvbase_w_cv_idx(<2 x *> %base, i64 %raw_addr) {
%0:
  %__constexpr_0 = gep inbounds * @GLOBAL, 4 x i64 1
  ret * %__constexpr_0
}
Transformation seems to be correct!


----------------------------------------
define * @gep_sbase_w_cv_idx(* %base) {
%0:
  %gep = gep * %base, 4 x <2 x i64> { 0, 1 }
  %ee = extractelement <2 x *> %gep, i32 1
  ret * %ee
}
=>
define * @gep_sbase_w_cv_idx(* %base) {
%0:
  %gep = gep * %base, 4 x <2 x i64> { poison, 1 }
  %ee = extractelement <2 x *> %gep, i32 1
  ret * %ee
}
Transformation seems to be correct!


----------------------------------------
define * @gep_sbase_w_splat_idx(* %base, i64 %idx) {
%0:
  %idxvec1 = insertelement <2 x i64> undef, i64 %idx, i32 0
  %idxvec2 = shufflevector <2 x i64> %idxvec1, <2 x i64> undef, 0, 0
  %gep = gep * %base, 4 x <2 x i64> %idxvec2
  %ee = extractelement <2 x *> %gep, i32 1
  ret * %ee
}
=>
define * @gep_sbase_w_splat_idx(* %base, i64 %idx) {
%0:
  %idxvec2 = insertelement <2 x i64> undef, i64 %idx, i32 1
  %gep = gep * %base, 4 x <2 x i64> %idxvec2
  %ee = extractelement <2 x *> %gep, i32 1
  ret * %ee
}
Transformation seems to be correct!


----------------------------------------
define * @gep_splat_both(* %base, i64 %idx) {
%0:
  %basevec1 = insertelement <2 x *> undef, * %base, i32 0
  %basevec2 = shufflevector <2 x *> %basevec1, <2 x *> undef, 0, 0
  %idxvec1 = insertelement <2 x i64> undef, i64 %idx, i32 0
  %idxvec2 = shufflevector <2 x i64> %idxvec1, <2 x i64> undef, 0, 0
  %gep = gep <2 x *> %basevec2, 4 x <2 x i64> %idxvec2
  %ee = extractelement <2 x *> %gep, i32 1
  ret * %ee
}
=>
define * @gep_splat_both(* %base, i64 %idx) {
%0:
  %basevec2 = insertelement <2 x *> undef, * %base, i32 1
  %idxvec2 = insertelement <2 x i64> undef, i64 %idx, i32 1
  %gep = gep <2 x *> %basevec2, 4 x <2 x i64> %idxvec2
  %ee = extractelement <2 x *> %gep, i32 1
  ret * %ee
}
Transformation seems to be correct!


----------------------------------------
define <2 x *> @gep_all_lanes_undef(* %base, i64 %idx) {
%0:
  %basevec = insertelement <2 x *> undef, * %base, i32 0
  %idxvec = insertelement <2 x i64> undef, i64 %idx, i32 1
  %gep = gep <2 x *> %basevec, 4 x <2 x i64> %idxvec
  ret <2 x *> %gep
}
=>
define <2 x *> @gep_all_lanes_undef(* %base, i64 %idx) {
%0:
  ret <2 x *> undef
}
Transformation doesn't verify!
ERROR: Value mismatch

Example:
* %base = pointer(non-local, block_id=1, offset=0)
i64 %idx = poison

Source:
<2 x *> %basevec = < pointer(non-local, block_id=1, offset=0), null >
<2 x i64> %idxvec = < any, poison >
<2 x *> %gep = < pointer(non-local, block_id=1, offset=0)	[based on undef value], poison >

SOURCE MEMORY STATE
===================
NON-LOCAL BLOCKS:
Block 0 >	size: 0	align: 1	alloc type: 0
Block 1 >	size: 0	align: 2	alloc type: 0

Target:
Source value: < pointer(non-local, block_id=1, offset=0), poison >
Target value: < pointer(non-local, block_id=0, offset=268435456), pointer(non-local, block_id=0, offset=18014398509481984) >


------------------- SMT STATS -------------------
Num queries: 116
Num invalid: 0
Num skips:   0
Num trivial: 128 (52.5%)
Num timeout: 11 (9.5%)
Num errors:  0 (0.0%)
Num SAT:     38 (32.8%)
Num UNSAT:   67 (57.8%)
Alive2: Transform doesn't verify; aborting!

stderr:

+ : 'RUN: at line 2'
+ /home/nlopes/alive2/build/opt-alive.sh -instcombine -S
+ /home/nlopes/llvm/build/bin/FileCheck /home/nlopes/llvm/llvm/test/Transforms/InstCombine/vec_demanded_elts.ll

FileCheck error: '<stdin>' is empty.
FileCheck command line:  /home/nlopes/llvm/build/bin/FileCheck /home/nlopes/llvm/llvm/test/Transforms/InstCombine/vec_demanded_elts.ll

 

<-- Back