Re-land [openmp] Fix warnings when building on Windows with latest MSVC or Clang...
[llvm-project.git] / llvm / test / Transforms / SLPVectorizer / AArch64 / multiple_reduction.ll
blobf85f658fed4d5c91255083f2e3bbc0a7cd56ff30
1 ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py
2 ; RUN: opt < %s -passes=slp-vectorizer -S | FileCheck %s
4 target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128"
5 target triple = "aarch64"
7 ; This test has mutual reductions, referencing the same data:
8 ; for i = ...
9 ;   sm += x[i];
10 ;   sq += xptr x[i];
11 ; It currently doesn't SLP vectorize, but should.
13 define i64 @straight(ptr nocapture noundef readonly %p, i32 noundef %st) {
14 ; CHECK-LABEL: @straight(
15 ; CHECK-NEXT:  entry:
16 ; CHECK-NEXT:    [[IDX_EXT:%.*]] = sext i32 [[ST:%.*]] to i64
17 ; CHECK-NEXT:    [[TMP0:%.*]] = load <8 x i16>, ptr [[P:%.*]], align 2
18 ; CHECK-NEXT:    [[ADD_PTR:%.*]] = getelementptr inbounds i16, ptr [[P]], i64 [[IDX_EXT]]
19 ; CHECK-NEXT:    [[TMP1:%.*]] = load <8 x i16>, ptr [[ADD_PTR]], align 2
20 ; CHECK-NEXT:    [[ADD_PTR_1:%.*]] = getelementptr inbounds i16, ptr [[ADD_PTR]], i64 [[IDX_EXT]]
21 ; CHECK-NEXT:    [[TMP2:%.*]] = load <8 x i16>, ptr [[ADD_PTR_1]], align 2
22 ; CHECK-NEXT:    [[ADD_PTR_2:%.*]] = getelementptr inbounds i16, ptr [[ADD_PTR_1]], i64 [[IDX_EXT]]
23 ; CHECK-NEXT:    [[TMP3:%.*]] = load <8 x i16>, ptr [[ADD_PTR_2]], align 2
24 ; CHECK-NEXT:    [[ADD_PTR_3:%.*]] = getelementptr inbounds i16, ptr [[ADD_PTR_2]], i64 [[IDX_EXT]]
25 ; CHECK-NEXT:    [[TMP4:%.*]] = load <8 x i16>, ptr [[ADD_PTR_3]], align 2
26 ; CHECK-NEXT:    [[ADD_PTR_4:%.*]] = getelementptr inbounds i16, ptr [[ADD_PTR_3]], i64 [[IDX_EXT]]
27 ; CHECK-NEXT:    [[TMP5:%.*]] = load <8 x i16>, ptr [[ADD_PTR_4]], align 2
28 ; CHECK-NEXT:    [[ADD_PTR_5:%.*]] = getelementptr inbounds i16, ptr [[ADD_PTR_4]], i64 [[IDX_EXT]]
29 ; CHECK-NEXT:    [[TMP6:%.*]] = load <8 x i16>, ptr [[ADD_PTR_5]], align 2
30 ; CHECK-NEXT:    [[ADD_PTR_6:%.*]] = getelementptr inbounds i16, ptr [[ADD_PTR_5]], i64 [[IDX_EXT]]
31 ; CHECK-NEXT:    [[TMP7:%.*]] = load <8 x i16>, ptr [[ADD_PTR_6]], align 2
32 ; CHECK-NEXT:    [[TMP8:%.*]] = shufflevector <8 x i16> [[TMP0]], <8 x i16> poison, <64 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>
33 ; CHECK-NEXT:    [[TMP9:%.*]] = shufflevector <8 x i16> [[TMP1]], <8 x i16> poison, <64 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>
34 ; CHECK-NEXT:    [[TMP10:%.*]] = shufflevector <64 x i16> [[TMP8]], <64 x i16> [[TMP9]], <64 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 64, i32 65, i32 66, i32 67, i32 68, i32 69, i32 70, i32 71, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31, i32 32, i32 33, i32 34, i32 35, i32 36, i32 37, i32 38, i32 39, i32 40, i32 41, i32 42, i32 43, i32 44, i32 45, i32 46, i32 47, i32 48, i32 49, i32 50, i32 51, i32 52, i32 53, i32 54, i32 55, i32 56, i32 57, i32 58, i32 59, i32 60, i32 61, i32 62, i32 63>
35 ; CHECK-NEXT:    [[TMP11:%.*]] = shufflevector <8 x i16> [[TMP2]], <8 x i16> poison, <64 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>
36 ; CHECK-NEXT:    [[TMP12:%.*]] = shufflevector <64 x i16> [[TMP10]], <64 x i16> [[TMP11]], <64 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 64, i32 65, i32 66, i32 67, i32 68, i32 69, i32 70, i32 71, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31, i32 32, i32 33, i32 34, i32 35, i32 36, i32 37, i32 38, i32 39, i32 40, i32 41, i32 42, i32 43, i32 44, i32 45, i32 46, i32 47, i32 48, i32 49, i32 50, i32 51, i32 52, i32 53, i32 54, i32 55, i32 56, i32 57, i32 58, i32 59, i32 60, i32 61, i32 62, i32 63>
37 ; CHECK-NEXT:    [[TMP13:%.*]] = shufflevector <8 x i16> [[TMP3]], <8 x i16> poison, <64 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>
38 ; CHECK-NEXT:    [[TMP14:%.*]] = shufflevector <64 x i16> [[TMP12]], <64 x i16> [[TMP13]], <64 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 64, i32 65, i32 66, i32 67, i32 68, i32 69, i32 70, i32 71, i32 32, i32 33, i32 34, i32 35, i32 36, i32 37, i32 38, i32 39, i32 40, i32 41, i32 42, i32 43, i32 44, i32 45, i32 46, i32 47, i32 48, i32 49, i32 50, i32 51, i32 52, i32 53, i32 54, i32 55, i32 56, i32 57, i32 58, i32 59, i32 60, i32 61, i32 62, i32 63>
39 ; CHECK-NEXT:    [[TMP15:%.*]] = shufflevector <8 x i16> [[TMP4]], <8 x i16> poison, <64 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>
40 ; CHECK-NEXT:    [[TMP16:%.*]] = shufflevector <64 x i16> [[TMP14]], <64 x i16> [[TMP15]], <64 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31, i32 64, i32 65, i32 66, i32 67, i32 68, i32 69, i32 70, i32 71, i32 40, i32 41, i32 42, i32 43, i32 44, i32 45, i32 46, i32 47, i32 48, i32 49, i32 50, i32 51, i32 52, i32 53, i32 54, i32 55, i32 56, i32 57, i32 58, i32 59, i32 60, i32 61, i32 62, i32 63>
41 ; CHECK-NEXT:    [[TMP17:%.*]] = shufflevector <8 x i16> [[TMP5]], <8 x i16> poison, <64 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>
42 ; CHECK-NEXT:    [[TMP18:%.*]] = shufflevector <64 x i16> [[TMP16]], <64 x i16> [[TMP17]], <64 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31, i32 32, i32 33, i32 34, i32 35, i32 36, i32 37, i32 38, i32 39, i32 64, i32 65, i32 66, i32 67, i32 68, i32 69, i32 70, i32 71, i32 48, i32 49, i32 50, i32 51, i32 52, i32 53, i32 54, i32 55, i32 56, i32 57, i32 58, i32 59, i32 60, i32 61, i32 62, i32 63>
43 ; CHECK-NEXT:    [[TMP19:%.*]] = shufflevector <8 x i16> [[TMP6]], <8 x i16> poison, <64 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>
44 ; CHECK-NEXT:    [[TMP20:%.*]] = shufflevector <64 x i16> [[TMP18]], <64 x i16> [[TMP19]], <64 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31, i32 32, i32 33, i32 34, i32 35, i32 36, i32 37, i32 38, i32 39, i32 40, i32 41, i32 42, i32 43, i32 44, i32 45, i32 46, i32 47, i32 64, i32 65, i32 66, i32 67, i32 68, i32 69, i32 70, i32 71, i32 56, i32 57, i32 58, i32 59, i32 60, i32 61, i32 62, i32 63>
45 ; CHECK-NEXT:    [[TMP21:%.*]] = shufflevector <8 x i16> [[TMP7]], <8 x i16> poison, <64 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison, i32 poison>
46 ; CHECK-NEXT:    [[TMP22:%.*]] = shufflevector <64 x i16> [[TMP20]], <64 x i16> [[TMP21]], <64 x i32> <i32 0, i32 1, i32 2, i32 3, i32 4, i32 5, i32 6, i32 7, i32 8, i32 9, i32 10, i32 11, i32 12, i32 13, i32 14, i32 15, i32 16, i32 17, i32 18, i32 19, i32 20, i32 21, i32 22, i32 23, i32 24, i32 25, i32 26, i32 27, i32 28, i32 29, i32 30, i32 31, i32 32, i32 33, i32 34, i32 35, i32 36, i32 37, i32 38, i32 39, i32 40, i32 41, i32 42, i32 43, i32 44, i32 45, i32 46, i32 47, i32 48, i32 49, i32 50, i32 51, i32 52, i32 53, i32 54, i32 55, i32 64, i32 65, i32 66, i32 67, i32 68, i32 69, i32 70, i32 71>
47 ; CHECK-NEXT:    [[TMP23:%.*]] = zext <64 x i16> [[TMP22]] to <64 x i32>
48 ; CHECK-NEXT:    [[TMP24:%.*]] = extractelement <64 x i32> [[TMP23]], i32 0
49 ; CHECK-NEXT:    [[TMP25:%.*]] = extractelement <64 x i32> [[TMP23]], i32 1
50 ; CHECK-NEXT:    [[ADD_1:%.*]] = add nuw nsw i32 [[TMP24]], [[TMP25]]
51 ; CHECK-NEXT:    [[TMP26:%.*]] = mul nuw nsw <64 x i32> [[TMP23]], [[TMP23]]
52 ; CHECK-NEXT:    [[TMP27:%.*]] = extractelement <64 x i32> [[TMP23]], i32 2
53 ; CHECK-NEXT:    [[ADD_2:%.*]] = add nuw nsw i32 [[ADD_1]], [[TMP27]]
54 ; CHECK-NEXT:    [[TMP28:%.*]] = extractelement <64 x i32> [[TMP23]], i32 3
55 ; CHECK-NEXT:    [[ADD_3:%.*]] = add nuw nsw i32 [[ADD_2]], [[TMP28]]
56 ; CHECK-NEXT:    [[TMP29:%.*]] = extractelement <64 x i32> [[TMP23]], i32 4
57 ; CHECK-NEXT:    [[ADD_4:%.*]] = add nuw nsw i32 [[ADD_3]], [[TMP29]]
58 ; CHECK-NEXT:    [[TMP30:%.*]] = extractelement <64 x i32> [[TMP23]], i32 5
59 ; CHECK-NEXT:    [[ADD_5:%.*]] = add nuw nsw i32 [[ADD_4]], [[TMP30]]
60 ; CHECK-NEXT:    [[TMP31:%.*]] = extractelement <64 x i32> [[TMP23]], i32 6
61 ; CHECK-NEXT:    [[ADD_6:%.*]] = add nuw nsw i32 [[ADD_5]], [[TMP31]]
62 ; CHECK-NEXT:    [[TMP32:%.*]] = extractelement <64 x i32> [[TMP23]], i32 7
63 ; CHECK-NEXT:    [[ADD_7:%.*]] = add nuw nsw i32 [[ADD_6]], [[TMP32]]
64 ; CHECK-NEXT:    [[TMP33:%.*]] = extractelement <64 x i32> [[TMP23]], i32 8
65 ; CHECK-NEXT:    [[ADD_141:%.*]] = add nuw nsw i32 [[ADD_7]], [[TMP33]]
66 ; CHECK-NEXT:    [[TMP34:%.*]] = extractelement <64 x i32> [[TMP23]], i32 9
67 ; CHECK-NEXT:    [[ADD_1_1:%.*]] = add nuw nsw i32 [[ADD_141]], [[TMP34]]
68 ; CHECK-NEXT:    [[TMP35:%.*]] = extractelement <64 x i32> [[TMP23]], i32 10
69 ; CHECK-NEXT:    [[ADD_2_1:%.*]] = add nuw nsw i32 [[ADD_1_1]], [[TMP35]]
70 ; CHECK-NEXT:    [[TMP36:%.*]] = extractelement <64 x i32> [[TMP23]], i32 11
71 ; CHECK-NEXT:    [[ADD_3_1:%.*]] = add nuw nsw i32 [[ADD_2_1]], [[TMP36]]
72 ; CHECK-NEXT:    [[TMP37:%.*]] = extractelement <64 x i32> [[TMP23]], i32 12
73 ; CHECK-NEXT:    [[ADD_4_1:%.*]] = add nuw nsw i32 [[ADD_3_1]], [[TMP37]]
74 ; CHECK-NEXT:    [[TMP38:%.*]] = extractelement <64 x i32> [[TMP23]], i32 13
75 ; CHECK-NEXT:    [[ADD_5_1:%.*]] = add nuw nsw i32 [[ADD_4_1]], [[TMP38]]
76 ; CHECK-NEXT:    [[TMP39:%.*]] = extractelement <64 x i32> [[TMP23]], i32 14
77 ; CHECK-NEXT:    [[ADD_6_1:%.*]] = add nuw nsw i32 [[ADD_5_1]], [[TMP39]]
78 ; CHECK-NEXT:    [[TMP40:%.*]] = extractelement <64 x i32> [[TMP23]], i32 15
79 ; CHECK-NEXT:    [[ADD_7_1:%.*]] = add nuw nsw i32 [[ADD_6_1]], [[TMP40]]
80 ; CHECK-NEXT:    [[TMP41:%.*]] = extractelement <64 x i32> [[TMP23]], i32 16
81 ; CHECK-NEXT:    [[ADD_245:%.*]] = add nuw nsw i32 [[ADD_7_1]], [[TMP41]]
82 ; CHECK-NEXT:    [[TMP42:%.*]] = extractelement <64 x i32> [[TMP23]], i32 17
83 ; CHECK-NEXT:    [[ADD_1_2:%.*]] = add nuw nsw i32 [[ADD_245]], [[TMP42]]
84 ; CHECK-NEXT:    [[TMP43:%.*]] = extractelement <64 x i32> [[TMP23]], i32 18
85 ; CHECK-NEXT:    [[ADD_2_2:%.*]] = add nuw nsw i32 [[ADD_1_2]], [[TMP43]]
86 ; CHECK-NEXT:    [[TMP44:%.*]] = extractelement <64 x i32> [[TMP23]], i32 19
87 ; CHECK-NEXT:    [[ADD_3_2:%.*]] = add nuw nsw i32 [[ADD_2_2]], [[TMP44]]
88 ; CHECK-NEXT:    [[TMP45:%.*]] = extractelement <64 x i32> [[TMP23]], i32 20
89 ; CHECK-NEXT:    [[ADD_4_2:%.*]] = add nuw nsw i32 [[ADD_3_2]], [[TMP45]]
90 ; CHECK-NEXT:    [[TMP46:%.*]] = extractelement <64 x i32> [[TMP23]], i32 21
91 ; CHECK-NEXT:    [[ADD_5_2:%.*]] = add nuw nsw i32 [[ADD_4_2]], [[TMP46]]
92 ; CHECK-NEXT:    [[TMP47:%.*]] = extractelement <64 x i32> [[TMP23]], i32 22
93 ; CHECK-NEXT:    [[ADD_6_2:%.*]] = add nuw nsw i32 [[ADD_5_2]], [[TMP47]]
94 ; CHECK-NEXT:    [[TMP48:%.*]] = extractelement <64 x i32> [[TMP23]], i32 23
95 ; CHECK-NEXT:    [[ADD_7_2:%.*]] = add nuw nsw i32 [[ADD_6_2]], [[TMP48]]
96 ; CHECK-NEXT:    [[TMP49:%.*]] = extractelement <64 x i32> [[TMP23]], i32 24
97 ; CHECK-NEXT:    [[ADD_349:%.*]] = add nuw nsw i32 [[ADD_7_2]], [[TMP49]]
98 ; CHECK-NEXT:    [[TMP50:%.*]] = extractelement <64 x i32> [[TMP23]], i32 25
99 ; CHECK-NEXT:    [[ADD_1_3:%.*]] = add nuw nsw i32 [[ADD_349]], [[TMP50]]
100 ; CHECK-NEXT:    [[TMP51:%.*]] = extractelement <64 x i32> [[TMP23]], i32 26
101 ; CHECK-NEXT:    [[ADD_2_3:%.*]] = add nuw nsw i32 [[ADD_1_3]], [[TMP51]]
102 ; CHECK-NEXT:    [[TMP52:%.*]] = extractelement <64 x i32> [[TMP23]], i32 27
103 ; CHECK-NEXT:    [[ADD_3_3:%.*]] = add nuw nsw i32 [[ADD_2_3]], [[TMP52]]
104 ; CHECK-NEXT:    [[TMP53:%.*]] = extractelement <64 x i32> [[TMP23]], i32 28
105 ; CHECK-NEXT:    [[ADD_4_3:%.*]] = add nuw nsw i32 [[ADD_3_3]], [[TMP53]]
106 ; CHECK-NEXT:    [[TMP54:%.*]] = extractelement <64 x i32> [[TMP23]], i32 29
107 ; CHECK-NEXT:    [[ADD_5_3:%.*]] = add nuw nsw i32 [[ADD_4_3]], [[TMP54]]
108 ; CHECK-NEXT:    [[TMP55:%.*]] = extractelement <64 x i32> [[TMP23]], i32 30
109 ; CHECK-NEXT:    [[ADD_6_3:%.*]] = add nuw nsw i32 [[ADD_5_3]], [[TMP55]]
110 ; CHECK-NEXT:    [[TMP56:%.*]] = extractelement <64 x i32> [[TMP23]], i32 31
111 ; CHECK-NEXT:    [[ADD_7_3:%.*]] = add nuw nsw i32 [[ADD_6_3]], [[TMP56]]
112 ; CHECK-NEXT:    [[TMP57:%.*]] = extractelement <64 x i32> [[TMP23]], i32 32
113 ; CHECK-NEXT:    [[ADD_453:%.*]] = add nuw nsw i32 [[ADD_7_3]], [[TMP57]]
114 ; CHECK-NEXT:    [[TMP58:%.*]] = extractelement <64 x i32> [[TMP23]], i32 33
115 ; CHECK-NEXT:    [[ADD_1_4:%.*]] = add nuw nsw i32 [[ADD_453]], [[TMP58]]
116 ; CHECK-NEXT:    [[TMP59:%.*]] = extractelement <64 x i32> [[TMP23]], i32 34
117 ; CHECK-NEXT:    [[ADD_2_4:%.*]] = add nuw nsw i32 [[ADD_1_4]], [[TMP59]]
118 ; CHECK-NEXT:    [[TMP60:%.*]] = extractelement <64 x i32> [[TMP23]], i32 35
119 ; CHECK-NEXT:    [[ADD_3_4:%.*]] = add nuw nsw i32 [[ADD_2_4]], [[TMP60]]
120 ; CHECK-NEXT:    [[TMP61:%.*]] = extractelement <64 x i32> [[TMP23]], i32 36
121 ; CHECK-NEXT:    [[ADD_4_4:%.*]] = add nuw nsw i32 [[ADD_3_4]], [[TMP61]]
122 ; CHECK-NEXT:    [[TMP62:%.*]] = extractelement <64 x i32> [[TMP23]], i32 37
123 ; CHECK-NEXT:    [[ADD_5_4:%.*]] = add nuw nsw i32 [[ADD_4_4]], [[TMP62]]
124 ; CHECK-NEXT:    [[TMP63:%.*]] = extractelement <64 x i32> [[TMP23]], i32 38
125 ; CHECK-NEXT:    [[ADD_6_4:%.*]] = add nuw nsw i32 [[ADD_5_4]], [[TMP63]]
126 ; CHECK-NEXT:    [[TMP64:%.*]] = extractelement <64 x i32> [[TMP23]], i32 39
127 ; CHECK-NEXT:    [[ADD_7_4:%.*]] = add nuw nsw i32 [[ADD_6_4]], [[TMP64]]
128 ; CHECK-NEXT:    [[TMP65:%.*]] = extractelement <64 x i32> [[TMP23]], i32 40
129 ; CHECK-NEXT:    [[ADD_557:%.*]] = add nuw nsw i32 [[ADD_7_4]], [[TMP65]]
130 ; CHECK-NEXT:    [[TMP66:%.*]] = extractelement <64 x i32> [[TMP23]], i32 41
131 ; CHECK-NEXT:    [[ADD_1_5:%.*]] = add nuw nsw i32 [[ADD_557]], [[TMP66]]
132 ; CHECK-NEXT:    [[TMP67:%.*]] = extractelement <64 x i32> [[TMP23]], i32 42
133 ; CHECK-NEXT:    [[ADD_2_5:%.*]] = add nuw nsw i32 [[ADD_1_5]], [[TMP67]]
134 ; CHECK-NEXT:    [[TMP68:%.*]] = extractelement <64 x i32> [[TMP23]], i32 43
135 ; CHECK-NEXT:    [[ADD_3_5:%.*]] = add nuw nsw i32 [[ADD_2_5]], [[TMP68]]
136 ; CHECK-NEXT:    [[TMP69:%.*]] = extractelement <64 x i32> [[TMP23]], i32 44
137 ; CHECK-NEXT:    [[ADD_4_5:%.*]] = add nuw nsw i32 [[ADD_3_5]], [[TMP69]]
138 ; CHECK-NEXT:    [[TMP70:%.*]] = extractelement <64 x i32> [[TMP23]], i32 45
139 ; CHECK-NEXT:    [[ADD_5_5:%.*]] = add nuw nsw i32 [[ADD_4_5]], [[TMP70]]
140 ; CHECK-NEXT:    [[TMP71:%.*]] = extractelement <64 x i32> [[TMP23]], i32 46
141 ; CHECK-NEXT:    [[ADD_6_5:%.*]] = add nuw nsw i32 [[ADD_5_5]], [[TMP71]]
142 ; CHECK-NEXT:    [[TMP72:%.*]] = extractelement <64 x i32> [[TMP23]], i32 47
143 ; CHECK-NEXT:    [[ADD_7_5:%.*]] = add nuw nsw i32 [[ADD_6_5]], [[TMP72]]
144 ; CHECK-NEXT:    [[TMP73:%.*]] = extractelement <64 x i32> [[TMP23]], i32 48
145 ; CHECK-NEXT:    [[ADD_661:%.*]] = add nuw nsw i32 [[ADD_7_5]], [[TMP73]]
146 ; CHECK-NEXT:    [[TMP74:%.*]] = extractelement <64 x i32> [[TMP23]], i32 49
147 ; CHECK-NEXT:    [[ADD_1_6:%.*]] = add nuw nsw i32 [[ADD_661]], [[TMP74]]
148 ; CHECK-NEXT:    [[TMP75:%.*]] = extractelement <64 x i32> [[TMP23]], i32 50
149 ; CHECK-NEXT:    [[ADD_2_6:%.*]] = add nuw nsw i32 [[ADD_1_6]], [[TMP75]]
150 ; CHECK-NEXT:    [[TMP76:%.*]] = extractelement <64 x i32> [[TMP23]], i32 51
151 ; CHECK-NEXT:    [[ADD_3_6:%.*]] = add nuw nsw i32 [[ADD_2_6]], [[TMP76]]
152 ; CHECK-NEXT:    [[TMP77:%.*]] = extractelement <64 x i32> [[TMP23]], i32 52
153 ; CHECK-NEXT:    [[ADD_4_6:%.*]] = add nuw nsw i32 [[ADD_3_6]], [[TMP77]]
154 ; CHECK-NEXT:    [[TMP78:%.*]] = extractelement <64 x i32> [[TMP23]], i32 53
155 ; CHECK-NEXT:    [[ADD_5_6:%.*]] = add nuw nsw i32 [[ADD_4_6]], [[TMP78]]
156 ; CHECK-NEXT:    [[TMP79:%.*]] = extractelement <64 x i32> [[TMP23]], i32 54
157 ; CHECK-NEXT:    [[ADD_6_6:%.*]] = add nuw nsw i32 [[ADD_5_6]], [[TMP79]]
158 ; CHECK-NEXT:    [[TMP80:%.*]] = extractelement <64 x i32> [[TMP23]], i32 55
159 ; CHECK-NEXT:    [[ADD_7_6:%.*]] = add nuw nsw i32 [[ADD_6_6]], [[TMP80]]
160 ; CHECK-NEXT:    [[TMP81:%.*]] = extractelement <64 x i32> [[TMP23]], i32 56
161 ; CHECK-NEXT:    [[ADD_765:%.*]] = add nuw nsw i32 [[ADD_7_6]], [[TMP81]]
162 ; CHECK-NEXT:    [[TMP82:%.*]] = extractelement <64 x i32> [[TMP23]], i32 57
163 ; CHECK-NEXT:    [[ADD_1_7:%.*]] = add nuw nsw i32 [[ADD_765]], [[TMP82]]
164 ; CHECK-NEXT:    [[TMP83:%.*]] = extractelement <64 x i32> [[TMP23]], i32 58
165 ; CHECK-NEXT:    [[ADD_2_7:%.*]] = add nuw nsw i32 [[ADD_1_7]], [[TMP83]]
166 ; CHECK-NEXT:    [[TMP84:%.*]] = extractelement <64 x i32> [[TMP23]], i32 59
167 ; CHECK-NEXT:    [[ADD_3_7:%.*]] = add nuw nsw i32 [[ADD_2_7]], [[TMP84]]
168 ; CHECK-NEXT:    [[TMP85:%.*]] = extractelement <64 x i32> [[TMP23]], i32 60
169 ; CHECK-NEXT:    [[ADD_4_7:%.*]] = add nuw nsw i32 [[ADD_3_7]], [[TMP85]]
170 ; CHECK-NEXT:    [[TMP86:%.*]] = extractelement <64 x i32> [[TMP23]], i32 61
171 ; CHECK-NEXT:    [[ADD_5_7:%.*]] = add nuw nsw i32 [[ADD_4_7]], [[TMP86]]
172 ; CHECK-NEXT:    [[TMP87:%.*]] = extractelement <64 x i32> [[TMP23]], i32 62
173 ; CHECK-NEXT:    [[ADD_6_7:%.*]] = add nuw nsw i32 [[ADD_5_7]], [[TMP87]]
174 ; CHECK-NEXT:    [[TMP88:%.*]] = extractelement <64 x i32> [[TMP23]], i32 63
175 ; CHECK-NEXT:    [[ADD_7_7:%.*]] = add nuw nsw i32 [[ADD_6_7]], [[TMP88]]
176 ; CHECK-NEXT:    [[TMP89:%.*]] = call i32 @llvm.vector.reduce.add.v64i32(<64 x i32> [[TMP26]])
177 ; CHECK-NEXT:    [[CONV15:%.*]] = zext i32 [[ADD_7_7]] to i64
178 ; CHECK-NEXT:    [[CONV16:%.*]] = zext i32 [[TMP89]] to i64
179 ; CHECK-NEXT:    [[SHL:%.*]] = shl nuw i64 [[CONV16]], 32
180 ; CHECK-NEXT:    [[ADD17:%.*]] = or i64 [[SHL]], [[CONV15]]
181 ; CHECK-NEXT:    ret i64 [[ADD17]]
183 entry:
184   %idx.ext = sext i32 %st to i64
185   %0 = load i16, ptr %p, align 2
186   %conv = zext i16 %0 to i32
187   %mul = mul nuw nsw i32 %conv, %conv
188   %arrayidx.1 = getelementptr inbounds i16, ptr %p, i64 1
189   %1 = load i16, ptr %arrayidx.1, align 2
190   %conv.1 = zext i16 %1 to i32
191   %add.1 = add nuw nsw i32 %conv, %conv.1
192   %mul.1 = mul nuw nsw i32 %conv.1, %conv.1
193   %add11.1 = add nuw i32 %mul.1, %mul
194   %arrayidx.2 = getelementptr inbounds i16, ptr %p, i64 2
195   %2 = load i16, ptr %arrayidx.2, align 2
196   %conv.2 = zext i16 %2 to i32
197   %add.2 = add nuw nsw i32 %add.1, %conv.2
198   %mul.2 = mul nuw nsw i32 %conv.2, %conv.2
199   %add11.2 = add i32 %mul.2, %add11.1
200   %arrayidx.3 = getelementptr inbounds i16, ptr %p, i64 3
201   %3 = load i16, ptr %arrayidx.3, align 2
202   %conv.3 = zext i16 %3 to i32
203   %add.3 = add nuw nsw i32 %add.2, %conv.3
204   %mul.3 = mul nuw nsw i32 %conv.3, %conv.3
205   %add11.3 = add i32 %mul.3, %add11.2
206   %arrayidx.4 = getelementptr inbounds i16, ptr %p, i64 4
207   %4 = load i16, ptr %arrayidx.4, align 2
208   %conv.4 = zext i16 %4 to i32
209   %add.4 = add nuw nsw i32 %add.3, %conv.4
210   %mul.4 = mul nuw nsw i32 %conv.4, %conv.4
211   %add11.4 = add i32 %mul.4, %add11.3
212   %arrayidx.5 = getelementptr inbounds i16, ptr %p, i64 5
213   %5 = load i16, ptr %arrayidx.5, align 2
214   %conv.5 = zext i16 %5 to i32
215   %add.5 = add nuw nsw i32 %add.4, %conv.5
216   %mul.5 = mul nuw nsw i32 %conv.5, %conv.5
217   %add11.5 = add i32 %mul.5, %add11.4
218   %arrayidx.6 = getelementptr inbounds i16, ptr %p, i64 6
219   %6 = load i16, ptr %arrayidx.6, align 2
220   %conv.6 = zext i16 %6 to i32
221   %add.6 = add nuw nsw i32 %add.5, %conv.6
222   %mul.6 = mul nuw nsw i32 %conv.6, %conv.6
223   %add11.6 = add i32 %mul.6, %add11.5
224   %arrayidx.7 = getelementptr inbounds i16, ptr %p, i64 7
225   %7 = load i16, ptr %arrayidx.7, align 2
226   %conv.7 = zext i16 %7 to i32
227   %add.7 = add nuw nsw i32 %add.6, %conv.7
228   %mul.7 = mul nuw nsw i32 %conv.7, %conv.7
229   %add11.7 = add i32 %mul.7, %add11.6
230   %add.ptr = getelementptr inbounds i16, ptr %p, i64 %idx.ext
231   %8 = load i16, ptr %add.ptr, align 2
232   %conv.140 = zext i16 %8 to i32
233   %add.141 = add nuw nsw i32 %add.7, %conv.140
234   %mul.142 = mul nuw nsw i32 %conv.140, %conv.140
235   %add11.143 = add i32 %mul.142, %add11.7
236   %arrayidx.1.1 = getelementptr inbounds i16, ptr %add.ptr, i64 1
237   %9 = load i16, ptr %arrayidx.1.1, align 2
238   %conv.1.1 = zext i16 %9 to i32
239   %add.1.1 = add nuw nsw i32 %add.141, %conv.1.1
240   %mul.1.1 = mul nuw nsw i32 %conv.1.1, %conv.1.1
241   %add11.1.1 = add i32 %mul.1.1, %add11.143
242   %arrayidx.2.1 = getelementptr inbounds i16, ptr %add.ptr, i64 2
243   %10 = load i16, ptr %arrayidx.2.1, align 2
244   %conv.2.1 = zext i16 %10 to i32
245   %add.2.1 = add nuw nsw i32 %add.1.1, %conv.2.1
246   %mul.2.1 = mul nuw nsw i32 %conv.2.1, %conv.2.1
247   %add11.2.1 = add i32 %mul.2.1, %add11.1.1
248   %arrayidx.3.1 = getelementptr inbounds i16, ptr %add.ptr, i64 3
249   %11 = load i16, ptr %arrayidx.3.1, align 2
250   %conv.3.1 = zext i16 %11 to i32
251   %add.3.1 = add nuw nsw i32 %add.2.1, %conv.3.1
252   %mul.3.1 = mul nuw nsw i32 %conv.3.1, %conv.3.1
253   %add11.3.1 = add i32 %mul.3.1, %add11.2.1
254   %arrayidx.4.1 = getelementptr inbounds i16, ptr %add.ptr, i64 4
255   %12 = load i16, ptr %arrayidx.4.1, align 2
256   %conv.4.1 = zext i16 %12 to i32
257   %add.4.1 = add nuw nsw i32 %add.3.1, %conv.4.1
258   %mul.4.1 = mul nuw nsw i32 %conv.4.1, %conv.4.1
259   %add11.4.1 = add i32 %mul.4.1, %add11.3.1
260   %arrayidx.5.1 = getelementptr inbounds i16, ptr %add.ptr, i64 5
261   %13 = load i16, ptr %arrayidx.5.1, align 2
262   %conv.5.1 = zext i16 %13 to i32
263   %add.5.1 = add nuw nsw i32 %add.4.1, %conv.5.1
264   %mul.5.1 = mul nuw nsw i32 %conv.5.1, %conv.5.1
265   %add11.5.1 = add i32 %mul.5.1, %add11.4.1
266   %arrayidx.6.1 = getelementptr inbounds i16, ptr %add.ptr, i64 6
267   %14 = load i16, ptr %arrayidx.6.1, align 2
268   %conv.6.1 = zext i16 %14 to i32
269   %add.6.1 = add nuw nsw i32 %add.5.1, %conv.6.1
270   %mul.6.1 = mul nuw nsw i32 %conv.6.1, %conv.6.1
271   %add11.6.1 = add i32 %mul.6.1, %add11.5.1
272   %arrayidx.7.1 = getelementptr inbounds i16, ptr %add.ptr, i64 7
273   %15 = load i16, ptr %arrayidx.7.1, align 2
274   %conv.7.1 = zext i16 %15 to i32
275   %add.7.1 = add nuw nsw i32 %add.6.1, %conv.7.1
276   %mul.7.1 = mul nuw nsw i32 %conv.7.1, %conv.7.1
277   %add11.7.1 = add i32 %mul.7.1, %add11.6.1
278   %add.ptr.1 = getelementptr inbounds i16, ptr %add.ptr, i64 %idx.ext
279   %16 = load i16, ptr %add.ptr.1, align 2
280   %conv.244 = zext i16 %16 to i32
281   %add.245 = add nuw nsw i32 %add.7.1, %conv.244
282   %mul.246 = mul nuw nsw i32 %conv.244, %conv.244
283   %add11.247 = add i32 %mul.246, %add11.7.1
284   %arrayidx.1.2 = getelementptr inbounds i16, ptr %add.ptr.1, i64 1
285   %17 = load i16, ptr %arrayidx.1.2, align 2
286   %conv.1.2 = zext i16 %17 to i32
287   %add.1.2 = add nuw nsw i32 %add.245, %conv.1.2
288   %mul.1.2 = mul nuw nsw i32 %conv.1.2, %conv.1.2
289   %add11.1.2 = add i32 %mul.1.2, %add11.247
290   %arrayidx.2.2 = getelementptr inbounds i16, ptr %add.ptr.1, i64 2
291   %18 = load i16, ptr %arrayidx.2.2, align 2
292   %conv.2.2 = zext i16 %18 to i32
293   %add.2.2 = add nuw nsw i32 %add.1.2, %conv.2.2
294   %mul.2.2 = mul nuw nsw i32 %conv.2.2, %conv.2.2
295   %add11.2.2 = add i32 %mul.2.2, %add11.1.2
296   %arrayidx.3.2 = getelementptr inbounds i16, ptr %add.ptr.1, i64 3
297   %19 = load i16, ptr %arrayidx.3.2, align 2
298   %conv.3.2 = zext i16 %19 to i32
299   %add.3.2 = add nuw nsw i32 %add.2.2, %conv.3.2
300   %mul.3.2 = mul nuw nsw i32 %conv.3.2, %conv.3.2
301   %add11.3.2 = add i32 %mul.3.2, %add11.2.2
302   %arrayidx.4.2 = getelementptr inbounds i16, ptr %add.ptr.1, i64 4
303   %20 = load i16, ptr %arrayidx.4.2, align 2
304   %conv.4.2 = zext i16 %20 to i32
305   %add.4.2 = add nuw nsw i32 %add.3.2, %conv.4.2
306   %mul.4.2 = mul nuw nsw i32 %conv.4.2, %conv.4.2
307   %add11.4.2 = add i32 %mul.4.2, %add11.3.2
308   %arrayidx.5.2 = getelementptr inbounds i16, ptr %add.ptr.1, i64 5
309   %21 = load i16, ptr %arrayidx.5.2, align 2
310   %conv.5.2 = zext i16 %21 to i32
311   %add.5.2 = add nuw nsw i32 %add.4.2, %conv.5.2
312   %mul.5.2 = mul nuw nsw i32 %conv.5.2, %conv.5.2
313   %add11.5.2 = add i32 %mul.5.2, %add11.4.2
314   %arrayidx.6.2 = getelementptr inbounds i16, ptr %add.ptr.1, i64 6
315   %22 = load i16, ptr %arrayidx.6.2, align 2
316   %conv.6.2 = zext i16 %22 to i32
317   %add.6.2 = add nuw nsw i32 %add.5.2, %conv.6.2
318   %mul.6.2 = mul nuw nsw i32 %conv.6.2, %conv.6.2
319   %add11.6.2 = add i32 %mul.6.2, %add11.5.2
320   %arrayidx.7.2 = getelementptr inbounds i16, ptr %add.ptr.1, i64 7
321   %23 = load i16, ptr %arrayidx.7.2, align 2
322   %conv.7.2 = zext i16 %23 to i32
323   %add.7.2 = add nuw nsw i32 %add.6.2, %conv.7.2
324   %mul.7.2 = mul nuw nsw i32 %conv.7.2, %conv.7.2
325   %add11.7.2 = add i32 %mul.7.2, %add11.6.2
326   %add.ptr.2 = getelementptr inbounds i16, ptr %add.ptr.1, i64 %idx.ext
327   %24 = load i16, ptr %add.ptr.2, align 2
328   %conv.348 = zext i16 %24 to i32
329   %add.349 = add nuw nsw i32 %add.7.2, %conv.348
330   %mul.350 = mul nuw nsw i32 %conv.348, %conv.348
331   %add11.351 = add i32 %mul.350, %add11.7.2
332   %arrayidx.1.3 = getelementptr inbounds i16, ptr %add.ptr.2, i64 1
333   %25 = load i16, ptr %arrayidx.1.3, align 2
334   %conv.1.3 = zext i16 %25 to i32
335   %add.1.3 = add nuw nsw i32 %add.349, %conv.1.3
336   %mul.1.3 = mul nuw nsw i32 %conv.1.3, %conv.1.3
337   %add11.1.3 = add i32 %mul.1.3, %add11.351
338   %arrayidx.2.3 = getelementptr inbounds i16, ptr %add.ptr.2, i64 2
339   %26 = load i16, ptr %arrayidx.2.3, align 2
340   %conv.2.3 = zext i16 %26 to i32
341   %add.2.3 = add nuw nsw i32 %add.1.3, %conv.2.3
342   %mul.2.3 = mul nuw nsw i32 %conv.2.3, %conv.2.3
343   %add11.2.3 = add i32 %mul.2.3, %add11.1.3
344   %arrayidx.3.3 = getelementptr inbounds i16, ptr %add.ptr.2, i64 3
345   %27 = load i16, ptr %arrayidx.3.3, align 2
346   %conv.3.3 = zext i16 %27 to i32
347   %add.3.3 = add nuw nsw i32 %add.2.3, %conv.3.3
348   %mul.3.3 = mul nuw nsw i32 %conv.3.3, %conv.3.3
349   %add11.3.3 = add i32 %mul.3.3, %add11.2.3
350   %arrayidx.4.3 = getelementptr inbounds i16, ptr %add.ptr.2, i64 4
351   %28 = load i16, ptr %arrayidx.4.3, align 2
352   %conv.4.3 = zext i16 %28 to i32
353   %add.4.3 = add nuw nsw i32 %add.3.3, %conv.4.3
354   %mul.4.3 = mul nuw nsw i32 %conv.4.3, %conv.4.3
355   %add11.4.3 = add i32 %mul.4.3, %add11.3.3
356   %arrayidx.5.3 = getelementptr inbounds i16, ptr %add.ptr.2, i64 5
357   %29 = load i16, ptr %arrayidx.5.3, align 2
358   %conv.5.3 = zext i16 %29 to i32
359   %add.5.3 = add nuw nsw i32 %add.4.3, %conv.5.3
360   %mul.5.3 = mul nuw nsw i32 %conv.5.3, %conv.5.3
361   %add11.5.3 = add i32 %mul.5.3, %add11.4.3
362   %arrayidx.6.3 = getelementptr inbounds i16, ptr %add.ptr.2, i64 6
363   %30 = load i16, ptr %arrayidx.6.3, align 2
364   %conv.6.3 = zext i16 %30 to i32
365   %add.6.3 = add nuw nsw i32 %add.5.3, %conv.6.3
366   %mul.6.3 = mul nuw nsw i32 %conv.6.3, %conv.6.3
367   %add11.6.3 = add i32 %mul.6.3, %add11.5.3
368   %arrayidx.7.3 = getelementptr inbounds i16, ptr %add.ptr.2, i64 7
369   %31 = load i16, ptr %arrayidx.7.3, align 2
370   %conv.7.3 = zext i16 %31 to i32
371   %add.7.3 = add nuw nsw i32 %add.6.3, %conv.7.3
372   %mul.7.3 = mul nuw nsw i32 %conv.7.3, %conv.7.3
373   %add11.7.3 = add i32 %mul.7.3, %add11.6.3
374   %add.ptr.3 = getelementptr inbounds i16, ptr %add.ptr.2, i64 %idx.ext
375   %32 = load i16, ptr %add.ptr.3, align 2
376   %conv.452 = zext i16 %32 to i32
377   %add.453 = add nuw nsw i32 %add.7.3, %conv.452
378   %mul.454 = mul nuw nsw i32 %conv.452, %conv.452
379   %add11.455 = add i32 %mul.454, %add11.7.3
380   %arrayidx.1.4 = getelementptr inbounds i16, ptr %add.ptr.3, i64 1
381   %33 = load i16, ptr %arrayidx.1.4, align 2
382   %conv.1.4 = zext i16 %33 to i32
383   %add.1.4 = add nuw nsw i32 %add.453, %conv.1.4
384   %mul.1.4 = mul nuw nsw i32 %conv.1.4, %conv.1.4
385   %add11.1.4 = add i32 %mul.1.4, %add11.455
386   %arrayidx.2.4 = getelementptr inbounds i16, ptr %add.ptr.3, i64 2
387   %34 = load i16, ptr %arrayidx.2.4, align 2
388   %conv.2.4 = zext i16 %34 to i32
389   %add.2.4 = add nuw nsw i32 %add.1.4, %conv.2.4
390   %mul.2.4 = mul nuw nsw i32 %conv.2.4, %conv.2.4
391   %add11.2.4 = add i32 %mul.2.4, %add11.1.4
392   %arrayidx.3.4 = getelementptr inbounds i16, ptr %add.ptr.3, i64 3
393   %35 = load i16, ptr %arrayidx.3.4, align 2
394   %conv.3.4 = zext i16 %35 to i32
395   %add.3.4 = add nuw nsw i32 %add.2.4, %conv.3.4
396   %mul.3.4 = mul nuw nsw i32 %conv.3.4, %conv.3.4
397   %add11.3.4 = add i32 %mul.3.4, %add11.2.4
398   %arrayidx.4.4 = getelementptr inbounds i16, ptr %add.ptr.3, i64 4
399   %36 = load i16, ptr %arrayidx.4.4, align 2
400   %conv.4.4 = zext i16 %36 to i32
401   %add.4.4 = add nuw nsw i32 %add.3.4, %conv.4.4
402   %mul.4.4 = mul nuw nsw i32 %conv.4.4, %conv.4.4
403   %add11.4.4 = add i32 %mul.4.4, %add11.3.4
404   %arrayidx.5.4 = getelementptr inbounds i16, ptr %add.ptr.3, i64 5
405   %37 = load i16, ptr %arrayidx.5.4, align 2
406   %conv.5.4 = zext i16 %37 to i32
407   %add.5.4 = add nuw nsw i32 %add.4.4, %conv.5.4
408   %mul.5.4 = mul nuw nsw i32 %conv.5.4, %conv.5.4
409   %add11.5.4 = add i32 %mul.5.4, %add11.4.4
410   %arrayidx.6.4 = getelementptr inbounds i16, ptr %add.ptr.3, i64 6
411   %38 = load i16, ptr %arrayidx.6.4, align 2
412   %conv.6.4 = zext i16 %38 to i32
413   %add.6.4 = add nuw nsw i32 %add.5.4, %conv.6.4
414   %mul.6.4 = mul nuw nsw i32 %conv.6.4, %conv.6.4
415   %add11.6.4 = add i32 %mul.6.4, %add11.5.4
416   %arrayidx.7.4 = getelementptr inbounds i16, ptr %add.ptr.3, i64 7
417   %39 = load i16, ptr %arrayidx.7.4, align 2
418   %conv.7.4 = zext i16 %39 to i32
419   %add.7.4 = add nuw nsw i32 %add.6.4, %conv.7.4
420   %mul.7.4 = mul nuw nsw i32 %conv.7.4, %conv.7.4
421   %add11.7.4 = add i32 %mul.7.4, %add11.6.4
422   %add.ptr.4 = getelementptr inbounds i16, ptr %add.ptr.3, i64 %idx.ext
423   %40 = load i16, ptr %add.ptr.4, align 2
424   %conv.556 = zext i16 %40 to i32
425   %add.557 = add nuw nsw i32 %add.7.4, %conv.556
426   %mul.558 = mul nuw nsw i32 %conv.556, %conv.556
427   %add11.559 = add i32 %mul.558, %add11.7.4
428   %arrayidx.1.5 = getelementptr inbounds i16, ptr %add.ptr.4, i64 1
429   %41 = load i16, ptr %arrayidx.1.5, align 2
430   %conv.1.5 = zext i16 %41 to i32
431   %add.1.5 = add nuw nsw i32 %add.557, %conv.1.5
432   %mul.1.5 = mul nuw nsw i32 %conv.1.5, %conv.1.5
433   %add11.1.5 = add i32 %mul.1.5, %add11.559
434   %arrayidx.2.5 = getelementptr inbounds i16, ptr %add.ptr.4, i64 2
435   %42 = load i16, ptr %arrayidx.2.5, align 2
436   %conv.2.5 = zext i16 %42 to i32
437   %add.2.5 = add nuw nsw i32 %add.1.5, %conv.2.5
438   %mul.2.5 = mul nuw nsw i32 %conv.2.5, %conv.2.5
439   %add11.2.5 = add i32 %mul.2.5, %add11.1.5
440   %arrayidx.3.5 = getelementptr inbounds i16, ptr %add.ptr.4, i64 3
441   %43 = load i16, ptr %arrayidx.3.5, align 2
442   %conv.3.5 = zext i16 %43 to i32
443   %add.3.5 = add nuw nsw i32 %add.2.5, %conv.3.5
444   %mul.3.5 = mul nuw nsw i32 %conv.3.5, %conv.3.5
445   %add11.3.5 = add i32 %mul.3.5, %add11.2.5
446   %arrayidx.4.5 = getelementptr inbounds i16, ptr %add.ptr.4, i64 4
447   %44 = load i16, ptr %arrayidx.4.5, align 2
448   %conv.4.5 = zext i16 %44 to i32
449   %add.4.5 = add nuw nsw i32 %add.3.5, %conv.4.5
450   %mul.4.5 = mul nuw nsw i32 %conv.4.5, %conv.4.5
451   %add11.4.5 = add i32 %mul.4.5, %add11.3.5
452   %arrayidx.5.5 = getelementptr inbounds i16, ptr %add.ptr.4, i64 5
453   %45 = load i16, ptr %arrayidx.5.5, align 2
454   %conv.5.5 = zext i16 %45 to i32
455   %add.5.5 = add nuw nsw i32 %add.4.5, %conv.5.5
456   %mul.5.5 = mul nuw nsw i32 %conv.5.5, %conv.5.5
457   %add11.5.5 = add i32 %mul.5.5, %add11.4.5
458   %arrayidx.6.5 = getelementptr inbounds i16, ptr %add.ptr.4, i64 6
459   %46 = load i16, ptr %arrayidx.6.5, align 2
460   %conv.6.5 = zext i16 %46 to i32
461   %add.6.5 = add nuw nsw i32 %add.5.5, %conv.6.5
462   %mul.6.5 = mul nuw nsw i32 %conv.6.5, %conv.6.5
463   %add11.6.5 = add i32 %mul.6.5, %add11.5.5
464   %arrayidx.7.5 = getelementptr inbounds i16, ptr %add.ptr.4, i64 7
465   %47 = load i16, ptr %arrayidx.7.5, align 2
466   %conv.7.5 = zext i16 %47 to i32
467   %add.7.5 = add nuw nsw i32 %add.6.5, %conv.7.5
468   %mul.7.5 = mul nuw nsw i32 %conv.7.5, %conv.7.5
469   %add11.7.5 = add i32 %mul.7.5, %add11.6.5
470   %add.ptr.5 = getelementptr inbounds i16, ptr %add.ptr.4, i64 %idx.ext
471   %48 = load i16, ptr %add.ptr.5, align 2
472   %conv.660 = zext i16 %48 to i32
473   %add.661 = add nuw nsw i32 %add.7.5, %conv.660
474   %mul.662 = mul nuw nsw i32 %conv.660, %conv.660
475   %add11.663 = add i32 %mul.662, %add11.7.5
476   %arrayidx.1.6 = getelementptr inbounds i16, ptr %add.ptr.5, i64 1
477   %49 = load i16, ptr %arrayidx.1.6, align 2
478   %conv.1.6 = zext i16 %49 to i32
479   %add.1.6 = add nuw nsw i32 %add.661, %conv.1.6
480   %mul.1.6 = mul nuw nsw i32 %conv.1.6, %conv.1.6
481   %add11.1.6 = add i32 %mul.1.6, %add11.663
482   %arrayidx.2.6 = getelementptr inbounds i16, ptr %add.ptr.5, i64 2
483   %50 = load i16, ptr %arrayidx.2.6, align 2
484   %conv.2.6 = zext i16 %50 to i32
485   %add.2.6 = add nuw nsw i32 %add.1.6, %conv.2.6
486   %mul.2.6 = mul nuw nsw i32 %conv.2.6, %conv.2.6
487   %add11.2.6 = add i32 %mul.2.6, %add11.1.6
488   %arrayidx.3.6 = getelementptr inbounds i16, ptr %add.ptr.5, i64 3
489   %51 = load i16, ptr %arrayidx.3.6, align 2
490   %conv.3.6 = zext i16 %51 to i32
491   %add.3.6 = add nuw nsw i32 %add.2.6, %conv.3.6
492   %mul.3.6 = mul nuw nsw i32 %conv.3.6, %conv.3.6
493   %add11.3.6 = add i32 %mul.3.6, %add11.2.6
494   %arrayidx.4.6 = getelementptr inbounds i16, ptr %add.ptr.5, i64 4
495   %52 = load i16, ptr %arrayidx.4.6, align 2
496   %conv.4.6 = zext i16 %52 to i32
497   %add.4.6 = add nuw nsw i32 %add.3.6, %conv.4.6
498   %mul.4.6 = mul nuw nsw i32 %conv.4.6, %conv.4.6
499   %add11.4.6 = add i32 %mul.4.6, %add11.3.6
500   %arrayidx.5.6 = getelementptr inbounds i16, ptr %add.ptr.5, i64 5
501   %53 = load i16, ptr %arrayidx.5.6, align 2
502   %conv.5.6 = zext i16 %53 to i32
503   %add.5.6 = add nuw nsw i32 %add.4.6, %conv.5.6
504   %mul.5.6 = mul nuw nsw i32 %conv.5.6, %conv.5.6
505   %add11.5.6 = add i32 %mul.5.6, %add11.4.6
506   %arrayidx.6.6 = getelementptr inbounds i16, ptr %add.ptr.5, i64 6
507   %54 = load i16, ptr %arrayidx.6.6, align 2
508   %conv.6.6 = zext i16 %54 to i32
509   %add.6.6 = add nuw nsw i32 %add.5.6, %conv.6.6
510   %mul.6.6 = mul nuw nsw i32 %conv.6.6, %conv.6.6
511   %add11.6.6 = add i32 %mul.6.6, %add11.5.6
512   %arrayidx.7.6 = getelementptr inbounds i16, ptr %add.ptr.5, i64 7
513   %55 = load i16, ptr %arrayidx.7.6, align 2
514   %conv.7.6 = zext i16 %55 to i32
515   %add.7.6 = add nuw nsw i32 %add.6.6, %conv.7.6
516   %mul.7.6 = mul nuw nsw i32 %conv.7.6, %conv.7.6
517   %add11.7.6 = add i32 %mul.7.6, %add11.6.6
518   %add.ptr.6 = getelementptr inbounds i16, ptr %add.ptr.5, i64 %idx.ext
519   %56 = load i16, ptr %add.ptr.6, align 2
520   %conv.764 = zext i16 %56 to i32
521   %add.765 = add nuw nsw i32 %add.7.6, %conv.764
522   %mul.766 = mul nuw nsw i32 %conv.764, %conv.764
523   %add11.767 = add i32 %mul.766, %add11.7.6
524   %arrayidx.1.7 = getelementptr inbounds i16, ptr %add.ptr.6, i64 1
525   %57 = load i16, ptr %arrayidx.1.7, align 2
526   %conv.1.7 = zext i16 %57 to i32
527   %add.1.7 = add nuw nsw i32 %add.765, %conv.1.7
528   %mul.1.7 = mul nuw nsw i32 %conv.1.7, %conv.1.7
529   %add11.1.7 = add i32 %mul.1.7, %add11.767
530   %arrayidx.2.7 = getelementptr inbounds i16, ptr %add.ptr.6, i64 2
531   %58 = load i16, ptr %arrayidx.2.7, align 2
532   %conv.2.7 = zext i16 %58 to i32
533   %add.2.7 = add nuw nsw i32 %add.1.7, %conv.2.7
534   %mul.2.7 = mul nuw nsw i32 %conv.2.7, %conv.2.7
535   %add11.2.7 = add i32 %mul.2.7, %add11.1.7
536   %arrayidx.3.7 = getelementptr inbounds i16, ptr %add.ptr.6, i64 3
537   %59 = load i16, ptr %arrayidx.3.7, align 2
538   %conv.3.7 = zext i16 %59 to i32
539   %add.3.7 = add nuw nsw i32 %add.2.7, %conv.3.7
540   %mul.3.7 = mul nuw nsw i32 %conv.3.7, %conv.3.7
541   %add11.3.7 = add i32 %mul.3.7, %add11.2.7
542   %arrayidx.4.7 = getelementptr inbounds i16, ptr %add.ptr.6, i64 4
543   %60 = load i16, ptr %arrayidx.4.7, align 2
544   %conv.4.7 = zext i16 %60 to i32
545   %add.4.7 = add nuw nsw i32 %add.3.7, %conv.4.7
546   %mul.4.7 = mul nuw nsw i32 %conv.4.7, %conv.4.7
547   %add11.4.7 = add i32 %mul.4.7, %add11.3.7
548   %arrayidx.5.7 = getelementptr inbounds i16, ptr %add.ptr.6, i64 5
549   %61 = load i16, ptr %arrayidx.5.7, align 2
550   %conv.5.7 = zext i16 %61 to i32
551   %add.5.7 = add nuw nsw i32 %add.4.7, %conv.5.7
552   %mul.5.7 = mul nuw nsw i32 %conv.5.7, %conv.5.7
553   %add11.5.7 = add i32 %mul.5.7, %add11.4.7
554   %arrayidx.6.7 = getelementptr inbounds i16, ptr %add.ptr.6, i64 6
555   %62 = load i16, ptr %arrayidx.6.7, align 2
556   %conv.6.7 = zext i16 %62 to i32
557   %add.6.7 = add nuw nsw i32 %add.5.7, %conv.6.7
558   %mul.6.7 = mul nuw nsw i32 %conv.6.7, %conv.6.7
559   %add11.6.7 = add i32 %mul.6.7, %add11.5.7
560   %arrayidx.7.7 = getelementptr inbounds i16, ptr %add.ptr.6, i64 7
561   %63 = load i16, ptr %arrayidx.7.7, align 2
562   %conv.7.7 = zext i16 %63 to i32
563   %add.7.7 = add nuw nsw i32 %add.6.7, %conv.7.7
564   %mul.7.7 = mul nuw nsw i32 %conv.7.7, %conv.7.7
565   %add11.7.7 = add i32 %mul.7.7, %add11.6.7
566   %conv15 = zext i32 %add.7.7 to i64
567   %conv16 = zext i32 %add11.7.7 to i64
568   %shl = shl nuw i64 %conv16, 32
569   %add17 = or i64 %shl, %conv15
570   ret i64 %add17
573 define i64 @looped(ptr nocapture noundef readonly %p, i32 noundef %st) {
574 ; CHECK-LABEL: @looped(
575 ; CHECK-NEXT:  entry:
576 ; CHECK-NEXT:    [[IDX_EXT:%.*]] = sext i32 [[ST:%.*]] to i64
577 ; CHECK-NEXT:    br label [[FOR_COND1_PREHEADER:%.*]]
578 ; CHECK:       for.cond1.preheader:
579 ; CHECK-NEXT:    [[Y_038:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[INC13:%.*]], [[FOR_COND1_PREHEADER]] ]
580 ; CHECK-NEXT:    [[SQ_037:%.*]] = phi i32 [ 0, [[ENTRY]] ], [ [[OP_RDX:%.*]], [[FOR_COND1_PREHEADER]] ]
581 ; CHECK-NEXT:    [[SM_036:%.*]] = phi i32 [ 0, [[ENTRY]] ], [ [[OP_RDX1:%.*]], [[FOR_COND1_PREHEADER]] ]
582 ; CHECK-NEXT:    [[P_ADDR_035:%.*]] = phi ptr [ [[P:%.*]], [[ENTRY]] ], [ [[ADD_PTR:%.*]], [[FOR_COND1_PREHEADER]] ]
583 ; CHECK-NEXT:    [[TMP0:%.*]] = load <16 x i16>, ptr [[P_ADDR_035]], align 2
584 ; CHECK-NEXT:    [[TMP1:%.*]] = zext <16 x i16> [[TMP0]] to <16 x i32>
585 ; CHECK-NEXT:    [[TMP2:%.*]] = mul nuw nsw <16 x i32> [[TMP1]], [[TMP1]]
586 ; CHECK-NEXT:    [[TMP3:%.*]] = call i32 @llvm.vector.reduce.add.v16i32(<16 x i32> [[TMP1]])
587 ; CHECK-NEXT:    [[OP_RDX1]] = add i32 [[TMP3]], [[SM_036]]
588 ; CHECK-NEXT:    [[TMP4:%.*]] = call i32 @llvm.vector.reduce.add.v16i32(<16 x i32> [[TMP2]])
589 ; CHECK-NEXT:    [[OP_RDX]] = add i32 [[TMP4]], [[SQ_037]]
590 ; CHECK-NEXT:    [[ADD_PTR]] = getelementptr inbounds i16, ptr [[P_ADDR_035]], i64 [[IDX_EXT]]
591 ; CHECK-NEXT:    [[INC13]] = add nuw nsw i32 [[Y_038]], 1
592 ; CHECK-NEXT:    [[EXITCOND_NOT:%.*]] = icmp eq i32 [[INC13]], 16
593 ; CHECK-NEXT:    br i1 [[EXITCOND_NOT]], label [[FOR_COND_CLEANUP:%.*]], label [[FOR_COND1_PREHEADER]]
594 ; CHECK:       for.cond.cleanup:
595 ; CHECK-NEXT:    [[CONV15:%.*]] = zext i32 [[OP_RDX1]] to i64
596 ; CHECK-NEXT:    [[CONV16:%.*]] = zext i32 [[OP_RDX]] to i64
597 ; CHECK-NEXT:    [[SHL:%.*]] = shl nuw i64 [[CONV16]], 32
598 ; CHECK-NEXT:    [[ADD17:%.*]] = or i64 [[SHL]], [[CONV15]]
599 ; CHECK-NEXT:    ret i64 [[ADD17]]
601 entry:
602   %idx.ext = sext i32 %st to i64
603   br label %for.cond1.preheader
605 for.cond1.preheader:                              ; preds = %entry, %for.cond1.preheader
606   %y.038 = phi i32 [ 0, %entry ], [ %inc13, %for.cond1.preheader ]
607   %sq.037 = phi i32 [ 0, %entry ], [ %add11.15, %for.cond1.preheader ]
608   %sm.036 = phi i32 [ 0, %entry ], [ %add.15, %for.cond1.preheader ]
609   %p.addr.035 = phi ptr [ %p, %entry ], [ %add.ptr, %for.cond1.preheader ]
610   %0 = load i16, ptr %p.addr.035, align 2
611   %conv = zext i16 %0 to i32
612   %add = add i32 %sm.036, %conv
613   %mul = mul nuw nsw i32 %conv, %conv
614   %add11 = add i32 %mul, %sq.037
615   %arrayidx.1 = getelementptr inbounds i16, ptr %p.addr.035, i64 1
616   %1 = load i16, ptr %arrayidx.1, align 2
617   %conv.1 = zext i16 %1 to i32
618   %add.1 = add i32 %add, %conv.1
619   %mul.1 = mul nuw nsw i32 %conv.1, %conv.1
620   %add11.1 = add i32 %mul.1, %add11
621   %arrayidx.2 = getelementptr inbounds i16, ptr %p.addr.035, i64 2
622   %2 = load i16, ptr %arrayidx.2, align 2
623   %conv.2 = zext i16 %2 to i32
624   %add.2 = add i32 %add.1, %conv.2
625   %mul.2 = mul nuw nsw i32 %conv.2, %conv.2
626   %add11.2 = add i32 %mul.2, %add11.1
627   %arrayidx.3 = getelementptr inbounds i16, ptr %p.addr.035, i64 3
628   %3 = load i16, ptr %arrayidx.3, align 2
629   %conv.3 = zext i16 %3 to i32
630   %add.3 = add i32 %add.2, %conv.3
631   %mul.3 = mul nuw nsw i32 %conv.3, %conv.3
632   %add11.3 = add i32 %mul.3, %add11.2
633   %arrayidx.4 = getelementptr inbounds i16, ptr %p.addr.035, i64 4
634   %4 = load i16, ptr %arrayidx.4, align 2
635   %conv.4 = zext i16 %4 to i32
636   %add.4 = add i32 %add.3, %conv.4
637   %mul.4 = mul nuw nsw i32 %conv.4, %conv.4
638   %add11.4 = add i32 %mul.4, %add11.3
639   %arrayidx.5 = getelementptr inbounds i16, ptr %p.addr.035, i64 5
640   %5 = load i16, ptr %arrayidx.5, align 2
641   %conv.5 = zext i16 %5 to i32
642   %add.5 = add i32 %add.4, %conv.5
643   %mul.5 = mul nuw nsw i32 %conv.5, %conv.5
644   %add11.5 = add i32 %mul.5, %add11.4
645   %arrayidx.6 = getelementptr inbounds i16, ptr %p.addr.035, i64 6
646   %6 = load i16, ptr %arrayidx.6, align 2
647   %conv.6 = zext i16 %6 to i32
648   %add.6 = add i32 %add.5, %conv.6
649   %mul.6 = mul nuw nsw i32 %conv.6, %conv.6
650   %add11.6 = add i32 %mul.6, %add11.5
651   %arrayidx.7 = getelementptr inbounds i16, ptr %p.addr.035, i64 7
652   %7 = load i16, ptr %arrayidx.7, align 2
653   %conv.7 = zext i16 %7 to i32
654   %add.7 = add i32 %add.6, %conv.7
655   %mul.7 = mul nuw nsw i32 %conv.7, %conv.7
656   %add11.7 = add i32 %mul.7, %add11.6
657   %arrayidx.8 = getelementptr inbounds i16, ptr %p.addr.035, i64 8
658   %8 = load i16, ptr %arrayidx.8, align 2
659   %conv.8 = zext i16 %8 to i32
660   %add.8 = add i32 %add.7, %conv.8
661   %mul.8 = mul nuw nsw i32 %conv.8, %conv.8
662   %add11.8 = add i32 %mul.8, %add11.7
663   %arrayidx.9 = getelementptr inbounds i16, ptr %p.addr.035, i64 9
664   %9 = load i16, ptr %arrayidx.9, align 2
665   %conv.9 = zext i16 %9 to i32
666   %add.9 = add i32 %add.8, %conv.9
667   %mul.9 = mul nuw nsw i32 %conv.9, %conv.9
668   %add11.9 = add i32 %mul.9, %add11.8
669   %arrayidx.10 = getelementptr inbounds i16, ptr %p.addr.035, i64 10
670   %10 = load i16, ptr %arrayidx.10, align 2
671   %conv.10 = zext i16 %10 to i32
672   %add.10 = add i32 %add.9, %conv.10
673   %mul.10 = mul nuw nsw i32 %conv.10, %conv.10
674   %add11.10 = add i32 %mul.10, %add11.9
675   %arrayidx.11 = getelementptr inbounds i16, ptr %p.addr.035, i64 11
676   %11 = load i16, ptr %arrayidx.11, align 2
677   %conv.11 = zext i16 %11 to i32
678   %add.11 = add i32 %add.10, %conv.11
679   %mul.11 = mul nuw nsw i32 %conv.11, %conv.11
680   %add11.11 = add i32 %mul.11, %add11.10
681   %arrayidx.12 = getelementptr inbounds i16, ptr %p.addr.035, i64 12
682   %12 = load i16, ptr %arrayidx.12, align 2
683   %conv.12 = zext i16 %12 to i32
684   %add.12 = add i32 %add.11, %conv.12
685   %mul.12 = mul nuw nsw i32 %conv.12, %conv.12
686   %add11.12 = add i32 %mul.12, %add11.11
687   %arrayidx.13 = getelementptr inbounds i16, ptr %p.addr.035, i64 13
688   %13 = load i16, ptr %arrayidx.13, align 2
689   %conv.13 = zext i16 %13 to i32
690   %add.13 = add i32 %add.12, %conv.13
691   %mul.13 = mul nuw nsw i32 %conv.13, %conv.13
692   %add11.13 = add i32 %mul.13, %add11.12
693   %arrayidx.14 = getelementptr inbounds i16, ptr %p.addr.035, i64 14
694   %14 = load i16, ptr %arrayidx.14, align 2
695   %conv.14 = zext i16 %14 to i32
696   %add.14 = add i32 %add.13, %conv.14
697   %mul.14 = mul nuw nsw i32 %conv.14, %conv.14
698   %add11.14 = add i32 %mul.14, %add11.13
699   %arrayidx.15 = getelementptr inbounds i16, ptr %p.addr.035, i64 15
700   %15 = load i16, ptr %arrayidx.15, align 2
701   %conv.15 = zext i16 %15 to i32
702   %add.15 = add i32 %add.14, %conv.15
703   %mul.15 = mul nuw nsw i32 %conv.15, %conv.15
704   %add11.15 = add i32 %mul.15, %add11.14
705   %add.ptr = getelementptr inbounds i16, ptr %p.addr.035, i64 %idx.ext
706   %inc13 = add nuw nsw i32 %y.038, 1
707   %exitcond.not = icmp eq i32 %inc13, 16
708   br i1 %exitcond.not, label %for.cond.cleanup, label %for.cond1.preheader
710 for.cond.cleanup:                                 ; preds = %for.cond1.preheader
711   %conv15 = zext i32 %add.15 to i64
712   %conv16 = zext i32 %add11.15 to i64
713   %shl = shl nuw i64 %conv16, 32
714   %add17 = or i64 %shl, %conv15
715   ret i64 %add17