[ORC] Add std::tuple support to SimplePackedSerialization.
[llvm-project.git] / llvm / test / Transforms / LoopVectorize / X86 / pr48340.ll
blob9a63501e091f64eed26d1dd63901e15d8f99ad23
1 ; RUN: opt -loop-vectorize --force-vector-width=4 --force-vector-interleave=0 -S -o - < %s | FileCheck %s
3 target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i64:64-f80:128-n8:16:32:64-S128"
4 target triple = "x86_64-unknown-linux-gnu"
6 %0 = type { i32 }
7 %1 = type { i64 }
9 define void @foo(i64* %p, i64* %p.last) unnamed_addr #0 {
10 ; CHECK-LABEL: @foo(
11 ; CHECK: vector.body:
12 ; CHECK:         [[WIDE_MASKED_GATHER0:%.*]] = call <4 x %0*> @llvm.masked.gather.v4p0s_s.v4p0p0s_s.0(<4 x %0**> [[TMP5:%.*]], i32 8, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x %0*> undef)
13 ; CHECK-NEXT:    [[WIDE_MASKED_GATHER1:%.*]] = call <4 x %0*> @llvm.masked.gather.v4p0s_s.v4p0p0s_s.0(<4 x %0**> [[TMP6:%.*]], i32 8, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x %0*> undef)
14 ; CHECK-NEXT:    [[WIDE_MASKED_GATHER2:%.*]] = call <4 x %0*> @llvm.masked.gather.v4p0s_s.v4p0p0s_s.0(<4 x %0**> [[TMP7:%.*]], i32 8, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x %0*> undef)
15 ; CHECK-NEXT:    [[WIDE_MASKED_GATHER3:%.*]] = call <4 x %0*> @llvm.masked.gather.v4p0s_s.v4p0p0s_s.0(<4 x %0**> [[TMP8:%.*]], i32 8, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x %0*> undef)
16 entry:
17   br label %loop
19 loop:
20   %p2 = phi i64* [ %p, %entry ], [ %p.inc, %loop ]
21   %p.inc = getelementptr inbounds i64, i64* %p2, i64 2
22   %p3 = bitcast i64* %p2 to %0**
23   %v = load %0*, %0** %p3, align 8
24   %b = icmp eq i64* %p.inc, %p.last
25   br i1 %b, label %exit, label %loop
27 exit:
28   ret void
31 define void @bar(i64* %p, i64* %p.last) unnamed_addr #0 {
32 ; CHECK-LABEL: @bar(
33 ; CHECK: vector.body:
34 ; CHECK:         [[WIDE_MASKED_GATHER0:%.*]] = call <4 x %1*> @llvm.masked.gather.v4p0s_s.v4p0p0s_s.1(<4 x %1**> [[TMP5:%.*]], i32 8, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x %1*> undef)
35 ; CHECK-NEXT:    [[WIDE_MASKED_GATHER1:%.*]] = call <4 x %1*> @llvm.masked.gather.v4p0s_s.v4p0p0s_s.1(<4 x %1**> [[TMP6:%.*]], i32 8, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x %1*> undef)
36 ; CHECK-NEXT:    [[WIDE_MASKED_GATHER2:%.*]] = call <4 x %1*> @llvm.masked.gather.v4p0s_s.v4p0p0s_s.1(<4 x %1**> [[TMP7:%.*]], i32 8, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x %1*> undef)
37 ; CHECK-NEXT:    [[WIDE_MASKED_GATHER3:%.*]] = call <4 x %1*> @llvm.masked.gather.v4p0s_s.v4p0p0s_s.1(<4 x %1**> [[TMP8:%.*]], i32 8, <4 x i1> <i1 true, i1 true, i1 true, i1 true>, <4 x %1*> undef)
38 entry:
39   br label %loop
41 loop:
42   %p2 = phi i64* [ %p, %entry ], [ %p.inc, %loop ]
43   %p.inc = getelementptr inbounds i64, i64* %p2, i64 2
44   %p3 = bitcast i64* %p2 to %1**
45   %v = load %1*, %1** %p3, align 8
46   %b = icmp eq i64* %p.inc, %p.last
47   br i1 %b, label %exit, label %loop
49 exit:
50   ret void
53 attributes #0 = { "target-cpu"="skylake" }