mirror of
https://github.com/RPCSX/llvm.git
synced 2025-02-11 23:38:05 +00:00
[InstSimplify] Add tests to show missed bitcast folding opportunities.
InstSimplify doesn't always know how to fold a bitcast of a constant vector. In particular, the logic in InstSimplify doesn't know how to handle the case where the constant vector in input contains some undef elements, and the number of elements is smaller than the number of elements of the bitcast vector type. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@281332 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
parent
c732159461
commit
93627d9415
@ -123,3 +123,147 @@ define <2 x double> @foo6() {
|
||||
%cast = bitcast <4 x i32><i32 -1, i32 -1, i32 -1, i32 -1> to <2 x double>
|
||||
ret <2 x double> %cast
|
||||
}
|
||||
|
||||
define <4 x i32> @bitcast_constexpr_4i32_2i64_u2() {
|
||||
; CHECK-LABEL: @bitcast_constexpr_4i32_2i64_u2(
|
||||
; CHECK-NEXT: ret <4 x i32> bitcast (<2 x i64> <i64 undef, i64 2> to <4 x i32>)
|
||||
;
|
||||
%cast = bitcast <2 x i64><i64 undef, i64 2> to <4 x i32>
|
||||
ret <4 x i32> %cast
|
||||
}
|
||||
|
||||
define <4 x i32> @bitcast_constexpr_4i32_2i64_1u() {
|
||||
; CHECK-LABEL: @bitcast_constexpr_4i32_2i64_1u(
|
||||
; CHECK-NEXT: ret <4 x i32> bitcast (<2 x i64> <i64 1, i64 undef> to <4 x i32>)
|
||||
;
|
||||
%cast = bitcast <2 x i64><i64 1, i64 undef> to <4 x i32>
|
||||
ret <4 x i32> %cast
|
||||
}
|
||||
|
||||
define <4 x i32> @bitcast_constexpr_4i32_2i64() {
|
||||
; CHECK-LABEL: @bitcast_constexpr_4i32_2i64(
|
||||
; CHECK-NEXT: ret <4 x i32> bitcast (<2 x i64> <i64 undef, i64 2> to <4 x i32>)
|
||||
;
|
||||
%cast = bitcast <2 x i64><i64 undef, i64 2> to <4 x i32>
|
||||
ret <4 x i32> %cast
|
||||
}
|
||||
|
||||
define <8 x i16> @bitcast_constexpr_8i16_2i64_u2() {
|
||||
; CHECK-LABEL: @bitcast_constexpr_8i16_2i64_u2(
|
||||
; CHECK-NEXT: ret <8 x i16> bitcast (<2 x i64> <i64 undef, i64 2> to <8 x i16>)
|
||||
;
|
||||
%cast = bitcast <2 x i64><i64 undef, i64 2> to <8 x i16>
|
||||
ret <8 x i16> %cast
|
||||
}
|
||||
|
||||
define <8 x i16> @bitcast_constexpr_8i16_2i64_1u() {
|
||||
; CHECK-LABEL: @bitcast_constexpr_8i16_2i64_1u(
|
||||
; CHECK-NEXT: ret <8 x i16> bitcast (<2 x i64> <i64 1, i64 undef> to <8 x i16>)
|
||||
;
|
||||
%cast = bitcast <2 x i64><i64 1, i64 undef> to <8 x i16>
|
||||
ret <8 x i16> %cast
|
||||
}
|
||||
|
||||
define <8 x i16> @bitcast_constexpr_8i16_2i64_u65536() {
|
||||
; CHECK-LABEL: @bitcast_constexpr_8i16_2i64_u65536(
|
||||
; CHECK-NEXT: ret <8 x i16> bitcast (<2 x i64> <i64 undef, i64 65536> to <8 x i16>)
|
||||
;
|
||||
%cast = bitcast <2 x i64><i64 undef, i64 65536> to <8 x i16>
|
||||
ret <8 x i16> %cast
|
||||
}
|
||||
|
||||
define <16 x i8> @bitcast_constexpr_16i8_2i64_u2() {
|
||||
; CHECK-LABEL: @bitcast_constexpr_16i8_2i64_u2(
|
||||
; CHECK-NEXT: ret <16 x i8> bitcast (<2 x i64> <i64 undef, i64 2> to <16 x i8>)
|
||||
;
|
||||
%cast = bitcast <2 x i64><i64 undef, i64 2> to <16 x i8>
|
||||
ret <16 x i8> %cast
|
||||
}
|
||||
|
||||
define <16 x i8> @bitcast_constexpr_16i8_2i64_256u() {
|
||||
; CHECK-LABEL: @bitcast_constexpr_16i8_2i64_256u(
|
||||
; CHECK-NEXT: ret <16 x i8> bitcast (<2 x i64> <i64 256, i64 undef> to <16 x i8>)
|
||||
;
|
||||
%cast = bitcast <2 x i64><i64 256, i64 undef> to <16 x i8>
|
||||
ret <16 x i8> %cast
|
||||
}
|
||||
|
||||
define <16 x i8> @bitcast_constexpr_16i8_2i64_u256() {
|
||||
; CHECK-LABEL: @bitcast_constexpr_16i8_2i64_u256(
|
||||
; CHECK-NEXT: ret <16 x i8> bitcast (<2 x i64> <i64 undef, i64 256> to <16 x i8>)
|
||||
;
|
||||
%cast = bitcast <2 x i64><i64 undef, i64 256> to <16 x i8>
|
||||
ret <16 x i8> %cast
|
||||
}
|
||||
|
||||
define <8 x i16> @bitcast_constexpr_8i16_4i32_uu22() {
|
||||
; CHECK-LABEL: @bitcast_constexpr_8i16_4i32_uu22(
|
||||
; CHECK-NEXT: ret <8 x i16> bitcast (<4 x i32> <i32 undef, i32 undef, i32 2, i32 2> to <8 x i16>)
|
||||
;
|
||||
%cast = bitcast <4 x i32><i32 undef, i32 undef, i32 2, i32 2> to <8 x i16>
|
||||
ret <8 x i16> %cast
|
||||
}
|
||||
|
||||
define <8 x i16> @bitcast_constexpr_8i16_4i32_10uu() {
|
||||
; CHECK-LABEL: @bitcast_constexpr_8i16_4i32_10uu(
|
||||
; CHECK-NEXT: ret <8 x i16> bitcast (<4 x i32> <i32 1, i32 0, i32 undef, i32 undef> to <8 x i16>)
|
||||
;
|
||||
%cast = bitcast <4 x i32><i32 1, i32 0, i32 undef, i32 undef> to <8 x i16>
|
||||
ret <8 x i16> %cast
|
||||
}
|
||||
|
||||
define <8 x i16> @bitcast_constexpr_8i16_4i32_u257u256() {
|
||||
; CHECK-LABEL: @bitcast_constexpr_8i16_4i32_u257u256(
|
||||
; CHECK-NEXT: ret <8 x i16> bitcast (<4 x i32> <i32 undef, i32 65536, i32 undef, i32 65536> to <8 x i16>)
|
||||
;
|
||||
%cast = bitcast <4 x i32><i32 undef, i32 65536, i32 undef, i32 65536> to <8 x i16>
|
||||
ret <8 x i16> %cast
|
||||
}
|
||||
|
||||
define <16 x i8> @bitcast_constexpr_16i8_4i32_u2u2() {
|
||||
; CHECK-LABEL: @bitcast_constexpr_16i8_4i32_u2u2(
|
||||
; CHECK-NEXT: ret <16 x i8> bitcast (<4 x i32> <i32 undef, i32 2, i32 undef, i32 2> to <16 x i8>)
|
||||
;
|
||||
%cast = bitcast <4 x i32><i32 undef, i32 2, i32 undef, i32 2> to <16 x i8>
|
||||
ret <16 x i8> %cast
|
||||
}
|
||||
|
||||
define <16 x i8> @bitcast_constexpr_16i8_4i32_1u1u() {
|
||||
; CHECK-LABEL: @bitcast_constexpr_16i8_4i32_1u1u(
|
||||
; CHECK-NEXT: ret <16 x i8> bitcast (<4 x i32> <i32 1, i32 undef, i32 1, i32 undef> to <16 x i8>)
|
||||
;
|
||||
%cast = bitcast <4 x i32><i32 1, i32 undef, i32 1, i32 undef> to <16 x i8>
|
||||
ret <16 x i8> %cast
|
||||
}
|
||||
|
||||
define <16 x i8> @bitcast_constexpr_16i8_4i32_u256uu() {
|
||||
; CHECK-LABEL: @bitcast_constexpr_16i8_4i32_u256uu(
|
||||
; CHECK-NEXT: ret <16 x i8> bitcast (<4 x i32> <i32 undef, i32 256, i32 undef, i32 undef> to <16 x i8>)
|
||||
;
|
||||
%cast = bitcast <4 x i32><i32 undef, i32 256, i32 undef, i32 undef> to <16 x i8>
|
||||
ret <16 x i8> %cast
|
||||
}
|
||||
|
||||
define <16 x i8> @bitcast_constexpr_16i8_8i16_u2u2u2u2() {
|
||||
; CHECK-LABEL: @bitcast_constexpr_16i8_8i16_u2u2u2u2(
|
||||
; CHECK-NEXT: ret <16 x i8> bitcast (<8 x i16> <i16 undef, i16 2, i16 undef, i16 2, i16 undef, i16 2, i16 undef, i16 2> to <16 x i8>)
|
||||
;
|
||||
%cast = bitcast <8 x i16><i16 undef, i16 2, i16 undef, i16 2, i16 undef, i16 2, i16 undef, i16 2> to <16 x i8>
|
||||
ret <16 x i8> %cast
|
||||
}
|
||||
|
||||
define <16 x i8> @bitcast_constexpr_16i8_8i16_1u1u1u1u() {
|
||||
; CHECK-LABEL: @bitcast_constexpr_16i8_8i16_1u1u1u1u(
|
||||
; CHECK-NEXT: ret <16 x i8> bitcast (<8 x i16> <i16 1, i16 undef, i16 1, i16 undef, i16 1, i16 undef, i16 1, i16 undef> to <16 x i8>)
|
||||
;
|
||||
%cast = bitcast <8 x i16><i16 1, i16 undef, i16 1, i16 undef, i16 1, i16 undef, i16 1, i16 undef> to <16 x i8>
|
||||
ret <16 x i8> %cast
|
||||
}
|
||||
|
||||
define <16 x i8> @bitcast_constexpr_16i8_8i16_u256uuu256uu() {
|
||||
; CHECK-LABEL: @bitcast_constexpr_16i8_8i16_u256uuu256uu(
|
||||
; CHECK-NEXT: ret <16 x i8> bitcast (<8 x i16> <i16 undef, i16 256, i16 undef, i16 undef, i16 undef, i16 256, i16 undef, i16 undef> to <16 x i8>)
|
||||
;
|
||||
%cast = bitcast <8 x i16><i16 undef, i16 256, i16 undef, i16 undef, i16 undef, i16 256, i16 undef, i16 undef> to <16 x i8>
|
||||
ret <16 x i8> %cast
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user