From e962fe8fc3df5771508946ad794993edb7b35d4f Mon Sep 17 00:00:00 2001 From: Peter Jung Date: Thu, 9 Jan 2025 20:53:19 +0100 Subject: [PATCH] llvm/clang/mesa: Update for 19.1.6 Signed-off-by: Peter Jung --- clang/.SRCINFO | 45 +- ...wDivide64-on-Barcelona-Bobcat-Bulldo.patch | 66 - ...LoopMicroOpBufferSize-to-practical-l.patch | 1098 ----------------- clang/PKGBUILD | 38 +- ...8-diagnostics-for-device-compilation.patch | 66 - .../clangd-handle-missing-ending-brace.patch | 78 -- ...support-__GCC_-CON-DE-STRUCTIVE_SIZE.patch | 584 +++++++++ llvm/.SRCINFO | 33 +- ...wDivide64-on-Barcelona-Bobcat-Bulldo.patch | 66 - ...LoopMicroOpBufferSize-to-practical-l.patch | 1098 ----------------- llvm/0003-disable-gather-znver4.patch | 16 - llvm/PKGBUILD | 38 +- mesa/lib32-mesa/PKGBUILD | 2 +- mesa/mesa/PKGBUILD | 2 +- 14 files changed, 648 insertions(+), 2582 deletions(-) delete mode 100644 clang/0001-Enable-TuningSlowDivide64-on-Barcelona-Bobcat-Bulldo.patch delete mode 100644 clang/0002-Reduce-znver3-4-LoopMicroOpBufferSize-to-practical-l.patch delete mode 100644 clang/clang-disable-float128-diagnostics-for-device-compilation.patch delete mode 100644 clang/clangd-handle-missing-ending-brace.patch create mode 100644 clang/support-__GCC_-CON-DE-STRUCTIVE_SIZE.patch delete mode 100644 llvm/0001-Enable-TuningSlowDivide64-on-Barcelona-Bobcat-Bulldo.patch delete mode 100644 llvm/0002-Reduce-znver3-4-LoopMicroOpBufferSize-to-practical-l.patch delete mode 100644 llvm/0003-disable-gather-znver4.patch diff --git a/clang/.SRCINFO b/clang/.SRCINFO index de895574..09a5c8f9 100644 --- a/clang/.SRCINFO +++ b/clang/.SRCINFO @@ -1,7 +1,7 @@ pkgbase = clang pkgdesc = C language family frontend for LLVM - pkgver = 18.1.8 - pkgrel = 7 + pkgver = 19.1.6 + pkgrel = 2 url = https://clang.llvm.org/ arch = x86_64 license = Apache-2.0 WITH LLVM-exception @@ -19,41 +19,40 @@ pkgbase = clang optdepends = openmp: OpenMP support in clang with -fopenmp optdepends = python: for scan-view and git-clang-format optdepends = llvm: referenced by some clang headers - provides = clang-analyzer=18.1.8 - provides = clang-tools-extra=18.1.8 + provides = clang-analyzer=19.1.6 + provides = clang-tools-extra=19.1.6 conflicts = clang-analyzer conflicts = clang-tools-extra replaces = clang-analyzer replaces = clang-tools-extra options = !lto - source = https://github.com/llvm/llvm-project/releases/download/llvmorg-18.1.8/clang-18.1.8.src.tar.xz - source = https://github.com/llvm/llvm-project/releases/download/llvmorg-18.1.8/clang-18.1.8.src.tar.xz.sig - source = https://github.com/llvm/llvm-project/releases/download/llvmorg-18.1.8/clang-tools-extra-18.1.8.src.tar.xz - source = https://github.com/llvm/llvm-project/releases/download/llvmorg-18.1.8/clang-tools-extra-18.1.8.src.tar.xz.sig - source = https://github.com/llvm/llvm-project/releases/download/llvmorg-18.1.8/llvm-18.1.8.src.tar.xz - source = https://github.com/llvm/llvm-project/releases/download/llvmorg-18.1.8/llvm-18.1.8.src.tar.xz.sig - source = https://github.com/llvm/llvm-project/releases/download/llvmorg-18.1.8/cmake-18.1.8.src.tar.xz - source = https://github.com/llvm/llvm-project/releases/download/llvmorg-18.1.8/cmake-18.1.8.src.tar.xz.sig - source = https://github.com/llvm/llvm-project/releases/download/llvmorg-18.1.8/third-party-18.1.8.src.tar.xz - source = https://github.com/llvm/llvm-project/releases/download/llvmorg-18.1.8/third-party-18.1.8.src.tar.xz.sig + source = https://github.com/llvm/llvm-project/releases/download/llvmorg-19.1.6/clang-19.1.6.src.tar.xz + source = https://github.com/llvm/llvm-project/releases/download/llvmorg-19.1.6/clang-19.1.6.src.tar.xz.sig + source = https://github.com/llvm/llvm-project/releases/download/llvmorg-19.1.6/clang-tools-extra-19.1.6.src.tar.xz + source = https://github.com/llvm/llvm-project/releases/download/llvmorg-19.1.6/clang-tools-extra-19.1.6.src.tar.xz.sig + source = https://github.com/llvm/llvm-project/releases/download/llvmorg-19.1.6/llvm-19.1.6.src.tar.xz + source = https://github.com/llvm/llvm-project/releases/download/llvmorg-19.1.6/llvm-19.1.6.src.tar.xz.sig + source = https://github.com/llvm/llvm-project/releases/download/llvmorg-19.1.6/cmake-19.1.6.src.tar.xz + source = https://github.com/llvm/llvm-project/releases/download/llvmorg-19.1.6/cmake-19.1.6.src.tar.xz.sig + source = https://github.com/llvm/llvm-project/releases/download/llvmorg-19.1.6/third-party-19.1.6.src.tar.xz + source = https://github.com/llvm/llvm-project/releases/download/llvmorg-19.1.6/third-party-19.1.6.src.tar.xz.sig source = clang-disable-float128-diagnostics-for-device-compilation.patch::https://github.com/llvm/llvm-project/commit/318bff6811e7.patch + source = support-__GCC_-CON-DE-STRUCTIVE_SIZE.patch source = enable-fstack-protector-strong-by-default.patch - source = 0001-Enable-TuningSlowDivide64-on-Barcelona-Bobcat-Bulldo.patch - source = 0002-Reduce-znver3-4-LoopMicroOpBufferSize-to-practical-l.patch validpgpkeys = 474E22316ABF4785A88C6E8EA2C794A986419D8A - sha256sums = 5724fe0a13087d5579104cedd2f8b3bc10a212fb79a0fcdac98f4880e19f4519 + validpgpkeys = D574BD5D1D0E98895E3BF90044F2485E45D59042 + sha256sums = 6358cbb3e14687ca2f3465c61cffc65589b448aaa912ec2c163ef9fc046e8a89 sha256sums = SKIP - sha256sums = e58877fcd95ed106824bd1a31276dd17ed0c53adcd60ca75289eac0654f0a7f1 + sha256sums = 417a7d0048d8eb62dbaa8461f1fd474eb6493b09e14d050b39cc1f051e8b71d1 sha256sums = SKIP - sha256sums = f68cf90f369bc7d0158ba70d860b0cb34dbc163d6ff0ebc6cfa5e515b9b2e28d + sha256sums = ad1a3b125ff014ded290094088de40efb9193ce81a24278184230b7d401f8a3e sha256sums = SKIP - sha256sums = 59badef592dd34893cd319d42b323aaa990b452d05c7180ff20f23ab1b41e837 + sha256sums = 9c7ec82d9a240dc2287b8de89d6881bb64ceea0dcd6ce133c34ef65bda22d99e sha256sums = SKIP - sha256sums = b76b810f3d3dc5d08e83c4236cb6e395aa9bd5e3ea861e8c319b216d093db074 + sha256sums = 0e8048333bab2ba3607910e5d074259f08dccf00615778d03a2a55416718eb45 sha256sums = SKIP sha256sums = 94a3d4df2443f9dc9e256e6c0c661ff4a4ca4f34a5ca351f065511b9694faf2a + sha256sums = 8832b4ee02fe8a0e57fca608288242f80e348ee9b60be3eb0069c8b91a42fbf4 sha256sums = ef319e65f927718e1d3b1a23c480d686b1d292e2a0bf27229540964f9734117a - sha256sums = 7d4b76f753618752aaed64bb496ed3cd443faf1d3124b540c643abcca5a9756e - sha256sums = bac174d1958fa3134ce530cf2eed8abdbf910697e87cee6e4a23a5a3a1098b2d pkgname = clang diff --git a/clang/0001-Enable-TuningSlowDivide64-on-Barcelona-Bobcat-Bulldo.patch b/clang/0001-Enable-TuningSlowDivide64-on-Barcelona-Bobcat-Bulldo.patch deleted file mode 100644 index 47ae429f..00000000 --- a/clang/0001-Enable-TuningSlowDivide64-on-Barcelona-Bobcat-Bulldo.patch +++ /dev/null @@ -1,66 +0,0 @@ -From 2f440eb0471eb0b1b3582c6ae5fa8c557c1bce6b Mon Sep 17 00:00:00 2001 -From: Peter Jung -Date: Sun, 1 Sep 2024 21:41:23 +0200 -Subject: [PATCH 1/2] Enable TuningSlowDivide64 on - Barcelona/Bobcat/Bulldozer/Ryzen Families (#91277) - -Despite most AMD cpus having a lower latency for i64 divisions that converge early, we are still better off testing for values representable as i32 and performing a i32 division if possible. - -All AMD cpus appear to have been missed when we added the "idivq-to-divl" attribute - this patch now matches Intel cpu behaviour (and the x86-64/v2/3/4 levels). - -Unfortunately the difference in code scheduling means I've had to stop using the update_llc_test_checks script and just use old-fashioned CHECK-DAG checks for divl/divq pairs. - -Fixes #90985 - -Signed-off-by: Peter Jung ---- - lib/Target/X86/X86.td | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/lib/Target/X86/X86.td b/lib/Target/X86/X86.td -index e89ddcc570c9..c119a52e520b 100644 ---- a/lib/Target/X86/X86.td -+++ b/lib/Target/X86/X86.td -@@ -1336,6 +1336,7 @@ def ProcessorFeatures { - FeatureCMOV, - FeatureX86_64]; - list BarcelonaTuning = [TuningFastScalarShiftMasks, -+ TuningSlowDivide64, - TuningSlowSHLD, - TuningSBBDepBreaking, - TuningInsertVZEROUPPER]; -@@ -1358,6 +1359,7 @@ def ProcessorFeatures { - list BtVer1Tuning = [TuningFast15ByteNOP, - TuningFastScalarShiftMasks, - TuningFastVectorShiftMasks, -+ TuningSlowDivide64, - TuningSlowSHLD, - TuningSBBDepBreaking, - TuningInsertVZEROUPPER]; -@@ -1380,6 +1382,7 @@ def ProcessorFeatures { - TuningFastVectorShiftMasks, - TuningFastMOVBE, - TuningSBBDepBreaking, -+ TuningSlowDivide64, - TuningSlowSHLD]; - list BtVer2Features = - !listconcat(BtVer1Features, BtVer2AdditionalFeatures); -@@ -1404,6 +1407,7 @@ def ProcessorFeatures { - FeatureLWP, - FeatureLAHFSAHF64]; - list BdVer1Tuning = [TuningSlowSHLD, -+ TuningSlowDivide64, - TuningFast11ByteNOP, - TuningFastScalarShiftMasks, - TuningBranchFusion, -@@ -1483,6 +1487,7 @@ def ProcessorFeatures { - TuningFastScalarShiftMasks, - TuningFastVariablePerLaneShuffle, - TuningFastMOVBE, -+ TuningSlowDivide64, - TuningSlowSHLD, - TuningSBBDepBreaking, - TuningInsertVZEROUPPER, --- -2.46.0 - diff --git a/clang/0002-Reduce-znver3-4-LoopMicroOpBufferSize-to-practical-l.patch b/clang/0002-Reduce-znver3-4-LoopMicroOpBufferSize-to-practical-l.patch deleted file mode 100644 index fd8e42a9..00000000 --- a/clang/0002-Reduce-znver3-4-LoopMicroOpBufferSize-to-practical-l.patch +++ /dev/null @@ -1,1098 +0,0 @@ -From 82bd404723a5acad661e1f014fcbe337f62ac132 Mon Sep 17 00:00:00 2001 -From: Simon Pilgrim -Date: Thu, 16 May 2024 14:44:00 +0100 -Subject: [PATCH 2/2] Reduce znver3/4 LoopMicroOpBufferSize to practical loop - unrolling values (#91340) - -The znver3/4 scheduler models have previously associated the LoopMicroOpBufferSize with the maximum size of their op caches, and when this led to quadratic complexity issues this were reduced to a value of 512 uops, based mainly on compilation time and not its effectiveness on runtime performance. - -From a runtime performance POV, a large LoopMicroOpBufferSize leads to a higher number of loop unrolls, meaning the cpu has to rely on the frontend decode rate (4 ins/cy max) for much longer to fill the op cache before looping begins and we make use of the faster op cache rate (8/9 ops/cy). - -This patch proposes we instead cap the size of the LoopMicroOpBufferSize based off the maximum rate from the op cache (znver3 = 8op/cy, znver4 = 9op/cy) and the branch misprediction penalty from the opcache (~12cy) as a estimate of the useful number of ops we can unroll a loop by before mispredictions are likely to cause stalls. This isn't a perfect metric, but does try to be closer to the spirit of how we use LoopMicroOpBufferSize in the compiler vs the size of a similar naming buffer in the cpu. ---- - lib/Target/X86/X86ScheduleZnver3.td | 11 +- - lib/Target/X86/X86ScheduleZnver4.td | 16 +- - test/Transforms/LoopUnroll/X86/znver3.ll | 982 +----------------- - 3 files changed, 44 insertions(+), 965 deletions(-) - -diff --git a/lib/Target/X86/X86ScheduleZnver3.td b/lib/Target/X86/X86ScheduleZnver3.td -index d90c8bd284eb..2d1b426cfde3 100644 ---- a/lib/Target/X86/X86ScheduleZnver3.td -+++ b/lib/Target/X86/X86ScheduleZnver3.td -@@ -33,13 +33,10 @@ def Znver3Model : SchedMachineModel { - // The op cache is organized as an associative cache with 64 sets and 8 ways. - // At each set-way intersection is an entry containing up to 8 macro ops. - // The maximum capacity of the op cache is 4K ops. -- // Agner, 22.5 µop cache -- // The size of the µop cache is big enough for holding most critical loops. -- // FIXME: PR50584: MachineScheduler/PostRAScheduler have quadradic complexity, -- // with large values here the compilation of certain loops -- // ends up taking way too long. -- // let LoopMicroOpBufferSize = 4096; -- let LoopMicroOpBufferSize = 512; -+ // Assuming a maximum dispatch of 8 ops/cy and a mispredict cost of 12cy from -+ // the op-cache, we limit the loop buffer to 8*12 = 96 to avoid loop unrolling -+ // leading to excessive filling of the op-cache from frontend. -+ let LoopMicroOpBufferSize = 96; - // AMD SOG 19h, 2.6.2 L1 Data Cache - // The L1 data cache has a 4- or 5- cycle integer load-to-use latency. - // AMD SOG 19h, 2.12 L1 Data Cache -diff --git a/llvm/lib/Target/X86/X86ScheduleZnver4.td b/llvm/lib/Target/X86/X86ScheduleZnver4.td -index dac4d8422582..7107dbc63e27 100644 ---- a/lib/Target/X86/X86ScheduleZnver4.td -+++ b/lib/Target/X86/X86ScheduleZnver4.td -@@ -28,17 +28,11 @@ def Znver4Model : SchedMachineModel { - // AMD SOG 19h, 2.9.1 Op Cache - // The op cache is organized as an associative cache with 64 sets and 8 ways. - // At each set-way intersection is an entry containing up to 8 macro ops. -- // The maximum capacity of the op cache is 4K ops. -- // Agner, 22.5 µop cache -- // The size of the µop cache is big enough for holding most critical loops. -- // FIXME: PR50584: MachineScheduler/PostRAScheduler have quadradic complexity, -- // with large values here the compilation of certain loops -- // ends up taking way too long. -- // Ideally for znver4, we should have 6.75K. However we don't add that -- // considerting the impact compile time and prefer using default values -- // instead. -- // Retaining minimal value to influence unrolling as we did for znver3. -- let LoopMicroOpBufferSize = 512; -+ // The maximum capacity of the op cache is 6.75K ops. -+ // Assuming a maximum dispatch of 9 ops/cy and a mispredict cost of 12cy from -+ // the op-cache, we limit the loop buffer to 9*12 = 108 to avoid loop -+ // unrolling leading to excessive filling of the op-cache from frontend. -+ let LoopMicroOpBufferSize = 108; - // AMD SOG 19h, 2.6.2 L1 Data Cache - // The L1 data cache has a 4- or 5- cycle integer load-to-use latency. - // AMD SOG 19h, 2.12 L1 Data Cache -diff --git a/test/Transforms/LoopUnroll/X86/znver3.ll b/test/Transforms/LoopUnroll/X86/znver3.ll -index 30389062a096..b1f1d7d814e6 100644 ---- a/test/Transforms/LoopUnroll/X86/znver3.ll -+++ b/test/Transforms/LoopUnroll/X86/znver3.ll -@@ -73,456 +73,8 @@ define i32 @test(ptr %ary) "target-cpu"="znver3" { - ; CHECK-NEXT: [[INDVARS_IV_NEXT_14:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 15 - ; CHECK-NEXT: [[ARRAYIDX_15:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_14]] - ; CHECK-NEXT: [[VAL_15:%.*]] = load i32, ptr [[ARRAYIDX_15]], align 4 --; CHECK-NEXT: [[SUM_NEXT_15:%.*]] = add nsw i32 [[VAL_15]], [[SUM_NEXT_14]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_15:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 16 --; CHECK-NEXT: [[ARRAYIDX_16:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_15]] --; CHECK-NEXT: [[VAL_16:%.*]] = load i32, ptr [[ARRAYIDX_16]], align 4 --; CHECK-NEXT: [[SUM_NEXT_16:%.*]] = add nsw i32 [[VAL_16]], [[SUM_NEXT_15]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_16:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 17 --; CHECK-NEXT: [[ARRAYIDX_17:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_16]] --; CHECK-NEXT: [[VAL_17:%.*]] = load i32, ptr [[ARRAYIDX_17]], align 4 --; CHECK-NEXT: [[SUM_NEXT_17:%.*]] = add nsw i32 [[VAL_17]], [[SUM_NEXT_16]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_17:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 18 --; CHECK-NEXT: [[ARRAYIDX_18:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_17]] --; CHECK-NEXT: [[VAL_18:%.*]] = load i32, ptr [[ARRAYIDX_18]], align 4 --; CHECK-NEXT: [[SUM_NEXT_18:%.*]] = add nsw i32 [[VAL_18]], [[SUM_NEXT_17]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_18:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 19 --; CHECK-NEXT: [[ARRAYIDX_19:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_18]] --; CHECK-NEXT: [[VAL_19:%.*]] = load i32, ptr [[ARRAYIDX_19]], align 4 --; CHECK-NEXT: [[SUM_NEXT_19:%.*]] = add nsw i32 [[VAL_19]], [[SUM_NEXT_18]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_19:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 20 --; CHECK-NEXT: [[ARRAYIDX_20:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_19]] --; CHECK-NEXT: [[VAL_20:%.*]] = load i32, ptr [[ARRAYIDX_20]], align 4 --; CHECK-NEXT: [[SUM_NEXT_20:%.*]] = add nsw i32 [[VAL_20]], [[SUM_NEXT_19]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_20:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 21 --; CHECK-NEXT: [[ARRAYIDX_21:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_20]] --; CHECK-NEXT: [[VAL_21:%.*]] = load i32, ptr [[ARRAYIDX_21]], align 4 --; CHECK-NEXT: [[SUM_NEXT_21:%.*]] = add nsw i32 [[VAL_21]], [[SUM_NEXT_20]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_21:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 22 --; CHECK-NEXT: [[ARRAYIDX_22:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_21]] --; CHECK-NEXT: [[VAL_22:%.*]] = load i32, ptr [[ARRAYIDX_22]], align 4 --; CHECK-NEXT: [[SUM_NEXT_22:%.*]] = add nsw i32 [[VAL_22]], [[SUM_NEXT_21]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_22:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 23 --; CHECK-NEXT: [[ARRAYIDX_23:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_22]] --; CHECK-NEXT: [[VAL_23:%.*]] = load i32, ptr [[ARRAYIDX_23]], align 4 --; CHECK-NEXT: [[SUM_NEXT_23:%.*]] = add nsw i32 [[VAL_23]], [[SUM_NEXT_22]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_23:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 24 --; CHECK-NEXT: [[ARRAYIDX_24:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_23]] --; CHECK-NEXT: [[VAL_24:%.*]] = load i32, ptr [[ARRAYIDX_24]], align 4 --; CHECK-NEXT: [[SUM_NEXT_24:%.*]] = add nsw i32 [[VAL_24]], [[SUM_NEXT_23]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_24:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 25 --; CHECK-NEXT: [[ARRAYIDX_25:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_24]] --; CHECK-NEXT: [[VAL_25:%.*]] = load i32, ptr [[ARRAYIDX_25]], align 4 --; CHECK-NEXT: [[SUM_NEXT_25:%.*]] = add nsw i32 [[VAL_25]], [[SUM_NEXT_24]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_25:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 26 --; CHECK-NEXT: [[ARRAYIDX_26:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_25]] --; CHECK-NEXT: [[VAL_26:%.*]] = load i32, ptr [[ARRAYIDX_26]], align 4 --; CHECK-NEXT: [[SUM_NEXT_26:%.*]] = add nsw i32 [[VAL_26]], [[SUM_NEXT_25]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_26:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 27 --; CHECK-NEXT: [[ARRAYIDX_27:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_26]] --; CHECK-NEXT: [[VAL_27:%.*]] = load i32, ptr [[ARRAYIDX_27]], align 4 --; CHECK-NEXT: [[SUM_NEXT_27:%.*]] = add nsw i32 [[VAL_27]], [[SUM_NEXT_26]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_27:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 28 --; CHECK-NEXT: [[ARRAYIDX_28:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_27]] --; CHECK-NEXT: [[VAL_28:%.*]] = load i32, ptr [[ARRAYIDX_28]], align 4 --; CHECK-NEXT: [[SUM_NEXT_28:%.*]] = add nsw i32 [[VAL_28]], [[SUM_NEXT_27]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_28:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 29 --; CHECK-NEXT: [[ARRAYIDX_29:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_28]] --; CHECK-NEXT: [[VAL_29:%.*]] = load i32, ptr [[ARRAYIDX_29]], align 4 --; CHECK-NEXT: [[SUM_NEXT_29:%.*]] = add nsw i32 [[VAL_29]], [[SUM_NEXT_28]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_29:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 30 --; CHECK-NEXT: [[ARRAYIDX_30:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_29]] --; CHECK-NEXT: [[VAL_30:%.*]] = load i32, ptr [[ARRAYIDX_30]], align 4 --; CHECK-NEXT: [[SUM_NEXT_30:%.*]] = add nsw i32 [[VAL_30]], [[SUM_NEXT_29]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_30:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 31 --; CHECK-NEXT: [[ARRAYIDX_31:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_30]] --; CHECK-NEXT: [[VAL_31:%.*]] = load i32, ptr [[ARRAYIDX_31]], align 4 --; CHECK-NEXT: [[SUM_NEXT_31:%.*]] = add nsw i32 [[VAL_31]], [[SUM_NEXT_30]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_31:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 32 --; CHECK-NEXT: [[ARRAYIDX_32:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_31]] --; CHECK-NEXT: [[VAL_32:%.*]] = load i32, ptr [[ARRAYIDX_32]], align 4 --; CHECK-NEXT: [[SUM_NEXT_32:%.*]] = add nsw i32 [[VAL_32]], [[SUM_NEXT_31]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_32:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 33 --; CHECK-NEXT: [[ARRAYIDX_33:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_32]] --; CHECK-NEXT: [[VAL_33:%.*]] = load i32, ptr [[ARRAYIDX_33]], align 4 --; CHECK-NEXT: [[SUM_NEXT_33:%.*]] = add nsw i32 [[VAL_33]], [[SUM_NEXT_32]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_33:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 34 --; CHECK-NEXT: [[ARRAYIDX_34:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_33]] --; CHECK-NEXT: [[VAL_34:%.*]] = load i32, ptr [[ARRAYIDX_34]], align 4 --; CHECK-NEXT: [[SUM_NEXT_34:%.*]] = add nsw i32 [[VAL_34]], [[SUM_NEXT_33]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_34:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 35 --; CHECK-NEXT: [[ARRAYIDX_35:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_34]] --; CHECK-NEXT: [[VAL_35:%.*]] = load i32, ptr [[ARRAYIDX_35]], align 4 --; CHECK-NEXT: [[SUM_NEXT_35:%.*]] = add nsw i32 [[VAL_35]], [[SUM_NEXT_34]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_35:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 36 --; CHECK-NEXT: [[ARRAYIDX_36:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_35]] --; CHECK-NEXT: [[VAL_36:%.*]] = load i32, ptr [[ARRAYIDX_36]], align 4 --; CHECK-NEXT: [[SUM_NEXT_36:%.*]] = add nsw i32 [[VAL_36]], [[SUM_NEXT_35]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_36:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 37 --; CHECK-NEXT: [[ARRAYIDX_37:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_36]] --; CHECK-NEXT: [[VAL_37:%.*]] = load i32, ptr [[ARRAYIDX_37]], align 4 --; CHECK-NEXT: [[SUM_NEXT_37:%.*]] = add nsw i32 [[VAL_37]], [[SUM_NEXT_36]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_37:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 38 --; CHECK-NEXT: [[ARRAYIDX_38:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_37]] --; CHECK-NEXT: [[VAL_38:%.*]] = load i32, ptr [[ARRAYIDX_38]], align 4 --; CHECK-NEXT: [[SUM_NEXT_38:%.*]] = add nsw i32 [[VAL_38]], [[SUM_NEXT_37]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_38:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 39 --; CHECK-NEXT: [[ARRAYIDX_39:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_38]] --; CHECK-NEXT: [[VAL_39:%.*]] = load i32, ptr [[ARRAYIDX_39]], align 4 --; CHECK-NEXT: [[SUM_NEXT_39:%.*]] = add nsw i32 [[VAL_39]], [[SUM_NEXT_38]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_39:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 40 --; CHECK-NEXT: [[ARRAYIDX_40:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_39]] --; CHECK-NEXT: [[VAL_40:%.*]] = load i32, ptr [[ARRAYIDX_40]], align 4 --; CHECK-NEXT: [[SUM_NEXT_40:%.*]] = add nsw i32 [[VAL_40]], [[SUM_NEXT_39]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_40:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 41 --; CHECK-NEXT: [[ARRAYIDX_41:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_40]] --; CHECK-NEXT: [[VAL_41:%.*]] = load i32, ptr [[ARRAYIDX_41]], align 4 --; CHECK-NEXT: [[SUM_NEXT_41:%.*]] = add nsw i32 [[VAL_41]], [[SUM_NEXT_40]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_41:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 42 --; CHECK-NEXT: [[ARRAYIDX_42:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_41]] --; CHECK-NEXT: [[VAL_42:%.*]] = load i32, ptr [[ARRAYIDX_42]], align 4 --; CHECK-NEXT: [[SUM_NEXT_42:%.*]] = add nsw i32 [[VAL_42]], [[SUM_NEXT_41]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_42:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 43 --; CHECK-NEXT: [[ARRAYIDX_43:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_42]] --; CHECK-NEXT: [[VAL_43:%.*]] = load i32, ptr [[ARRAYIDX_43]], align 4 --; CHECK-NEXT: [[SUM_NEXT_43:%.*]] = add nsw i32 [[VAL_43]], [[SUM_NEXT_42]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_43:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 44 --; CHECK-NEXT: [[ARRAYIDX_44:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_43]] --; CHECK-NEXT: [[VAL_44:%.*]] = load i32, ptr [[ARRAYIDX_44]], align 4 --; CHECK-NEXT: [[SUM_NEXT_44:%.*]] = add nsw i32 [[VAL_44]], [[SUM_NEXT_43]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_44:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 45 --; CHECK-NEXT: [[ARRAYIDX_45:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_44]] --; CHECK-NEXT: [[VAL_45:%.*]] = load i32, ptr [[ARRAYIDX_45]], align 4 --; CHECK-NEXT: [[SUM_NEXT_45:%.*]] = add nsw i32 [[VAL_45]], [[SUM_NEXT_44]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_45:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 46 --; CHECK-NEXT: [[ARRAYIDX_46:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_45]] --; CHECK-NEXT: [[VAL_46:%.*]] = load i32, ptr [[ARRAYIDX_46]], align 4 --; CHECK-NEXT: [[SUM_NEXT_46:%.*]] = add nsw i32 [[VAL_46]], [[SUM_NEXT_45]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_46:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 47 --; CHECK-NEXT: [[ARRAYIDX_47:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_46]] --; CHECK-NEXT: [[VAL_47:%.*]] = load i32, ptr [[ARRAYIDX_47]], align 4 --; CHECK-NEXT: [[SUM_NEXT_47:%.*]] = add nsw i32 [[VAL_47]], [[SUM_NEXT_46]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_47:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 48 --; CHECK-NEXT: [[ARRAYIDX_48:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_47]] --; CHECK-NEXT: [[VAL_48:%.*]] = load i32, ptr [[ARRAYIDX_48]], align 4 --; CHECK-NEXT: [[SUM_NEXT_48:%.*]] = add nsw i32 [[VAL_48]], [[SUM_NEXT_47]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_48:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 49 --; CHECK-NEXT: [[ARRAYIDX_49:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_48]] --; CHECK-NEXT: [[VAL_49:%.*]] = load i32, ptr [[ARRAYIDX_49]], align 4 --; CHECK-NEXT: [[SUM_NEXT_49:%.*]] = add nsw i32 [[VAL_49]], [[SUM_NEXT_48]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_49:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 50 --; CHECK-NEXT: [[ARRAYIDX_50:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_49]] --; CHECK-NEXT: [[VAL_50:%.*]] = load i32, ptr [[ARRAYIDX_50]], align 4 --; CHECK-NEXT: [[SUM_NEXT_50:%.*]] = add nsw i32 [[VAL_50]], [[SUM_NEXT_49]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_50:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 51 --; CHECK-NEXT: [[ARRAYIDX_51:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_50]] --; CHECK-NEXT: [[VAL_51:%.*]] = load i32, ptr [[ARRAYIDX_51]], align 4 --; CHECK-NEXT: [[SUM_NEXT_51:%.*]] = add nsw i32 [[VAL_51]], [[SUM_NEXT_50]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_51:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 52 --; CHECK-NEXT: [[ARRAYIDX_52:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_51]] --; CHECK-NEXT: [[VAL_52:%.*]] = load i32, ptr [[ARRAYIDX_52]], align 4 --; CHECK-NEXT: [[SUM_NEXT_52:%.*]] = add nsw i32 [[VAL_52]], [[SUM_NEXT_51]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_52:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 53 --; CHECK-NEXT: [[ARRAYIDX_53:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_52]] --; CHECK-NEXT: [[VAL_53:%.*]] = load i32, ptr [[ARRAYIDX_53]], align 4 --; CHECK-NEXT: [[SUM_NEXT_53:%.*]] = add nsw i32 [[VAL_53]], [[SUM_NEXT_52]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_53:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 54 --; CHECK-NEXT: [[ARRAYIDX_54:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_53]] --; CHECK-NEXT: [[VAL_54:%.*]] = load i32, ptr [[ARRAYIDX_54]], align 4 --; CHECK-NEXT: [[SUM_NEXT_54:%.*]] = add nsw i32 [[VAL_54]], [[SUM_NEXT_53]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_54:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 55 --; CHECK-NEXT: [[ARRAYIDX_55:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_54]] --; CHECK-NEXT: [[VAL_55:%.*]] = load i32, ptr [[ARRAYIDX_55]], align 4 --; CHECK-NEXT: [[SUM_NEXT_55:%.*]] = add nsw i32 [[VAL_55]], [[SUM_NEXT_54]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_55:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 56 --; CHECK-NEXT: [[ARRAYIDX_56:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_55]] --; CHECK-NEXT: [[VAL_56:%.*]] = load i32, ptr [[ARRAYIDX_56]], align 4 --; CHECK-NEXT: [[SUM_NEXT_56:%.*]] = add nsw i32 [[VAL_56]], [[SUM_NEXT_55]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_56:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 57 --; CHECK-NEXT: [[ARRAYIDX_57:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_56]] --; CHECK-NEXT: [[VAL_57:%.*]] = load i32, ptr [[ARRAYIDX_57]], align 4 --; CHECK-NEXT: [[SUM_NEXT_57:%.*]] = add nsw i32 [[VAL_57]], [[SUM_NEXT_56]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_57:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 58 --; CHECK-NEXT: [[ARRAYIDX_58:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_57]] --; CHECK-NEXT: [[VAL_58:%.*]] = load i32, ptr [[ARRAYIDX_58]], align 4 --; CHECK-NEXT: [[SUM_NEXT_58:%.*]] = add nsw i32 [[VAL_58]], [[SUM_NEXT_57]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_58:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 59 --; CHECK-NEXT: [[ARRAYIDX_59:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_58]] --; CHECK-NEXT: [[VAL_59:%.*]] = load i32, ptr [[ARRAYIDX_59]], align 4 --; CHECK-NEXT: [[SUM_NEXT_59:%.*]] = add nsw i32 [[VAL_59]], [[SUM_NEXT_58]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_59:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 60 --; CHECK-NEXT: [[ARRAYIDX_60:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_59]] --; CHECK-NEXT: [[VAL_60:%.*]] = load i32, ptr [[ARRAYIDX_60]], align 4 --; CHECK-NEXT: [[SUM_NEXT_60:%.*]] = add nsw i32 [[VAL_60]], [[SUM_NEXT_59]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_60:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 61 --; CHECK-NEXT: [[ARRAYIDX_61:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_60]] --; CHECK-NEXT: [[VAL_61:%.*]] = load i32, ptr [[ARRAYIDX_61]], align 4 --; CHECK-NEXT: [[SUM_NEXT_61:%.*]] = add nsw i32 [[VAL_61]], [[SUM_NEXT_60]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_61:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 62 --; CHECK-NEXT: [[ARRAYIDX_62:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_61]] --; CHECK-NEXT: [[VAL_62:%.*]] = load i32, ptr [[ARRAYIDX_62]], align 4 --; CHECK-NEXT: [[SUM_NEXT_62:%.*]] = add nsw i32 [[VAL_62]], [[SUM_NEXT_61]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_62:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 63 --; CHECK-NEXT: [[ARRAYIDX_63:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_62]] --; CHECK-NEXT: [[VAL_63:%.*]] = load i32, ptr [[ARRAYIDX_63]], align 4 --; CHECK-NEXT: [[SUM_NEXT_63:%.*]] = add nsw i32 [[VAL_63]], [[SUM_NEXT_62]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_63:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 64 --; CHECK-NEXT: [[ARRAYIDX_64:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_63]] --; CHECK-NEXT: [[VAL_64:%.*]] = load i32, ptr [[ARRAYIDX_64]], align 4 --; CHECK-NEXT: [[SUM_NEXT_64:%.*]] = add nsw i32 [[VAL_64]], [[SUM_NEXT_63]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_64:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 65 --; CHECK-NEXT: [[ARRAYIDX_65:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_64]] --; CHECK-NEXT: [[VAL_65:%.*]] = load i32, ptr [[ARRAYIDX_65]], align 4 --; CHECK-NEXT: [[SUM_NEXT_65:%.*]] = add nsw i32 [[VAL_65]], [[SUM_NEXT_64]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_65:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 66 --; CHECK-NEXT: [[ARRAYIDX_66:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_65]] --; CHECK-NEXT: [[VAL_66:%.*]] = load i32, ptr [[ARRAYIDX_66]], align 4 --; CHECK-NEXT: [[SUM_NEXT_66:%.*]] = add nsw i32 [[VAL_66]], [[SUM_NEXT_65]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_66:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 67 --; CHECK-NEXT: [[ARRAYIDX_67:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_66]] --; CHECK-NEXT: [[VAL_67:%.*]] = load i32, ptr [[ARRAYIDX_67]], align 4 --; CHECK-NEXT: [[SUM_NEXT_67:%.*]] = add nsw i32 [[VAL_67]], [[SUM_NEXT_66]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_67:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 68 --; CHECK-NEXT: [[ARRAYIDX_68:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_67]] --; CHECK-NEXT: [[VAL_68:%.*]] = load i32, ptr [[ARRAYIDX_68]], align 4 --; CHECK-NEXT: [[SUM_NEXT_68:%.*]] = add nsw i32 [[VAL_68]], [[SUM_NEXT_67]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_68:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 69 --; CHECK-NEXT: [[ARRAYIDX_69:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_68]] --; CHECK-NEXT: [[VAL_69:%.*]] = load i32, ptr [[ARRAYIDX_69]], align 4 --; CHECK-NEXT: [[SUM_NEXT_69:%.*]] = add nsw i32 [[VAL_69]], [[SUM_NEXT_68]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_69:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 70 --; CHECK-NEXT: [[ARRAYIDX_70:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_69]] --; CHECK-NEXT: [[VAL_70:%.*]] = load i32, ptr [[ARRAYIDX_70]], align 4 --; CHECK-NEXT: [[SUM_NEXT_70:%.*]] = add nsw i32 [[VAL_70]], [[SUM_NEXT_69]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_70:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 71 --; CHECK-NEXT: [[ARRAYIDX_71:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_70]] --; CHECK-NEXT: [[VAL_71:%.*]] = load i32, ptr [[ARRAYIDX_71]], align 4 --; CHECK-NEXT: [[SUM_NEXT_71:%.*]] = add nsw i32 [[VAL_71]], [[SUM_NEXT_70]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_71:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 72 --; CHECK-NEXT: [[ARRAYIDX_72:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_71]] --; CHECK-NEXT: [[VAL_72:%.*]] = load i32, ptr [[ARRAYIDX_72]], align 4 --; CHECK-NEXT: [[SUM_NEXT_72:%.*]] = add nsw i32 [[VAL_72]], [[SUM_NEXT_71]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_72:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 73 --; CHECK-NEXT: [[ARRAYIDX_73:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_72]] --; CHECK-NEXT: [[VAL_73:%.*]] = load i32, ptr [[ARRAYIDX_73]], align 4 --; CHECK-NEXT: [[SUM_NEXT_73:%.*]] = add nsw i32 [[VAL_73]], [[SUM_NEXT_72]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_73:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 74 --; CHECK-NEXT: [[ARRAYIDX_74:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_73]] --; CHECK-NEXT: [[VAL_74:%.*]] = load i32, ptr [[ARRAYIDX_74]], align 4 --; CHECK-NEXT: [[SUM_NEXT_74:%.*]] = add nsw i32 [[VAL_74]], [[SUM_NEXT_73]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_74:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 75 --; CHECK-NEXT: [[ARRAYIDX_75:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_74]] --; CHECK-NEXT: [[VAL_75:%.*]] = load i32, ptr [[ARRAYIDX_75]], align 4 --; CHECK-NEXT: [[SUM_NEXT_75:%.*]] = add nsw i32 [[VAL_75]], [[SUM_NEXT_74]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_75:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 76 --; CHECK-NEXT: [[ARRAYIDX_76:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_75]] --; CHECK-NEXT: [[VAL_76:%.*]] = load i32, ptr [[ARRAYIDX_76]], align 4 --; CHECK-NEXT: [[SUM_NEXT_76:%.*]] = add nsw i32 [[VAL_76]], [[SUM_NEXT_75]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_76:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 77 --; CHECK-NEXT: [[ARRAYIDX_77:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_76]] --; CHECK-NEXT: [[VAL_77:%.*]] = load i32, ptr [[ARRAYIDX_77]], align 4 --; CHECK-NEXT: [[SUM_NEXT_77:%.*]] = add nsw i32 [[VAL_77]], [[SUM_NEXT_76]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_77:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 78 --; CHECK-NEXT: [[ARRAYIDX_78:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_77]] --; CHECK-NEXT: [[VAL_78:%.*]] = load i32, ptr [[ARRAYIDX_78]], align 4 --; CHECK-NEXT: [[SUM_NEXT_78:%.*]] = add nsw i32 [[VAL_78]], [[SUM_NEXT_77]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_78:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 79 --; CHECK-NEXT: [[ARRAYIDX_79:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_78]] --; CHECK-NEXT: [[VAL_79:%.*]] = load i32, ptr [[ARRAYIDX_79]], align 4 --; CHECK-NEXT: [[SUM_NEXT_79:%.*]] = add nsw i32 [[VAL_79]], [[SUM_NEXT_78]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_79:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 80 --; CHECK-NEXT: [[ARRAYIDX_80:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_79]] --; CHECK-NEXT: [[VAL_80:%.*]] = load i32, ptr [[ARRAYIDX_80]], align 4 --; CHECK-NEXT: [[SUM_NEXT_80:%.*]] = add nsw i32 [[VAL_80]], [[SUM_NEXT_79]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_80:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 81 --; CHECK-NEXT: [[ARRAYIDX_81:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_80]] --; CHECK-NEXT: [[VAL_81:%.*]] = load i32, ptr [[ARRAYIDX_81]], align 4 --; CHECK-NEXT: [[SUM_NEXT_81:%.*]] = add nsw i32 [[VAL_81]], [[SUM_NEXT_80]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_81:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 82 --; CHECK-NEXT: [[ARRAYIDX_82:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_81]] --; CHECK-NEXT: [[VAL_82:%.*]] = load i32, ptr [[ARRAYIDX_82]], align 4 --; CHECK-NEXT: [[SUM_NEXT_82:%.*]] = add nsw i32 [[VAL_82]], [[SUM_NEXT_81]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_82:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 83 --; CHECK-NEXT: [[ARRAYIDX_83:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_82]] --; CHECK-NEXT: [[VAL_83:%.*]] = load i32, ptr [[ARRAYIDX_83]], align 4 --; CHECK-NEXT: [[SUM_NEXT_83:%.*]] = add nsw i32 [[VAL_83]], [[SUM_NEXT_82]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_83:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 84 --; CHECK-NEXT: [[ARRAYIDX_84:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_83]] --; CHECK-NEXT: [[VAL_84:%.*]] = load i32, ptr [[ARRAYIDX_84]], align 4 --; CHECK-NEXT: [[SUM_NEXT_84:%.*]] = add nsw i32 [[VAL_84]], [[SUM_NEXT_83]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_84:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 85 --; CHECK-NEXT: [[ARRAYIDX_85:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_84]] --; CHECK-NEXT: [[VAL_85:%.*]] = load i32, ptr [[ARRAYIDX_85]], align 4 --; CHECK-NEXT: [[SUM_NEXT_85:%.*]] = add nsw i32 [[VAL_85]], [[SUM_NEXT_84]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_85:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 86 --; CHECK-NEXT: [[ARRAYIDX_86:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_85]] --; CHECK-NEXT: [[VAL_86:%.*]] = load i32, ptr [[ARRAYIDX_86]], align 4 --; CHECK-NEXT: [[SUM_NEXT_86:%.*]] = add nsw i32 [[VAL_86]], [[SUM_NEXT_85]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_86:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 87 --; CHECK-NEXT: [[ARRAYIDX_87:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_86]] --; CHECK-NEXT: [[VAL_87:%.*]] = load i32, ptr [[ARRAYIDX_87]], align 4 --; CHECK-NEXT: [[SUM_NEXT_87:%.*]] = add nsw i32 [[VAL_87]], [[SUM_NEXT_86]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_87:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 88 --; CHECK-NEXT: [[ARRAYIDX_88:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_87]] --; CHECK-NEXT: [[VAL_88:%.*]] = load i32, ptr [[ARRAYIDX_88]], align 4 --; CHECK-NEXT: [[SUM_NEXT_88:%.*]] = add nsw i32 [[VAL_88]], [[SUM_NEXT_87]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_88:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 89 --; CHECK-NEXT: [[ARRAYIDX_89:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_88]] --; CHECK-NEXT: [[VAL_89:%.*]] = load i32, ptr [[ARRAYIDX_89]], align 4 --; CHECK-NEXT: [[SUM_NEXT_89:%.*]] = add nsw i32 [[VAL_89]], [[SUM_NEXT_88]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_89:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 90 --; CHECK-NEXT: [[ARRAYIDX_90:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_89]] --; CHECK-NEXT: [[VAL_90:%.*]] = load i32, ptr [[ARRAYIDX_90]], align 4 --; CHECK-NEXT: [[SUM_NEXT_90:%.*]] = add nsw i32 [[VAL_90]], [[SUM_NEXT_89]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_90:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 91 --; CHECK-NEXT: [[ARRAYIDX_91:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_90]] --; CHECK-NEXT: [[VAL_91:%.*]] = load i32, ptr [[ARRAYIDX_91]], align 4 --; CHECK-NEXT: [[SUM_NEXT_91:%.*]] = add nsw i32 [[VAL_91]], [[SUM_NEXT_90]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_91:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 92 --; CHECK-NEXT: [[ARRAYIDX_92:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_91]] --; CHECK-NEXT: [[VAL_92:%.*]] = load i32, ptr [[ARRAYIDX_92]], align 4 --; CHECK-NEXT: [[SUM_NEXT_92:%.*]] = add nsw i32 [[VAL_92]], [[SUM_NEXT_91]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_92:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 93 --; CHECK-NEXT: [[ARRAYIDX_93:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_92]] --; CHECK-NEXT: [[VAL_93:%.*]] = load i32, ptr [[ARRAYIDX_93]], align 4 --; CHECK-NEXT: [[SUM_NEXT_93:%.*]] = add nsw i32 [[VAL_93]], [[SUM_NEXT_92]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_93:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 94 --; CHECK-NEXT: [[ARRAYIDX_94:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_93]] --; CHECK-NEXT: [[VAL_94:%.*]] = load i32, ptr [[ARRAYIDX_94]], align 4 --; CHECK-NEXT: [[SUM_NEXT_94:%.*]] = add nsw i32 [[VAL_94]], [[SUM_NEXT_93]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_94:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 95 --; CHECK-NEXT: [[ARRAYIDX_95:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_94]] --; CHECK-NEXT: [[VAL_95:%.*]] = load i32, ptr [[ARRAYIDX_95]], align 4 --; CHECK-NEXT: [[SUM_NEXT_95:%.*]] = add nsw i32 [[VAL_95]], [[SUM_NEXT_94]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_95:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 96 --; CHECK-NEXT: [[ARRAYIDX_96:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_95]] --; CHECK-NEXT: [[VAL_96:%.*]] = load i32, ptr [[ARRAYIDX_96]], align 4 --; CHECK-NEXT: [[SUM_NEXT_96:%.*]] = add nsw i32 [[VAL_96]], [[SUM_NEXT_95]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_96:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 97 --; CHECK-NEXT: [[ARRAYIDX_97:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_96]] --; CHECK-NEXT: [[VAL_97:%.*]] = load i32, ptr [[ARRAYIDX_97]], align 4 --; CHECK-NEXT: [[SUM_NEXT_97:%.*]] = add nsw i32 [[VAL_97]], [[SUM_NEXT_96]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_97:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 98 --; CHECK-NEXT: [[ARRAYIDX_98:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_97]] --; CHECK-NEXT: [[VAL_98:%.*]] = load i32, ptr [[ARRAYIDX_98]], align 4 --; CHECK-NEXT: [[SUM_NEXT_98:%.*]] = add nsw i32 [[VAL_98]], [[SUM_NEXT_97]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_98:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 99 --; CHECK-NEXT: [[ARRAYIDX_99:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_98]] --; CHECK-NEXT: [[VAL_99:%.*]] = load i32, ptr [[ARRAYIDX_99]], align 4 --; CHECK-NEXT: [[SUM_NEXT_99:%.*]] = add nsw i32 [[VAL_99]], [[SUM_NEXT_98]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_99:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 100 --; CHECK-NEXT: [[ARRAYIDX_100:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_99]] --; CHECK-NEXT: [[VAL_100:%.*]] = load i32, ptr [[ARRAYIDX_100]], align 4 --; CHECK-NEXT: [[SUM_NEXT_100:%.*]] = add nsw i32 [[VAL_100]], [[SUM_NEXT_99]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_100:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 101 --; CHECK-NEXT: [[ARRAYIDX_101:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_100]] --; CHECK-NEXT: [[VAL_101:%.*]] = load i32, ptr [[ARRAYIDX_101]], align 4 --; CHECK-NEXT: [[SUM_NEXT_101:%.*]] = add nsw i32 [[VAL_101]], [[SUM_NEXT_100]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_101:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 102 --; CHECK-NEXT: [[ARRAYIDX_102:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_101]] --; CHECK-NEXT: [[VAL_102:%.*]] = load i32, ptr [[ARRAYIDX_102]], align 4 --; CHECK-NEXT: [[SUM_NEXT_102:%.*]] = add nsw i32 [[VAL_102]], [[SUM_NEXT_101]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_102:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 103 --; CHECK-NEXT: [[ARRAYIDX_103:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_102]] --; CHECK-NEXT: [[VAL_103:%.*]] = load i32, ptr [[ARRAYIDX_103]], align 4 --; CHECK-NEXT: [[SUM_NEXT_103:%.*]] = add nsw i32 [[VAL_103]], [[SUM_NEXT_102]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_103:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 104 --; CHECK-NEXT: [[ARRAYIDX_104:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_103]] --; CHECK-NEXT: [[VAL_104:%.*]] = load i32, ptr [[ARRAYIDX_104]], align 4 --; CHECK-NEXT: [[SUM_NEXT_104:%.*]] = add nsw i32 [[VAL_104]], [[SUM_NEXT_103]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_104:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 105 --; CHECK-NEXT: [[ARRAYIDX_105:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_104]] --; CHECK-NEXT: [[VAL_105:%.*]] = load i32, ptr [[ARRAYIDX_105]], align 4 --; CHECK-NEXT: [[SUM_NEXT_105:%.*]] = add nsw i32 [[VAL_105]], [[SUM_NEXT_104]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_105:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 106 --; CHECK-NEXT: [[ARRAYIDX_106:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_105]] --; CHECK-NEXT: [[VAL_106:%.*]] = load i32, ptr [[ARRAYIDX_106]], align 4 --; CHECK-NEXT: [[SUM_NEXT_106:%.*]] = add nsw i32 [[VAL_106]], [[SUM_NEXT_105]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_106:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 107 --; CHECK-NEXT: [[ARRAYIDX_107:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_106]] --; CHECK-NEXT: [[VAL_107:%.*]] = load i32, ptr [[ARRAYIDX_107]], align 4 --; CHECK-NEXT: [[SUM_NEXT_107:%.*]] = add nsw i32 [[VAL_107]], [[SUM_NEXT_106]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_107:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 108 --; CHECK-NEXT: [[ARRAYIDX_108:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_107]] --; CHECK-NEXT: [[VAL_108:%.*]] = load i32, ptr [[ARRAYIDX_108]], align 4 --; CHECK-NEXT: [[SUM_NEXT_108:%.*]] = add nsw i32 [[VAL_108]], [[SUM_NEXT_107]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_108:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 109 --; CHECK-NEXT: [[ARRAYIDX_109:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_108]] --; CHECK-NEXT: [[VAL_109:%.*]] = load i32, ptr [[ARRAYIDX_109]], align 4 --; CHECK-NEXT: [[SUM_NEXT_109:%.*]] = add nsw i32 [[VAL_109]], [[SUM_NEXT_108]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_109:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 110 --; CHECK-NEXT: [[ARRAYIDX_110:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_109]] --; CHECK-NEXT: [[VAL_110:%.*]] = load i32, ptr [[ARRAYIDX_110]], align 4 --; CHECK-NEXT: [[SUM_NEXT_110:%.*]] = add nsw i32 [[VAL_110]], [[SUM_NEXT_109]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_110:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 111 --; CHECK-NEXT: [[ARRAYIDX_111:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_110]] --; CHECK-NEXT: [[VAL_111:%.*]] = load i32, ptr [[ARRAYIDX_111]], align 4 --; CHECK-NEXT: [[SUM_NEXT_111:%.*]] = add nsw i32 [[VAL_111]], [[SUM_NEXT_110]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_111:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 112 --; CHECK-NEXT: [[ARRAYIDX_112:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_111]] --; CHECK-NEXT: [[VAL_112:%.*]] = load i32, ptr [[ARRAYIDX_112]], align 4 --; CHECK-NEXT: [[SUM_NEXT_112:%.*]] = add nsw i32 [[VAL_112]], [[SUM_NEXT_111]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_112:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 113 --; CHECK-NEXT: [[ARRAYIDX_113:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_112]] --; CHECK-NEXT: [[VAL_113:%.*]] = load i32, ptr [[ARRAYIDX_113]], align 4 --; CHECK-NEXT: [[SUM_NEXT_113:%.*]] = add nsw i32 [[VAL_113]], [[SUM_NEXT_112]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_113:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 114 --; CHECK-NEXT: [[ARRAYIDX_114:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_113]] --; CHECK-NEXT: [[VAL_114:%.*]] = load i32, ptr [[ARRAYIDX_114]], align 4 --; CHECK-NEXT: [[SUM_NEXT_114:%.*]] = add nsw i32 [[VAL_114]], [[SUM_NEXT_113]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_114:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 115 --; CHECK-NEXT: [[ARRAYIDX_115:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_114]] --; CHECK-NEXT: [[VAL_115:%.*]] = load i32, ptr [[ARRAYIDX_115]], align 4 --; CHECK-NEXT: [[SUM_NEXT_115:%.*]] = add nsw i32 [[VAL_115]], [[SUM_NEXT_114]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_115:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 116 --; CHECK-NEXT: [[ARRAYIDX_116:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_115]] --; CHECK-NEXT: [[VAL_116:%.*]] = load i32, ptr [[ARRAYIDX_116]], align 4 --; CHECK-NEXT: [[SUM_NEXT_116:%.*]] = add nsw i32 [[VAL_116]], [[SUM_NEXT_115]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_116:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 117 --; CHECK-NEXT: [[ARRAYIDX_117:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_116]] --; CHECK-NEXT: [[VAL_117:%.*]] = load i32, ptr [[ARRAYIDX_117]], align 4 --; CHECK-NEXT: [[SUM_NEXT_117:%.*]] = add nsw i32 [[VAL_117]], [[SUM_NEXT_116]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_117:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 118 --; CHECK-NEXT: [[ARRAYIDX_118:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_117]] --; CHECK-NEXT: [[VAL_118:%.*]] = load i32, ptr [[ARRAYIDX_118]], align 4 --; CHECK-NEXT: [[SUM_NEXT_118:%.*]] = add nsw i32 [[VAL_118]], [[SUM_NEXT_117]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_118:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 119 --; CHECK-NEXT: [[ARRAYIDX_119:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_118]] --; CHECK-NEXT: [[VAL_119:%.*]] = load i32, ptr [[ARRAYIDX_119]], align 4 --; CHECK-NEXT: [[SUM_NEXT_119:%.*]] = add nsw i32 [[VAL_119]], [[SUM_NEXT_118]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_119:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 120 --; CHECK-NEXT: [[ARRAYIDX_120:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_119]] --; CHECK-NEXT: [[VAL_120:%.*]] = load i32, ptr [[ARRAYIDX_120]], align 4 --; CHECK-NEXT: [[SUM_NEXT_120:%.*]] = add nsw i32 [[VAL_120]], [[SUM_NEXT_119]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_120:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 121 --; CHECK-NEXT: [[ARRAYIDX_121:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_120]] --; CHECK-NEXT: [[VAL_121:%.*]] = load i32, ptr [[ARRAYIDX_121]], align 4 --; CHECK-NEXT: [[SUM_NEXT_121:%.*]] = add nsw i32 [[VAL_121]], [[SUM_NEXT_120]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_121:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 122 --; CHECK-NEXT: [[ARRAYIDX_122:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_121]] --; CHECK-NEXT: [[VAL_122:%.*]] = load i32, ptr [[ARRAYIDX_122]], align 4 --; CHECK-NEXT: [[SUM_NEXT_122:%.*]] = add nsw i32 [[VAL_122]], [[SUM_NEXT_121]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_122:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 123 --; CHECK-NEXT: [[ARRAYIDX_123:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_122]] --; CHECK-NEXT: [[VAL_123:%.*]] = load i32, ptr [[ARRAYIDX_123]], align 4 --; CHECK-NEXT: [[SUM_NEXT_123:%.*]] = add nsw i32 [[VAL_123]], [[SUM_NEXT_122]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_123:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 124 --; CHECK-NEXT: [[ARRAYIDX_124:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_123]] --; CHECK-NEXT: [[VAL_124:%.*]] = load i32, ptr [[ARRAYIDX_124]], align 4 --; CHECK-NEXT: [[SUM_NEXT_124:%.*]] = add nsw i32 [[VAL_124]], [[SUM_NEXT_123]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_124:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 125 --; CHECK-NEXT: [[ARRAYIDX_125:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_124]] --; CHECK-NEXT: [[VAL_125:%.*]] = load i32, ptr [[ARRAYIDX_125]], align 4 --; CHECK-NEXT: [[SUM_NEXT_125:%.*]] = add nsw i32 [[VAL_125]], [[SUM_NEXT_124]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_125:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 126 --; CHECK-NEXT: [[ARRAYIDX_126:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_125]] --; CHECK-NEXT: [[VAL_126:%.*]] = load i32, ptr [[ARRAYIDX_126]], align 4 --; CHECK-NEXT: [[SUM_NEXT_126:%.*]] = add nsw i32 [[VAL_126]], [[SUM_NEXT_125]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_126:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 127 --; CHECK-NEXT: [[ARRAYIDX_127:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_126]] --; CHECK-NEXT: [[VAL_127:%.*]] = load i32, ptr [[ARRAYIDX_127]], align 4 --; CHECK-NEXT: [[SUM_NEXT_127]] = add nsw i32 [[VAL_127]], [[SUM_NEXT_126]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_127]] = add nuw nsw i64 [[INDVARS_IV]], 128 -+; CHECK-NEXT: [[SUM_NEXT_127]] = add nsw i32 [[VAL_15]], [[SUM_NEXT_14]] -+; CHECK-NEXT: [[INDVARS_IV_NEXT_127]] = add nuw nsw i64 [[INDVARS_IV]], 16 - ; CHECK-NEXT: [[EXITCOND_NOT_127:%.*]] = icmp eq i64 [[INDVARS_IV_NEXT_127]], 8192 - ; CHECK-NEXT: br i1 [[EXITCOND_NOT_127]], label [[FOR_COND_CLEANUP:%.*]], label [[FOR_BODY]] - ; CHECK: for.cond.cleanup: -@@ -550,532 +102,68 @@ define i32 @test2(ptr %ary, i64 %n) "target-cpu"="znver3" { - ; CHECK-LABEL: define i32 @test2( - ; CHECK-SAME: ptr [[ARY:%.*]], i64 [[N:%.*]]) #[[ATTR0]] { - ; CHECK-NEXT: entry: --; CHECK-NEXT: [[TMP0:%.*]] = add i64 [[N]], -1 --; CHECK-NEXT: [[XTRAITER:%.*]] = and i64 [[N]], 7 --; CHECK-NEXT: [[TMP1:%.*]] = icmp ult i64 [[TMP0]], 7 --; CHECK-NEXT: br i1 [[TMP1]], label [[FOR_COND_CLEANUP_UNR_LCSSA:%.*]], label [[ENTRY_NEW:%.*]] --; CHECK: entry.new: --; CHECK-NEXT: [[UNROLL_ITER:%.*]] = sub i64 [[N]], [[XTRAITER]] - ; CHECK-NEXT: br label [[FOR_BODY:%.*]] - ; CHECK: for.body: --; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ 0, [[ENTRY_NEW]] ], [ [[INDVARS_IV_NEXT_7:%.*]], [[FOR_BODY]] ] --; CHECK-NEXT: [[SUM:%.*]] = phi i32 [ 0, [[ENTRY_NEW]] ], [ [[SUM_NEXT_7:%.*]], [[FOR_BODY]] ] --; CHECK-NEXT: [[NITER:%.*]] = phi i64 [ 0, [[ENTRY_NEW]] ], [ [[NITER_NEXT_7:%.*]], [[FOR_BODY]] ] --; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV]] --; CHECK-NEXT: [[VAL:%.*]] = load i32, ptr [[ARRAYIDX]], align 4 --; CHECK-NEXT: [[DUMMY1:%.*]] = mul i32 [[VAL]], [[VAL]] --; CHECK-NEXT: [[DUMMY2:%.*]] = mul i32 [[DUMMY1]], [[DUMMY1]] --; CHECK-NEXT: [[DUMMY3:%.*]] = mul i32 [[DUMMY2]], [[DUMMY2]] --; CHECK-NEXT: [[DUMMY4:%.*]] = mul i32 [[DUMMY3]], [[DUMMY3]] -+; CHECK-NEXT: [[INDVARS_IV_EPIL:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[INDVARS_IV_NEXT_EPIL:%.*]], [[FOR_BODY]] ] -+; CHECK-NEXT: [[SUM_EPIL:%.*]] = phi i32 [ 0, [[ENTRY]] ], [ [[SUM_NEXT_EPIL:%.*]], [[FOR_BODY]] ] -+; CHECK-NEXT: [[ARRAYIDX_EPIL:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_EPIL]] -+; CHECK-NEXT: [[VAL_EPIL:%.*]] = load i32, ptr [[ARRAYIDX_EPIL]], align 4 -+; CHECK-NEXT: [[DUMMY21:%.*]] = mul i32 [[VAL_EPIL]], [[VAL_EPIL]] -+; CHECK-NEXT: [[DUMMY27:%.*]] = mul i32 [[DUMMY21]], [[DUMMY21]] -+; CHECK-NEXT: [[DUMMY28:%.*]] = mul i32 [[DUMMY27]], [[DUMMY27]] -+; CHECK-NEXT: [[DUMMY4:%.*]] = mul i32 [[DUMMY28]], [[DUMMY28]] - ; CHECK-NEXT: [[DUMMY5:%.*]] = mul i32 [[DUMMY4]], [[DUMMY4]] - ; CHECK-NEXT: [[DUMMY6:%.*]] = mul i32 [[DUMMY5]], [[DUMMY5]] - ; CHECK-NEXT: [[DUMMY7:%.*]] = mul i32 [[DUMMY6]], [[DUMMY6]] - ; CHECK-NEXT: [[DUMMY8:%.*]] = mul i32 [[DUMMY7]], [[DUMMY7]] - ; CHECK-NEXT: [[DUMMY9:%.*]] = mul i32 [[DUMMY8]], [[DUMMY8]] - ; CHECK-NEXT: [[DUMMY10:%.*]] = mul i32 [[DUMMY9]], [[DUMMY9]] --; CHECK-NEXT: [[DUMMY11:%.*]] = mul i32 [[DUMMY10]], [[DUMMY10]] --; CHECK-NEXT: [[DUMMY12:%.*]] = mul i32 [[DUMMY11]], [[DUMMY11]] --; CHECK-NEXT: [[DUMMY13:%.*]] = mul i32 [[DUMMY12]], [[DUMMY12]] --; CHECK-NEXT: [[DUMMY14:%.*]] = mul i32 [[DUMMY13]], [[DUMMY13]] --; CHECK-NEXT: [[DUMMY15:%.*]] = mul i32 [[DUMMY14]], [[DUMMY14]] -+; CHECK-NEXT: [[DUMMY29:%.*]] = mul i32 [[DUMMY10]], [[DUMMY10]] -+; CHECK-NEXT: [[DUMMY30:%.*]] = mul i32 [[DUMMY29]], [[DUMMY29]] -+; CHECK-NEXT: [[DUMMY39:%.*]] = mul i32 [[DUMMY30]], [[DUMMY30]] -+; CHECK-NEXT: [[DUMMY40:%.*]] = mul i32 [[DUMMY39]], [[DUMMY39]] -+; CHECK-NEXT: [[DUMMY15:%.*]] = mul i32 [[DUMMY40]], [[DUMMY40]] - ; CHECK-NEXT: [[DUMMY16:%.*]] = mul i32 [[DUMMY15]], [[DUMMY15]] - ; CHECK-NEXT: [[DUMMY17:%.*]] = mul i32 [[DUMMY16]], [[DUMMY16]] - ; CHECK-NEXT: [[DUMMY18:%.*]] = mul i32 [[DUMMY17]], [[DUMMY17]] - ; CHECK-NEXT: [[DUMMY19:%.*]] = mul i32 [[DUMMY18]], [[DUMMY18]] - ; CHECK-NEXT: [[DUMMY20:%.*]] = mul i32 [[DUMMY19]], [[DUMMY19]] --; CHECK-NEXT: [[DUMMY21:%.*]] = mul i32 [[DUMMY20]], [[DUMMY20]] --; CHECK-NEXT: [[DUMMY22:%.*]] = mul i32 [[DUMMY21]], [[DUMMY21]] -+; CHECK-NEXT: [[VAL:%.*]] = mul i32 [[DUMMY20]], [[DUMMY20]] -+; CHECK-NEXT: [[DUMMY1:%.*]] = mul i32 [[VAL]], [[VAL]] -+; CHECK-NEXT: [[DUMMY2:%.*]] = mul i32 [[DUMMY1]], [[DUMMY1]] -+; CHECK-NEXT: [[DUMMY3:%.*]] = mul i32 [[DUMMY2]], [[DUMMY2]] -+; CHECK-NEXT: [[DUMMY41:%.*]] = mul i32 [[DUMMY3]], [[DUMMY3]] -+; CHECK-NEXT: [[DUMMY26:%.*]] = mul i32 [[DUMMY41]], [[DUMMY41]] -+; CHECK-NEXT: [[DUMMY11:%.*]] = mul i32 [[DUMMY26]], [[DUMMY26]] -+; CHECK-NEXT: [[DUMMY12:%.*]] = mul i32 [[DUMMY11]], [[DUMMY11]] -+; CHECK-NEXT: [[DUMMY13:%.*]] = mul i32 [[DUMMY12]], [[DUMMY12]] -+; CHECK-NEXT: [[DUMMY14:%.*]] = mul i32 [[DUMMY13]], [[DUMMY13]] -+; CHECK-NEXT: [[DUMMY31:%.*]] = mul i32 [[DUMMY14]], [[DUMMY14]] -+; CHECK-NEXT: [[DUMMY32:%.*]] = mul i32 [[DUMMY31]], [[DUMMY31]] -+; CHECK-NEXT: [[DUMMY22:%.*]] = mul i32 [[DUMMY32]], [[DUMMY32]] - ; CHECK-NEXT: [[DUMMY23:%.*]] = mul i32 [[DUMMY22]], [[DUMMY22]] - ; CHECK-NEXT: [[DUMMY24:%.*]] = mul i32 [[DUMMY23]], [[DUMMY23]] - ; CHECK-NEXT: [[DUMMY25:%.*]] = mul i32 [[DUMMY24]], [[DUMMY24]] --; CHECK-NEXT: [[DUMMY26:%.*]] = mul i32 [[DUMMY25]], [[DUMMY25]] --; CHECK-NEXT: [[DUMMY27:%.*]] = mul i32 [[DUMMY26]], [[DUMMY26]] --; CHECK-NEXT: [[DUMMY28:%.*]] = mul i32 [[DUMMY27]], [[DUMMY27]] --; CHECK-NEXT: [[DUMMY29:%.*]] = mul i32 [[DUMMY28]], [[DUMMY28]] --; CHECK-NEXT: [[DUMMY30:%.*]] = mul i32 [[DUMMY29]], [[DUMMY29]] --; CHECK-NEXT: [[DUMMY31:%.*]] = mul i32 [[DUMMY30]], [[DUMMY30]] --; CHECK-NEXT: [[DUMMY32:%.*]] = mul i32 [[DUMMY31]], [[DUMMY31]] --; CHECK-NEXT: [[DUMMY33:%.*]] = mul i32 [[DUMMY32]], [[DUMMY32]] -+; CHECK-NEXT: [[DUMMY37:%.*]] = mul i32 [[DUMMY25]], [[DUMMY25]] -+; CHECK-NEXT: [[DUMMY38:%.*]] = mul i32 [[DUMMY37]], [[DUMMY37]] -+; CHECK-NEXT: [[DUMMY33:%.*]] = mul i32 [[DUMMY38]], [[DUMMY38]] - ; CHECK-NEXT: [[DUMMY34:%.*]] = mul i32 [[DUMMY33]], [[DUMMY33]] - ; CHECK-NEXT: [[DUMMY35:%.*]] = mul i32 [[DUMMY34]], [[DUMMY34]] - ; CHECK-NEXT: [[DUMMY36:%.*]] = mul i32 [[DUMMY35]], [[DUMMY35]] --; CHECK-NEXT: [[DUMMY37:%.*]] = mul i32 [[DUMMY36]], [[DUMMY36]] --; CHECK-NEXT: [[DUMMY38:%.*]] = mul i32 [[DUMMY37]], [[DUMMY37]] --; CHECK-NEXT: [[DUMMY39:%.*]] = mul i32 [[DUMMY38]], [[DUMMY38]] --; CHECK-NEXT: [[DUMMY40:%.*]] = mul i32 [[DUMMY39]], [[DUMMY39]] --; CHECK-NEXT: [[DUMMY41:%.*]] = mul i32 [[DUMMY40]], [[DUMMY40]] --; CHECK-NEXT: [[DUMMY42:%.*]] = mul i32 [[DUMMY41]], [[DUMMY41]] --; CHECK-NEXT: [[DUMMY43:%.*]] = mul i32 [[DUMMY42]], [[DUMMY42]] -+; CHECK-NEXT: [[DUMMY43:%.*]] = mul i32 [[DUMMY36]], [[DUMMY36]] - ; CHECK-NEXT: [[DUMMY44:%.*]] = mul i32 [[DUMMY43]], [[DUMMY43]] - ; CHECK-NEXT: [[DUMMY45:%.*]] = mul i32 [[DUMMY44]], [[DUMMY44]] - ; CHECK-NEXT: [[DUMMY46:%.*]] = mul i32 [[DUMMY45]], [[DUMMY45]] - ; CHECK-NEXT: [[DUMMY47:%.*]] = mul i32 [[DUMMY46]], [[DUMMY46]] - ; CHECK-NEXT: [[DUMMY48:%.*]] = mul i32 [[DUMMY47]], [[DUMMY47]] - ; CHECK-NEXT: [[DUMMY49:%.*]] = mul i32 [[DUMMY48]], [[DUMMY48]] --; CHECK-NEXT: [[DUMMY50:%.*]] = mul i32 [[DUMMY49]], [[DUMMY49]] --; CHECK-NEXT: [[SUM_NEXT:%.*]] = add nsw i32 [[DUMMY50]], [[SUM]] --; CHECK-NEXT: [[INDVARS_IV_NEXT:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 1 --; CHECK-NEXT: [[ARRAYIDX_1:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT]] --; CHECK-NEXT: [[VAL_1:%.*]] = load i32, ptr [[ARRAYIDX_1]], align 4 --; CHECK-NEXT: [[DUMMY1_1:%.*]] = mul i32 [[VAL_1]], [[VAL_1]] --; CHECK-NEXT: [[DUMMY2_1:%.*]] = mul i32 [[DUMMY1_1]], [[DUMMY1_1]] --; CHECK-NEXT: [[DUMMY3_1:%.*]] = mul i32 [[DUMMY2_1]], [[DUMMY2_1]] --; CHECK-NEXT: [[DUMMY4_1:%.*]] = mul i32 [[DUMMY3_1]], [[DUMMY3_1]] --; CHECK-NEXT: [[DUMMY5_1:%.*]] = mul i32 [[DUMMY4_1]], [[DUMMY4_1]] --; CHECK-NEXT: [[DUMMY6_1:%.*]] = mul i32 [[DUMMY5_1]], [[DUMMY5_1]] --; CHECK-NEXT: [[DUMMY7_1:%.*]] = mul i32 [[DUMMY6_1]], [[DUMMY6_1]] --; CHECK-NEXT: [[DUMMY8_1:%.*]] = mul i32 [[DUMMY7_1]], [[DUMMY7_1]] --; CHECK-NEXT: [[DUMMY9_1:%.*]] = mul i32 [[DUMMY8_1]], [[DUMMY8_1]] --; CHECK-NEXT: [[DUMMY10_1:%.*]] = mul i32 [[DUMMY9_1]], [[DUMMY9_1]] --; CHECK-NEXT: [[DUMMY11_1:%.*]] = mul i32 [[DUMMY10_1]], [[DUMMY10_1]] --; CHECK-NEXT: [[DUMMY12_1:%.*]] = mul i32 [[DUMMY11_1]], [[DUMMY11_1]] --; CHECK-NEXT: [[DUMMY13_1:%.*]] = mul i32 [[DUMMY12_1]], [[DUMMY12_1]] --; CHECK-NEXT: [[DUMMY14_1:%.*]] = mul i32 [[DUMMY13_1]], [[DUMMY13_1]] --; CHECK-NEXT: [[DUMMY15_1:%.*]] = mul i32 [[DUMMY14_1]], [[DUMMY14_1]] --; CHECK-NEXT: [[DUMMY16_1:%.*]] = mul i32 [[DUMMY15_1]], [[DUMMY15_1]] --; CHECK-NEXT: [[DUMMY17_1:%.*]] = mul i32 [[DUMMY16_1]], [[DUMMY16_1]] --; CHECK-NEXT: [[DUMMY18_1:%.*]] = mul i32 [[DUMMY17_1]], [[DUMMY17_1]] --; CHECK-NEXT: [[DUMMY19_1:%.*]] = mul i32 [[DUMMY18_1]], [[DUMMY18_1]] --; CHECK-NEXT: [[DUMMY20_1:%.*]] = mul i32 [[DUMMY19_1]], [[DUMMY19_1]] --; CHECK-NEXT: [[DUMMY21_1:%.*]] = mul i32 [[DUMMY20_1]], [[DUMMY20_1]] --; CHECK-NEXT: [[DUMMY22_1:%.*]] = mul i32 [[DUMMY21_1]], [[DUMMY21_1]] --; CHECK-NEXT: [[DUMMY23_1:%.*]] = mul i32 [[DUMMY22_1]], [[DUMMY22_1]] --; CHECK-NEXT: [[DUMMY24_1:%.*]] = mul i32 [[DUMMY23_1]], [[DUMMY23_1]] --; CHECK-NEXT: [[DUMMY25_1:%.*]] = mul i32 [[DUMMY24_1]], [[DUMMY24_1]] --; CHECK-NEXT: [[DUMMY26_1:%.*]] = mul i32 [[DUMMY25_1]], [[DUMMY25_1]] --; CHECK-NEXT: [[DUMMY27_1:%.*]] = mul i32 [[DUMMY26_1]], [[DUMMY26_1]] --; CHECK-NEXT: [[DUMMY28_1:%.*]] = mul i32 [[DUMMY27_1]], [[DUMMY27_1]] --; CHECK-NEXT: [[DUMMY29_1:%.*]] = mul i32 [[DUMMY28_1]], [[DUMMY28_1]] --; CHECK-NEXT: [[DUMMY30_1:%.*]] = mul i32 [[DUMMY29_1]], [[DUMMY29_1]] --; CHECK-NEXT: [[DUMMY31_1:%.*]] = mul i32 [[DUMMY30_1]], [[DUMMY30_1]] --; CHECK-NEXT: [[DUMMY32_1:%.*]] = mul i32 [[DUMMY31_1]], [[DUMMY31_1]] --; CHECK-NEXT: [[DUMMY33_1:%.*]] = mul i32 [[DUMMY32_1]], [[DUMMY32_1]] --; CHECK-NEXT: [[DUMMY34_1:%.*]] = mul i32 [[DUMMY33_1]], [[DUMMY33_1]] --; CHECK-NEXT: [[DUMMY35_1:%.*]] = mul i32 [[DUMMY34_1]], [[DUMMY34_1]] --; CHECK-NEXT: [[DUMMY36_1:%.*]] = mul i32 [[DUMMY35_1]], [[DUMMY35_1]] --; CHECK-NEXT: [[DUMMY37_1:%.*]] = mul i32 [[DUMMY36_1]], [[DUMMY36_1]] --; CHECK-NEXT: [[DUMMY38_1:%.*]] = mul i32 [[DUMMY37_1]], [[DUMMY37_1]] --; CHECK-NEXT: [[DUMMY39_1:%.*]] = mul i32 [[DUMMY38_1]], [[DUMMY38_1]] --; CHECK-NEXT: [[DUMMY40_1:%.*]] = mul i32 [[DUMMY39_1]], [[DUMMY39_1]] --; CHECK-NEXT: [[DUMMY41_1:%.*]] = mul i32 [[DUMMY40_1]], [[DUMMY40_1]] --; CHECK-NEXT: [[DUMMY42_1:%.*]] = mul i32 [[DUMMY41_1]], [[DUMMY41_1]] --; CHECK-NEXT: [[DUMMY43_1:%.*]] = mul i32 [[DUMMY42_1]], [[DUMMY42_1]] --; CHECK-NEXT: [[DUMMY44_1:%.*]] = mul i32 [[DUMMY43_1]], [[DUMMY43_1]] --; CHECK-NEXT: [[DUMMY45_1:%.*]] = mul i32 [[DUMMY44_1]], [[DUMMY44_1]] --; CHECK-NEXT: [[DUMMY46_1:%.*]] = mul i32 [[DUMMY45_1]], [[DUMMY45_1]] --; CHECK-NEXT: [[DUMMY47_1:%.*]] = mul i32 [[DUMMY46_1]], [[DUMMY46_1]] --; CHECK-NEXT: [[DUMMY48_1:%.*]] = mul i32 [[DUMMY47_1]], [[DUMMY47_1]] --; CHECK-NEXT: [[DUMMY49_1:%.*]] = mul i32 [[DUMMY48_1]], [[DUMMY48_1]] --; CHECK-NEXT: [[DUMMY50_1:%.*]] = mul i32 [[DUMMY49_1]], [[DUMMY49_1]] --; CHECK-NEXT: [[SUM_NEXT_1:%.*]] = add nsw i32 [[DUMMY50_1]], [[SUM_NEXT]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_1:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 2 --; CHECK-NEXT: [[ARRAYIDX_2:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_1]] --; CHECK-NEXT: [[VAL_2:%.*]] = load i32, ptr [[ARRAYIDX_2]], align 4 --; CHECK-NEXT: [[DUMMY1_2:%.*]] = mul i32 [[VAL_2]], [[VAL_2]] --; CHECK-NEXT: [[DUMMY2_2:%.*]] = mul i32 [[DUMMY1_2]], [[DUMMY1_2]] --; CHECK-NEXT: [[DUMMY3_2:%.*]] = mul i32 [[DUMMY2_2]], [[DUMMY2_2]] --; CHECK-NEXT: [[DUMMY4_2:%.*]] = mul i32 [[DUMMY3_2]], [[DUMMY3_2]] --; CHECK-NEXT: [[DUMMY5_2:%.*]] = mul i32 [[DUMMY4_2]], [[DUMMY4_2]] --; CHECK-NEXT: [[DUMMY6_2:%.*]] = mul i32 [[DUMMY5_2]], [[DUMMY5_2]] --; CHECK-NEXT: [[DUMMY7_2:%.*]] = mul i32 [[DUMMY6_2]], [[DUMMY6_2]] --; CHECK-NEXT: [[DUMMY8_2:%.*]] = mul i32 [[DUMMY7_2]], [[DUMMY7_2]] --; CHECK-NEXT: [[DUMMY9_2:%.*]] = mul i32 [[DUMMY8_2]], [[DUMMY8_2]] --; CHECK-NEXT: [[DUMMY10_2:%.*]] = mul i32 [[DUMMY9_2]], [[DUMMY9_2]] --; CHECK-NEXT: [[DUMMY11_2:%.*]] = mul i32 [[DUMMY10_2]], [[DUMMY10_2]] --; CHECK-NEXT: [[DUMMY12_2:%.*]] = mul i32 [[DUMMY11_2]], [[DUMMY11_2]] --; CHECK-NEXT: [[DUMMY13_2:%.*]] = mul i32 [[DUMMY12_2]], [[DUMMY12_2]] --; CHECK-NEXT: [[DUMMY14_2:%.*]] = mul i32 [[DUMMY13_2]], [[DUMMY13_2]] --; CHECK-NEXT: [[DUMMY15_2:%.*]] = mul i32 [[DUMMY14_2]], [[DUMMY14_2]] --; CHECK-NEXT: [[DUMMY16_2:%.*]] = mul i32 [[DUMMY15_2]], [[DUMMY15_2]] --; CHECK-NEXT: [[DUMMY17_2:%.*]] = mul i32 [[DUMMY16_2]], [[DUMMY16_2]] --; CHECK-NEXT: [[DUMMY18_2:%.*]] = mul i32 [[DUMMY17_2]], [[DUMMY17_2]] --; CHECK-NEXT: [[DUMMY19_2:%.*]] = mul i32 [[DUMMY18_2]], [[DUMMY18_2]] --; CHECK-NEXT: [[DUMMY20_2:%.*]] = mul i32 [[DUMMY19_2]], [[DUMMY19_2]] --; CHECK-NEXT: [[DUMMY21_2:%.*]] = mul i32 [[DUMMY20_2]], [[DUMMY20_2]] --; CHECK-NEXT: [[DUMMY22_2:%.*]] = mul i32 [[DUMMY21_2]], [[DUMMY21_2]] --; CHECK-NEXT: [[DUMMY23_2:%.*]] = mul i32 [[DUMMY22_2]], [[DUMMY22_2]] --; CHECK-NEXT: [[DUMMY24_2:%.*]] = mul i32 [[DUMMY23_2]], [[DUMMY23_2]] --; CHECK-NEXT: [[DUMMY25_2:%.*]] = mul i32 [[DUMMY24_2]], [[DUMMY24_2]] --; CHECK-NEXT: [[DUMMY26_2:%.*]] = mul i32 [[DUMMY25_2]], [[DUMMY25_2]] --; CHECK-NEXT: [[DUMMY27_2:%.*]] = mul i32 [[DUMMY26_2]], [[DUMMY26_2]] --; CHECK-NEXT: [[DUMMY28_2:%.*]] = mul i32 [[DUMMY27_2]], [[DUMMY27_2]] --; CHECK-NEXT: [[DUMMY29_2:%.*]] = mul i32 [[DUMMY28_2]], [[DUMMY28_2]] --; CHECK-NEXT: [[DUMMY30_2:%.*]] = mul i32 [[DUMMY29_2]], [[DUMMY29_2]] --; CHECK-NEXT: [[DUMMY31_2:%.*]] = mul i32 [[DUMMY30_2]], [[DUMMY30_2]] --; CHECK-NEXT: [[DUMMY32_2:%.*]] = mul i32 [[DUMMY31_2]], [[DUMMY31_2]] --; CHECK-NEXT: [[DUMMY33_2:%.*]] = mul i32 [[DUMMY32_2]], [[DUMMY32_2]] --; CHECK-NEXT: [[DUMMY34_2:%.*]] = mul i32 [[DUMMY33_2]], [[DUMMY33_2]] --; CHECK-NEXT: [[DUMMY35_2:%.*]] = mul i32 [[DUMMY34_2]], [[DUMMY34_2]] --; CHECK-NEXT: [[DUMMY36_2:%.*]] = mul i32 [[DUMMY35_2]], [[DUMMY35_2]] --; CHECK-NEXT: [[DUMMY37_2:%.*]] = mul i32 [[DUMMY36_2]], [[DUMMY36_2]] --; CHECK-NEXT: [[DUMMY38_2:%.*]] = mul i32 [[DUMMY37_2]], [[DUMMY37_2]] --; CHECK-NEXT: [[DUMMY39_2:%.*]] = mul i32 [[DUMMY38_2]], [[DUMMY38_2]] --; CHECK-NEXT: [[DUMMY40_2:%.*]] = mul i32 [[DUMMY39_2]], [[DUMMY39_2]] --; CHECK-NEXT: [[DUMMY41_2:%.*]] = mul i32 [[DUMMY40_2]], [[DUMMY40_2]] --; CHECK-NEXT: [[DUMMY42_2:%.*]] = mul i32 [[DUMMY41_2]], [[DUMMY41_2]] --; CHECK-NEXT: [[DUMMY43_2:%.*]] = mul i32 [[DUMMY42_2]], [[DUMMY42_2]] --; CHECK-NEXT: [[DUMMY44_2:%.*]] = mul i32 [[DUMMY43_2]], [[DUMMY43_2]] --; CHECK-NEXT: [[DUMMY45_2:%.*]] = mul i32 [[DUMMY44_2]], [[DUMMY44_2]] --; CHECK-NEXT: [[DUMMY46_2:%.*]] = mul i32 [[DUMMY45_2]], [[DUMMY45_2]] --; CHECK-NEXT: [[DUMMY47_2:%.*]] = mul i32 [[DUMMY46_2]], [[DUMMY46_2]] --; CHECK-NEXT: [[DUMMY48_2:%.*]] = mul i32 [[DUMMY47_2]], [[DUMMY47_2]] --; CHECK-NEXT: [[DUMMY49_2:%.*]] = mul i32 [[DUMMY48_2]], [[DUMMY48_2]] --; CHECK-NEXT: [[DUMMY50_2:%.*]] = mul i32 [[DUMMY49_2]], [[DUMMY49_2]] --; CHECK-NEXT: [[SUM_NEXT_2:%.*]] = add nsw i32 [[DUMMY50_2]], [[SUM_NEXT_1]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_2:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 3 --; CHECK-NEXT: [[ARRAYIDX_3:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_2]] --; CHECK-NEXT: [[VAL_3:%.*]] = load i32, ptr [[ARRAYIDX_3]], align 4 --; CHECK-NEXT: [[DUMMY1_3:%.*]] = mul i32 [[VAL_3]], [[VAL_3]] --; CHECK-NEXT: [[DUMMY2_3:%.*]] = mul i32 [[DUMMY1_3]], [[DUMMY1_3]] --; CHECK-NEXT: [[DUMMY3_3:%.*]] = mul i32 [[DUMMY2_3]], [[DUMMY2_3]] --; CHECK-NEXT: [[DUMMY4_3:%.*]] = mul i32 [[DUMMY3_3]], [[DUMMY3_3]] --; CHECK-NEXT: [[DUMMY5_3:%.*]] = mul i32 [[DUMMY4_3]], [[DUMMY4_3]] --; CHECK-NEXT: [[DUMMY6_3:%.*]] = mul i32 [[DUMMY5_3]], [[DUMMY5_3]] --; CHECK-NEXT: [[DUMMY7_3:%.*]] = mul i32 [[DUMMY6_3]], [[DUMMY6_3]] --; CHECK-NEXT: [[DUMMY8_3:%.*]] = mul i32 [[DUMMY7_3]], [[DUMMY7_3]] --; CHECK-NEXT: [[DUMMY9_3:%.*]] = mul i32 [[DUMMY8_3]], [[DUMMY8_3]] --; CHECK-NEXT: [[DUMMY10_3:%.*]] = mul i32 [[DUMMY9_3]], [[DUMMY9_3]] --; CHECK-NEXT: [[DUMMY11_3:%.*]] = mul i32 [[DUMMY10_3]], [[DUMMY10_3]] --; CHECK-NEXT: [[DUMMY12_3:%.*]] = mul i32 [[DUMMY11_3]], [[DUMMY11_3]] --; CHECK-NEXT: [[DUMMY13_3:%.*]] = mul i32 [[DUMMY12_3]], [[DUMMY12_3]] --; CHECK-NEXT: [[DUMMY14_3:%.*]] = mul i32 [[DUMMY13_3]], [[DUMMY13_3]] --; CHECK-NEXT: [[DUMMY15_3:%.*]] = mul i32 [[DUMMY14_3]], [[DUMMY14_3]] --; CHECK-NEXT: [[DUMMY16_3:%.*]] = mul i32 [[DUMMY15_3]], [[DUMMY15_3]] --; CHECK-NEXT: [[DUMMY17_3:%.*]] = mul i32 [[DUMMY16_3]], [[DUMMY16_3]] --; CHECK-NEXT: [[DUMMY18_3:%.*]] = mul i32 [[DUMMY17_3]], [[DUMMY17_3]] --; CHECK-NEXT: [[DUMMY19_3:%.*]] = mul i32 [[DUMMY18_3]], [[DUMMY18_3]] --; CHECK-NEXT: [[DUMMY20_3:%.*]] = mul i32 [[DUMMY19_3]], [[DUMMY19_3]] --; CHECK-NEXT: [[DUMMY21_3:%.*]] = mul i32 [[DUMMY20_3]], [[DUMMY20_3]] --; CHECK-NEXT: [[DUMMY22_3:%.*]] = mul i32 [[DUMMY21_3]], [[DUMMY21_3]] --; CHECK-NEXT: [[DUMMY23_3:%.*]] = mul i32 [[DUMMY22_3]], [[DUMMY22_3]] --; CHECK-NEXT: [[DUMMY24_3:%.*]] = mul i32 [[DUMMY23_3]], [[DUMMY23_3]] --; CHECK-NEXT: [[DUMMY25_3:%.*]] = mul i32 [[DUMMY24_3]], [[DUMMY24_3]] --; CHECK-NEXT: [[DUMMY26_3:%.*]] = mul i32 [[DUMMY25_3]], [[DUMMY25_3]] --; CHECK-NEXT: [[DUMMY27_3:%.*]] = mul i32 [[DUMMY26_3]], [[DUMMY26_3]] --; CHECK-NEXT: [[DUMMY28_3:%.*]] = mul i32 [[DUMMY27_3]], [[DUMMY27_3]] --; CHECK-NEXT: [[DUMMY29_3:%.*]] = mul i32 [[DUMMY28_3]], [[DUMMY28_3]] --; CHECK-NEXT: [[DUMMY30_3:%.*]] = mul i32 [[DUMMY29_3]], [[DUMMY29_3]] --; CHECK-NEXT: [[DUMMY31_3:%.*]] = mul i32 [[DUMMY30_3]], [[DUMMY30_3]] --; CHECK-NEXT: [[DUMMY32_3:%.*]] = mul i32 [[DUMMY31_3]], [[DUMMY31_3]] --; CHECK-NEXT: [[DUMMY33_3:%.*]] = mul i32 [[DUMMY32_3]], [[DUMMY32_3]] --; CHECK-NEXT: [[DUMMY34_3:%.*]] = mul i32 [[DUMMY33_3]], [[DUMMY33_3]] --; CHECK-NEXT: [[DUMMY35_3:%.*]] = mul i32 [[DUMMY34_3]], [[DUMMY34_3]] --; CHECK-NEXT: [[DUMMY36_3:%.*]] = mul i32 [[DUMMY35_3]], [[DUMMY35_3]] --; CHECK-NEXT: [[DUMMY37_3:%.*]] = mul i32 [[DUMMY36_3]], [[DUMMY36_3]] --; CHECK-NEXT: [[DUMMY38_3:%.*]] = mul i32 [[DUMMY37_3]], [[DUMMY37_3]] --; CHECK-NEXT: [[DUMMY39_3:%.*]] = mul i32 [[DUMMY38_3]], [[DUMMY38_3]] --; CHECK-NEXT: [[DUMMY40_3:%.*]] = mul i32 [[DUMMY39_3]], [[DUMMY39_3]] --; CHECK-NEXT: [[DUMMY41_3:%.*]] = mul i32 [[DUMMY40_3]], [[DUMMY40_3]] --; CHECK-NEXT: [[DUMMY42_3:%.*]] = mul i32 [[DUMMY41_3]], [[DUMMY41_3]] --; CHECK-NEXT: [[DUMMY43_3:%.*]] = mul i32 [[DUMMY42_3]], [[DUMMY42_3]] --; CHECK-NEXT: [[DUMMY44_3:%.*]] = mul i32 [[DUMMY43_3]], [[DUMMY43_3]] --; CHECK-NEXT: [[DUMMY45_3:%.*]] = mul i32 [[DUMMY44_3]], [[DUMMY44_3]] --; CHECK-NEXT: [[DUMMY46_3:%.*]] = mul i32 [[DUMMY45_3]], [[DUMMY45_3]] --; CHECK-NEXT: [[DUMMY47_3:%.*]] = mul i32 [[DUMMY46_3]], [[DUMMY46_3]] --; CHECK-NEXT: [[DUMMY48_3:%.*]] = mul i32 [[DUMMY47_3]], [[DUMMY47_3]] --; CHECK-NEXT: [[DUMMY49_3:%.*]] = mul i32 [[DUMMY48_3]], [[DUMMY48_3]] --; CHECK-NEXT: [[DUMMY50_3:%.*]] = mul i32 [[DUMMY49_3]], [[DUMMY49_3]] --; CHECK-NEXT: [[SUM_NEXT_3:%.*]] = add nsw i32 [[DUMMY50_3]], [[SUM_NEXT_2]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_3:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 4 --; CHECK-NEXT: [[ARRAYIDX_4:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_3]] --; CHECK-NEXT: [[VAL_4:%.*]] = load i32, ptr [[ARRAYIDX_4]], align 4 --; CHECK-NEXT: [[DUMMY1_4:%.*]] = mul i32 [[VAL_4]], [[VAL_4]] --; CHECK-NEXT: [[DUMMY2_4:%.*]] = mul i32 [[DUMMY1_4]], [[DUMMY1_4]] --; CHECK-NEXT: [[DUMMY3_4:%.*]] = mul i32 [[DUMMY2_4]], [[DUMMY2_4]] --; CHECK-NEXT: [[DUMMY4_4:%.*]] = mul i32 [[DUMMY3_4]], [[DUMMY3_4]] --; CHECK-NEXT: [[DUMMY5_4:%.*]] = mul i32 [[DUMMY4_4]], [[DUMMY4_4]] --; CHECK-NEXT: [[DUMMY6_4:%.*]] = mul i32 [[DUMMY5_4]], [[DUMMY5_4]] --; CHECK-NEXT: [[DUMMY7_4:%.*]] = mul i32 [[DUMMY6_4]], [[DUMMY6_4]] --; CHECK-NEXT: [[DUMMY8_4:%.*]] = mul i32 [[DUMMY7_4]], [[DUMMY7_4]] --; CHECK-NEXT: [[DUMMY9_4:%.*]] = mul i32 [[DUMMY8_4]], [[DUMMY8_4]] --; CHECK-NEXT: [[DUMMY10_4:%.*]] = mul i32 [[DUMMY9_4]], [[DUMMY9_4]] --; CHECK-NEXT: [[DUMMY11_4:%.*]] = mul i32 [[DUMMY10_4]], [[DUMMY10_4]] --; CHECK-NEXT: [[DUMMY12_4:%.*]] = mul i32 [[DUMMY11_4]], [[DUMMY11_4]] --; CHECK-NEXT: [[DUMMY13_4:%.*]] = mul i32 [[DUMMY12_4]], [[DUMMY12_4]] --; CHECK-NEXT: [[DUMMY14_4:%.*]] = mul i32 [[DUMMY13_4]], [[DUMMY13_4]] --; CHECK-NEXT: [[DUMMY15_4:%.*]] = mul i32 [[DUMMY14_4]], [[DUMMY14_4]] --; CHECK-NEXT: [[DUMMY16_4:%.*]] = mul i32 [[DUMMY15_4]], [[DUMMY15_4]] --; CHECK-NEXT: [[DUMMY17_4:%.*]] = mul i32 [[DUMMY16_4]], [[DUMMY16_4]] --; CHECK-NEXT: [[DUMMY18_4:%.*]] = mul i32 [[DUMMY17_4]], [[DUMMY17_4]] --; CHECK-NEXT: [[DUMMY19_4:%.*]] = mul i32 [[DUMMY18_4]], [[DUMMY18_4]] --; CHECK-NEXT: [[DUMMY20_4:%.*]] = mul i32 [[DUMMY19_4]], [[DUMMY19_4]] --; CHECK-NEXT: [[DUMMY21_4:%.*]] = mul i32 [[DUMMY20_4]], [[DUMMY20_4]] --; CHECK-NEXT: [[DUMMY22_4:%.*]] = mul i32 [[DUMMY21_4]], [[DUMMY21_4]] --; CHECK-NEXT: [[DUMMY23_4:%.*]] = mul i32 [[DUMMY22_4]], [[DUMMY22_4]] --; CHECK-NEXT: [[DUMMY24_4:%.*]] = mul i32 [[DUMMY23_4]], [[DUMMY23_4]] --; CHECK-NEXT: [[DUMMY25_4:%.*]] = mul i32 [[DUMMY24_4]], [[DUMMY24_4]] --; CHECK-NEXT: [[DUMMY26_4:%.*]] = mul i32 [[DUMMY25_4]], [[DUMMY25_4]] --; CHECK-NEXT: [[DUMMY27_4:%.*]] = mul i32 [[DUMMY26_4]], [[DUMMY26_4]] --; CHECK-NEXT: [[DUMMY28_4:%.*]] = mul i32 [[DUMMY27_4]], [[DUMMY27_4]] --; CHECK-NEXT: [[DUMMY29_4:%.*]] = mul i32 [[DUMMY28_4]], [[DUMMY28_4]] --; CHECK-NEXT: [[DUMMY30_4:%.*]] = mul i32 [[DUMMY29_4]], [[DUMMY29_4]] --; CHECK-NEXT: [[DUMMY31_4:%.*]] = mul i32 [[DUMMY30_4]], [[DUMMY30_4]] --; CHECK-NEXT: [[DUMMY32_4:%.*]] = mul i32 [[DUMMY31_4]], [[DUMMY31_4]] --; CHECK-NEXT: [[DUMMY33_4:%.*]] = mul i32 [[DUMMY32_4]], [[DUMMY32_4]] --; CHECK-NEXT: [[DUMMY34_4:%.*]] = mul i32 [[DUMMY33_4]], [[DUMMY33_4]] --; CHECK-NEXT: [[DUMMY35_4:%.*]] = mul i32 [[DUMMY34_4]], [[DUMMY34_4]] --; CHECK-NEXT: [[DUMMY36_4:%.*]] = mul i32 [[DUMMY35_4]], [[DUMMY35_4]] --; CHECK-NEXT: [[DUMMY37_4:%.*]] = mul i32 [[DUMMY36_4]], [[DUMMY36_4]] --; CHECK-NEXT: [[DUMMY38_4:%.*]] = mul i32 [[DUMMY37_4]], [[DUMMY37_4]] --; CHECK-NEXT: [[DUMMY39_4:%.*]] = mul i32 [[DUMMY38_4]], [[DUMMY38_4]] --; CHECK-NEXT: [[DUMMY40_4:%.*]] = mul i32 [[DUMMY39_4]], [[DUMMY39_4]] --; CHECK-NEXT: [[DUMMY41_4:%.*]] = mul i32 [[DUMMY40_4]], [[DUMMY40_4]] --; CHECK-NEXT: [[DUMMY42_4:%.*]] = mul i32 [[DUMMY41_4]], [[DUMMY41_4]] --; CHECK-NEXT: [[DUMMY43_4:%.*]] = mul i32 [[DUMMY42_4]], [[DUMMY42_4]] --; CHECK-NEXT: [[DUMMY44_4:%.*]] = mul i32 [[DUMMY43_4]], [[DUMMY43_4]] --; CHECK-NEXT: [[DUMMY45_4:%.*]] = mul i32 [[DUMMY44_4]], [[DUMMY44_4]] --; CHECK-NEXT: [[DUMMY46_4:%.*]] = mul i32 [[DUMMY45_4]], [[DUMMY45_4]] --; CHECK-NEXT: [[DUMMY47_4:%.*]] = mul i32 [[DUMMY46_4]], [[DUMMY46_4]] --; CHECK-NEXT: [[DUMMY48_4:%.*]] = mul i32 [[DUMMY47_4]], [[DUMMY47_4]] --; CHECK-NEXT: [[DUMMY49_4:%.*]] = mul i32 [[DUMMY48_4]], [[DUMMY48_4]] --; CHECK-NEXT: [[DUMMY50_4:%.*]] = mul i32 [[DUMMY49_4]], [[DUMMY49_4]] --; CHECK-NEXT: [[SUM_NEXT_4:%.*]] = add nsw i32 [[DUMMY50_4]], [[SUM_NEXT_3]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_4:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 5 --; CHECK-NEXT: [[ARRAYIDX_5:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_4]] --; CHECK-NEXT: [[VAL_5:%.*]] = load i32, ptr [[ARRAYIDX_5]], align 4 --; CHECK-NEXT: [[DUMMY1_5:%.*]] = mul i32 [[VAL_5]], [[VAL_5]] --; CHECK-NEXT: [[DUMMY2_5:%.*]] = mul i32 [[DUMMY1_5]], [[DUMMY1_5]] --; CHECK-NEXT: [[DUMMY3_5:%.*]] = mul i32 [[DUMMY2_5]], [[DUMMY2_5]] --; CHECK-NEXT: [[DUMMY4_5:%.*]] = mul i32 [[DUMMY3_5]], [[DUMMY3_5]] --; CHECK-NEXT: [[DUMMY5_5:%.*]] = mul i32 [[DUMMY4_5]], [[DUMMY4_5]] --; CHECK-NEXT: [[DUMMY6_5:%.*]] = mul i32 [[DUMMY5_5]], [[DUMMY5_5]] --; CHECK-NEXT: [[DUMMY7_5:%.*]] = mul i32 [[DUMMY6_5]], [[DUMMY6_5]] --; CHECK-NEXT: [[DUMMY8_5:%.*]] = mul i32 [[DUMMY7_5]], [[DUMMY7_5]] --; CHECK-NEXT: [[DUMMY9_5:%.*]] = mul i32 [[DUMMY8_5]], [[DUMMY8_5]] --; CHECK-NEXT: [[DUMMY10_5:%.*]] = mul i32 [[DUMMY9_5]], [[DUMMY9_5]] --; CHECK-NEXT: [[DUMMY11_5:%.*]] = mul i32 [[DUMMY10_5]], [[DUMMY10_5]] --; CHECK-NEXT: [[DUMMY12_5:%.*]] = mul i32 [[DUMMY11_5]], [[DUMMY11_5]] --; CHECK-NEXT: [[DUMMY13_5:%.*]] = mul i32 [[DUMMY12_5]], [[DUMMY12_5]] --; CHECK-NEXT: [[DUMMY14_5:%.*]] = mul i32 [[DUMMY13_5]], [[DUMMY13_5]] --; CHECK-NEXT: [[DUMMY15_5:%.*]] = mul i32 [[DUMMY14_5]], [[DUMMY14_5]] --; CHECK-NEXT: [[DUMMY16_5:%.*]] = mul i32 [[DUMMY15_5]], [[DUMMY15_5]] --; CHECK-NEXT: [[DUMMY17_5:%.*]] = mul i32 [[DUMMY16_5]], [[DUMMY16_5]] --; CHECK-NEXT: [[DUMMY18_5:%.*]] = mul i32 [[DUMMY17_5]], [[DUMMY17_5]] --; CHECK-NEXT: [[DUMMY19_5:%.*]] = mul i32 [[DUMMY18_5]], [[DUMMY18_5]] --; CHECK-NEXT: [[DUMMY20_5:%.*]] = mul i32 [[DUMMY19_5]], [[DUMMY19_5]] --; CHECK-NEXT: [[DUMMY21_5:%.*]] = mul i32 [[DUMMY20_5]], [[DUMMY20_5]] --; CHECK-NEXT: [[DUMMY22_5:%.*]] = mul i32 [[DUMMY21_5]], [[DUMMY21_5]] --; CHECK-NEXT: [[DUMMY23_5:%.*]] = mul i32 [[DUMMY22_5]], [[DUMMY22_5]] --; CHECK-NEXT: [[DUMMY24_5:%.*]] = mul i32 [[DUMMY23_5]], [[DUMMY23_5]] --; CHECK-NEXT: [[DUMMY25_5:%.*]] = mul i32 [[DUMMY24_5]], [[DUMMY24_5]] --; CHECK-NEXT: [[DUMMY26_5:%.*]] = mul i32 [[DUMMY25_5]], [[DUMMY25_5]] --; CHECK-NEXT: [[DUMMY27_5:%.*]] = mul i32 [[DUMMY26_5]], [[DUMMY26_5]] --; CHECK-NEXT: [[DUMMY28_5:%.*]] = mul i32 [[DUMMY27_5]], [[DUMMY27_5]] --; CHECK-NEXT: [[DUMMY29_5:%.*]] = mul i32 [[DUMMY28_5]], [[DUMMY28_5]] --; CHECK-NEXT: [[DUMMY30_5:%.*]] = mul i32 [[DUMMY29_5]], [[DUMMY29_5]] --; CHECK-NEXT: [[DUMMY31_5:%.*]] = mul i32 [[DUMMY30_5]], [[DUMMY30_5]] --; CHECK-NEXT: [[DUMMY32_5:%.*]] = mul i32 [[DUMMY31_5]], [[DUMMY31_5]] --; CHECK-NEXT: [[DUMMY33_5:%.*]] = mul i32 [[DUMMY32_5]], [[DUMMY32_5]] --; CHECK-NEXT: [[DUMMY34_5:%.*]] = mul i32 [[DUMMY33_5]], [[DUMMY33_5]] --; CHECK-NEXT: [[DUMMY35_5:%.*]] = mul i32 [[DUMMY34_5]], [[DUMMY34_5]] --; CHECK-NEXT: [[DUMMY36_5:%.*]] = mul i32 [[DUMMY35_5]], [[DUMMY35_5]] --; CHECK-NEXT: [[DUMMY37_5:%.*]] = mul i32 [[DUMMY36_5]], [[DUMMY36_5]] --; CHECK-NEXT: [[DUMMY38_5:%.*]] = mul i32 [[DUMMY37_5]], [[DUMMY37_5]] --; CHECK-NEXT: [[DUMMY39_5:%.*]] = mul i32 [[DUMMY38_5]], [[DUMMY38_5]] --; CHECK-NEXT: [[DUMMY40_5:%.*]] = mul i32 [[DUMMY39_5]], [[DUMMY39_5]] --; CHECK-NEXT: [[DUMMY41_5:%.*]] = mul i32 [[DUMMY40_5]], [[DUMMY40_5]] --; CHECK-NEXT: [[DUMMY42_5:%.*]] = mul i32 [[DUMMY41_5]], [[DUMMY41_5]] --; CHECK-NEXT: [[DUMMY43_5:%.*]] = mul i32 [[DUMMY42_5]], [[DUMMY42_5]] --; CHECK-NEXT: [[DUMMY44_5:%.*]] = mul i32 [[DUMMY43_5]], [[DUMMY43_5]] --; CHECK-NEXT: [[DUMMY45_5:%.*]] = mul i32 [[DUMMY44_5]], [[DUMMY44_5]] --; CHECK-NEXT: [[DUMMY46_5:%.*]] = mul i32 [[DUMMY45_5]], [[DUMMY45_5]] --; CHECK-NEXT: [[DUMMY47_5:%.*]] = mul i32 [[DUMMY46_5]], [[DUMMY46_5]] --; CHECK-NEXT: [[DUMMY48_5:%.*]] = mul i32 [[DUMMY47_5]], [[DUMMY47_5]] --; CHECK-NEXT: [[DUMMY49_5:%.*]] = mul i32 [[DUMMY48_5]], [[DUMMY48_5]] --; CHECK-NEXT: [[DUMMY50_5:%.*]] = mul i32 [[DUMMY49_5]], [[DUMMY49_5]] --; CHECK-NEXT: [[SUM_NEXT_5:%.*]] = add nsw i32 [[DUMMY50_5]], [[SUM_NEXT_4]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_5:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 6 --; CHECK-NEXT: [[ARRAYIDX_6:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_5]] --; CHECK-NEXT: [[VAL_6:%.*]] = load i32, ptr [[ARRAYIDX_6]], align 4 --; CHECK-NEXT: [[DUMMY1_6:%.*]] = mul i32 [[VAL_6]], [[VAL_6]] --; CHECK-NEXT: [[DUMMY2_6:%.*]] = mul i32 [[DUMMY1_6]], [[DUMMY1_6]] --; CHECK-NEXT: [[DUMMY3_6:%.*]] = mul i32 [[DUMMY2_6]], [[DUMMY2_6]] --; CHECK-NEXT: [[DUMMY4_6:%.*]] = mul i32 [[DUMMY3_6]], [[DUMMY3_6]] --; CHECK-NEXT: [[DUMMY5_6:%.*]] = mul i32 [[DUMMY4_6]], [[DUMMY4_6]] --; CHECK-NEXT: [[DUMMY6_6:%.*]] = mul i32 [[DUMMY5_6]], [[DUMMY5_6]] --; CHECK-NEXT: [[DUMMY7_6:%.*]] = mul i32 [[DUMMY6_6]], [[DUMMY6_6]] --; CHECK-NEXT: [[DUMMY8_6:%.*]] = mul i32 [[DUMMY7_6]], [[DUMMY7_6]] --; CHECK-NEXT: [[DUMMY9_6:%.*]] = mul i32 [[DUMMY8_6]], [[DUMMY8_6]] --; CHECK-NEXT: [[DUMMY10_6:%.*]] = mul i32 [[DUMMY9_6]], [[DUMMY9_6]] --; CHECK-NEXT: [[DUMMY11_6:%.*]] = mul i32 [[DUMMY10_6]], [[DUMMY10_6]] --; CHECK-NEXT: [[DUMMY12_6:%.*]] = mul i32 [[DUMMY11_6]], [[DUMMY11_6]] --; CHECK-NEXT: [[DUMMY13_6:%.*]] = mul i32 [[DUMMY12_6]], [[DUMMY12_6]] --; CHECK-NEXT: [[DUMMY14_6:%.*]] = mul i32 [[DUMMY13_6]], [[DUMMY13_6]] --; CHECK-NEXT: [[DUMMY15_6:%.*]] = mul i32 [[DUMMY14_6]], [[DUMMY14_6]] --; CHECK-NEXT: [[DUMMY16_6:%.*]] = mul i32 [[DUMMY15_6]], [[DUMMY15_6]] --; CHECK-NEXT: [[DUMMY17_6:%.*]] = mul i32 [[DUMMY16_6]], [[DUMMY16_6]] --; CHECK-NEXT: [[DUMMY18_6:%.*]] = mul i32 [[DUMMY17_6]], [[DUMMY17_6]] --; CHECK-NEXT: [[DUMMY19_6:%.*]] = mul i32 [[DUMMY18_6]], [[DUMMY18_6]] --; CHECK-NEXT: [[DUMMY20_6:%.*]] = mul i32 [[DUMMY19_6]], [[DUMMY19_6]] --; CHECK-NEXT: [[DUMMY21_6:%.*]] = mul i32 [[DUMMY20_6]], [[DUMMY20_6]] --; CHECK-NEXT: [[DUMMY22_6:%.*]] = mul i32 [[DUMMY21_6]], [[DUMMY21_6]] --; CHECK-NEXT: [[DUMMY23_6:%.*]] = mul i32 [[DUMMY22_6]], [[DUMMY22_6]] --; CHECK-NEXT: [[DUMMY24_6:%.*]] = mul i32 [[DUMMY23_6]], [[DUMMY23_6]] --; CHECK-NEXT: [[DUMMY25_6:%.*]] = mul i32 [[DUMMY24_6]], [[DUMMY24_6]] --; CHECK-NEXT: [[DUMMY26_6:%.*]] = mul i32 [[DUMMY25_6]], [[DUMMY25_6]] --; CHECK-NEXT: [[DUMMY27_6:%.*]] = mul i32 [[DUMMY26_6]], [[DUMMY26_6]] --; CHECK-NEXT: [[DUMMY28_6:%.*]] = mul i32 [[DUMMY27_6]], [[DUMMY27_6]] --; CHECK-NEXT: [[DUMMY29_6:%.*]] = mul i32 [[DUMMY28_6]], [[DUMMY28_6]] --; CHECK-NEXT: [[DUMMY30_6:%.*]] = mul i32 [[DUMMY29_6]], [[DUMMY29_6]] --; CHECK-NEXT: [[DUMMY31_6:%.*]] = mul i32 [[DUMMY30_6]], [[DUMMY30_6]] --; CHECK-NEXT: [[DUMMY32_6:%.*]] = mul i32 [[DUMMY31_6]], [[DUMMY31_6]] --; CHECK-NEXT: [[DUMMY33_6:%.*]] = mul i32 [[DUMMY32_6]], [[DUMMY32_6]] --; CHECK-NEXT: [[DUMMY34_6:%.*]] = mul i32 [[DUMMY33_6]], [[DUMMY33_6]] --; CHECK-NEXT: [[DUMMY35_6:%.*]] = mul i32 [[DUMMY34_6]], [[DUMMY34_6]] --; CHECK-NEXT: [[DUMMY36_6:%.*]] = mul i32 [[DUMMY35_6]], [[DUMMY35_6]] --; CHECK-NEXT: [[DUMMY37_6:%.*]] = mul i32 [[DUMMY36_6]], [[DUMMY36_6]] --; CHECK-NEXT: [[DUMMY38_6:%.*]] = mul i32 [[DUMMY37_6]], [[DUMMY37_6]] --; CHECK-NEXT: [[DUMMY39_6:%.*]] = mul i32 [[DUMMY38_6]], [[DUMMY38_6]] --; CHECK-NEXT: [[DUMMY40_6:%.*]] = mul i32 [[DUMMY39_6]], [[DUMMY39_6]] --; CHECK-NEXT: [[DUMMY41_6:%.*]] = mul i32 [[DUMMY40_6]], [[DUMMY40_6]] --; CHECK-NEXT: [[DUMMY42_6:%.*]] = mul i32 [[DUMMY41_6]], [[DUMMY41_6]] --; CHECK-NEXT: [[DUMMY43_6:%.*]] = mul i32 [[DUMMY42_6]], [[DUMMY42_6]] --; CHECK-NEXT: [[DUMMY44_6:%.*]] = mul i32 [[DUMMY43_6]], [[DUMMY43_6]] --; CHECK-NEXT: [[DUMMY45_6:%.*]] = mul i32 [[DUMMY44_6]], [[DUMMY44_6]] --; CHECK-NEXT: [[DUMMY46_6:%.*]] = mul i32 [[DUMMY45_6]], [[DUMMY45_6]] --; CHECK-NEXT: [[DUMMY47_6:%.*]] = mul i32 [[DUMMY46_6]], [[DUMMY46_6]] --; CHECK-NEXT: [[DUMMY48_6:%.*]] = mul i32 [[DUMMY47_6]], [[DUMMY47_6]] --; CHECK-NEXT: [[DUMMY49_6:%.*]] = mul i32 [[DUMMY48_6]], [[DUMMY48_6]] --; CHECK-NEXT: [[DUMMY50_6:%.*]] = mul i32 [[DUMMY49_6]], [[DUMMY49_6]] --; CHECK-NEXT: [[SUM_NEXT_6:%.*]] = add nsw i32 [[DUMMY50_6]], [[SUM_NEXT_5]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_6:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 7 --; CHECK-NEXT: [[ARRAYIDX_7:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_6]] --; CHECK-NEXT: [[VAL_7:%.*]] = load i32, ptr [[ARRAYIDX_7]], align 4 --; CHECK-NEXT: [[DUMMY1_7:%.*]] = mul i32 [[VAL_7]], [[VAL_7]] --; CHECK-NEXT: [[DUMMY2_7:%.*]] = mul i32 [[DUMMY1_7]], [[DUMMY1_7]] --; CHECK-NEXT: [[DUMMY3_7:%.*]] = mul i32 [[DUMMY2_7]], [[DUMMY2_7]] --; CHECK-NEXT: [[DUMMY4_7:%.*]] = mul i32 [[DUMMY3_7]], [[DUMMY3_7]] --; CHECK-NEXT: [[DUMMY5_7:%.*]] = mul i32 [[DUMMY4_7]], [[DUMMY4_7]] --; CHECK-NEXT: [[DUMMY6_7:%.*]] = mul i32 [[DUMMY5_7]], [[DUMMY5_7]] --; CHECK-NEXT: [[DUMMY7_7:%.*]] = mul i32 [[DUMMY6_7]], [[DUMMY6_7]] --; CHECK-NEXT: [[DUMMY8_7:%.*]] = mul i32 [[DUMMY7_7]], [[DUMMY7_7]] --; CHECK-NEXT: [[DUMMY9_7:%.*]] = mul i32 [[DUMMY8_7]], [[DUMMY8_7]] --; CHECK-NEXT: [[DUMMY10_7:%.*]] = mul i32 [[DUMMY9_7]], [[DUMMY9_7]] --; CHECK-NEXT: [[DUMMY11_7:%.*]] = mul i32 [[DUMMY10_7]], [[DUMMY10_7]] --; CHECK-NEXT: [[DUMMY12_7:%.*]] = mul i32 [[DUMMY11_7]], [[DUMMY11_7]] --; CHECK-NEXT: [[DUMMY13_7:%.*]] = mul i32 [[DUMMY12_7]], [[DUMMY12_7]] --; CHECK-NEXT: [[DUMMY14_7:%.*]] = mul i32 [[DUMMY13_7]], [[DUMMY13_7]] --; CHECK-NEXT: [[DUMMY15_7:%.*]] = mul i32 [[DUMMY14_7]], [[DUMMY14_7]] --; CHECK-NEXT: [[DUMMY16_7:%.*]] = mul i32 [[DUMMY15_7]], [[DUMMY15_7]] --; CHECK-NEXT: [[DUMMY17_7:%.*]] = mul i32 [[DUMMY16_7]], [[DUMMY16_7]] --; CHECK-NEXT: [[DUMMY18_7:%.*]] = mul i32 [[DUMMY17_7]], [[DUMMY17_7]] --; CHECK-NEXT: [[DUMMY19_7:%.*]] = mul i32 [[DUMMY18_7]], [[DUMMY18_7]] --; CHECK-NEXT: [[DUMMY20_7:%.*]] = mul i32 [[DUMMY19_7]], [[DUMMY19_7]] --; CHECK-NEXT: [[DUMMY21_7:%.*]] = mul i32 [[DUMMY20_7]], [[DUMMY20_7]] --; CHECK-NEXT: [[DUMMY22_7:%.*]] = mul i32 [[DUMMY21_7]], [[DUMMY21_7]] --; CHECK-NEXT: [[DUMMY23_7:%.*]] = mul i32 [[DUMMY22_7]], [[DUMMY22_7]] --; CHECK-NEXT: [[DUMMY24_7:%.*]] = mul i32 [[DUMMY23_7]], [[DUMMY23_7]] --; CHECK-NEXT: [[DUMMY25_7:%.*]] = mul i32 [[DUMMY24_7]], [[DUMMY24_7]] --; CHECK-NEXT: [[DUMMY26_7:%.*]] = mul i32 [[DUMMY25_7]], [[DUMMY25_7]] --; CHECK-NEXT: [[DUMMY27_7:%.*]] = mul i32 [[DUMMY26_7]], [[DUMMY26_7]] --; CHECK-NEXT: [[DUMMY28_7:%.*]] = mul i32 [[DUMMY27_7]], [[DUMMY27_7]] --; CHECK-NEXT: [[DUMMY29_7:%.*]] = mul i32 [[DUMMY28_7]], [[DUMMY28_7]] --; CHECK-NEXT: [[DUMMY30_7:%.*]] = mul i32 [[DUMMY29_7]], [[DUMMY29_7]] --; CHECK-NEXT: [[DUMMY31_7:%.*]] = mul i32 [[DUMMY30_7]], [[DUMMY30_7]] --; CHECK-NEXT: [[DUMMY32_7:%.*]] = mul i32 [[DUMMY31_7]], [[DUMMY31_7]] --; CHECK-NEXT: [[DUMMY33_7:%.*]] = mul i32 [[DUMMY32_7]], [[DUMMY32_7]] --; CHECK-NEXT: [[DUMMY34_7:%.*]] = mul i32 [[DUMMY33_7]], [[DUMMY33_7]] --; CHECK-NEXT: [[DUMMY35_7:%.*]] = mul i32 [[DUMMY34_7]], [[DUMMY34_7]] --; CHECK-NEXT: [[DUMMY36_7:%.*]] = mul i32 [[DUMMY35_7]], [[DUMMY35_7]] --; CHECK-NEXT: [[DUMMY37_7:%.*]] = mul i32 [[DUMMY36_7]], [[DUMMY36_7]] --; CHECK-NEXT: [[DUMMY38_7:%.*]] = mul i32 [[DUMMY37_7]], [[DUMMY37_7]] --; CHECK-NEXT: [[DUMMY39_7:%.*]] = mul i32 [[DUMMY38_7]], [[DUMMY38_7]] --; CHECK-NEXT: [[DUMMY40_7:%.*]] = mul i32 [[DUMMY39_7]], [[DUMMY39_7]] --; CHECK-NEXT: [[DUMMY41_7:%.*]] = mul i32 [[DUMMY40_7]], [[DUMMY40_7]] --; CHECK-NEXT: [[DUMMY42_7:%.*]] = mul i32 [[DUMMY41_7]], [[DUMMY41_7]] --; CHECK-NEXT: [[DUMMY43_7:%.*]] = mul i32 [[DUMMY42_7]], [[DUMMY42_7]] --; CHECK-NEXT: [[DUMMY44_7:%.*]] = mul i32 [[DUMMY43_7]], [[DUMMY43_7]] --; CHECK-NEXT: [[DUMMY45_7:%.*]] = mul i32 [[DUMMY44_7]], [[DUMMY44_7]] --; CHECK-NEXT: [[DUMMY46_7:%.*]] = mul i32 [[DUMMY45_7]], [[DUMMY45_7]] --; CHECK-NEXT: [[DUMMY47_7:%.*]] = mul i32 [[DUMMY46_7]], [[DUMMY46_7]] --; CHECK-NEXT: [[DUMMY48_7:%.*]] = mul i32 [[DUMMY47_7]], [[DUMMY47_7]] --; CHECK-NEXT: [[DUMMY49_7:%.*]] = mul i32 [[DUMMY48_7]], [[DUMMY48_7]] --; CHECK-NEXT: [[DUMMY50_7:%.*]] = mul i32 [[DUMMY49_7]], [[DUMMY49_7]] --; CHECK-NEXT: [[SUM_NEXT_7]] = add nsw i32 [[DUMMY50_7]], [[SUM_NEXT_6]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_7]] = add nuw nsw i64 [[INDVARS_IV]], 8 --; CHECK-NEXT: [[NITER_NEXT_7]] = add i64 [[NITER]], 8 --; CHECK-NEXT: [[NITER_NCMP_7:%.*]] = icmp eq i64 [[NITER_NEXT_7]], [[UNROLL_ITER]] --; CHECK-NEXT: br i1 [[NITER_NCMP_7]], label [[FOR_COND_CLEANUP_UNR_LCSSA_LOOPEXIT:%.*]], label [[FOR_BODY]] --; CHECK: for.cond.cleanup.unr-lcssa.loopexit: --; CHECK-NEXT: [[SUM_NEXT_LCSSA_PH_PH:%.*]] = phi i32 [ [[SUM_NEXT_7]], [[FOR_BODY]] ] --; CHECK-NEXT: [[INDVARS_IV_UNR_PH:%.*]] = phi i64 [ [[INDVARS_IV_NEXT_7]], [[FOR_BODY]] ] --; CHECK-NEXT: [[SUM_UNR_PH:%.*]] = phi i32 [ [[SUM_NEXT_7]], [[FOR_BODY]] ] --; CHECK-NEXT: br label [[FOR_COND_CLEANUP_UNR_LCSSA]] --; CHECK: for.cond.cleanup.unr-lcssa: --; CHECK-NEXT: [[SUM_NEXT_LCSSA_PH:%.*]] = phi i32 [ undef, [[ENTRY:%.*]] ], [ [[SUM_NEXT_LCSSA_PH_PH]], [[FOR_COND_CLEANUP_UNR_LCSSA_LOOPEXIT]] ] --; CHECK-NEXT: [[INDVARS_IV_UNR:%.*]] = phi i64 [ 0, [[ENTRY]] ], [ [[INDVARS_IV_UNR_PH]], [[FOR_COND_CLEANUP_UNR_LCSSA_LOOPEXIT]] ] --; CHECK-NEXT: [[SUM_UNR:%.*]] = phi i32 [ 0, [[ENTRY]] ], [ [[SUM_UNR_PH]], [[FOR_COND_CLEANUP_UNR_LCSSA_LOOPEXIT]] ] --; CHECK-NEXT: [[LCMP_MOD:%.*]] = icmp ne i64 [[XTRAITER]], 0 --; CHECK-NEXT: br i1 [[LCMP_MOD]], label [[FOR_BODY_EPIL_PREHEADER:%.*]], label [[FOR_COND_CLEANUP:%.*]] --; CHECK: for.body.epil.preheader: --; CHECK-NEXT: br label [[FOR_BODY_EPIL:%.*]] --; CHECK: for.body.epil: --; CHECK-NEXT: [[INDVARS_IV_EPIL:%.*]] = phi i64 [ [[INDVARS_IV_UNR]], [[FOR_BODY_EPIL_PREHEADER]] ], [ [[INDVARS_IV_NEXT_EPIL:%.*]], [[FOR_BODY_EPIL]] ] --; CHECK-NEXT: [[SUM_EPIL:%.*]] = phi i32 [ [[SUM_UNR]], [[FOR_BODY_EPIL_PREHEADER]] ], [ [[SUM_NEXT_EPIL:%.*]], [[FOR_BODY_EPIL]] ] --; CHECK-NEXT: [[EPIL_ITER:%.*]] = phi i64 [ 0, [[FOR_BODY_EPIL_PREHEADER]] ], [ [[EPIL_ITER_NEXT:%.*]], [[FOR_BODY_EPIL]] ] --; CHECK-NEXT: [[ARRAYIDX_EPIL:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_EPIL]] --; CHECK-NEXT: [[VAL_EPIL:%.*]] = load i32, ptr [[ARRAYIDX_EPIL]], align 4 --; CHECK-NEXT: [[DUMMY1_EPIL:%.*]] = mul i32 [[VAL_EPIL]], [[VAL_EPIL]] --; CHECK-NEXT: [[DUMMY2_EPIL:%.*]] = mul i32 [[DUMMY1_EPIL]], [[DUMMY1_EPIL]] --; CHECK-NEXT: [[DUMMY3_EPIL:%.*]] = mul i32 [[DUMMY2_EPIL]], [[DUMMY2_EPIL]] --; CHECK-NEXT: [[DUMMY4_EPIL:%.*]] = mul i32 [[DUMMY3_EPIL]], [[DUMMY3_EPIL]] --; CHECK-NEXT: [[DUMMY5_EPIL:%.*]] = mul i32 [[DUMMY4_EPIL]], [[DUMMY4_EPIL]] --; CHECK-NEXT: [[DUMMY6_EPIL:%.*]] = mul i32 [[DUMMY5_EPIL]], [[DUMMY5_EPIL]] --; CHECK-NEXT: [[DUMMY7_EPIL:%.*]] = mul i32 [[DUMMY6_EPIL]], [[DUMMY6_EPIL]] --; CHECK-NEXT: [[DUMMY8_EPIL:%.*]] = mul i32 [[DUMMY7_EPIL]], [[DUMMY7_EPIL]] --; CHECK-NEXT: [[DUMMY9_EPIL:%.*]] = mul i32 [[DUMMY8_EPIL]], [[DUMMY8_EPIL]] --; CHECK-NEXT: [[DUMMY10_EPIL:%.*]] = mul i32 [[DUMMY9_EPIL]], [[DUMMY9_EPIL]] --; CHECK-NEXT: [[DUMMY11_EPIL:%.*]] = mul i32 [[DUMMY10_EPIL]], [[DUMMY10_EPIL]] --; CHECK-NEXT: [[DUMMY12_EPIL:%.*]] = mul i32 [[DUMMY11_EPIL]], [[DUMMY11_EPIL]] --; CHECK-NEXT: [[DUMMY13_EPIL:%.*]] = mul i32 [[DUMMY12_EPIL]], [[DUMMY12_EPIL]] --; CHECK-NEXT: [[DUMMY14_EPIL:%.*]] = mul i32 [[DUMMY13_EPIL]], [[DUMMY13_EPIL]] --; CHECK-NEXT: [[DUMMY15_EPIL:%.*]] = mul i32 [[DUMMY14_EPIL]], [[DUMMY14_EPIL]] --; CHECK-NEXT: [[DUMMY16_EPIL:%.*]] = mul i32 [[DUMMY15_EPIL]], [[DUMMY15_EPIL]] --; CHECK-NEXT: [[DUMMY17_EPIL:%.*]] = mul i32 [[DUMMY16_EPIL]], [[DUMMY16_EPIL]] --; CHECK-NEXT: [[DUMMY18_EPIL:%.*]] = mul i32 [[DUMMY17_EPIL]], [[DUMMY17_EPIL]] --; CHECK-NEXT: [[DUMMY19_EPIL:%.*]] = mul i32 [[DUMMY18_EPIL]], [[DUMMY18_EPIL]] --; CHECK-NEXT: [[DUMMY20_EPIL:%.*]] = mul i32 [[DUMMY19_EPIL]], [[DUMMY19_EPIL]] --; CHECK-NEXT: [[DUMMY21_EPIL:%.*]] = mul i32 [[DUMMY20_EPIL]], [[DUMMY20_EPIL]] --; CHECK-NEXT: [[DUMMY22_EPIL:%.*]] = mul i32 [[DUMMY21_EPIL]], [[DUMMY21_EPIL]] --; CHECK-NEXT: [[DUMMY23_EPIL:%.*]] = mul i32 [[DUMMY22_EPIL]], [[DUMMY22_EPIL]] --; CHECK-NEXT: [[DUMMY24_EPIL:%.*]] = mul i32 [[DUMMY23_EPIL]], [[DUMMY23_EPIL]] --; CHECK-NEXT: [[DUMMY25_EPIL:%.*]] = mul i32 [[DUMMY24_EPIL]], [[DUMMY24_EPIL]] --; CHECK-NEXT: [[DUMMY26_EPIL:%.*]] = mul i32 [[DUMMY25_EPIL]], [[DUMMY25_EPIL]] --; CHECK-NEXT: [[DUMMY27_EPIL:%.*]] = mul i32 [[DUMMY26_EPIL]], [[DUMMY26_EPIL]] --; CHECK-NEXT: [[DUMMY28_EPIL:%.*]] = mul i32 [[DUMMY27_EPIL]], [[DUMMY27_EPIL]] --; CHECK-NEXT: [[DUMMY29_EPIL:%.*]] = mul i32 [[DUMMY28_EPIL]], [[DUMMY28_EPIL]] --; CHECK-NEXT: [[DUMMY30_EPIL:%.*]] = mul i32 [[DUMMY29_EPIL]], [[DUMMY29_EPIL]] --; CHECK-NEXT: [[DUMMY31_EPIL:%.*]] = mul i32 [[DUMMY30_EPIL]], [[DUMMY30_EPIL]] --; CHECK-NEXT: [[DUMMY32_EPIL:%.*]] = mul i32 [[DUMMY31_EPIL]], [[DUMMY31_EPIL]] --; CHECK-NEXT: [[DUMMY33_EPIL:%.*]] = mul i32 [[DUMMY32_EPIL]], [[DUMMY32_EPIL]] --; CHECK-NEXT: [[DUMMY34_EPIL:%.*]] = mul i32 [[DUMMY33_EPIL]], [[DUMMY33_EPIL]] --; CHECK-NEXT: [[DUMMY35_EPIL:%.*]] = mul i32 [[DUMMY34_EPIL]], [[DUMMY34_EPIL]] --; CHECK-NEXT: [[DUMMY36_EPIL:%.*]] = mul i32 [[DUMMY35_EPIL]], [[DUMMY35_EPIL]] --; CHECK-NEXT: [[DUMMY37_EPIL:%.*]] = mul i32 [[DUMMY36_EPIL]], [[DUMMY36_EPIL]] --; CHECK-NEXT: [[DUMMY38_EPIL:%.*]] = mul i32 [[DUMMY37_EPIL]], [[DUMMY37_EPIL]] --; CHECK-NEXT: [[DUMMY39_EPIL:%.*]] = mul i32 [[DUMMY38_EPIL]], [[DUMMY38_EPIL]] --; CHECK-NEXT: [[DUMMY40_EPIL:%.*]] = mul i32 [[DUMMY39_EPIL]], [[DUMMY39_EPIL]] --; CHECK-NEXT: [[DUMMY41_EPIL:%.*]] = mul i32 [[DUMMY40_EPIL]], [[DUMMY40_EPIL]] --; CHECK-NEXT: [[DUMMY42_EPIL:%.*]] = mul i32 [[DUMMY41_EPIL]], [[DUMMY41_EPIL]] --; CHECK-NEXT: [[DUMMY43_EPIL:%.*]] = mul i32 [[DUMMY42_EPIL]], [[DUMMY42_EPIL]] --; CHECK-NEXT: [[DUMMY44_EPIL:%.*]] = mul i32 [[DUMMY43_EPIL]], [[DUMMY43_EPIL]] --; CHECK-NEXT: [[DUMMY45_EPIL:%.*]] = mul i32 [[DUMMY44_EPIL]], [[DUMMY44_EPIL]] --; CHECK-NEXT: [[DUMMY46_EPIL:%.*]] = mul i32 [[DUMMY45_EPIL]], [[DUMMY45_EPIL]] --; CHECK-NEXT: [[DUMMY47_EPIL:%.*]] = mul i32 [[DUMMY46_EPIL]], [[DUMMY46_EPIL]] --; CHECK-NEXT: [[DUMMY48_EPIL:%.*]] = mul i32 [[DUMMY47_EPIL]], [[DUMMY47_EPIL]] --; CHECK-NEXT: [[DUMMY49_EPIL:%.*]] = mul i32 [[DUMMY48_EPIL]], [[DUMMY48_EPIL]] --; CHECK-NEXT: [[DUMMY50_EPIL:%.*]] = mul i32 [[DUMMY49_EPIL]], [[DUMMY49_EPIL]] -+; CHECK-NEXT: [[DUMMY50_EPIL:%.*]] = mul i32 [[DUMMY49]], [[DUMMY49]] - ; CHECK-NEXT: [[SUM_NEXT_EPIL]] = add nsw i32 [[DUMMY50_EPIL]], [[SUM_EPIL]] - ; CHECK-NEXT: [[INDVARS_IV_NEXT_EPIL]] = add nuw nsw i64 [[INDVARS_IV_EPIL]], 1 - ; CHECK-NEXT: [[EXITCOND_NOT_EPIL:%.*]] = icmp eq i64 [[INDVARS_IV_NEXT_EPIL]], [[N]] --; CHECK-NEXT: [[EPIL_ITER_NEXT]] = add i64 [[EPIL_ITER]], 1 --; CHECK-NEXT: [[EPIL_ITER_CMP:%.*]] = icmp ne i64 [[EPIL_ITER_NEXT]], [[XTRAITER]] --; CHECK-NEXT: br i1 [[EPIL_ITER_CMP]], label [[FOR_BODY_EPIL]], label [[FOR_COND_CLEANUP_EPILOG_LCSSA:%.*]], !llvm.loop [[LOOP0:![0-9]+]] --; CHECK: for.cond.cleanup.epilog-lcssa: --; CHECK-NEXT: [[SUM_NEXT_LCSSA_PH1:%.*]] = phi i32 [ [[SUM_NEXT_EPIL]], [[FOR_BODY_EPIL]] ] --; CHECK-NEXT: br label [[FOR_COND_CLEANUP]] -+; CHECK-NEXT: br i1 [[EXITCOND_NOT_EPIL]], label [[FOR_COND_CLEANUP:%.*]], label [[FOR_BODY]] - ; CHECK: for.cond.cleanup: --; CHECK-NEXT: [[SUM_NEXT_LCSSA:%.*]] = phi i32 [ [[SUM_NEXT_LCSSA_PH]], [[FOR_COND_CLEANUP_UNR_LCSSA]] ], [ [[SUM_NEXT_LCSSA_PH1]], [[FOR_COND_CLEANUP_EPILOG_LCSSA]] ] -+; CHECK-NEXT: [[SUM_NEXT_LCSSA:%.*]] = phi i32 [ [[SUM_NEXT_EPIL]], [[FOR_BODY]] ] - ; CHECK-NEXT: ret i32 [[SUM_NEXT_LCSSA]] - ; - entry: --- -2.46.0 - diff --git a/clang/PKGBUILD b/clang/PKGBUILD index c543bf16..d56c2b65 100644 --- a/clang/PKGBUILD +++ b/clang/PKGBUILD @@ -2,8 +2,8 @@ # Contributor: Jan "heftig" Steffens pkgname=clang -pkgver=18.1.8 -pkgrel=7 +pkgver=19.1.6 +pkgrel=2 pkgdesc="C language family frontend for LLVM" arch=('x86_64') url="https://clang.llvm.org/" @@ -24,24 +24,23 @@ source=($_source_base/clang-$pkgver.src.tar.xz{,.sig} $_source_base/cmake-$pkgver.src.tar.xz{,.sig} $_source_base/third-party-$pkgver.src.tar.xz{,.sig} clang-disable-float128-diagnostics-for-device-compilation.patch::https://github.com/llvm/llvm-project/commit/318bff6811e7.patch - enable-fstack-protector-strong-by-default.patch - 0001-Enable-TuningSlowDivide64-on-Barcelona-Bobcat-Bulldo.patch - 0002-Reduce-znver3-4-LoopMicroOpBufferSize-to-practical-l.patch) -sha256sums=('5724fe0a13087d5579104cedd2f8b3bc10a212fb79a0fcdac98f4880e19f4519' + support-__GCC_-CON-DE-STRUCTIVE_SIZE.patch + enable-fstack-protector-strong-by-default.patch) +sha256sums=('6358cbb3e14687ca2f3465c61cffc65589b448aaa912ec2c163ef9fc046e8a89' 'SKIP' - 'e58877fcd95ed106824bd1a31276dd17ed0c53adcd60ca75289eac0654f0a7f1' + '417a7d0048d8eb62dbaa8461f1fd474eb6493b09e14d050b39cc1f051e8b71d1' 'SKIP' - 'f68cf90f369bc7d0158ba70d860b0cb34dbc163d6ff0ebc6cfa5e515b9b2e28d' + 'ad1a3b125ff014ded290094088de40efb9193ce81a24278184230b7d401f8a3e' 'SKIP' - '59badef592dd34893cd319d42b323aaa990b452d05c7180ff20f23ab1b41e837' + '9c7ec82d9a240dc2287b8de89d6881bb64ceea0dcd6ce133c34ef65bda22d99e' 'SKIP' - 'b76b810f3d3dc5d08e83c4236cb6e395aa9bd5e3ea861e8c319b216d093db074' + '0e8048333bab2ba3607910e5d074259f08dccf00615778d03a2a55416718eb45' 'SKIP' '94a3d4df2443f9dc9e256e6c0c661ff4a4ca4f34a5ca351f065511b9694faf2a' - 'ef319e65f927718e1d3b1a23c480d686b1d292e2a0bf27229540964f9734117a' - '7d4b76f753618752aaed64bb496ed3cd443faf1d3124b540c643abcca5a9756e' - 'bac174d1958fa3134ce530cf2eed8abdbf910697e87cee6e4a23a5a3a1098b2d') -validpgpkeys=('474E22316ABF4785A88C6E8EA2C794A986419D8A') # Tom Stellard + '8832b4ee02fe8a0e57fca608288242f80e348ee9b60be3eb0069c8b91a42fbf4' + 'ef319e65f927718e1d3b1a23c480d686b1d292e2a0bf27229540964f9734117a') +validpgpkeys=('474E22316ABF4785A88C6E8EA2C794A986419D8A' # Tom Stellard + 'D574BD5D1D0E98895E3BF90044F2485E45D59042') # Tobias Hieta # Utilizing LLVM_DISTRIBUTION_COMPONENTS to avoid # installing static libraries; inspired by Gentoo @@ -68,15 +67,10 @@ prepare() { mkdir build mv "$srcdir/clang-tools-extra-$pkgver.src" tools/extra patch -Np2 -i ../enable-fstack-protector-strong-by-default.patch - patch -Np2 -i ../clang-disable-float128-diagnostics-for-device-compilation.patch - # Attempt to convert script to Python 3 - 2to3 -wn --no-diffs \ - tools/extra/clang-include-fixer/find-all-symbols/tool/run-find-all-symbols.py - - cd $srcdir/llvm-$pkgver.src - patch -Np1 < ../0001-Enable-TuningSlowDivide64-on-Barcelona-Bobcat-Bulldo.patch - patch -Np1 < ../0002-Reduce-znver3-4-LoopMicroOpBufferSize-to-practical-l.patch + # Fix hardcoded test path + sed -i 's/clang-tools-extra/tools\/extra/g' tools/extra/test/clang-doc/enum.cpp + sed -i 's/clang-tools-extra/tools\/extra/g' tools/extra/test/clang-doc/namespace.cpp } build() { diff --git a/clang/clang-disable-float128-diagnostics-for-device-compilation.patch b/clang/clang-disable-float128-diagnostics-for-device-compilation.patch deleted file mode 100644 index 645108cb..00000000 --- a/clang/clang-disable-float128-diagnostics-for-device-compilation.patch +++ /dev/null @@ -1,66 +0,0 @@ -From 318bff6811e7a7e0d3295ed85aa3ad01d475cc8c Mon Sep 17 00:00:00 2001 -From: Pranav Kant -Date: Wed, 6 Mar 2024 16:40:23 -0800 -Subject: [PATCH] [clang][CUDA] Disable float128 diagnostics for device - compilation (#83918) - ---- - clang/lib/Sema/SemaDeclAttr.cpp | 4 +++- - clang/lib/Sema/SemaType.cpp | 2 +- - clang/test/SemaCUDA/float128.cu | 18 ++++++++++++++++++ - 3 files changed, 22 insertions(+), 2 deletions(-) - create mode 100644 clang/test/SemaCUDA/float128.cu - -diff --git a/clang/lib/Sema/SemaDeclAttr.cpp b/clang/lib/Sema/SemaDeclAttr.cpp -index 397b5db0dc0669..e6943efb345ce0 100644 ---- a/clang/lib/Sema/SemaDeclAttr.cpp -+++ b/clang/lib/Sema/SemaDeclAttr.cpp -@@ -4877,7 +4877,9 @@ void Sema::AddModeAttr(Decl *D, const AttributeCommonInfo &CI, - NewElemTy = Context.getRealTypeForBitwidth(DestWidth, ExplicitType); - - if (NewElemTy.isNull()) { -- Diag(AttrLoc, diag::err_machine_mode) << 1 /*Unsupported*/ << Name; -+ // Only emit diagnostic on host for 128-bit mode attribute -+ if (!(DestWidth == 128 && getLangOpts().CUDAIsDevice)) -+ Diag(AttrLoc, diag::err_machine_mode) << 1 /*Unsupported*/ << Name; - return; - } - -diff --git a/clang/lib/Sema/SemaType.cpp b/clang/lib/Sema/SemaType.cpp -index 1e43e36016a66f..3148299f6467af 100644 ---- a/clang/lib/Sema/SemaType.cpp -+++ b/clang/lib/Sema/SemaType.cpp -@@ -1561,7 +1561,7 @@ static QualType ConvertDeclSpecToType(TypeProcessingState &state) { - break; - case DeclSpec::TST_float128: - if (!S.Context.getTargetInfo().hasFloat128Type() && -- !S.getLangOpts().SYCLIsDevice && -+ !S.getLangOpts().SYCLIsDevice && !S.getLangOpts().CUDAIsDevice && - !(S.getLangOpts().OpenMP && S.getLangOpts().OpenMPIsTargetDevice)) - S.Diag(DS.getTypeSpecTypeLoc(), diag::err_type_unsupported) - << "__float128"; -diff --git a/clang/test/SemaCUDA/float128.cu b/clang/test/SemaCUDA/float128.cu -new file mode 100644 -index 00000000000000..f8f20cb1588d76 ---- /dev/null -+++ b/clang/test/SemaCUDA/float128.cu -@@ -0,0 +1,18 @@ -+// CPU-side compilation on x86 (no errors expected). -+// RUN: %clang_cc1 -triple x86_64-unknown-linux-gnu -aux-triple nvptx64 -x cuda -fsyntax-only -verify=cpu %s -+ -+// GPU-side compilation on x86 (no errors expected) -+// RUN: %clang_cc1 -triple nvptx64 -aux-triple x86_64-unknown-linux-gnu -fcuda-is-device -x cuda -fsyntax-only -verify=gpu %s -+ -+// cpu-no-diagnostics -+typedef _Complex float __cfloat128 __attribute__ ((__mode__ (__TC__))); -+typedef __float128 _Float128; -+ -+// gpu-note@+1 {{'a' defined here}} -+__attribute__((device)) __float128 f(__float128 a, float b) { -+ // gpu-note@+1 {{'c' defined here}} -+ __float128 c = b + 1.0; -+ // gpu-error@+2 {{'a' requires 128 bit size '__float128' type support, but target 'nvptx64' does not support it}} -+ // gpu-error@+1 {{'c' requires 128 bit size '__float128' type support, but target 'nvptx64' does not support it}} -+ return a + c; -+} -\ No newline at end of file diff --git a/clang/clangd-handle-missing-ending-brace.patch b/clang/clangd-handle-missing-ending-brace.patch deleted file mode 100644 index 4e79205d..00000000 --- a/clang/clangd-handle-missing-ending-brace.patch +++ /dev/null @@ -1,78 +0,0 @@ -From 9d1dada57741d204f8a95aa2b0c89a7242e101f1 Mon Sep 17 00:00:00 2001 -From: Nathan Ridge -Date: Thu, 18 Jan 2024 01:51:43 -0500 -Subject: [PATCH] [clangd] Handle an expanded token range that ends in the - `eof` token in TokenBuffer::spelledForExpanded() (#78092) - -Such ranges can legitimately arise in the case of invalid code, such as -a declaration missing an ending brace. - -Fixes https://github.com/clangd/clangd/issues/1559 ---- - clang-tools-extra/clangd/unittests/DumpASTTests.cpp | 11 +++++++++++ - clang/lib/Tooling/Syntax/Tokens.cpp | 6 ++++++ - clang/unittests/Tooling/Syntax/TokensTest.cpp | 12 ++++++++++++ - 3 files changed, 29 insertions(+) - -diff --git a/clang-tools-extra/clangd/unittests/DumpASTTests.cpp b/clang-tools-extra/clangd/unittests/DumpASTTests.cpp -index d1b8f21b82c65a..304682118c871d 100644 ---- a/clang-tools-extra/clangd/unittests/DumpASTTests.cpp -+++ b/clang-tools-extra/clangd/unittests/DumpASTTests.cpp -@@ -186,6 +186,17 @@ TEST(DumpASTTests, Arcana) { - EXPECT_THAT(Node.children.front().arcana, testing::StartsWith("QualType ")); - } - -+TEST(DumpASTTests, UnbalancedBraces) { -+ // Test that we don't crash while trying to compute a source range for the -+ // node whose ending brace is missing, and also that the source range is -+ // not empty. -+ Annotations Case("/*error-ok*/ $func[[int main() {]]"); -+ ParsedAST AST = TestTU::withCode(Case.code()).build(); -+ auto Node = dumpAST(DynTypedNode::create(findDecl(AST, "main")), -+ AST.getTokens(), AST.getASTContext()); -+ ASSERT_EQ(Node.range, Case.range("func")); -+} -+ - } // namespace - } // namespace clangd - } // namespace clang -diff --git a/clang/lib/Tooling/Syntax/Tokens.cpp b/clang/lib/Tooling/Syntax/Tokens.cpp -index 2f28b9cf286a63..8d32c45a4a70cf 100644 ---- a/clang/lib/Tooling/Syntax/Tokens.cpp -+++ b/clang/lib/Tooling/Syntax/Tokens.cpp -@@ -401,6 +401,12 @@ std::string TokenBuffer::Mapping::str() const { - - std::optional> - TokenBuffer::spelledForExpanded(llvm::ArrayRef Expanded) const { -+ // In cases of invalid code, AST nodes can have source ranges that include -+ // the `eof` token. As there's no spelling for this token, exclude it from -+ // the range. -+ if (!Expanded.empty() && Expanded.back().kind() == tok::eof) { -+ Expanded = Expanded.drop_back(); -+ } - // Mapping an empty range is ambiguous in case of empty mappings at either end - // of the range, bail out in that case. - if (Expanded.empty()) -diff --git a/clang/unittests/Tooling/Syntax/TokensTest.cpp b/clang/unittests/Tooling/Syntax/TokensTest.cpp -index 0c08318a637c0b..42f51697139658 100644 ---- a/clang/unittests/Tooling/Syntax/TokensTest.cpp -+++ b/clang/unittests/Tooling/Syntax/TokensTest.cpp -@@ -816,6 +816,18 @@ TEST_F(TokenBufferTest, SpelledByExpanded) { - EXPECT_EQ(Buffer.spelledForExpanded(findExpanded("prev good")), std::nullopt); - } - -+TEST_F(TokenBufferTest, NoCrashForEofToken) { -+ recordTokens(R"cpp( -+ int main() { -+ )cpp"); -+ ASSERT_TRUE(!Buffer.expandedTokens().empty()); -+ ASSERT_EQ(Buffer.expandedTokens().back().kind(), tok::eof); -+ // Expanded range including `eof` is handled gracefully (`eof` is ignored). -+ EXPECT_THAT( -+ Buffer.spelledForExpanded(Buffer.expandedTokens()), -+ ValueIs(SameRange(Buffer.spelledTokens(SourceMgr->getMainFileID())))); -+} -+ - TEST_F(TokenBufferTest, ExpandedTokensForRange) { - recordTokens(R"cpp( - #define SIGN(X) X##_washere diff --git a/clang/support-__GCC_-CON-DE-STRUCTIVE_SIZE.patch b/clang/support-__GCC_-CON-DE-STRUCTIVE_SIZE.patch new file mode 100644 index 00000000..96bf1520 --- /dev/null +++ b/clang/support-__GCC_-CON-DE-STRUCTIVE_SIZE.patch @@ -0,0 +1,584 @@ +From c962e55e28b057c6d7b699d8e6454cc4d8dcf382 Mon Sep 17 00:00:00 2001 +From: Aaron Ballman +Date: Fri, 26 Apr 2024 12:05:15 -0400 +Subject: [PATCH] [C++17] Support __GCC_[CON|DE]STRUCTIVE_SIZE (#89446) + +These macros are used by STL implementations to support implementation +of std::hardware_destructive_interference_size and +std::hardware_constructive_interference_size + +Fixes #60174 + +--------- + +Co-authored-by: Louis Dionne +--- + .../test/pp-trace/pp-trace-pragma-general.cpp | 6 +++ + .../test/pp-trace/pp-trace-pragma-ms.cpp | 8 ++- + .../test/pp-trace/pp-trace-pragma-opencl.cpp | 6 +++ + clang/docs/LanguageExtensions.rst | 22 +++++++++ + clang/docs/ReleaseNotes.rst | 12 +++++ + clang/include/clang/Basic/TargetInfo.h | 10 ++++ + clang/lib/Basic/Targets/ARM.h | 4 ++ + clang/lib/Basic/Targets/AVR.h | 4 ++ + clang/lib/Basic/Targets/BPF.h | 4 ++ + clang/lib/Basic/Targets/M68k.h | 4 ++ + clang/lib/Basic/Targets/Mips.h | 4 ++ + clang/lib/Basic/Targets/PPC.h | 8 +++ + clang/lib/Basic/Targets/RISCV.h | 4 ++ + clang/lib/Basic/Targets/Sparc.h | 4 ++ + clang/lib/Basic/Targets/SystemZ.h | 4 ++ + clang/lib/Frontend/InitPreprocessor.cpp | 10 ++++ + clang/test/AST/ast-dump-macro-json.c | 4 +- + .../relevant_lines/multifile.c | 2 +- + .../update_consecutive_macro_address_space.c | 13 ++--- + .../Preprocessor/hardware_interference.cpp | 17 +++++++ + clang/test/Preprocessor/init-aarch64.c | 12 +++-- + clang/test/Preprocessor/init.c | 49 +++++++++++-------- + .../test/Preprocessor/predefined-win-macros.c | 6 ++- + 23 files changed, 180 insertions(+), 37 deletions(-) + create mode 100644 clang/test/Preprocessor/hardware_interference.cpp + +diff --git a/clang/tools/extra/test/pp-trace/pp-trace-pragma-general.cpp b/clang-tools-extra/test/pp-trace/pp-trace-pragma-general.cpp +index f01ebd1ec67d..b16ec56e321b 100644 +--- a/clang/tools/extra/test/pp-trace/pp-trace-pragma-general.cpp ++++ b/clang/tools/extra/test/pp-trace/pp-trace-pragma-general.cpp +@@ -21,6 +21,12 @@ void foo() { + + // CHECK: --- + // CHECK-NEXT: - Callback: PragmaDirective ++// CHECK-NEXT: Loc: ":{{.+}}:1" ++// CHECK-NEXT: Introducer: PIK_HashPragma ++// CHECK-NEXT: - Callback: PragmaDirective ++// CHECK-NEXT: Loc: ":{{.+}}:1" ++// CHECK-NEXT: Introducer: PIK_HashPragma ++// CHECK-NEXT: - Callback: PragmaDirective + // CHECK-NEXT: Loc: "{{.*}}{{[/\\]}}pp-trace-pragma-general.cpp:3:1" + // CHECK-NEXT: Introducer: PIK_HashPragma + // CHECK-NEXT: - Callback: PragmaDiagnosticPush +diff --git a/clang/tools/extra/test/pp-trace/pp-trace-pragma-ms.cpp b/clang-tools-extra/test/pp-trace/pp-trace-pragma-ms.cpp +index 932b0eb93c90..f5bf9ac2b955 100644 +--- a/clang/tools/extra/test/pp-trace/pp-trace-pragma-ms.cpp ++++ b/clang/tools/extra/test/pp-trace/pp-trace-pragma-ms.cpp +@@ -18,6 +18,12 @@ + + // CHECK: --- + // CHECK-NEXT: - Callback: PragmaDirective ++// CHECK-NEXT: Loc: ":{{.+}}:1" ++// CHECK-NEXT: Introducer: PIK_HashPragma ++// CHECK-NEXT: - Callback: PragmaDirective ++// CHECK-NEXT: Loc: ":{{.+}}:1" ++// CHECK-NEXT: Introducer: PIK_HashPragma ++// CHECK-NEXT: - Callback: PragmaDirective + // CHECK-NEXT: Loc: "{{.*}}{{[/\\]}}pp-trace-pragma-ms.cpp:3:1" + // CHECK-NEXT: Introducer: PIK_HashPragma + // CHECK-NEXT: - Callback: PragmaComment +@@ -67,7 +73,7 @@ + // CHECK-NEXT: Introducer: PIK_HashPragma + // CHECK-NEXT: - Callback: PragmaMessage + // CHECK-NEXT: Loc: "{{.*}}{{[/\\]}}pp-trace-pragma-ms.cpp:13:9" +-// CHECK-NEXT: Namespace: ++// CHECK-NEXT: Namespace: + // CHECK-NEXT: Kind: PMK_Message + // CHECK-NEXT: Str: message argument + // CHECK-NEXT: - Callback: PragmaDirective +diff --git a/clang/tools/extra/test/pp-trace/pp-trace-pragma-opencl.cpp b/clang-tools-extra/test/pp-trace/pp-trace-pragma-opencl.cpp +index 31f61027994f..ed33d37eb3d5 100644 +--- a/clang/tools/extra/test/pp-trace/pp-trace-pragma-opencl.cpp ++++ b/clang/tools/extra/test/pp-trace/pp-trace-pragma-opencl.cpp +@@ -6,6 +6,12 @@ + + // CHECK: --- + // CHECK-NEXT: - Callback: PragmaDirective ++// CHECK-NEXT: Loc: ":{{.+}}:1" ++// CHECK-NEXT: Introducer: PIK_HashPragma ++// CHECK-NEXT: - Callback: PragmaDirective ++// CHECK-NEXT: Loc: ":{{.+}}:1" ++// CHECK-NEXT: Introducer: PIK_HashPragma ++// CHECK-NEXT: - Callback: PragmaDirective + // CHECK-NEXT: Loc: "{{.*}}{{[/\\]}}pp-trace-pragma-opencl.cpp:3:1" + // CHECK-NEXT: Introducer: PIK_HashPragma + // CHECK-NEXT: - Callback: PragmaOpenCLExtension +diff --git a/clang/docs/LanguageExtensions.rst b/clang/docs/LanguageExtensions.rst +index c1420079f751..e4deb5fc3a5b 100644 +--- a/clang/docs/LanguageExtensions.rst ++++ b/clang/docs/LanguageExtensions.rst +@@ -5347,3 +5347,25 @@ but the expression has no runtime effects. + Type- and value-dependent expressions are not supported yet. + + This facility is designed to aid with testing name lookup machinery. ++ ++Predefined Macros ++================= ++ ++`__GCC_DESTRUCTIVE_SIZE` and `__GCC_CONSTRUCTIVE_SIZE` ++------------------------------------------------------ ++Specify the mimum offset between two objects to avoid false sharing and the ++maximum size of contiguous memory to promote true sharing, respectively. These ++macros are predefined in all C and C++ language modes, but can be redefined on ++the command line with ``-D`` to specify different values as needed or can be ++undefined on the command line with ``-U`` to disable support for the feature. ++ ++**Note: the values the macros expand to are not guaranteed to be stable. They ++are are affected by architectures and CPU tuning flags, can change between ++releases of Clang and will not match the values defined by other compilers such ++as GCC.** ++ ++Compiling different TUs depending on these flags (including use of ++``std::hardware_constructive_interference`` or ++``std::hardware_destructive_interference``) with different compilers, macro ++definitions, or architecture flags will lead to ODR violations and should be ++avoided. +\ No newline at end of file +diff --git a/clang/docs/ReleaseNotes.rst b/clang/docs/ReleaseNotes.rst +index e533ecfd5aeb..8ab85c379622 100644 +--- a/clang/docs/ReleaseNotes.rst ++++ b/clang/docs/ReleaseNotes.rst +@@ -203,6 +203,18 @@ sections with improvements to Clang's support for those languages. + C++ Language Changes + -------------------- + ++C++17 Feature Support ++^^^^^^^^^^^^^^^^^^^^^ ++- Clang now exposes ``__GCC_DESTRUCTIVE_SIZE`` and ``__GCC_CONSTRUCTIVE_SIZE`` ++ predefined macros to support standard library implementations of ++ ``std::hardware_destructive_interference_size`` and ++ ``std::hardware_constructive_interference_size``, respectively. These macros ++ are predefined in all C and C++ language modes. The values the macros ++ expand to are not stable between releases of Clang and do not need to match ++ the values produced by GCC, so these macros should not be used from header ++ files because they may not be stable across multiple TUs (the values may vary ++ based on compiler version as well as CPU tuning). #GH60174 ++ + C++20 Feature Support + ^^^^^^^^^^^^^^^^^^^^^ + - Implemented `P1907R1 `_ which extends allowed non-type template argument +diff --git a/clang/include/clang/Basic/TargetInfo.h b/clang/include/clang/Basic/TargetInfo.h +index 3eb23ebdacf0..64f4726f3c6e 100644 +--- a/clang/include/clang/Basic/TargetInfo.h ++++ b/clang/include/clang/Basic/TargetInfo.h +@@ -39,6 +39,7 @@ + #include + #include + #include ++#include + #include + + namespace llvm { +@@ -1741,6 +1742,15 @@ public: + /// Whether to support HIP image/texture API's. + virtual bool hasHIPImageSupport() const { return true; } + ++ /// The first value in the pair is the minimum offset between two objects to ++ /// avoid false sharing (destructive interference). The second value in the ++ /// pair is maximum size of contiguous memory to promote true sharing ++ /// (constructive interference). Neither of these values are considered part ++ /// of the ABI and can be changed by targets at any time. ++ virtual std::pair hardwareInterferenceSizes() const { ++ return std::make_pair(64, 64); ++ } ++ + protected: + /// Copy type and layout related info. + void copyAuxTarget(const TargetInfo *Aux); +diff --git a/clang/lib/Basic/Targets/ARM.h b/clang/lib/Basic/Targets/ARM.h +index 9802eb01abf3..ec5ad352b539 100644 +--- a/clang/lib/Basic/Targets/ARM.h ++++ b/clang/lib/Basic/Targets/ARM.h +@@ -210,6 +210,10 @@ public: + bool hasBitIntType() const override { return true; } + + const char *getBFloat16Mangling() const override { return "u6__bf16"; }; ++ ++ std::pair hardwareInterferenceSizes() const override { ++ return std::make_pair(getTriple().isArch64Bit() ? 256 : 64, 64); ++ } + }; + + class LLVM_LIBRARY_VISIBILITY ARMleTargetInfo : public ARMTargetInfo { +diff --git a/clang/lib/Basic/Targets/AVR.h b/clang/lib/Basic/Targets/AVR.h +index 9376c46cd98c..feeb04f37eeb 100644 +--- a/clang/lib/Basic/Targets/AVR.h ++++ b/clang/lib/Basic/Targets/AVR.h +@@ -175,6 +175,10 @@ public: + std::optional handleAsmEscapedChar(char EscChar) const override; + StringRef getABI() const override { return ABI; } + ++ std::pair hardwareInterferenceSizes() const override { ++ return std::make_pair(32, 32); ++ } ++ + protected: + std::string CPU; + StringRef ABI; +diff --git a/clang/lib/Basic/Targets/BPF.h b/clang/lib/Basic/Targets/BPF.h +index 489f29fc4fea..d19b37dd4df7 100644 +--- a/clang/lib/Basic/Targets/BPF.h ++++ b/clang/lib/Basic/Targets/BPF.h +@@ -113,6 +113,10 @@ public: + StringRef CPUName(Name); + return isValidCPUName(CPUName); + } ++ ++ std::pair hardwareInterferenceSizes() const override { ++ return std::make_pair(32, 32); ++ } + }; + } // namespace targets + } // namespace clang +diff --git a/clang/lib/Basic/Targets/M68k.h b/clang/lib/Basic/Targets/M68k.h +index a9c262e62fba..3bff5244fc65 100644 +--- a/clang/lib/Basic/Targets/M68k.h ++++ b/clang/lib/Basic/Targets/M68k.h +@@ -55,6 +55,10 @@ public: + BuiltinVaListKind getBuiltinVaListKind() const override; + bool setCPU(const std::string &Name) override; + CallingConvCheckResult checkCallingConvention(CallingConv CC) const override; ++ ++ std::pair hardwareInterferenceSizes() const override { ++ return std::make_pair(32, 32); ++ } + }; + + } // namespace targets +diff --git a/clang/lib/Basic/Targets/Mips.h b/clang/lib/Basic/Targets/Mips.h +index 23d4e1b598fa..42eeb12cd7bb 100644 +--- a/clang/lib/Basic/Targets/Mips.h ++++ b/clang/lib/Basic/Targets/Mips.h +@@ -421,6 +421,10 @@ public: + + bool validateTarget(DiagnosticsEngine &Diags) const override; + bool hasBitIntType() const override { return true; } ++ ++ std::pair hardwareInterferenceSizes() const override { ++ return std::make_pair(32, 32); ++ } + }; + } // namespace targets + } // namespace clang +diff --git a/clang/lib/Basic/Targets/PPC.h b/clang/lib/Basic/Targets/PPC.h +index 4d62673ba7fb..cffb39797519 100644 +--- a/clang/lib/Basic/Targets/PPC.h ++++ b/clang/lib/Basic/Targets/PPC.h +@@ -406,6 +406,10 @@ public: + // This is the ELF definition + return TargetInfo::PowerABIBuiltinVaList; + } ++ ++ std::pair hardwareInterferenceSizes() const override { ++ return std::make_pair(32, 32); ++ } + }; + + // Note: ABI differences may eventually require us to have a separate +@@ -486,6 +490,10 @@ public: + return CCCR_Warning; + } + } ++ ++ std::pair hardwareInterferenceSizes() const override { ++ return std::make_pair(128, 128); ++ } + }; + + class LLVM_LIBRARY_VISIBILITY AIXPPC32TargetInfo : +diff --git a/clang/lib/Basic/Targets/RISCV.h b/clang/lib/Basic/Targets/RISCV.h +index bfbdafb682c8..ab066ab2855a 100644 +--- a/clang/lib/Basic/Targets/RISCV.h ++++ b/clang/lib/Basic/Targets/RISCV.h +@@ -120,6 +120,10 @@ public: + void fillValidTuneCPUList(SmallVectorImpl &Values) const override; + bool supportsTargetAttributeTune() const override { return true; } + ParsedTargetAttr parseTargetAttr(StringRef Str) const override; ++ ++ std::pair hardwareInterferenceSizes() const override { ++ return std::make_pair(32, 32); ++ } + }; + class LLVM_LIBRARY_VISIBILITY RISCV32TargetInfo : public RISCVTargetInfo { + public: +diff --git a/clang/lib/Basic/Targets/Sparc.h b/clang/lib/Basic/Targets/Sparc.h +index 214fef88e1dc..3357bee33e1a 100644 +--- a/clang/lib/Basic/Targets/Sparc.h ++++ b/clang/lib/Basic/Targets/Sparc.h +@@ -140,6 +140,10 @@ public: + CPU = getCPUKind(Name); + return CPU != CK_GENERIC; + } ++ ++ std::pair hardwareInterferenceSizes() const override { ++ return std::make_pair(32, 32); ++ } + }; + + // SPARC v8 is the 32-bit mode selected by Triple::sparc. +diff --git a/clang/lib/Basic/Targets/SystemZ.h b/clang/lib/Basic/Targets/SystemZ.h +index e4ec338880f2..e8ace3f71b72 100644 +--- a/clang/lib/Basic/Targets/SystemZ.h ++++ b/clang/lib/Basic/Targets/SystemZ.h +@@ -212,6 +212,10 @@ public: + int getEHDataRegisterNumber(unsigned RegNo) const override { + return RegNo < 4 ? 6 + RegNo : -1; + } ++ ++ std::pair hardwareInterferenceSizes() const override { ++ return std::make_pair(256, 256); ++ } + }; + } // namespace targets + } // namespace clang +diff --git a/clang/lib/Frontend/InitPreprocessor.cpp b/clang/lib/Frontend/InitPreprocessor.cpp +index 1b91c86f9139..4b6e40c29ab9 100644 +--- a/clang/lib/Frontend/InitPreprocessor.cpp ++++ b/clang/lib/Frontend/InitPreprocessor.cpp +@@ -1200,6 +1200,16 @@ static void InitializePredefinedMacros(const TargetInfo &TI, + Builder.defineMacro("__GCC_ATOMIC_TEST_AND_SET_TRUEVAL", "1"); + } + ++ // GCC defines these macros in both C and C++ modes despite them being needed ++ // mostly for STL implementations in C++. ++ auto [Destructive, Constructive] = TI.hardwareInterferenceSizes(); ++ Builder.defineMacro("__GCC_DESTRUCTIVE_SIZE", Twine(Destructive)); ++ Builder.defineMacro("__GCC_CONSTRUCTIVE_SIZE", Twine(Constructive)); ++ // We need to use push_macro to allow users to redefine these macros from the ++ // command line with -D and not issue a -Wmacro-redefined warning. ++ Builder.append("#pragma push_macro(\"__GCC_DESTRUCTIVE_SIZE\")"); ++ Builder.append("#pragma push_macro(\"__GCC_CONSTRUCTIVE_SIZE\")"); ++ + auto addLockFreeMacros = [&](const llvm::Twine &Prefix) { + // Used by libc++ and libstdc++ to implement ATOMIC__LOCK_FREE. + #define DEFINE_LOCK_FREE_MACRO(TYPE, Type) \ +diff --git a/clang/test/AST/ast-dump-macro-json.c b/clang/test/AST/ast-dump-macro-json.c +index 96f4be6fec3d..fb9b4118b4f1 100644 +--- a/clang/test/AST/ast-dump-macro-json.c ++++ b/clang/test/AST/ast-dump-macro-json.c +@@ -132,7 +132,7 @@ void BLAP(foo, __COUNTER__)(void); + // CHECK-NEXT: "spellingLoc": { + // CHECK-NEXT: "offset": {{[0-9]+}}, + // CHECK-NEXT: "file": "", +-// CHECK-NEXT: "line": 3, ++// CHECK-NEXT: "line": 5, + // CHECK-NEXT: "col": 1, + // CHECK-NEXT: "tokLen": 4 + // CHECK-NEXT: }, +@@ -169,7 +169,7 @@ void BLAP(foo, __COUNTER__)(void); + // CHECK-NEXT: "spellingLoc": { + // CHECK-NEXT: "offset": {{[0-9]+}}, + // CHECK-NEXT: "file": "", +-// CHECK-NEXT: "line": 5, ++// CHECK-NEXT: "line": 7, + // CHECK-NEXT: "col": 1, + // CHECK-NEXT: "tokLen": 4 + // CHECK-NEXT: }, +diff --git a/clang/test/Analysis/html_diagnostics/relevant_lines/multifile.c b/clang/test/Analysis/html_diagnostics/relevant_lines/multifile.c +index 3abffd609b5b..1998c9383d9d 100644 +--- a/clang/test/Analysis/html_diagnostics/relevant_lines/multifile.c ++++ b/clang/test/Analysis/html_diagnostics/relevant_lines/multifile.c +@@ -11,4 +11,4 @@ int f(int coin) { + // RUN: rm -rf %t.output + // RUN: %clang_analyze_cc1 -analyze -analyzer-checker=core -analyzer-output html -o %t.output %s + // RUN: cat %t.output/* | FileCheck %s --match-full-lines +-// CHECK: var relevant_lines = {"1": {"3": 1, "4": 1, "5": 1, "6": 1}, "3": {"3": 1, "4": 1, "5": 1, "6": 1, "7": 1}}; ++// CHECK: var relevant_lines = {"1": {"3": 1, "4": 1, "5": 1, "6": 1}, "4": {"3": 1, "4": 1, "5": 1, "6": 1, "7": 1}}; +diff --git a/clang/test/Lexer/update_consecutive_macro_address_space.c b/clang/test/Lexer/update_consecutive_macro_address_space.c +index 80ef4557591c..6f74709556c0 100644 +--- a/clang/test/Lexer/update_consecutive_macro_address_space.c ++++ b/clang/test/Lexer/update_consecutive_macro_address_space.c +@@ -1,14 +1,15 @@ + // RUN: %clang -cc1 -print-stats %s 2>&1 | FileCheck %s +-// CHECK: 6 local SLocEntries allocated ++// CHECK: 7 local SLocEntries allocated + // +-// Verify that the macro arg expansion is split to two file ids, we have 6 file +-// ids rather than 5: ++// Verify that the macro arg expansion is split to two file ids, we have 7 file ++// ids rather than 6: + // 0: invalid file id + // 1: main file + // 2: builtin file +-// 3: macro expansion for X +-// 4: macro arg expansions for 1 +-// 5: macro arg expansions for == 2 ++// 3: scratch space for __GCC_[CON|DE]STRUCTIVE_SIZE macros ++// 4: macro expansion for X ++// 5: macro arg expansions for 1 ++// 6: macro arg expansions for == 2 + #define X(x) (int)(x); + void func() { + X(1 +diff --git a/clang/test/Preprocessor/hardware_interference.cpp b/clang/test/Preprocessor/hardware_interference.cpp +new file mode 100644 +index 000000000000..f3727aadd32a +--- /dev/null ++++ b/clang/test/Preprocessor/hardware_interference.cpp +@@ -0,0 +1,17 @@ ++// RUN: %clang_cc1 -E -dM -D__GCC_CONSTRUCTIVE_SIZE=1000 -D__GCC_DESTRUCTIVE_SIZE=1001 %s -verify -Weverything | FileCheck %s ++// RUN: %clang_cc1 -D__GCC_CONSTRUCTIVE_SIZE=1000 -D__GCC_DESTRUCTIVE_SIZE=1001 %s -verify -Weverything ++// RUN: %clang_cc1 -E -dM -U__GCC_CONSTRUCTIVE_SIZE -U__GCC_DESTRUCTIVE_SIZE %s -verify -Weverything | FileCheck --check-prefix DISABLED %s ++// expected-no-diagnostics ++ ++// Validate that we can set a new value on the command line without issuing any ++// diagnostics and that we can disabled the macro on the command line without ++// issuing any diagnostics. ++ ++// CHECK: #define __GCC_CONSTRUCTIVE_SIZE 1000 ++// CHECK: #define __GCC_DESTRUCTIVE_SIZE 1001 ++// DISABLED-NOT: __GCC_CONSTRUCTIVE_SIZE ++// DISABLED-NOT: __GCC_DESTRUCTIVE_SIZE ++ ++int main() { ++ return 0; ++} +diff --git a/clang/test/Preprocessor/init-aarch64.c b/clang/test/Preprocessor/init-aarch64.c +index cf96870b27ac..f0845985c9ef 100644 +--- a/clang/test/Preprocessor/init-aarch64.c ++++ b/clang/test/Preprocessor/init-aarch64.c +@@ -119,6 +119,8 @@ + // AARCH64-NEXT: #define __FP_FAST_FMA 1 + // AARCH64-NEXT: #define __FP_FAST_FMAF 1 + // AARCH64-NEXT: #define __GCC_ASM_FLAG_OUTPUTS__ 1 ++// AARCH64-NEXT: #define __GCC_CONSTRUCTIVE_SIZE {{.+}} ++// AARCH64-NEXT: #define __GCC_DESTRUCTIVE_SIZE {{.+}} + // AARCH64-NEXT: #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1 + // AARCH64-NEXT: #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_16 1 + // AARCH64-NEXT: #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1 +@@ -220,11 +222,11 @@ + // AARCH64-NEXT: #define __LONG_MAX__ 9223372036854775807L + // AARCH64-NEXT: #define __LONG_WIDTH__ 64 + // AARCH64-NEXT: #define __LP64__ 1 +-// AARCH64-NEXT: #define __MEMORY_SCOPE_DEVICE 1 +-// AARCH64-NEXT: #define __MEMORY_SCOPE_SINGLE 4 +-// AARCH64-NEXT: #define __MEMORY_SCOPE_SYSTEM 0 +-// AARCH64-NEXT: #define __MEMORY_SCOPE_WRKGRP 2 +-// AARCH64-NEXT: #define __MEMORY_SCOPE_WVFRNT 3 ++// AARCH64-NEXT: #define __MEMORY_SCOPE_DEVICE 1 ++// AARCH64-NEXT: #define __MEMORY_SCOPE_SINGLE 4 ++// AARCH64-NEXT: #define __MEMORY_SCOPE_SYSTEM 0 ++// AARCH64-NEXT: #define __MEMORY_SCOPE_WRKGRP 2 ++// AARCH64-NEXT: #define __MEMORY_SCOPE_WVFRNT 3 + // AARCH64-NEXT: #define __NO_INLINE__ 1 + // AARCH64-NEXT: #define __NO_MATH_ERRNO__ 1 + // AARCH64-NEXT: #define __OBJC_BOOL_IS_BOOL 0 +diff --git a/clang/test/Preprocessor/init.c b/clang/test/Preprocessor/init.c +index c3dbd94b2f74..4f4f8a98deed 100644 +--- a/clang/test/Preprocessor/init.c ++++ b/clang/test/Preprocessor/init.c +@@ -1,3 +1,10 @@ ++// RUN: %clang_cc1 -E -dM < /dev/null | FileCheck -match-full-lines -check-prefix INTERFERENCE %s ++// ++// We purposefully do not test the values produced, only that the macros are ++// predefined to some value. ++// INTERFERENCE:#define __GCC_CONSTRUCTIVE_SIZE {{.+}} ++// INTERFERENCE:#define __GCC_DESTRUCTIVE_SIZE {{.+}} ++ + // RUN: %clang_cc1 -E -dM -x assembler-with-cpp < /dev/null | FileCheck -match-full-lines -check-prefix ASM %s + // + // ASM:#define __ASSEMBLER__ 1 +@@ -1633,6 +1640,8 @@ + // WEBASSEMBLY-NEXT:#define __GCC_ATOMIC_SHORT_LOCK_FREE 2 + // WEBASSEMBLY-NEXT:#define __GCC_ATOMIC_TEST_AND_SET_TRUEVAL 1 + // WEBASSEMBLY-NEXT:#define __GCC_ATOMIC_WCHAR_T_LOCK_FREE 2 ++// WEBASSEMBLY-NEXT:#define __GCC_CONSTRUCTIVE_SIZE {{.+}} ++// WEBASSEMBLY-NEXT:#define __GCC_DESTRUCTIVE_SIZE {{.+}} + // WEBASSEMBLY-NEXT:#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1 + // WEBASSEMBLY-NEXT:#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1 + // WEBASSEMBLY-NEXT:#define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1 +@@ -1742,11 +1751,11 @@ + // WEBASSEMBLY64-NEXT:#define __LONG_MAX__ 9223372036854775807L + // WEBASSEMBLY64-NEXT:#define __LONG_WIDTH__ 64 + // WEBASSEMBLY64-NEXT:#define __LP64__ 1 +-// WEBASSEMBLY-NEXT:#define __MEMORY_SCOPE_DEVICE 1 +-// WEBASSEMBLY-NEXT:#define __MEMORY_SCOPE_SINGLE 4 +-// WEBASSEMBLY-NEXT:#define __MEMORY_SCOPE_SYSTEM 0 +-// WEBASSEMBLY-NEXT:#define __MEMORY_SCOPE_WRKGRP 2 +-// WEBASSEMBLY-NEXT:#define __MEMORY_SCOPE_WVFRNT 3 ++// WEBASSEMBLY-NEXT:#define __MEMORY_SCOPE_DEVICE 1 ++// WEBASSEMBLY-NEXT:#define __MEMORY_SCOPE_SINGLE 4 ++// WEBASSEMBLY-NEXT:#define __MEMORY_SCOPE_SYSTEM 0 ++// WEBASSEMBLY-NEXT:#define __MEMORY_SCOPE_WRKGRP 2 ++// WEBASSEMBLY-NEXT:#define __MEMORY_SCOPE_WVFRNT 3 + // WEBASSEMBLY-NEXT:#define __NO_INLINE__ 1 + // WEBASSEMBLY-NEXT:#define __NO_MATH_ERRNO__ 1 + // WEBASSEMBLY-NEXT:#define __OBJC_BOOL_IS_BOOL 0 +@@ -2062,11 +2071,11 @@ + // AVR:#define __LDBL_MIN__ 1.17549435e-38L + // AVR:#define __LONG_LONG_MAX__ 9223372036854775807LL + // AVR:#define __LONG_MAX__ 2147483647L +-// AVR:#define __MEMORY_SCOPE_DEVICE 1 +-// AVR:#define __MEMORY_SCOPE_SINGLE 4 +-// AVR:#define __MEMORY_SCOPE_SYSTEM 0 +-// AVR:#define __MEMORY_SCOPE_WRKGRP 2 +-// AVR:#define __MEMORY_SCOPE_WVFRNT 3 ++// AVR:#define __MEMORY_SCOPE_DEVICE 1 ++// AVR:#define __MEMORY_SCOPE_SINGLE 4 ++// AVR:#define __MEMORY_SCOPE_SYSTEM 0 ++// AVR:#define __MEMORY_SCOPE_WRKGRP 2 ++// AVR:#define __MEMORY_SCOPE_WVFRNT 3 + // AVR:#define __NO_INLINE__ 1 + // AVR:#define __ORDER_BIG_ENDIAN__ 4321 + // AVR:#define __ORDER_LITTLE_ENDIAN__ 1234 +@@ -2358,11 +2367,11 @@ + // RISCV32: #define __LITTLE_ENDIAN__ 1 + // RISCV32: #define __LONG_LONG_MAX__ 9223372036854775807LL + // RISCV32: #define __LONG_MAX__ 2147483647L +-// RISCV32: #define __MEMORY_SCOPE_DEVICE 1 +-// RISCV32: #define __MEMORY_SCOPE_SINGLE 4 +-// RISCV32: #define __MEMORY_SCOPE_SYSTEM 0 +-// RISCV32: #define __MEMORY_SCOPE_WRKGRP 2 +-// RISCV32: #define __MEMORY_SCOPE_WVFRNT 3 ++// RISCV32: #define __MEMORY_SCOPE_DEVICE 1 ++// RISCV32: #define __MEMORY_SCOPE_SINGLE 4 ++// RISCV32: #define __MEMORY_SCOPE_SYSTEM 0 ++// RISCV32: #define __MEMORY_SCOPE_WRKGRP 2 ++// RISCV32: #define __MEMORY_SCOPE_WVFRNT 3 + // RISCV32: #define __NO_INLINE__ 1 + // RISCV32: #define __POINTER_WIDTH__ 32 + // RISCV32: #define __PRAGMA_REDEFINE_EXTNAME 1 +@@ -2570,11 +2579,11 @@ + // RISCV64: #define __LONG_LONG_MAX__ 9223372036854775807LL + // RISCV64: #define __LONG_MAX__ 9223372036854775807L + // RISCV64: #define __LP64__ 1 +-// RISCV64: #define __MEMORY_SCOPE_DEVICE 1 +-// RISCV64: #define __MEMORY_SCOPE_SINGLE 4 +-// RISCV64: #define __MEMORY_SCOPE_SYSTEM 0 +-// RISCV64: #define __MEMORY_SCOPE_WRKGRP 2 +-// RISCV64: #define __MEMORY_SCOPE_WVFRNT 3 ++// RISCV64: #define __MEMORY_SCOPE_DEVICE 1 ++// RISCV64: #define __MEMORY_SCOPE_SINGLE 4 ++// RISCV64: #define __MEMORY_SCOPE_SYSTEM 0 ++// RISCV64: #define __MEMORY_SCOPE_WRKGRP 2 ++// RISCV64: #define __MEMORY_SCOPE_WVFRNT 3 + // RISCV64: #define __NO_INLINE__ 1 + // RISCV64: #define __POINTER_WIDTH__ 64 + // RISCV64: #define __PRAGMA_REDEFINE_EXTNAME 1 +diff --git a/clang/test/Preprocessor/predefined-win-macros.c b/clang/test/Preprocessor/predefined-win-macros.c +index b830dc39d477..14e2f584bd09 100644 +--- a/clang/test/Preprocessor/predefined-win-macros.c ++++ b/clang/test/Preprocessor/predefined-win-macros.c +@@ -3,7 +3,7 @@ + // RUN: %clang_cc1 %s -x c++ -E -dM -triple x86_64-pc-win32 -fms-extensions -fms-compatibility \ + // RUN: -fms-compatibility-version=19.00 -std=c++14 -o - | FileCheck -match-full-lines %s --check-prefix=CHECK-MS64 + // RUN: %clang_cc1 %s -x c++ -E -dM -triple x86_64-pc-win32 -fms-extensions -fms-compatibility \ +-// RUN: -fms-compatibility-version=19.00 -std=c++14 -o - | grep GCC | count 5 ++// RUN: -fms-compatibility-version=19.00 -std=c++14 -o - | grep GCC | count 7 + // CHECK-MS64: #define _INTEGRAL_MAX_BITS 64 + // CHECK-MS64: #define _ISO_VOLATILE 1 + // CHECK-MS64: #define _MSC_EXTENSIONS 1 +@@ -26,7 +26,7 @@ + // RUN: %clang_cc1 %s -x c++ -E -dM -triple i686-pc-win32 -fms-extensions -fms-compatibility \ + // RUN: -fms-compatibility-version=19.00 -std=c++17 -o - | FileCheck -match-full-lines %s --check-prefix=CHECK-MS + // RUN: %clang_cc1 %s -x c++ -E -dM -triple i686-pc-win32 -fms-extensions -fms-compatibility \ +-// RUN: -fms-compatibility-version=19.00 -std=c++17 -o - | grep GCC | count 5 ++// RUN: -fms-compatibility-version=19.00 -std=c++17 -o - | grep GCC | count 7 + // CHECK-MS: #define _INTEGRAL_MAX_BITS 64 + // CHECK-MS: #define _ISO_VOLATILE 1 + // CHECK-MS: #define _MSC_EXTENSIONS 1 +@@ -39,6 +39,8 @@ + // CHECK-MS-NOT: GNU + // CHECK-MS-NOT: GXX + // CHECK-MS: #define __GCC_ASM_FLAG_OUTPUTS__ 1 ++// CHECK-MS: #define __GCC_CONSTRUCTIVE_SIZE {{.+}} ++// CHECK-MS: #define __GCC_DESTRUCTIVE_SIZE {{.+}} + // CHECK-MS: #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_1 1 + // CHECK-MS: #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_2 1 + // CHECK-MS: #define __GCC_HAVE_SYNC_COMPARE_AND_SWAP_4 1 diff --git a/llvm/.SRCINFO b/llvm/.SRCINFO index 39d44a10..570baa29 100644 --- a/llvm/.SRCINFO +++ b/llvm/.SRCINFO @@ -1,6 +1,6 @@ pkgbase = llvm - pkgver = 18.1.8 - pkgrel = 10 + pkgver = 19.1.6 + pkgrel = 4 url = https://llvm.org/ arch = x86_64 license = Apache-2.0 WITH LLVM-exception @@ -11,7 +11,6 @@ pkgbase = llvm makedepends = curl makedepends = libffi makedepends = libedit - makedepends = ncurses makedepends = libxml2 makedepends = python-setuptools makedepends = python-psutil @@ -22,27 +21,22 @@ pkgbase = llvm makedepends = llvm options = staticlibs options = !lto - source = https://github.com/llvm/llvm-project/releases/download/llvmorg-18.1.8/llvm-18.1.8.src.tar.xz - source = https://github.com/llvm/llvm-project/releases/download/llvmorg-18.1.8/llvm-18.1.8.src.tar.xz.sig - source = https://github.com/llvm/llvm-project/releases/download/llvmorg-18.1.8/cmake-18.1.8.src.tar.xz - source = https://github.com/llvm/llvm-project/releases/download/llvmorg-18.1.8/cmake-18.1.8.src.tar.xz.sig - source = https://github.com/llvm/llvm-project/releases/download/llvmorg-18.1.8/third-party-18.1.8.src.tar.xz - source = https://github.com/llvm/llvm-project/releases/download/llvmorg-18.1.8/third-party-18.1.8.src.tar.xz.sig - source = llvm-SelectionDAG.patch::https://github.com/llvm/llvm-project/commit/46505b3cbfc5.patch - source = 0001-Enable-TuningSlowDivide64-on-Barcelona-Bobcat-Bulldo.patch - source = 0002-Reduce-znver3-4-LoopMicroOpBufferSize-to-practical-l.patch - source = 0003-disable-gather-znver4.patch + source = https://github.com/llvm/llvm-project/releases/download/llvmorg-19.1.6/llvm-19.1.6.src.tar.xz + source = https://github.com/llvm/llvm-project/releases/download/llvmorg-19.1.6/llvm-19.1.6.src.tar.xz.sig + source = https://github.com/llvm/llvm-project/releases/download/llvmorg-19.1.6/cmake-19.1.6.src.tar.xz + source = https://github.com/llvm/llvm-project/releases/download/llvmorg-19.1.6/cmake-19.1.6.src.tar.xz.sig + source = https://github.com/llvm/llvm-project/releases/download/llvmorg-19.1.6/third-party-19.1.6.src.tar.xz + source = https://github.com/llvm/llvm-project/releases/download/llvmorg-19.1.6/third-party-19.1.6.src.tar.xz.sig + source = llvm-SelectionDAG.patch validpgpkeys = 474E22316ABF4785A88C6E8EA2C794A986419D8A - sha256sums = f68cf90f369bc7d0158ba70d860b0cb34dbc163d6ff0ebc6cfa5e515b9b2e28d + validpgpkeys = D574BD5D1D0E98895E3BF90044F2485E45D59042 + sha256sums = ad1a3b125ff014ded290094088de40efb9193ce81a24278184230b7d401f8a3e sha256sums = SKIP - sha256sums = 59badef592dd34893cd319d42b323aaa990b452d05c7180ff20f23ab1b41e837 + sha256sums = 9c7ec82d9a240dc2287b8de89d6881bb64ceea0dcd6ce133c34ef65bda22d99e sha256sums = SKIP - sha256sums = b76b810f3d3dc5d08e83c4236cb6e395aa9bd5e3ea861e8c319b216d093db074 + sha256sums = 0e8048333bab2ba3607910e5d074259f08dccf00615778d03a2a55416718eb45 sha256sums = SKIP sha256sums = 9b53e584f8b8a44648a2a066da1860155b61118c8cdebed3632161db0b680462 - sha256sums = 7d4b76f753618752aaed64bb496ed3cd443faf1d3124b540c643abcca5a9756e - sha256sums = bac174d1958fa3134ce530cf2eed8abdbf910697e87cee6e4a23a5a3a1098b2d - sha256sums = 1777d80f0fc4a76c67a92a3607831f760cf7f1ee5c16fa0dfd198de2ad47d18d pkgname = llvm pkgdesc = Compiler infrastructure @@ -57,5 +51,4 @@ pkgname = llvm-libs depends = zstd depends = libffi depends = libedit - depends = ncurses depends = libxml2 diff --git a/llvm/0001-Enable-TuningSlowDivide64-on-Barcelona-Bobcat-Bulldo.patch b/llvm/0001-Enable-TuningSlowDivide64-on-Barcelona-Bobcat-Bulldo.patch deleted file mode 100644 index 47ae429f..00000000 --- a/llvm/0001-Enable-TuningSlowDivide64-on-Barcelona-Bobcat-Bulldo.patch +++ /dev/null @@ -1,66 +0,0 @@ -From 2f440eb0471eb0b1b3582c6ae5fa8c557c1bce6b Mon Sep 17 00:00:00 2001 -From: Peter Jung -Date: Sun, 1 Sep 2024 21:41:23 +0200 -Subject: [PATCH 1/2] Enable TuningSlowDivide64 on - Barcelona/Bobcat/Bulldozer/Ryzen Families (#91277) - -Despite most AMD cpus having a lower latency for i64 divisions that converge early, we are still better off testing for values representable as i32 and performing a i32 division if possible. - -All AMD cpus appear to have been missed when we added the "idivq-to-divl" attribute - this patch now matches Intel cpu behaviour (and the x86-64/v2/3/4 levels). - -Unfortunately the difference in code scheduling means I've had to stop using the update_llc_test_checks script and just use old-fashioned CHECK-DAG checks for divl/divq pairs. - -Fixes #90985 - -Signed-off-by: Peter Jung ---- - lib/Target/X86/X86.td | 5 +++++ - 1 file changed, 5 insertions(+) - -diff --git a/lib/Target/X86/X86.td b/lib/Target/X86/X86.td -index e89ddcc570c9..c119a52e520b 100644 ---- a/lib/Target/X86/X86.td -+++ b/lib/Target/X86/X86.td -@@ -1336,6 +1336,7 @@ def ProcessorFeatures { - FeatureCMOV, - FeatureX86_64]; - list BarcelonaTuning = [TuningFastScalarShiftMasks, -+ TuningSlowDivide64, - TuningSlowSHLD, - TuningSBBDepBreaking, - TuningInsertVZEROUPPER]; -@@ -1358,6 +1359,7 @@ def ProcessorFeatures { - list BtVer1Tuning = [TuningFast15ByteNOP, - TuningFastScalarShiftMasks, - TuningFastVectorShiftMasks, -+ TuningSlowDivide64, - TuningSlowSHLD, - TuningSBBDepBreaking, - TuningInsertVZEROUPPER]; -@@ -1380,6 +1382,7 @@ def ProcessorFeatures { - TuningFastVectorShiftMasks, - TuningFastMOVBE, - TuningSBBDepBreaking, -+ TuningSlowDivide64, - TuningSlowSHLD]; - list BtVer2Features = - !listconcat(BtVer1Features, BtVer2AdditionalFeatures); -@@ -1404,6 +1407,7 @@ def ProcessorFeatures { - FeatureLWP, - FeatureLAHFSAHF64]; - list BdVer1Tuning = [TuningSlowSHLD, -+ TuningSlowDivide64, - TuningFast11ByteNOP, - TuningFastScalarShiftMasks, - TuningBranchFusion, -@@ -1483,6 +1487,7 @@ def ProcessorFeatures { - TuningFastScalarShiftMasks, - TuningFastVariablePerLaneShuffle, - TuningFastMOVBE, -+ TuningSlowDivide64, - TuningSlowSHLD, - TuningSBBDepBreaking, - TuningInsertVZEROUPPER, --- -2.46.0 - diff --git a/llvm/0002-Reduce-znver3-4-LoopMicroOpBufferSize-to-practical-l.patch b/llvm/0002-Reduce-znver3-4-LoopMicroOpBufferSize-to-practical-l.patch deleted file mode 100644 index fd8e42a9..00000000 --- a/llvm/0002-Reduce-znver3-4-LoopMicroOpBufferSize-to-practical-l.patch +++ /dev/null @@ -1,1098 +0,0 @@ -From 82bd404723a5acad661e1f014fcbe337f62ac132 Mon Sep 17 00:00:00 2001 -From: Simon Pilgrim -Date: Thu, 16 May 2024 14:44:00 +0100 -Subject: [PATCH 2/2] Reduce znver3/4 LoopMicroOpBufferSize to practical loop - unrolling values (#91340) - -The znver3/4 scheduler models have previously associated the LoopMicroOpBufferSize with the maximum size of their op caches, and when this led to quadratic complexity issues this were reduced to a value of 512 uops, based mainly on compilation time and not its effectiveness on runtime performance. - -From a runtime performance POV, a large LoopMicroOpBufferSize leads to a higher number of loop unrolls, meaning the cpu has to rely on the frontend decode rate (4 ins/cy max) for much longer to fill the op cache before looping begins and we make use of the faster op cache rate (8/9 ops/cy). - -This patch proposes we instead cap the size of the LoopMicroOpBufferSize based off the maximum rate from the op cache (znver3 = 8op/cy, znver4 = 9op/cy) and the branch misprediction penalty from the opcache (~12cy) as a estimate of the useful number of ops we can unroll a loop by before mispredictions are likely to cause stalls. This isn't a perfect metric, but does try to be closer to the spirit of how we use LoopMicroOpBufferSize in the compiler vs the size of a similar naming buffer in the cpu. ---- - lib/Target/X86/X86ScheduleZnver3.td | 11 +- - lib/Target/X86/X86ScheduleZnver4.td | 16 +- - test/Transforms/LoopUnroll/X86/znver3.ll | 982 +----------------- - 3 files changed, 44 insertions(+), 965 deletions(-) - -diff --git a/lib/Target/X86/X86ScheduleZnver3.td b/lib/Target/X86/X86ScheduleZnver3.td -index d90c8bd284eb..2d1b426cfde3 100644 ---- a/lib/Target/X86/X86ScheduleZnver3.td -+++ b/lib/Target/X86/X86ScheduleZnver3.td -@@ -33,13 +33,10 @@ def Znver3Model : SchedMachineModel { - // The op cache is organized as an associative cache with 64 sets and 8 ways. - // At each set-way intersection is an entry containing up to 8 macro ops. - // The maximum capacity of the op cache is 4K ops. -- // Agner, 22.5 µop cache -- // The size of the µop cache is big enough for holding most critical loops. -- // FIXME: PR50584: MachineScheduler/PostRAScheduler have quadradic complexity, -- // with large values here the compilation of certain loops -- // ends up taking way too long. -- // let LoopMicroOpBufferSize = 4096; -- let LoopMicroOpBufferSize = 512; -+ // Assuming a maximum dispatch of 8 ops/cy and a mispredict cost of 12cy from -+ // the op-cache, we limit the loop buffer to 8*12 = 96 to avoid loop unrolling -+ // leading to excessive filling of the op-cache from frontend. -+ let LoopMicroOpBufferSize = 96; - // AMD SOG 19h, 2.6.2 L1 Data Cache - // The L1 data cache has a 4- or 5- cycle integer load-to-use latency. - // AMD SOG 19h, 2.12 L1 Data Cache -diff --git a/llvm/lib/Target/X86/X86ScheduleZnver4.td b/llvm/lib/Target/X86/X86ScheduleZnver4.td -index dac4d8422582..7107dbc63e27 100644 ---- a/lib/Target/X86/X86ScheduleZnver4.td -+++ b/lib/Target/X86/X86ScheduleZnver4.td -@@ -28,17 +28,11 @@ def Znver4Model : SchedMachineModel { - // AMD SOG 19h, 2.9.1 Op Cache - // The op cache is organized as an associative cache with 64 sets and 8 ways. - // At each set-way intersection is an entry containing up to 8 macro ops. -- // The maximum capacity of the op cache is 4K ops. -- // Agner, 22.5 µop cache -- // The size of the µop cache is big enough for holding most critical loops. -- // FIXME: PR50584: MachineScheduler/PostRAScheduler have quadradic complexity, -- // with large values here the compilation of certain loops -- // ends up taking way too long. -- // Ideally for znver4, we should have 6.75K. However we don't add that -- // considerting the impact compile time and prefer using default values -- // instead. -- // Retaining minimal value to influence unrolling as we did for znver3. -- let LoopMicroOpBufferSize = 512; -+ // The maximum capacity of the op cache is 6.75K ops. -+ // Assuming a maximum dispatch of 9 ops/cy and a mispredict cost of 12cy from -+ // the op-cache, we limit the loop buffer to 9*12 = 108 to avoid loop -+ // unrolling leading to excessive filling of the op-cache from frontend. -+ let LoopMicroOpBufferSize = 108; - // AMD SOG 19h, 2.6.2 L1 Data Cache - // The L1 data cache has a 4- or 5- cycle integer load-to-use latency. - // AMD SOG 19h, 2.12 L1 Data Cache -diff --git a/test/Transforms/LoopUnroll/X86/znver3.ll b/test/Transforms/LoopUnroll/X86/znver3.ll -index 30389062a096..b1f1d7d814e6 100644 ---- a/test/Transforms/LoopUnroll/X86/znver3.ll -+++ b/test/Transforms/LoopUnroll/X86/znver3.ll -@@ -73,456 +73,8 @@ define i32 @test(ptr %ary) "target-cpu"="znver3" { - ; CHECK-NEXT: [[INDVARS_IV_NEXT_14:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 15 - ; CHECK-NEXT: [[ARRAYIDX_15:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_14]] - ; CHECK-NEXT: [[VAL_15:%.*]] = load i32, ptr [[ARRAYIDX_15]], align 4 --; CHECK-NEXT: [[SUM_NEXT_15:%.*]] = add nsw i32 [[VAL_15]], [[SUM_NEXT_14]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_15:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 16 --; CHECK-NEXT: [[ARRAYIDX_16:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_15]] --; CHECK-NEXT: [[VAL_16:%.*]] = load i32, ptr [[ARRAYIDX_16]], align 4 --; CHECK-NEXT: [[SUM_NEXT_16:%.*]] = add nsw i32 [[VAL_16]], [[SUM_NEXT_15]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_16:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 17 --; CHECK-NEXT: [[ARRAYIDX_17:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_16]] --; CHECK-NEXT: [[VAL_17:%.*]] = load i32, ptr [[ARRAYIDX_17]], align 4 --; CHECK-NEXT: [[SUM_NEXT_17:%.*]] = add nsw i32 [[VAL_17]], [[SUM_NEXT_16]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_17:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 18 --; CHECK-NEXT: [[ARRAYIDX_18:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_17]] --; CHECK-NEXT: [[VAL_18:%.*]] = load i32, ptr [[ARRAYIDX_18]], align 4 --; CHECK-NEXT: [[SUM_NEXT_18:%.*]] = add nsw i32 [[VAL_18]], [[SUM_NEXT_17]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_18:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 19 --; CHECK-NEXT: [[ARRAYIDX_19:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_18]] --; CHECK-NEXT: [[VAL_19:%.*]] = load i32, ptr [[ARRAYIDX_19]], align 4 --; CHECK-NEXT: [[SUM_NEXT_19:%.*]] = add nsw i32 [[VAL_19]], [[SUM_NEXT_18]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_19:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 20 --; CHECK-NEXT: [[ARRAYIDX_20:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_19]] --; CHECK-NEXT: [[VAL_20:%.*]] = load i32, ptr [[ARRAYIDX_20]], align 4 --; CHECK-NEXT: [[SUM_NEXT_20:%.*]] = add nsw i32 [[VAL_20]], [[SUM_NEXT_19]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_20:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 21 --; CHECK-NEXT: [[ARRAYIDX_21:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_20]] --; CHECK-NEXT: [[VAL_21:%.*]] = load i32, ptr [[ARRAYIDX_21]], align 4 --; CHECK-NEXT: [[SUM_NEXT_21:%.*]] = add nsw i32 [[VAL_21]], [[SUM_NEXT_20]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_21:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 22 --; CHECK-NEXT: [[ARRAYIDX_22:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_21]] --; CHECK-NEXT: [[VAL_22:%.*]] = load i32, ptr [[ARRAYIDX_22]], align 4 --; CHECK-NEXT: [[SUM_NEXT_22:%.*]] = add nsw i32 [[VAL_22]], [[SUM_NEXT_21]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_22:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 23 --; CHECK-NEXT: [[ARRAYIDX_23:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_22]] --; CHECK-NEXT: [[VAL_23:%.*]] = load i32, ptr [[ARRAYIDX_23]], align 4 --; CHECK-NEXT: [[SUM_NEXT_23:%.*]] = add nsw i32 [[VAL_23]], [[SUM_NEXT_22]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_23:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 24 --; CHECK-NEXT: [[ARRAYIDX_24:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_23]] --; CHECK-NEXT: [[VAL_24:%.*]] = load i32, ptr [[ARRAYIDX_24]], align 4 --; CHECK-NEXT: [[SUM_NEXT_24:%.*]] = add nsw i32 [[VAL_24]], [[SUM_NEXT_23]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_24:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 25 --; CHECK-NEXT: [[ARRAYIDX_25:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_24]] --; CHECK-NEXT: [[VAL_25:%.*]] = load i32, ptr [[ARRAYIDX_25]], align 4 --; CHECK-NEXT: [[SUM_NEXT_25:%.*]] = add nsw i32 [[VAL_25]], [[SUM_NEXT_24]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_25:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 26 --; CHECK-NEXT: [[ARRAYIDX_26:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_25]] --; CHECK-NEXT: [[VAL_26:%.*]] = load i32, ptr [[ARRAYIDX_26]], align 4 --; CHECK-NEXT: [[SUM_NEXT_26:%.*]] = add nsw i32 [[VAL_26]], [[SUM_NEXT_25]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_26:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 27 --; CHECK-NEXT: [[ARRAYIDX_27:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_26]] --; CHECK-NEXT: [[VAL_27:%.*]] = load i32, ptr [[ARRAYIDX_27]], align 4 --; CHECK-NEXT: [[SUM_NEXT_27:%.*]] = add nsw i32 [[VAL_27]], [[SUM_NEXT_26]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_27:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 28 --; CHECK-NEXT: [[ARRAYIDX_28:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_27]] --; CHECK-NEXT: [[VAL_28:%.*]] = load i32, ptr [[ARRAYIDX_28]], align 4 --; CHECK-NEXT: [[SUM_NEXT_28:%.*]] = add nsw i32 [[VAL_28]], [[SUM_NEXT_27]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_28:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 29 --; CHECK-NEXT: [[ARRAYIDX_29:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_28]] --; CHECK-NEXT: [[VAL_29:%.*]] = load i32, ptr [[ARRAYIDX_29]], align 4 --; CHECK-NEXT: [[SUM_NEXT_29:%.*]] = add nsw i32 [[VAL_29]], [[SUM_NEXT_28]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_29:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 30 --; CHECK-NEXT: [[ARRAYIDX_30:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_29]] --; CHECK-NEXT: [[VAL_30:%.*]] = load i32, ptr [[ARRAYIDX_30]], align 4 --; CHECK-NEXT: [[SUM_NEXT_30:%.*]] = add nsw i32 [[VAL_30]], [[SUM_NEXT_29]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_30:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 31 --; CHECK-NEXT: [[ARRAYIDX_31:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_30]] --; CHECK-NEXT: [[VAL_31:%.*]] = load i32, ptr [[ARRAYIDX_31]], align 4 --; CHECK-NEXT: [[SUM_NEXT_31:%.*]] = add nsw i32 [[VAL_31]], [[SUM_NEXT_30]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_31:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 32 --; CHECK-NEXT: [[ARRAYIDX_32:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_31]] --; CHECK-NEXT: [[VAL_32:%.*]] = load i32, ptr [[ARRAYIDX_32]], align 4 --; CHECK-NEXT: [[SUM_NEXT_32:%.*]] = add nsw i32 [[VAL_32]], [[SUM_NEXT_31]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_32:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 33 --; CHECK-NEXT: [[ARRAYIDX_33:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_32]] --; CHECK-NEXT: [[VAL_33:%.*]] = load i32, ptr [[ARRAYIDX_33]], align 4 --; CHECK-NEXT: [[SUM_NEXT_33:%.*]] = add nsw i32 [[VAL_33]], [[SUM_NEXT_32]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_33:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 34 --; CHECK-NEXT: [[ARRAYIDX_34:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_33]] --; CHECK-NEXT: [[VAL_34:%.*]] = load i32, ptr [[ARRAYIDX_34]], align 4 --; CHECK-NEXT: [[SUM_NEXT_34:%.*]] = add nsw i32 [[VAL_34]], [[SUM_NEXT_33]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_34:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 35 --; CHECK-NEXT: [[ARRAYIDX_35:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_34]] --; CHECK-NEXT: [[VAL_35:%.*]] = load i32, ptr [[ARRAYIDX_35]], align 4 --; CHECK-NEXT: [[SUM_NEXT_35:%.*]] = add nsw i32 [[VAL_35]], [[SUM_NEXT_34]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_35:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 36 --; CHECK-NEXT: [[ARRAYIDX_36:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_35]] --; CHECK-NEXT: [[VAL_36:%.*]] = load i32, ptr [[ARRAYIDX_36]], align 4 --; CHECK-NEXT: [[SUM_NEXT_36:%.*]] = add nsw i32 [[VAL_36]], [[SUM_NEXT_35]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_36:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 37 --; CHECK-NEXT: [[ARRAYIDX_37:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_36]] --; CHECK-NEXT: [[VAL_37:%.*]] = load i32, ptr [[ARRAYIDX_37]], align 4 --; CHECK-NEXT: [[SUM_NEXT_37:%.*]] = add nsw i32 [[VAL_37]], [[SUM_NEXT_36]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_37:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 38 --; CHECK-NEXT: [[ARRAYIDX_38:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_37]] --; CHECK-NEXT: [[VAL_38:%.*]] = load i32, ptr [[ARRAYIDX_38]], align 4 --; CHECK-NEXT: [[SUM_NEXT_38:%.*]] = add nsw i32 [[VAL_38]], [[SUM_NEXT_37]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_38:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 39 --; CHECK-NEXT: [[ARRAYIDX_39:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_38]] --; CHECK-NEXT: [[VAL_39:%.*]] = load i32, ptr [[ARRAYIDX_39]], align 4 --; CHECK-NEXT: [[SUM_NEXT_39:%.*]] = add nsw i32 [[VAL_39]], [[SUM_NEXT_38]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_39:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 40 --; CHECK-NEXT: [[ARRAYIDX_40:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_39]] --; CHECK-NEXT: [[VAL_40:%.*]] = load i32, ptr [[ARRAYIDX_40]], align 4 --; CHECK-NEXT: [[SUM_NEXT_40:%.*]] = add nsw i32 [[VAL_40]], [[SUM_NEXT_39]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_40:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 41 --; CHECK-NEXT: [[ARRAYIDX_41:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_40]] --; CHECK-NEXT: [[VAL_41:%.*]] = load i32, ptr [[ARRAYIDX_41]], align 4 --; CHECK-NEXT: [[SUM_NEXT_41:%.*]] = add nsw i32 [[VAL_41]], [[SUM_NEXT_40]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_41:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 42 --; CHECK-NEXT: [[ARRAYIDX_42:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_41]] --; CHECK-NEXT: [[VAL_42:%.*]] = load i32, ptr [[ARRAYIDX_42]], align 4 --; CHECK-NEXT: [[SUM_NEXT_42:%.*]] = add nsw i32 [[VAL_42]], [[SUM_NEXT_41]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_42:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 43 --; CHECK-NEXT: [[ARRAYIDX_43:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_42]] --; CHECK-NEXT: [[VAL_43:%.*]] = load i32, ptr [[ARRAYIDX_43]], align 4 --; CHECK-NEXT: [[SUM_NEXT_43:%.*]] = add nsw i32 [[VAL_43]], [[SUM_NEXT_42]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_43:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 44 --; CHECK-NEXT: [[ARRAYIDX_44:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_43]] --; CHECK-NEXT: [[VAL_44:%.*]] = load i32, ptr [[ARRAYIDX_44]], align 4 --; CHECK-NEXT: [[SUM_NEXT_44:%.*]] = add nsw i32 [[VAL_44]], [[SUM_NEXT_43]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_44:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 45 --; CHECK-NEXT: [[ARRAYIDX_45:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_44]] --; CHECK-NEXT: [[VAL_45:%.*]] = load i32, ptr [[ARRAYIDX_45]], align 4 --; CHECK-NEXT: [[SUM_NEXT_45:%.*]] = add nsw i32 [[VAL_45]], [[SUM_NEXT_44]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_45:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 46 --; CHECK-NEXT: [[ARRAYIDX_46:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_45]] --; CHECK-NEXT: [[VAL_46:%.*]] = load i32, ptr [[ARRAYIDX_46]], align 4 --; CHECK-NEXT: [[SUM_NEXT_46:%.*]] = add nsw i32 [[VAL_46]], [[SUM_NEXT_45]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_46:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 47 --; CHECK-NEXT: [[ARRAYIDX_47:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_46]] --; CHECK-NEXT: [[VAL_47:%.*]] = load i32, ptr [[ARRAYIDX_47]], align 4 --; CHECK-NEXT: [[SUM_NEXT_47:%.*]] = add nsw i32 [[VAL_47]], [[SUM_NEXT_46]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_47:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 48 --; CHECK-NEXT: [[ARRAYIDX_48:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_47]] --; CHECK-NEXT: [[VAL_48:%.*]] = load i32, ptr [[ARRAYIDX_48]], align 4 --; CHECK-NEXT: [[SUM_NEXT_48:%.*]] = add nsw i32 [[VAL_48]], [[SUM_NEXT_47]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_48:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 49 --; CHECK-NEXT: [[ARRAYIDX_49:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_48]] --; CHECK-NEXT: [[VAL_49:%.*]] = load i32, ptr [[ARRAYIDX_49]], align 4 --; CHECK-NEXT: [[SUM_NEXT_49:%.*]] = add nsw i32 [[VAL_49]], [[SUM_NEXT_48]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_49:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 50 --; CHECK-NEXT: [[ARRAYIDX_50:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_49]] --; CHECK-NEXT: [[VAL_50:%.*]] = load i32, ptr [[ARRAYIDX_50]], align 4 --; CHECK-NEXT: [[SUM_NEXT_50:%.*]] = add nsw i32 [[VAL_50]], [[SUM_NEXT_49]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_50:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 51 --; CHECK-NEXT: [[ARRAYIDX_51:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_50]] --; CHECK-NEXT: [[VAL_51:%.*]] = load i32, ptr [[ARRAYIDX_51]], align 4 --; CHECK-NEXT: [[SUM_NEXT_51:%.*]] = add nsw i32 [[VAL_51]], [[SUM_NEXT_50]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_51:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 52 --; CHECK-NEXT: [[ARRAYIDX_52:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_51]] --; CHECK-NEXT: [[VAL_52:%.*]] = load i32, ptr [[ARRAYIDX_52]], align 4 --; CHECK-NEXT: [[SUM_NEXT_52:%.*]] = add nsw i32 [[VAL_52]], [[SUM_NEXT_51]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_52:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 53 --; CHECK-NEXT: [[ARRAYIDX_53:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_52]] --; CHECK-NEXT: [[VAL_53:%.*]] = load i32, ptr [[ARRAYIDX_53]], align 4 --; CHECK-NEXT: [[SUM_NEXT_53:%.*]] = add nsw i32 [[VAL_53]], [[SUM_NEXT_52]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_53:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 54 --; CHECK-NEXT: [[ARRAYIDX_54:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_53]] --; CHECK-NEXT: [[VAL_54:%.*]] = load i32, ptr [[ARRAYIDX_54]], align 4 --; CHECK-NEXT: [[SUM_NEXT_54:%.*]] = add nsw i32 [[VAL_54]], [[SUM_NEXT_53]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_54:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 55 --; CHECK-NEXT: [[ARRAYIDX_55:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_54]] --; CHECK-NEXT: [[VAL_55:%.*]] = load i32, ptr [[ARRAYIDX_55]], align 4 --; CHECK-NEXT: [[SUM_NEXT_55:%.*]] = add nsw i32 [[VAL_55]], [[SUM_NEXT_54]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_55:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 56 --; CHECK-NEXT: [[ARRAYIDX_56:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_55]] --; CHECK-NEXT: [[VAL_56:%.*]] = load i32, ptr [[ARRAYIDX_56]], align 4 --; CHECK-NEXT: [[SUM_NEXT_56:%.*]] = add nsw i32 [[VAL_56]], [[SUM_NEXT_55]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_56:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 57 --; CHECK-NEXT: [[ARRAYIDX_57:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_56]] --; CHECK-NEXT: [[VAL_57:%.*]] = load i32, ptr [[ARRAYIDX_57]], align 4 --; CHECK-NEXT: [[SUM_NEXT_57:%.*]] = add nsw i32 [[VAL_57]], [[SUM_NEXT_56]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_57:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 58 --; CHECK-NEXT: [[ARRAYIDX_58:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_57]] --; CHECK-NEXT: [[VAL_58:%.*]] = load i32, ptr [[ARRAYIDX_58]], align 4 --; CHECK-NEXT: [[SUM_NEXT_58:%.*]] = add nsw i32 [[VAL_58]], [[SUM_NEXT_57]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_58:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 59 --; CHECK-NEXT: [[ARRAYIDX_59:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_58]] --; CHECK-NEXT: [[VAL_59:%.*]] = load i32, ptr [[ARRAYIDX_59]], align 4 --; CHECK-NEXT: [[SUM_NEXT_59:%.*]] = add nsw i32 [[VAL_59]], [[SUM_NEXT_58]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_59:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 60 --; CHECK-NEXT: [[ARRAYIDX_60:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_59]] --; CHECK-NEXT: [[VAL_60:%.*]] = load i32, ptr [[ARRAYIDX_60]], align 4 --; CHECK-NEXT: [[SUM_NEXT_60:%.*]] = add nsw i32 [[VAL_60]], [[SUM_NEXT_59]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_60:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 61 --; CHECK-NEXT: [[ARRAYIDX_61:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_60]] --; CHECK-NEXT: [[VAL_61:%.*]] = load i32, ptr [[ARRAYIDX_61]], align 4 --; CHECK-NEXT: [[SUM_NEXT_61:%.*]] = add nsw i32 [[VAL_61]], [[SUM_NEXT_60]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_61:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 62 --; CHECK-NEXT: [[ARRAYIDX_62:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_61]] --; CHECK-NEXT: [[VAL_62:%.*]] = load i32, ptr [[ARRAYIDX_62]], align 4 --; CHECK-NEXT: [[SUM_NEXT_62:%.*]] = add nsw i32 [[VAL_62]], [[SUM_NEXT_61]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_62:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 63 --; CHECK-NEXT: [[ARRAYIDX_63:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_62]] --; CHECK-NEXT: [[VAL_63:%.*]] = load i32, ptr [[ARRAYIDX_63]], align 4 --; CHECK-NEXT: [[SUM_NEXT_63:%.*]] = add nsw i32 [[VAL_63]], [[SUM_NEXT_62]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_63:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 64 --; CHECK-NEXT: [[ARRAYIDX_64:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_63]] --; CHECK-NEXT: [[VAL_64:%.*]] = load i32, ptr [[ARRAYIDX_64]], align 4 --; CHECK-NEXT: [[SUM_NEXT_64:%.*]] = add nsw i32 [[VAL_64]], [[SUM_NEXT_63]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_64:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 65 --; CHECK-NEXT: [[ARRAYIDX_65:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_64]] --; CHECK-NEXT: [[VAL_65:%.*]] = load i32, ptr [[ARRAYIDX_65]], align 4 --; CHECK-NEXT: [[SUM_NEXT_65:%.*]] = add nsw i32 [[VAL_65]], [[SUM_NEXT_64]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_65:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 66 --; CHECK-NEXT: [[ARRAYIDX_66:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_65]] --; CHECK-NEXT: [[VAL_66:%.*]] = load i32, ptr [[ARRAYIDX_66]], align 4 --; CHECK-NEXT: [[SUM_NEXT_66:%.*]] = add nsw i32 [[VAL_66]], [[SUM_NEXT_65]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_66:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 67 --; CHECK-NEXT: [[ARRAYIDX_67:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_66]] --; CHECK-NEXT: [[VAL_67:%.*]] = load i32, ptr [[ARRAYIDX_67]], align 4 --; CHECK-NEXT: [[SUM_NEXT_67:%.*]] = add nsw i32 [[VAL_67]], [[SUM_NEXT_66]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_67:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 68 --; CHECK-NEXT: [[ARRAYIDX_68:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_67]] --; CHECK-NEXT: [[VAL_68:%.*]] = load i32, ptr [[ARRAYIDX_68]], align 4 --; CHECK-NEXT: [[SUM_NEXT_68:%.*]] = add nsw i32 [[VAL_68]], [[SUM_NEXT_67]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_68:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 69 --; CHECK-NEXT: [[ARRAYIDX_69:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_68]] --; CHECK-NEXT: [[VAL_69:%.*]] = load i32, ptr [[ARRAYIDX_69]], align 4 --; CHECK-NEXT: [[SUM_NEXT_69:%.*]] = add nsw i32 [[VAL_69]], [[SUM_NEXT_68]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_69:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 70 --; CHECK-NEXT: [[ARRAYIDX_70:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_69]] --; CHECK-NEXT: [[VAL_70:%.*]] = load i32, ptr [[ARRAYIDX_70]], align 4 --; CHECK-NEXT: [[SUM_NEXT_70:%.*]] = add nsw i32 [[VAL_70]], [[SUM_NEXT_69]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_70:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 71 --; CHECK-NEXT: [[ARRAYIDX_71:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_70]] --; CHECK-NEXT: [[VAL_71:%.*]] = load i32, ptr [[ARRAYIDX_71]], align 4 --; CHECK-NEXT: [[SUM_NEXT_71:%.*]] = add nsw i32 [[VAL_71]], [[SUM_NEXT_70]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_71:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 72 --; CHECK-NEXT: [[ARRAYIDX_72:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_71]] --; CHECK-NEXT: [[VAL_72:%.*]] = load i32, ptr [[ARRAYIDX_72]], align 4 --; CHECK-NEXT: [[SUM_NEXT_72:%.*]] = add nsw i32 [[VAL_72]], [[SUM_NEXT_71]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_72:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 73 --; CHECK-NEXT: [[ARRAYIDX_73:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_72]] --; CHECK-NEXT: [[VAL_73:%.*]] = load i32, ptr [[ARRAYIDX_73]], align 4 --; CHECK-NEXT: [[SUM_NEXT_73:%.*]] = add nsw i32 [[VAL_73]], [[SUM_NEXT_72]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_73:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 74 --; CHECK-NEXT: [[ARRAYIDX_74:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_73]] --; CHECK-NEXT: [[VAL_74:%.*]] = load i32, ptr [[ARRAYIDX_74]], align 4 --; CHECK-NEXT: [[SUM_NEXT_74:%.*]] = add nsw i32 [[VAL_74]], [[SUM_NEXT_73]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_74:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 75 --; CHECK-NEXT: [[ARRAYIDX_75:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_74]] --; CHECK-NEXT: [[VAL_75:%.*]] = load i32, ptr [[ARRAYIDX_75]], align 4 --; CHECK-NEXT: [[SUM_NEXT_75:%.*]] = add nsw i32 [[VAL_75]], [[SUM_NEXT_74]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_75:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 76 --; CHECK-NEXT: [[ARRAYIDX_76:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_75]] --; CHECK-NEXT: [[VAL_76:%.*]] = load i32, ptr [[ARRAYIDX_76]], align 4 --; CHECK-NEXT: [[SUM_NEXT_76:%.*]] = add nsw i32 [[VAL_76]], [[SUM_NEXT_75]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_76:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 77 --; CHECK-NEXT: [[ARRAYIDX_77:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_76]] --; CHECK-NEXT: [[VAL_77:%.*]] = load i32, ptr [[ARRAYIDX_77]], align 4 --; CHECK-NEXT: [[SUM_NEXT_77:%.*]] = add nsw i32 [[VAL_77]], [[SUM_NEXT_76]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_77:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 78 --; CHECK-NEXT: [[ARRAYIDX_78:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_77]] --; CHECK-NEXT: [[VAL_78:%.*]] = load i32, ptr [[ARRAYIDX_78]], align 4 --; CHECK-NEXT: [[SUM_NEXT_78:%.*]] = add nsw i32 [[VAL_78]], [[SUM_NEXT_77]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_78:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 79 --; CHECK-NEXT: [[ARRAYIDX_79:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_78]] --; CHECK-NEXT: [[VAL_79:%.*]] = load i32, ptr [[ARRAYIDX_79]], align 4 --; CHECK-NEXT: [[SUM_NEXT_79:%.*]] = add nsw i32 [[VAL_79]], [[SUM_NEXT_78]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_79:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 80 --; CHECK-NEXT: [[ARRAYIDX_80:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_79]] --; CHECK-NEXT: [[VAL_80:%.*]] = load i32, ptr [[ARRAYIDX_80]], align 4 --; CHECK-NEXT: [[SUM_NEXT_80:%.*]] = add nsw i32 [[VAL_80]], [[SUM_NEXT_79]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_80:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 81 --; CHECK-NEXT: [[ARRAYIDX_81:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_80]] --; CHECK-NEXT: [[VAL_81:%.*]] = load i32, ptr [[ARRAYIDX_81]], align 4 --; CHECK-NEXT: [[SUM_NEXT_81:%.*]] = add nsw i32 [[VAL_81]], [[SUM_NEXT_80]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_81:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 82 --; CHECK-NEXT: [[ARRAYIDX_82:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_81]] --; CHECK-NEXT: [[VAL_82:%.*]] = load i32, ptr [[ARRAYIDX_82]], align 4 --; CHECK-NEXT: [[SUM_NEXT_82:%.*]] = add nsw i32 [[VAL_82]], [[SUM_NEXT_81]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_82:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 83 --; CHECK-NEXT: [[ARRAYIDX_83:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_82]] --; CHECK-NEXT: [[VAL_83:%.*]] = load i32, ptr [[ARRAYIDX_83]], align 4 --; CHECK-NEXT: [[SUM_NEXT_83:%.*]] = add nsw i32 [[VAL_83]], [[SUM_NEXT_82]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_83:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 84 --; CHECK-NEXT: [[ARRAYIDX_84:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_83]] --; CHECK-NEXT: [[VAL_84:%.*]] = load i32, ptr [[ARRAYIDX_84]], align 4 --; CHECK-NEXT: [[SUM_NEXT_84:%.*]] = add nsw i32 [[VAL_84]], [[SUM_NEXT_83]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_84:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 85 --; CHECK-NEXT: [[ARRAYIDX_85:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_84]] --; CHECK-NEXT: [[VAL_85:%.*]] = load i32, ptr [[ARRAYIDX_85]], align 4 --; CHECK-NEXT: [[SUM_NEXT_85:%.*]] = add nsw i32 [[VAL_85]], [[SUM_NEXT_84]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_85:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 86 --; CHECK-NEXT: [[ARRAYIDX_86:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_85]] --; CHECK-NEXT: [[VAL_86:%.*]] = load i32, ptr [[ARRAYIDX_86]], align 4 --; CHECK-NEXT: [[SUM_NEXT_86:%.*]] = add nsw i32 [[VAL_86]], [[SUM_NEXT_85]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_86:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 87 --; CHECK-NEXT: [[ARRAYIDX_87:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_86]] --; CHECK-NEXT: [[VAL_87:%.*]] = load i32, ptr [[ARRAYIDX_87]], align 4 --; CHECK-NEXT: [[SUM_NEXT_87:%.*]] = add nsw i32 [[VAL_87]], [[SUM_NEXT_86]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_87:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 88 --; CHECK-NEXT: [[ARRAYIDX_88:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_87]] --; CHECK-NEXT: [[VAL_88:%.*]] = load i32, ptr [[ARRAYIDX_88]], align 4 --; CHECK-NEXT: [[SUM_NEXT_88:%.*]] = add nsw i32 [[VAL_88]], [[SUM_NEXT_87]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_88:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 89 --; CHECK-NEXT: [[ARRAYIDX_89:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_88]] --; CHECK-NEXT: [[VAL_89:%.*]] = load i32, ptr [[ARRAYIDX_89]], align 4 --; CHECK-NEXT: [[SUM_NEXT_89:%.*]] = add nsw i32 [[VAL_89]], [[SUM_NEXT_88]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_89:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 90 --; CHECK-NEXT: [[ARRAYIDX_90:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_89]] --; CHECK-NEXT: [[VAL_90:%.*]] = load i32, ptr [[ARRAYIDX_90]], align 4 --; CHECK-NEXT: [[SUM_NEXT_90:%.*]] = add nsw i32 [[VAL_90]], [[SUM_NEXT_89]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_90:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 91 --; CHECK-NEXT: [[ARRAYIDX_91:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_90]] --; CHECK-NEXT: [[VAL_91:%.*]] = load i32, ptr [[ARRAYIDX_91]], align 4 --; CHECK-NEXT: [[SUM_NEXT_91:%.*]] = add nsw i32 [[VAL_91]], [[SUM_NEXT_90]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_91:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 92 --; CHECK-NEXT: [[ARRAYIDX_92:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_91]] --; CHECK-NEXT: [[VAL_92:%.*]] = load i32, ptr [[ARRAYIDX_92]], align 4 --; CHECK-NEXT: [[SUM_NEXT_92:%.*]] = add nsw i32 [[VAL_92]], [[SUM_NEXT_91]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_92:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 93 --; CHECK-NEXT: [[ARRAYIDX_93:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_92]] --; CHECK-NEXT: [[VAL_93:%.*]] = load i32, ptr [[ARRAYIDX_93]], align 4 --; CHECK-NEXT: [[SUM_NEXT_93:%.*]] = add nsw i32 [[VAL_93]], [[SUM_NEXT_92]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_93:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 94 --; CHECK-NEXT: [[ARRAYIDX_94:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_93]] --; CHECK-NEXT: [[VAL_94:%.*]] = load i32, ptr [[ARRAYIDX_94]], align 4 --; CHECK-NEXT: [[SUM_NEXT_94:%.*]] = add nsw i32 [[VAL_94]], [[SUM_NEXT_93]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_94:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 95 --; CHECK-NEXT: [[ARRAYIDX_95:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_94]] --; CHECK-NEXT: [[VAL_95:%.*]] = load i32, ptr [[ARRAYIDX_95]], align 4 --; CHECK-NEXT: [[SUM_NEXT_95:%.*]] = add nsw i32 [[VAL_95]], [[SUM_NEXT_94]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_95:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 96 --; CHECK-NEXT: [[ARRAYIDX_96:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_95]] --; CHECK-NEXT: [[VAL_96:%.*]] = load i32, ptr [[ARRAYIDX_96]], align 4 --; CHECK-NEXT: [[SUM_NEXT_96:%.*]] = add nsw i32 [[VAL_96]], [[SUM_NEXT_95]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_96:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 97 --; CHECK-NEXT: [[ARRAYIDX_97:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_96]] --; CHECK-NEXT: [[VAL_97:%.*]] = load i32, ptr [[ARRAYIDX_97]], align 4 --; CHECK-NEXT: [[SUM_NEXT_97:%.*]] = add nsw i32 [[VAL_97]], [[SUM_NEXT_96]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_97:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 98 --; CHECK-NEXT: [[ARRAYIDX_98:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_97]] --; CHECK-NEXT: [[VAL_98:%.*]] = load i32, ptr [[ARRAYIDX_98]], align 4 --; CHECK-NEXT: [[SUM_NEXT_98:%.*]] = add nsw i32 [[VAL_98]], [[SUM_NEXT_97]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_98:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 99 --; CHECK-NEXT: [[ARRAYIDX_99:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_98]] --; CHECK-NEXT: [[VAL_99:%.*]] = load i32, ptr [[ARRAYIDX_99]], align 4 --; CHECK-NEXT: [[SUM_NEXT_99:%.*]] = add nsw i32 [[VAL_99]], [[SUM_NEXT_98]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_99:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 100 --; CHECK-NEXT: [[ARRAYIDX_100:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_99]] --; CHECK-NEXT: [[VAL_100:%.*]] = load i32, ptr [[ARRAYIDX_100]], align 4 --; CHECK-NEXT: [[SUM_NEXT_100:%.*]] = add nsw i32 [[VAL_100]], [[SUM_NEXT_99]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_100:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 101 --; CHECK-NEXT: [[ARRAYIDX_101:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_100]] --; CHECK-NEXT: [[VAL_101:%.*]] = load i32, ptr [[ARRAYIDX_101]], align 4 --; CHECK-NEXT: [[SUM_NEXT_101:%.*]] = add nsw i32 [[VAL_101]], [[SUM_NEXT_100]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_101:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 102 --; CHECK-NEXT: [[ARRAYIDX_102:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_101]] --; CHECK-NEXT: [[VAL_102:%.*]] = load i32, ptr [[ARRAYIDX_102]], align 4 --; CHECK-NEXT: [[SUM_NEXT_102:%.*]] = add nsw i32 [[VAL_102]], [[SUM_NEXT_101]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_102:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 103 --; CHECK-NEXT: [[ARRAYIDX_103:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_102]] --; CHECK-NEXT: [[VAL_103:%.*]] = load i32, ptr [[ARRAYIDX_103]], align 4 --; CHECK-NEXT: [[SUM_NEXT_103:%.*]] = add nsw i32 [[VAL_103]], [[SUM_NEXT_102]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_103:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 104 --; CHECK-NEXT: [[ARRAYIDX_104:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_103]] --; CHECK-NEXT: [[VAL_104:%.*]] = load i32, ptr [[ARRAYIDX_104]], align 4 --; CHECK-NEXT: [[SUM_NEXT_104:%.*]] = add nsw i32 [[VAL_104]], [[SUM_NEXT_103]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_104:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 105 --; CHECK-NEXT: [[ARRAYIDX_105:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_104]] --; CHECK-NEXT: [[VAL_105:%.*]] = load i32, ptr [[ARRAYIDX_105]], align 4 --; CHECK-NEXT: [[SUM_NEXT_105:%.*]] = add nsw i32 [[VAL_105]], [[SUM_NEXT_104]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_105:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 106 --; CHECK-NEXT: [[ARRAYIDX_106:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_105]] --; CHECK-NEXT: [[VAL_106:%.*]] = load i32, ptr [[ARRAYIDX_106]], align 4 --; CHECK-NEXT: [[SUM_NEXT_106:%.*]] = add nsw i32 [[VAL_106]], [[SUM_NEXT_105]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_106:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 107 --; CHECK-NEXT: [[ARRAYIDX_107:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_106]] --; CHECK-NEXT: [[VAL_107:%.*]] = load i32, ptr [[ARRAYIDX_107]], align 4 --; CHECK-NEXT: [[SUM_NEXT_107:%.*]] = add nsw i32 [[VAL_107]], [[SUM_NEXT_106]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_107:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 108 --; CHECK-NEXT: [[ARRAYIDX_108:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_107]] --; CHECK-NEXT: [[VAL_108:%.*]] = load i32, ptr [[ARRAYIDX_108]], align 4 --; CHECK-NEXT: [[SUM_NEXT_108:%.*]] = add nsw i32 [[VAL_108]], [[SUM_NEXT_107]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_108:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 109 --; CHECK-NEXT: [[ARRAYIDX_109:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_108]] --; CHECK-NEXT: [[VAL_109:%.*]] = load i32, ptr [[ARRAYIDX_109]], align 4 --; CHECK-NEXT: [[SUM_NEXT_109:%.*]] = add nsw i32 [[VAL_109]], [[SUM_NEXT_108]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_109:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 110 --; CHECK-NEXT: [[ARRAYIDX_110:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_109]] --; CHECK-NEXT: [[VAL_110:%.*]] = load i32, ptr [[ARRAYIDX_110]], align 4 --; CHECK-NEXT: [[SUM_NEXT_110:%.*]] = add nsw i32 [[VAL_110]], [[SUM_NEXT_109]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_110:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 111 --; CHECK-NEXT: [[ARRAYIDX_111:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_110]] --; CHECK-NEXT: [[VAL_111:%.*]] = load i32, ptr [[ARRAYIDX_111]], align 4 --; CHECK-NEXT: [[SUM_NEXT_111:%.*]] = add nsw i32 [[VAL_111]], [[SUM_NEXT_110]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_111:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 112 --; CHECK-NEXT: [[ARRAYIDX_112:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_111]] --; CHECK-NEXT: [[VAL_112:%.*]] = load i32, ptr [[ARRAYIDX_112]], align 4 --; CHECK-NEXT: [[SUM_NEXT_112:%.*]] = add nsw i32 [[VAL_112]], [[SUM_NEXT_111]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_112:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 113 --; CHECK-NEXT: [[ARRAYIDX_113:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_112]] --; CHECK-NEXT: [[VAL_113:%.*]] = load i32, ptr [[ARRAYIDX_113]], align 4 --; CHECK-NEXT: [[SUM_NEXT_113:%.*]] = add nsw i32 [[VAL_113]], [[SUM_NEXT_112]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_113:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 114 --; CHECK-NEXT: [[ARRAYIDX_114:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_113]] --; CHECK-NEXT: [[VAL_114:%.*]] = load i32, ptr [[ARRAYIDX_114]], align 4 --; CHECK-NEXT: [[SUM_NEXT_114:%.*]] = add nsw i32 [[VAL_114]], [[SUM_NEXT_113]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_114:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 115 --; CHECK-NEXT: [[ARRAYIDX_115:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_114]] --; CHECK-NEXT: [[VAL_115:%.*]] = load i32, ptr [[ARRAYIDX_115]], align 4 --; CHECK-NEXT: [[SUM_NEXT_115:%.*]] = add nsw i32 [[VAL_115]], [[SUM_NEXT_114]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_115:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 116 --; CHECK-NEXT: [[ARRAYIDX_116:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_115]] --; CHECK-NEXT: [[VAL_116:%.*]] = load i32, ptr [[ARRAYIDX_116]], align 4 --; CHECK-NEXT: [[SUM_NEXT_116:%.*]] = add nsw i32 [[VAL_116]], [[SUM_NEXT_115]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_116:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 117 --; CHECK-NEXT: [[ARRAYIDX_117:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_116]] --; CHECK-NEXT: [[VAL_117:%.*]] = load i32, ptr [[ARRAYIDX_117]], align 4 --; CHECK-NEXT: [[SUM_NEXT_117:%.*]] = add nsw i32 [[VAL_117]], [[SUM_NEXT_116]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_117:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 118 --; CHECK-NEXT: [[ARRAYIDX_118:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_117]] --; CHECK-NEXT: [[VAL_118:%.*]] = load i32, ptr [[ARRAYIDX_118]], align 4 --; CHECK-NEXT: [[SUM_NEXT_118:%.*]] = add nsw i32 [[VAL_118]], [[SUM_NEXT_117]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_118:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 119 --; CHECK-NEXT: [[ARRAYIDX_119:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_118]] --; CHECK-NEXT: [[VAL_119:%.*]] = load i32, ptr [[ARRAYIDX_119]], align 4 --; CHECK-NEXT: [[SUM_NEXT_119:%.*]] = add nsw i32 [[VAL_119]], [[SUM_NEXT_118]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_119:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 120 --; CHECK-NEXT: [[ARRAYIDX_120:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_119]] --; CHECK-NEXT: [[VAL_120:%.*]] = load i32, ptr [[ARRAYIDX_120]], align 4 --; CHECK-NEXT: [[SUM_NEXT_120:%.*]] = add nsw i32 [[VAL_120]], [[SUM_NEXT_119]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_120:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 121 --; CHECK-NEXT: [[ARRAYIDX_121:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_120]] --; CHECK-NEXT: [[VAL_121:%.*]] = load i32, ptr [[ARRAYIDX_121]], align 4 --; CHECK-NEXT: [[SUM_NEXT_121:%.*]] = add nsw i32 [[VAL_121]], [[SUM_NEXT_120]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_121:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 122 --; CHECK-NEXT: [[ARRAYIDX_122:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_121]] --; CHECK-NEXT: [[VAL_122:%.*]] = load i32, ptr [[ARRAYIDX_122]], align 4 --; CHECK-NEXT: [[SUM_NEXT_122:%.*]] = add nsw i32 [[VAL_122]], [[SUM_NEXT_121]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_122:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 123 --; CHECK-NEXT: [[ARRAYIDX_123:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_122]] --; CHECK-NEXT: [[VAL_123:%.*]] = load i32, ptr [[ARRAYIDX_123]], align 4 --; CHECK-NEXT: [[SUM_NEXT_123:%.*]] = add nsw i32 [[VAL_123]], [[SUM_NEXT_122]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_123:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 124 --; CHECK-NEXT: [[ARRAYIDX_124:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_123]] --; CHECK-NEXT: [[VAL_124:%.*]] = load i32, ptr [[ARRAYIDX_124]], align 4 --; CHECK-NEXT: [[SUM_NEXT_124:%.*]] = add nsw i32 [[VAL_124]], [[SUM_NEXT_123]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_124:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 125 --; CHECK-NEXT: [[ARRAYIDX_125:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_124]] --; CHECK-NEXT: [[VAL_125:%.*]] = load i32, ptr [[ARRAYIDX_125]], align 4 --; CHECK-NEXT: [[SUM_NEXT_125:%.*]] = add nsw i32 [[VAL_125]], [[SUM_NEXT_124]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_125:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 126 --; CHECK-NEXT: [[ARRAYIDX_126:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_125]] --; CHECK-NEXT: [[VAL_126:%.*]] = load i32, ptr [[ARRAYIDX_126]], align 4 --; CHECK-NEXT: [[SUM_NEXT_126:%.*]] = add nsw i32 [[VAL_126]], [[SUM_NEXT_125]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_126:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 127 --; CHECK-NEXT: [[ARRAYIDX_127:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_126]] --; CHECK-NEXT: [[VAL_127:%.*]] = load i32, ptr [[ARRAYIDX_127]], align 4 --; CHECK-NEXT: [[SUM_NEXT_127]] = add nsw i32 [[VAL_127]], [[SUM_NEXT_126]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_127]] = add nuw nsw i64 [[INDVARS_IV]], 128 -+; CHECK-NEXT: [[SUM_NEXT_127]] = add nsw i32 [[VAL_15]], [[SUM_NEXT_14]] -+; CHECK-NEXT: [[INDVARS_IV_NEXT_127]] = add nuw nsw i64 [[INDVARS_IV]], 16 - ; CHECK-NEXT: [[EXITCOND_NOT_127:%.*]] = icmp eq i64 [[INDVARS_IV_NEXT_127]], 8192 - ; CHECK-NEXT: br i1 [[EXITCOND_NOT_127]], label [[FOR_COND_CLEANUP:%.*]], label [[FOR_BODY]] - ; CHECK: for.cond.cleanup: -@@ -550,532 +102,68 @@ define i32 @test2(ptr %ary, i64 %n) "target-cpu"="znver3" { - ; CHECK-LABEL: define i32 @test2( - ; CHECK-SAME: ptr [[ARY:%.*]], i64 [[N:%.*]]) #[[ATTR0]] { - ; CHECK-NEXT: entry: --; CHECK-NEXT: [[TMP0:%.*]] = add i64 [[N]], -1 --; CHECK-NEXT: [[XTRAITER:%.*]] = and i64 [[N]], 7 --; CHECK-NEXT: [[TMP1:%.*]] = icmp ult i64 [[TMP0]], 7 --; CHECK-NEXT: br i1 [[TMP1]], label [[FOR_COND_CLEANUP_UNR_LCSSA:%.*]], label [[ENTRY_NEW:%.*]] --; CHECK: entry.new: --; CHECK-NEXT: [[UNROLL_ITER:%.*]] = sub i64 [[N]], [[XTRAITER]] - ; CHECK-NEXT: br label [[FOR_BODY:%.*]] - ; CHECK: for.body: --; CHECK-NEXT: [[INDVARS_IV:%.*]] = phi i64 [ 0, [[ENTRY_NEW]] ], [ [[INDVARS_IV_NEXT_7:%.*]], [[FOR_BODY]] ] --; CHECK-NEXT: [[SUM:%.*]] = phi i32 [ 0, [[ENTRY_NEW]] ], [ [[SUM_NEXT_7:%.*]], [[FOR_BODY]] ] --; CHECK-NEXT: [[NITER:%.*]] = phi i64 [ 0, [[ENTRY_NEW]] ], [ [[NITER_NEXT_7:%.*]], [[FOR_BODY]] ] --; CHECK-NEXT: [[ARRAYIDX:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV]] --; CHECK-NEXT: [[VAL:%.*]] = load i32, ptr [[ARRAYIDX]], align 4 --; CHECK-NEXT: [[DUMMY1:%.*]] = mul i32 [[VAL]], [[VAL]] --; CHECK-NEXT: [[DUMMY2:%.*]] = mul i32 [[DUMMY1]], [[DUMMY1]] --; CHECK-NEXT: [[DUMMY3:%.*]] = mul i32 [[DUMMY2]], [[DUMMY2]] --; CHECK-NEXT: [[DUMMY4:%.*]] = mul i32 [[DUMMY3]], [[DUMMY3]] -+; CHECK-NEXT: [[INDVARS_IV_EPIL:%.*]] = phi i64 [ 0, [[ENTRY:%.*]] ], [ [[INDVARS_IV_NEXT_EPIL:%.*]], [[FOR_BODY]] ] -+; CHECK-NEXT: [[SUM_EPIL:%.*]] = phi i32 [ 0, [[ENTRY]] ], [ [[SUM_NEXT_EPIL:%.*]], [[FOR_BODY]] ] -+; CHECK-NEXT: [[ARRAYIDX_EPIL:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_EPIL]] -+; CHECK-NEXT: [[VAL_EPIL:%.*]] = load i32, ptr [[ARRAYIDX_EPIL]], align 4 -+; CHECK-NEXT: [[DUMMY21:%.*]] = mul i32 [[VAL_EPIL]], [[VAL_EPIL]] -+; CHECK-NEXT: [[DUMMY27:%.*]] = mul i32 [[DUMMY21]], [[DUMMY21]] -+; CHECK-NEXT: [[DUMMY28:%.*]] = mul i32 [[DUMMY27]], [[DUMMY27]] -+; CHECK-NEXT: [[DUMMY4:%.*]] = mul i32 [[DUMMY28]], [[DUMMY28]] - ; CHECK-NEXT: [[DUMMY5:%.*]] = mul i32 [[DUMMY4]], [[DUMMY4]] - ; CHECK-NEXT: [[DUMMY6:%.*]] = mul i32 [[DUMMY5]], [[DUMMY5]] - ; CHECK-NEXT: [[DUMMY7:%.*]] = mul i32 [[DUMMY6]], [[DUMMY6]] - ; CHECK-NEXT: [[DUMMY8:%.*]] = mul i32 [[DUMMY7]], [[DUMMY7]] - ; CHECK-NEXT: [[DUMMY9:%.*]] = mul i32 [[DUMMY8]], [[DUMMY8]] - ; CHECK-NEXT: [[DUMMY10:%.*]] = mul i32 [[DUMMY9]], [[DUMMY9]] --; CHECK-NEXT: [[DUMMY11:%.*]] = mul i32 [[DUMMY10]], [[DUMMY10]] --; CHECK-NEXT: [[DUMMY12:%.*]] = mul i32 [[DUMMY11]], [[DUMMY11]] --; CHECK-NEXT: [[DUMMY13:%.*]] = mul i32 [[DUMMY12]], [[DUMMY12]] --; CHECK-NEXT: [[DUMMY14:%.*]] = mul i32 [[DUMMY13]], [[DUMMY13]] --; CHECK-NEXT: [[DUMMY15:%.*]] = mul i32 [[DUMMY14]], [[DUMMY14]] -+; CHECK-NEXT: [[DUMMY29:%.*]] = mul i32 [[DUMMY10]], [[DUMMY10]] -+; CHECK-NEXT: [[DUMMY30:%.*]] = mul i32 [[DUMMY29]], [[DUMMY29]] -+; CHECK-NEXT: [[DUMMY39:%.*]] = mul i32 [[DUMMY30]], [[DUMMY30]] -+; CHECK-NEXT: [[DUMMY40:%.*]] = mul i32 [[DUMMY39]], [[DUMMY39]] -+; CHECK-NEXT: [[DUMMY15:%.*]] = mul i32 [[DUMMY40]], [[DUMMY40]] - ; CHECK-NEXT: [[DUMMY16:%.*]] = mul i32 [[DUMMY15]], [[DUMMY15]] - ; CHECK-NEXT: [[DUMMY17:%.*]] = mul i32 [[DUMMY16]], [[DUMMY16]] - ; CHECK-NEXT: [[DUMMY18:%.*]] = mul i32 [[DUMMY17]], [[DUMMY17]] - ; CHECK-NEXT: [[DUMMY19:%.*]] = mul i32 [[DUMMY18]], [[DUMMY18]] - ; CHECK-NEXT: [[DUMMY20:%.*]] = mul i32 [[DUMMY19]], [[DUMMY19]] --; CHECK-NEXT: [[DUMMY21:%.*]] = mul i32 [[DUMMY20]], [[DUMMY20]] --; CHECK-NEXT: [[DUMMY22:%.*]] = mul i32 [[DUMMY21]], [[DUMMY21]] -+; CHECK-NEXT: [[VAL:%.*]] = mul i32 [[DUMMY20]], [[DUMMY20]] -+; CHECK-NEXT: [[DUMMY1:%.*]] = mul i32 [[VAL]], [[VAL]] -+; CHECK-NEXT: [[DUMMY2:%.*]] = mul i32 [[DUMMY1]], [[DUMMY1]] -+; CHECK-NEXT: [[DUMMY3:%.*]] = mul i32 [[DUMMY2]], [[DUMMY2]] -+; CHECK-NEXT: [[DUMMY41:%.*]] = mul i32 [[DUMMY3]], [[DUMMY3]] -+; CHECK-NEXT: [[DUMMY26:%.*]] = mul i32 [[DUMMY41]], [[DUMMY41]] -+; CHECK-NEXT: [[DUMMY11:%.*]] = mul i32 [[DUMMY26]], [[DUMMY26]] -+; CHECK-NEXT: [[DUMMY12:%.*]] = mul i32 [[DUMMY11]], [[DUMMY11]] -+; CHECK-NEXT: [[DUMMY13:%.*]] = mul i32 [[DUMMY12]], [[DUMMY12]] -+; CHECK-NEXT: [[DUMMY14:%.*]] = mul i32 [[DUMMY13]], [[DUMMY13]] -+; CHECK-NEXT: [[DUMMY31:%.*]] = mul i32 [[DUMMY14]], [[DUMMY14]] -+; CHECK-NEXT: [[DUMMY32:%.*]] = mul i32 [[DUMMY31]], [[DUMMY31]] -+; CHECK-NEXT: [[DUMMY22:%.*]] = mul i32 [[DUMMY32]], [[DUMMY32]] - ; CHECK-NEXT: [[DUMMY23:%.*]] = mul i32 [[DUMMY22]], [[DUMMY22]] - ; CHECK-NEXT: [[DUMMY24:%.*]] = mul i32 [[DUMMY23]], [[DUMMY23]] - ; CHECK-NEXT: [[DUMMY25:%.*]] = mul i32 [[DUMMY24]], [[DUMMY24]] --; CHECK-NEXT: [[DUMMY26:%.*]] = mul i32 [[DUMMY25]], [[DUMMY25]] --; CHECK-NEXT: [[DUMMY27:%.*]] = mul i32 [[DUMMY26]], [[DUMMY26]] --; CHECK-NEXT: [[DUMMY28:%.*]] = mul i32 [[DUMMY27]], [[DUMMY27]] --; CHECK-NEXT: [[DUMMY29:%.*]] = mul i32 [[DUMMY28]], [[DUMMY28]] --; CHECK-NEXT: [[DUMMY30:%.*]] = mul i32 [[DUMMY29]], [[DUMMY29]] --; CHECK-NEXT: [[DUMMY31:%.*]] = mul i32 [[DUMMY30]], [[DUMMY30]] --; CHECK-NEXT: [[DUMMY32:%.*]] = mul i32 [[DUMMY31]], [[DUMMY31]] --; CHECK-NEXT: [[DUMMY33:%.*]] = mul i32 [[DUMMY32]], [[DUMMY32]] -+; CHECK-NEXT: [[DUMMY37:%.*]] = mul i32 [[DUMMY25]], [[DUMMY25]] -+; CHECK-NEXT: [[DUMMY38:%.*]] = mul i32 [[DUMMY37]], [[DUMMY37]] -+; CHECK-NEXT: [[DUMMY33:%.*]] = mul i32 [[DUMMY38]], [[DUMMY38]] - ; CHECK-NEXT: [[DUMMY34:%.*]] = mul i32 [[DUMMY33]], [[DUMMY33]] - ; CHECK-NEXT: [[DUMMY35:%.*]] = mul i32 [[DUMMY34]], [[DUMMY34]] - ; CHECK-NEXT: [[DUMMY36:%.*]] = mul i32 [[DUMMY35]], [[DUMMY35]] --; CHECK-NEXT: [[DUMMY37:%.*]] = mul i32 [[DUMMY36]], [[DUMMY36]] --; CHECK-NEXT: [[DUMMY38:%.*]] = mul i32 [[DUMMY37]], [[DUMMY37]] --; CHECK-NEXT: [[DUMMY39:%.*]] = mul i32 [[DUMMY38]], [[DUMMY38]] --; CHECK-NEXT: [[DUMMY40:%.*]] = mul i32 [[DUMMY39]], [[DUMMY39]] --; CHECK-NEXT: [[DUMMY41:%.*]] = mul i32 [[DUMMY40]], [[DUMMY40]] --; CHECK-NEXT: [[DUMMY42:%.*]] = mul i32 [[DUMMY41]], [[DUMMY41]] --; CHECK-NEXT: [[DUMMY43:%.*]] = mul i32 [[DUMMY42]], [[DUMMY42]] -+; CHECK-NEXT: [[DUMMY43:%.*]] = mul i32 [[DUMMY36]], [[DUMMY36]] - ; CHECK-NEXT: [[DUMMY44:%.*]] = mul i32 [[DUMMY43]], [[DUMMY43]] - ; CHECK-NEXT: [[DUMMY45:%.*]] = mul i32 [[DUMMY44]], [[DUMMY44]] - ; CHECK-NEXT: [[DUMMY46:%.*]] = mul i32 [[DUMMY45]], [[DUMMY45]] - ; CHECK-NEXT: [[DUMMY47:%.*]] = mul i32 [[DUMMY46]], [[DUMMY46]] - ; CHECK-NEXT: [[DUMMY48:%.*]] = mul i32 [[DUMMY47]], [[DUMMY47]] - ; CHECK-NEXT: [[DUMMY49:%.*]] = mul i32 [[DUMMY48]], [[DUMMY48]] --; CHECK-NEXT: [[DUMMY50:%.*]] = mul i32 [[DUMMY49]], [[DUMMY49]] --; CHECK-NEXT: [[SUM_NEXT:%.*]] = add nsw i32 [[DUMMY50]], [[SUM]] --; CHECK-NEXT: [[INDVARS_IV_NEXT:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 1 --; CHECK-NEXT: [[ARRAYIDX_1:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT]] --; CHECK-NEXT: [[VAL_1:%.*]] = load i32, ptr [[ARRAYIDX_1]], align 4 --; CHECK-NEXT: [[DUMMY1_1:%.*]] = mul i32 [[VAL_1]], [[VAL_1]] --; CHECK-NEXT: [[DUMMY2_1:%.*]] = mul i32 [[DUMMY1_1]], [[DUMMY1_1]] --; CHECK-NEXT: [[DUMMY3_1:%.*]] = mul i32 [[DUMMY2_1]], [[DUMMY2_1]] --; CHECK-NEXT: [[DUMMY4_1:%.*]] = mul i32 [[DUMMY3_1]], [[DUMMY3_1]] --; CHECK-NEXT: [[DUMMY5_1:%.*]] = mul i32 [[DUMMY4_1]], [[DUMMY4_1]] --; CHECK-NEXT: [[DUMMY6_1:%.*]] = mul i32 [[DUMMY5_1]], [[DUMMY5_1]] --; CHECK-NEXT: [[DUMMY7_1:%.*]] = mul i32 [[DUMMY6_1]], [[DUMMY6_1]] --; CHECK-NEXT: [[DUMMY8_1:%.*]] = mul i32 [[DUMMY7_1]], [[DUMMY7_1]] --; CHECK-NEXT: [[DUMMY9_1:%.*]] = mul i32 [[DUMMY8_1]], [[DUMMY8_1]] --; CHECK-NEXT: [[DUMMY10_1:%.*]] = mul i32 [[DUMMY9_1]], [[DUMMY9_1]] --; CHECK-NEXT: [[DUMMY11_1:%.*]] = mul i32 [[DUMMY10_1]], [[DUMMY10_1]] --; CHECK-NEXT: [[DUMMY12_1:%.*]] = mul i32 [[DUMMY11_1]], [[DUMMY11_1]] --; CHECK-NEXT: [[DUMMY13_1:%.*]] = mul i32 [[DUMMY12_1]], [[DUMMY12_1]] --; CHECK-NEXT: [[DUMMY14_1:%.*]] = mul i32 [[DUMMY13_1]], [[DUMMY13_1]] --; CHECK-NEXT: [[DUMMY15_1:%.*]] = mul i32 [[DUMMY14_1]], [[DUMMY14_1]] --; CHECK-NEXT: [[DUMMY16_1:%.*]] = mul i32 [[DUMMY15_1]], [[DUMMY15_1]] --; CHECK-NEXT: [[DUMMY17_1:%.*]] = mul i32 [[DUMMY16_1]], [[DUMMY16_1]] --; CHECK-NEXT: [[DUMMY18_1:%.*]] = mul i32 [[DUMMY17_1]], [[DUMMY17_1]] --; CHECK-NEXT: [[DUMMY19_1:%.*]] = mul i32 [[DUMMY18_1]], [[DUMMY18_1]] --; CHECK-NEXT: [[DUMMY20_1:%.*]] = mul i32 [[DUMMY19_1]], [[DUMMY19_1]] --; CHECK-NEXT: [[DUMMY21_1:%.*]] = mul i32 [[DUMMY20_1]], [[DUMMY20_1]] --; CHECK-NEXT: [[DUMMY22_1:%.*]] = mul i32 [[DUMMY21_1]], [[DUMMY21_1]] --; CHECK-NEXT: [[DUMMY23_1:%.*]] = mul i32 [[DUMMY22_1]], [[DUMMY22_1]] --; CHECK-NEXT: [[DUMMY24_1:%.*]] = mul i32 [[DUMMY23_1]], [[DUMMY23_1]] --; CHECK-NEXT: [[DUMMY25_1:%.*]] = mul i32 [[DUMMY24_1]], [[DUMMY24_1]] --; CHECK-NEXT: [[DUMMY26_1:%.*]] = mul i32 [[DUMMY25_1]], [[DUMMY25_1]] --; CHECK-NEXT: [[DUMMY27_1:%.*]] = mul i32 [[DUMMY26_1]], [[DUMMY26_1]] --; CHECK-NEXT: [[DUMMY28_1:%.*]] = mul i32 [[DUMMY27_1]], [[DUMMY27_1]] --; CHECK-NEXT: [[DUMMY29_1:%.*]] = mul i32 [[DUMMY28_1]], [[DUMMY28_1]] --; CHECK-NEXT: [[DUMMY30_1:%.*]] = mul i32 [[DUMMY29_1]], [[DUMMY29_1]] --; CHECK-NEXT: [[DUMMY31_1:%.*]] = mul i32 [[DUMMY30_1]], [[DUMMY30_1]] --; CHECK-NEXT: [[DUMMY32_1:%.*]] = mul i32 [[DUMMY31_1]], [[DUMMY31_1]] --; CHECK-NEXT: [[DUMMY33_1:%.*]] = mul i32 [[DUMMY32_1]], [[DUMMY32_1]] --; CHECK-NEXT: [[DUMMY34_1:%.*]] = mul i32 [[DUMMY33_1]], [[DUMMY33_1]] --; CHECK-NEXT: [[DUMMY35_1:%.*]] = mul i32 [[DUMMY34_1]], [[DUMMY34_1]] --; CHECK-NEXT: [[DUMMY36_1:%.*]] = mul i32 [[DUMMY35_1]], [[DUMMY35_1]] --; CHECK-NEXT: [[DUMMY37_1:%.*]] = mul i32 [[DUMMY36_1]], [[DUMMY36_1]] --; CHECK-NEXT: [[DUMMY38_1:%.*]] = mul i32 [[DUMMY37_1]], [[DUMMY37_1]] --; CHECK-NEXT: [[DUMMY39_1:%.*]] = mul i32 [[DUMMY38_1]], [[DUMMY38_1]] --; CHECK-NEXT: [[DUMMY40_1:%.*]] = mul i32 [[DUMMY39_1]], [[DUMMY39_1]] --; CHECK-NEXT: [[DUMMY41_1:%.*]] = mul i32 [[DUMMY40_1]], [[DUMMY40_1]] --; CHECK-NEXT: [[DUMMY42_1:%.*]] = mul i32 [[DUMMY41_1]], [[DUMMY41_1]] --; CHECK-NEXT: [[DUMMY43_1:%.*]] = mul i32 [[DUMMY42_1]], [[DUMMY42_1]] --; CHECK-NEXT: [[DUMMY44_1:%.*]] = mul i32 [[DUMMY43_1]], [[DUMMY43_1]] --; CHECK-NEXT: [[DUMMY45_1:%.*]] = mul i32 [[DUMMY44_1]], [[DUMMY44_1]] --; CHECK-NEXT: [[DUMMY46_1:%.*]] = mul i32 [[DUMMY45_1]], [[DUMMY45_1]] --; CHECK-NEXT: [[DUMMY47_1:%.*]] = mul i32 [[DUMMY46_1]], [[DUMMY46_1]] --; CHECK-NEXT: [[DUMMY48_1:%.*]] = mul i32 [[DUMMY47_1]], [[DUMMY47_1]] --; CHECK-NEXT: [[DUMMY49_1:%.*]] = mul i32 [[DUMMY48_1]], [[DUMMY48_1]] --; CHECK-NEXT: [[DUMMY50_1:%.*]] = mul i32 [[DUMMY49_1]], [[DUMMY49_1]] --; CHECK-NEXT: [[SUM_NEXT_1:%.*]] = add nsw i32 [[DUMMY50_1]], [[SUM_NEXT]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_1:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 2 --; CHECK-NEXT: [[ARRAYIDX_2:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_1]] --; CHECK-NEXT: [[VAL_2:%.*]] = load i32, ptr [[ARRAYIDX_2]], align 4 --; CHECK-NEXT: [[DUMMY1_2:%.*]] = mul i32 [[VAL_2]], [[VAL_2]] --; CHECK-NEXT: [[DUMMY2_2:%.*]] = mul i32 [[DUMMY1_2]], [[DUMMY1_2]] --; CHECK-NEXT: [[DUMMY3_2:%.*]] = mul i32 [[DUMMY2_2]], [[DUMMY2_2]] --; CHECK-NEXT: [[DUMMY4_2:%.*]] = mul i32 [[DUMMY3_2]], [[DUMMY3_2]] --; CHECK-NEXT: [[DUMMY5_2:%.*]] = mul i32 [[DUMMY4_2]], [[DUMMY4_2]] --; CHECK-NEXT: [[DUMMY6_2:%.*]] = mul i32 [[DUMMY5_2]], [[DUMMY5_2]] --; CHECK-NEXT: [[DUMMY7_2:%.*]] = mul i32 [[DUMMY6_2]], [[DUMMY6_2]] --; CHECK-NEXT: [[DUMMY8_2:%.*]] = mul i32 [[DUMMY7_2]], [[DUMMY7_2]] --; CHECK-NEXT: [[DUMMY9_2:%.*]] = mul i32 [[DUMMY8_2]], [[DUMMY8_2]] --; CHECK-NEXT: [[DUMMY10_2:%.*]] = mul i32 [[DUMMY9_2]], [[DUMMY9_2]] --; CHECK-NEXT: [[DUMMY11_2:%.*]] = mul i32 [[DUMMY10_2]], [[DUMMY10_2]] --; CHECK-NEXT: [[DUMMY12_2:%.*]] = mul i32 [[DUMMY11_2]], [[DUMMY11_2]] --; CHECK-NEXT: [[DUMMY13_2:%.*]] = mul i32 [[DUMMY12_2]], [[DUMMY12_2]] --; CHECK-NEXT: [[DUMMY14_2:%.*]] = mul i32 [[DUMMY13_2]], [[DUMMY13_2]] --; CHECK-NEXT: [[DUMMY15_2:%.*]] = mul i32 [[DUMMY14_2]], [[DUMMY14_2]] --; CHECK-NEXT: [[DUMMY16_2:%.*]] = mul i32 [[DUMMY15_2]], [[DUMMY15_2]] --; CHECK-NEXT: [[DUMMY17_2:%.*]] = mul i32 [[DUMMY16_2]], [[DUMMY16_2]] --; CHECK-NEXT: [[DUMMY18_2:%.*]] = mul i32 [[DUMMY17_2]], [[DUMMY17_2]] --; CHECK-NEXT: [[DUMMY19_2:%.*]] = mul i32 [[DUMMY18_2]], [[DUMMY18_2]] --; CHECK-NEXT: [[DUMMY20_2:%.*]] = mul i32 [[DUMMY19_2]], [[DUMMY19_2]] --; CHECK-NEXT: [[DUMMY21_2:%.*]] = mul i32 [[DUMMY20_2]], [[DUMMY20_2]] --; CHECK-NEXT: [[DUMMY22_2:%.*]] = mul i32 [[DUMMY21_2]], [[DUMMY21_2]] --; CHECK-NEXT: [[DUMMY23_2:%.*]] = mul i32 [[DUMMY22_2]], [[DUMMY22_2]] --; CHECK-NEXT: [[DUMMY24_2:%.*]] = mul i32 [[DUMMY23_2]], [[DUMMY23_2]] --; CHECK-NEXT: [[DUMMY25_2:%.*]] = mul i32 [[DUMMY24_2]], [[DUMMY24_2]] --; CHECK-NEXT: [[DUMMY26_2:%.*]] = mul i32 [[DUMMY25_2]], [[DUMMY25_2]] --; CHECK-NEXT: [[DUMMY27_2:%.*]] = mul i32 [[DUMMY26_2]], [[DUMMY26_2]] --; CHECK-NEXT: [[DUMMY28_2:%.*]] = mul i32 [[DUMMY27_2]], [[DUMMY27_2]] --; CHECK-NEXT: [[DUMMY29_2:%.*]] = mul i32 [[DUMMY28_2]], [[DUMMY28_2]] --; CHECK-NEXT: [[DUMMY30_2:%.*]] = mul i32 [[DUMMY29_2]], [[DUMMY29_2]] --; CHECK-NEXT: [[DUMMY31_2:%.*]] = mul i32 [[DUMMY30_2]], [[DUMMY30_2]] --; CHECK-NEXT: [[DUMMY32_2:%.*]] = mul i32 [[DUMMY31_2]], [[DUMMY31_2]] --; CHECK-NEXT: [[DUMMY33_2:%.*]] = mul i32 [[DUMMY32_2]], [[DUMMY32_2]] --; CHECK-NEXT: [[DUMMY34_2:%.*]] = mul i32 [[DUMMY33_2]], [[DUMMY33_2]] --; CHECK-NEXT: [[DUMMY35_2:%.*]] = mul i32 [[DUMMY34_2]], [[DUMMY34_2]] --; CHECK-NEXT: [[DUMMY36_2:%.*]] = mul i32 [[DUMMY35_2]], [[DUMMY35_2]] --; CHECK-NEXT: [[DUMMY37_2:%.*]] = mul i32 [[DUMMY36_2]], [[DUMMY36_2]] --; CHECK-NEXT: [[DUMMY38_2:%.*]] = mul i32 [[DUMMY37_2]], [[DUMMY37_2]] --; CHECK-NEXT: [[DUMMY39_2:%.*]] = mul i32 [[DUMMY38_2]], [[DUMMY38_2]] --; CHECK-NEXT: [[DUMMY40_2:%.*]] = mul i32 [[DUMMY39_2]], [[DUMMY39_2]] --; CHECK-NEXT: [[DUMMY41_2:%.*]] = mul i32 [[DUMMY40_2]], [[DUMMY40_2]] --; CHECK-NEXT: [[DUMMY42_2:%.*]] = mul i32 [[DUMMY41_2]], [[DUMMY41_2]] --; CHECK-NEXT: [[DUMMY43_2:%.*]] = mul i32 [[DUMMY42_2]], [[DUMMY42_2]] --; CHECK-NEXT: [[DUMMY44_2:%.*]] = mul i32 [[DUMMY43_2]], [[DUMMY43_2]] --; CHECK-NEXT: [[DUMMY45_2:%.*]] = mul i32 [[DUMMY44_2]], [[DUMMY44_2]] --; CHECK-NEXT: [[DUMMY46_2:%.*]] = mul i32 [[DUMMY45_2]], [[DUMMY45_2]] --; CHECK-NEXT: [[DUMMY47_2:%.*]] = mul i32 [[DUMMY46_2]], [[DUMMY46_2]] --; CHECK-NEXT: [[DUMMY48_2:%.*]] = mul i32 [[DUMMY47_2]], [[DUMMY47_2]] --; CHECK-NEXT: [[DUMMY49_2:%.*]] = mul i32 [[DUMMY48_2]], [[DUMMY48_2]] --; CHECK-NEXT: [[DUMMY50_2:%.*]] = mul i32 [[DUMMY49_2]], [[DUMMY49_2]] --; CHECK-NEXT: [[SUM_NEXT_2:%.*]] = add nsw i32 [[DUMMY50_2]], [[SUM_NEXT_1]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_2:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 3 --; CHECK-NEXT: [[ARRAYIDX_3:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_2]] --; CHECK-NEXT: [[VAL_3:%.*]] = load i32, ptr [[ARRAYIDX_3]], align 4 --; CHECK-NEXT: [[DUMMY1_3:%.*]] = mul i32 [[VAL_3]], [[VAL_3]] --; CHECK-NEXT: [[DUMMY2_3:%.*]] = mul i32 [[DUMMY1_3]], [[DUMMY1_3]] --; CHECK-NEXT: [[DUMMY3_3:%.*]] = mul i32 [[DUMMY2_3]], [[DUMMY2_3]] --; CHECK-NEXT: [[DUMMY4_3:%.*]] = mul i32 [[DUMMY3_3]], [[DUMMY3_3]] --; CHECK-NEXT: [[DUMMY5_3:%.*]] = mul i32 [[DUMMY4_3]], [[DUMMY4_3]] --; CHECK-NEXT: [[DUMMY6_3:%.*]] = mul i32 [[DUMMY5_3]], [[DUMMY5_3]] --; CHECK-NEXT: [[DUMMY7_3:%.*]] = mul i32 [[DUMMY6_3]], [[DUMMY6_3]] --; CHECK-NEXT: [[DUMMY8_3:%.*]] = mul i32 [[DUMMY7_3]], [[DUMMY7_3]] --; CHECK-NEXT: [[DUMMY9_3:%.*]] = mul i32 [[DUMMY8_3]], [[DUMMY8_3]] --; CHECK-NEXT: [[DUMMY10_3:%.*]] = mul i32 [[DUMMY9_3]], [[DUMMY9_3]] --; CHECK-NEXT: [[DUMMY11_3:%.*]] = mul i32 [[DUMMY10_3]], [[DUMMY10_3]] --; CHECK-NEXT: [[DUMMY12_3:%.*]] = mul i32 [[DUMMY11_3]], [[DUMMY11_3]] --; CHECK-NEXT: [[DUMMY13_3:%.*]] = mul i32 [[DUMMY12_3]], [[DUMMY12_3]] --; CHECK-NEXT: [[DUMMY14_3:%.*]] = mul i32 [[DUMMY13_3]], [[DUMMY13_3]] --; CHECK-NEXT: [[DUMMY15_3:%.*]] = mul i32 [[DUMMY14_3]], [[DUMMY14_3]] --; CHECK-NEXT: [[DUMMY16_3:%.*]] = mul i32 [[DUMMY15_3]], [[DUMMY15_3]] --; CHECK-NEXT: [[DUMMY17_3:%.*]] = mul i32 [[DUMMY16_3]], [[DUMMY16_3]] --; CHECK-NEXT: [[DUMMY18_3:%.*]] = mul i32 [[DUMMY17_3]], [[DUMMY17_3]] --; CHECK-NEXT: [[DUMMY19_3:%.*]] = mul i32 [[DUMMY18_3]], [[DUMMY18_3]] --; CHECK-NEXT: [[DUMMY20_3:%.*]] = mul i32 [[DUMMY19_3]], [[DUMMY19_3]] --; CHECK-NEXT: [[DUMMY21_3:%.*]] = mul i32 [[DUMMY20_3]], [[DUMMY20_3]] --; CHECK-NEXT: [[DUMMY22_3:%.*]] = mul i32 [[DUMMY21_3]], [[DUMMY21_3]] --; CHECK-NEXT: [[DUMMY23_3:%.*]] = mul i32 [[DUMMY22_3]], [[DUMMY22_3]] --; CHECK-NEXT: [[DUMMY24_3:%.*]] = mul i32 [[DUMMY23_3]], [[DUMMY23_3]] --; CHECK-NEXT: [[DUMMY25_3:%.*]] = mul i32 [[DUMMY24_3]], [[DUMMY24_3]] --; CHECK-NEXT: [[DUMMY26_3:%.*]] = mul i32 [[DUMMY25_3]], [[DUMMY25_3]] --; CHECK-NEXT: [[DUMMY27_3:%.*]] = mul i32 [[DUMMY26_3]], [[DUMMY26_3]] --; CHECK-NEXT: [[DUMMY28_3:%.*]] = mul i32 [[DUMMY27_3]], [[DUMMY27_3]] --; CHECK-NEXT: [[DUMMY29_3:%.*]] = mul i32 [[DUMMY28_3]], [[DUMMY28_3]] --; CHECK-NEXT: [[DUMMY30_3:%.*]] = mul i32 [[DUMMY29_3]], [[DUMMY29_3]] --; CHECK-NEXT: [[DUMMY31_3:%.*]] = mul i32 [[DUMMY30_3]], [[DUMMY30_3]] --; CHECK-NEXT: [[DUMMY32_3:%.*]] = mul i32 [[DUMMY31_3]], [[DUMMY31_3]] --; CHECK-NEXT: [[DUMMY33_3:%.*]] = mul i32 [[DUMMY32_3]], [[DUMMY32_3]] --; CHECK-NEXT: [[DUMMY34_3:%.*]] = mul i32 [[DUMMY33_3]], [[DUMMY33_3]] --; CHECK-NEXT: [[DUMMY35_3:%.*]] = mul i32 [[DUMMY34_3]], [[DUMMY34_3]] --; CHECK-NEXT: [[DUMMY36_3:%.*]] = mul i32 [[DUMMY35_3]], [[DUMMY35_3]] --; CHECK-NEXT: [[DUMMY37_3:%.*]] = mul i32 [[DUMMY36_3]], [[DUMMY36_3]] --; CHECK-NEXT: [[DUMMY38_3:%.*]] = mul i32 [[DUMMY37_3]], [[DUMMY37_3]] --; CHECK-NEXT: [[DUMMY39_3:%.*]] = mul i32 [[DUMMY38_3]], [[DUMMY38_3]] --; CHECK-NEXT: [[DUMMY40_3:%.*]] = mul i32 [[DUMMY39_3]], [[DUMMY39_3]] --; CHECK-NEXT: [[DUMMY41_3:%.*]] = mul i32 [[DUMMY40_3]], [[DUMMY40_3]] --; CHECK-NEXT: [[DUMMY42_3:%.*]] = mul i32 [[DUMMY41_3]], [[DUMMY41_3]] --; CHECK-NEXT: [[DUMMY43_3:%.*]] = mul i32 [[DUMMY42_3]], [[DUMMY42_3]] --; CHECK-NEXT: [[DUMMY44_3:%.*]] = mul i32 [[DUMMY43_3]], [[DUMMY43_3]] --; CHECK-NEXT: [[DUMMY45_3:%.*]] = mul i32 [[DUMMY44_3]], [[DUMMY44_3]] --; CHECK-NEXT: [[DUMMY46_3:%.*]] = mul i32 [[DUMMY45_3]], [[DUMMY45_3]] --; CHECK-NEXT: [[DUMMY47_3:%.*]] = mul i32 [[DUMMY46_3]], [[DUMMY46_3]] --; CHECK-NEXT: [[DUMMY48_3:%.*]] = mul i32 [[DUMMY47_3]], [[DUMMY47_3]] --; CHECK-NEXT: [[DUMMY49_3:%.*]] = mul i32 [[DUMMY48_3]], [[DUMMY48_3]] --; CHECK-NEXT: [[DUMMY50_3:%.*]] = mul i32 [[DUMMY49_3]], [[DUMMY49_3]] --; CHECK-NEXT: [[SUM_NEXT_3:%.*]] = add nsw i32 [[DUMMY50_3]], [[SUM_NEXT_2]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_3:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 4 --; CHECK-NEXT: [[ARRAYIDX_4:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_3]] --; CHECK-NEXT: [[VAL_4:%.*]] = load i32, ptr [[ARRAYIDX_4]], align 4 --; CHECK-NEXT: [[DUMMY1_4:%.*]] = mul i32 [[VAL_4]], [[VAL_4]] --; CHECK-NEXT: [[DUMMY2_4:%.*]] = mul i32 [[DUMMY1_4]], [[DUMMY1_4]] --; CHECK-NEXT: [[DUMMY3_4:%.*]] = mul i32 [[DUMMY2_4]], [[DUMMY2_4]] --; CHECK-NEXT: [[DUMMY4_4:%.*]] = mul i32 [[DUMMY3_4]], [[DUMMY3_4]] --; CHECK-NEXT: [[DUMMY5_4:%.*]] = mul i32 [[DUMMY4_4]], [[DUMMY4_4]] --; CHECK-NEXT: [[DUMMY6_4:%.*]] = mul i32 [[DUMMY5_4]], [[DUMMY5_4]] --; CHECK-NEXT: [[DUMMY7_4:%.*]] = mul i32 [[DUMMY6_4]], [[DUMMY6_4]] --; CHECK-NEXT: [[DUMMY8_4:%.*]] = mul i32 [[DUMMY7_4]], [[DUMMY7_4]] --; CHECK-NEXT: [[DUMMY9_4:%.*]] = mul i32 [[DUMMY8_4]], [[DUMMY8_4]] --; CHECK-NEXT: [[DUMMY10_4:%.*]] = mul i32 [[DUMMY9_4]], [[DUMMY9_4]] --; CHECK-NEXT: [[DUMMY11_4:%.*]] = mul i32 [[DUMMY10_4]], [[DUMMY10_4]] --; CHECK-NEXT: [[DUMMY12_4:%.*]] = mul i32 [[DUMMY11_4]], [[DUMMY11_4]] --; CHECK-NEXT: [[DUMMY13_4:%.*]] = mul i32 [[DUMMY12_4]], [[DUMMY12_4]] --; CHECK-NEXT: [[DUMMY14_4:%.*]] = mul i32 [[DUMMY13_4]], [[DUMMY13_4]] --; CHECK-NEXT: [[DUMMY15_4:%.*]] = mul i32 [[DUMMY14_4]], [[DUMMY14_4]] --; CHECK-NEXT: [[DUMMY16_4:%.*]] = mul i32 [[DUMMY15_4]], [[DUMMY15_4]] --; CHECK-NEXT: [[DUMMY17_4:%.*]] = mul i32 [[DUMMY16_4]], [[DUMMY16_4]] --; CHECK-NEXT: [[DUMMY18_4:%.*]] = mul i32 [[DUMMY17_4]], [[DUMMY17_4]] --; CHECK-NEXT: [[DUMMY19_4:%.*]] = mul i32 [[DUMMY18_4]], [[DUMMY18_4]] --; CHECK-NEXT: [[DUMMY20_4:%.*]] = mul i32 [[DUMMY19_4]], [[DUMMY19_4]] --; CHECK-NEXT: [[DUMMY21_4:%.*]] = mul i32 [[DUMMY20_4]], [[DUMMY20_4]] --; CHECK-NEXT: [[DUMMY22_4:%.*]] = mul i32 [[DUMMY21_4]], [[DUMMY21_4]] --; CHECK-NEXT: [[DUMMY23_4:%.*]] = mul i32 [[DUMMY22_4]], [[DUMMY22_4]] --; CHECK-NEXT: [[DUMMY24_4:%.*]] = mul i32 [[DUMMY23_4]], [[DUMMY23_4]] --; CHECK-NEXT: [[DUMMY25_4:%.*]] = mul i32 [[DUMMY24_4]], [[DUMMY24_4]] --; CHECK-NEXT: [[DUMMY26_4:%.*]] = mul i32 [[DUMMY25_4]], [[DUMMY25_4]] --; CHECK-NEXT: [[DUMMY27_4:%.*]] = mul i32 [[DUMMY26_4]], [[DUMMY26_4]] --; CHECK-NEXT: [[DUMMY28_4:%.*]] = mul i32 [[DUMMY27_4]], [[DUMMY27_4]] --; CHECK-NEXT: [[DUMMY29_4:%.*]] = mul i32 [[DUMMY28_4]], [[DUMMY28_4]] --; CHECK-NEXT: [[DUMMY30_4:%.*]] = mul i32 [[DUMMY29_4]], [[DUMMY29_4]] --; CHECK-NEXT: [[DUMMY31_4:%.*]] = mul i32 [[DUMMY30_4]], [[DUMMY30_4]] --; CHECK-NEXT: [[DUMMY32_4:%.*]] = mul i32 [[DUMMY31_4]], [[DUMMY31_4]] --; CHECK-NEXT: [[DUMMY33_4:%.*]] = mul i32 [[DUMMY32_4]], [[DUMMY32_4]] --; CHECK-NEXT: [[DUMMY34_4:%.*]] = mul i32 [[DUMMY33_4]], [[DUMMY33_4]] --; CHECK-NEXT: [[DUMMY35_4:%.*]] = mul i32 [[DUMMY34_4]], [[DUMMY34_4]] --; CHECK-NEXT: [[DUMMY36_4:%.*]] = mul i32 [[DUMMY35_4]], [[DUMMY35_4]] --; CHECK-NEXT: [[DUMMY37_4:%.*]] = mul i32 [[DUMMY36_4]], [[DUMMY36_4]] --; CHECK-NEXT: [[DUMMY38_4:%.*]] = mul i32 [[DUMMY37_4]], [[DUMMY37_4]] --; CHECK-NEXT: [[DUMMY39_4:%.*]] = mul i32 [[DUMMY38_4]], [[DUMMY38_4]] --; CHECK-NEXT: [[DUMMY40_4:%.*]] = mul i32 [[DUMMY39_4]], [[DUMMY39_4]] --; CHECK-NEXT: [[DUMMY41_4:%.*]] = mul i32 [[DUMMY40_4]], [[DUMMY40_4]] --; CHECK-NEXT: [[DUMMY42_4:%.*]] = mul i32 [[DUMMY41_4]], [[DUMMY41_4]] --; CHECK-NEXT: [[DUMMY43_4:%.*]] = mul i32 [[DUMMY42_4]], [[DUMMY42_4]] --; CHECK-NEXT: [[DUMMY44_4:%.*]] = mul i32 [[DUMMY43_4]], [[DUMMY43_4]] --; CHECK-NEXT: [[DUMMY45_4:%.*]] = mul i32 [[DUMMY44_4]], [[DUMMY44_4]] --; CHECK-NEXT: [[DUMMY46_4:%.*]] = mul i32 [[DUMMY45_4]], [[DUMMY45_4]] --; CHECK-NEXT: [[DUMMY47_4:%.*]] = mul i32 [[DUMMY46_4]], [[DUMMY46_4]] --; CHECK-NEXT: [[DUMMY48_4:%.*]] = mul i32 [[DUMMY47_4]], [[DUMMY47_4]] --; CHECK-NEXT: [[DUMMY49_4:%.*]] = mul i32 [[DUMMY48_4]], [[DUMMY48_4]] --; CHECK-NEXT: [[DUMMY50_4:%.*]] = mul i32 [[DUMMY49_4]], [[DUMMY49_4]] --; CHECK-NEXT: [[SUM_NEXT_4:%.*]] = add nsw i32 [[DUMMY50_4]], [[SUM_NEXT_3]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_4:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 5 --; CHECK-NEXT: [[ARRAYIDX_5:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_4]] --; CHECK-NEXT: [[VAL_5:%.*]] = load i32, ptr [[ARRAYIDX_5]], align 4 --; CHECK-NEXT: [[DUMMY1_5:%.*]] = mul i32 [[VAL_5]], [[VAL_5]] --; CHECK-NEXT: [[DUMMY2_5:%.*]] = mul i32 [[DUMMY1_5]], [[DUMMY1_5]] --; CHECK-NEXT: [[DUMMY3_5:%.*]] = mul i32 [[DUMMY2_5]], [[DUMMY2_5]] --; CHECK-NEXT: [[DUMMY4_5:%.*]] = mul i32 [[DUMMY3_5]], [[DUMMY3_5]] --; CHECK-NEXT: [[DUMMY5_5:%.*]] = mul i32 [[DUMMY4_5]], [[DUMMY4_5]] --; CHECK-NEXT: [[DUMMY6_5:%.*]] = mul i32 [[DUMMY5_5]], [[DUMMY5_5]] --; CHECK-NEXT: [[DUMMY7_5:%.*]] = mul i32 [[DUMMY6_5]], [[DUMMY6_5]] --; CHECK-NEXT: [[DUMMY8_5:%.*]] = mul i32 [[DUMMY7_5]], [[DUMMY7_5]] --; CHECK-NEXT: [[DUMMY9_5:%.*]] = mul i32 [[DUMMY8_5]], [[DUMMY8_5]] --; CHECK-NEXT: [[DUMMY10_5:%.*]] = mul i32 [[DUMMY9_5]], [[DUMMY9_5]] --; CHECK-NEXT: [[DUMMY11_5:%.*]] = mul i32 [[DUMMY10_5]], [[DUMMY10_5]] --; CHECK-NEXT: [[DUMMY12_5:%.*]] = mul i32 [[DUMMY11_5]], [[DUMMY11_5]] --; CHECK-NEXT: [[DUMMY13_5:%.*]] = mul i32 [[DUMMY12_5]], [[DUMMY12_5]] --; CHECK-NEXT: [[DUMMY14_5:%.*]] = mul i32 [[DUMMY13_5]], [[DUMMY13_5]] --; CHECK-NEXT: [[DUMMY15_5:%.*]] = mul i32 [[DUMMY14_5]], [[DUMMY14_5]] --; CHECK-NEXT: [[DUMMY16_5:%.*]] = mul i32 [[DUMMY15_5]], [[DUMMY15_5]] --; CHECK-NEXT: [[DUMMY17_5:%.*]] = mul i32 [[DUMMY16_5]], [[DUMMY16_5]] --; CHECK-NEXT: [[DUMMY18_5:%.*]] = mul i32 [[DUMMY17_5]], [[DUMMY17_5]] --; CHECK-NEXT: [[DUMMY19_5:%.*]] = mul i32 [[DUMMY18_5]], [[DUMMY18_5]] --; CHECK-NEXT: [[DUMMY20_5:%.*]] = mul i32 [[DUMMY19_5]], [[DUMMY19_5]] --; CHECK-NEXT: [[DUMMY21_5:%.*]] = mul i32 [[DUMMY20_5]], [[DUMMY20_5]] --; CHECK-NEXT: [[DUMMY22_5:%.*]] = mul i32 [[DUMMY21_5]], [[DUMMY21_5]] --; CHECK-NEXT: [[DUMMY23_5:%.*]] = mul i32 [[DUMMY22_5]], [[DUMMY22_5]] --; CHECK-NEXT: [[DUMMY24_5:%.*]] = mul i32 [[DUMMY23_5]], [[DUMMY23_5]] --; CHECK-NEXT: [[DUMMY25_5:%.*]] = mul i32 [[DUMMY24_5]], [[DUMMY24_5]] --; CHECK-NEXT: [[DUMMY26_5:%.*]] = mul i32 [[DUMMY25_5]], [[DUMMY25_5]] --; CHECK-NEXT: [[DUMMY27_5:%.*]] = mul i32 [[DUMMY26_5]], [[DUMMY26_5]] --; CHECK-NEXT: [[DUMMY28_5:%.*]] = mul i32 [[DUMMY27_5]], [[DUMMY27_5]] --; CHECK-NEXT: [[DUMMY29_5:%.*]] = mul i32 [[DUMMY28_5]], [[DUMMY28_5]] --; CHECK-NEXT: [[DUMMY30_5:%.*]] = mul i32 [[DUMMY29_5]], [[DUMMY29_5]] --; CHECK-NEXT: [[DUMMY31_5:%.*]] = mul i32 [[DUMMY30_5]], [[DUMMY30_5]] --; CHECK-NEXT: [[DUMMY32_5:%.*]] = mul i32 [[DUMMY31_5]], [[DUMMY31_5]] --; CHECK-NEXT: [[DUMMY33_5:%.*]] = mul i32 [[DUMMY32_5]], [[DUMMY32_5]] --; CHECK-NEXT: [[DUMMY34_5:%.*]] = mul i32 [[DUMMY33_5]], [[DUMMY33_5]] --; CHECK-NEXT: [[DUMMY35_5:%.*]] = mul i32 [[DUMMY34_5]], [[DUMMY34_5]] --; CHECK-NEXT: [[DUMMY36_5:%.*]] = mul i32 [[DUMMY35_5]], [[DUMMY35_5]] --; CHECK-NEXT: [[DUMMY37_5:%.*]] = mul i32 [[DUMMY36_5]], [[DUMMY36_5]] --; CHECK-NEXT: [[DUMMY38_5:%.*]] = mul i32 [[DUMMY37_5]], [[DUMMY37_5]] --; CHECK-NEXT: [[DUMMY39_5:%.*]] = mul i32 [[DUMMY38_5]], [[DUMMY38_5]] --; CHECK-NEXT: [[DUMMY40_5:%.*]] = mul i32 [[DUMMY39_5]], [[DUMMY39_5]] --; CHECK-NEXT: [[DUMMY41_5:%.*]] = mul i32 [[DUMMY40_5]], [[DUMMY40_5]] --; CHECK-NEXT: [[DUMMY42_5:%.*]] = mul i32 [[DUMMY41_5]], [[DUMMY41_5]] --; CHECK-NEXT: [[DUMMY43_5:%.*]] = mul i32 [[DUMMY42_5]], [[DUMMY42_5]] --; CHECK-NEXT: [[DUMMY44_5:%.*]] = mul i32 [[DUMMY43_5]], [[DUMMY43_5]] --; CHECK-NEXT: [[DUMMY45_5:%.*]] = mul i32 [[DUMMY44_5]], [[DUMMY44_5]] --; CHECK-NEXT: [[DUMMY46_5:%.*]] = mul i32 [[DUMMY45_5]], [[DUMMY45_5]] --; CHECK-NEXT: [[DUMMY47_5:%.*]] = mul i32 [[DUMMY46_5]], [[DUMMY46_5]] --; CHECK-NEXT: [[DUMMY48_5:%.*]] = mul i32 [[DUMMY47_5]], [[DUMMY47_5]] --; CHECK-NEXT: [[DUMMY49_5:%.*]] = mul i32 [[DUMMY48_5]], [[DUMMY48_5]] --; CHECK-NEXT: [[DUMMY50_5:%.*]] = mul i32 [[DUMMY49_5]], [[DUMMY49_5]] --; CHECK-NEXT: [[SUM_NEXT_5:%.*]] = add nsw i32 [[DUMMY50_5]], [[SUM_NEXT_4]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_5:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 6 --; CHECK-NEXT: [[ARRAYIDX_6:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_5]] --; CHECK-NEXT: [[VAL_6:%.*]] = load i32, ptr [[ARRAYIDX_6]], align 4 --; CHECK-NEXT: [[DUMMY1_6:%.*]] = mul i32 [[VAL_6]], [[VAL_6]] --; CHECK-NEXT: [[DUMMY2_6:%.*]] = mul i32 [[DUMMY1_6]], [[DUMMY1_6]] --; CHECK-NEXT: [[DUMMY3_6:%.*]] = mul i32 [[DUMMY2_6]], [[DUMMY2_6]] --; CHECK-NEXT: [[DUMMY4_6:%.*]] = mul i32 [[DUMMY3_6]], [[DUMMY3_6]] --; CHECK-NEXT: [[DUMMY5_6:%.*]] = mul i32 [[DUMMY4_6]], [[DUMMY4_6]] --; CHECK-NEXT: [[DUMMY6_6:%.*]] = mul i32 [[DUMMY5_6]], [[DUMMY5_6]] --; CHECK-NEXT: [[DUMMY7_6:%.*]] = mul i32 [[DUMMY6_6]], [[DUMMY6_6]] --; CHECK-NEXT: [[DUMMY8_6:%.*]] = mul i32 [[DUMMY7_6]], [[DUMMY7_6]] --; CHECK-NEXT: [[DUMMY9_6:%.*]] = mul i32 [[DUMMY8_6]], [[DUMMY8_6]] --; CHECK-NEXT: [[DUMMY10_6:%.*]] = mul i32 [[DUMMY9_6]], [[DUMMY9_6]] --; CHECK-NEXT: [[DUMMY11_6:%.*]] = mul i32 [[DUMMY10_6]], [[DUMMY10_6]] --; CHECK-NEXT: [[DUMMY12_6:%.*]] = mul i32 [[DUMMY11_6]], [[DUMMY11_6]] --; CHECK-NEXT: [[DUMMY13_6:%.*]] = mul i32 [[DUMMY12_6]], [[DUMMY12_6]] --; CHECK-NEXT: [[DUMMY14_6:%.*]] = mul i32 [[DUMMY13_6]], [[DUMMY13_6]] --; CHECK-NEXT: [[DUMMY15_6:%.*]] = mul i32 [[DUMMY14_6]], [[DUMMY14_6]] --; CHECK-NEXT: [[DUMMY16_6:%.*]] = mul i32 [[DUMMY15_6]], [[DUMMY15_6]] --; CHECK-NEXT: [[DUMMY17_6:%.*]] = mul i32 [[DUMMY16_6]], [[DUMMY16_6]] --; CHECK-NEXT: [[DUMMY18_6:%.*]] = mul i32 [[DUMMY17_6]], [[DUMMY17_6]] --; CHECK-NEXT: [[DUMMY19_6:%.*]] = mul i32 [[DUMMY18_6]], [[DUMMY18_6]] --; CHECK-NEXT: [[DUMMY20_6:%.*]] = mul i32 [[DUMMY19_6]], [[DUMMY19_6]] --; CHECK-NEXT: [[DUMMY21_6:%.*]] = mul i32 [[DUMMY20_6]], [[DUMMY20_6]] --; CHECK-NEXT: [[DUMMY22_6:%.*]] = mul i32 [[DUMMY21_6]], [[DUMMY21_6]] --; CHECK-NEXT: [[DUMMY23_6:%.*]] = mul i32 [[DUMMY22_6]], [[DUMMY22_6]] --; CHECK-NEXT: [[DUMMY24_6:%.*]] = mul i32 [[DUMMY23_6]], [[DUMMY23_6]] --; CHECK-NEXT: [[DUMMY25_6:%.*]] = mul i32 [[DUMMY24_6]], [[DUMMY24_6]] --; CHECK-NEXT: [[DUMMY26_6:%.*]] = mul i32 [[DUMMY25_6]], [[DUMMY25_6]] --; CHECK-NEXT: [[DUMMY27_6:%.*]] = mul i32 [[DUMMY26_6]], [[DUMMY26_6]] --; CHECK-NEXT: [[DUMMY28_6:%.*]] = mul i32 [[DUMMY27_6]], [[DUMMY27_6]] --; CHECK-NEXT: [[DUMMY29_6:%.*]] = mul i32 [[DUMMY28_6]], [[DUMMY28_6]] --; CHECK-NEXT: [[DUMMY30_6:%.*]] = mul i32 [[DUMMY29_6]], [[DUMMY29_6]] --; CHECK-NEXT: [[DUMMY31_6:%.*]] = mul i32 [[DUMMY30_6]], [[DUMMY30_6]] --; CHECK-NEXT: [[DUMMY32_6:%.*]] = mul i32 [[DUMMY31_6]], [[DUMMY31_6]] --; CHECK-NEXT: [[DUMMY33_6:%.*]] = mul i32 [[DUMMY32_6]], [[DUMMY32_6]] --; CHECK-NEXT: [[DUMMY34_6:%.*]] = mul i32 [[DUMMY33_6]], [[DUMMY33_6]] --; CHECK-NEXT: [[DUMMY35_6:%.*]] = mul i32 [[DUMMY34_6]], [[DUMMY34_6]] --; CHECK-NEXT: [[DUMMY36_6:%.*]] = mul i32 [[DUMMY35_6]], [[DUMMY35_6]] --; CHECK-NEXT: [[DUMMY37_6:%.*]] = mul i32 [[DUMMY36_6]], [[DUMMY36_6]] --; CHECK-NEXT: [[DUMMY38_6:%.*]] = mul i32 [[DUMMY37_6]], [[DUMMY37_6]] --; CHECK-NEXT: [[DUMMY39_6:%.*]] = mul i32 [[DUMMY38_6]], [[DUMMY38_6]] --; CHECK-NEXT: [[DUMMY40_6:%.*]] = mul i32 [[DUMMY39_6]], [[DUMMY39_6]] --; CHECK-NEXT: [[DUMMY41_6:%.*]] = mul i32 [[DUMMY40_6]], [[DUMMY40_6]] --; CHECK-NEXT: [[DUMMY42_6:%.*]] = mul i32 [[DUMMY41_6]], [[DUMMY41_6]] --; CHECK-NEXT: [[DUMMY43_6:%.*]] = mul i32 [[DUMMY42_6]], [[DUMMY42_6]] --; CHECK-NEXT: [[DUMMY44_6:%.*]] = mul i32 [[DUMMY43_6]], [[DUMMY43_6]] --; CHECK-NEXT: [[DUMMY45_6:%.*]] = mul i32 [[DUMMY44_6]], [[DUMMY44_6]] --; CHECK-NEXT: [[DUMMY46_6:%.*]] = mul i32 [[DUMMY45_6]], [[DUMMY45_6]] --; CHECK-NEXT: [[DUMMY47_6:%.*]] = mul i32 [[DUMMY46_6]], [[DUMMY46_6]] --; CHECK-NEXT: [[DUMMY48_6:%.*]] = mul i32 [[DUMMY47_6]], [[DUMMY47_6]] --; CHECK-NEXT: [[DUMMY49_6:%.*]] = mul i32 [[DUMMY48_6]], [[DUMMY48_6]] --; CHECK-NEXT: [[DUMMY50_6:%.*]] = mul i32 [[DUMMY49_6]], [[DUMMY49_6]] --; CHECK-NEXT: [[SUM_NEXT_6:%.*]] = add nsw i32 [[DUMMY50_6]], [[SUM_NEXT_5]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_6:%.*]] = add nuw nsw i64 [[INDVARS_IV]], 7 --; CHECK-NEXT: [[ARRAYIDX_7:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_NEXT_6]] --; CHECK-NEXT: [[VAL_7:%.*]] = load i32, ptr [[ARRAYIDX_7]], align 4 --; CHECK-NEXT: [[DUMMY1_7:%.*]] = mul i32 [[VAL_7]], [[VAL_7]] --; CHECK-NEXT: [[DUMMY2_7:%.*]] = mul i32 [[DUMMY1_7]], [[DUMMY1_7]] --; CHECK-NEXT: [[DUMMY3_7:%.*]] = mul i32 [[DUMMY2_7]], [[DUMMY2_7]] --; CHECK-NEXT: [[DUMMY4_7:%.*]] = mul i32 [[DUMMY3_7]], [[DUMMY3_7]] --; CHECK-NEXT: [[DUMMY5_7:%.*]] = mul i32 [[DUMMY4_7]], [[DUMMY4_7]] --; CHECK-NEXT: [[DUMMY6_7:%.*]] = mul i32 [[DUMMY5_7]], [[DUMMY5_7]] --; CHECK-NEXT: [[DUMMY7_7:%.*]] = mul i32 [[DUMMY6_7]], [[DUMMY6_7]] --; CHECK-NEXT: [[DUMMY8_7:%.*]] = mul i32 [[DUMMY7_7]], [[DUMMY7_7]] --; CHECK-NEXT: [[DUMMY9_7:%.*]] = mul i32 [[DUMMY8_7]], [[DUMMY8_7]] --; CHECK-NEXT: [[DUMMY10_7:%.*]] = mul i32 [[DUMMY9_7]], [[DUMMY9_7]] --; CHECK-NEXT: [[DUMMY11_7:%.*]] = mul i32 [[DUMMY10_7]], [[DUMMY10_7]] --; CHECK-NEXT: [[DUMMY12_7:%.*]] = mul i32 [[DUMMY11_7]], [[DUMMY11_7]] --; CHECK-NEXT: [[DUMMY13_7:%.*]] = mul i32 [[DUMMY12_7]], [[DUMMY12_7]] --; CHECK-NEXT: [[DUMMY14_7:%.*]] = mul i32 [[DUMMY13_7]], [[DUMMY13_7]] --; CHECK-NEXT: [[DUMMY15_7:%.*]] = mul i32 [[DUMMY14_7]], [[DUMMY14_7]] --; CHECK-NEXT: [[DUMMY16_7:%.*]] = mul i32 [[DUMMY15_7]], [[DUMMY15_7]] --; CHECK-NEXT: [[DUMMY17_7:%.*]] = mul i32 [[DUMMY16_7]], [[DUMMY16_7]] --; CHECK-NEXT: [[DUMMY18_7:%.*]] = mul i32 [[DUMMY17_7]], [[DUMMY17_7]] --; CHECK-NEXT: [[DUMMY19_7:%.*]] = mul i32 [[DUMMY18_7]], [[DUMMY18_7]] --; CHECK-NEXT: [[DUMMY20_7:%.*]] = mul i32 [[DUMMY19_7]], [[DUMMY19_7]] --; CHECK-NEXT: [[DUMMY21_7:%.*]] = mul i32 [[DUMMY20_7]], [[DUMMY20_7]] --; CHECK-NEXT: [[DUMMY22_7:%.*]] = mul i32 [[DUMMY21_7]], [[DUMMY21_7]] --; CHECK-NEXT: [[DUMMY23_7:%.*]] = mul i32 [[DUMMY22_7]], [[DUMMY22_7]] --; CHECK-NEXT: [[DUMMY24_7:%.*]] = mul i32 [[DUMMY23_7]], [[DUMMY23_7]] --; CHECK-NEXT: [[DUMMY25_7:%.*]] = mul i32 [[DUMMY24_7]], [[DUMMY24_7]] --; CHECK-NEXT: [[DUMMY26_7:%.*]] = mul i32 [[DUMMY25_7]], [[DUMMY25_7]] --; CHECK-NEXT: [[DUMMY27_7:%.*]] = mul i32 [[DUMMY26_7]], [[DUMMY26_7]] --; CHECK-NEXT: [[DUMMY28_7:%.*]] = mul i32 [[DUMMY27_7]], [[DUMMY27_7]] --; CHECK-NEXT: [[DUMMY29_7:%.*]] = mul i32 [[DUMMY28_7]], [[DUMMY28_7]] --; CHECK-NEXT: [[DUMMY30_7:%.*]] = mul i32 [[DUMMY29_7]], [[DUMMY29_7]] --; CHECK-NEXT: [[DUMMY31_7:%.*]] = mul i32 [[DUMMY30_7]], [[DUMMY30_7]] --; CHECK-NEXT: [[DUMMY32_7:%.*]] = mul i32 [[DUMMY31_7]], [[DUMMY31_7]] --; CHECK-NEXT: [[DUMMY33_7:%.*]] = mul i32 [[DUMMY32_7]], [[DUMMY32_7]] --; CHECK-NEXT: [[DUMMY34_7:%.*]] = mul i32 [[DUMMY33_7]], [[DUMMY33_7]] --; CHECK-NEXT: [[DUMMY35_7:%.*]] = mul i32 [[DUMMY34_7]], [[DUMMY34_7]] --; CHECK-NEXT: [[DUMMY36_7:%.*]] = mul i32 [[DUMMY35_7]], [[DUMMY35_7]] --; CHECK-NEXT: [[DUMMY37_7:%.*]] = mul i32 [[DUMMY36_7]], [[DUMMY36_7]] --; CHECK-NEXT: [[DUMMY38_7:%.*]] = mul i32 [[DUMMY37_7]], [[DUMMY37_7]] --; CHECK-NEXT: [[DUMMY39_7:%.*]] = mul i32 [[DUMMY38_7]], [[DUMMY38_7]] --; CHECK-NEXT: [[DUMMY40_7:%.*]] = mul i32 [[DUMMY39_7]], [[DUMMY39_7]] --; CHECK-NEXT: [[DUMMY41_7:%.*]] = mul i32 [[DUMMY40_7]], [[DUMMY40_7]] --; CHECK-NEXT: [[DUMMY42_7:%.*]] = mul i32 [[DUMMY41_7]], [[DUMMY41_7]] --; CHECK-NEXT: [[DUMMY43_7:%.*]] = mul i32 [[DUMMY42_7]], [[DUMMY42_7]] --; CHECK-NEXT: [[DUMMY44_7:%.*]] = mul i32 [[DUMMY43_7]], [[DUMMY43_7]] --; CHECK-NEXT: [[DUMMY45_7:%.*]] = mul i32 [[DUMMY44_7]], [[DUMMY44_7]] --; CHECK-NEXT: [[DUMMY46_7:%.*]] = mul i32 [[DUMMY45_7]], [[DUMMY45_7]] --; CHECK-NEXT: [[DUMMY47_7:%.*]] = mul i32 [[DUMMY46_7]], [[DUMMY46_7]] --; CHECK-NEXT: [[DUMMY48_7:%.*]] = mul i32 [[DUMMY47_7]], [[DUMMY47_7]] --; CHECK-NEXT: [[DUMMY49_7:%.*]] = mul i32 [[DUMMY48_7]], [[DUMMY48_7]] --; CHECK-NEXT: [[DUMMY50_7:%.*]] = mul i32 [[DUMMY49_7]], [[DUMMY49_7]] --; CHECK-NEXT: [[SUM_NEXT_7]] = add nsw i32 [[DUMMY50_7]], [[SUM_NEXT_6]] --; CHECK-NEXT: [[INDVARS_IV_NEXT_7]] = add nuw nsw i64 [[INDVARS_IV]], 8 --; CHECK-NEXT: [[NITER_NEXT_7]] = add i64 [[NITER]], 8 --; CHECK-NEXT: [[NITER_NCMP_7:%.*]] = icmp eq i64 [[NITER_NEXT_7]], [[UNROLL_ITER]] --; CHECK-NEXT: br i1 [[NITER_NCMP_7]], label [[FOR_COND_CLEANUP_UNR_LCSSA_LOOPEXIT:%.*]], label [[FOR_BODY]] --; CHECK: for.cond.cleanup.unr-lcssa.loopexit: --; CHECK-NEXT: [[SUM_NEXT_LCSSA_PH_PH:%.*]] = phi i32 [ [[SUM_NEXT_7]], [[FOR_BODY]] ] --; CHECK-NEXT: [[INDVARS_IV_UNR_PH:%.*]] = phi i64 [ [[INDVARS_IV_NEXT_7]], [[FOR_BODY]] ] --; CHECK-NEXT: [[SUM_UNR_PH:%.*]] = phi i32 [ [[SUM_NEXT_7]], [[FOR_BODY]] ] --; CHECK-NEXT: br label [[FOR_COND_CLEANUP_UNR_LCSSA]] --; CHECK: for.cond.cleanup.unr-lcssa: --; CHECK-NEXT: [[SUM_NEXT_LCSSA_PH:%.*]] = phi i32 [ undef, [[ENTRY:%.*]] ], [ [[SUM_NEXT_LCSSA_PH_PH]], [[FOR_COND_CLEANUP_UNR_LCSSA_LOOPEXIT]] ] --; CHECK-NEXT: [[INDVARS_IV_UNR:%.*]] = phi i64 [ 0, [[ENTRY]] ], [ [[INDVARS_IV_UNR_PH]], [[FOR_COND_CLEANUP_UNR_LCSSA_LOOPEXIT]] ] --; CHECK-NEXT: [[SUM_UNR:%.*]] = phi i32 [ 0, [[ENTRY]] ], [ [[SUM_UNR_PH]], [[FOR_COND_CLEANUP_UNR_LCSSA_LOOPEXIT]] ] --; CHECK-NEXT: [[LCMP_MOD:%.*]] = icmp ne i64 [[XTRAITER]], 0 --; CHECK-NEXT: br i1 [[LCMP_MOD]], label [[FOR_BODY_EPIL_PREHEADER:%.*]], label [[FOR_COND_CLEANUP:%.*]] --; CHECK: for.body.epil.preheader: --; CHECK-NEXT: br label [[FOR_BODY_EPIL:%.*]] --; CHECK: for.body.epil: --; CHECK-NEXT: [[INDVARS_IV_EPIL:%.*]] = phi i64 [ [[INDVARS_IV_UNR]], [[FOR_BODY_EPIL_PREHEADER]] ], [ [[INDVARS_IV_NEXT_EPIL:%.*]], [[FOR_BODY_EPIL]] ] --; CHECK-NEXT: [[SUM_EPIL:%.*]] = phi i32 [ [[SUM_UNR]], [[FOR_BODY_EPIL_PREHEADER]] ], [ [[SUM_NEXT_EPIL:%.*]], [[FOR_BODY_EPIL]] ] --; CHECK-NEXT: [[EPIL_ITER:%.*]] = phi i64 [ 0, [[FOR_BODY_EPIL_PREHEADER]] ], [ [[EPIL_ITER_NEXT:%.*]], [[FOR_BODY_EPIL]] ] --; CHECK-NEXT: [[ARRAYIDX_EPIL:%.*]] = getelementptr inbounds i32, ptr [[ARY]], i64 [[INDVARS_IV_EPIL]] --; CHECK-NEXT: [[VAL_EPIL:%.*]] = load i32, ptr [[ARRAYIDX_EPIL]], align 4 --; CHECK-NEXT: [[DUMMY1_EPIL:%.*]] = mul i32 [[VAL_EPIL]], [[VAL_EPIL]] --; CHECK-NEXT: [[DUMMY2_EPIL:%.*]] = mul i32 [[DUMMY1_EPIL]], [[DUMMY1_EPIL]] --; CHECK-NEXT: [[DUMMY3_EPIL:%.*]] = mul i32 [[DUMMY2_EPIL]], [[DUMMY2_EPIL]] --; CHECK-NEXT: [[DUMMY4_EPIL:%.*]] = mul i32 [[DUMMY3_EPIL]], [[DUMMY3_EPIL]] --; CHECK-NEXT: [[DUMMY5_EPIL:%.*]] = mul i32 [[DUMMY4_EPIL]], [[DUMMY4_EPIL]] --; CHECK-NEXT: [[DUMMY6_EPIL:%.*]] = mul i32 [[DUMMY5_EPIL]], [[DUMMY5_EPIL]] --; CHECK-NEXT: [[DUMMY7_EPIL:%.*]] = mul i32 [[DUMMY6_EPIL]], [[DUMMY6_EPIL]] --; CHECK-NEXT: [[DUMMY8_EPIL:%.*]] = mul i32 [[DUMMY7_EPIL]], [[DUMMY7_EPIL]] --; CHECK-NEXT: [[DUMMY9_EPIL:%.*]] = mul i32 [[DUMMY8_EPIL]], [[DUMMY8_EPIL]] --; CHECK-NEXT: [[DUMMY10_EPIL:%.*]] = mul i32 [[DUMMY9_EPIL]], [[DUMMY9_EPIL]] --; CHECK-NEXT: [[DUMMY11_EPIL:%.*]] = mul i32 [[DUMMY10_EPIL]], [[DUMMY10_EPIL]] --; CHECK-NEXT: [[DUMMY12_EPIL:%.*]] = mul i32 [[DUMMY11_EPIL]], [[DUMMY11_EPIL]] --; CHECK-NEXT: [[DUMMY13_EPIL:%.*]] = mul i32 [[DUMMY12_EPIL]], [[DUMMY12_EPIL]] --; CHECK-NEXT: [[DUMMY14_EPIL:%.*]] = mul i32 [[DUMMY13_EPIL]], [[DUMMY13_EPIL]] --; CHECK-NEXT: [[DUMMY15_EPIL:%.*]] = mul i32 [[DUMMY14_EPIL]], [[DUMMY14_EPIL]] --; CHECK-NEXT: [[DUMMY16_EPIL:%.*]] = mul i32 [[DUMMY15_EPIL]], [[DUMMY15_EPIL]] --; CHECK-NEXT: [[DUMMY17_EPIL:%.*]] = mul i32 [[DUMMY16_EPIL]], [[DUMMY16_EPIL]] --; CHECK-NEXT: [[DUMMY18_EPIL:%.*]] = mul i32 [[DUMMY17_EPIL]], [[DUMMY17_EPIL]] --; CHECK-NEXT: [[DUMMY19_EPIL:%.*]] = mul i32 [[DUMMY18_EPIL]], [[DUMMY18_EPIL]] --; CHECK-NEXT: [[DUMMY20_EPIL:%.*]] = mul i32 [[DUMMY19_EPIL]], [[DUMMY19_EPIL]] --; CHECK-NEXT: [[DUMMY21_EPIL:%.*]] = mul i32 [[DUMMY20_EPIL]], [[DUMMY20_EPIL]] --; CHECK-NEXT: [[DUMMY22_EPIL:%.*]] = mul i32 [[DUMMY21_EPIL]], [[DUMMY21_EPIL]] --; CHECK-NEXT: [[DUMMY23_EPIL:%.*]] = mul i32 [[DUMMY22_EPIL]], [[DUMMY22_EPIL]] --; CHECK-NEXT: [[DUMMY24_EPIL:%.*]] = mul i32 [[DUMMY23_EPIL]], [[DUMMY23_EPIL]] --; CHECK-NEXT: [[DUMMY25_EPIL:%.*]] = mul i32 [[DUMMY24_EPIL]], [[DUMMY24_EPIL]] --; CHECK-NEXT: [[DUMMY26_EPIL:%.*]] = mul i32 [[DUMMY25_EPIL]], [[DUMMY25_EPIL]] --; CHECK-NEXT: [[DUMMY27_EPIL:%.*]] = mul i32 [[DUMMY26_EPIL]], [[DUMMY26_EPIL]] --; CHECK-NEXT: [[DUMMY28_EPIL:%.*]] = mul i32 [[DUMMY27_EPIL]], [[DUMMY27_EPIL]] --; CHECK-NEXT: [[DUMMY29_EPIL:%.*]] = mul i32 [[DUMMY28_EPIL]], [[DUMMY28_EPIL]] --; CHECK-NEXT: [[DUMMY30_EPIL:%.*]] = mul i32 [[DUMMY29_EPIL]], [[DUMMY29_EPIL]] --; CHECK-NEXT: [[DUMMY31_EPIL:%.*]] = mul i32 [[DUMMY30_EPIL]], [[DUMMY30_EPIL]] --; CHECK-NEXT: [[DUMMY32_EPIL:%.*]] = mul i32 [[DUMMY31_EPIL]], [[DUMMY31_EPIL]] --; CHECK-NEXT: [[DUMMY33_EPIL:%.*]] = mul i32 [[DUMMY32_EPIL]], [[DUMMY32_EPIL]] --; CHECK-NEXT: [[DUMMY34_EPIL:%.*]] = mul i32 [[DUMMY33_EPIL]], [[DUMMY33_EPIL]] --; CHECK-NEXT: [[DUMMY35_EPIL:%.*]] = mul i32 [[DUMMY34_EPIL]], [[DUMMY34_EPIL]] --; CHECK-NEXT: [[DUMMY36_EPIL:%.*]] = mul i32 [[DUMMY35_EPIL]], [[DUMMY35_EPIL]] --; CHECK-NEXT: [[DUMMY37_EPIL:%.*]] = mul i32 [[DUMMY36_EPIL]], [[DUMMY36_EPIL]] --; CHECK-NEXT: [[DUMMY38_EPIL:%.*]] = mul i32 [[DUMMY37_EPIL]], [[DUMMY37_EPIL]] --; CHECK-NEXT: [[DUMMY39_EPIL:%.*]] = mul i32 [[DUMMY38_EPIL]], [[DUMMY38_EPIL]] --; CHECK-NEXT: [[DUMMY40_EPIL:%.*]] = mul i32 [[DUMMY39_EPIL]], [[DUMMY39_EPIL]] --; CHECK-NEXT: [[DUMMY41_EPIL:%.*]] = mul i32 [[DUMMY40_EPIL]], [[DUMMY40_EPIL]] --; CHECK-NEXT: [[DUMMY42_EPIL:%.*]] = mul i32 [[DUMMY41_EPIL]], [[DUMMY41_EPIL]] --; CHECK-NEXT: [[DUMMY43_EPIL:%.*]] = mul i32 [[DUMMY42_EPIL]], [[DUMMY42_EPIL]] --; CHECK-NEXT: [[DUMMY44_EPIL:%.*]] = mul i32 [[DUMMY43_EPIL]], [[DUMMY43_EPIL]] --; CHECK-NEXT: [[DUMMY45_EPIL:%.*]] = mul i32 [[DUMMY44_EPIL]], [[DUMMY44_EPIL]] --; CHECK-NEXT: [[DUMMY46_EPIL:%.*]] = mul i32 [[DUMMY45_EPIL]], [[DUMMY45_EPIL]] --; CHECK-NEXT: [[DUMMY47_EPIL:%.*]] = mul i32 [[DUMMY46_EPIL]], [[DUMMY46_EPIL]] --; CHECK-NEXT: [[DUMMY48_EPIL:%.*]] = mul i32 [[DUMMY47_EPIL]], [[DUMMY47_EPIL]] --; CHECK-NEXT: [[DUMMY49_EPIL:%.*]] = mul i32 [[DUMMY48_EPIL]], [[DUMMY48_EPIL]] --; CHECK-NEXT: [[DUMMY50_EPIL:%.*]] = mul i32 [[DUMMY49_EPIL]], [[DUMMY49_EPIL]] -+; CHECK-NEXT: [[DUMMY50_EPIL:%.*]] = mul i32 [[DUMMY49]], [[DUMMY49]] - ; CHECK-NEXT: [[SUM_NEXT_EPIL]] = add nsw i32 [[DUMMY50_EPIL]], [[SUM_EPIL]] - ; CHECK-NEXT: [[INDVARS_IV_NEXT_EPIL]] = add nuw nsw i64 [[INDVARS_IV_EPIL]], 1 - ; CHECK-NEXT: [[EXITCOND_NOT_EPIL:%.*]] = icmp eq i64 [[INDVARS_IV_NEXT_EPIL]], [[N]] --; CHECK-NEXT: [[EPIL_ITER_NEXT]] = add i64 [[EPIL_ITER]], 1 --; CHECK-NEXT: [[EPIL_ITER_CMP:%.*]] = icmp ne i64 [[EPIL_ITER_NEXT]], [[XTRAITER]] --; CHECK-NEXT: br i1 [[EPIL_ITER_CMP]], label [[FOR_BODY_EPIL]], label [[FOR_COND_CLEANUP_EPILOG_LCSSA:%.*]], !llvm.loop [[LOOP0:![0-9]+]] --; CHECK: for.cond.cleanup.epilog-lcssa: --; CHECK-NEXT: [[SUM_NEXT_LCSSA_PH1:%.*]] = phi i32 [ [[SUM_NEXT_EPIL]], [[FOR_BODY_EPIL]] ] --; CHECK-NEXT: br label [[FOR_COND_CLEANUP]] -+; CHECK-NEXT: br i1 [[EXITCOND_NOT_EPIL]], label [[FOR_COND_CLEANUP:%.*]], label [[FOR_BODY]] - ; CHECK: for.cond.cleanup: --; CHECK-NEXT: [[SUM_NEXT_LCSSA:%.*]] = phi i32 [ [[SUM_NEXT_LCSSA_PH]], [[FOR_COND_CLEANUP_UNR_LCSSA]] ], [ [[SUM_NEXT_LCSSA_PH1]], [[FOR_COND_CLEANUP_EPILOG_LCSSA]] ] -+; CHECK-NEXT: [[SUM_NEXT_LCSSA:%.*]] = phi i32 [ [[SUM_NEXT_EPIL]], [[FOR_BODY]] ] - ; CHECK-NEXT: ret i32 [[SUM_NEXT_LCSSA]] - ; - entry: --- -2.46.0 - diff --git a/llvm/0003-disable-gather-znver4.patch b/llvm/0003-disable-gather-znver4.patch deleted file mode 100644 index d246bfd2..00000000 --- a/llvm/0003-disable-gather-znver4.patch +++ /dev/null @@ -1,16 +0,0 @@ -diff --git a/lib/Target/X86/X86.td b/lib/Target/X86/X86.td -index e89ddcc57..583edb402 100644 ---- a/lib/Target/X86/X86.td -+++ b/lib/Target/X86/X86.td -@@ -1504,7 +1504,10 @@ def ProcessorFeatures { - !listconcat(ZN2Tuning, ZN3AdditionalTuning); - list ZN3Features = - !listconcat(ZN2Features, ZN3AdditionalFeatures); -- list ZN4Tuning = ZN3Tuning; -+ list ZN4AdditionalTuning = [TuningPreferNoGather, -+ TuningPreferNoScatter]; -+ list ZN4Tuning = -+ !listconcat(ZN3Tuning, ZN4AdditionalTuning); - list ZN4AdditionalFeatures = [FeatureAVX512, - FeatureEVEX512, - FeatureCDI, diff --git a/llvm/PKGBUILD b/llvm/PKGBUILD index f64138b1..0c7734c2 100644 --- a/llvm/PKGBUILD +++ b/llvm/PKGBUILD @@ -2,12 +2,12 @@ # Contributor: Jan "heftig" Steffens pkgname=('llvm' 'llvm-libs') -pkgver=18.1.8 -pkgrel=10 +pkgver=19.1.6 +pkgrel=4 arch=('x86_64') url="https://llvm.org/" license=('Apache-2.0 WITH LLVM-exception') -makedepends=('cmake' 'ninja' 'zlib' 'zstd' 'curl' 'libffi' 'libedit' 'ncurses' +makedepends=('cmake' 'ninja' 'zlib' 'zstd' 'curl' 'libffi' 'libedit' 'libxml2' 'python-setuptools' 'python-psutil' 'python-sphinx' 'python-myst-parser' 'clang' 'lld' 'llvm') options=('staticlibs' '!lto') # tools/llvm-shlib/typeids.test fails with LTO @@ -15,21 +15,16 @@ _source_base=https://github.com/llvm/llvm-project/releases/download/llvmorg-$pkg source=($_source_base/llvm-$pkgver.src.tar.xz{,.sig} $_source_base/cmake-$pkgver.src.tar.xz{,.sig} $_source_base/third-party-$pkgver.src.tar.xz{,.sig} - $pkgname-SelectionDAG.patch::https://github.com/llvm/llvm-project/commit/46505b3cbfc5.patch - 0001-Enable-TuningSlowDivide64-on-Barcelona-Bobcat-Bulldo.patch - 0002-Reduce-znver3-4-LoopMicroOpBufferSize-to-practical-l.patch - 0003-disable-gather-znver4.patch) -sha256sums=('f68cf90f369bc7d0158ba70d860b0cb34dbc163d6ff0ebc6cfa5e515b9b2e28d' + llvm-SelectionDAG.patch) +sha256sums=('ad1a3b125ff014ded290094088de40efb9193ce81a24278184230b7d401f8a3e' 'SKIP' - '59badef592dd34893cd319d42b323aaa990b452d05c7180ff20f23ab1b41e837' + '9c7ec82d9a240dc2287b8de89d6881bb64ceea0dcd6ce133c34ef65bda22d99e' 'SKIP' - 'b76b810f3d3dc5d08e83c4236cb6e395aa9bd5e3ea861e8c319b216d093db074' + '0e8048333bab2ba3607910e5d074259f08dccf00615778d03a2a55416718eb45' 'SKIP' - '9b53e584f8b8a44648a2a066da1860155b61118c8cdebed3632161db0b680462' - '7d4b76f753618752aaed64bb496ed3cd443faf1d3124b540c643abcca5a9756e' - 'bac174d1958fa3134ce530cf2eed8abdbf910697e87cee6e4a23a5a3a1098b2d' - '1777d80f0fc4a76c67a92a3607831f760cf7f1ee5c16fa0dfd198de2ad47d18d') -validpgpkeys=('474E22316ABF4785A88C6E8EA2C794A986419D8A') # Tom Stellard + '9b53e584f8b8a44648a2a066da1860155b61118c8cdebed3632161db0b680462') +validpgpkeys=('474E22316ABF4785A88C6E8EA2C794A986419D8A' # Tom Stellard + 'D574BD5D1D0E98895E3BF90044F2485E45D59042') # Tobias Hieta # Utilizing LLVM_DISTRIBUTION_COMPONENTS to avoid # installing static libraries; inspired by Gentoo @@ -70,17 +65,6 @@ prepare() { cd llvm-$pkgver.src mkdir build - # https://github.com/llvm/llvm-project/issues/82431 - sed '/^diff.*inline-asm-memop.ll/,$d' ../$pkgname-SelectionDAG.patch | patch -Np2 - - # Add fixes for the Zen3 and Zen4 Architecure, since compiling with -march=znverX - # can result often into a lower runtime performance - # Lets pick them from the LLVM 19 branch - patch -Np1 < ../0001-Enable-TuningSlowDivide64-on-Barcelona-Bobcat-Bulldo.patch - patch -Np1 < ../0002-Reduce-znver3-4-LoopMicroOpBufferSize-to-practical-l.patch - # Disable Gather on Znver4 - patch -Np1 < ../0003-disable-gather-znver4.patch - # Remove CMake find module for zstd; breaks if out of sync with upstream zstd rm cmake/modules/Findzstd.cmake } @@ -193,7 +177,7 @@ package_llvm() { package_llvm-libs() { pkgdesc="LLVM runtime libraries" - depends=('gcc-libs' 'zlib' 'zstd' 'libffi' 'libedit' 'ncurses' 'libxml2') + depends=('gcc-libs' 'zlib' 'zstd' 'libffi' 'libedit' 'libxml2') install -d "$pkgdir/usr/lib" cp -P \ diff --git a/mesa/lib32-mesa/PKGBUILD b/mesa/lib32-mesa/PKGBUILD index 3904ffee..782d440a 100644 --- a/mesa/lib32-mesa/PKGBUILD +++ b/mesa/lib32-mesa/PKGBUILD @@ -17,7 +17,7 @@ pkgname=( lib32-vulkan-virtio ) pkgver=24.3.3 -pkgrel=2 +pkgrel=3 epoch=1 pkgdesc="Open-source OpenGL drivers - 32-bit" url="https://www.mesa3d.org/" diff --git a/mesa/mesa/PKGBUILD b/mesa/mesa/PKGBUILD index 6ccfbf74..b0e237ba 100644 --- a/mesa/mesa/PKGBUILD +++ b/mesa/mesa/PKGBUILD @@ -22,7 +22,7 @@ pkgname=( mesa-docs ) pkgver=24.3.3 -pkgrel=2 +pkgrel=3 epoch=1 pkgdesc="Open-source OpenGL drivers" url="https://www.mesa3d.org/"