forked from OSchip/llvm-project
[InstCombine] add tests for insert/extract with identity shuffles; NFC
llvm-svn: 370901
This commit is contained in:
parent
b92deded87
commit
791949afe5
|
@ -572,3 +572,95 @@ define <4 x float> @insert_in_nonsplat2(float %x, <4 x float> %y) {
|
||||||
%r = insertelement <4 x float> %splat, float %x, i32 3
|
%r = insertelement <4 x float> %splat, float %x, i32 3
|
||||||
ret <4 x float> %r
|
ret <4 x float> %r
|
||||||
}
|
}
|
||||||
|
|
||||||
|
define <4 x i8> @shuf_identity_padding(<2 x i8> %x, i8 %y) {
|
||||||
|
; CHECK-LABEL: @shuf_identity_padding(
|
||||||
|
; CHECK-NEXT: [[V0:%.*]] = shufflevector <2 x i8> [[X:%.*]], <2 x i8> undef, <4 x i32> <i32 0, i32 undef, i32 undef, i32 undef>
|
||||||
|
; CHECK-NEXT: [[X1:%.*]] = extractelement <2 x i8> [[X]], i32 1
|
||||||
|
; CHECK-NEXT: [[V1:%.*]] = insertelement <4 x i8> [[V0]], i8 [[X1]], i32 1
|
||||||
|
; CHECK-NEXT: [[V2:%.*]] = insertelement <4 x i8> [[V1]], i8 [[Y:%.*]], i32 2
|
||||||
|
; CHECK-NEXT: ret <4 x i8> [[V2]]
|
||||||
|
;
|
||||||
|
%v0 = shufflevector <2 x i8> %x, <2 x i8> undef, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef>
|
||||||
|
%x1 = extractelement <2 x i8> %x, i32 1
|
||||||
|
%v1 = insertelement <4 x i8> %v0, i8 %x1, i32 1
|
||||||
|
%v2 = insertelement <4 x i8> %v1, i8 %y, i32 2
|
||||||
|
ret <4 x i8> %v2
|
||||||
|
}
|
||||||
|
|
||||||
|
define <3 x i8> @shuf_identity_extract(<4 x i8> %x, i8 %y) {
|
||||||
|
; CHECK-LABEL: @shuf_identity_extract(
|
||||||
|
; CHECK-NEXT: [[V0:%.*]] = shufflevector <4 x i8> [[X:%.*]], <4 x i8> undef, <3 x i32> <i32 0, i32 undef, i32 undef>
|
||||||
|
; CHECK-NEXT: [[X1:%.*]] = extractelement <4 x i8> [[X]], i32 1
|
||||||
|
; CHECK-NEXT: [[V1:%.*]] = insertelement <3 x i8> [[V0]], i8 [[X1]], i32 1
|
||||||
|
; CHECK-NEXT: [[V2:%.*]] = insertelement <3 x i8> [[V1]], i8 [[Y:%.*]], i32 2
|
||||||
|
; CHECK-NEXT: ret <3 x i8> [[V2]]
|
||||||
|
;
|
||||||
|
%v0 = shufflevector <4 x i8> %x, <4 x i8> undef, <3 x i32> <i32 0, i32 undef, i32 undef>
|
||||||
|
%x1 = extractelement <4 x i8> %x, i32 1
|
||||||
|
%v1 = insertelement <3 x i8> %v0, i8 %x1, i32 1
|
||||||
|
%v2 = insertelement <3 x i8> %v1, i8 %y, i32 2
|
||||||
|
ret <3 x i8> %v2
|
||||||
|
}
|
||||||
|
|
||||||
|
define <4 x float> @shuf_identity_extract_extra_use(<6 x float> %x, float %y) {
|
||||||
|
; CHECK-LABEL: @shuf_identity_extract_extra_use(
|
||||||
|
; CHECK-NEXT: [[V0:%.*]] = shufflevector <6 x float> [[X:%.*]], <6 x float> undef, <4 x i32> <i32 0, i32 undef, i32 undef, i32 3>
|
||||||
|
; CHECK-NEXT: call void @use(<4 x float> [[V0]])
|
||||||
|
; CHECK-NEXT: [[X1:%.*]] = extractelement <6 x float> [[X]], i32 2
|
||||||
|
; CHECK-NEXT: [[V1:%.*]] = insertelement <4 x float> [[V0]], float [[X1]], i32 2
|
||||||
|
; CHECK-NEXT: [[V2:%.*]] = insertelement <4 x float> [[V1]], float [[Y:%.*]], i32 1
|
||||||
|
; CHECK-NEXT: ret <4 x float> [[V2]]
|
||||||
|
;
|
||||||
|
%v0 = shufflevector <6 x float> %x, <6 x float> undef, <4 x i32> <i32 0, i32 undef, i32 undef, i32 3>
|
||||||
|
call void @use(<4 x float> %v0)
|
||||||
|
%x1 = extractelement <6 x float> %x, i32 2
|
||||||
|
%v1 = insertelement <4 x float> %v0, float %x1, i32 2
|
||||||
|
%v2 = insertelement <4 x float> %v1, float %y, i32 1
|
||||||
|
ret <4 x float> %v2
|
||||||
|
}
|
||||||
|
|
||||||
|
define <4 x i8> @shuf_identity_padding_variable_index(<2 x i8> %x, i8 %y, i32 %index) {
|
||||||
|
; CHECK-LABEL: @shuf_identity_padding_variable_index(
|
||||||
|
; CHECK-NEXT: [[V0:%.*]] = shufflevector <2 x i8> [[X:%.*]], <2 x i8> undef, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef>
|
||||||
|
; CHECK-NEXT: [[X1:%.*]] = extractelement <2 x i8> [[X]], i32 [[INDEX:%.*]]
|
||||||
|
; CHECK-NEXT: [[V1:%.*]] = insertelement <4 x i8> [[V0]], i8 [[X1]], i32 [[INDEX]]
|
||||||
|
; CHECK-NEXT: [[V2:%.*]] = insertelement <4 x i8> [[V1]], i8 [[Y:%.*]], i32 2
|
||||||
|
; CHECK-NEXT: ret <4 x i8> [[V2]]
|
||||||
|
;
|
||||||
|
%v0 = shufflevector <2 x i8> %x, <2 x i8> undef, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef>
|
||||||
|
%x1 = extractelement <2 x i8> %x, i32 %index
|
||||||
|
%v1 = insertelement <4 x i8> %v0, i8 %x1, i32 %index
|
||||||
|
%v2 = insertelement <4 x i8> %v1, i8 %y, i32 2
|
||||||
|
ret <4 x i8> %v2
|
||||||
|
}
|
||||||
|
|
||||||
|
define <4 x i8> @shuf_identity_padding_wrong_source_vec(<2 x i8> %x, i8 %y, <2 x i8> %other) {
|
||||||
|
; CHECK-LABEL: @shuf_identity_padding_wrong_source_vec(
|
||||||
|
; CHECK-NEXT: [[V0:%.*]] = shufflevector <2 x i8> [[X:%.*]], <2 x i8> undef, <4 x i32> <i32 0, i32 undef, i32 undef, i32 undef>
|
||||||
|
; CHECK-NEXT: [[X1:%.*]] = extractelement <2 x i8> [[OTHER:%.*]], i32 1
|
||||||
|
; CHECK-NEXT: [[V1:%.*]] = insertelement <4 x i8> [[V0]], i8 [[X1]], i32 1
|
||||||
|
; CHECK-NEXT: [[V2:%.*]] = insertelement <4 x i8> [[V1]], i8 [[Y:%.*]], i32 2
|
||||||
|
; CHECK-NEXT: ret <4 x i8> [[V2]]
|
||||||
|
;
|
||||||
|
%v0 = shufflevector <2 x i8> %x, <2 x i8> undef, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef>
|
||||||
|
%x1 = extractelement <2 x i8> %other, i32 1
|
||||||
|
%v1 = insertelement <4 x i8> %v0, i8 %x1, i32 1
|
||||||
|
%v2 = insertelement <4 x i8> %v1, i8 %y, i32 2
|
||||||
|
ret <4 x i8> %v2
|
||||||
|
}
|
||||||
|
|
||||||
|
define <4 x i8> @shuf_identity_padding_wrong_index(<2 x i8> %x, i8 %y) {
|
||||||
|
; CHECK-LABEL: @shuf_identity_padding_wrong_index(
|
||||||
|
; CHECK-NEXT: [[V0:%.*]] = shufflevector <2 x i8> [[X:%.*]], <2 x i8> undef, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef>
|
||||||
|
; CHECK-NEXT: [[X1:%.*]] = extractelement <2 x i8> [[X]], i32 1
|
||||||
|
; CHECK-NEXT: [[V1:%.*]] = insertelement <4 x i8> [[V0]], i8 [[X1]], i32 2
|
||||||
|
; CHECK-NEXT: [[V2:%.*]] = insertelement <4 x i8> [[V1]], i8 [[Y:%.*]], i32 3
|
||||||
|
; CHECK-NEXT: ret <4 x i8> [[V2]]
|
||||||
|
;
|
||||||
|
%v0 = shufflevector <2 x i8> %x, <2 x i8> undef, <4 x i32> <i32 0, i32 1, i32 undef, i32 undef>
|
||||||
|
%x1 = extractelement <2 x i8> %x, i32 1
|
||||||
|
%v1 = insertelement <4 x i8> %v0, i8 %x1, i32 2
|
||||||
|
%v2 = insertelement <4 x i8> %v1, i8 %y, i32 3
|
||||||
|
ret <4 x i8> %v2
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue