Test Failure: Transforms/InstCombine/funnel.ll

Test source: git

Log:

Source: <stdin>

----------------------------------------
define i32 @fshl_i32_constant(i32 %x, i32 %y) {
%0:
  %shl = shl i32 %x, 11
  %shr = lshr i32 %y, 21
  %r = or i32 %shr, %shl
  ret i32 %r
}
=>
define i32 @fshl_i32_constant(i32 %x, i32 %y) {
%0:
  %r = fshl i32 %x, i32 %y, i32 11
  ret i32 %r
}
Transformation seems to be correct!


----------------------------------------
define i42 @fshr_i42_constant(i42 %x, i42 %y) {
%0:
  %shr = lshr i42 %x, 31
  %shl = shl i42 %y, 11
  %r = or i42 %shr, %shl
  ret i42 %r
}
=>
define i42 @fshr_i42_constant(i42 %x, i42 %y) {
%0:
  %r = fshl i42 %y, i42 %x, i42 11
  ret i42 %r
}
Transformation seems to be correct!


----------------------------------------
define <2 x i16> @fshl_v2i16_constant_splat(<2 x i16> %x, <2 x i16> %y) {
%0:
  %shl = shl <2 x i16> %x, { 1, 1 }
  %shr = lshr <2 x i16> %y, { 15, 15 }
  %r = or <2 x i16> %shl, %shr
  ret <2 x i16> %r
}
=>
define <2 x i16> @fshl_v2i16_constant_splat(<2 x i16> %x, <2 x i16> %y) {
%0:
  %r = fshl <2 x i16> %x, <2 x i16> %y, <2 x i16> { 1, 1 }
  ret <2 x i16> %r
}
Transformation doesn't verify!
ERROR: Timeout


----------------------------------------
define <2 x i16> @fshl_v2i16_constant_splat_undef0(<2 x i16> %x, <2 x i16> %y) {
%0:
  %shl = shl <2 x i16> %x, { undef, 1 }
  %shr = lshr <2 x i16> %y, { 15, 15 }
  %r = or <2 x i16> %shl, %shr
  ret <2 x i16> %r
}
=>
define <2 x i16> @fshl_v2i16_constant_splat_undef0(<2 x i16> %x, <2 x i16> %y) {
%0:
  %r = fshl <2 x i16> %x, <2 x i16> %y, <2 x i16> { 1, 1 }
  ret <2 x i16> %r
}
Transformation doesn't verify!
ERROR: Timeout


----------------------------------------
define <2 x i16> @fshl_v2i16_constant_splat_undef1(<2 x i16> %x, <2 x i16> %y) {
%0:
  %shl = shl <2 x i16> %x, { 1, 1 }
  %shr = lshr <2 x i16> %y, { 15, undef }
  %r = or <2 x i16> %shl, %shr
  ret <2 x i16> %r
}
=>
define <2 x i16> @fshl_v2i16_constant_splat_undef1(<2 x i16> %x, <2 x i16> %y) {
%0:
  %r = fshl <2 x i16> %x, <2 x i16> %y, <2 x i16> { 1, 1 }
  ret <2 x i16> %r
}
Transformation doesn't verify!
ERROR: Timeout


----------------------------------------
define <2 x i17> @fshr_v2i17_constant_splat(<2 x i17> %x, <2 x i17> %y) {
%0:
  %shr = lshr <2 x i17> %x, { 12, 12 }
  %shl = shl <2 x i17> %y, { 5, 5 }
  %r = or <2 x i17> %shr, %shl
  ret <2 x i17> %r
}
=>
define <2 x i17> @fshr_v2i17_constant_splat(<2 x i17> %x, <2 x i17> %y) {
%0:
  %r = fshl <2 x i17> %y, <2 x i17> %x, <2 x i17> { 5, 5 }
  ret <2 x i17> %r
}
Transformation doesn't verify!
ERROR: Timeout


----------------------------------------
define <2 x i17> @fshr_v2i17_constant_splat_undef0(<2 x i17> %x, <2 x i17> %y) {
%0:
  %shr = lshr <2 x i17> %x, { 12, undef }
  %shl = shl <2 x i17> %y, { undef, 5 }
  %r = or <2 x i17> %shr, %shl
  ret <2 x i17> %r
}
=>
define <2 x i17> @fshr_v2i17_constant_splat_undef0(<2 x i17> %x, <2 x i17> %y) {
%0:
  %r = fshl <2 x i17> %y, <2 x i17> %x, <2 x i17> { 5, 5 }
  ret <2 x i17> %r
}
Transformation seems to be correct!


----------------------------------------
define <2 x i17> @fshr_v2i17_constant_splat_undef1(<2 x i17> %x, <2 x i17> %y) {
%0:
  %shr = lshr <2 x i17> %x, { 12, undef }
  %shl = shl <2 x i17> %y, { 5, undef }
  %r = or <2 x i17> %shr, %shl
  ret <2 x i17> %r
}
=>
define <2 x i17> @fshr_v2i17_constant_splat_undef1(<2 x i17> %x, <2 x i17> %y) {
%0:
  %r = fshl <2 x i17> %y, <2 x i17> %x, <2 x i17> { 5, 5 }
  ret <2 x i17> %r
}
Transformation doesn't verify!
ERROR: Timeout


----------------------------------------
define <2 x i32> @fshr_v2i32_constant_nonsplat(<2 x i32> %x, <2 x i32> %y) {
%0:
  %shr = lshr <2 x i32> %x, { 17, 19 }
  %shl = shl <2 x i32> %y, { 15, 13 }
  %r = or <2 x i32> %shl, %shr
  ret <2 x i32> %r
}
=>
define <2 x i32> @fshr_v2i32_constant_nonsplat(<2 x i32> %x, <2 x i32> %y) {
%0:
  %r = fshl <2 x i32> %y, <2 x i32> %x, <2 x i32> { 15, 13 }
  ret <2 x i32> %r
}
Transformation doesn't verify!
ERROR: Timeout


----------------------------------------
define <2 x i32> @fshr_v2i32_constant_nonsplat_undef0(<2 x i32> %x, <2 x i32> %y) {
%0:
  %shr = lshr <2 x i32> %x, { undef, 19 }
  %shl = shl <2 x i32> %y, { 15, 13 }
  %r = or <2 x i32> %shl, %shr
  ret <2 x i32> %r
}
=>
define <2 x i32> @fshr_v2i32_constant_nonsplat_undef0(<2 x i32> %x, <2 x i32> %y) {
%0:
  %r = fshl <2 x i32> %y, <2 x i32> %x, <2 x i32> { 0, 13 }
  ret <2 x i32> %r
}
Transformation doesn't verify!
ERROR: Timeout


----------------------------------------
define <2 x i32> @fshr_v2i32_constant_nonsplat_undef1(<2 x i32> %x, <2 x i32> %y) {
%0:
  %shr = lshr <2 x i32> %x, { 17, 19 }
  %shl = shl <2 x i32> %y, { 15, undef }
  %r = or <2 x i32> %shl, %shr
  ret <2 x i32> %r
}
=>
define <2 x i32> @fshr_v2i32_constant_nonsplat_undef1(<2 x i32> %x, <2 x i32> %y) {
%0:
  %r = fshl <2 x i32> %y, <2 x i32> %x, <2 x i32> { 15, 0 }
  ret <2 x i32> %r
}
Transformation doesn't verify!
ERROR: Timeout


----------------------------------------
define <2 x i36> @fshl_v2i36_constant_nonsplat(<2 x i36> %x, <2 x i36> %y) {
%0:
  %shl = shl <2 x i36> %x, { 21, 11 }
  %shr = lshr <2 x i36> %y, { 15, 25 }
  %r = or <2 x i36> %shl, %shr
  ret <2 x i36> %r
}
=>
define <2 x i36> @fshl_v2i36_constant_nonsplat(<2 x i36> %x, <2 x i36> %y) {
%0:
  %r = fshl <2 x i36> %x, <2 x i36> %y, <2 x i36> { 21, 11 }
  ret <2 x i36> %r
}
Transformation doesn't verify!
ERROR: Timeout


----------------------------------------
define <3 x i36> @fshl_v3i36_constant_nonsplat_undef0(<3 x i36> %x, <3 x i36> %y) {
%0:
  %shl = shl <3 x i36> %x, { 21, 11, undef }
  %shr = lshr <3 x i36> %y, { 15, 25, undef }
  %r = or <3 x i36> %shl, %shr
  ret <3 x i36> %r
}
=>
define <3 x i36> @fshl_v3i36_constant_nonsplat_undef0(<3 x i36> %x, <3 x i36> %y) {
%0:
  %r = fshl <3 x i36> %x, <3 x i36> %y, <3 x i36> { 21, 11, 0 }
  ret <3 x i36> %r
}
Transformation doesn't verify!
ERROR: Timeout


----------------------------------------
define i64 @fshl_sub_mask(i64 %x, i64 %y, i64 %a) {
%0:
  %mask = and i64 %a, 63
  %shl = shl i64 %x, %mask
  %sub = sub nsw nuw i64 64, %mask
  %shr = lshr i64 %y, %sub
  %r = or i64 %shl, %shr
  ret i64 %r
}
=>
define i64 @fshl_sub_mask(i64 %x, i64 %y, i64 %a) {
%0:
  %r = fshl i64 %x, i64 %y, i64 %a
  ret i64 %r
}
Transformation seems to be correct!


----------------------------------------
define i64 @fshr_sub_mask(i64 %x, i64 %y, i64 %a) {
%0:
  %mask = and i64 %a, 63
  %shr = lshr i64 %x, %mask
  %sub = sub nsw nuw i64 64, %mask
  %shl = shl i64 %y, %sub
  %r = or i64 %shl, %shr
  ret i64 %r
}
=>
define i64 @fshr_sub_mask(i64 %x, i64 %y, i64 %a) {
%0:
  %r = fshr i64 %y, i64 %x, i64 %a
  ret i64 %r
}
Transformation seems to be correct!


----------------------------------------
define <2 x i64> @fshr_sub_mask_vector(<2 x i64> %x, <2 x i64> %y, <2 x i64> %a) {
%0:
  %mask = and <2 x i64> %a, { 63, 63 }
  %shr = lshr <2 x i64> %x, %mask
  %sub = sub nsw nuw <2 x i64> { 64, 64 }, %mask
  %shl = shl <2 x i64> %y, %sub
  %r = or <2 x i64> %shl, %shr
  ret <2 x i64> %r
}
=>
define <2 x i64> @fshr_sub_mask_vector(<2 x i64> %x, <2 x i64> %y, <2 x i64> %a) {
%0:
  %r = fshr <2 x i64> %y, <2 x i64> %x, <2 x i64> %a
  ret <2 x i64> %r
}
Transformation doesn't verify!
ERROR: Timeout


----------------------------------------
define i16 @fshl_16bit(i16 %x, i16 %y, i32 %shift) {
%0:
  %and = and i32 %shift, 15
  %convx = zext i16 %x to i32
  %shl = shl i32 %convx, %and
  %sub = sub i32 16, %and
  %convy = zext i16 %y to i32
  %shr = lshr i32 %convy, %sub
  %or = or i32 %shr, %shl
  %conv2 = trunc i32 %or to i16
  ret i16 %conv2
}
=>
define i16 @fshl_16bit(i16 %x, i16 %y, i32 %shift) {
%0:
  %1 = trunc i32 %shift to i16
  %conv2 = fshl i16 %x, i16 %y, i16 %1
  ret i16 %conv2
}
Transformation doesn't verify!
ERROR: Timeout


----------------------------------------
define <2 x i16> @fshl_commute_16bit_vec(<2 x i16> %x, <2 x i16> %y, <2 x i32> %shift) {
%0:
  %and = and <2 x i32> %shift, { 15, 15 }
  %convx = zext <2 x i16> %x to <2 x i32>
  %shl = shl <2 x i32> %convx, %and
  %sub = sub <2 x i32> { 16, 16 }, %and
  %convy = zext <2 x i16> %y to <2 x i32>
  %shr = lshr <2 x i32> %convy, %sub
  %or = or <2 x i32> %shl, %shr
  %conv2 = trunc <2 x i32> %or to <2 x i16>
  ret <2 x i16> %conv2
}
=>
define <2 x i16> @fshl_commute_16bit_vec(<2 x i16> %x, <2 x i16> %y, <2 x i32> %shift) {
%0:
  %1 = trunc <2 x i32> %shift to <2 x i16>
  %conv2 = fshl <2 x i16> %x, <2 x i16> %y, <2 x i16> %1
  ret <2 x i16> %conv2
}
Transformation doesn't verify!
ERROR: Timeout


----------------------------------------
define i8 @fshr_8bit(i8 %x, i8 %y, i3 %shift) {
%0:
  %and = zext i3 %shift to i32
  %convx = zext i8 %x to i32
  %shr = lshr i32 %convx, %and
  %sub = sub i32 8, %and
  %convy = zext i8 %y to i32
  %shl = shl i32 %convy, %sub
  %or = or i32 %shl, %shr
  %conv2 = trunc i32 %or to i8
  ret i8 %conv2
}
=>
define i8 @fshr_8bit(i8 %x, i8 %y, i3 %shift) {
%0:
  %1 = zext i3 %shift to i8
  %conv2 = fshr i8 %y, i8 %x, i8 %1
  ret i8 %conv2
}
Transformation seems to be correct!


----------------------------------------
define i8 @fshr_commute_8bit(i32 %x, i32 %y, i32 %shift) {
%0:
  %and = and i32 %shift, 3
  %convx = and i32 %x, 255
  %shr = lshr i32 %convx, %and
  %sub = sub i32 8, %and
  %convy = and i32 %y, 255
  %shl = shl i32 %convy, %sub
  %or = or i32 %shr, %shl
  %conv2 = trunc i32 %or to i8
  ret i8 %conv2
}
=>
define i8 @fshr_commute_8bit(i32 %x, i32 %y, i32 %shift) {
%0:
  %1 = trunc i32 %shift to i8
  %2 = and i8 %1, 3
  %3 = trunc i32 %y to i8
  %4 = trunc i32 %x to i8
  %conv2 = fshr i8 %3, i8 %4, i8 %2
  ret i8 %conv2
}
Transformation doesn't verify!
ERROR: Timeout


----------------------------------------
define i8 @fshr_select(i8 %x, i8 %y, i8 %shamt) {
%0:
  %cmp = icmp eq i8 %shamt, 0
  %sub = sub i8 8, %shamt
  %shr = lshr i8 %y, %shamt
  %shl = shl i8 %x, %sub
  %or = or i8 %shl, %shr
  %r = select i1 %cmp, i8 %y, i8 %or
  ret i8 %r
}
=>
define i8 @fshr_select(i8 %x, i8 %y, i8 %shamt) {
%0:
  %r = fshr i8 %x, i8 %y, i8 %shamt
  ret i8 %r
}
Transformation doesn't verify!
ERROR: Target is more poisonous than source

Example:
i8 %x = poison
i8 %y = any
i8 %shamt = #x00 (0)

Source:
i1 %cmp = #x1 (1)
i8 %sub = #x08 (8)
i8 %shr = any
i8 %shl = poison
i8 %or = poison
i8 %r = any

Target:
i8 %r = poison
Source value: any
Target value: poison


------------------- SMT STATS -------------------
Num queries: 82
Num invalid: 0
Num skips:   0
Num trivial: 51 (38.3%)
Num timeout: 14 (17.1%)
Num errors:  0 (0.0%)
Num SAT:     22 (26.8%)
Num UNSAT:   46 (56.1%)

stderr:

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

 

<-- Back