[SLP] Add tests for overcosted scalar splats for RISCV (#213142)
Tests for #213104.
This commit is contained in:
parent
ae2261652f
commit
6d7c951e14
1 changed files with 95 additions and 0 deletions
|
|
@ -0,0 +1,95 @@
|
|||
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 6
|
||||
; RUN: opt < %s -passes=slp-vectorizer -mtriple=riscv64 -mattr=+v -S -pass-remarks-output=%t | FileCheck %s
|
||||
; RUN: FileCheck --input-file=%t %s --check-prefix=YAML
|
||||
|
||||
; YAML-LABEL: --- !Passed
|
||||
; YAML-NEXT: Pass: slp-vectorizer
|
||||
; YAML-NEXT: Name: StoresVectorized
|
||||
; YAML-NEXT: Function: fmul_splat
|
||||
; YAML-NEXT: Args:
|
||||
; YAML-NEXT: - String: 'Stores SLP vectorized with cost '
|
||||
; YAML-NEXT: - Cost: '-7'
|
||||
; YAML-NEXT: - String: ' and with tree size '
|
||||
; YAML-NEXT: - TreeSize: '4'
|
||||
; YAML-NEXT: ...
|
||||
; YAML-NEXT: --- !Passed
|
||||
; YAML-NEXT: Pass: slp-vectorizer
|
||||
; YAML-NEXT: Name: StoresVectorized
|
||||
; YAML-NEXT: Function: fmul_splat_nested
|
||||
; YAML-NEXT: Args:
|
||||
; YAML-NEXT: - String: 'Stores SLP vectorized with cost '
|
||||
; YAML-NEXT: - Cost: '-13'
|
||||
; YAML-NEXT: - String: ' and with tree size '
|
||||
; YAML-NEXT: - TreeSize: '8'
|
||||
; YAML-NEXT: ...
|
||||
define void @fmul_splat(i32 %s, ptr %p, ptr %q) {
|
||||
; CHECK-LABEL: define void @fmul_splat(
|
||||
; CHECK-SAME: i32 [[S:%.*]], ptr [[P:%.*]], ptr [[Q:%.*]]) #[[ATTR0:[0-9]+]] {
|
||||
; CHECK-NEXT: [[TMP1:%.*]] = load <4 x i32>, ptr [[P]], align 4
|
||||
; CHECK-NEXT: [[TMP2:%.*]] = insertelement <4 x i32> poison, i32 [[S]], i64 0
|
||||
; CHECK-NEXT: [[TMP3:%.*]] = shufflevector <4 x i32> [[TMP2]], <4 x i32> poison, <4 x i32> zeroinitializer
|
||||
; CHECK-NEXT: [[TMP4:%.*]] = add <4 x i32> [[TMP3]], [[TMP1]]
|
||||
; CHECK-NEXT: store <4 x i32> [[TMP4]], ptr [[Q]], align 4
|
||||
; CHECK-NEXT: ret void
|
||||
;
|
||||
%x0 = load i32, ptr %p
|
||||
%p1 = getelementptr inbounds nuw i32, ptr %p, i64 1
|
||||
%x1 = load i32, ptr %p1
|
||||
%p2 = getelementptr inbounds nuw i32, ptr %p, i64 2
|
||||
%x2 = load i32, ptr %p2
|
||||
%p3 = getelementptr inbounds nuw i32, ptr %p, i64 3
|
||||
%x3 = load i32, ptr %p3
|
||||
%m0 = add i32 %s, %x0
|
||||
%m1 = add i32 %s, %x1
|
||||
%m2 = add i32 %s, %x2
|
||||
%m3 = add i32 %s, %x3
|
||||
store i32 %m0, ptr %q
|
||||
%q1 = getelementptr i32, ptr %q, i64 1
|
||||
store i32 %m1, ptr %q1
|
||||
%q2 = getelementptr i32, ptr %q, i64 2
|
||||
store i32 %m2, ptr %q2
|
||||
%q3 = getelementptr i32, ptr %q, i64 3
|
||||
store i32 %m3, ptr %q3
|
||||
ret void
|
||||
}
|
||||
|
||||
define void @fmul_splat_nested(i32 %s, ptr %p, ptr %q) {
|
||||
; CHECK-LABEL: define void @fmul_splat_nested(
|
||||
; CHECK-SAME: i32 [[S:%.*]], ptr [[P:%.*]], ptr [[Q:%.*]]) #[[ATTR0]] {
|
||||
; CHECK-NEXT: [[TMP1:%.*]] = load <4 x i32>, ptr [[P]], align 4
|
||||
; CHECK-NEXT: [[TMP2:%.*]] = insertelement <4 x i32> poison, i32 [[S]], i64 0
|
||||
; CHECK-NEXT: [[TMP3:%.*]] = shufflevector <4 x i32> [[TMP2]], <4 x i32> poison, <4 x i32> zeroinitializer
|
||||
; CHECK-NEXT: [[TMP4:%.*]] = add <4 x i32> [[TMP3]], [[TMP1]]
|
||||
; CHECK-NEXT: [[TMP5:%.*]] = add <4 x i32> [[TMP3]], [[TMP4]]
|
||||
; CHECK-NEXT: [[TMP6:%.*]] = add <4 x i32> [[TMP3]], [[TMP5]]
|
||||
; CHECK-NEXT: store <4 x i32> [[TMP6]], ptr [[Q]], align 4
|
||||
; CHECK-NEXT: ret void
|
||||
;
|
||||
%x0 = load i32, ptr %p
|
||||
%p1 = getelementptr inbounds nuw i32, ptr %p, i64 1
|
||||
%x1 = load i32, ptr %p1
|
||||
%p2 = getelementptr inbounds nuw i32, ptr %p, i64 2
|
||||
%x2 = load i32, ptr %p2
|
||||
%p3 = getelementptr inbounds nuw i32, ptr %p, i64 3
|
||||
%x3 = load i32, ptr %p3
|
||||
%b0 = add i32 %s, %x0
|
||||
%b1 = add i32 %s, %x1
|
||||
%b2 = add i32 %s, %x2
|
||||
%b3 = add i32 %s, %x3
|
||||
%a0 = add i32 %s, %b0
|
||||
%a1 = add i32 %s, %b1
|
||||
%a2 = add i32 %s, %b2
|
||||
%a3 = add i32 %s, %b3
|
||||
%m0 = add i32 %s, %a0
|
||||
%m1 = add i32 %s, %a1
|
||||
%m2 = add i32 %s, %a2
|
||||
%m3 = add i32 %s, %a3
|
||||
store i32 %m0, ptr %q
|
||||
%q1 = getelementptr i32, ptr %q, i64 1
|
||||
store i32 %m1, ptr %q1
|
||||
%q2 = getelementptr i32, ptr %q, i64 2
|
||||
store i32 %m2, ptr %q2
|
||||
%q3 = getelementptr i32, ptr %q, i64 3
|
||||
store i32 %m3, ptr %q3
|
||||
ret void
|
||||
}
|
||||
Loading…
Reference in a new issue