[VectorCombine] add tests for possible scalarization with extra uses; NFC

This commit is contained in:
Sanjay Patel 2020-05-11 14:55:32 -04:00
parent 9a9a5f9893
commit 7c480c4385
1 changed files with 50 additions and 0 deletions

View File

@ -3,6 +3,7 @@
; RUN: opt < %s -vector-combine -S -mtriple=x86_64-- -mattr=AVX2 | FileCheck %s --check-prefixes=CHECK,AVX
declare void @use(<4 x i32>)
declare void @usef(<4 x float>)
; Eliminating an insert is profitable.
@ -150,3 +151,52 @@ define <4 x i32> @ins0_ins0_xor(i32 %x, i32 %y) {
%r = xor <4 x i32> %i0, %i1
ret <4 x i32> %r
}
define <4 x float> @ins1_ins1_fmul(float %x, float %y) {
; CHECK-LABEL: @ins1_ins1_fmul(
; CHECK-NEXT: [[I0:%.*]] = insertelement <4 x float> undef, float [[X:%.*]], i32 1
; CHECK-NEXT: [[I1:%.*]] = insertelement <4 x float> undef, float [[Y:%.*]], i32 1
; CHECK-NEXT: call void @usef(<4 x float> [[I1]])
; CHECK-NEXT: [[R:%.*]] = fmul <4 x float> [[I0]], [[I1]]
; CHECK-NEXT: ret <4 x float> [[R]]
;
%i0 = insertelement <4 x float> undef, float %x, i32 1
%i1 = insertelement <4 x float> undef, float %y, i32 1
call void @usef(<4 x float> %i1)
%r = fmul <4 x float> %i0, %i1
ret <4 x float> %r
}
define <4 x float> @ins2_ins2_fsub(float %x, float %y) {
; CHECK-LABEL: @ins2_ins2_fsub(
; CHECK-NEXT: [[I0:%.*]] = insertelement <4 x float> undef, float [[X:%.*]], i32 2
; CHECK-NEXT: call void @usef(<4 x float> [[I0]])
; CHECK-NEXT: [[I1:%.*]] = insertelement <4 x float> undef, float [[Y:%.*]], i32 2
; CHECK-NEXT: call void @usef(<4 x float> [[I1]])
; CHECK-NEXT: [[R:%.*]] = fsub <4 x float> [[I0]], [[I1]]
; CHECK-NEXT: ret <4 x float> [[R]]
;
%i0 = insertelement <4 x float> undef, float %x, i32 2
call void @usef(<4 x float> %i0)
%i1 = insertelement <4 x float> undef, float %y, i32 2
call void @usef(<4 x float> %i1)
%r = fsub <4 x float> %i0, %i1
ret <4 x float> %r
}
define <4 x float> @ins3_ins3_fdiv(float %x, float %y) {
; CHECK-LABEL: @ins3_ins3_fdiv(
; CHECK-NEXT: [[I0:%.*]] = insertelement <4 x float> undef, float [[X:%.*]], i32 3
; CHECK-NEXT: call void @usef(<4 x float> [[I0]])
; CHECK-NEXT: [[I1:%.*]] = insertelement <4 x float> undef, float [[Y:%.*]], i32 3
; CHECK-NEXT: call void @usef(<4 x float> [[I1]])
; CHECK-NEXT: [[R:%.*]] = fdiv <4 x float> [[I0]], [[I1]]
; CHECK-NEXT: ret <4 x float> [[R]]
;
%i0 = insertelement <4 x float> undef, float %x, i32 3
call void @usef(<4 x float> %i0)
%i1 = insertelement <4 x float> undef, float %y, i32 3
call void @usef(<4 x float> %i1)
%r = fdiv <4 x float> %i0, %i1
ret <4 x float> %r
}