Test source: git
Source: <stdin> ---------------------------------------- define <2 x i1> @sge(<2 x i8> %x) { %0: %cmp = icmp sge <2 x i8> %x, { 129, 127 } ret <2 x i1> %cmp } => define <2 x i1> @sge(<2 x i8> %x) { %0: %cmp = icmp sgt <2 x i8> %x, { 128, 126 } ret <2 x i1> %cmp } Transformation seems to be correct! ---------------------------------------- define <2 x i1> @uge(<2 x i8> %x) { %0: %cmp = icmp uge <2 x i8> %x, { 255, 1 } ret <2 x i1> %cmp } => define <2 x i1> @uge(<2 x i8> %x) { %0: %cmp = icmp ugt <2 x i8> %x, { 254, 0 } ret <2 x i1> %cmp } Transformation seems to be correct! ---------------------------------------- define <2 x i1> @sle(<2 x i8> %x) { %0: %cmp = icmp sle <2 x i8> %x, { 126, 128 } ret <2 x i1> %cmp } => define <2 x i1> @sle(<2 x i8> %x) { %0: %cmp = icmp slt <2 x i8> %x, { 127, 129 } ret <2 x i1> %cmp } Transformation seems to be correct! ---------------------------------------- define <2 x i1> @ule(<2 x i8> %x) { %0: %cmp = icmp ule <2 x i8> %x, { 254, 0 } ret <2 x i1> %cmp } => define <2 x i1> @ule(<2 x i8> %x) { %0: %cmp = icmp ult <2 x i8> %x, { 255, 1 } ret <2 x i1> %cmp } Transformation seems to be correct! ---------------------------------------- define <2 x i1> @ult_min_signed_value(<2 x i8> %x) { %0: %cmp = icmp ult <2 x i8> %x, { 128, 128 } ret <2 x i1> %cmp } => define <2 x i1> @ult_min_signed_value(<2 x i8> %x) { %0: %cmp = icmp sgt <2 x i8> %x, { 255, 255 } ret <2 x i1> %cmp } Transformation seems to be correct! ---------------------------------------- define <2 x i1> @sge_zero(<2 x i8> %x) { %0: %cmp = icmp sge <2 x i8> %x, { 0, 0 } ret <2 x i1> %cmp } => define <2 x i1> @sge_zero(<2 x i8> %x) { %0: %cmp = icmp sgt <2 x i8> %x, { 255, 255 } ret <2 x i1> %cmp } Transformation seems to be correct! ---------------------------------------- define <2 x i1> @uge_zero(<2 x i8> %x) { %0: %cmp = icmp uge <2 x i8> %x, { 0, 0 } ret <2 x i1> %cmp } => define <2 x i1> @uge_zero(<2 x i8> %x) { %0: ret <2 x i1> { 1, 1 } } Transformation seems to be correct! ---------------------------------------- define <2 x i1> @sle_zero(<2 x i8> %x) { %0: %cmp = icmp sle <2 x i8> %x, { 0, 0 } ret <2 x i1> %cmp } => define <2 x i1> @sle_zero(<2 x i8> %x) { %0: %cmp = icmp slt <2 x i8> %x, { 1, 1 } ret <2 x i1> %cmp } Transformation seems to be correct! ---------------------------------------- define <2 x i1> @ule_zero(<2 x i8> %x) { %0: %cmp = icmp ule <2 x i8> %x, { 0, 0 } ret <2 x i1> %cmp } => define <2 x i1> @ule_zero(<2 x i8> %x) { %0: %cmp = icmp eq <2 x i8> %x, { 0, 0 } ret <2 x i1> %cmp } Transformation seems to be correct! ---------------------------------------- define <3 x i1> @sge_weird(<3 x i3> %x) { %0: %cmp = icmp sge <3 x i3> %x, { 5, 3, 0 } ret <3 x i1> %cmp } => define <3 x i1> @sge_weird(<3 x i3> %x) { %0: %cmp = icmp sgt <3 x i3> %x, { 4, 2, 7 } ret <3 x i1> %cmp } Transformation seems to be correct! ---------------------------------------- define <3 x i1> @uge_weird(<3 x i3> %x) { %0: %cmp = icmp uge <3 x i3> %x, { 7, 1, 2 } ret <3 x i1> %cmp } => define <3 x i1> @uge_weird(<3 x i3> %x) { %0: %cmp = icmp ugt <3 x i3> %x, { 6, 0, 1 } ret <3 x i1> %cmp } Transformation seems to be correct! ---------------------------------------- define <3 x i1> @sle_weird(<3 x i3> %x) { %0: %cmp = icmp sle <3 x i3> %x, { 2, 4, 0 } ret <3 x i1> %cmp } => define <3 x i1> @sle_weird(<3 x i3> %x) { %0: %cmp = icmp slt <3 x i3> %x, { 3, 5, 1 } ret <3 x i1> %cmp } Transformation seems to be correct! ---------------------------------------- define <3 x i1> @ule_weird(<3 x i3> %x) { %0: %cmp = icmp ule <3 x i3> %x, { 6, 0, 1 } ret <3 x i1> %cmp } => define <3 x i1> @ule_weird(<3 x i3> %x) { %0: %cmp = icmp ult <3 x i3> %x, { 7, 1, 2 } ret <3 x i1> %cmp } Transformation seems to be correct! ---------------------------------------- define <2 x i1> @sge_min(<2 x i3> %x) { %0: %cmp = icmp sge <2 x i3> %x, { 4, 1 } ret <2 x i1> %cmp } => define <2 x i1> @sge_min(<2 x i3> %x) { %0: %cmp = icmp sge <2 x i3> %x, { 4, 1 } ret <2 x i1> %cmp } Transformation seems to be correct! ---------------------------------------- define <2 x i1> @uge_min(<2 x i3> %x) { %0: %cmp = icmp uge <2 x i3> %x, { 1, 0 } ret <2 x i1> %cmp } => define <2 x i1> @uge_min(<2 x i3> %x) { %0: %cmp = icmp uge <2 x i3> %x, { 1, 0 } ret <2 x i1> %cmp } Transformation seems to be correct! ---------------------------------------- define <2 x i1> @sle_max(<2 x i3> %x) { %0: %cmp = icmp sle <2 x i3> %x, { 1, 3 } ret <2 x i1> %cmp } => define <2 x i1> @sle_max(<2 x i3> %x) { %0: %cmp = icmp sle <2 x i3> %x, { 1, 3 } ret <2 x i1> %cmp } Transformation seems to be correct! ---------------------------------------- define <2 x i1> @ule_max(<2 x i3> %x) { %0: %cmp = icmp ule <2 x i3> %x, { 7, 1 } ret <2 x i1> %cmp } => define <2 x i1> @ule_max(<2 x i3> %x) { %0: %cmp = icmp ule <2 x i3> %x, { 7, 1 } ret <2 x i1> %cmp } Transformation seems to be correct! ---------------------------------------- define <2 x i1> @PR27756_1(<2 x i8> %a) { %0: %__constexpr_0 = bitcast <2 x i4> { 1, 2 } to i8 %__copy_0 = <2 x i8> { %__constexpr_0, 0 } %cmp = icmp sle <2 x i8> %a, %__copy_0 ret <2 x i1> %cmp } => define <2 x i1> @PR27756_1(<2 x i8> %a) { %0: %cmp = icmp slt <2 x i8> %a, { 34, 1 } ret <2 x i1> %cmp } Transformation seems to be correct! ---------------------------------------- define <3 x i1> @PR27756_2(<3 x i8> %a) { %0: %cmp = icmp sle <3 x i8> %a, { 42, undef, 0 } ret <3 x i1> %cmp } => define <3 x i1> @PR27756_2(<3 x i8> %a) { %0: %cmp = icmp slt <3 x i8> %a, { 43, 43, 1 } ret <3 x i1> %cmp } Transformation seems to be correct! ---------------------------------------- define <3 x i1> @PR27756_3(<3 x i8> %a) { %0: %cmp = icmp sge <3 x i8> %a, { undef, 1, 42 } ret <3 x i1> %cmp } => define <3 x i1> @PR27756_3(<3 x i8> %a) { %0: %cmp = icmp sgt <3 x i8> %a, { 0, 0, 41 } ret <3 x i1> %cmp } Transformation seems to be correct! ---------------------------------------- @someglobal = global 4 bytes, align 4 define <2 x i1> @PR27786(<2 x i8> %a) { %0: %__constexpr_1 = ptrtoint * @someglobal to i16 %__constexpr_0 = bitcast i16 %__constexpr_1 to <2 x i8> %cmp = icmp sle <2 x i8> %a, %__constexpr_0 ret <2 x i1> %cmp } => @someglobal = global 4 bytes, align 4 define <2 x i1> @PR27786(<2 x i8> %a) { %0: %__constexpr_1 = ptrtoint * @someglobal to i16 %__constexpr_0 = bitcast i16 %__constexpr_1 to <2 x i8> %cmp = icmp sle <2 x i8> %a, %__constexpr_0 ret <2 x i1> %cmp } Transformation seems to be correct! ---------------------------------------- define <4 x i1> @same_shuffle_inputs_icmp(<4 x i8> %x, <4 x i8> %y) { %0: %shufx = shufflevector <4 x i8> %x, <4 x i8> undef, 3, 3, 2, 0 %shufy = shufflevector <4 x i8> %y, <4 x i8> undef, 3, 3, 2, 0 %cmp = icmp sgt <4 x i8> %shufx, %shufy ret <4 x i1> %cmp } => define <4 x i1> @same_shuffle_inputs_icmp(<4 x i8> %x, <4 x i8> %y) { %0: %1 = icmp sgt <4 x i8> %x, %y %cmp = shufflevector <4 x i1> %1, <4 x i1> undef, 3, 3, 2, 0 ret <4 x i1> %cmp } Transformation seems to be correct! ---------------------------------------- define <5 x i1> @same_shuffle_inputs_fcmp(<4 x float> %x, <4 x float> %y) { %0: %shufx = shufflevector <4 x float> %x, <4 x float> undef, 0, 1, 3, 2, 0 %shufy = shufflevector <4 x float> %y, <4 x float> undef, 0, 1, 3, 2, 0 %cmp = fcmp oeq <5 x float> %shufx, %shufy ret <5 x i1> %cmp } => define <5 x i1> @same_shuffle_inputs_fcmp(<4 x float> %x, <4 x float> %y) { %0: %1 = fcmp oeq <4 x float> %x, %y %cmp = shufflevector <4 x i1> %1, <4 x i1> undef, 0, 1, 3, 2, 0 ret <5 x i1> %cmp } Transformation seems to be correct! ---------------------------------------- define <4 x i1> @same_shuffle_inputs_icmp_extra_use1(<4 x i8> %x, <4 x i8> %y) { %0: %shufx = shufflevector <4 x i8> %x, <4 x i8> undef, 3, 3, 3, 3 %shufy = shufflevector <4 x i8> %y, <4 x i8> undef, 3, 3, 3, 3 %cmp = icmp ugt <4 x i8> %shufx, %shufy call void @use_v4i8(<4 x i8> %shufx) ret <4 x i1> %cmp } => define <4 x i1> @same_shuffle_inputs_icmp_extra_use1(<4 x i8> %x, <4 x i8> %y) { %0: %shufx = shufflevector <4 x i8> %x, <4 x i8> undef, 3, 3, 3, 3 %1 = icmp ugt <4 x i8> %x, %y %cmp = shufflevector <4 x i1> %1, <4 x i1> undef, 3, 3, 3, 3 call void @use_v4i8(<4 x i8> %shufx) ret <4 x i1> %cmp } Transformation seems to be correct! ---------------------------------------- define <2 x i1> @same_shuffle_inputs_icmp_extra_use2(<4 x i8> %x, <4 x i8> %y) { %0: %shufx = shufflevector <4 x i8> %x, <4 x i8> undef, 3, 2 %shufy = shufflevector <4 x i8> %y, <4 x i8> undef, 3, 2 %cmp = icmp eq <2 x i8> %shufx, %shufy call void @use_v2i8(<2 x i8> %shufy) ret <2 x i1> %cmp } => define <2 x i1> @same_shuffle_inputs_icmp_extra_use2(<4 x i8> %x, <4 x i8> %y) { %0: %shufy = shufflevector <4 x i8> %y, <4 x i8> undef, 3, 2 %1 = icmp eq <4 x i8> %x, %y %cmp = shufflevector <4 x i1> %1, <4 x i1> undef, 3, 2 call void @use_v2i8(<2 x i8> %shufy) ret <2 x i1> %cmp } Transformation seems to be correct! ---------------------------------------- define <2 x i1> @same_shuffle_inputs_icmp_extra_use3(<4 x i8> %x, <4 x i8> %y) { %0: %shufx = shufflevector <4 x i8> %x, <4 x i8> undef, 0, 0 %shufy = shufflevector <4 x i8> %y, <4 x i8> undef, 0, 0 %cmp = icmp eq <2 x i8> %shufx, %shufy call void @use_v2i8(<2 x i8> %shufx) call void @use_v2i8(<2 x i8> %shufy) ret <2 x i1> %cmp } => define <2 x i1> @same_shuffle_inputs_icmp_extra_use3(<4 x i8> %x, <4 x i8> %y) { %0: %shufx = shufflevector <4 x i8> %x, <4 x i8> undef, 0, 0 %shufy = shufflevector <4 x i8> %y, <4 x i8> undef, 0, 0 %cmp = icmp eq <2 x i8> %shufx, %shufy call void @use_v2i8(<2 x i8> %shufx) call void @use_v2i8(<2 x i8> %shufy) ret <2 x i1> %cmp } Transformation seems to be correct! ---------------------------------------- define <4 x i1> @splat_icmp(<4 x i8> %x) { %0: %splatx = shufflevector <4 x i8> %x, <4 x i8> undef, 3, 3, 3, 3 %cmp = icmp sgt <4 x i8> %splatx, { 42, 42, 42, 42 } ret <4 x i1> %cmp } => define <4 x i1> @splat_icmp(<4 x i8> %x) { %0: %1 = icmp sgt <4 x i8> %x, { 42, 42, 42, 42 } %cmp = shufflevector <4 x i1> %1, <4 x i1> undef, 3, 3, 3, 3 ret <4 x i1> %cmp } Transformation seems to be correct! ---------------------------------------- define <4 x i1> @splat_icmp_undef(<4 x i8> %x) { %0: %splatx = shufflevector <4 x i8> %x, <4 x i8> undef, 2, 4294967295, 4294967295, 2 %cmp = icmp ult <4 x i8> %splatx, { undef, 42, undef, 42 } ret <4 x i1> %cmp } => define <4 x i1> @splat_icmp_undef(<4 x i8> %x) { %0: %1 = icmp ult <4 x i8> %x, { 42, 42, 42, 42 } %cmp = shufflevector <4 x i1> %1, <4 x i1> undef, 2, 2, 2, 2 ret <4 x i1> %cmp } Transformation doesn't verify! ERROR: Target is more poisonous than source Example: <4 x i8> %x = < poison, poison, poison, poison > Source: <4 x i8> %splatx = < poison, undef, undef, poison > <4 x i1> %cmp = < poison, undef, undef, poison > Target: <4 x i1> %1 = < poison, poison, poison, poison > <4 x i1> %cmp = < poison, poison, poison, poison > Source value: < poison, undef, undef, poison > Target value: < poison, poison, poison, poison > ------------------- SMT STATS ------------------- Num queries: 67 Num invalid: 0 Num skips: 0 Num trivial: 77 (53.5%) Num timeout: 0 (0.0%) Num errors: 0 (0.0%) Num SAT: 29 (43.3%) Num UNSAT: 38 (56.7%)
+ : '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/icmp-vec.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/icmp-vec.ll