Skip to content

Commit 5ae143d

Browse files
committed
[SLP]Add a test with the incorrect casting for external user, NFC.
1 parent c83f23d commit 5ae143d

File tree

1 file changed

+64
-0
lines changed

1 file changed

+64
-0
lines changed
Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 4
2+
; RUN: opt -S --passes=slp-vectorizer -mtriple=x86_64-unknown-linux-gnu < %s | FileCheck %s
3+
4+
@e = global i8 0
5+
@c = global i16 0
6+
@d = global i32 0
7+
8+
define i8 @test() {
9+
; CHECK-LABEL: define i8 @test() {
10+
; CHECK-NEXT: entry:
11+
; CHECK-NEXT: [[TMP0:%.*]] = load i8, ptr @e, align 1
12+
; CHECK-NEXT: [[CONV:%.*]] = sext i8 [[TMP0]] to i32
13+
; CHECK-NEXT: [[TMP1:%.*]] = load i16, ptr @c, align 2
14+
; CHECK-NEXT: [[CONV1:%.*]] = zext i16 [[TMP1]] to i32
15+
; CHECK-NEXT: [[TMP2:%.*]] = insertelement <8 x i32> poison, i32 [[CONV]], i32 0
16+
; CHECK-NEXT: [[TMP3:%.*]] = shufflevector <8 x i32> [[TMP2]], <8 x i32> poison, <8 x i32> zeroinitializer
17+
; CHECK-NEXT: [[TMP4:%.*]] = trunc <8 x i32> [[TMP3]] to <8 x i16>
18+
; CHECK-NEXT: [[TMP5:%.*]] = or <8 x i16> [[TMP4]], <i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 1, i16 -32767>
19+
; CHECK-NEXT: [[TMP6:%.*]] = insertelement <8 x i32> poison, i32 [[CONV1]], i32 0
20+
; CHECK-NEXT: [[TMP7:%.*]] = shufflevector <8 x i32> [[TMP6]], <8 x i32> poison, <8 x i32> zeroinitializer
21+
; CHECK-NEXT: [[TMP8:%.*]] = trunc <8 x i32> [[TMP7]] to <8 x i16>
22+
; CHECK-NEXT: [[TMP9:%.*]] = add <8 x i16> [[TMP5]], [[TMP8]]
23+
; CHECK-NEXT: [[TMP10:%.*]] = call i16 @llvm.vector.reduce.or.v8i16(<8 x i16> [[TMP9]])
24+
; CHECK-NEXT: [[TMP11:%.*]] = sext i16 [[TMP10]] to i32
25+
; CHECK-NEXT: [[CONV4_30:%.*]] = trunc i32 [[TMP11]] to i8
26+
; CHECK-NEXT: [[TMP12:%.*]] = extractelement <8 x i16> [[TMP5]], i32 7
27+
; CHECK-NEXT: [[TMP13:%.*]] = sext i16 [[TMP12]] to i32
28+
; CHECK-NEXT: [[XOR_31:%.*]] = and i32 [[TMP13]], -2
29+
; CHECK-NEXT: store i32 [[XOR_31]], ptr @d, align 4
30+
; CHECK-NEXT: ret i8 [[CONV4_30]]
31+
;
32+
entry:
33+
%0 = load i8, ptr @e, align 1
34+
%conv = sext i8 %0 to i32
35+
%1 = load i16, ptr @c, align 2
36+
%conv1 = zext i16 %1 to i32
37+
%or.16 = or i32 %conv, 1
38+
%add.16 = add nsw i32 %or.16, %conv1
39+
%or.18 = or i32 %conv, 1
40+
%add.18 = add nsw i32 %or.18, %conv1
41+
%conv4.181 = or i32 %add.16, %add.18
42+
%or.20 = or i32 %conv, 1
43+
%add.20 = add nsw i32 %or.20, %conv1
44+
%conv4.202 = or i32 %conv4.181, %add.20
45+
%or.22 = or i32 %conv, 1
46+
%add.22 = add nsw i32 %or.22, %conv1
47+
%conv4.223 = or i32 %conv4.202, %add.22
48+
%or.24 = or i32 %conv, 1
49+
%add.24 = add nsw i32 %or.24, %conv1
50+
%conv4.244 = or i32 %conv4.223, %add.24
51+
%or.26 = or i32 %conv, 1
52+
%add.26 = add nsw i32 %or.26, %conv1
53+
%conv4.265 = or i32 %conv4.244, %add.26
54+
%or.28 = or i32 %conv, 1
55+
%add.28 = add nsw i32 %or.28, %conv1
56+
%conv4.286 = or i32 %conv4.265, %add.28
57+
%or.30 = or i32 %conv, 32769
58+
%add.30 = add nsw i32 %or.30, %conv1
59+
%conv4.307 = or i32 %conv4.286, %add.30
60+
%conv4.30 = trunc i32 %conv4.307 to i8
61+
%xor.31 = and i32 %or.30, -2
62+
store i32 %xor.31, ptr @d, align 4
63+
ret i8 %conv4.30
64+
}

0 commit comments

Comments
 (0)