1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py 2; RUN: opt < %s -basic-aa -slp-vectorizer -S | FileCheck %s 3 4target datalayout = "e-m:e-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128" 5target triple = "aarch64-arm-none-eabi" 6 7; This test has mutual reductions, referencing the same data: 8; for i = ... 9; sm += x[i]; 10; sq += x[i] * x[i]; 11; It currently doesn't SLP vectorize, but should. 12 13define i64 @straight(i16* 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 i16, i16* [[P:%.*]], align 2 18; CHECK-NEXT: [[CONV:%.*]] = zext i16 [[TMP0]] to i32 19; CHECK-NEXT: [[MUL:%.*]] = mul nuw nsw i32 [[CONV]], [[CONV]] 20; CHECK-NEXT: [[ARRAYIDX_1:%.*]] = getelementptr inbounds i16, i16* [[P]], i64 1 21; CHECK-NEXT: [[TMP1:%.*]] = load i16, i16* [[ARRAYIDX_1]], align 2 22; CHECK-NEXT: [[CONV_1:%.*]] = zext i16 [[TMP1]] to i32 23; CHECK-NEXT: [[ADD_1:%.*]] = add nuw nsw i32 [[CONV]], [[CONV_1]] 24; CHECK-NEXT: [[MUL_1:%.*]] = mul nuw nsw i32 [[CONV_1]], [[CONV_1]] 25; CHECK-NEXT: [[ADD11_1:%.*]] = add nuw i32 [[MUL_1]], [[MUL]] 26; CHECK-NEXT: [[ARRAYIDX_2:%.*]] = getelementptr inbounds i16, i16* [[P]], i64 2 27; CHECK-NEXT: [[TMP2:%.*]] = load i16, i16* [[ARRAYIDX_2]], align 2 28; CHECK-NEXT: [[CONV_2:%.*]] = zext i16 [[TMP2]] to i32 29; CHECK-NEXT: [[ADD_2:%.*]] = add nuw nsw i32 [[ADD_1]], [[CONV_2]] 30; CHECK-NEXT: [[MUL_2:%.*]] = mul nuw nsw i32 [[CONV_2]], [[CONV_2]] 31; CHECK-NEXT: [[ADD11_2:%.*]] = add i32 [[MUL_2]], [[ADD11_1]] 32; CHECK-NEXT: [[ARRAYIDX_3:%.*]] = getelementptr inbounds i16, i16* [[P]], i64 3 33; CHECK-NEXT: [[TMP3:%.*]] = load i16, i16* [[ARRAYIDX_3]], align 2 34; CHECK-NEXT: [[CONV_3:%.*]] = zext i16 [[TMP3]] to i32 35; CHECK-NEXT: [[ADD_3:%.*]] = add nuw nsw i32 [[ADD_2]], [[CONV_3]] 36; CHECK-NEXT: [[MUL_3:%.*]] = mul nuw nsw i32 [[CONV_3]], [[CONV_3]] 37; CHECK-NEXT: [[ADD11_3:%.*]] = add i32 [[MUL_3]], [[ADD11_2]] 38; CHECK-NEXT: [[ARRAYIDX_4:%.*]] = getelementptr inbounds i16, i16* [[P]], i64 4 39; CHECK-NEXT: [[TMP4:%.*]] = load i16, i16* [[ARRAYIDX_4]], align 2 40; CHECK-NEXT: [[CONV_4:%.*]] = zext i16 [[TMP4]] to i32 41; CHECK-NEXT: [[ADD_4:%.*]] = add nuw nsw i32 [[ADD_3]], [[CONV_4]] 42; CHECK-NEXT: [[MUL_4:%.*]] = mul nuw nsw i32 [[CONV_4]], [[CONV_4]] 43; CHECK-NEXT: [[ADD11_4:%.*]] = add i32 [[MUL_4]], [[ADD11_3]] 44; CHECK-NEXT: [[ARRAYIDX_5:%.*]] = getelementptr inbounds i16, i16* [[P]], i64 5 45; CHECK-NEXT: [[TMP5:%.*]] = load i16, i16* [[ARRAYIDX_5]], align 2 46; CHECK-NEXT: [[CONV_5:%.*]] = zext i16 [[TMP5]] to i32 47; CHECK-NEXT: [[ADD_5:%.*]] = add nuw nsw i32 [[ADD_4]], [[CONV_5]] 48; CHECK-NEXT: [[MUL_5:%.*]] = mul nuw nsw i32 [[CONV_5]], [[CONV_5]] 49; CHECK-NEXT: [[ADD11_5:%.*]] = add i32 [[MUL_5]], [[ADD11_4]] 50; CHECK-NEXT: [[ARRAYIDX_6:%.*]] = getelementptr inbounds i16, i16* [[P]], i64 6 51; CHECK-NEXT: [[TMP6:%.*]] = load i16, i16* [[ARRAYIDX_6]], align 2 52; CHECK-NEXT: [[CONV_6:%.*]] = zext i16 [[TMP6]] to i32 53; CHECK-NEXT: [[ADD_6:%.*]] = add nuw nsw i32 [[ADD_5]], [[CONV_6]] 54; CHECK-NEXT: [[MUL_6:%.*]] = mul nuw nsw i32 [[CONV_6]], [[CONV_6]] 55; CHECK-NEXT: [[ADD11_6:%.*]] = add i32 [[MUL_6]], [[ADD11_5]] 56; CHECK-NEXT: [[ARRAYIDX_7:%.*]] = getelementptr inbounds i16, i16* [[P]], i64 7 57; CHECK-NEXT: [[TMP7:%.*]] = load i16, i16* [[ARRAYIDX_7]], align 2 58; CHECK-NEXT: [[CONV_7:%.*]] = zext i16 [[TMP7]] to i32 59; CHECK-NEXT: [[ADD_7:%.*]] = add nuw nsw i32 [[ADD_6]], [[CONV_7]] 60; CHECK-NEXT: [[MUL_7:%.*]] = mul nuw nsw i32 [[CONV_7]], [[CONV_7]] 61; CHECK-NEXT: [[ADD11_7:%.*]] = add i32 [[MUL_7]], [[ADD11_6]] 62; CHECK-NEXT: [[ADD_PTR:%.*]] = getelementptr inbounds i16, i16* [[P]], i64 [[IDX_EXT]] 63; CHECK-NEXT: [[TMP8:%.*]] = load i16, i16* [[ADD_PTR]], align 2 64; CHECK-NEXT: [[CONV_140:%.*]] = zext i16 [[TMP8]] to i32 65; CHECK-NEXT: [[ADD_141:%.*]] = add nuw nsw i32 [[ADD_7]], [[CONV_140]] 66; CHECK-NEXT: [[MUL_142:%.*]] = mul nuw nsw i32 [[CONV_140]], [[CONV_140]] 67; CHECK-NEXT: [[ADD11_143:%.*]] = add i32 [[MUL_142]], [[ADD11_7]] 68; CHECK-NEXT: [[ARRAYIDX_1_1:%.*]] = getelementptr inbounds i16, i16* [[ADD_PTR]], i64 1 69; CHECK-NEXT: [[TMP9:%.*]] = load i16, i16* [[ARRAYIDX_1_1]], align 2 70; CHECK-NEXT: [[CONV_1_1:%.*]] = zext i16 [[TMP9]] to i32 71; CHECK-NEXT: [[ADD_1_1:%.*]] = add nuw nsw i32 [[ADD_141]], [[CONV_1_1]] 72; CHECK-NEXT: [[MUL_1_1:%.*]] = mul nuw nsw i32 [[CONV_1_1]], [[CONV_1_1]] 73; CHECK-NEXT: [[ADD11_1_1:%.*]] = add i32 [[MUL_1_1]], [[ADD11_143]] 74; CHECK-NEXT: [[ARRAYIDX_2_1:%.*]] = getelementptr inbounds i16, i16* [[ADD_PTR]], i64 2 75; CHECK-NEXT: [[TMP10:%.*]] = load i16, i16* [[ARRAYIDX_2_1]], align 2 76; CHECK-NEXT: [[CONV_2_1:%.*]] = zext i16 [[TMP10]] to i32 77; CHECK-NEXT: [[ADD_2_1:%.*]] = add nuw nsw i32 [[ADD_1_1]], [[CONV_2_1]] 78; CHECK-NEXT: [[MUL_2_1:%.*]] = mul nuw nsw i32 [[CONV_2_1]], [[CONV_2_1]] 79; CHECK-NEXT: [[ADD11_2_1:%.*]] = add i32 [[MUL_2_1]], [[ADD11_1_1]] 80; CHECK-NEXT: [[ARRAYIDX_3_1:%.*]] = getelementptr inbounds i16, i16* [[ADD_PTR]], i64 3 81; CHECK-NEXT: [[TMP11:%.*]] = load i16, i16* [[ARRAYIDX_3_1]], align 2 82; CHECK-NEXT: [[CONV_3_1:%.*]] = zext i16 [[TMP11]] to i32 83; CHECK-NEXT: [[ADD_3_1:%.*]] = add nuw nsw i32 [[ADD_2_1]], [[CONV_3_1]] 84; CHECK-NEXT: [[MUL_3_1:%.*]] = mul nuw nsw i32 [[CONV_3_1]], [[CONV_3_1]] 85; CHECK-NEXT: [[ADD11_3_1:%.*]] = add i32 [[MUL_3_1]], [[ADD11_2_1]] 86; CHECK-NEXT: [[ARRAYIDX_4_1:%.*]] = getelementptr inbounds i16, i16* [[ADD_PTR]], i64 4 87; CHECK-NEXT: [[TMP12:%.*]] = load i16, i16* [[ARRAYIDX_4_1]], align 2 88; CHECK-NEXT: [[CONV_4_1:%.*]] = zext i16 [[TMP12]] to i32 89; CHECK-NEXT: [[ADD_4_1:%.*]] = add nuw nsw i32 [[ADD_3_1]], [[CONV_4_1]] 90; CHECK-NEXT: [[MUL_4_1:%.*]] = mul nuw nsw i32 [[CONV_4_1]], [[CONV_4_1]] 91; CHECK-NEXT: [[ADD11_4_1:%.*]] = add i32 [[MUL_4_1]], [[ADD11_3_1]] 92; CHECK-NEXT: [[ARRAYIDX_5_1:%.*]] = getelementptr inbounds i16, i16* [[ADD_PTR]], i64 5 93; CHECK-NEXT: [[TMP13:%.*]] = load i16, i16* [[ARRAYIDX_5_1]], align 2 94; CHECK-NEXT: [[CONV_5_1:%.*]] = zext i16 [[TMP13]] to i32 95; CHECK-NEXT: [[ADD_5_1:%.*]] = add nuw nsw i32 [[ADD_4_1]], [[CONV_5_1]] 96; CHECK-NEXT: [[MUL_5_1:%.*]] = mul nuw nsw i32 [[CONV_5_1]], [[CONV_5_1]] 97; CHECK-NEXT: [[ADD11_5_1:%.*]] = add i32 [[MUL_5_1]], [[ADD11_4_1]] 98; CHECK-NEXT: [[ARRAYIDX_6_1:%.*]] = getelementptr inbounds i16, i16* [[ADD_PTR]], i64 6 99; CHECK-NEXT: [[TMP14:%.*]] = load i16, i16* [[ARRAYIDX_6_1]], align 2 100; CHECK-NEXT: [[CONV_6_1:%.*]] = zext i16 [[TMP14]] to i32 101; CHECK-NEXT: [[ADD_6_1:%.*]] = add nuw nsw i32 [[ADD_5_1]], [[CONV_6_1]] 102; CHECK-NEXT: [[MUL_6_1:%.*]] = mul nuw nsw i32 [[CONV_6_1]], [[CONV_6_1]] 103; CHECK-NEXT: [[ADD11_6_1:%.*]] = add i32 [[MUL_6_1]], [[ADD11_5_1]] 104; CHECK-NEXT: [[ARRAYIDX_7_1:%.*]] = getelementptr inbounds i16, i16* [[ADD_PTR]], i64 7 105; CHECK-NEXT: [[TMP15:%.*]] = load i16, i16* [[ARRAYIDX_7_1]], align 2 106; CHECK-NEXT: [[CONV_7_1:%.*]] = zext i16 [[TMP15]] to i32 107; CHECK-NEXT: [[ADD_7_1:%.*]] = add nuw nsw i32 [[ADD_6_1]], [[CONV_7_1]] 108; CHECK-NEXT: [[MUL_7_1:%.*]] = mul nuw nsw i32 [[CONV_7_1]], [[CONV_7_1]] 109; CHECK-NEXT: [[ADD11_7_1:%.*]] = add i32 [[MUL_7_1]], [[ADD11_6_1]] 110; CHECK-NEXT: [[ADD_PTR_1:%.*]] = getelementptr inbounds i16, i16* [[ADD_PTR]], i64 [[IDX_EXT]] 111; CHECK-NEXT: [[TMP16:%.*]] = load i16, i16* [[ADD_PTR_1]], align 2 112; CHECK-NEXT: [[CONV_244:%.*]] = zext i16 [[TMP16]] to i32 113; CHECK-NEXT: [[ADD_245:%.*]] = add nuw nsw i32 [[ADD_7_1]], [[CONV_244]] 114; CHECK-NEXT: [[MUL_246:%.*]] = mul nuw nsw i32 [[CONV_244]], [[CONV_244]] 115; CHECK-NEXT: [[ADD11_247:%.*]] = add i32 [[MUL_246]], [[ADD11_7_1]] 116; CHECK-NEXT: [[ARRAYIDX_1_2:%.*]] = getelementptr inbounds i16, i16* [[ADD_PTR_1]], i64 1 117; CHECK-NEXT: [[TMP17:%.*]] = load i16, i16* [[ARRAYIDX_1_2]], align 2 118; CHECK-NEXT: [[CONV_1_2:%.*]] = zext i16 [[TMP17]] to i32 119; CHECK-NEXT: [[ADD_1_2:%.*]] = add nuw nsw i32 [[ADD_245]], [[CONV_1_2]] 120; CHECK-NEXT: [[MUL_1_2:%.*]] = mul nuw nsw i32 [[CONV_1_2]], [[CONV_1_2]] 121; CHECK-NEXT: [[ADD11_1_2:%.*]] = add i32 [[MUL_1_2]], [[ADD11_247]] 122; CHECK-NEXT: [[ARRAYIDX_2_2:%.*]] = getelementptr inbounds i16, i16* [[ADD_PTR_1]], i64 2 123; CHECK-NEXT: [[TMP18:%.*]] = load i16, i16* [[ARRAYIDX_2_2]], align 2 124; CHECK-NEXT: [[CONV_2_2:%.*]] = zext i16 [[TMP18]] to i32 125; CHECK-NEXT: [[ADD_2_2:%.*]] = add nuw nsw i32 [[ADD_1_2]], [[CONV_2_2]] 126; CHECK-NEXT: [[MUL_2_2:%.*]] = mul nuw nsw i32 [[CONV_2_2]], [[CONV_2_2]] 127; CHECK-NEXT: [[ADD11_2_2:%.*]] = add i32 [[MUL_2_2]], [[ADD11_1_2]] 128; CHECK-NEXT: [[ARRAYIDX_3_2:%.*]] = getelementptr inbounds i16, i16* [[ADD_PTR_1]], i64 3 129; CHECK-NEXT: [[TMP19:%.*]] = load i16, i16* [[ARRAYIDX_3_2]], align 2 130; CHECK-NEXT: [[CONV_3_2:%.*]] = zext i16 [[TMP19]] to i32 131; CHECK-NEXT: [[ADD_3_2:%.*]] = add nuw nsw i32 [[ADD_2_2]], [[CONV_3_2]] 132; CHECK-NEXT: [[MUL_3_2:%.*]] = mul nuw nsw i32 [[CONV_3_2]], [[CONV_3_2]] 133; CHECK-NEXT: [[ADD11_3_2:%.*]] = add i32 [[MUL_3_2]], [[ADD11_2_2]] 134; CHECK-NEXT: [[ARRAYIDX_4_2:%.*]] = getelementptr inbounds i16, i16* [[ADD_PTR_1]], i64 4 135; CHECK-NEXT: [[TMP20:%.*]] = load i16, i16* [[ARRAYIDX_4_2]], align 2 136; CHECK-NEXT: [[CONV_4_2:%.*]] = zext i16 [[TMP20]] to i32 137; CHECK-NEXT: [[ADD_4_2:%.*]] = add nuw nsw i32 [[ADD_3_2]], [[CONV_4_2]] 138; CHECK-NEXT: [[MUL_4_2:%.*]] = mul nuw nsw i32 [[CONV_4_2]], [[CONV_4_2]] 139; CHECK-NEXT: [[ADD11_4_2:%.*]] = add i32 [[MUL_4_2]], [[ADD11_3_2]] 140; CHECK-NEXT: [[ARRAYIDX_5_2:%.*]] = getelementptr inbounds i16, i16* [[ADD_PTR_1]], i64 5 141; CHECK-NEXT: [[TMP21:%.*]] = load i16, i16* [[ARRAYIDX_5_2]], align 2 142; CHECK-NEXT: [[CONV_5_2:%.*]] = zext i16 [[TMP21]] to i32 143; CHECK-NEXT: [[ADD_5_2:%.*]] = add nuw nsw i32 [[ADD_4_2]], [[CONV_5_2]] 144; CHECK-NEXT: [[MUL_5_2:%.*]] = mul nuw nsw i32 [[CONV_5_2]], [[CONV_5_2]] 145; CHECK-NEXT: [[ADD11_5_2:%.*]] = add i32 [[MUL_5_2]], [[ADD11_4_2]] 146; CHECK-NEXT: [[ARRAYIDX_6_2:%.*]] = getelementptr inbounds i16, i16* [[ADD_PTR_1]], i64 6 147; CHECK-NEXT: [[TMP22:%.*]] = load i16, i16* [[ARRAYIDX_6_2]], align 2 148; CHECK-NEXT: [[CONV_6_2:%.*]] = zext i16 [[TMP22]] to i32 149; CHECK-NEXT: [[ADD_6_2:%.*]] = add nuw nsw i32 [[ADD_5_2]], [[CONV_6_2]] 150; CHECK-NEXT: [[MUL_6_2:%.*]] = mul nuw nsw i32 [[CONV_6_2]], [[CONV_6_2]] 151; CHECK-NEXT: [[ADD11_6_2:%.*]] = add i32 [[MUL_6_2]], [[ADD11_5_2]] 152; CHECK-NEXT: [[ARRAYIDX_7_2:%.*]] = getelementptr inbounds i16, i16* [[ADD_PTR_1]], i64 7 153; CHECK-NEXT: [[TMP23:%.*]] = load i16, i16* [[ARRAYIDX_7_2]], align 2 154; CHECK-NEXT: [[CONV_7_2:%.*]] = zext i16 [[TMP23]] to i32 155; CHECK-NEXT: [[ADD_7_2:%.*]] = add nuw nsw i32 [[ADD_6_2]], [[CONV_7_2]] 156; CHECK-NEXT: [[MUL_7_2:%.*]] = mul nuw nsw i32 [[CONV_7_2]], [[CONV_7_2]] 157; CHECK-NEXT: [[ADD11_7_2:%.*]] = add i32 [[MUL_7_2]], [[ADD11_6_2]] 158; CHECK-NEXT: [[ADD_PTR_2:%.*]] = getelementptr inbounds i16, i16* [[ADD_PTR_1]], i64 [[IDX_EXT]] 159; CHECK-NEXT: [[TMP24:%.*]] = load i16, i16* [[ADD_PTR_2]], align 2 160; CHECK-NEXT: [[CONV_348:%.*]] = zext i16 [[TMP24]] to i32 161; CHECK-NEXT: [[ADD_349:%.*]] = add nuw nsw i32 [[ADD_7_2]], [[CONV_348]] 162; CHECK-NEXT: [[MUL_350:%.*]] = mul nuw nsw i32 [[CONV_348]], [[CONV_348]] 163; CHECK-NEXT: [[ADD11_351:%.*]] = add i32 [[MUL_350]], [[ADD11_7_2]] 164; CHECK-NEXT: [[ARRAYIDX_1_3:%.*]] = getelementptr inbounds i16, i16* [[ADD_PTR_2]], i64 1 165; CHECK-NEXT: [[TMP25:%.*]] = load i16, i16* [[ARRAYIDX_1_3]], align 2 166; CHECK-NEXT: [[CONV_1_3:%.*]] = zext i16 [[TMP25]] to i32 167; CHECK-NEXT: [[ADD_1_3:%.*]] = add nuw nsw i32 [[ADD_349]], [[CONV_1_3]] 168; CHECK-NEXT: [[MUL_1_3:%.*]] = mul nuw nsw i32 [[CONV_1_3]], [[CONV_1_3]] 169; CHECK-NEXT: [[ADD11_1_3:%.*]] = add i32 [[MUL_1_3]], [[ADD11_351]] 170; CHECK-NEXT: [[ARRAYIDX_2_3:%.*]] = getelementptr inbounds i16, i16* [[ADD_PTR_2]], i64 2 171; CHECK-NEXT: [[TMP26:%.*]] = load i16, i16* [[ARRAYIDX_2_3]], align 2 172; CHECK-NEXT: [[CONV_2_3:%.*]] = zext i16 [[TMP26]] to i32 173; CHECK-NEXT: [[ADD_2_3:%.*]] = add nuw nsw i32 [[ADD_1_3]], [[CONV_2_3]] 174; CHECK-NEXT: [[MUL_2_3:%.*]] = mul nuw nsw i32 [[CONV_2_3]], [[CONV_2_3]] 175; CHECK-NEXT: [[ADD11_2_3:%.*]] = add i32 [[MUL_2_3]], [[ADD11_1_3]] 176; CHECK-NEXT: [[ARRAYIDX_3_3:%.*]] = getelementptr inbounds i16, i16* [[ADD_PTR_2]], i64 3 177; CHECK-NEXT: [[TMP27:%.*]] = load i16, i16* [[ARRAYIDX_3_3]], align 2 178; CHECK-NEXT: [[CONV_3_3:%.*]] = zext i16 [[TMP27]] to i32 179; CHECK-NEXT: [[ADD_3_3:%.*]] = add nuw nsw i32 [[ADD_2_3]], [[CONV_3_3]] 180; CHECK-NEXT: [[MUL_3_3:%.*]] = mul nuw nsw i32 [[CONV_3_3]], [[CONV_3_3]] 181; CHECK-NEXT: [[ADD11_3_3:%.*]] = add i32 [[MUL_3_3]], [[ADD11_2_3]] 182; CHECK-NEXT: [[ARRAYIDX_4_3:%.*]] = getelementptr inbounds i16, i16* [[ADD_PTR_2]], i64 4 183; CHECK-NEXT: [[TMP28:%.*]] = load i16, i16* [[ARRAYIDX_4_3]], align 2 184; CHECK-NEXT: [[CONV_4_3:%.*]] = zext i16 [[TMP28]] to i32 185; CHECK-NEXT: [[ADD_4_3:%.*]] = add nuw nsw i32 [[ADD_3_3]], [[CONV_4_3]] 186; CHECK-NEXT: [[MUL_4_3:%.*]] = mul nuw nsw i32 [[CONV_4_3]], [[CONV_4_3]] 187; CHECK-NEXT: [[ADD11_4_3:%.*]] = add i32 [[MUL_4_3]], [[ADD11_3_3]] 188; CHECK-NEXT: [[ARRAYIDX_5_3:%.*]] = getelementptr inbounds i16, i16* [[ADD_PTR_2]], i64 5 189; CHECK-NEXT: [[TMP29:%.*]] = load i16, i16* [[ARRAYIDX_5_3]], align 2 190; CHECK-NEXT: [[CONV_5_3:%.*]] = zext i16 [[TMP29]] to i32 191; CHECK-NEXT: [[ADD_5_3:%.*]] = add nuw nsw i32 [[ADD_4_3]], [[CONV_5_3]] 192; CHECK-NEXT: [[MUL_5_3:%.*]] = mul nuw nsw i32 [[CONV_5_3]], [[CONV_5_3]] 193; CHECK-NEXT: [[ADD11_5_3:%.*]] = add i32 [[MUL_5_3]], [[ADD11_4_3]] 194; CHECK-NEXT: [[ARRAYIDX_6_3:%.*]] = getelementptr inbounds i16, i16* [[ADD_PTR_2]], i64 6 195; CHECK-NEXT: [[TMP30:%.*]] = load i16, i16* [[ARRAYIDX_6_3]], align 2 196; CHECK-NEXT: [[CONV_6_3:%.*]] = zext i16 [[TMP30]] to i32 197; CHECK-NEXT: [[ADD_6_3:%.*]] = add nuw nsw i32 [[ADD_5_3]], [[CONV_6_3]] 198; CHECK-NEXT: [[MUL_6_3:%.*]] = mul nuw nsw i32 [[CONV_6_3]], [[CONV_6_3]] 199; CHECK-NEXT: [[ADD11_6_3:%.*]] = add i32 [[MUL_6_3]], [[ADD11_5_3]] 200; CHECK-NEXT: [[ARRAYIDX_7_3:%.*]] = getelementptr inbounds i16, i16* [[ADD_PTR_2]], i64 7 201; CHECK-NEXT: [[TMP31:%.*]] = load i16, i16* [[ARRAYIDX_7_3]], align 2 202; CHECK-NEXT: [[CONV_7_3:%.*]] = zext i16 [[TMP31]] to i32 203; CHECK-NEXT: [[ADD_7_3:%.*]] = add nuw nsw i32 [[ADD_6_3]], [[CONV_7_3]] 204; CHECK-NEXT: [[MUL_7_3:%.*]] = mul nuw nsw i32 [[CONV_7_3]], [[CONV_7_3]] 205; CHECK-NEXT: [[ADD11_7_3:%.*]] = add i32 [[MUL_7_3]], [[ADD11_6_3]] 206; CHECK-NEXT: [[ADD_PTR_3:%.*]] = getelementptr inbounds i16, i16* [[ADD_PTR_2]], i64 [[IDX_EXT]] 207; CHECK-NEXT: [[TMP32:%.*]] = load i16, i16* [[ADD_PTR_3]], align 2 208; CHECK-NEXT: [[CONV_452:%.*]] = zext i16 [[TMP32]] to i32 209; CHECK-NEXT: [[ADD_453:%.*]] = add nuw nsw i32 [[ADD_7_3]], [[CONV_452]] 210; CHECK-NEXT: [[MUL_454:%.*]] = mul nuw nsw i32 [[CONV_452]], [[CONV_452]] 211; CHECK-NEXT: [[ADD11_455:%.*]] = add i32 [[MUL_454]], [[ADD11_7_3]] 212; CHECK-NEXT: [[ARRAYIDX_1_4:%.*]] = getelementptr inbounds i16, i16* [[ADD_PTR_3]], i64 1 213; CHECK-NEXT: [[TMP33:%.*]] = load i16, i16* [[ARRAYIDX_1_4]], align 2 214; CHECK-NEXT: [[CONV_1_4:%.*]] = zext i16 [[TMP33]] to i32 215; CHECK-NEXT: [[ADD_1_4:%.*]] = add nuw nsw i32 [[ADD_453]], [[CONV_1_4]] 216; CHECK-NEXT: [[MUL_1_4:%.*]] = mul nuw nsw i32 [[CONV_1_4]], [[CONV_1_4]] 217; CHECK-NEXT: [[ADD11_1_4:%.*]] = add i32 [[MUL_1_4]], [[ADD11_455]] 218; CHECK-NEXT: [[ARRAYIDX_2_4:%.*]] = getelementptr inbounds i16, i16* [[ADD_PTR_3]], i64 2 219; CHECK-NEXT: [[TMP34:%.*]] = load i16, i16* [[ARRAYIDX_2_4]], align 2 220; CHECK-NEXT: [[CONV_2_4:%.*]] = zext i16 [[TMP34]] to i32 221; CHECK-NEXT: [[ADD_2_4:%.*]] = add nuw nsw i32 [[ADD_1_4]], [[CONV_2_4]] 222; CHECK-NEXT: [[MUL_2_4:%.*]] = mul nuw nsw i32 [[CONV_2_4]], [[CONV_2_4]] 223; CHECK-NEXT: [[ADD11_2_4:%.*]] = add i32 [[MUL_2_4]], [[ADD11_1_4]] 224; CHECK-NEXT: [[ARRAYIDX_3_4:%.*]] = getelementptr inbounds i16, i16* [[ADD_PTR_3]], i64 3 225; CHECK-NEXT: [[TMP35:%.*]] = load i16, i16* [[ARRAYIDX_3_4]], align 2 226; CHECK-NEXT: [[CONV_3_4:%.*]] = zext i16 [[TMP35]] to i32 227; CHECK-NEXT: [[ADD_3_4:%.*]] = add nuw nsw i32 [[ADD_2_4]], [[CONV_3_4]] 228; CHECK-NEXT: [[MUL_3_4:%.*]] = mul nuw nsw i32 [[CONV_3_4]], [[CONV_3_4]] 229; CHECK-NEXT: [[ADD11_3_4:%.*]] = add i32 [[MUL_3_4]], [[ADD11_2_4]] 230; CHECK-NEXT: [[ARRAYIDX_4_4:%.*]] = getelementptr inbounds i16, i16* [[ADD_PTR_3]], i64 4 231; CHECK-NEXT: [[TMP36:%.*]] = load i16, i16* [[ARRAYIDX_4_4]], align 2 232; CHECK-NEXT: [[CONV_4_4:%.*]] = zext i16 [[TMP36]] to i32 233; CHECK-NEXT: [[ADD_4_4:%.*]] = add nuw nsw i32 [[ADD_3_4]], [[CONV_4_4]] 234; CHECK-NEXT: [[MUL_4_4:%.*]] = mul nuw nsw i32 [[CONV_4_4]], [[CONV_4_4]] 235; CHECK-NEXT: [[ADD11_4_4:%.*]] = add i32 [[MUL_4_4]], [[ADD11_3_4]] 236; CHECK-NEXT: [[ARRAYIDX_5_4:%.*]] = getelementptr inbounds i16, i16* [[ADD_PTR_3]], i64 5 237; CHECK-NEXT: [[TMP37:%.*]] = load i16, i16* [[ARRAYIDX_5_4]], align 2 238; CHECK-NEXT: [[CONV_5_4:%.*]] = zext i16 [[TMP37]] to i32 239; CHECK-NEXT: [[ADD_5_4:%.*]] = add nuw nsw i32 [[ADD_4_4]], [[CONV_5_4]] 240; CHECK-NEXT: [[MUL_5_4:%.*]] = mul nuw nsw i32 [[CONV_5_4]], [[CONV_5_4]] 241; CHECK-NEXT: [[ADD11_5_4:%.*]] = add i32 [[MUL_5_4]], [[ADD11_4_4]] 242; CHECK-NEXT: [[ARRAYIDX_6_4:%.*]] = getelementptr inbounds i16, i16* [[ADD_PTR_3]], i64 6 243; CHECK-NEXT: [[TMP38:%.*]] = load i16, i16* [[ARRAYIDX_6_4]], align 2 244; CHECK-NEXT: [[CONV_6_4:%.*]] = zext i16 [[TMP38]] to i32 245; CHECK-NEXT: [[ADD_6_4:%.*]] = add nuw nsw i32 [[ADD_5_4]], [[CONV_6_4]] 246; CHECK-NEXT: [[MUL_6_4:%.*]] = mul nuw nsw i32 [[CONV_6_4]], [[CONV_6_4]] 247; CHECK-NEXT: [[ADD11_6_4:%.*]] = add i32 [[MUL_6_4]], [[ADD11_5_4]] 248; CHECK-NEXT: [[ARRAYIDX_7_4:%.*]] = getelementptr inbounds i16, i16* [[ADD_PTR_3]], i64 7 249; CHECK-NEXT: [[TMP39:%.*]] = load i16, i16* [[ARRAYIDX_7_4]], align 2 250; CHECK-NEXT: [[CONV_7_4:%.*]] = zext i16 [[TMP39]] to i32 251; CHECK-NEXT: [[ADD_7_4:%.*]] = add nuw nsw i32 [[ADD_6_4]], [[CONV_7_4]] 252; CHECK-NEXT: [[MUL_7_4:%.*]] = mul nuw nsw i32 [[CONV_7_4]], [[CONV_7_4]] 253; CHECK-NEXT: [[ADD11_7_4:%.*]] = add i32 [[MUL_7_4]], [[ADD11_6_4]] 254; CHECK-NEXT: [[ADD_PTR_4:%.*]] = getelementptr inbounds i16, i16* [[ADD_PTR_3]], i64 [[IDX_EXT]] 255; CHECK-NEXT: [[TMP40:%.*]] = load i16, i16* [[ADD_PTR_4]], align 2 256; CHECK-NEXT: [[CONV_556:%.*]] = zext i16 [[TMP40]] to i32 257; CHECK-NEXT: [[ADD_557:%.*]] = add nuw nsw i32 [[ADD_7_4]], [[CONV_556]] 258; CHECK-NEXT: [[MUL_558:%.*]] = mul nuw nsw i32 [[CONV_556]], [[CONV_556]] 259; CHECK-NEXT: [[ADD11_559:%.*]] = add i32 [[MUL_558]], [[ADD11_7_4]] 260; CHECK-NEXT: [[ARRAYIDX_1_5:%.*]] = getelementptr inbounds i16, i16* [[ADD_PTR_4]], i64 1 261; CHECK-NEXT: [[TMP41:%.*]] = load i16, i16* [[ARRAYIDX_1_5]], align 2 262; CHECK-NEXT: [[CONV_1_5:%.*]] = zext i16 [[TMP41]] to i32 263; CHECK-NEXT: [[ADD_1_5:%.*]] = add nuw nsw i32 [[ADD_557]], [[CONV_1_5]] 264; CHECK-NEXT: [[MUL_1_5:%.*]] = mul nuw nsw i32 [[CONV_1_5]], [[CONV_1_5]] 265; CHECK-NEXT: [[ADD11_1_5:%.*]] = add i32 [[MUL_1_5]], [[ADD11_559]] 266; CHECK-NEXT: [[ARRAYIDX_2_5:%.*]] = getelementptr inbounds i16, i16* [[ADD_PTR_4]], i64 2 267; CHECK-NEXT: [[TMP42:%.*]] = load i16, i16* [[ARRAYIDX_2_5]], align 2 268; CHECK-NEXT: [[CONV_2_5:%.*]] = zext i16 [[TMP42]] to i32 269; CHECK-NEXT: [[ADD_2_5:%.*]] = add nuw nsw i32 [[ADD_1_5]], [[CONV_2_5]] 270; CHECK-NEXT: [[MUL_2_5:%.*]] = mul nuw nsw i32 [[CONV_2_5]], [[CONV_2_5]] 271; CHECK-NEXT: [[ADD11_2_5:%.*]] = add i32 [[MUL_2_5]], [[ADD11_1_5]] 272; CHECK-NEXT: [[ARRAYIDX_3_5:%.*]] = getelementptr inbounds i16, i16* [[ADD_PTR_4]], i64 3 273; CHECK-NEXT: [[TMP43:%.*]] = load i16, i16* [[ARRAYIDX_3_5]], align 2 274; CHECK-NEXT: [[CONV_3_5:%.*]] = zext i16 [[TMP43]] to i32 275; CHECK-NEXT: [[ADD_3_5:%.*]] = add nuw nsw i32 [[ADD_2_5]], [[CONV_3_5]] 276; CHECK-NEXT: [[MUL_3_5:%.*]] = mul nuw nsw i32 [[CONV_3_5]], [[CONV_3_5]] 277; CHECK-NEXT: [[ADD11_3_5:%.*]] = add i32 [[MUL_3_5]], [[ADD11_2_5]] 278; CHECK-NEXT: [[ARRAYIDX_4_5:%.*]] = getelementptr inbounds i16, i16* [[ADD_PTR_4]], i64 4 279; CHECK-NEXT: [[TMP44:%.*]] = load i16, i16* [[ARRAYIDX_4_5]], align 2 280; CHECK-NEXT: [[CONV_4_5:%.*]] = zext i16 [[TMP44]] to i32 281; CHECK-NEXT: [[ADD_4_5:%.*]] = add nuw nsw i32 [[ADD_3_5]], [[CONV_4_5]] 282; CHECK-NEXT: [[MUL_4_5:%.*]] = mul nuw nsw i32 [[CONV_4_5]], [[CONV_4_5]] 283; CHECK-NEXT: [[ADD11_4_5:%.*]] = add i32 [[MUL_4_5]], [[ADD11_3_5]] 284; CHECK-NEXT: [[ARRAYIDX_5_5:%.*]] = getelementptr inbounds i16, i16* [[ADD_PTR_4]], i64 5 285; CHECK-NEXT: [[TMP45:%.*]] = load i16, i16* [[ARRAYIDX_5_5]], align 2 286; CHECK-NEXT: [[CONV_5_5:%.*]] = zext i16 [[TMP45]] to i32 287; CHECK-NEXT: [[ADD_5_5:%.*]] = add nuw nsw i32 [[ADD_4_5]], [[CONV_5_5]] 288; CHECK-NEXT: [[MUL_5_5:%.*]] = mul nuw nsw i32 [[CONV_5_5]], [[CONV_5_5]] 289; CHECK-NEXT: [[ADD11_5_5:%.*]] = add i32 [[MUL_5_5]], [[ADD11_4_5]] 290; CHECK-NEXT: [[ARRAYIDX_6_5:%.*]] = getelementptr inbounds i16, i16* [[ADD_PTR_4]], i64 6 291; CHECK-NEXT: [[TMP46:%.*]] = load i16, i16* [[ARRAYIDX_6_5]], align 2 292; CHECK-NEXT: [[CONV_6_5:%.*]] = zext i16 [[TMP46]] to i32 293; CHECK-NEXT: [[ADD_6_5:%.*]] = add nuw nsw i32 [[ADD_5_5]], [[CONV_6_5]] 294; CHECK-NEXT: [[MUL_6_5:%.*]] = mul nuw nsw i32 [[CONV_6_5]], [[CONV_6_5]] 295; CHECK-NEXT: [[ADD11_6_5:%.*]] = add i32 [[MUL_6_5]], [[ADD11_5_5]] 296; CHECK-NEXT: [[ARRAYIDX_7_5:%.*]] = getelementptr inbounds i16, i16* [[ADD_PTR_4]], i64 7 297; CHECK-NEXT: [[TMP47:%.*]] = load i16, i16* [[ARRAYIDX_7_5]], align 2 298; CHECK-NEXT: [[CONV_7_5:%.*]] = zext i16 [[TMP47]] to i32 299; CHECK-NEXT: [[ADD_7_5:%.*]] = add nuw nsw i32 [[ADD_6_5]], [[CONV_7_5]] 300; CHECK-NEXT: [[MUL_7_5:%.*]] = mul nuw nsw i32 [[CONV_7_5]], [[CONV_7_5]] 301; CHECK-NEXT: [[ADD11_7_5:%.*]] = add i32 [[MUL_7_5]], [[ADD11_6_5]] 302; CHECK-NEXT: [[ADD_PTR_5:%.*]] = getelementptr inbounds i16, i16* [[ADD_PTR_4]], i64 [[IDX_EXT]] 303; CHECK-NEXT: [[TMP48:%.*]] = load i16, i16* [[ADD_PTR_5]], align 2 304; CHECK-NEXT: [[CONV_660:%.*]] = zext i16 [[TMP48]] to i32 305; CHECK-NEXT: [[ADD_661:%.*]] = add nuw nsw i32 [[ADD_7_5]], [[CONV_660]] 306; CHECK-NEXT: [[MUL_662:%.*]] = mul nuw nsw i32 [[CONV_660]], [[CONV_660]] 307; CHECK-NEXT: [[ADD11_663:%.*]] = add i32 [[MUL_662]], [[ADD11_7_5]] 308; CHECK-NEXT: [[ARRAYIDX_1_6:%.*]] = getelementptr inbounds i16, i16* [[ADD_PTR_5]], i64 1 309; CHECK-NEXT: [[TMP49:%.*]] = load i16, i16* [[ARRAYIDX_1_6]], align 2 310; CHECK-NEXT: [[CONV_1_6:%.*]] = zext i16 [[TMP49]] to i32 311; CHECK-NEXT: [[ADD_1_6:%.*]] = add nuw nsw i32 [[ADD_661]], [[CONV_1_6]] 312; CHECK-NEXT: [[MUL_1_6:%.*]] = mul nuw nsw i32 [[CONV_1_6]], [[CONV_1_6]] 313; CHECK-NEXT: [[ADD11_1_6:%.*]] = add i32 [[MUL_1_6]], [[ADD11_663]] 314; CHECK-NEXT: [[ARRAYIDX_2_6:%.*]] = getelementptr inbounds i16, i16* [[ADD_PTR_5]], i64 2 315; CHECK-NEXT: [[TMP50:%.*]] = load i16, i16* [[ARRAYIDX_2_6]], align 2 316; CHECK-NEXT: [[CONV_2_6:%.*]] = zext i16 [[TMP50]] to i32 317; CHECK-NEXT: [[ADD_2_6:%.*]] = add nuw nsw i32 [[ADD_1_6]], [[CONV_2_6]] 318; CHECK-NEXT: [[MUL_2_6:%.*]] = mul nuw nsw i32 [[CONV_2_6]], [[CONV_2_6]] 319; CHECK-NEXT: [[ADD11_2_6:%.*]] = add i32 [[MUL_2_6]], [[ADD11_1_6]] 320; CHECK-NEXT: [[ARRAYIDX_3_6:%.*]] = getelementptr inbounds i16, i16* [[ADD_PTR_5]], i64 3 321; CHECK-NEXT: [[TMP51:%.*]] = load i16, i16* [[ARRAYIDX_3_6]], align 2 322; CHECK-NEXT: [[CONV_3_6:%.*]] = zext i16 [[TMP51]] to i32 323; CHECK-NEXT: [[ADD_3_6:%.*]] = add nuw nsw i32 [[ADD_2_6]], [[CONV_3_6]] 324; CHECK-NEXT: [[MUL_3_6:%.*]] = mul nuw nsw i32 [[CONV_3_6]], [[CONV_3_6]] 325; CHECK-NEXT: [[ADD11_3_6:%.*]] = add i32 [[MUL_3_6]], [[ADD11_2_6]] 326; CHECK-NEXT: [[ARRAYIDX_4_6:%.*]] = getelementptr inbounds i16, i16* [[ADD_PTR_5]], i64 4 327; CHECK-NEXT: [[TMP52:%.*]] = load i16, i16* [[ARRAYIDX_4_6]], align 2 328; CHECK-NEXT: [[CONV_4_6:%.*]] = zext i16 [[TMP52]] to i32 329; CHECK-NEXT: [[ADD_4_6:%.*]] = add nuw nsw i32 [[ADD_3_6]], [[CONV_4_6]] 330; CHECK-NEXT: [[MUL_4_6:%.*]] = mul nuw nsw i32 [[CONV_4_6]], [[CONV_4_6]] 331; CHECK-NEXT: [[ADD11_4_6:%.*]] = add i32 [[MUL_4_6]], [[ADD11_3_6]] 332; CHECK-NEXT: [[ARRAYIDX_5_6:%.*]] = getelementptr inbounds i16, i16* [[ADD_PTR_5]], i64 5 333; CHECK-NEXT: [[TMP53:%.*]] = load i16, i16* [[ARRAYIDX_5_6]], align 2 334; CHECK-NEXT: [[CONV_5_6:%.*]] = zext i16 [[TMP53]] to i32 335; CHECK-NEXT: [[ADD_5_6:%.*]] = add nuw nsw i32 [[ADD_4_6]], [[CONV_5_6]] 336; CHECK-NEXT: [[MUL_5_6:%.*]] = mul nuw nsw i32 [[CONV_5_6]], [[CONV_5_6]] 337; CHECK-NEXT: [[ADD11_5_6:%.*]] = add i32 [[MUL_5_6]], [[ADD11_4_6]] 338; CHECK-NEXT: [[ARRAYIDX_6_6:%.*]] = getelementptr inbounds i16, i16* [[ADD_PTR_5]], i64 6 339; CHECK-NEXT: [[TMP54:%.*]] = load i16, i16* [[ARRAYIDX_6_6]], align 2 340; CHECK-NEXT: [[CONV_6_6:%.*]] = zext i16 [[TMP54]] to i32 341; CHECK-NEXT: [[ADD_6_6:%.*]] = add nuw nsw i32 [[ADD_5_6]], [[CONV_6_6]] 342; CHECK-NEXT: [[MUL_6_6:%.*]] = mul nuw nsw i32 [[CONV_6_6]], [[CONV_6_6]] 343; CHECK-NEXT: [[ADD11_6_6:%.*]] = add i32 [[MUL_6_6]], [[ADD11_5_6]] 344; CHECK-NEXT: [[ARRAYIDX_7_6:%.*]] = getelementptr inbounds i16, i16* [[ADD_PTR_5]], i64 7 345; CHECK-NEXT: [[TMP55:%.*]] = load i16, i16* [[ARRAYIDX_7_6]], align 2 346; CHECK-NEXT: [[CONV_7_6:%.*]] = zext i16 [[TMP55]] to i32 347; CHECK-NEXT: [[ADD_7_6:%.*]] = add nuw nsw i32 [[ADD_6_6]], [[CONV_7_6]] 348; CHECK-NEXT: [[MUL_7_6:%.*]] = mul nuw nsw i32 [[CONV_7_6]], [[CONV_7_6]] 349; CHECK-NEXT: [[ADD11_7_6:%.*]] = add i32 [[MUL_7_6]], [[ADD11_6_6]] 350; CHECK-NEXT: [[ADD_PTR_6:%.*]] = getelementptr inbounds i16, i16* [[ADD_PTR_5]], i64 [[IDX_EXT]] 351; CHECK-NEXT: [[TMP56:%.*]] = load i16, i16* [[ADD_PTR_6]], align 2 352; CHECK-NEXT: [[CONV_764:%.*]] = zext i16 [[TMP56]] to i32 353; CHECK-NEXT: [[ADD_765:%.*]] = add nuw nsw i32 [[ADD_7_6]], [[CONV_764]] 354; CHECK-NEXT: [[MUL_766:%.*]] = mul nuw nsw i32 [[CONV_764]], [[CONV_764]] 355; CHECK-NEXT: [[ADD11_767:%.*]] = add i32 [[MUL_766]], [[ADD11_7_6]] 356; CHECK-NEXT: [[ARRAYIDX_1_7:%.*]] = getelementptr inbounds i16, i16* [[ADD_PTR_6]], i64 1 357; CHECK-NEXT: [[TMP57:%.*]] = load i16, i16* [[ARRAYIDX_1_7]], align 2 358; CHECK-NEXT: [[CONV_1_7:%.*]] = zext i16 [[TMP57]] to i32 359; CHECK-NEXT: [[ADD_1_7:%.*]] = add nuw nsw i32 [[ADD_765]], [[CONV_1_7]] 360; CHECK-NEXT: [[MUL_1_7:%.*]] = mul nuw nsw i32 [[CONV_1_7]], [[CONV_1_7]] 361; CHECK-NEXT: [[ADD11_1_7:%.*]] = add i32 [[MUL_1_7]], [[ADD11_767]] 362; CHECK-NEXT: [[ARRAYIDX_2_7:%.*]] = getelementptr inbounds i16, i16* [[ADD_PTR_6]], i64 2 363; CHECK-NEXT: [[TMP58:%.*]] = load i16, i16* [[ARRAYIDX_2_7]], align 2 364; CHECK-NEXT: [[CONV_2_7:%.*]] = zext i16 [[TMP58]] to i32 365; CHECK-NEXT: [[ADD_2_7:%.*]] = add nuw nsw i32 [[ADD_1_7]], [[CONV_2_7]] 366; CHECK-NEXT: [[MUL_2_7:%.*]] = mul nuw nsw i32 [[CONV_2_7]], [[CONV_2_7]] 367; CHECK-NEXT: [[ADD11_2_7:%.*]] = add i32 [[MUL_2_7]], [[ADD11_1_7]] 368; CHECK-NEXT: [[ARRAYIDX_3_7:%.*]] = getelementptr inbounds i16, i16* [[ADD_PTR_6]], i64 3 369; CHECK-NEXT: [[TMP59:%.*]] = load i16, i16* [[ARRAYIDX_3_7]], align 2 370; CHECK-NEXT: [[CONV_3_7:%.*]] = zext i16 [[TMP59]] to i32 371; CHECK-NEXT: [[ADD_3_7:%.*]] = add nuw nsw i32 [[ADD_2_7]], [[CONV_3_7]] 372; CHECK-NEXT: [[MUL_3_7:%.*]] = mul nuw nsw i32 [[CONV_3_7]], [[CONV_3_7]] 373; CHECK-NEXT: [[ADD11_3_7:%.*]] = add i32 [[MUL_3_7]], [[ADD11_2_7]] 374; CHECK-NEXT: [[ARRAYIDX_4_7:%.*]] = getelementptr inbounds i16, i16* [[ADD_PTR_6]], i64 4 375; CHECK-NEXT: [[TMP60:%.*]] = load i16, i16* [[ARRAYIDX_4_7]], align 2 376; CHECK-NEXT: [[CONV_4_7:%.*]] = zext i16 [[TMP60]] to i32 377; CHECK-NEXT: [[ADD_4_7:%.*]] = add nuw nsw i32 [[ADD_3_7]], [[CONV_4_7]] 378; CHECK-NEXT: [[MUL_4_7:%.*]] = mul nuw nsw i32 [[CONV_4_7]], [[CONV_4_7]] 379; CHECK-NEXT: [[ADD11_4_7:%.*]] = add i32 [[MUL_4_7]], [[ADD11_3_7]] 380; CHECK-NEXT: [[ARRAYIDX_5_7:%.*]] = getelementptr inbounds i16, i16* [[ADD_PTR_6]], i64 5 381; CHECK-NEXT: [[TMP61:%.*]] = load i16, i16* [[ARRAYIDX_5_7]], align 2 382; CHECK-NEXT: [[CONV_5_7:%.*]] = zext i16 [[TMP61]] to i32 383; CHECK-NEXT: [[ADD_5_7:%.*]] = add nuw nsw i32 [[ADD_4_7]], [[CONV_5_7]] 384; CHECK-NEXT: [[MUL_5_7:%.*]] = mul nuw nsw i32 [[CONV_5_7]], [[CONV_5_7]] 385; CHECK-NEXT: [[ADD11_5_7:%.*]] = add i32 [[MUL_5_7]], [[ADD11_4_7]] 386; CHECK-NEXT: [[ARRAYIDX_6_7:%.*]] = getelementptr inbounds i16, i16* [[ADD_PTR_6]], i64 6 387; CHECK-NEXT: [[TMP62:%.*]] = load i16, i16* [[ARRAYIDX_6_7]], align 2 388; CHECK-NEXT: [[CONV_6_7:%.*]] = zext i16 [[TMP62]] to i32 389; CHECK-NEXT: [[ADD_6_7:%.*]] = add nuw nsw i32 [[ADD_5_7]], [[CONV_6_7]] 390; CHECK-NEXT: [[MUL_6_7:%.*]] = mul nuw nsw i32 [[CONV_6_7]], [[CONV_6_7]] 391; CHECK-NEXT: [[ADD11_6_7:%.*]] = add i32 [[MUL_6_7]], [[ADD11_5_7]] 392; CHECK-NEXT: [[ARRAYIDX_7_7:%.*]] = getelementptr inbounds i16, i16* [[ADD_PTR_6]], i64 7 393; CHECK-NEXT: [[TMP63:%.*]] = load i16, i16* [[ARRAYIDX_7_7]], align 2 394; CHECK-NEXT: [[CONV_7_7:%.*]] = zext i16 [[TMP63]] to i32 395; CHECK-NEXT: [[ADD_7_7:%.*]] = add nuw nsw i32 [[ADD_6_7]], [[CONV_7_7]] 396; CHECK-NEXT: [[MUL_7_7:%.*]] = mul nuw nsw i32 [[CONV_7_7]], [[CONV_7_7]] 397; CHECK-NEXT: [[ADD11_7_7:%.*]] = add i32 [[MUL_7_7]], [[ADD11_6_7]] 398; CHECK-NEXT: [[CONV15:%.*]] = zext i32 [[ADD_7_7]] to i64 399; CHECK-NEXT: [[CONV16:%.*]] = zext i32 [[ADD11_7_7]] to i64 400; CHECK-NEXT: [[SHL:%.*]] = shl nuw i64 [[CONV16]], 32 401; CHECK-NEXT: [[ADD17:%.*]] = or i64 [[SHL]], [[CONV15]] 402; CHECK-NEXT: ret i64 [[ADD17]] 403; 404entry: 405 %idx.ext = sext i32 %st to i64 406 %0 = load i16, i16* %p, align 2 407 %conv = zext i16 %0 to i32 408 %mul = mul nuw nsw i32 %conv, %conv 409 %arrayidx.1 = getelementptr inbounds i16, i16* %p, i64 1 410 %1 = load i16, i16* %arrayidx.1, align 2 411 %conv.1 = zext i16 %1 to i32 412 %add.1 = add nuw nsw i32 %conv, %conv.1 413 %mul.1 = mul nuw nsw i32 %conv.1, %conv.1 414 %add11.1 = add nuw i32 %mul.1, %mul 415 %arrayidx.2 = getelementptr inbounds i16, i16* %p, i64 2 416 %2 = load i16, i16* %arrayidx.2, align 2 417 %conv.2 = zext i16 %2 to i32 418 %add.2 = add nuw nsw i32 %add.1, %conv.2 419 %mul.2 = mul nuw nsw i32 %conv.2, %conv.2 420 %add11.2 = add i32 %mul.2, %add11.1 421 %arrayidx.3 = getelementptr inbounds i16, i16* %p, i64 3 422 %3 = load i16, i16* %arrayidx.3, align 2 423 %conv.3 = zext i16 %3 to i32 424 %add.3 = add nuw nsw i32 %add.2, %conv.3 425 %mul.3 = mul nuw nsw i32 %conv.3, %conv.3 426 %add11.3 = add i32 %mul.3, %add11.2 427 %arrayidx.4 = getelementptr inbounds i16, i16* %p, i64 4 428 %4 = load i16, i16* %arrayidx.4, align 2 429 %conv.4 = zext i16 %4 to i32 430 %add.4 = add nuw nsw i32 %add.3, %conv.4 431 %mul.4 = mul nuw nsw i32 %conv.4, %conv.4 432 %add11.4 = add i32 %mul.4, %add11.3 433 %arrayidx.5 = getelementptr inbounds i16, i16* %p, i64 5 434 %5 = load i16, i16* %arrayidx.5, align 2 435 %conv.5 = zext i16 %5 to i32 436 %add.5 = add nuw nsw i32 %add.4, %conv.5 437 %mul.5 = mul nuw nsw i32 %conv.5, %conv.5 438 %add11.5 = add i32 %mul.5, %add11.4 439 %arrayidx.6 = getelementptr inbounds i16, i16* %p, i64 6 440 %6 = load i16, i16* %arrayidx.6, align 2 441 %conv.6 = zext i16 %6 to i32 442 %add.6 = add nuw nsw i32 %add.5, %conv.6 443 %mul.6 = mul nuw nsw i32 %conv.6, %conv.6 444 %add11.6 = add i32 %mul.6, %add11.5 445 %arrayidx.7 = getelementptr inbounds i16, i16* %p, i64 7 446 %7 = load i16, i16* %arrayidx.7, align 2 447 %conv.7 = zext i16 %7 to i32 448 %add.7 = add nuw nsw i32 %add.6, %conv.7 449 %mul.7 = mul nuw nsw i32 %conv.7, %conv.7 450 %add11.7 = add i32 %mul.7, %add11.6 451 %add.ptr = getelementptr inbounds i16, i16* %p, i64 %idx.ext 452 %8 = load i16, i16* %add.ptr, align 2 453 %conv.140 = zext i16 %8 to i32 454 %add.141 = add nuw nsw i32 %add.7, %conv.140 455 %mul.142 = mul nuw nsw i32 %conv.140, %conv.140 456 %add11.143 = add i32 %mul.142, %add11.7 457 %arrayidx.1.1 = getelementptr inbounds i16, i16* %add.ptr, i64 1 458 %9 = load i16, i16* %arrayidx.1.1, align 2 459 %conv.1.1 = zext i16 %9 to i32 460 %add.1.1 = add nuw nsw i32 %add.141, %conv.1.1 461 %mul.1.1 = mul nuw nsw i32 %conv.1.1, %conv.1.1 462 %add11.1.1 = add i32 %mul.1.1, %add11.143 463 %arrayidx.2.1 = getelementptr inbounds i16, i16* %add.ptr, i64 2 464 %10 = load i16, i16* %arrayidx.2.1, align 2 465 %conv.2.1 = zext i16 %10 to i32 466 %add.2.1 = add nuw nsw i32 %add.1.1, %conv.2.1 467 %mul.2.1 = mul nuw nsw i32 %conv.2.1, %conv.2.1 468 %add11.2.1 = add i32 %mul.2.1, %add11.1.1 469 %arrayidx.3.1 = getelementptr inbounds i16, i16* %add.ptr, i64 3 470 %11 = load i16, i16* %arrayidx.3.1, align 2 471 %conv.3.1 = zext i16 %11 to i32 472 %add.3.1 = add nuw nsw i32 %add.2.1, %conv.3.1 473 %mul.3.1 = mul nuw nsw i32 %conv.3.1, %conv.3.1 474 %add11.3.1 = add i32 %mul.3.1, %add11.2.1 475 %arrayidx.4.1 = getelementptr inbounds i16, i16* %add.ptr, i64 4 476 %12 = load i16, i16* %arrayidx.4.1, align 2 477 %conv.4.1 = zext i16 %12 to i32 478 %add.4.1 = add nuw nsw i32 %add.3.1, %conv.4.1 479 %mul.4.1 = mul nuw nsw i32 %conv.4.1, %conv.4.1 480 %add11.4.1 = add i32 %mul.4.1, %add11.3.1 481 %arrayidx.5.1 = getelementptr inbounds i16, i16* %add.ptr, i64 5 482 %13 = load i16, i16* %arrayidx.5.1, align 2 483 %conv.5.1 = zext i16 %13 to i32 484 %add.5.1 = add nuw nsw i32 %add.4.1, %conv.5.1 485 %mul.5.1 = mul nuw nsw i32 %conv.5.1, %conv.5.1 486 %add11.5.1 = add i32 %mul.5.1, %add11.4.1 487 %arrayidx.6.1 = getelementptr inbounds i16, i16* %add.ptr, i64 6 488 %14 = load i16, i16* %arrayidx.6.1, align 2 489 %conv.6.1 = zext i16 %14 to i32 490 %add.6.1 = add nuw nsw i32 %add.5.1, %conv.6.1 491 %mul.6.1 = mul nuw nsw i32 %conv.6.1, %conv.6.1 492 %add11.6.1 = add i32 %mul.6.1, %add11.5.1 493 %arrayidx.7.1 = getelementptr inbounds i16, i16* %add.ptr, i64 7 494 %15 = load i16, i16* %arrayidx.7.1, align 2 495 %conv.7.1 = zext i16 %15 to i32 496 %add.7.1 = add nuw nsw i32 %add.6.1, %conv.7.1 497 %mul.7.1 = mul nuw nsw i32 %conv.7.1, %conv.7.1 498 %add11.7.1 = add i32 %mul.7.1, %add11.6.1 499 %add.ptr.1 = getelementptr inbounds i16, i16* %add.ptr, i64 %idx.ext 500 %16 = load i16, i16* %add.ptr.1, align 2 501 %conv.244 = zext i16 %16 to i32 502 %add.245 = add nuw nsw i32 %add.7.1, %conv.244 503 %mul.246 = mul nuw nsw i32 %conv.244, %conv.244 504 %add11.247 = add i32 %mul.246, %add11.7.1 505 %arrayidx.1.2 = getelementptr inbounds i16, i16* %add.ptr.1, i64 1 506 %17 = load i16, i16* %arrayidx.1.2, align 2 507 %conv.1.2 = zext i16 %17 to i32 508 %add.1.2 = add nuw nsw i32 %add.245, %conv.1.2 509 %mul.1.2 = mul nuw nsw i32 %conv.1.2, %conv.1.2 510 %add11.1.2 = add i32 %mul.1.2, %add11.247 511 %arrayidx.2.2 = getelementptr inbounds i16, i16* %add.ptr.1, i64 2 512 %18 = load i16, i16* %arrayidx.2.2, align 2 513 %conv.2.2 = zext i16 %18 to i32 514 %add.2.2 = add nuw nsw i32 %add.1.2, %conv.2.2 515 %mul.2.2 = mul nuw nsw i32 %conv.2.2, %conv.2.2 516 %add11.2.2 = add i32 %mul.2.2, %add11.1.2 517 %arrayidx.3.2 = getelementptr inbounds i16, i16* %add.ptr.1, i64 3 518 %19 = load i16, i16* %arrayidx.3.2, align 2 519 %conv.3.2 = zext i16 %19 to i32 520 %add.3.2 = add nuw nsw i32 %add.2.2, %conv.3.2 521 %mul.3.2 = mul nuw nsw i32 %conv.3.2, %conv.3.2 522 %add11.3.2 = add i32 %mul.3.2, %add11.2.2 523 %arrayidx.4.2 = getelementptr inbounds i16, i16* %add.ptr.1, i64 4 524 %20 = load i16, i16* %arrayidx.4.2, align 2 525 %conv.4.2 = zext i16 %20 to i32 526 %add.4.2 = add nuw nsw i32 %add.3.2, %conv.4.2 527 %mul.4.2 = mul nuw nsw i32 %conv.4.2, %conv.4.2 528 %add11.4.2 = add i32 %mul.4.2, %add11.3.2 529 %arrayidx.5.2 = getelementptr inbounds i16, i16* %add.ptr.1, i64 5 530 %21 = load i16, i16* %arrayidx.5.2, align 2 531 %conv.5.2 = zext i16 %21 to i32 532 %add.5.2 = add nuw nsw i32 %add.4.2, %conv.5.2 533 %mul.5.2 = mul nuw nsw i32 %conv.5.2, %conv.5.2 534 %add11.5.2 = add i32 %mul.5.2, %add11.4.2 535 %arrayidx.6.2 = getelementptr inbounds i16, i16* %add.ptr.1, i64 6 536 %22 = load i16, i16* %arrayidx.6.2, align 2 537 %conv.6.2 = zext i16 %22 to i32 538 %add.6.2 = add nuw nsw i32 %add.5.2, %conv.6.2 539 %mul.6.2 = mul nuw nsw i32 %conv.6.2, %conv.6.2 540 %add11.6.2 = add i32 %mul.6.2, %add11.5.2 541 %arrayidx.7.2 = getelementptr inbounds i16, i16* %add.ptr.1, i64 7 542 %23 = load i16, i16* %arrayidx.7.2, align 2 543 %conv.7.2 = zext i16 %23 to i32 544 %add.7.2 = add nuw nsw i32 %add.6.2, %conv.7.2 545 %mul.7.2 = mul nuw nsw i32 %conv.7.2, %conv.7.2 546 %add11.7.2 = add i32 %mul.7.2, %add11.6.2 547 %add.ptr.2 = getelementptr inbounds i16, i16* %add.ptr.1, i64 %idx.ext 548 %24 = load i16, i16* %add.ptr.2, align 2 549 %conv.348 = zext i16 %24 to i32 550 %add.349 = add nuw nsw i32 %add.7.2, %conv.348 551 %mul.350 = mul nuw nsw i32 %conv.348, %conv.348 552 %add11.351 = add i32 %mul.350, %add11.7.2 553 %arrayidx.1.3 = getelementptr inbounds i16, i16* %add.ptr.2, i64 1 554 %25 = load i16, i16* %arrayidx.1.3, align 2 555 %conv.1.3 = zext i16 %25 to i32 556 %add.1.3 = add nuw nsw i32 %add.349, %conv.1.3 557 %mul.1.3 = mul nuw nsw i32 %conv.1.3, %conv.1.3 558 %add11.1.3 = add i32 %mul.1.3, %add11.351 559 %arrayidx.2.3 = getelementptr inbounds i16, i16* %add.ptr.2, i64 2 560 %26 = load i16, i16* %arrayidx.2.3, align 2 561 %conv.2.3 = zext i16 %26 to i32 562 %add.2.3 = add nuw nsw i32 %add.1.3, %conv.2.3 563 %mul.2.3 = mul nuw nsw i32 %conv.2.3, %conv.2.3 564 %add11.2.3 = add i32 %mul.2.3, %add11.1.3 565 %arrayidx.3.3 = getelementptr inbounds i16, i16* %add.ptr.2, i64 3 566 %27 = load i16, i16* %arrayidx.3.3, align 2 567 %conv.3.3 = zext i16 %27 to i32 568 %add.3.3 = add nuw nsw i32 %add.2.3, %conv.3.3 569 %mul.3.3 = mul nuw nsw i32 %conv.3.3, %conv.3.3 570 %add11.3.3 = add i32 %mul.3.3, %add11.2.3 571 %arrayidx.4.3 = getelementptr inbounds i16, i16* %add.ptr.2, i64 4 572 %28 = load i16, i16* %arrayidx.4.3, align 2 573 %conv.4.3 = zext i16 %28 to i32 574 %add.4.3 = add nuw nsw i32 %add.3.3, %conv.4.3 575 %mul.4.3 = mul nuw nsw i32 %conv.4.3, %conv.4.3 576 %add11.4.3 = add i32 %mul.4.3, %add11.3.3 577 %arrayidx.5.3 = getelementptr inbounds i16, i16* %add.ptr.2, i64 5 578 %29 = load i16, i16* %arrayidx.5.3, align 2 579 %conv.5.3 = zext i16 %29 to i32 580 %add.5.3 = add nuw nsw i32 %add.4.3, %conv.5.3 581 %mul.5.3 = mul nuw nsw i32 %conv.5.3, %conv.5.3 582 %add11.5.3 = add i32 %mul.5.3, %add11.4.3 583 %arrayidx.6.3 = getelementptr inbounds i16, i16* %add.ptr.2, i64 6 584 %30 = load i16, i16* %arrayidx.6.3, align 2 585 %conv.6.3 = zext i16 %30 to i32 586 %add.6.3 = add nuw nsw i32 %add.5.3, %conv.6.3 587 %mul.6.3 = mul nuw nsw i32 %conv.6.3, %conv.6.3 588 %add11.6.3 = add i32 %mul.6.3, %add11.5.3 589 %arrayidx.7.3 = getelementptr inbounds i16, i16* %add.ptr.2, i64 7 590 %31 = load i16, i16* %arrayidx.7.3, align 2 591 %conv.7.3 = zext i16 %31 to i32 592 %add.7.3 = add nuw nsw i32 %add.6.3, %conv.7.3 593 %mul.7.3 = mul nuw nsw i32 %conv.7.3, %conv.7.3 594 %add11.7.3 = add i32 %mul.7.3, %add11.6.3 595 %add.ptr.3 = getelementptr inbounds i16, i16* %add.ptr.2, i64 %idx.ext 596 %32 = load i16, i16* %add.ptr.3, align 2 597 %conv.452 = zext i16 %32 to i32 598 %add.453 = add nuw nsw i32 %add.7.3, %conv.452 599 %mul.454 = mul nuw nsw i32 %conv.452, %conv.452 600 %add11.455 = add i32 %mul.454, %add11.7.3 601 %arrayidx.1.4 = getelementptr inbounds i16, i16* %add.ptr.3, i64 1 602 %33 = load i16, i16* %arrayidx.1.4, align 2 603 %conv.1.4 = zext i16 %33 to i32 604 %add.1.4 = add nuw nsw i32 %add.453, %conv.1.4 605 %mul.1.4 = mul nuw nsw i32 %conv.1.4, %conv.1.4 606 %add11.1.4 = add i32 %mul.1.4, %add11.455 607 %arrayidx.2.4 = getelementptr inbounds i16, i16* %add.ptr.3, i64 2 608 %34 = load i16, i16* %arrayidx.2.4, align 2 609 %conv.2.4 = zext i16 %34 to i32 610 %add.2.4 = add nuw nsw i32 %add.1.4, %conv.2.4 611 %mul.2.4 = mul nuw nsw i32 %conv.2.4, %conv.2.4 612 %add11.2.4 = add i32 %mul.2.4, %add11.1.4 613 %arrayidx.3.4 = getelementptr inbounds i16, i16* %add.ptr.3, i64 3 614 %35 = load i16, i16* %arrayidx.3.4, align 2 615 %conv.3.4 = zext i16 %35 to i32 616 %add.3.4 = add nuw nsw i32 %add.2.4, %conv.3.4 617 %mul.3.4 = mul nuw nsw i32 %conv.3.4, %conv.3.4 618 %add11.3.4 = add i32 %mul.3.4, %add11.2.4 619 %arrayidx.4.4 = getelementptr inbounds i16, i16* %add.ptr.3, i64 4 620 %36 = load i16, i16* %arrayidx.4.4, align 2 621 %conv.4.4 = zext i16 %36 to i32 622 %add.4.4 = add nuw nsw i32 %add.3.4, %conv.4.4 623 %mul.4.4 = mul nuw nsw i32 %conv.4.4, %conv.4.4 624 %add11.4.4 = add i32 %mul.4.4, %add11.3.4 625 %arrayidx.5.4 = getelementptr inbounds i16, i16* %add.ptr.3, i64 5 626 %37 = load i16, i16* %arrayidx.5.4, align 2 627 %conv.5.4 = zext i16 %37 to i32 628 %add.5.4 = add nuw nsw i32 %add.4.4, %conv.5.4 629 %mul.5.4 = mul nuw nsw i32 %conv.5.4, %conv.5.4 630 %add11.5.4 = add i32 %mul.5.4, %add11.4.4 631 %arrayidx.6.4 = getelementptr inbounds i16, i16* %add.ptr.3, i64 6 632 %38 = load i16, i16* %arrayidx.6.4, align 2 633 %conv.6.4 = zext i16 %38 to i32 634 %add.6.4 = add nuw nsw i32 %add.5.4, %conv.6.4 635 %mul.6.4 = mul nuw nsw i32 %conv.6.4, %conv.6.4 636 %add11.6.4 = add i32 %mul.6.4, %add11.5.4 637 %arrayidx.7.4 = getelementptr inbounds i16, i16* %add.ptr.3, i64 7 638 %39 = load i16, i16* %arrayidx.7.4, align 2 639 %conv.7.4 = zext i16 %39 to i32 640 %add.7.4 = add nuw nsw i32 %add.6.4, %conv.7.4 641 %mul.7.4 = mul nuw nsw i32 %conv.7.4, %conv.7.4 642 %add11.7.4 = add i32 %mul.7.4, %add11.6.4 643 %add.ptr.4 = getelementptr inbounds i16, i16* %add.ptr.3, i64 %idx.ext 644 %40 = load i16, i16* %add.ptr.4, align 2 645 %conv.556 = zext i16 %40 to i32 646 %add.557 = add nuw nsw i32 %add.7.4, %conv.556 647 %mul.558 = mul nuw nsw i32 %conv.556, %conv.556 648 %add11.559 = add i32 %mul.558, %add11.7.4 649 %arrayidx.1.5 = getelementptr inbounds i16, i16* %add.ptr.4, i64 1 650 %41 = load i16, i16* %arrayidx.1.5, align 2 651 %conv.1.5 = zext i16 %41 to i32 652 %add.1.5 = add nuw nsw i32 %add.557, %conv.1.5 653 %mul.1.5 = mul nuw nsw i32 %conv.1.5, %conv.1.5 654 %add11.1.5 = add i32 %mul.1.5, %add11.559 655 %arrayidx.2.5 = getelementptr inbounds i16, i16* %add.ptr.4, i64 2 656 %42 = load i16, i16* %arrayidx.2.5, align 2 657 %conv.2.5 = zext i16 %42 to i32 658 %add.2.5 = add nuw nsw i32 %add.1.5, %conv.2.5 659 %mul.2.5 = mul nuw nsw i32 %conv.2.5, %conv.2.5 660 %add11.2.5 = add i32 %mul.2.5, %add11.1.5 661 %arrayidx.3.5 = getelementptr inbounds i16, i16* %add.ptr.4, i64 3 662 %43 = load i16, i16* %arrayidx.3.5, align 2 663 %conv.3.5 = zext i16 %43 to i32 664 %add.3.5 = add nuw nsw i32 %add.2.5, %conv.3.5 665 %mul.3.5 = mul nuw nsw i32 %conv.3.5, %conv.3.5 666 %add11.3.5 = add i32 %mul.3.5, %add11.2.5 667 %arrayidx.4.5 = getelementptr inbounds i16, i16* %add.ptr.4, i64 4 668 %44 = load i16, i16* %arrayidx.4.5, align 2 669 %conv.4.5 = zext i16 %44 to i32 670 %add.4.5 = add nuw nsw i32 %add.3.5, %conv.4.5 671 %mul.4.5 = mul nuw nsw i32 %conv.4.5, %conv.4.5 672 %add11.4.5 = add i32 %mul.4.5, %add11.3.5 673 %arrayidx.5.5 = getelementptr inbounds i16, i16* %add.ptr.4, i64 5 674 %45 = load i16, i16* %arrayidx.5.5, align 2 675 %conv.5.5 = zext i16 %45 to i32 676 %add.5.5 = add nuw nsw i32 %add.4.5, %conv.5.5 677 %mul.5.5 = mul nuw nsw i32 %conv.5.5, %conv.5.5 678 %add11.5.5 = add i32 %mul.5.5, %add11.4.5 679 %arrayidx.6.5 = getelementptr inbounds i16, i16* %add.ptr.4, i64 6 680 %46 = load i16, i16* %arrayidx.6.5, align 2 681 %conv.6.5 = zext i16 %46 to i32 682 %add.6.5 = add nuw nsw i32 %add.5.5, %conv.6.5 683 %mul.6.5 = mul nuw nsw i32 %conv.6.5, %conv.6.5 684 %add11.6.5 = add i32 %mul.6.5, %add11.5.5 685 %arrayidx.7.5 = getelementptr inbounds i16, i16* %add.ptr.4, i64 7 686 %47 = load i16, i16* %arrayidx.7.5, align 2 687 %conv.7.5 = zext i16 %47 to i32 688 %add.7.5 = add nuw nsw i32 %add.6.5, %conv.7.5 689 %mul.7.5 = mul nuw nsw i32 %conv.7.5, %conv.7.5 690 %add11.7.5 = add i32 %mul.7.5, %add11.6.5 691 %add.ptr.5 = getelementptr inbounds i16, i16* %add.ptr.4, i64 %idx.ext 692 %48 = load i16, i16* %add.ptr.5, align 2 693 %conv.660 = zext i16 %48 to i32 694 %add.661 = add nuw nsw i32 %add.7.5, %conv.660 695 %mul.662 = mul nuw nsw i32 %conv.660, %conv.660 696 %add11.663 = add i32 %mul.662, %add11.7.5 697 %arrayidx.1.6 = getelementptr inbounds i16, i16* %add.ptr.5, i64 1 698 %49 = load i16, i16* %arrayidx.1.6, align 2 699 %conv.1.6 = zext i16 %49 to i32 700 %add.1.6 = add nuw nsw i32 %add.661, %conv.1.6 701 %mul.1.6 = mul nuw nsw i32 %conv.1.6, %conv.1.6 702 %add11.1.6 = add i32 %mul.1.6, %add11.663 703 %arrayidx.2.6 = getelementptr inbounds i16, i16* %add.ptr.5, i64 2 704 %50 = load i16, i16* %arrayidx.2.6, align 2 705 %conv.2.6 = zext i16 %50 to i32 706 %add.2.6 = add nuw nsw i32 %add.1.6, %conv.2.6 707 %mul.2.6 = mul nuw nsw i32 %conv.2.6, %conv.2.6 708 %add11.2.6 = add i32 %mul.2.6, %add11.1.6 709 %arrayidx.3.6 = getelementptr inbounds i16, i16* %add.ptr.5, i64 3 710 %51 = load i16, i16* %arrayidx.3.6, align 2 711 %conv.3.6 = zext i16 %51 to i32 712 %add.3.6 = add nuw nsw i32 %add.2.6, %conv.3.6 713 %mul.3.6 = mul nuw nsw i32 %conv.3.6, %conv.3.6 714 %add11.3.6 = add i32 %mul.3.6, %add11.2.6 715 %arrayidx.4.6 = getelementptr inbounds i16, i16* %add.ptr.5, i64 4 716 %52 = load i16, i16* %arrayidx.4.6, align 2 717 %conv.4.6 = zext i16 %52 to i32 718 %add.4.6 = add nuw nsw i32 %add.3.6, %conv.4.6 719 %mul.4.6 = mul nuw nsw i32 %conv.4.6, %conv.4.6 720 %add11.4.6 = add i32 %mul.4.6, %add11.3.6 721 %arrayidx.5.6 = getelementptr inbounds i16, i16* %add.ptr.5, i64 5 722 %53 = load i16, i16* %arrayidx.5.6, align 2 723 %conv.5.6 = zext i16 %53 to i32 724 %add.5.6 = add nuw nsw i32 %add.4.6, %conv.5.6 725 %mul.5.6 = mul nuw nsw i32 %conv.5.6, %conv.5.6 726 %add11.5.6 = add i32 %mul.5.6, %add11.4.6 727 %arrayidx.6.6 = getelementptr inbounds i16, i16* %add.ptr.5, i64 6 728 %54 = load i16, i16* %arrayidx.6.6, align 2 729 %conv.6.6 = zext i16 %54 to i32 730 %add.6.6 = add nuw nsw i32 %add.5.6, %conv.6.6 731 %mul.6.6 = mul nuw nsw i32 %conv.6.6, %conv.6.6 732 %add11.6.6 = add i32 %mul.6.6, %add11.5.6 733 %arrayidx.7.6 = getelementptr inbounds i16, i16* %add.ptr.5, i64 7 734 %55 = load i16, i16* %arrayidx.7.6, align 2 735 %conv.7.6 = zext i16 %55 to i32 736 %add.7.6 = add nuw nsw i32 %add.6.6, %conv.7.6 737 %mul.7.6 = mul nuw nsw i32 %conv.7.6, %conv.7.6 738 %add11.7.6 = add i32 %mul.7.6, %add11.6.6 739 %add.ptr.6 = getelementptr inbounds i16, i16* %add.ptr.5, i64 %idx.ext 740 %56 = load i16, i16* %add.ptr.6, align 2 741 %conv.764 = zext i16 %56 to i32 742 %add.765 = add nuw nsw i32 %add.7.6, %conv.764 743 %mul.766 = mul nuw nsw i32 %conv.764, %conv.764 744 %add11.767 = add i32 %mul.766, %add11.7.6 745 %arrayidx.1.7 = getelementptr inbounds i16, i16* %add.ptr.6, i64 1 746 %57 = load i16, i16* %arrayidx.1.7, align 2 747 %conv.1.7 = zext i16 %57 to i32 748 %add.1.7 = add nuw nsw i32 %add.765, %conv.1.7 749 %mul.1.7 = mul nuw nsw i32 %conv.1.7, %conv.1.7 750 %add11.1.7 = add i32 %mul.1.7, %add11.767 751 %arrayidx.2.7 = getelementptr inbounds i16, i16* %add.ptr.6, i64 2 752 %58 = load i16, i16* %arrayidx.2.7, align 2 753 %conv.2.7 = zext i16 %58 to i32 754 %add.2.7 = add nuw nsw i32 %add.1.7, %conv.2.7 755 %mul.2.7 = mul nuw nsw i32 %conv.2.7, %conv.2.7 756 %add11.2.7 = add i32 %mul.2.7, %add11.1.7 757 %arrayidx.3.7 = getelementptr inbounds i16, i16* %add.ptr.6, i64 3 758 %59 = load i16, i16* %arrayidx.3.7, align 2 759 %conv.3.7 = zext i16 %59 to i32 760 %add.3.7 = add nuw nsw i32 %add.2.7, %conv.3.7 761 %mul.3.7 = mul nuw nsw i32 %conv.3.7, %conv.3.7 762 %add11.3.7 = add i32 %mul.3.7, %add11.2.7 763 %arrayidx.4.7 = getelementptr inbounds i16, i16* %add.ptr.6, i64 4 764 %60 = load i16, i16* %arrayidx.4.7, align 2 765 %conv.4.7 = zext i16 %60 to i32 766 %add.4.7 = add nuw nsw i32 %add.3.7, %conv.4.7 767 %mul.4.7 = mul nuw nsw i32 %conv.4.7, %conv.4.7 768 %add11.4.7 = add i32 %mul.4.7, %add11.3.7 769 %arrayidx.5.7 = getelementptr inbounds i16, i16* %add.ptr.6, i64 5 770 %61 = load i16, i16* %arrayidx.5.7, align 2 771 %conv.5.7 = zext i16 %61 to i32 772 %add.5.7 = add nuw nsw i32 %add.4.7, %conv.5.7 773 %mul.5.7 = mul nuw nsw i32 %conv.5.7, %conv.5.7 774 %add11.5.7 = add i32 %mul.5.7, %add11.4.7 775 %arrayidx.6.7 = getelementptr inbounds i16, i16* %add.ptr.6, i64 6 776 %62 = load i16, i16* %arrayidx.6.7, align 2 777 %conv.6.7 = zext i16 %62 to i32 778 %add.6.7 = add nuw nsw i32 %add.5.7, %conv.6.7 779 %mul.6.7 = mul nuw nsw i32 %conv.6.7, %conv.6.7 780 %add11.6.7 = add i32 %mul.6.7, %add11.5.7 781 %arrayidx.7.7 = getelementptr inbounds i16, i16* %add.ptr.6, i64 7 782 %63 = load i16, i16* %arrayidx.7.7, align 2 783 %conv.7.7 = zext i16 %63 to i32 784 %add.7.7 = add nuw nsw i32 %add.6.7, %conv.7.7 785 %mul.7.7 = mul nuw nsw i32 %conv.7.7, %conv.7.7 786 %add11.7.7 = add i32 %mul.7.7, %add11.6.7 787 %conv15 = zext i32 %add.7.7 to i64 788 %conv16 = zext i32 %add11.7.7 to i64 789 %shl = shl nuw i64 %conv16, 32 790 %add17 = or i64 %shl, %conv15 791 ret i64 %add17 792} 793 794define i64 @looped(i16* nocapture noundef readonly %p, i32 noundef %st) { 795; CHECK-LABEL: @looped( 796; CHECK-NEXT: entry: 797; CHECK-NEXT: [[IDX_EXT:%.*]] = sext i32 [[ST:%.*]] to i64 798; CHECK-NEXT: br label [[FOR_COND1_PREHEADER:%.*]] 799; CHECK: for.cond1.preheader: 800; CHECK-NEXT: [[Y_038:%.*]] = phi i32 [ 0, [[ENTRY:%.*]] ], [ [[INC13:%.*]], [[FOR_COND1_PREHEADER]] ] 801; CHECK-NEXT: [[SQ_037:%.*]] = phi i32 [ 0, [[ENTRY]] ], [ [[ADD11_15:%.*]], [[FOR_COND1_PREHEADER]] ] 802; CHECK-NEXT: [[SM_036:%.*]] = phi i32 [ 0, [[ENTRY]] ], [ [[ADD_15:%.*]], [[FOR_COND1_PREHEADER]] ] 803; CHECK-NEXT: [[P_ADDR_035:%.*]] = phi i16* [ [[P:%.*]], [[ENTRY]] ], [ [[ADD_PTR:%.*]], [[FOR_COND1_PREHEADER]] ] 804; CHECK-NEXT: [[TMP0:%.*]] = load i16, i16* [[P_ADDR_035]], align 2 805; CHECK-NEXT: [[CONV:%.*]] = zext i16 [[TMP0]] to i32 806; CHECK-NEXT: [[ADD:%.*]] = add i32 [[SM_036]], [[CONV]] 807; CHECK-NEXT: [[MUL:%.*]] = mul nuw nsw i32 [[CONV]], [[CONV]] 808; CHECK-NEXT: [[ADD11:%.*]] = add i32 [[MUL]], [[SQ_037]] 809; CHECK-NEXT: [[ARRAYIDX_1:%.*]] = getelementptr inbounds i16, i16* [[P_ADDR_035]], i64 1 810; CHECK-NEXT: [[TMP1:%.*]] = load i16, i16* [[ARRAYIDX_1]], align 2 811; CHECK-NEXT: [[CONV_1:%.*]] = zext i16 [[TMP1]] to i32 812; CHECK-NEXT: [[ADD_1:%.*]] = add i32 [[ADD]], [[CONV_1]] 813; CHECK-NEXT: [[MUL_1:%.*]] = mul nuw nsw i32 [[CONV_1]], [[CONV_1]] 814; CHECK-NEXT: [[ADD11_1:%.*]] = add i32 [[MUL_1]], [[ADD11]] 815; CHECK-NEXT: [[ARRAYIDX_2:%.*]] = getelementptr inbounds i16, i16* [[P_ADDR_035]], i64 2 816; CHECK-NEXT: [[TMP2:%.*]] = load i16, i16* [[ARRAYIDX_2]], align 2 817; CHECK-NEXT: [[CONV_2:%.*]] = zext i16 [[TMP2]] to i32 818; CHECK-NEXT: [[ADD_2:%.*]] = add i32 [[ADD_1]], [[CONV_2]] 819; CHECK-NEXT: [[MUL_2:%.*]] = mul nuw nsw i32 [[CONV_2]], [[CONV_2]] 820; CHECK-NEXT: [[ADD11_2:%.*]] = add i32 [[MUL_2]], [[ADD11_1]] 821; CHECK-NEXT: [[ARRAYIDX_3:%.*]] = getelementptr inbounds i16, i16* [[P_ADDR_035]], i64 3 822; CHECK-NEXT: [[TMP3:%.*]] = load i16, i16* [[ARRAYIDX_3]], align 2 823; CHECK-NEXT: [[CONV_3:%.*]] = zext i16 [[TMP3]] to i32 824; CHECK-NEXT: [[ADD_3:%.*]] = add i32 [[ADD_2]], [[CONV_3]] 825; CHECK-NEXT: [[MUL_3:%.*]] = mul nuw nsw i32 [[CONV_3]], [[CONV_3]] 826; CHECK-NEXT: [[ADD11_3:%.*]] = add i32 [[MUL_3]], [[ADD11_2]] 827; CHECK-NEXT: [[ARRAYIDX_4:%.*]] = getelementptr inbounds i16, i16* [[P_ADDR_035]], i64 4 828; CHECK-NEXT: [[TMP4:%.*]] = load i16, i16* [[ARRAYIDX_4]], align 2 829; CHECK-NEXT: [[CONV_4:%.*]] = zext i16 [[TMP4]] to i32 830; CHECK-NEXT: [[ADD_4:%.*]] = add i32 [[ADD_3]], [[CONV_4]] 831; CHECK-NEXT: [[MUL_4:%.*]] = mul nuw nsw i32 [[CONV_4]], [[CONV_4]] 832; CHECK-NEXT: [[ADD11_4:%.*]] = add i32 [[MUL_4]], [[ADD11_3]] 833; CHECK-NEXT: [[ARRAYIDX_5:%.*]] = getelementptr inbounds i16, i16* [[P_ADDR_035]], i64 5 834; CHECK-NEXT: [[TMP5:%.*]] = load i16, i16* [[ARRAYIDX_5]], align 2 835; CHECK-NEXT: [[CONV_5:%.*]] = zext i16 [[TMP5]] to i32 836; CHECK-NEXT: [[ADD_5:%.*]] = add i32 [[ADD_4]], [[CONV_5]] 837; CHECK-NEXT: [[MUL_5:%.*]] = mul nuw nsw i32 [[CONV_5]], [[CONV_5]] 838; CHECK-NEXT: [[ADD11_5:%.*]] = add i32 [[MUL_5]], [[ADD11_4]] 839; CHECK-NEXT: [[ARRAYIDX_6:%.*]] = getelementptr inbounds i16, i16* [[P_ADDR_035]], i64 6 840; CHECK-NEXT: [[TMP6:%.*]] = load i16, i16* [[ARRAYIDX_6]], align 2 841; CHECK-NEXT: [[CONV_6:%.*]] = zext i16 [[TMP6]] to i32 842; CHECK-NEXT: [[ADD_6:%.*]] = add i32 [[ADD_5]], [[CONV_6]] 843; CHECK-NEXT: [[MUL_6:%.*]] = mul nuw nsw i32 [[CONV_6]], [[CONV_6]] 844; CHECK-NEXT: [[ADD11_6:%.*]] = add i32 [[MUL_6]], [[ADD11_5]] 845; CHECK-NEXT: [[ARRAYIDX_7:%.*]] = getelementptr inbounds i16, i16* [[P_ADDR_035]], i64 7 846; CHECK-NEXT: [[TMP7:%.*]] = load i16, i16* [[ARRAYIDX_7]], align 2 847; CHECK-NEXT: [[CONV_7:%.*]] = zext i16 [[TMP7]] to i32 848; CHECK-NEXT: [[ADD_7:%.*]] = add i32 [[ADD_6]], [[CONV_7]] 849; CHECK-NEXT: [[MUL_7:%.*]] = mul nuw nsw i32 [[CONV_7]], [[CONV_7]] 850; CHECK-NEXT: [[ADD11_7:%.*]] = add i32 [[MUL_7]], [[ADD11_6]] 851; CHECK-NEXT: [[ARRAYIDX_8:%.*]] = getelementptr inbounds i16, i16* [[P_ADDR_035]], i64 8 852; CHECK-NEXT: [[TMP8:%.*]] = load i16, i16* [[ARRAYIDX_8]], align 2 853; CHECK-NEXT: [[CONV_8:%.*]] = zext i16 [[TMP8]] to i32 854; CHECK-NEXT: [[ADD_8:%.*]] = add i32 [[ADD_7]], [[CONV_8]] 855; CHECK-NEXT: [[MUL_8:%.*]] = mul nuw nsw i32 [[CONV_8]], [[CONV_8]] 856; CHECK-NEXT: [[ADD11_8:%.*]] = add i32 [[MUL_8]], [[ADD11_7]] 857; CHECK-NEXT: [[ARRAYIDX_9:%.*]] = getelementptr inbounds i16, i16* [[P_ADDR_035]], i64 9 858; CHECK-NEXT: [[TMP9:%.*]] = load i16, i16* [[ARRAYIDX_9]], align 2 859; CHECK-NEXT: [[CONV_9:%.*]] = zext i16 [[TMP9]] to i32 860; CHECK-NEXT: [[ADD_9:%.*]] = add i32 [[ADD_8]], [[CONV_9]] 861; CHECK-NEXT: [[MUL_9:%.*]] = mul nuw nsw i32 [[CONV_9]], [[CONV_9]] 862; CHECK-NEXT: [[ADD11_9:%.*]] = add i32 [[MUL_9]], [[ADD11_8]] 863; CHECK-NEXT: [[ARRAYIDX_10:%.*]] = getelementptr inbounds i16, i16* [[P_ADDR_035]], i64 10 864; CHECK-NEXT: [[TMP10:%.*]] = load i16, i16* [[ARRAYIDX_10]], align 2 865; CHECK-NEXT: [[CONV_10:%.*]] = zext i16 [[TMP10]] to i32 866; CHECK-NEXT: [[ADD_10:%.*]] = add i32 [[ADD_9]], [[CONV_10]] 867; CHECK-NEXT: [[MUL_10:%.*]] = mul nuw nsw i32 [[CONV_10]], [[CONV_10]] 868; CHECK-NEXT: [[ADD11_10:%.*]] = add i32 [[MUL_10]], [[ADD11_9]] 869; CHECK-NEXT: [[ARRAYIDX_11:%.*]] = getelementptr inbounds i16, i16* [[P_ADDR_035]], i64 11 870; CHECK-NEXT: [[TMP11:%.*]] = load i16, i16* [[ARRAYIDX_11]], align 2 871; CHECK-NEXT: [[CONV_11:%.*]] = zext i16 [[TMP11]] to i32 872; CHECK-NEXT: [[ADD_11:%.*]] = add i32 [[ADD_10]], [[CONV_11]] 873; CHECK-NEXT: [[MUL_11:%.*]] = mul nuw nsw i32 [[CONV_11]], [[CONV_11]] 874; CHECK-NEXT: [[ADD11_11:%.*]] = add i32 [[MUL_11]], [[ADD11_10]] 875; CHECK-NEXT: [[ARRAYIDX_12:%.*]] = getelementptr inbounds i16, i16* [[P_ADDR_035]], i64 12 876; CHECK-NEXT: [[TMP12:%.*]] = load i16, i16* [[ARRAYIDX_12]], align 2 877; CHECK-NEXT: [[CONV_12:%.*]] = zext i16 [[TMP12]] to i32 878; CHECK-NEXT: [[ADD_12:%.*]] = add i32 [[ADD_11]], [[CONV_12]] 879; CHECK-NEXT: [[MUL_12:%.*]] = mul nuw nsw i32 [[CONV_12]], [[CONV_12]] 880; CHECK-NEXT: [[ADD11_12:%.*]] = add i32 [[MUL_12]], [[ADD11_11]] 881; CHECK-NEXT: [[ARRAYIDX_13:%.*]] = getelementptr inbounds i16, i16* [[P_ADDR_035]], i64 13 882; CHECK-NEXT: [[TMP13:%.*]] = load i16, i16* [[ARRAYIDX_13]], align 2 883; CHECK-NEXT: [[CONV_13:%.*]] = zext i16 [[TMP13]] to i32 884; CHECK-NEXT: [[ADD_13:%.*]] = add i32 [[ADD_12]], [[CONV_13]] 885; CHECK-NEXT: [[MUL_13:%.*]] = mul nuw nsw i32 [[CONV_13]], [[CONV_13]] 886; CHECK-NEXT: [[ADD11_13:%.*]] = add i32 [[MUL_13]], [[ADD11_12]] 887; CHECK-NEXT: [[ARRAYIDX_14:%.*]] = getelementptr inbounds i16, i16* [[P_ADDR_035]], i64 14 888; CHECK-NEXT: [[TMP14:%.*]] = load i16, i16* [[ARRAYIDX_14]], align 2 889; CHECK-NEXT: [[CONV_14:%.*]] = zext i16 [[TMP14]] to i32 890; CHECK-NEXT: [[ADD_14:%.*]] = add i32 [[ADD_13]], [[CONV_14]] 891; CHECK-NEXT: [[MUL_14:%.*]] = mul nuw nsw i32 [[CONV_14]], [[CONV_14]] 892; CHECK-NEXT: [[ADD11_14:%.*]] = add i32 [[MUL_14]], [[ADD11_13]] 893; CHECK-NEXT: [[ARRAYIDX_15:%.*]] = getelementptr inbounds i16, i16* [[P_ADDR_035]], i64 15 894; CHECK-NEXT: [[TMP15:%.*]] = load i16, i16* [[ARRAYIDX_15]], align 2 895; CHECK-NEXT: [[CONV_15:%.*]] = zext i16 [[TMP15]] to i32 896; CHECK-NEXT: [[ADD_15]] = add i32 [[ADD_14]], [[CONV_15]] 897; CHECK-NEXT: [[MUL_15:%.*]] = mul nuw nsw i32 [[CONV_15]], [[CONV_15]] 898; CHECK-NEXT: [[ADD11_15]] = add i32 [[MUL_15]], [[ADD11_14]] 899; CHECK-NEXT: [[ADD_PTR]] = getelementptr inbounds i16, i16* [[P_ADDR_035]], i64 [[IDX_EXT]] 900; CHECK-NEXT: [[INC13]] = add nuw nsw i32 [[Y_038]], 1 901; CHECK-NEXT: [[EXITCOND_NOT:%.*]] = icmp eq i32 [[INC13]], 16 902; CHECK-NEXT: br i1 [[EXITCOND_NOT]], label [[FOR_COND_CLEANUP:%.*]], label [[FOR_COND1_PREHEADER]] 903; CHECK: for.cond.cleanup: 904; CHECK-NEXT: [[CONV15:%.*]] = zext i32 [[ADD_15]] to i64 905; CHECK-NEXT: [[CONV16:%.*]] = zext i32 [[ADD11_15]] to i64 906; CHECK-NEXT: [[SHL:%.*]] = shl nuw i64 [[CONV16]], 32 907; CHECK-NEXT: [[ADD17:%.*]] = or i64 [[SHL]], [[CONV15]] 908; CHECK-NEXT: ret i64 [[ADD17]] 909; 910entry: 911 %idx.ext = sext i32 %st to i64 912 br label %for.cond1.preheader 913 914for.cond1.preheader: ; preds = %entry, %for.cond1.preheader 915 %y.038 = phi i32 [ 0, %entry ], [ %inc13, %for.cond1.preheader ] 916 %sq.037 = phi i32 [ 0, %entry ], [ %add11.15, %for.cond1.preheader ] 917 %sm.036 = phi i32 [ 0, %entry ], [ %add.15, %for.cond1.preheader ] 918 %p.addr.035 = phi i16* [ %p, %entry ], [ %add.ptr, %for.cond1.preheader ] 919 %0 = load i16, i16* %p.addr.035, align 2 920 %conv = zext i16 %0 to i32 921 %add = add i32 %sm.036, %conv 922 %mul = mul nuw nsw i32 %conv, %conv 923 %add11 = add i32 %mul, %sq.037 924 %arrayidx.1 = getelementptr inbounds i16, i16* %p.addr.035, i64 1 925 %1 = load i16, i16* %arrayidx.1, align 2 926 %conv.1 = zext i16 %1 to i32 927 %add.1 = add i32 %add, %conv.1 928 %mul.1 = mul nuw nsw i32 %conv.1, %conv.1 929 %add11.1 = add i32 %mul.1, %add11 930 %arrayidx.2 = getelementptr inbounds i16, i16* %p.addr.035, i64 2 931 %2 = load i16, i16* %arrayidx.2, align 2 932 %conv.2 = zext i16 %2 to i32 933 %add.2 = add i32 %add.1, %conv.2 934 %mul.2 = mul nuw nsw i32 %conv.2, %conv.2 935 %add11.2 = add i32 %mul.2, %add11.1 936 %arrayidx.3 = getelementptr inbounds i16, i16* %p.addr.035, i64 3 937 %3 = load i16, i16* %arrayidx.3, align 2 938 %conv.3 = zext i16 %3 to i32 939 %add.3 = add i32 %add.2, %conv.3 940 %mul.3 = mul nuw nsw i32 %conv.3, %conv.3 941 %add11.3 = add i32 %mul.3, %add11.2 942 %arrayidx.4 = getelementptr inbounds i16, i16* %p.addr.035, i64 4 943 %4 = load i16, i16* %arrayidx.4, align 2 944 %conv.4 = zext i16 %4 to i32 945 %add.4 = add i32 %add.3, %conv.4 946 %mul.4 = mul nuw nsw i32 %conv.4, %conv.4 947 %add11.4 = add i32 %mul.4, %add11.3 948 %arrayidx.5 = getelementptr inbounds i16, i16* %p.addr.035, i64 5 949 %5 = load i16, i16* %arrayidx.5, align 2 950 %conv.5 = zext i16 %5 to i32 951 %add.5 = add i32 %add.4, %conv.5 952 %mul.5 = mul nuw nsw i32 %conv.5, %conv.5 953 %add11.5 = add i32 %mul.5, %add11.4 954 %arrayidx.6 = getelementptr inbounds i16, i16* %p.addr.035, i64 6 955 %6 = load i16, i16* %arrayidx.6, align 2 956 %conv.6 = zext i16 %6 to i32 957 %add.6 = add i32 %add.5, %conv.6 958 %mul.6 = mul nuw nsw i32 %conv.6, %conv.6 959 %add11.6 = add i32 %mul.6, %add11.5 960 %arrayidx.7 = getelementptr inbounds i16, i16* %p.addr.035, i64 7 961 %7 = load i16, i16* %arrayidx.7, align 2 962 %conv.7 = zext i16 %7 to i32 963 %add.7 = add i32 %add.6, %conv.7 964 %mul.7 = mul nuw nsw i32 %conv.7, %conv.7 965 %add11.7 = add i32 %mul.7, %add11.6 966 %arrayidx.8 = getelementptr inbounds i16, i16* %p.addr.035, i64 8 967 %8 = load i16, i16* %arrayidx.8, align 2 968 %conv.8 = zext i16 %8 to i32 969 %add.8 = add i32 %add.7, %conv.8 970 %mul.8 = mul nuw nsw i32 %conv.8, %conv.8 971 %add11.8 = add i32 %mul.8, %add11.7 972 %arrayidx.9 = getelementptr inbounds i16, i16* %p.addr.035, i64 9 973 %9 = load i16, i16* %arrayidx.9, align 2 974 %conv.9 = zext i16 %9 to i32 975 %add.9 = add i32 %add.8, %conv.9 976 %mul.9 = mul nuw nsw i32 %conv.9, %conv.9 977 %add11.9 = add i32 %mul.9, %add11.8 978 %arrayidx.10 = getelementptr inbounds i16, i16* %p.addr.035, i64 10 979 %10 = load i16, i16* %arrayidx.10, align 2 980 %conv.10 = zext i16 %10 to i32 981 %add.10 = add i32 %add.9, %conv.10 982 %mul.10 = mul nuw nsw i32 %conv.10, %conv.10 983 %add11.10 = add i32 %mul.10, %add11.9 984 %arrayidx.11 = getelementptr inbounds i16, i16* %p.addr.035, i64 11 985 %11 = load i16, i16* %arrayidx.11, align 2 986 %conv.11 = zext i16 %11 to i32 987 %add.11 = add i32 %add.10, %conv.11 988 %mul.11 = mul nuw nsw i32 %conv.11, %conv.11 989 %add11.11 = add i32 %mul.11, %add11.10 990 %arrayidx.12 = getelementptr inbounds i16, i16* %p.addr.035, i64 12 991 %12 = load i16, i16* %arrayidx.12, align 2 992 %conv.12 = zext i16 %12 to i32 993 %add.12 = add i32 %add.11, %conv.12 994 %mul.12 = mul nuw nsw i32 %conv.12, %conv.12 995 %add11.12 = add i32 %mul.12, %add11.11 996 %arrayidx.13 = getelementptr inbounds i16, i16* %p.addr.035, i64 13 997 %13 = load i16, i16* %arrayidx.13, align 2 998 %conv.13 = zext i16 %13 to i32 999 %add.13 = add i32 %add.12, %conv.13 1000 %mul.13 = mul nuw nsw i32 %conv.13, %conv.13 1001 %add11.13 = add i32 %mul.13, %add11.12 1002 %arrayidx.14 = getelementptr inbounds i16, i16* %p.addr.035, i64 14 1003 %14 = load i16, i16* %arrayidx.14, align 2 1004 %conv.14 = zext i16 %14 to i32 1005 %add.14 = add i32 %add.13, %conv.14 1006 %mul.14 = mul nuw nsw i32 %conv.14, %conv.14 1007 %add11.14 = add i32 %mul.14, %add11.13 1008 %arrayidx.15 = getelementptr inbounds i16, i16* %p.addr.035, i64 15 1009 %15 = load i16, i16* %arrayidx.15, align 2 1010 %conv.15 = zext i16 %15 to i32 1011 %add.15 = add i32 %add.14, %conv.15 1012 %mul.15 = mul nuw nsw i32 %conv.15, %conv.15 1013 %add11.15 = add i32 %mul.15, %add11.14 1014 %add.ptr = getelementptr inbounds i16, i16* %p.addr.035, i64 %idx.ext 1015 %inc13 = add nuw nsw i32 %y.038, 1 1016 %exitcond.not = icmp eq i32 %inc13, 16 1017 br i1 %exitcond.not, label %for.cond.cleanup, label %for.cond1.preheader 1018 1019for.cond.cleanup: ; preds = %for.cond1.preheader 1020 %conv15 = zext i32 %add.15 to i64 1021 %conv16 = zext i32 %add11.15 to i64 1022 %shl = shl nuw i64 %conv16, 32 1023 %add17 = or i64 %shl, %conv15 1024 ret i64 %add17 1025} 1026 1027