brintos

brintos / llvm-project-archived public Read only

0
0
Text · 58.5 KiB · 577efcb Raw
1413 lines · plain
1; NOTE: Assertions have been autogenerated by utils/update_test_checks.py2; RUN: opt -passes=slp-vectorizer -slp-threshold=-2 -S -pass-remarks-output=%t < %s | FileCheck %s3; RUN: cat %t | FileCheck -check-prefix=COST %s4 5target datalayout = "e-m:e-p270:32:32-p271:32:32-p272:64:64-i8:8:32-i16:16:32-i64:64-i128:128-n32:64-S128-Fn32"6target triple = "aarch64"7 8; COST-LABEL: Function:  sext_v4i8_i169; COST: Cost:            '-2'10define i16 @sext_v4i8_i16(ptr %x) {11; CHECK-LABEL: @sext_v4i8_i16(12; CHECK-NEXT:  entry:13; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x i8>, ptr [[X:%.*]], align 114; CHECK-NEXT:    [[TMP1:%.*]] = sext <4 x i8> [[TMP0]] to <4 x i16>15; CHECK-NEXT:    [[TMP2:%.*]] = call i16 @llvm.vector.reduce.add.v4i16(<4 x i16> [[TMP1]])16; CHECK-NEXT:    ret i16 [[TMP2]]17;18entry:19  %0 = load i8, ptr %x20  %conv = sext i8 %0 to i1621  %arrayidx.1 = getelementptr inbounds nuw i8, ptr %x, i64 122  %1 = load i8, ptr %arrayidx.123  %conv.1 = sext i8 %1 to i1624  %add.1 = add nsw i16 %conv, %conv.125  %arrayidx.2 = getelementptr inbounds nuw i8, ptr %x, i64 226  %2 = load i8, ptr %arrayidx.227  %conv.2 = sext i8 %2 to i1628  %add.2 = add nsw i16 %add.1, %conv.229  %arrayidx.3 = getelementptr inbounds nuw i8, ptr %x, i64 330  %3 = load i8, ptr %arrayidx.331  %conv.3 = sext i8 %3 to i1632  %add.3 = add nsw i16 %add.2, %conv.333  ret i16 %add.334}35 36; COST-LABEL: Function:  sext_v8i8_i1637; COST: Cost:            '-12'38define i16 @sext_v8i8_i16(ptr %x) {39; CHECK-LABEL: @sext_v8i8_i16(40; CHECK-NEXT:  entry:41; CHECK-NEXT:    [[TMP0:%.*]] = load <8 x i8>, ptr [[X:%.*]], align 142; CHECK-NEXT:    [[TMP1:%.*]] = sext <8 x i8> [[TMP0]] to <8 x i16>43; CHECK-NEXT:    [[TMP2:%.*]] = call i16 @llvm.vector.reduce.add.v8i16(<8 x i16> [[TMP1]])44; CHECK-NEXT:    ret i16 [[TMP2]]45;46entry:47  %0 = load i8, ptr %x48  %conv = sext i8 %0 to i1649  %arrayidx.1 = getelementptr inbounds nuw i8, ptr %x, i64 150  %1 = load i8, ptr %arrayidx.151  %conv.1 = sext i8 %1 to i1652  %add.1 = add nsw i16 %conv, %conv.153  %arrayidx.2 = getelementptr inbounds nuw i8, ptr %x, i64 254  %2 = load i8, ptr %arrayidx.255  %conv.2 = sext i8 %2 to i1656  %add.2 = add nsw i16 %add.1, %conv.257  %arrayidx.3 = getelementptr inbounds nuw i8, ptr %x, i64 358  %3 = load i8, ptr %arrayidx.359  %conv.3 = sext i8 %3 to i1660  %add.3 = add nsw i16 %add.2, %conv.361  %arrayidx.4 = getelementptr inbounds nuw i8, ptr %x, i64 462  %4 = load i8, ptr %arrayidx.463  %conv.4 = sext i8 %4 to i1664  %add.4 = add nsw i16 %add.3, %conv.465  %arrayidx.5 = getelementptr inbounds nuw i8, ptr %x, i64 566  %5 = load i8, ptr %arrayidx.567  %conv.5 = sext i8 %5 to i1668  %add.5 = add nsw i16 %add.4, %conv.569  %arrayidx.6 = getelementptr inbounds nuw i8, ptr %x, i64 670  %6 = load i8, ptr %arrayidx.671  %conv.6 = sext i8 %6 to i1672  %add.6 = add nsw i16 %add.5, %conv.673  %arrayidx.7 = getelementptr inbounds nuw i8, ptr %x, i64 774  %7 = load i8, ptr %arrayidx.775  %conv.7 = sext i8 %7 to i1676  %add.7 = add nsw i16 %add.6, %conv.777  ret i16 %add.778}79 80; COST-LABEL: Function:  sext_v16i8_i1681; COST: Cost:            '-28'82define i16 @sext_v16i8_i16(ptr %x) {83; CHECK-LABEL: @sext_v16i8_i16(84; CHECK-NEXT:  entry:85; CHECK-NEXT:    [[TMP0:%.*]] = load <16 x i8>, ptr [[X:%.*]], align 186; CHECK-NEXT:    [[TMP1:%.*]] = sext <16 x i8> [[TMP0]] to <16 x i16>87; CHECK-NEXT:    [[TMP2:%.*]] = call i16 @llvm.vector.reduce.add.v16i16(<16 x i16> [[TMP1]])88; CHECK-NEXT:    ret i16 [[TMP2]]89;90entry:91  %0 = load i8, ptr %x92  %conv = sext i8 %0 to i1693  %arrayidx.1 = getelementptr inbounds nuw i8, ptr %x, i64 194  %1 = load i8, ptr %arrayidx.195  %conv.1 = sext i8 %1 to i1696  %add.1 = add nsw i16 %conv, %conv.197  %arrayidx.2 = getelementptr inbounds nuw i8, ptr %x, i64 298  %2 = load i8, ptr %arrayidx.299  %conv.2 = sext i8 %2 to i16100  %add.2 = add nsw i16 %add.1, %conv.2101  %arrayidx.3 = getelementptr inbounds nuw i8, ptr %x, i64 3102  %3 = load i8, ptr %arrayidx.3103  %conv.3 = sext i8 %3 to i16104  %add.3 = add nsw i16 %add.2, %conv.3105  %arrayidx.4 = getelementptr inbounds nuw i8, ptr %x, i64 4106  %4 = load i8, ptr %arrayidx.4107  %conv.4 = sext i8 %4 to i16108  %add.4 = add nsw i16 %add.3, %conv.4109  %arrayidx.5 = getelementptr inbounds nuw i8, ptr %x, i64 5110  %5 = load i8, ptr %arrayidx.5111  %conv.5 = sext i8 %5 to i16112  %add.5 = add nsw i16 %add.4, %conv.5113  %arrayidx.6 = getelementptr inbounds nuw i8, ptr %x, i64 6114  %6 = load i8, ptr %arrayidx.6115  %conv.6 = sext i8 %6 to i16116  %add.6 = add nsw i16 %add.5, %conv.6117  %arrayidx.7 = getelementptr inbounds nuw i8, ptr %x, i64 7118  %7 = load i8, ptr %arrayidx.7119  %conv.7 = sext i8 %7 to i16120  %add.7 = add nsw i16 %add.6, %conv.7121  %arrayidx.8 = getelementptr inbounds nuw i8, ptr %x, i64 8122  %8 = load i8, ptr %arrayidx.8123  %conv.8 = sext i8 %8 to i16124  %add.8 = add nsw i16 %add.7, %conv.8125  %arrayidx.9 = getelementptr inbounds nuw i8, ptr %x, i64 9126  %9 = load i8, ptr %arrayidx.9127  %conv.9 = sext i8 %9 to i16128  %add.9 = add nsw i16 %add.8, %conv.9129  %arrayidx.10 = getelementptr inbounds nuw i8, ptr %x, i64 10130  %10 = load i8, ptr %arrayidx.10131  %conv.10 = sext i8 %10 to i16132  %add.10 = add nsw i16 %add.9, %conv.10133  %arrayidx.11 = getelementptr inbounds nuw i8, ptr %x, i64 11134  %11 = load i8, ptr %arrayidx.11135  %conv.11 = sext i8 %11 to i16136  %add.11 = add nsw i16 %add.10, %conv.11137  %arrayidx.12 = getelementptr inbounds nuw i8, ptr %x, i64 12138  %12 = load i8, ptr %arrayidx.12139  %conv.12 = sext i8 %12 to i16140  %add.12 = add nsw i16 %add.11, %conv.12141  %arrayidx.13 = getelementptr inbounds nuw i8, ptr %x, i64 13142  %13 = load i8, ptr %arrayidx.13143  %conv.13 = sext i8 %13 to i16144  %add.13 = add nsw i16 %add.12, %conv.13145  %arrayidx.14 = getelementptr inbounds nuw i8, ptr %x, i64 14146  %14 = load i8, ptr %arrayidx.14147  %conv.14 = sext i8 %14 to i16148  %add.14 = add nsw i16 %add.13, %conv.14149  %arrayidx.15 = getelementptr inbounds nuw i8, ptr %x, i64 15150  %15 = load i8, ptr %arrayidx.15151  %conv.15 = sext i8 %15 to i16152  %add.15 = add nsw i16 %add.14, %conv.15153  ret i16 %add.15154}155 156; COST-LABEL: Function:  sext_v32i8_i16157; COST: Cost:            '-57'158define i16 @sext_v32i8_i16(ptr %x) {159; CHECK-LABEL: @sext_v32i8_i16(160; CHECK-NEXT:  entry:161; CHECK-NEXT:    [[TMP0:%.*]] = load <32 x i8>, ptr [[X:%.*]], align 1162; CHECK-NEXT:    [[TMP1:%.*]] = sext <32 x i8> [[TMP0]] to <32 x i16>163; CHECK-NEXT:    [[TMP2:%.*]] = call i16 @llvm.vector.reduce.add.v32i16(<32 x i16> [[TMP1]])164; CHECK-NEXT:    ret i16 [[TMP2]]165;166entry:167  %0 = load i8, ptr %x168  %conv = sext i8 %0 to i16169  %arrayidx.1 = getelementptr inbounds nuw i8, ptr %x, i64 1170  %1 = load i8, ptr %arrayidx.1171  %conv.1 = sext i8 %1 to i16172  %add.1 = add nsw i16 %conv, %conv.1173  %arrayidx.2 = getelementptr inbounds nuw i8, ptr %x, i64 2174  %2 = load i8, ptr %arrayidx.2175  %conv.2 = sext i8 %2 to i16176  %add.2 = add nsw i16 %add.1, %conv.2177  %arrayidx.3 = getelementptr inbounds nuw i8, ptr %x, i64 3178  %3 = load i8, ptr %arrayidx.3179  %conv.3 = sext i8 %3 to i16180  %add.3 = add nsw i16 %add.2, %conv.3181  %arrayidx.4 = getelementptr inbounds nuw i8, ptr %x, i64 4182  %4 = load i8, ptr %arrayidx.4183  %conv.4 = sext i8 %4 to i16184  %add.4 = add nsw i16 %add.3, %conv.4185  %arrayidx.5 = getelementptr inbounds nuw i8, ptr %x, i64 5186  %5 = load i8, ptr %arrayidx.5187  %conv.5 = sext i8 %5 to i16188  %add.5 = add nsw i16 %add.4, %conv.5189  %arrayidx.6 = getelementptr inbounds nuw i8, ptr %x, i64 6190  %6 = load i8, ptr %arrayidx.6191  %conv.6 = sext i8 %6 to i16192  %add.6 = add nsw i16 %add.5, %conv.6193  %arrayidx.7 = getelementptr inbounds nuw i8, ptr %x, i64 7194  %7 = load i8, ptr %arrayidx.7195  %conv.7 = sext i8 %7 to i16196  %add.7 = add nsw i16 %add.6, %conv.7197  %arrayidx.8 = getelementptr inbounds nuw i8, ptr %x, i64 8198  %8 = load i8, ptr %arrayidx.8199  %conv.8 = sext i8 %8 to i16200  %add.8 = add nsw i16 %add.7, %conv.8201  %arrayidx.9 = getelementptr inbounds nuw i8, ptr %x, i64 9202  %9 = load i8, ptr %arrayidx.9203  %conv.9 = sext i8 %9 to i16204  %add.9 = add nsw i16 %add.8, %conv.9205  %arrayidx.10 = getelementptr inbounds nuw i8, ptr %x, i64 10206  %10 = load i8, ptr %arrayidx.10207  %conv.10 = sext i8 %10 to i16208  %add.10 = add nsw i16 %add.9, %conv.10209  %arrayidx.11 = getelementptr inbounds nuw i8, ptr %x, i64 11210  %11 = load i8, ptr %arrayidx.11211  %conv.11 = sext i8 %11 to i16212  %add.11 = add nsw i16 %add.10, %conv.11213  %arrayidx.12 = getelementptr inbounds nuw i8, ptr %x, i64 12214  %12 = load i8, ptr %arrayidx.12215  %conv.12 = sext i8 %12 to i16216  %add.12 = add nsw i16 %add.11, %conv.12217  %arrayidx.13 = getelementptr inbounds nuw i8, ptr %x, i64 13218  %13 = load i8, ptr %arrayidx.13219  %conv.13 = sext i8 %13 to i16220  %add.13 = add nsw i16 %add.12, %conv.13221  %arrayidx.14 = getelementptr inbounds nuw i8, ptr %x, i64 14222  %14 = load i8, ptr %arrayidx.14223  %conv.14 = sext i8 %14 to i16224  %add.14 = add nsw i16 %add.13, %conv.14225  %arrayidx.15 = getelementptr inbounds nuw i8, ptr %x, i64 15226  %15 = load i8, ptr %arrayidx.15227  %conv.15 = sext i8 %15 to i16228  %add.15 = add nsw i16 %add.14, %conv.15229  %arrayidx.16 = getelementptr inbounds nuw i8, ptr %x, i64 16230  %16 = load i8, ptr %arrayidx.16231  %conv.16 = sext i8 %16 to i16232  %add.16 = add nsw i16 %add.15, %conv.16233  %arrayidx.17 = getelementptr inbounds nuw i8, ptr %x, i64 17234  %17 = load i8, ptr %arrayidx.17235  %conv.17 = sext i8 %17 to i16236  %add.17 = add nsw i16 %add.16, %conv.17237  %arrayidx.18 = getelementptr inbounds nuw i8, ptr %x, i64 18238  %18 = load i8, ptr %arrayidx.18239  %conv.18 = sext i8 %18 to i16240  %add.18 = add nsw i16 %add.17, %conv.18241  %arrayidx.19 = getelementptr inbounds nuw i8, ptr %x, i64 19242  %19 = load i8, ptr %arrayidx.19243  %conv.19 = sext i8 %19 to i16244  %add.19 = add nsw i16 %add.18, %conv.19245  %arrayidx.20 = getelementptr inbounds nuw i8, ptr %x, i64 20246  %20 = load i8, ptr %arrayidx.20247  %conv.20 = sext i8 %20 to i16248  %add.20 = add nsw i16 %add.19, %conv.20249  %arrayidx.21 = getelementptr inbounds nuw i8, ptr %x, i64 21250  %21 = load i8, ptr %arrayidx.21251  %conv.21 = sext i8 %21 to i16252  %add.21 = add nsw i16 %add.20, %conv.21253  %arrayidx.22 = getelementptr inbounds nuw i8, ptr %x, i64 22254  %22 = load i8, ptr %arrayidx.22255  %conv.22 = sext i8 %22 to i16256  %add.22 = add nsw i16 %add.21, %conv.22257  %arrayidx.23 = getelementptr inbounds nuw i8, ptr %x, i64 23258  %23 = load i8, ptr %arrayidx.23259  %conv.23 = sext i8 %23 to i16260  %add.23 = add nsw i16 %add.22, %conv.23261  %arrayidx.24 = getelementptr inbounds nuw i8, ptr %x, i64 24262  %24 = load i8, ptr %arrayidx.24263  %conv.24 = sext i8 %24 to i16264  %add.24 = add nsw i16 %add.23, %conv.24265  %arrayidx.25 = getelementptr inbounds nuw i8, ptr %x, i64 25266  %25 = load i8, ptr %arrayidx.25267  %conv.25 = sext i8 %25 to i16268  %add.25 = add nsw i16 %add.24, %conv.25269  %arrayidx.26 = getelementptr inbounds nuw i8, ptr %x, i64 26270  %26 = load i8, ptr %arrayidx.26271  %conv.26 = sext i8 %26 to i16272  %add.26 = add nsw i16 %add.25, %conv.26273  %arrayidx.27 = getelementptr inbounds nuw i8, ptr %x, i64 27274  %27 = load i8, ptr %arrayidx.27275  %conv.27 = sext i8 %27 to i16276  %add.27 = add nsw i16 %add.26, %conv.27277  %arrayidx.28 = getelementptr inbounds nuw i8, ptr %x, i64 28278  %28 = load i8, ptr %arrayidx.28279  %conv.28 = sext i8 %28 to i16280  %add.28 = add nsw i16 %add.27, %conv.28281  %arrayidx.29 = getelementptr inbounds nuw i8, ptr %x, i64 29282  %29 = load i8, ptr %arrayidx.29283  %conv.29 = sext i8 %29 to i16284  %add.29 = add nsw i16 %add.28, %conv.29285  %arrayidx.30 = getelementptr inbounds nuw i8, ptr %x, i64 30286  %30 = load i8, ptr %arrayidx.30287  %conv.30 = sext i8 %30 to i16288  %add.30 = add nsw i16 %add.29, %conv.30289  %arrayidx.31 = getelementptr inbounds nuw i8, ptr %x, i64 31290  %31 = load i8, ptr %arrayidx.31291  %conv.31 = sext i8 %31 to i16292  %add.31 = add nsw i16 %add.30, %conv.31293  ret i16 %add.31294}295 296 297 298 299 300 301; COST-LABEL: Function:  sext_v4i16_i32302; COST: Cost:            '-4'303define i32 @sext_v4i16_i32(ptr %x) {304; CHECK-LABEL: @sext_v4i16_i32(305; CHECK-NEXT:  entry:306; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x i16>, ptr [[X:%.*]], align 2307; CHECK-NEXT:    [[TMP1:%.*]] = sext <4 x i16> [[TMP0]] to <4 x i32>308; CHECK-NEXT:    [[TMP2:%.*]] = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> [[TMP1]])309; CHECK-NEXT:    ret i32 [[TMP2]]310;311entry:312  %0 = load i16, ptr %x313  %conv = sext i16 %0 to i32314  %arrayidx.1 = getelementptr inbounds nuw i8, ptr %x, i64 2315  %1 = load i16, ptr %arrayidx.1316  %conv.1 = sext i16 %1 to i32317  %add.1 = add nsw i32 %conv, %conv.1318  %arrayidx.2 = getelementptr inbounds nuw i8, ptr %x, i64 4319  %2 = load i16, ptr %arrayidx.2320  %conv.2 = sext i16 %2 to i32321  %add.2 = add nsw i32 %add.1, %conv.2322  %arrayidx.3 = getelementptr inbounds nuw i8, ptr %x, i64 6323  %3 = load i16, ptr %arrayidx.3324  %conv.3 = sext i16 %3 to i32325  %add.3 = add nsw i32 %add.2, %conv.3326  ret i32 %add.3327}328 329; COST-LABEL: Function:  sext_v8i16_i32330; COST: Cost:            '-12'331define i32 @sext_v8i16_i32(ptr %x) {332; CHECK-LABEL: @sext_v8i16_i32(333; CHECK-NEXT:  entry:334; CHECK-NEXT:    [[TMP0:%.*]] = load <8 x i16>, ptr [[X:%.*]], align 2335; CHECK-NEXT:    [[TMP1:%.*]] = sext <8 x i16> [[TMP0]] to <8 x i32>336; CHECK-NEXT:    [[TMP2:%.*]] = call i32 @llvm.vector.reduce.add.v8i32(<8 x i32> [[TMP1]])337; CHECK-NEXT:    ret i32 [[TMP2]]338;339entry:340  %0 = load i16, ptr %x341  %conv = sext i16 %0 to i32342  %arrayidx.1 = getelementptr inbounds nuw i8, ptr %x, i64 2343  %1 = load i16, ptr %arrayidx.1344  %conv.1 = sext i16 %1 to i32345  %add.1 = add nsw i32 %conv, %conv.1346  %arrayidx.2 = getelementptr inbounds nuw i8, ptr %x, i64 4347  %2 = load i16, ptr %arrayidx.2348  %conv.2 = sext i16 %2 to i32349  %add.2 = add nsw i32 %add.1, %conv.2350  %arrayidx.3 = getelementptr inbounds nuw i8, ptr %x, i64 6351  %3 = load i16, ptr %arrayidx.3352  %conv.3 = sext i16 %3 to i32353  %add.3 = add nsw i32 %add.2, %conv.3354  %arrayidx.4 = getelementptr inbounds nuw i8, ptr %x, i64 8355  %4 = load i16, ptr %arrayidx.4356  %conv.4 = sext i16 %4 to i32357  %add.4 = add nsw i32 %add.3, %conv.4358  %arrayidx.5 = getelementptr inbounds nuw i8, ptr %x, i64 10359  %5 = load i16, ptr %arrayidx.5360  %conv.5 = sext i16 %5 to i32361  %add.5 = add nsw i32 %add.4, %conv.5362  %arrayidx.6 = getelementptr inbounds nuw i8, ptr %x, i64 12363  %6 = load i16, ptr %arrayidx.6364  %conv.6 = sext i16 %6 to i32365  %add.6 = add nsw i32 %add.5, %conv.6366  %arrayidx.7 = getelementptr inbounds nuw i8, ptr %x, i64 14367  %7 = load i16, ptr %arrayidx.7368  %conv.7 = sext i16 %7 to i32369  %add.7 = add nsw i32 %add.6, %conv.7370  ret i32 %add.7371}372 373; COST-LABEL: Function:  sext_v16i16_i32374; COST: Cost:            '-25'375define i32 @sext_v16i16_i32(ptr %x) {376; CHECK-LABEL: @sext_v16i16_i32(377; CHECK-NEXT:  entry:378; CHECK-NEXT:    [[TMP0:%.*]] = load <16 x i16>, ptr [[X:%.*]], align 2379; CHECK-NEXT:    [[TMP1:%.*]] = sext <16 x i16> [[TMP0]] to <16 x i32>380; CHECK-NEXT:    [[TMP2:%.*]] = call i32 @llvm.vector.reduce.add.v16i32(<16 x i32> [[TMP1]])381; CHECK-NEXT:    ret i32 [[TMP2]]382;383entry:384  %0 = load i16, ptr %x385  %conv = sext i16 %0 to i32386  %arrayidx.1 = getelementptr inbounds nuw i8, ptr %x, i64 2387  %1 = load i16, ptr %arrayidx.1388  %conv.1 = sext i16 %1 to i32389  %add.1 = add nsw i32 %conv, %conv.1390  %arrayidx.2 = getelementptr inbounds nuw i8, ptr %x, i64 4391  %2 = load i16, ptr %arrayidx.2392  %conv.2 = sext i16 %2 to i32393  %add.2 = add nsw i32 %add.1, %conv.2394  %arrayidx.3 = getelementptr inbounds nuw i8, ptr %x, i64 6395  %3 = load i16, ptr %arrayidx.3396  %conv.3 = sext i16 %3 to i32397  %add.3 = add nsw i32 %add.2, %conv.3398  %arrayidx.4 = getelementptr inbounds nuw i8, ptr %x, i64 8399  %4 = load i16, ptr %arrayidx.4400  %conv.4 = sext i16 %4 to i32401  %add.4 = add nsw i32 %add.3, %conv.4402  %arrayidx.5 = getelementptr inbounds nuw i8, ptr %x, i64 10403  %5 = load i16, ptr %arrayidx.5404  %conv.5 = sext i16 %5 to i32405  %add.5 = add nsw i32 %add.4, %conv.5406  %arrayidx.6 = getelementptr inbounds nuw i8, ptr %x, i64 12407  %6 = load i16, ptr %arrayidx.6408  %conv.6 = sext i16 %6 to i32409  %add.6 = add nsw i32 %add.5, %conv.6410  %arrayidx.7 = getelementptr inbounds nuw i8, ptr %x, i64 14411  %7 = load i16, ptr %arrayidx.7412  %conv.7 = sext i16 %7 to i32413  %add.7 = add nsw i32 %add.6, %conv.7414  %arrayidx.8 = getelementptr inbounds nuw i8, ptr %x, i64 16415  %8 = load i16, ptr %arrayidx.8416  %conv.8 = sext i16 %8 to i32417  %add.8 = add nsw i32 %add.7, %conv.8418  %arrayidx.9 = getelementptr inbounds nuw i8, ptr %x, i64 18419  %9 = load i16, ptr %arrayidx.9420  %conv.9 = sext i16 %9 to i32421  %add.9 = add nsw i32 %add.8, %conv.9422  %arrayidx.10 = getelementptr inbounds nuw i8, ptr %x, i64 20423  %10 = load i16, ptr %arrayidx.10424  %conv.10 = sext i16 %10 to i32425  %add.10 = add nsw i32 %add.9, %conv.10426  %arrayidx.11 = getelementptr inbounds nuw i8, ptr %x, i64 22427  %11 = load i16, ptr %arrayidx.11428  %conv.11 = sext i16 %11 to i32429  %add.11 = add nsw i32 %add.10, %conv.11430  %arrayidx.12 = getelementptr inbounds nuw i8, ptr %x, i64 24431  %12 = load i16, ptr %arrayidx.12432  %conv.12 = sext i16 %12 to i32433  %add.12 = add nsw i32 %add.11, %conv.12434  %arrayidx.13 = getelementptr inbounds nuw i8, ptr %x, i64 26435  %13 = load i16, ptr %arrayidx.13436  %conv.13 = sext i16 %13 to i32437  %add.13 = add nsw i32 %add.12, %conv.13438  %arrayidx.14 = getelementptr inbounds nuw i8, ptr %x, i64 28439  %14 = load i16, ptr %arrayidx.14440  %conv.14 = sext i16 %14 to i32441  %add.14 = add nsw i32 %add.13, %conv.14442  %arrayidx.15 = getelementptr inbounds nuw i8, ptr %x, i64 30443  %15 = load i16, ptr %arrayidx.15444  %conv.15 = sext i16 %15 to i32445  %add.15 = add nsw i32 %add.14, %conv.15446  ret i32 %add.15447}448 449; COST-LABEL: Function:  sext_v32i16_i32450; COST: Cost:            '-51'451define i32 @sext_v32i16_i32(ptr %x) {452; CHECK-LABEL: @sext_v32i16_i32(453; CHECK-NEXT:  entry:454; CHECK-NEXT:    [[TMP0:%.*]] = load <32 x i16>, ptr [[X:%.*]], align 2455; CHECK-NEXT:    [[TMP1:%.*]] = sext <32 x i16> [[TMP0]] to <32 x i32>456; CHECK-NEXT:    [[TMP2:%.*]] = call i32 @llvm.vector.reduce.add.v32i32(<32 x i32> [[TMP1]])457; CHECK-NEXT:    ret i32 [[TMP2]]458;459entry:460  %0 = load i16, ptr %x461  %conv = sext i16 %0 to i32462  %arrayidx.1 = getelementptr inbounds nuw i8, ptr %x, i64 2463  %1 = load i16, ptr %arrayidx.1464  %conv.1 = sext i16 %1 to i32465  %add.1 = add nsw i32 %conv, %conv.1466  %arrayidx.2 = getelementptr inbounds nuw i8, ptr %x, i64 4467  %2 = load i16, ptr %arrayidx.2468  %conv.2 = sext i16 %2 to i32469  %add.2 = add nsw i32 %add.1, %conv.2470  %arrayidx.3 = getelementptr inbounds nuw i8, ptr %x, i64 6471  %3 = load i16, ptr %arrayidx.3472  %conv.3 = sext i16 %3 to i32473  %add.3 = add nsw i32 %add.2, %conv.3474  %arrayidx.4 = getelementptr inbounds nuw i8, ptr %x, i64 8475  %4 = load i16, ptr %arrayidx.4476  %conv.4 = sext i16 %4 to i32477  %add.4 = add nsw i32 %add.3, %conv.4478  %arrayidx.5 = getelementptr inbounds nuw i8, ptr %x, i64 10479  %5 = load i16, ptr %arrayidx.5480  %conv.5 = sext i16 %5 to i32481  %add.5 = add nsw i32 %add.4, %conv.5482  %arrayidx.6 = getelementptr inbounds nuw i8, ptr %x, i64 12483  %6 = load i16, ptr %arrayidx.6484  %conv.6 = sext i16 %6 to i32485  %add.6 = add nsw i32 %add.5, %conv.6486  %arrayidx.7 = getelementptr inbounds nuw i8, ptr %x, i64 14487  %7 = load i16, ptr %arrayidx.7488  %conv.7 = sext i16 %7 to i32489  %add.7 = add nsw i32 %add.6, %conv.7490  %arrayidx.8 = getelementptr inbounds nuw i8, ptr %x, i64 16491  %8 = load i16, ptr %arrayidx.8492  %conv.8 = sext i16 %8 to i32493  %add.8 = add nsw i32 %add.7, %conv.8494  %arrayidx.9 = getelementptr inbounds nuw i8, ptr %x, i64 18495  %9 = load i16, ptr %arrayidx.9496  %conv.9 = sext i16 %9 to i32497  %add.9 = add nsw i32 %add.8, %conv.9498  %arrayidx.10 = getelementptr inbounds nuw i8, ptr %x, i64 20499  %10 = load i16, ptr %arrayidx.10500  %conv.10 = sext i16 %10 to i32501  %add.10 = add nsw i32 %add.9, %conv.10502  %arrayidx.11 = getelementptr inbounds nuw i8, ptr %x, i64 22503  %11 = load i16, ptr %arrayidx.11504  %conv.11 = sext i16 %11 to i32505  %add.11 = add nsw i32 %add.10, %conv.11506  %arrayidx.12 = getelementptr inbounds nuw i8, ptr %x, i64 24507  %12 = load i16, ptr %arrayidx.12508  %conv.12 = sext i16 %12 to i32509  %add.12 = add nsw i32 %add.11, %conv.12510  %arrayidx.13 = getelementptr inbounds nuw i8, ptr %x, i64 26511  %13 = load i16, ptr %arrayidx.13512  %conv.13 = sext i16 %13 to i32513  %add.13 = add nsw i32 %add.12, %conv.13514  %arrayidx.14 = getelementptr inbounds nuw i8, ptr %x, i64 28515  %14 = load i16, ptr %arrayidx.14516  %conv.14 = sext i16 %14 to i32517  %add.14 = add nsw i32 %add.13, %conv.14518  %arrayidx.15 = getelementptr inbounds nuw i8, ptr %x, i64 30519  %15 = load i16, ptr %arrayidx.15520  %conv.15 = sext i16 %15 to i32521  %add.15 = add nsw i32 %add.14, %conv.15522  %arrayidx.16 = getelementptr inbounds nuw i8, ptr %x, i64 32523  %16 = load i16, ptr %arrayidx.16524  %conv.16 = sext i16 %16 to i32525  %add.16 = add nsw i32 %add.15, %conv.16526  %arrayidx.17 = getelementptr inbounds nuw i8, ptr %x, i64 34527  %17 = load i16, ptr %arrayidx.17528  %conv.17 = sext i16 %17 to i32529  %add.17 = add nsw i32 %add.16, %conv.17530  %arrayidx.18 = getelementptr inbounds nuw i8, ptr %x, i64 36531  %18 = load i16, ptr %arrayidx.18532  %conv.18 = sext i16 %18 to i32533  %add.18 = add nsw i32 %add.17, %conv.18534  %arrayidx.19 = getelementptr inbounds nuw i8, ptr %x, i64 38535  %19 = load i16, ptr %arrayidx.19536  %conv.19 = sext i16 %19 to i32537  %add.19 = add nsw i32 %add.18, %conv.19538  %arrayidx.20 = getelementptr inbounds nuw i8, ptr %x, i64 40539  %20 = load i16, ptr %arrayidx.20540  %conv.20 = sext i16 %20 to i32541  %add.20 = add nsw i32 %add.19, %conv.20542  %arrayidx.21 = getelementptr inbounds nuw i8, ptr %x, i64 42543  %21 = load i16, ptr %arrayidx.21544  %conv.21 = sext i16 %21 to i32545  %add.21 = add nsw i32 %add.20, %conv.21546  %arrayidx.22 = getelementptr inbounds nuw i8, ptr %x, i64 44547  %22 = load i16, ptr %arrayidx.22548  %conv.22 = sext i16 %22 to i32549  %add.22 = add nsw i32 %add.21, %conv.22550  %arrayidx.23 = getelementptr inbounds nuw i8, ptr %x, i64 46551  %23 = load i16, ptr %arrayidx.23552  %conv.23 = sext i16 %23 to i32553  %add.23 = add nsw i32 %add.22, %conv.23554  %arrayidx.24 = getelementptr inbounds nuw i8, ptr %x, i64 48555  %24 = load i16, ptr %arrayidx.24556  %conv.24 = sext i16 %24 to i32557  %add.24 = add nsw i32 %add.23, %conv.24558  %arrayidx.25 = getelementptr inbounds nuw i8, ptr %x, i64 50559  %25 = load i16, ptr %arrayidx.25560  %conv.25 = sext i16 %25 to i32561  %add.25 = add nsw i32 %add.24, %conv.25562  %arrayidx.26 = getelementptr inbounds nuw i8, ptr %x, i64 52563  %26 = load i16, ptr %arrayidx.26564  %conv.26 = sext i16 %26 to i32565  %add.26 = add nsw i32 %add.25, %conv.26566  %arrayidx.27 = getelementptr inbounds nuw i8, ptr %x, i64 54567  %27 = load i16, ptr %arrayidx.27568  %conv.27 = sext i16 %27 to i32569  %add.27 = add nsw i32 %add.26, %conv.27570  %arrayidx.28 = getelementptr inbounds nuw i8, ptr %x, i64 56571  %28 = load i16, ptr %arrayidx.28572  %conv.28 = sext i16 %28 to i32573  %add.28 = add nsw i32 %add.27, %conv.28574  %arrayidx.29 = getelementptr inbounds nuw i8, ptr %x, i64 58575  %29 = load i16, ptr %arrayidx.29576  %conv.29 = sext i16 %29 to i32577  %add.29 = add nsw i32 %add.28, %conv.29578  %arrayidx.30 = getelementptr inbounds nuw i8, ptr %x, i64 60579  %30 = load i16, ptr %arrayidx.30580  %conv.30 = sext i16 %30 to i32581  %add.30 = add nsw i32 %add.29, %conv.30582  %arrayidx.31 = getelementptr inbounds nuw i8, ptr %x, i64 62583  %31 = load i16, ptr %arrayidx.31584  %conv.31 = sext i16 %31 to i32585  %add.31 = add nsw i32 %add.30, %conv.31586  ret i32 %add.31587}588 589 590 591 592 593 594 595; COST-LABEL: Function:  sext_v4i32_i64596; COST: Cost:            '-4'597define i64 @sext_v4i32_i64(ptr %x) {598; CHECK-LABEL: @sext_v4i32_i64(599; CHECK-NEXT:  entry:600; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x i32>, ptr [[X:%.*]], align 4601; CHECK-NEXT:    [[TMP1:%.*]] = sext <4 x i32> [[TMP0]] to <4 x i64>602; CHECK-NEXT:    [[TMP2:%.*]] = call i64 @llvm.vector.reduce.add.v4i64(<4 x i64> [[TMP1]])603; CHECK-NEXT:    ret i64 [[TMP2]]604;605entry:606  %0 = load i32, ptr %x607  %conv = sext i32 %0 to i64608  %arrayidx.1 = getelementptr inbounds nuw i32, ptr %x, i64 1609  %1 = load i32, ptr %arrayidx.1610  %conv.1 = sext i32 %1 to i64611  %add.1 = add nsw i64 %conv, %conv.1612  %arrayidx.2 = getelementptr inbounds nuw i32, ptr %x, i64 2613  %2 = load i32, ptr %arrayidx.2614  %conv.2 = sext i32 %2 to i64615  %add.2 = add nsw i64 %add.1, %conv.2616  %arrayidx.3 = getelementptr inbounds nuw i32, ptr %x, i64 3617  %3 = load i32, ptr %arrayidx.3618  %conv.3 = sext i32 %3 to i64619  %add.3 = add nsw i64 %add.2, %conv.3620  ret i64 %add.3621}622 623; COST-LABEL: Function:  sext_v8i32_i64624; COST: Cost:            '-9'625define i64 @sext_v8i32_i64(ptr %x) {626; CHECK-LABEL: @sext_v8i32_i64(627; CHECK-NEXT:  entry:628; CHECK-NEXT:    [[TMP0:%.*]] = load <8 x i32>, ptr [[X:%.*]], align 4629; CHECK-NEXT:    [[TMP1:%.*]] = sext <8 x i32> [[TMP0]] to <8 x i64>630; CHECK-NEXT:    [[TMP2:%.*]] = call i64 @llvm.vector.reduce.add.v8i64(<8 x i64> [[TMP1]])631; CHECK-NEXT:    ret i64 [[TMP2]]632;633entry:634  %0 = load i32, ptr %x635  %conv = sext i32 %0 to i64636  %arrayidx.1 = getelementptr inbounds nuw i32, ptr %x, i64 1637  %1 = load i32, ptr %arrayidx.1638  %conv.1 = sext i32 %1 to i64639  %add.1 = add nsw i64 %conv, %conv.1640  %arrayidx.2 = getelementptr inbounds nuw i32, ptr %x, i64 2641  %2 = load i32, ptr %arrayidx.2642  %conv.2 = sext i32 %2 to i64643  %add.2 = add nsw i64 %add.1, %conv.2644  %arrayidx.3 = getelementptr inbounds nuw i32, ptr %x, i64 3645  %3 = load i32, ptr %arrayidx.3646  %conv.3 = sext i32 %3 to i64647  %add.3 = add nsw i64 %add.2, %conv.3648  %arrayidx.4 = getelementptr inbounds nuw i32, ptr %x, i64 4649  %4 = load i32, ptr %arrayidx.4650  %conv.4 = sext i32 %4 to i64651  %add.4 = add nsw i64 %add.3, %conv.4652  %arrayidx.5 = getelementptr inbounds nuw i32, ptr %x, i64 5653  %5 = load i32, ptr %arrayidx.5654  %conv.5 = sext i32 %5 to i64655  %add.5 = add nsw i64 %add.4, %conv.5656  %arrayidx.6 = getelementptr inbounds nuw i32, ptr %x, i64 6657  %6 = load i32, ptr %arrayidx.6658  %conv.6 = sext i32 %6 to i64659  %add.6 = add nsw i64 %add.5, %conv.6660  %arrayidx.7 = getelementptr inbounds nuw i32, ptr %x, i64 7661  %7 = load i32, ptr %arrayidx.7662  %conv.7 = sext i32 %7 to i64663  %add.7 = add nsw i64 %add.6, %conv.7664  ret i64 %add.7665}666 667; COST-LABEL: Function:  sext_v16i32_i64668; COST: Cost:            '-19'669define i64 @sext_v16i32_i64(ptr %x) {670; CHECK-LABEL: @sext_v16i32_i64(671; CHECK-NEXT:  entry:672; CHECK-NEXT:    [[TMP0:%.*]] = load <16 x i32>, ptr [[X:%.*]], align 4673; CHECK-NEXT:    [[TMP1:%.*]] = sext <16 x i32> [[TMP0]] to <16 x i64>674; CHECK-NEXT:    [[TMP2:%.*]] = call i64 @llvm.vector.reduce.add.v16i64(<16 x i64> [[TMP1]])675; CHECK-NEXT:    ret i64 [[TMP2]]676;677entry:678  %0 = load i32, ptr %x679  %conv = sext i32 %0 to i64680  %arrayidx.1 = getelementptr inbounds nuw i32, ptr %x, i64 1681  %1 = load i32, ptr %arrayidx.1682  %conv.1 = sext i32 %1 to i64683  %add.1 = add nsw i64 %conv, %conv.1684  %arrayidx.2 = getelementptr inbounds nuw i32, ptr %x, i64 2685  %2 = load i32, ptr %arrayidx.2686  %conv.2 = sext i32 %2 to i64687  %add.2 = add nsw i64 %add.1, %conv.2688  %arrayidx.3 = getelementptr inbounds nuw i32, ptr %x, i64 3689  %3 = load i32, ptr %arrayidx.3690  %conv.3 = sext i32 %3 to i64691  %add.3 = add nsw i64 %add.2, %conv.3692  %arrayidx.4 = getelementptr inbounds nuw i32, ptr %x, i64 4693  %4 = load i32, ptr %arrayidx.4694  %conv.4 = sext i32 %4 to i64695  %add.4 = add nsw i64 %add.3, %conv.4696  %arrayidx.5 = getelementptr inbounds nuw i32, ptr %x, i64 5697  %5 = load i32, ptr %arrayidx.5698  %conv.5 = sext i32 %5 to i64699  %add.5 = add nsw i64 %add.4, %conv.5700  %arrayidx.6 = getelementptr inbounds nuw i32, ptr %x, i64 6701  %6 = load i32, ptr %arrayidx.6702  %conv.6 = sext i32 %6 to i64703  %add.6 = add nsw i64 %add.5, %conv.6704  %arrayidx.7 = getelementptr inbounds nuw i32, ptr %x, i64 7705  %7 = load i32, ptr %arrayidx.7706  %conv.7 = sext i32 %7 to i64707  %add.7 = add nsw i64 %add.6, %conv.7708  %arrayidx.8 = getelementptr inbounds nuw i32, ptr %x, i64 8709  %8 = load i32, ptr %arrayidx.8710  %conv.8 = sext i32 %8 to i64711  %add.8 = add nsw i64 %add.7, %conv.8712  %arrayidx.9 = getelementptr inbounds nuw i32, ptr %x, i64 9713  %9 = load i32, ptr %arrayidx.9714  %conv.9 = sext i32 %9 to i64715  %add.9 = add nsw i64 %add.8, %conv.9716  %arrayidx.10 = getelementptr inbounds nuw i32, ptr %x, i64 10717  %10 = load i32, ptr %arrayidx.10718  %conv.10 = sext i32 %10 to i64719  %add.10 = add nsw i64 %add.9, %conv.10720  %arrayidx.11 = getelementptr inbounds nuw i32, ptr %x, i64 11721  %11 = load i32, ptr %arrayidx.11722  %conv.11 = sext i32 %11 to i64723  %add.11 = add nsw i64 %add.10, %conv.11724  %arrayidx.12 = getelementptr inbounds nuw i32, ptr %x, i64 12725  %12 = load i32, ptr %arrayidx.12726  %conv.12 = sext i32 %12 to i64727  %add.12 = add nsw i64 %add.11, %conv.12728  %arrayidx.13 = getelementptr inbounds nuw i32, ptr %x, i64 13729  %13 = load i32, ptr %arrayidx.13730  %conv.13 = sext i32 %13 to i64731  %add.13 = add nsw i64 %add.12, %conv.13732  %arrayidx.14 = getelementptr inbounds nuw i32, ptr %x, i64 14733  %14 = load i32, ptr %arrayidx.14734  %conv.14 = sext i32 %14 to i64735  %add.14 = add nsw i64 %add.13, %conv.14736  %arrayidx.15 = getelementptr inbounds nuw i32, ptr %x, i64 15737  %15 = load i32, ptr %arrayidx.15738  %conv.15 = sext i32 %15 to i64739  %add.15 = add nsw i64 %add.14, %conv.15740  ret i64 %add.15741}742 743; COST-LABEL: Function:  sext_v32i32_i64744; COST: Cost:            '-39'745define i64 @sext_v32i32_i64(ptr %x) {746; CHECK-LABEL: @sext_v32i32_i64(747; CHECK-NEXT:  entry:748; CHECK-NEXT:    [[TMP0:%.*]] = load <32 x i32>, ptr [[X:%.*]], align 4749; CHECK-NEXT:    [[TMP1:%.*]] = sext <32 x i32> [[TMP0]] to <32 x i64>750; CHECK-NEXT:    [[TMP2:%.*]] = call i64 @llvm.vector.reduce.add.v32i64(<32 x i64> [[TMP1]])751; CHECK-NEXT:    ret i64 [[TMP2]]752;753entry:754  %0 = load i32, ptr %x755  %conv = sext i32 %0 to i64756  %arrayidx.1 = getelementptr inbounds nuw i32, ptr %x, i64 1757  %1 = load i32, ptr %arrayidx.1758  %conv.1 = sext i32 %1 to i64759  %add.1 = add nsw i64 %conv, %conv.1760  %arrayidx.2 = getelementptr inbounds nuw i32, ptr %x, i64 2761  %2 = load i32, ptr %arrayidx.2762  %conv.2 = sext i32 %2 to i64763  %add.2 = add nsw i64 %add.1, %conv.2764  %arrayidx.3 = getelementptr inbounds nuw i32, ptr %x, i64 3765  %3 = load i32, ptr %arrayidx.3766  %conv.3 = sext i32 %3 to i64767  %add.3 = add nsw i64 %add.2, %conv.3768  %arrayidx.4 = getelementptr inbounds nuw i32, ptr %x, i64 4769  %4 = load i32, ptr %arrayidx.4770  %conv.4 = sext i32 %4 to i64771  %add.4 = add nsw i64 %add.3, %conv.4772  %arrayidx.5 = getelementptr inbounds nuw i32, ptr %x, i64 5773  %5 = load i32, ptr %arrayidx.5774  %conv.5 = sext i32 %5 to i64775  %add.5 = add nsw i64 %add.4, %conv.5776  %arrayidx.6 = getelementptr inbounds nuw i32, ptr %x, i64 6777  %6 = load i32, ptr %arrayidx.6778  %conv.6 = sext i32 %6 to i64779  %add.6 = add nsw i64 %add.5, %conv.6780  %arrayidx.7 = getelementptr inbounds nuw i32, ptr %x, i64 7781  %7 = load i32, ptr %arrayidx.7782  %conv.7 = sext i32 %7 to i64783  %add.7 = add nsw i64 %add.6, %conv.7784  %arrayidx.8 = getelementptr inbounds nuw i32, ptr %x, i64 8785  %8 = load i32, ptr %arrayidx.8786  %conv.8 = sext i32 %8 to i64787  %add.8 = add nsw i64 %add.7, %conv.8788  %arrayidx.9 = getelementptr inbounds nuw i32, ptr %x, i64 9789  %9 = load i32, ptr %arrayidx.9790  %conv.9 = sext i32 %9 to i64791  %add.9 = add nsw i64 %add.8, %conv.9792  %arrayidx.10 = getelementptr inbounds nuw i32, ptr %x, i64 10793  %10 = load i32, ptr %arrayidx.10794  %conv.10 = sext i32 %10 to i64795  %add.10 = add nsw i64 %add.9, %conv.10796  %arrayidx.11 = getelementptr inbounds nuw i32, ptr %x, i64 11797  %11 = load i32, ptr %arrayidx.11798  %conv.11 = sext i32 %11 to i64799  %add.11 = add nsw i64 %add.10, %conv.11800  %arrayidx.12 = getelementptr inbounds nuw i32, ptr %x, i64 12801  %12 = load i32, ptr %arrayidx.12802  %conv.12 = sext i32 %12 to i64803  %add.12 = add nsw i64 %add.11, %conv.12804  %arrayidx.13 = getelementptr inbounds nuw i32, ptr %x, i64 13805  %13 = load i32, ptr %arrayidx.13806  %conv.13 = sext i32 %13 to i64807  %add.13 = add nsw i64 %add.12, %conv.13808  %arrayidx.14 = getelementptr inbounds nuw i32, ptr %x, i64 14809  %14 = load i32, ptr %arrayidx.14810  %conv.14 = sext i32 %14 to i64811  %add.14 = add nsw i64 %add.13, %conv.14812  %arrayidx.15 = getelementptr inbounds nuw i32, ptr %x, i64 15813  %15 = load i32, ptr %arrayidx.15814  %conv.15 = sext i32 %15 to i64815  %add.15 = add nsw i64 %add.14, %conv.15816  %arrayidx.16 = getelementptr inbounds nuw i32, ptr %x, i64 16817  %16 = load i32, ptr %arrayidx.16818  %conv.16 = sext i32 %16 to i64819  %add.16 = add nsw i64 %add.15, %conv.16820  %arrayidx.17 = getelementptr inbounds nuw i32, ptr %x, i64 17821  %17 = load i32, ptr %arrayidx.17822  %conv.17 = sext i32 %17 to i64823  %add.17 = add nsw i64 %add.16, %conv.17824  %arrayidx.18 = getelementptr inbounds nuw i32, ptr %x, i64 18825  %18 = load i32, ptr %arrayidx.18826  %conv.18 = sext i32 %18 to i64827  %add.18 = add nsw i64 %add.17, %conv.18828  %arrayidx.19 = getelementptr inbounds nuw i32, ptr %x, i64 19829  %19 = load i32, ptr %arrayidx.19830  %conv.19 = sext i32 %19 to i64831  %add.19 = add nsw i64 %add.18, %conv.19832  %arrayidx.20 = getelementptr inbounds nuw i32, ptr %x, i64 20833  %20 = load i32, ptr %arrayidx.20834  %conv.20 = sext i32 %20 to i64835  %add.20 = add nsw i64 %add.19, %conv.20836  %arrayidx.21 = getelementptr inbounds nuw i32, ptr %x, i64 21837  %21 = load i32, ptr %arrayidx.21838  %conv.21 = sext i32 %21 to i64839  %add.21 = add nsw i64 %add.20, %conv.21840  %arrayidx.22 = getelementptr inbounds nuw i32, ptr %x, i64 22841  %22 = load i32, ptr %arrayidx.22842  %conv.22 = sext i32 %22 to i64843  %add.22 = add nsw i64 %add.21, %conv.22844  %arrayidx.23 = getelementptr inbounds nuw i32, ptr %x, i64 23845  %23 = load i32, ptr %arrayidx.23846  %conv.23 = sext i32 %23 to i64847  %add.23 = add nsw i64 %add.22, %conv.23848  %arrayidx.24 = getelementptr inbounds nuw i32, ptr %x, i64 24849  %24 = load i32, ptr %arrayidx.24850  %conv.24 = sext i32 %24 to i64851  %add.24 = add nsw i64 %add.23, %conv.24852  %arrayidx.25 = getelementptr inbounds nuw i32, ptr %x, i64 25853  %25 = load i32, ptr %arrayidx.25854  %conv.25 = sext i32 %25 to i64855  %add.25 = add nsw i64 %add.24, %conv.25856  %arrayidx.26 = getelementptr inbounds nuw i32, ptr %x, i64 26857  %26 = load i32, ptr %arrayidx.26858  %conv.26 = sext i32 %26 to i64859  %add.26 = add nsw i64 %add.25, %conv.26860  %arrayidx.27 = getelementptr inbounds nuw i32, ptr %x, i64 27861  %27 = load i32, ptr %arrayidx.27862  %conv.27 = sext i32 %27 to i64863  %add.27 = add nsw i64 %add.26, %conv.27864  %arrayidx.28 = getelementptr inbounds nuw i32, ptr %x, i64 28865  %28 = load i32, ptr %arrayidx.28866  %conv.28 = sext i32 %28 to i64867  %add.28 = add nsw i64 %add.27, %conv.28868  %arrayidx.29 = getelementptr inbounds nuw i32, ptr %x, i64 29869  %29 = load i32, ptr %arrayidx.29870  %conv.29 = sext i32 %29 to i64871  %add.29 = add nsw i64 %add.28, %conv.29872  %arrayidx.30 = getelementptr inbounds nuw i32, ptr %x, i64 30873  %30 = load i32, ptr %arrayidx.30874  %conv.30 = sext i32 %30 to i64875  %add.30 = add nsw i64 %add.29, %conv.30876  %arrayidx.31 = getelementptr inbounds nuw i32, ptr %x, i64 31877  %31 = load i32, ptr %arrayidx.31878  %conv.31 = sext i32 %31 to i64879  %add.31 = add nsw i64 %add.30, %conv.31880  ret i64 %add.31881}882 883 884 885; COST-LABEL: Function:  mla_v4i8_i32886; COST: Cost:            '-6'887define i32 @mla_v4i8_i32(ptr %x, ptr %y) "target-features"="+dotprod" {888; CHECK-LABEL: @mla_v4i8_i32(889; CHECK-NEXT:  entry:890; CHECK-NEXT:    [[TMP0:%.*]] = load <4 x i8>, ptr [[X:%.*]], align 1891; CHECK-NEXT:    [[TMP1:%.*]] = sext <4 x i8> [[TMP0]] to <4 x i32>892; CHECK-NEXT:    [[TMP2:%.*]] = load <4 x i8>, ptr [[Y:%.*]], align 1893; CHECK-NEXT:    [[TMP3:%.*]] = sext <4 x i8> [[TMP2]] to <4 x i32>894; CHECK-NEXT:    [[TMP4:%.*]] = mul nsw <4 x i32> [[TMP3]], [[TMP1]]895; CHECK-NEXT:    [[TMP5:%.*]] = call i32 @llvm.vector.reduce.add.v4i32(<4 x i32> [[TMP4]])896; CHECK-NEXT:    ret i32 [[TMP5]]897;898entry:899  %0 = load i8, ptr %x900  %conv = sext i8 %0 to i32901  %1 = load i8, ptr %y902  %conv3 = sext i8 %1 to i32903  %mul = mul nsw i32 %conv3, %conv904  %arrayidx.1 = getelementptr inbounds nuw i8, ptr %x, i64 1905  %2 = load i8, ptr %arrayidx.1906  %conv.1 = sext i8 %2 to i32907  %arrayidx2.1 = getelementptr inbounds nuw i8, ptr %y, i64 1908  %3 = load i8, ptr %arrayidx2.1909  %conv3.1 = sext i8 %3 to i32910  %mul.1 = mul nsw i32 %conv3.1, %conv.1911  %add.1 = add nsw i32 %mul.1, %mul912  %arrayidx.2 = getelementptr inbounds nuw i8, ptr %x, i64 2913  %4 = load i8, ptr %arrayidx.2914  %conv.2 = sext i8 %4 to i32915  %arrayidx2.2 = getelementptr inbounds nuw i8, ptr %y, i64 2916  %5 = load i8, ptr %arrayidx2.2917  %conv3.2 = sext i8 %5 to i32918  %mul.2 = mul nsw i32 %conv3.2, %conv.2919  %add.2 = add nsw i32 %mul.2, %add.1920  %arrayidx.3 = getelementptr inbounds nuw i8, ptr %x, i64 3921  %6 = load i8, ptr %arrayidx.3922  %conv.3 = sext i8 %6 to i32923  %arrayidx2.3 = getelementptr inbounds nuw i8, ptr %y, i64 3924  %7 = load i8, ptr %arrayidx2.3925  %conv3.3 = sext i8 %7 to i32926  %mul.3 = mul nsw i32 %conv3.3, %conv.3927  %add.3 = add nsw i32 %mul.3, %add.2928  ret i32 %add.3929}930 931 932; COST-LABEL: Function:  mla_v8i8_i32933; COST: Cost:            '-24'934define i32 @mla_v8i8_i32(ptr %x, ptr %y) "target-features"="+dotprod" {935; CHECK-LABEL: @mla_v8i8_i32(936; CHECK-NEXT:  entry:937; CHECK-NEXT:    [[TMP0:%.*]] = load <8 x i8>, ptr [[X:%.*]], align 1938; CHECK-NEXT:    [[TMP1:%.*]] = sext <8 x i8> [[TMP0]] to <8 x i32>939; CHECK-NEXT:    [[TMP2:%.*]] = load <8 x i8>, ptr [[Y:%.*]], align 1940; CHECK-NEXT:    [[TMP3:%.*]] = sext <8 x i8> [[TMP2]] to <8 x i32>941; CHECK-NEXT:    [[TMP4:%.*]] = mul nsw <8 x i32> [[TMP3]], [[TMP1]]942; CHECK-NEXT:    [[TMP5:%.*]] = call i32 @llvm.vector.reduce.add.v8i32(<8 x i32> [[TMP4]])943; CHECK-NEXT:    ret i32 [[TMP5]]944;945entry:946  %0 = load i8, ptr %x947  %conv = sext i8 %0 to i32948  %1 = load i8, ptr %y949  %conv3 = sext i8 %1 to i32950  %mul = mul nsw i32 %conv3, %conv951  %arrayidx.1 = getelementptr inbounds nuw i8, ptr %x, i64 1952  %2 = load i8, ptr %arrayidx.1953  %conv.1 = sext i8 %2 to i32954  %arrayidx2.1 = getelementptr inbounds nuw i8, ptr %y, i64 1955  %3 = load i8, ptr %arrayidx2.1956  %conv3.1 = sext i8 %3 to i32957  %mul.1 = mul nsw i32 %conv3.1, %conv.1958  %add.1 = add nsw i32 %mul.1, %mul959  %arrayidx.2 = getelementptr inbounds nuw i8, ptr %x, i64 2960  %4 = load i8, ptr %arrayidx.2961  %conv.2 = sext i8 %4 to i32962  %arrayidx2.2 = getelementptr inbounds nuw i8, ptr %y, i64 2963  %5 = load i8, ptr %arrayidx2.2964  %conv3.2 = sext i8 %5 to i32965  %mul.2 = mul nsw i32 %conv3.2, %conv.2966  %add.2 = add nsw i32 %mul.2, %add.1967  %arrayidx.3 = getelementptr inbounds nuw i8, ptr %x, i64 3968  %6 = load i8, ptr %arrayidx.3969  %conv.3 = sext i8 %6 to i32970  %arrayidx2.3 = getelementptr inbounds nuw i8, ptr %y, i64 3971  %7 = load i8, ptr %arrayidx2.3972  %conv3.3 = sext i8 %7 to i32973  %mul.3 = mul nsw i32 %conv3.3, %conv.3974  %add.3 = add nsw i32 %mul.3, %add.2975  %arrayidx.4 = getelementptr inbounds nuw i8, ptr %x, i64 4976  %8 = load i8, ptr %arrayidx.4977  %conv.4 = sext i8 %8 to i32978  %arrayidx2.4 = getelementptr inbounds nuw i8, ptr %y, i64 4979  %9 = load i8, ptr %arrayidx2.4980  %conv3.4 = sext i8 %9 to i32981  %mul.4 = mul nsw i32 %conv3.4, %conv.4982  %add.4 = add nsw i32 %mul.4, %add.3983  %arrayidx.5 = getelementptr inbounds nuw i8, ptr %x, i64 5984  %10 = load i8, ptr %arrayidx.5985  %conv.5 = sext i8 %10 to i32986  %arrayidx2.5 = getelementptr inbounds nuw i8, ptr %y, i64 5987  %11 = load i8, ptr %arrayidx2.5988  %conv3.5 = sext i8 %11 to i32989  %mul.5 = mul nsw i32 %conv3.5, %conv.5990  %add.5 = add nsw i32 %mul.5, %add.4991  %arrayidx.6 = getelementptr inbounds nuw i8, ptr %x, i64 6992  %12 = load i8, ptr %arrayidx.6993  %conv.6 = sext i8 %12 to i32994  %arrayidx2.6 = getelementptr inbounds nuw i8, ptr %y, i64 6995  %13 = load i8, ptr %arrayidx2.6996  %conv3.6 = sext i8 %13 to i32997  %mul.6 = mul nsw i32 %conv3.6, %conv.6998  %add.6 = add nsw i32 %mul.6, %add.5999  %arrayidx.7 = getelementptr inbounds nuw i8, ptr %x, i64 71000  %14 = load i8, ptr %arrayidx.71001  %conv.7 = sext i8 %14 to i321002  %arrayidx2.7 = getelementptr inbounds nuw i8, ptr %y, i64 71003  %15 = load i8, ptr %arrayidx2.71004  %conv3.7 = sext i8 %15 to i321005  %mul.7 = mul nsw i32 %conv3.7, %conv.71006  %add.7 = add nsw i32 %mul.7, %add.61007  ret i32 %add.71008}1009 1010 1011; COST-LABEL: Function:  mla_v16i8_i321012; COST: Cost:            '-52'1013define i32 @mla_v16i8_i32(ptr %x, ptr %y) "target-features"="+dotprod" {1014; CHECK-LABEL: @mla_v16i8_i32(1015; CHECK-NEXT:  entry:1016; CHECK-NEXT:    [[TMP0:%.*]] = load <16 x i8>, ptr [[X:%.*]], align 11017; CHECK-NEXT:    [[TMP1:%.*]] = sext <16 x i8> [[TMP0]] to <16 x i32>1018; CHECK-NEXT:    [[TMP2:%.*]] = load <16 x i8>, ptr [[Y:%.*]], align 11019; CHECK-NEXT:    [[TMP3:%.*]] = sext <16 x i8> [[TMP2]] to <16 x i32>1020; CHECK-NEXT:    [[TMP4:%.*]] = mul nsw <16 x i32> [[TMP3]], [[TMP1]]1021; CHECK-NEXT:    [[TMP5:%.*]] = call i32 @llvm.vector.reduce.add.v16i32(<16 x i32> [[TMP4]])1022; CHECK-NEXT:    ret i32 [[TMP5]]1023;1024entry:1025  %0 = load i8, ptr %x1026  %conv = sext i8 %0 to i321027  %1 = load i8, ptr %y1028  %conv3 = sext i8 %1 to i321029  %mul = mul nsw i32 %conv3, %conv1030  %arrayidx.1 = getelementptr inbounds nuw i8, ptr %x, i64 11031  %2 = load i8, ptr %arrayidx.11032  %conv.1 = sext i8 %2 to i321033  %arrayidx2.1 = getelementptr inbounds nuw i8, ptr %y, i64 11034  %3 = load i8, ptr %arrayidx2.11035  %conv3.1 = sext i8 %3 to i321036  %mul.1 = mul nsw i32 %conv3.1, %conv.11037  %add.1 = add nsw i32 %mul.1, %mul1038  %arrayidx.2 = getelementptr inbounds nuw i8, ptr %x, i64 21039  %4 = load i8, ptr %arrayidx.21040  %conv.2 = sext i8 %4 to i321041  %arrayidx2.2 = getelementptr inbounds nuw i8, ptr %y, i64 21042  %5 = load i8, ptr %arrayidx2.21043  %conv3.2 = sext i8 %5 to i321044  %mul.2 = mul nsw i32 %conv3.2, %conv.21045  %add.2 = add nsw i32 %mul.2, %add.11046  %arrayidx.3 = getelementptr inbounds nuw i8, ptr %x, i64 31047  %6 = load i8, ptr %arrayidx.31048  %conv.3 = sext i8 %6 to i321049  %arrayidx2.3 = getelementptr inbounds nuw i8, ptr %y, i64 31050  %7 = load i8, ptr %arrayidx2.31051  %conv3.3 = sext i8 %7 to i321052  %mul.3 = mul nsw i32 %conv3.3, %conv.31053  %add.3 = add nsw i32 %mul.3, %add.21054  %arrayidx.4 = getelementptr inbounds nuw i8, ptr %x, i64 41055  %8 = load i8, ptr %arrayidx.41056  %conv.4 = sext i8 %8 to i321057  %arrayidx2.4 = getelementptr inbounds nuw i8, ptr %y, i64 41058  %9 = load i8, ptr %arrayidx2.41059  %conv3.4 = sext i8 %9 to i321060  %mul.4 = mul nsw i32 %conv3.4, %conv.41061  %add.4 = add nsw i32 %mul.4, %add.31062  %arrayidx.5 = getelementptr inbounds nuw i8, ptr %x, i64 51063  %10 = load i8, ptr %arrayidx.51064  %conv.5 = sext i8 %10 to i321065  %arrayidx2.5 = getelementptr inbounds nuw i8, ptr %y, i64 51066  %11 = load i8, ptr %arrayidx2.51067  %conv3.5 = sext i8 %11 to i321068  %mul.5 = mul nsw i32 %conv3.5, %conv.51069  %add.5 = add nsw i32 %mul.5, %add.41070  %arrayidx.6 = getelementptr inbounds nuw i8, ptr %x, i64 61071  %12 = load i8, ptr %arrayidx.61072  %conv.6 = sext i8 %12 to i321073  %arrayidx2.6 = getelementptr inbounds nuw i8, ptr %y, i64 61074  %13 = load i8, ptr %arrayidx2.61075  %conv3.6 = sext i8 %13 to i321076  %mul.6 = mul nsw i32 %conv3.6, %conv.61077  %add.6 = add nsw i32 %mul.6, %add.51078  %arrayidx.7 = getelementptr inbounds nuw i8, ptr %x, i64 71079  %14 = load i8, ptr %arrayidx.71080  %conv.7 = sext i8 %14 to i321081  %arrayidx2.7 = getelementptr inbounds nuw i8, ptr %y, i64 71082  %15 = load i8, ptr %arrayidx2.71083  %conv3.7 = sext i8 %15 to i321084  %mul.7 = mul nsw i32 %conv3.7, %conv.71085  %add.7 = add nsw i32 %mul.7, %add.61086  %arrayidx.8 = getelementptr inbounds nuw i8, ptr %x, i64 81087  %16 = load i8, ptr %arrayidx.81088  %conv.8 = sext i8 %16 to i321089  %arrayidx2.8 = getelementptr inbounds nuw i8, ptr %y, i64 81090  %17 = load i8, ptr %arrayidx2.81091  %conv3.8 = sext i8 %17 to i321092  %mul.8 = mul nsw i32 %conv3.8, %conv.81093  %add.8 = add nsw i32 %mul.8, %add.71094  %arrayidx.9 = getelementptr inbounds nuw i8, ptr %x, i64 91095  %18 = load i8, ptr %arrayidx.91096  %conv.9 = sext i8 %18 to i321097  %arrayidx2.9 = getelementptr inbounds nuw i8, ptr %y, i64 91098  %19 = load i8, ptr %arrayidx2.91099  %conv3.9 = sext i8 %19 to i321100  %mul.9 = mul nsw i32 %conv3.9, %conv.91101  %add.9 = add nsw i32 %mul.9, %add.81102  %arrayidx.10 = getelementptr inbounds nuw i8, ptr %x, i64 101103  %20 = load i8, ptr %arrayidx.101104  %conv.10 = sext i8 %20 to i321105  %arrayidx2.10 = getelementptr inbounds nuw i8, ptr %y, i64 101106  %21 = load i8, ptr %arrayidx2.101107  %conv3.10 = sext i8 %21 to i321108  %mul.10 = mul nsw i32 %conv3.10, %conv.101109  %add.10 = add nsw i32 %mul.10, %add.91110  %arrayidx.11 = getelementptr inbounds nuw i8, ptr %x, i64 111111  %22 = load i8, ptr %arrayidx.111112  %conv.11 = sext i8 %22 to i321113  %arrayidx2.11 = getelementptr inbounds nuw i8, ptr %y, i64 111114  %23 = load i8, ptr %arrayidx2.111115  %conv3.11 = sext i8 %23 to i321116  %mul.11 = mul nsw i32 %conv3.11, %conv.111117  %add.11 = add nsw i32 %mul.11, %add.101118  %arrayidx.12 = getelementptr inbounds nuw i8, ptr %x, i64 121119  %24 = load i8, ptr %arrayidx.121120  %conv.12 = sext i8 %24 to i321121  %arrayidx2.12 = getelementptr inbounds nuw i8, ptr %y, i64 121122  %25 = load i8, ptr %arrayidx2.121123  %conv3.12 = sext i8 %25 to i321124  %mul.12 = mul nsw i32 %conv3.12, %conv.121125  %add.12 = add nsw i32 %mul.12, %add.111126  %arrayidx.13 = getelementptr inbounds nuw i8, ptr %x, i64 131127  %26 = load i8, ptr %arrayidx.131128  %conv.13 = sext i8 %26 to i321129  %arrayidx2.13 = getelementptr inbounds nuw i8, ptr %y, i64 131130  %27 = load i8, ptr %arrayidx2.131131  %conv3.13 = sext i8 %27 to i321132  %mul.13 = mul nsw i32 %conv3.13, %conv.131133  %add.13 = add nsw i32 %mul.13, %add.121134  %arrayidx.14 = getelementptr inbounds nuw i8, ptr %x, i64 141135  %28 = load i8, ptr %arrayidx.141136  %conv.14 = sext i8 %28 to i321137  %arrayidx2.14 = getelementptr inbounds nuw i8, ptr %y, i64 141138  %29 = load i8, ptr %arrayidx2.141139  %conv3.14 = sext i8 %29 to i321140  %mul.14 = mul nsw i32 %conv3.14, %conv.141141  %add.14 = add nsw i32 %mul.14, %add.131142  %arrayidx.15 = getelementptr inbounds nuw i8, ptr %x, i64 151143  %30 = load i8, ptr %arrayidx.151144  %conv.15 = sext i8 %30 to i321145  %arrayidx2.15 = getelementptr inbounds nuw i8, ptr %y, i64 151146  %31 = load i8, ptr %arrayidx2.151147  %conv3.15 = sext i8 %31 to i321148  %mul.15 = mul nsw i32 %conv3.15, %conv.151149  %add.15 = add nsw i32 %mul.15, %add.141150  ret i32 %add.151151}1152 1153; COST-LABEL: Function:  mla_v16i8_i32_sub1154; COST: Cost:            '-2'1155define i32 @mla_v16i8_i32_sub(ptr %x, ptr %y) "target-features"="+dotprod" {1156; CHECK-LABEL: @mla_v16i8_i32_sub(1157; CHECK-NEXT:  entry:1158; CHECK-NEXT:    [[TMP0:%.*]] = load i8, ptr [[X:%.*]], align 11159; CHECK-NEXT:    [[CONV:%.*]] = sext i8 [[TMP0]] to i321160; CHECK-NEXT:    [[TMP1:%.*]] = load i8, ptr [[Y:%.*]], align 11161; CHECK-NEXT:    [[CONV3:%.*]] = sext i8 [[TMP1]] to i321162; CHECK-NEXT:    [[MUL:%.*]] = mul nsw i32 [[CONV3]], [[CONV]]1163; CHECK-NEXT:    [[ARRAYIDX_1:%.*]] = getelementptr inbounds nuw i8, ptr [[X]], i64 11164; CHECK-NEXT:    [[TMP2:%.*]] = load i8, ptr [[ARRAYIDX_1]], align 11165; CHECK-NEXT:    [[CONV_1:%.*]] = sext i8 [[TMP2]] to i321166; CHECK-NEXT:    [[ARRAYIDX2_1:%.*]] = getelementptr inbounds nuw i8, ptr [[Y]], i64 11167; CHECK-NEXT:    [[TMP3:%.*]] = load i8, ptr [[ARRAYIDX2_1]], align 11168; CHECK-NEXT:    [[CONV3_1:%.*]] = sext i8 [[TMP3]] to i321169; CHECK-NEXT:    [[MUL_1:%.*]] = mul nsw i32 [[CONV3_1]], [[CONV_1]]1170; CHECK-NEXT:    [[SUB_1:%.*]] = sub nsw i32 [[MUL_1]], [[MUL]]1171; CHECK-NEXT:    [[ARRAYIDX_2:%.*]] = getelementptr inbounds nuw i8, ptr [[X]], i64 21172; CHECK-NEXT:    [[TMP4:%.*]] = load i8, ptr [[ARRAYIDX_2]], align 11173; CHECK-NEXT:    [[CONV_2:%.*]] = sext i8 [[TMP4]] to i321174; CHECK-NEXT:    [[ARRAYIDX2_2:%.*]] = getelementptr inbounds nuw i8, ptr [[Y]], i64 21175; CHECK-NEXT:    [[TMP5:%.*]] = load i8, ptr [[ARRAYIDX2_2]], align 11176; CHECK-NEXT:    [[CONV3_2:%.*]] = sext i8 [[TMP5]] to i321177; CHECK-NEXT:    [[MUL_2:%.*]] = mul nsw i32 [[CONV3_2]], [[CONV_2]]1178; CHECK-NEXT:    [[SUB_2:%.*]] = sub nsw i32 [[MUL_2]], [[SUB_1]]1179; CHECK-NEXT:    [[ARRAYIDX_3:%.*]] = getelementptr inbounds nuw i8, ptr [[X]], i64 31180; CHECK-NEXT:    [[TMP6:%.*]] = load i8, ptr [[ARRAYIDX_3]], align 11181; CHECK-NEXT:    [[CONV_3:%.*]] = sext i8 [[TMP6]] to i321182; CHECK-NEXT:    [[ARRAYIDX2_3:%.*]] = getelementptr inbounds nuw i8, ptr [[Y]], i64 31183; CHECK-NEXT:    [[TMP7:%.*]] = load i8, ptr [[ARRAYIDX2_3]], align 11184; CHECK-NEXT:    [[CONV3_3:%.*]] = sext i8 [[TMP7]] to i321185; CHECK-NEXT:    [[MUL_3:%.*]] = mul nsw i32 [[CONV3_3]], [[CONV_3]]1186; CHECK-NEXT:    [[SUB_3:%.*]] = sub nsw i32 [[MUL_3]], [[SUB_2]]1187; CHECK-NEXT:    [[ARRAYIDX_4:%.*]] = getelementptr inbounds nuw i8, ptr [[X]], i64 41188; CHECK-NEXT:    [[TMP8:%.*]] = load i8, ptr [[ARRAYIDX_4]], align 11189; CHECK-NEXT:    [[CONV_4:%.*]] = sext i8 [[TMP8]] to i321190; CHECK-NEXT:    [[ARRAYIDX2_4:%.*]] = getelementptr inbounds nuw i8, ptr [[Y]], i64 41191; CHECK-NEXT:    [[TMP9:%.*]] = load i8, ptr [[ARRAYIDX2_4]], align 11192; CHECK-NEXT:    [[CONV3_4:%.*]] = sext i8 [[TMP9]] to i321193; CHECK-NEXT:    [[MUL_4:%.*]] = mul nsw i32 [[CONV3_4]], [[CONV_4]]1194; CHECK-NEXT:    [[SUB_4:%.*]] = sub nsw i32 [[MUL_4]], [[SUB_3]]1195; CHECK-NEXT:    [[ARRAYIDX_5:%.*]] = getelementptr inbounds nuw i8, ptr [[X]], i64 51196; CHECK-NEXT:    [[TMP10:%.*]] = load i8, ptr [[ARRAYIDX_5]], align 11197; CHECK-NEXT:    [[CONV_5:%.*]] = sext i8 [[TMP10]] to i321198; CHECK-NEXT:    [[ARRAYIDX2_5:%.*]] = getelementptr inbounds nuw i8, ptr [[Y]], i64 51199; CHECK-NEXT:    [[TMP11:%.*]] = load i8, ptr [[ARRAYIDX2_5]], align 11200; CHECK-NEXT:    [[CONV3_5:%.*]] = sext i8 [[TMP11]] to i321201; CHECK-NEXT:    [[MUL_5:%.*]] = mul nsw i32 [[CONV3_5]], [[CONV_5]]1202; CHECK-NEXT:    [[SUB_5:%.*]] = sub nsw i32 [[MUL_5]], [[SUB_4]]1203; CHECK-NEXT:    [[ARRAYIDX_6:%.*]] = getelementptr inbounds nuw i8, ptr [[X]], i64 61204; CHECK-NEXT:    [[TMP12:%.*]] = load i8, ptr [[ARRAYIDX_6]], align 11205; CHECK-NEXT:    [[CONV_6:%.*]] = sext i8 [[TMP12]] to i321206; CHECK-NEXT:    [[ARRAYIDX2_6:%.*]] = getelementptr inbounds nuw i8, ptr [[Y]], i64 61207; CHECK-NEXT:    [[TMP13:%.*]] = load i8, ptr [[ARRAYIDX2_6]], align 11208; CHECK-NEXT:    [[CONV3_6:%.*]] = sext i8 [[TMP13]] to i321209; CHECK-NEXT:    [[MUL_6:%.*]] = mul nsw i32 [[CONV3_6]], [[CONV_6]]1210; CHECK-NEXT:    [[SUB_6:%.*]] = sub nsw i32 [[MUL_6]], [[SUB_5]]1211; CHECK-NEXT:    [[ARRAYIDX_7:%.*]] = getelementptr inbounds nuw i8, ptr [[X]], i64 71212; CHECK-NEXT:    [[TMP14:%.*]] = load i8, ptr [[ARRAYIDX_7]], align 11213; CHECK-NEXT:    [[CONV_7:%.*]] = sext i8 [[TMP14]] to i321214; CHECK-NEXT:    [[ARRAYIDX2_7:%.*]] = getelementptr inbounds nuw i8, ptr [[Y]], i64 71215; CHECK-NEXT:    [[TMP15:%.*]] = load i8, ptr [[ARRAYIDX2_7]], align 11216; CHECK-NEXT:    [[CONV3_7:%.*]] = sext i8 [[TMP15]] to i321217; CHECK-NEXT:    [[MUL_7:%.*]] = mul nsw i32 [[CONV3_7]], [[CONV_7]]1218; CHECK-NEXT:    [[SUB_7:%.*]] = sub nsw i32 [[MUL_7]], [[SUB_6]]1219; CHECK-NEXT:    [[ARRAYIDX_8:%.*]] = getelementptr inbounds nuw i8, ptr [[X]], i64 81220; CHECK-NEXT:    [[TMP16:%.*]] = load i8, ptr [[ARRAYIDX_8]], align 11221; CHECK-NEXT:    [[CONV_8:%.*]] = sext i8 [[TMP16]] to i321222; CHECK-NEXT:    [[ARRAYIDX2_8:%.*]] = getelementptr inbounds nuw i8, ptr [[Y]], i64 81223; CHECK-NEXT:    [[TMP17:%.*]] = load i8, ptr [[ARRAYIDX2_8]], align 11224; CHECK-NEXT:    [[CONV3_8:%.*]] = sext i8 [[TMP17]] to i321225; CHECK-NEXT:    [[MUL_8:%.*]] = mul nsw i32 [[CONV3_8]], [[CONV_8]]1226; CHECK-NEXT:    [[SUB_8:%.*]] = sub nsw i32 [[MUL_8]], [[SUB_7]]1227; CHECK-NEXT:    [[ARRAYIDX_9:%.*]] = getelementptr inbounds nuw i8, ptr [[X]], i64 91228; CHECK-NEXT:    [[TMP18:%.*]] = load i8, ptr [[ARRAYIDX_9]], align 11229; CHECK-NEXT:    [[CONV_9:%.*]] = sext i8 [[TMP18]] to i321230; CHECK-NEXT:    [[ARRAYIDX2_9:%.*]] = getelementptr inbounds nuw i8, ptr [[Y]], i64 91231; CHECK-NEXT:    [[TMP19:%.*]] = load i8, ptr [[ARRAYIDX2_9]], align 11232; CHECK-NEXT:    [[CONV3_9:%.*]] = sext i8 [[TMP19]] to i321233; CHECK-NEXT:    [[MUL_9:%.*]] = mul nsw i32 [[CONV3_9]], [[CONV_9]]1234; CHECK-NEXT:    [[SUB_9:%.*]] = sub nsw i32 [[MUL_9]], [[SUB_8]]1235; CHECK-NEXT:    [[ARRAYIDX_10:%.*]] = getelementptr inbounds nuw i8, ptr [[X]], i64 101236; CHECK-NEXT:    [[TMP20:%.*]] = load i8, ptr [[ARRAYIDX_10]], align 11237; CHECK-NEXT:    [[CONV_10:%.*]] = sext i8 [[TMP20]] to i321238; CHECK-NEXT:    [[ARRAYIDX2_10:%.*]] = getelementptr inbounds nuw i8, ptr [[Y]], i64 101239; CHECK-NEXT:    [[TMP21:%.*]] = load i8, ptr [[ARRAYIDX2_10]], align 11240; CHECK-NEXT:    [[CONV3_10:%.*]] = sext i8 [[TMP21]] to i321241; CHECK-NEXT:    [[MUL_10:%.*]] = mul nsw i32 [[CONV3_10]], [[CONV_10]]1242; CHECK-NEXT:    [[SUB_10:%.*]] = sub nsw i32 [[MUL_10]], [[SUB_9]]1243; CHECK-NEXT:    [[ARRAYIDX_11:%.*]] = getelementptr inbounds nuw i8, ptr [[X]], i64 111244; CHECK-NEXT:    [[TMP22:%.*]] = load i8, ptr [[ARRAYIDX_11]], align 11245; CHECK-NEXT:    [[CONV_11:%.*]] = sext i8 [[TMP22]] to i321246; CHECK-NEXT:    [[ARRAYIDX2_11:%.*]] = getelementptr inbounds nuw i8, ptr [[Y]], i64 111247; CHECK-NEXT:    [[TMP23:%.*]] = load i8, ptr [[ARRAYIDX2_11]], align 11248; CHECK-NEXT:    [[CONV3_11:%.*]] = sext i8 [[TMP23]] to i321249; CHECK-NEXT:    [[MUL_11:%.*]] = mul nsw i32 [[CONV3_11]], [[CONV_11]]1250; CHECK-NEXT:    [[SUB_11:%.*]] = sub nsw i32 [[MUL_11]], [[SUB_10]]1251; CHECK-NEXT:    [[ARRAYIDX_12:%.*]] = getelementptr inbounds nuw i8, ptr [[X]], i64 121252; CHECK-NEXT:    [[TMP24:%.*]] = load i8, ptr [[ARRAYIDX_12]], align 11253; CHECK-NEXT:    [[CONV_12:%.*]] = sext i8 [[TMP24]] to i321254; CHECK-NEXT:    [[ARRAYIDX2_12:%.*]] = getelementptr inbounds nuw i8, ptr [[Y]], i64 121255; CHECK-NEXT:    [[TMP25:%.*]] = load i8, ptr [[ARRAYIDX2_12]], align 11256; CHECK-NEXT:    [[CONV3_12:%.*]] = sext i8 [[TMP25]] to i321257; CHECK-NEXT:    [[MUL_12:%.*]] = mul nsw i32 [[CONV3_12]], [[CONV_12]]1258; CHECK-NEXT:    [[SUB_12:%.*]] = sub nsw i32 [[MUL_12]], [[SUB_11]]1259; CHECK-NEXT:    [[ARRAYIDX_13:%.*]] = getelementptr inbounds nuw i8, ptr [[X]], i64 131260; CHECK-NEXT:    [[TMP26:%.*]] = load i8, ptr [[ARRAYIDX_13]], align 11261; CHECK-NEXT:    [[CONV_13:%.*]] = sext i8 [[TMP26]] to i321262; CHECK-NEXT:    [[ARRAYIDX2_13:%.*]] = getelementptr inbounds nuw i8, ptr [[Y]], i64 131263; CHECK-NEXT:    [[TMP27:%.*]] = load i8, ptr [[ARRAYIDX2_13]], align 11264; CHECK-NEXT:    [[CONV3_13:%.*]] = sext i8 [[TMP27]] to i321265; CHECK-NEXT:    [[MUL_13:%.*]] = mul nsw i32 [[CONV3_13]], [[CONV_13]]1266; CHECK-NEXT:    [[SUB_13:%.*]] = sub nsw i32 [[MUL_13]], [[SUB_12]]1267; CHECK-NEXT:    [[ARRAYIDX_14:%.*]] = getelementptr inbounds nuw i8, ptr [[X]], i64 141268; CHECK-NEXT:    [[TMP28:%.*]] = load i8, ptr [[ARRAYIDX_14]], align 11269; CHECK-NEXT:    [[CONV_14:%.*]] = sext i8 [[TMP28]] to i321270; CHECK-NEXT:    [[ARRAYIDX2_14:%.*]] = getelementptr inbounds nuw i8, ptr [[Y]], i64 141271; CHECK-NEXT:    [[TMP29:%.*]] = load i8, ptr [[ARRAYIDX2_14]], align 11272; CHECK-NEXT:    [[CONV3_14:%.*]] = sext i8 [[TMP29]] to i321273; CHECK-NEXT:    [[MUL_14:%.*]] = mul nsw i32 [[CONV3_14]], [[CONV_14]]1274; CHECK-NEXT:    [[SUB_14:%.*]] = sub nsw i32 [[MUL_14]], [[SUB_13]]1275; CHECK-NEXT:    [[ARRAYIDX_15:%.*]] = getelementptr inbounds nuw i8, ptr [[X]], i64 151276; CHECK-NEXT:    [[TMP30:%.*]] = load i8, ptr [[ARRAYIDX_15]], align 11277; CHECK-NEXT:    [[CONV_15:%.*]] = sext i8 [[TMP30]] to i321278; CHECK-NEXT:    [[ARRAYIDX2_15:%.*]] = getelementptr inbounds nuw i8, ptr [[Y]], i64 151279; CHECK-NEXT:    [[TMP31:%.*]] = load i8, ptr [[ARRAYIDX2_15]], align 11280; CHECK-NEXT:    [[CONV3_15:%.*]] = sext i8 [[TMP31]] to i321281; CHECK-NEXT:    [[MUL_15:%.*]] = mul nsw i32 [[CONV3_15]], [[CONV_15]]1282; CHECK-NEXT:    [[SUB_15:%.*]] = sub nsw i32 [[MUL_15]], [[SUB_14]]1283; CHECK-NEXT:    ret i32 [[SUB_15]]1284;1285entry:1286  %0 = load i8, ptr %x1287  %conv = sext i8 %0 to i321288  %1 = load i8, ptr %y1289  %conv3 = sext i8 %1 to i321290  %mul = mul nsw i32 %conv3, %conv1291  %arrayidx.1 = getelementptr inbounds nuw i8, ptr %x, i64 11292  %2 = load i8, ptr %arrayidx.11293  %conv.1 = sext i8 %2 to i321294  %arrayidx2.1 = getelementptr inbounds nuw i8, ptr %y, i64 11295  %3 = load i8, ptr %arrayidx2.11296  %conv3.1 = sext i8 %3 to i321297  %mul.1 = mul nsw i32 %conv3.1, %conv.11298  %sub.1 = sub nsw i32 %mul.1, %mul1299  %arrayidx.2 = getelementptr inbounds nuw i8, ptr %x, i64 21300  %4 = load i8, ptr %arrayidx.21301  %conv.2 = sext i8 %4 to i321302  %arrayidx2.2 = getelementptr inbounds nuw i8, ptr %y, i64 21303  %5 = load i8, ptr %arrayidx2.21304  %conv3.2 = sext i8 %5 to i321305  %mul.2 = mul nsw i32 %conv3.2, %conv.21306  %sub.2 = sub nsw i32 %mul.2, %sub.11307  %arrayidx.3 = getelementptr inbounds nuw i8, ptr %x, i64 31308  %6 = load i8, ptr %arrayidx.31309  %conv.3 = sext i8 %6 to i321310  %arrayidx2.3 = getelementptr inbounds nuw i8, ptr %y, i64 31311  %7 = load i8, ptr %arrayidx2.31312  %conv3.3 = sext i8 %7 to i321313  %mul.3 = mul nsw i32 %conv3.3, %conv.31314  %sub.3 = sub nsw i32 %mul.3, %sub.21315  %arrayidx.4 = getelementptr inbounds nuw i8, ptr %x, i64 41316  %8 = load i8, ptr %arrayidx.41317  %conv.4 = sext i8 %8 to i321318  %arrayidx2.4 = getelementptr inbounds nuw i8, ptr %y, i64 41319  %9 = load i8, ptr %arrayidx2.41320  %conv3.4 = sext i8 %9 to i321321  %mul.4 = mul nsw i32 %conv3.4, %conv.41322  %sub.4 = sub nsw i32 %mul.4, %sub.31323  %arrayidx.5 = getelementptr inbounds nuw i8, ptr %x, i64 51324  %10 = load i8, ptr %arrayidx.51325  %conv.5 = sext i8 %10 to i321326  %arrayidx2.5 = getelementptr inbounds nuw i8, ptr %y, i64 51327  %11 = load i8, ptr %arrayidx2.51328  %conv3.5 = sext i8 %11 to i321329  %mul.5 = mul nsw i32 %conv3.5, %conv.51330  %sub.5 = sub nsw i32 %mul.5, %sub.41331  %arrayidx.6 = getelementptr inbounds nuw i8, ptr %x, i64 61332  %12 = load i8, ptr %arrayidx.61333  %conv.6 = sext i8 %12 to i321334  %arrayidx2.6 = getelementptr inbounds nuw i8, ptr %y, i64 61335  %13 = load i8, ptr %arrayidx2.61336  %conv3.6 = sext i8 %13 to i321337  %mul.6 = mul nsw i32 %conv3.6, %conv.61338  %sub.6 = sub nsw i32 %mul.6, %sub.51339  %arrayidx.7 = getelementptr inbounds nuw i8, ptr %x, i64 71340  %14 = load i8, ptr %arrayidx.71341  %conv.7 = sext i8 %14 to i321342  %arrayidx2.7 = getelementptr inbounds nuw i8, ptr %y, i64 71343  %15 = load i8, ptr %arrayidx2.71344  %conv3.7 = sext i8 %15 to i321345  %mul.7 = mul nsw i32 %conv3.7, %conv.71346  %sub.7 = sub nsw i32 %mul.7, %sub.61347  %arrayidx.8 = getelementptr inbounds nuw i8, ptr %x, i64 81348  %16 = load i8, ptr %arrayidx.81349  %conv.8 = sext i8 %16 to i321350  %arrayidx2.8 = getelementptr inbounds nuw i8, ptr %y, i64 81351  %17 = load i8, ptr %arrayidx2.81352  %conv3.8 = sext i8 %17 to i321353  %mul.8 = mul nsw i32 %conv3.8, %conv.81354  %sub.8 = sub nsw i32 %mul.8, %sub.71355  %arrayidx.9 = getelementptr inbounds nuw i8, ptr %x, i64 91356  %18 = load i8, ptr %arrayidx.91357  %conv.9 = sext i8 %18 to i321358  %arrayidx2.9 = getelementptr inbounds nuw i8, ptr %y, i64 91359  %19 = load i8, ptr %arrayidx2.91360  %conv3.9 = sext i8 %19 to i321361  %mul.9 = mul nsw i32 %conv3.9, %conv.91362  %sub.9 = sub nsw i32 %mul.9, %sub.81363  %arrayidx.10 = getelementptr inbounds nuw i8, ptr %x, i64 101364  %20 = load i8, ptr %arrayidx.101365  %conv.10 = sext i8 %20 to i321366  %arrayidx2.10 = getelementptr inbounds nuw i8, ptr %y, i64 101367  %21 = load i8, ptr %arrayidx2.101368  %conv3.10 = sext i8 %21 to i321369  %mul.10 = mul nsw i32 %conv3.10, %conv.101370  %sub.10 = sub nsw i32 %mul.10, %sub.91371  %arrayidx.11 = getelementptr inbounds nuw i8, ptr %x, i64 111372  %22 = load i8, ptr %arrayidx.111373  %conv.11 = sext i8 %22 to i321374  %arrayidx2.11 = getelementptr inbounds nuw i8, ptr %y, i64 111375  %23 = load i8, ptr %arrayidx2.111376  %conv3.11 = sext i8 %23 to i321377  %mul.11 = mul nsw i32 %conv3.11, %conv.111378  %sub.11 = sub nsw i32 %mul.11, %sub.101379  %arrayidx.12 = getelementptr inbounds nuw i8, ptr %x, i64 121380  %24 = load i8, ptr %arrayidx.121381  %conv.12 = sext i8 %24 to i321382  %arrayidx2.12 = getelementptr inbounds nuw i8, ptr %y, i64 121383  %25 = load i8, ptr %arrayidx2.121384  %conv3.12 = sext i8 %25 to i321385  %mul.12 = mul nsw i32 %conv3.12, %conv.121386  %sub.12 = sub nsw i32 %mul.12, %sub.111387  %arrayidx.13 = getelementptr inbounds nuw i8, ptr %x, i64 131388  %26 = load i8, ptr %arrayidx.131389  %conv.13 = sext i8 %26 to i321390  %arrayidx2.13 = getelementptr inbounds nuw i8, ptr %y, i64 131391  %27 = load i8, ptr %arrayidx2.131392  %conv3.13 = sext i8 %27 to i321393  %mul.13 = mul nsw i32 %conv3.13, %conv.131394  %sub.13 = sub nsw i32 %mul.13, %sub.121395  %arrayidx.14 = getelementptr inbounds nuw i8, ptr %x, i64 141396  %28 = load i8, ptr %arrayidx.141397  %conv.14 = sext i8 %28 to i321398  %arrayidx2.14 = getelementptr inbounds nuw i8, ptr %y, i64 141399  %29 = load i8, ptr %arrayidx2.141400  %conv3.14 = sext i8 %29 to i321401  %mul.14 = mul nsw i32 %conv3.14, %conv.141402  %sub.14 = sub nsw i32 %mul.14, %sub.131403  %arrayidx.15 = getelementptr inbounds nuw i8, ptr %x, i64 151404  %30 = load i8, ptr %arrayidx.151405  %conv.15 = sext i8 %30 to i321406  %arrayidx2.15 = getelementptr inbounds nuw i8, ptr %y, i64 151407  %31 = load i8, ptr %arrayidx2.151408  %conv3.15 = sext i8 %31 to i321409  %mul.15 = mul nsw i32 %conv3.15, %conv.151410  %sub.15 = sub nsw i32 %mul.15, %sub.141411  ret i32 %sub.151412}1413