xref: /llvm-project/llvm/test/Transforms/SLPVectorizer/AArch64/gather-load-128.ll (revision 138e6c1c86e8050781cb626598c380651d31206c)
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2; RUN: opt -S -passes=slp-vectorizer -mtriple=aarch64-unknown-linux-gnu -mcpu=neoverse-512tvb < %s | FileCheck %s
3
4define void @gather_load_fp128(ptr %arg) #0 {
5; CHECK-LABEL: @gather_load_fp128(
6; CHECK-NEXT:    [[GEP:%.*]] = getelementptr i8, ptr [[ARG:%.*]], i64 16
7; CHECK-NEXT:    [[LOAD0:%.*]] = load fp128, ptr [[ARG]], align 1
8; CHECK-NEXT:    [[LOAD1:%.*]] = load fp128, ptr [[GEP]], align 1
9; CHECK-NEXT:    [[LOAD2:%.*]] = load fp128, ptr null, align 1
10; CHECK-NEXT:    [[LOAD3:%.*]] = load fp128, ptr null, align 1
11; CHECK-NEXT:    [[FCMP0:%.*]] = fcmp oeq fp128 [[LOAD0]], 0xL00000000000000000000000000000000
12; CHECK-NEXT:    [[FCMP1:%.*]] = fcmp oeq fp128 [[LOAD1]], 0xL00000000000000000000000000000000
13; CHECK-NEXT:    [[FCMP2:%.*]] = fcmp oeq fp128 [[LOAD2]], 0xL00000000000000000000000000000000
14; CHECK-NEXT:    [[FCMP3:%.*]] = fcmp oeq fp128 [[LOAD3]], 0xL00000000000000000000000000000000
15; CHECK-NEXT:    ret void
16;
17  %gep = getelementptr i8, ptr %arg, i64 16
18  %load0 = load fp128, ptr %arg, align 1
19  %load1 = load fp128, ptr %gep, align 1
20  %load2 = load fp128, ptr null, align 1
21  %load3 = load fp128, ptr null, align 1
22  %fcmp0 = fcmp oeq fp128 %load0, 0xL0
23  %fcmp1 = fcmp oeq fp128 %load1, 0xL0
24  %fcmp2 = fcmp oeq fp128 %load2, 0xL0
25  %fcmp3 = fcmp oeq fp128 %load3, 0xL0
26  ret void
27}
28
29define void @gather_load_i128(ptr %arg) #0 {
30; CHECK-LABEL: @gather_load_i128(
31; CHECK-NEXT:    [[GEP:%.*]] = getelementptr i8, ptr [[ARG:%.*]], i64 16
32; CHECK-NEXT:    [[LOAD0:%.*]] = load i128, ptr [[ARG]], align 1
33; CHECK-NEXT:    [[LOAD1:%.*]] = load i128, ptr [[GEP]], align 1
34; CHECK-NEXT:    [[LOAD2:%.*]] = load i128, ptr null, align 1
35; CHECK-NEXT:    [[LOAD3:%.*]] = load i128, ptr null, align 1
36; CHECK-NEXT:    [[CMP0:%.*]] = icmp eq i128 [[LOAD0]], 0
37; CHECK-NEXT:    [[CMP1:%.*]] = icmp eq i128 [[LOAD1]], 0
38; CHECK-NEXT:    [[CMP2:%.*]] = icmp eq i128 [[LOAD2]], 0
39; CHECK-NEXT:    [[CMP3:%.*]] = icmp eq i128 [[LOAD3]], 0
40; CHECK-NEXT:    ret void
41;
42  %gep = getelementptr i8, ptr %arg, i64 16
43  %load0 = load i128, ptr %arg, align 1
44  %load1 = load i128, ptr %gep, align 1
45  %load2 = load i128, ptr null, align 1
46  %load3 = load i128, ptr null, align 1
47  %cmp0 = icmp eq i128 %load0, 0
48  %cmp1 = icmp eq i128 %load1, 0
49  %cmp2 = icmp eq i128 %load2, 0
50  %cmp3 = icmp eq i128 %load3, 0
51  ret void
52}
53
54attributes #0 = { vscale_range(2,2) }
55