xref: /llvm-project/llvm/test/Transforms/SLPVectorizer/X86/inst_size_bug.ll (revision f3d2609af3031ddb54030548e86335f295cf49ca)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt < %s -passes=slp-vectorizer -S -mtriple=x86_64-unknown-linux-gnu -mattr=+avx2 -slp-max-reg-size=128 | FileCheck %s
3
4define void @inst_size(ptr %a, <2 x i64> %b) {
5; CHECK-LABEL: @inst_size(
6; CHECK-NEXT:  entry:
7; CHECK-NEXT:    [[TMPL1:%.*]] = load i64, ptr [[A:%.*]], align 4
8; CHECK-NEXT:    [[PTR2:%.*]] = getelementptr inbounds i64, ptr [[A]], i64 1
9; CHECK-NEXT:    [[TMP0:%.*]] = load <2 x i64>, ptr [[PTR2]], align 4
10; CHECK-NEXT:    [[PTR4:%.*]] = getelementptr inbounds i64, ptr [[A]], i64 3
11; CHECK-NEXT:    [[TMPL4:%.*]] = load i64, ptr [[PTR4]], align 4
12; CHECK-NEXT:    [[TMP1:%.*]] = shufflevector <2 x i64> [[B:%.*]], <2 x i64> poison, <4 x i32> <i32 0, i32 poison, i32 poison, i32 poison>
13; CHECK-NEXT:    [[TMP2:%.*]] = insertelement <4 x i64> [[TMP1]], i64 [[TMPL1]], i32 1
14; CHECK-NEXT:    [[TMP3:%.*]] = call <4 x i64> @llvm.vector.insert.v4i64.v2i64(<4 x i64> [[TMP2]], <2 x i64> [[TMP0]], i64 2)
15; CHECK-NEXT:    [[TMP4:%.*]] = icmp sgt <4 x i64> zeroinitializer, [[TMP3]]
16; CHECK-NEXT:    [[T45:%.*]] = icmp sgt i64 0, [[TMPL4]]
17; CHECK-NEXT:    br label [[BLOCK:%.*]]
18; CHECK:       block:
19; CHECK-NEXT:    [[PHI5:%.*]] = phi i1 [ [[T45]], [[ENTRY:%.*]] ]
20; CHECK-NEXT:    [[TMP5:%.*]] = phi <4 x i1> [ [[TMP4]], [[ENTRY]] ]
21; CHECK-NEXT:    ret void
22;
23entry:
24  %val = extractelement <2 x i64> %b, i32 0
25  %tmpl1 = load i64, ptr %a, align 4
26  %ptr2 = getelementptr inbounds i64, ptr %a, i64 1
27  %tmpl2 = load i64, ptr %ptr2, align 4
28  %ptr3 = getelementptr inbounds i64, ptr %a, i64 2
29  %tmpl3 = load i64, ptr %ptr3, align 4
30  %ptr4 = getelementptr inbounds i64, ptr %a, i64 3
31  %tmpl4 = load i64, ptr %ptr4, align 4
32  %t41 = icmp sgt i64 0, %val
33  %t42 = icmp sgt i64 0, %tmpl1
34  %t43 = icmp sgt i64 0, %tmpl2
35  %t44 = icmp sgt i64 0, %tmpl3
36  %t45 = icmp sgt i64 0, %tmpl4
37  br label %block
38block:
39  %phi1 = phi i1 [ %t41, %entry]
40  %phi2 = phi i1 [ %t42, %entry]
41  %phi3 = phi i1 [ %t43, %entry]
42  %phi4 = phi i1 [ %t44, %entry]
43  %phi5 = phi i1 [ %t45, %entry]
44  ret void
45}
46