xref: /llvm-project/llvm/test/Transforms/Scalarizer/vector-of-pointer-to-vector.ll (revision 1bc9b67bd87d7ec51045951c93fd5db953faa745)
1aaf1630aSserge-sans-paille; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2*1bc9b67bSMatt Arsenault; RUN: opt %s -passes='function(scalarizer<load-store>,dce)' -S | FileCheck %s
3aaf1630aSserge-sans-pailletarget datalayout = "e-p:64:64:64-i1:8:8-i8:8:8-i16:16:16-i32:32:32-i64:64:64-f32:32:32-f64:64:64-v64:64:64-v128:128:128-a0:0:64-s0:64:64-f80:128:128-n8:16:32:64-S128"
4aaf1630aSserge-sans-paille
554608b40SBjorn Petterssondefine <1 x i32> @f1(<1 x ptr> %src, i32 %index) {
6aaf1630aSserge-sans-paille; CHECK-LABEL: @f1(
7aaf1630aSserge-sans-paille; CHECK-NEXT:    [[INDEX_IS_0:%.*]] = icmp eq i32 [[INDEX:%.*]], 0
8d0a125a1SNicolai Hähnle; CHECK-NEXT:    [[SRC_I0:%.*]] = extractelement <1 x ptr> [[SRC:%.*]], i64 0
91e55d5b1SManuel Brito; CHECK-NEXT:    [[DOTUPTO0:%.*]] = select i1 [[INDEX_IS_0]], ptr [[SRC_I0]], ptr poison
1054608b40SBjorn Pettersson; CHECK-NEXT:    [[DOTI0:%.*]] = load i32, ptr [[DOTUPTO0]], align 4
11d0a125a1SNicolai Hähnle; CHECK-NEXT:    [[TMP1:%.*]] = insertelement <1 x i32> poison, i32 [[DOTI0]], i64 0
12aaf1630aSserge-sans-paille; CHECK-NEXT:    ret <1 x i32> [[TMP1]]
13aaf1630aSserge-sans-paille;
1454608b40SBjorn Pettersson  %1 = extractelement <1 x ptr> %src, i32 %index
1554608b40SBjorn Pettersson  %2 = load <1 x i32>, ptr %1, align 4
16aaf1630aSserge-sans-paille  ret <1 x i32> %2
17aaf1630aSserge-sans-paille}
18aaf1630aSserge-sans-paille
1954608b40SBjorn Petterssondefine <1 x i32> @f1b(<1 x ptr> %src) {
20aaf1630aSserge-sans-paille; CHECK-LABEL: @f1b(
21d0a125a1SNicolai Hähnle; CHECK-NEXT:    [[SRC_I0:%.*]] = extractelement <1 x ptr> [[SRC:%.*]], i64 0
2254608b40SBjorn Pettersson; CHECK-NEXT:    [[DOTI0:%.*]] = load i32, ptr [[SRC_I0]], align 4
23d0a125a1SNicolai Hähnle; CHECK-NEXT:    [[TMP1:%.*]] = insertelement <1 x i32> poison, i32 [[DOTI0]], i64 0
24aaf1630aSserge-sans-paille; CHECK-NEXT:    ret <1 x i32> [[TMP1]]
25aaf1630aSserge-sans-paille;
2654608b40SBjorn Pettersson  %1 = extractelement <1 x ptr> %src, i32 0
2754608b40SBjorn Pettersson  %2 = load <1 x i32>, ptr %1, align 4
28aaf1630aSserge-sans-paille  ret <1 x i32> %2
29aaf1630aSserge-sans-paille}
30aaf1630aSserge-sans-paille
3154608b40SBjorn Petterssondefine <2 x i32> @f2(<1 x ptr> %src, i32 %index) {
32aaf1630aSserge-sans-paille; CHECK-LABEL: @f2(
33aaf1630aSserge-sans-paille; CHECK-NEXT:    [[INDEX_IS_0:%.*]] = icmp eq i32 [[INDEX:%.*]], 0
34d0a125a1SNicolai Hähnle; CHECK-NEXT:    [[SRC_I0:%.*]] = extractelement <1 x ptr> [[SRC:%.*]], i64 0
351e55d5b1SManuel Brito; CHECK-NEXT:    [[DOTUPTO0:%.*]] = select i1 [[INDEX_IS_0]], ptr [[SRC_I0]], ptr poison
3654608b40SBjorn Pettersson; CHECK-NEXT:    [[DOTUPTO0_I1:%.*]] = getelementptr i32, ptr [[DOTUPTO0]], i32 1
3754608b40SBjorn Pettersson; CHECK-NEXT:    [[DOTI0:%.*]] = load i32, ptr [[DOTUPTO0]], align 4
3854608b40SBjorn Pettersson; CHECK-NEXT:    [[DOTI1:%.*]] = load i32, ptr [[DOTUPTO0_I1]], align 4
39d0a125a1SNicolai Hähnle; CHECK-NEXT:    [[DOTUPTO01:%.*]] = insertelement <2 x i32> poison, i32 [[DOTI0]], i64 0
40d0a125a1SNicolai Hähnle; CHECK-NEXT:    [[TMP1:%.*]] = insertelement <2 x i32> [[DOTUPTO01]], i32 [[DOTI1]], i64 1
41aaf1630aSserge-sans-paille; CHECK-NEXT:    ret <2 x i32> [[TMP1]]
42aaf1630aSserge-sans-paille;
4354608b40SBjorn Pettersson  %1 = extractelement <1 x ptr> %src, i32 %index
4454608b40SBjorn Pettersson  %2 = load <2 x i32>, ptr %1, align 4
45aaf1630aSserge-sans-paille  ret <2 x i32> %2
46aaf1630aSserge-sans-paille}
47aaf1630aSserge-sans-paille
4854608b40SBjorn Petterssondefine <2 x i32> @f2b(<1 x ptr> %src) {
49aaf1630aSserge-sans-paille; CHECK-LABEL: @f2b(
50d0a125a1SNicolai Hähnle; CHECK-NEXT:    [[SRC_I0:%.*]] = extractelement <1 x ptr> [[SRC:%.*]], i64 0
5154608b40SBjorn Pettersson; CHECK-NEXT:    [[SRC_I0_I1:%.*]] = getelementptr i32, ptr [[SRC_I0]], i32 1
5254608b40SBjorn Pettersson; CHECK-NEXT:    [[DOTI0:%.*]] = load i32, ptr [[SRC_I0]], align 4
5354608b40SBjorn Pettersson; CHECK-NEXT:    [[DOTI1:%.*]] = load i32, ptr [[SRC_I0_I1]], align 4
54d0a125a1SNicolai Hähnle; CHECK-NEXT:    [[DOTUPTO0:%.*]] = insertelement <2 x i32> poison, i32 [[DOTI0]], i64 0
55d0a125a1SNicolai Hähnle; CHECK-NEXT:    [[TMP1:%.*]] = insertelement <2 x i32> [[DOTUPTO0]], i32 [[DOTI1]], i64 1
56aaf1630aSserge-sans-paille; CHECK-NEXT:    ret <2 x i32> [[TMP1]]
57aaf1630aSserge-sans-paille;
5854608b40SBjorn Pettersson  %1 = extractelement <1 x ptr> %src, i32 0
5954608b40SBjorn Pettersson  %2 = load <2 x i32>, ptr %1, align 4
60aaf1630aSserge-sans-paille  ret <2 x i32> %2
61aaf1630aSserge-sans-paille}
62aaf1630aSserge-sans-paille
6354608b40SBjorn Petterssondefine void @f3(<1 x ptr> %src, i32 %index, <2 x i32> %val) {
64aaf1630aSserge-sans-paille; CHECK-LABEL: @f3(
65d0a125a1SNicolai Hähnle; CHECK-NEXT:    [[VAL_I0:%.*]] = extractelement <2 x i32> [[VAL:%.*]], i64 0
66d0a125a1SNicolai Hähnle; CHECK-NEXT:    [[VAL_I1:%.*]] = extractelement <2 x i32> [[VAL]], i64 1
67aaf1630aSserge-sans-paille; CHECK-NEXT:    [[INDEX_IS_0:%.*]] = icmp eq i32 [[INDEX:%.*]], 0
68d0a125a1SNicolai Hähnle; CHECK-NEXT:    [[SRC_I0:%.*]] = extractelement <1 x ptr> [[SRC:%.*]], i64 0
691e55d5b1SManuel Brito; CHECK-NEXT:    [[DOTUPTO0:%.*]] = select i1 [[INDEX_IS_0]], ptr [[SRC_I0]], ptr poison
7054608b40SBjorn Pettersson; CHECK-NEXT:    [[DOTUPTO0_I1:%.*]] = getelementptr i32, ptr [[DOTUPTO0]], i32 1
7154608b40SBjorn Pettersson; CHECK-NEXT:    store i32 [[VAL_I0]], ptr [[DOTUPTO0]], align 4
7254608b40SBjorn Pettersson; CHECK-NEXT:    store i32 [[VAL_I1]], ptr [[DOTUPTO0_I1]], align 4
73aaf1630aSserge-sans-paille; CHECK-NEXT:    ret void
74aaf1630aSserge-sans-paille;
7554608b40SBjorn Pettersson  %1 = extractelement <1 x ptr> %src, i32 %index
7654608b40SBjorn Pettersson  store <2 x i32> %val, ptr %1, align 4
77aaf1630aSserge-sans-paille  ret void
78aaf1630aSserge-sans-paille}
79aaf1630aSserge-sans-paille
8054608b40SBjorn Petterssondefine void @f3b(<1 x ptr> %src, <2 x i32> %val) {
81aaf1630aSserge-sans-paille; CHECK-LABEL: @f3b(
82d0a125a1SNicolai Hähnle; CHECK-NEXT:    [[VAL_I0:%.*]] = extractelement <2 x i32> [[VAL:%.*]], i64 0
83d0a125a1SNicolai Hähnle; CHECK-NEXT:    [[VAL_I1:%.*]] = extractelement <2 x i32> [[VAL]], i64 1
84d0a125a1SNicolai Hähnle; CHECK-NEXT:    [[SRC_I0:%.*]] = extractelement <1 x ptr> [[SRC:%.*]], i64 0
8554608b40SBjorn Pettersson; CHECK-NEXT:    [[SRC_I0_I1:%.*]] = getelementptr i32, ptr [[SRC_I0]], i32 1
8654608b40SBjorn Pettersson; CHECK-NEXT:    store i32 [[VAL_I0]], ptr [[SRC_I0]], align 4
8754608b40SBjorn Pettersson; CHECK-NEXT:    store i32 [[VAL_I1]], ptr [[SRC_I0_I1]], align 4
88aaf1630aSserge-sans-paille; CHECK-NEXT:    ret void
89aaf1630aSserge-sans-paille;
9054608b40SBjorn Pettersson  %1 = extractelement <1 x ptr> %src, i32 0
9154608b40SBjorn Pettersson  store <2 x i32> %val, ptr %1, align 4
92aaf1630aSserge-sans-paille  ret void
93aaf1630aSserge-sans-paille}
94