Skip to content

Commit 6136f97

Browse files
committed
[SLP][NFC] Test for a follow-up fix of the the vector min/max instrinsic cost calculation.
The code in this test should not have been vectorized. It looks worse than the scalar code. Differential Revision: https://reviews.llvm.org/D120438
1 parent f37d21e commit 6136f97

File tree

1 file changed

+42
-0
lines changed

1 file changed

+42
-0
lines changed
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2+
; RUN: opt < %s -slp-vectorizer -mcpu=corei7-avx -mtriple=x86_64-unknown-linux -S | FileCheck %s
3+
4+
; This test checks whether the cost of the vector max intrinsic is calculated
5+
; correctly. A max vector intrinsic combines the select and icmp instructions.
6+
; This maps to a single PMAX instruction in x86.
7+
define void @smax_intrinsic_cost(i64 %arg0, i64 %arg1) {
8+
; CHECK-LABEL: @smax_intrinsic_cost(
9+
; CHECK-NEXT: [[TMP1:%.*]] = insertelement <2 x i64> poison, i64 [[ARG0:%.*]], i32 0
10+
; CHECK-NEXT: [[TMP2:%.*]] = insertelement <2 x i64> [[TMP1]], i64 [[ARG1:%.*]], i32 1
11+
; CHECK-NEXT: [[TMP3:%.*]] = icmp sgt <2 x i64> [[TMP2]], <i64 123, i64 456>
12+
; CHECK-NEXT: [[TMP4:%.*]] = select <2 x i1> [[TMP3]], <2 x i64> [[TMP2]], <2 x i64> <i64 123, i64 456>
13+
; CHECK-NEXT: [[TMP5:%.*]] = extractelement <2 x i64> [[TMP4]], i32 0
14+
; CHECK-NEXT: [[TMP6:%.*]] = extractelement <2 x i64> [[TMP4]], i32 1
15+
; CHECK-NEXT: [[ROOT:%.*]] = icmp sle i64 [[TMP5]], [[TMP6]]
16+
; CHECK-NEXT: ret void
17+
;
18+
%icmp0 = icmp sgt i64 %arg0, 123
19+
%icmp1 = icmp sgt i64 %arg1, 456
20+
%select0 = select i1 %icmp0, i64 %arg0, i64 123
21+
%select1 = select i1 %icmp1, i64 %arg1, i64 456
22+
%root = icmp sle i64 %select0, %select1
23+
ret void
24+
}
25+
26+
27+
define void @umax_intrinsic_cost(i64 %arg0, i64 %arg1) {
28+
; CHECK-LABEL: @umax_intrinsic_cost(
29+
; CHECK-NEXT: [[ICMP0:%.*]] = icmp ugt i64 [[ARG0:%.*]], 123
30+
; CHECK-NEXT: [[ICMP1:%.*]] = icmp ugt i64 [[ARG1:%.*]], 456
31+
; CHECK-NEXT: [[SELECT0:%.*]] = select i1 [[ICMP0]], i64 [[ARG0]], i64 123
32+
; CHECK-NEXT: [[SELECT1:%.*]] = select i1 [[ICMP1]], i64 [[ARG1]], i64 456
33+
; CHECK-NEXT: [[ROOT:%.*]] = icmp sle i64 [[SELECT0]], [[SELECT1]]
34+
; CHECK-NEXT: ret void
35+
;
36+
%icmp0 = icmp ugt i64 %arg0, 123
37+
%icmp1 = icmp ugt i64 %arg1, 456
38+
%select0 = select i1 %icmp0, i64 %arg0, i64 123
39+
%select1 = select i1 %icmp1, i64 %arg1, i64 456
40+
%root = icmp sle i64 %select0, %select1
41+
ret void
42+
}

0 commit comments

Comments
 (0)