Index: llvm/lib/Transforms/Scalar/SeparateConstOffsetFromGEP.cpp =================================================================== --- llvm/lib/Transforms/Scalar/SeparateConstOffsetFromGEP.cpp +++ llvm/lib/Transforms/Scalar/SeparateConstOffsetFromGEP.cpp @@ -356,6 +356,7 @@ void getAnalysisUsage(AnalysisUsage &AU) const override { AU.addRequired(); AU.addRequired(); + AU.addPreserved(); AU.addRequired(); AU.addRequired(); AU.setPreservesCFG(); @@ -1418,5 +1419,6 @@ return PreservedAnalyses::all(); PreservedAnalyses PA; PA.preserveSet(); + PA.preserve(); return PA; } Index: llvm/test/CodeGen/AMDGPU/llc-pipeline.ll =================================================================== --- llvm/test/CodeGen/AMDGPU/llc-pipeline.ll +++ llvm/test/CodeGen/AMDGPU/llc-pipeline.ll @@ -455,7 +455,6 @@ ; GCN-O1-OPTS-NEXT: Natural Loop Information ; GCN-O1-OPTS-NEXT: Scalar Evolution Analysis ; GCN-O1-OPTS-NEXT: Split GEPs to a variadic base and a constant offset for better CSE -; GCN-O1-OPTS-NEXT: Scalar Evolution Analysis ; GCN-O1-OPTS-NEXT: Straight line strength reduction ; GCN-O1-OPTS-NEXT: Early CSE ; GCN-O1-OPTS-NEXT: Scalar Evolution Analysis @@ -747,7 +746,6 @@ ; GCN-O2-NEXT: Natural Loop Information ; GCN-O2-NEXT: Scalar Evolution Analysis ; GCN-O2-NEXT: Split GEPs to a variadic base and a constant offset for better CSE -; GCN-O2-NEXT: Scalar Evolution Analysis ; GCN-O2-NEXT: Straight line strength reduction ; GCN-O2-NEXT: Early CSE ; GCN-O2-NEXT: Scalar Evolution Analysis @@ -1050,7 +1048,6 @@ ; GCN-O3-NEXT: Natural Loop Information ; GCN-O3-NEXT: Scalar Evolution Analysis ; GCN-O3-NEXT: Split GEPs to a variadic base and a constant offset for better CSE -; GCN-O3-NEXT: Scalar Evolution Analysis ; GCN-O3-NEXT: Straight line strength reduction ; GCN-O3-NEXT: Basic Alias Analysis (stateless AA impl) ; GCN-O3-NEXT: Function Alias Analysis Results Index: llvm/test/Transforms/SeparateConstOffsetFromGEP/AArch64/scalable-vector-geps.ll =================================================================== --- llvm/test/Transforms/SeparateConstOffsetFromGEP/AArch64/scalable-vector-geps.ll +++ llvm/test/Transforms/SeparateConstOffsetFromGEP/AArch64/scalable-vector-geps.ll @@ -1,5 +1,5 @@ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py -; RUN: opt -S -passes=separate-const-offset-from-gep < %s | FileCheck %s +; RUN: opt -S -passes=separate-const-offset-from-gep -verify-scev -verify-scev-strict -verify-scev-maps < %s | FileCheck %s target triple = "aarch64-linux-gnu" Index: llvm/test/Transforms/SeparateConstOffsetFromGEP/AArch64/split-gep.ll =================================================================== --- llvm/test/Transforms/SeparateConstOffsetFromGEP/AArch64/split-gep.ll +++ llvm/test/Transforms/SeparateConstOffsetFromGEP/AArch64/split-gep.ll @@ -1,4 +1,4 @@ -; RUN: llc < %s -O3 -mtriple=aarch64-linux-gnu -aarch64-enable-gep-opt | FileCheck %s +; RUN: llc < %s -O3 -mtriple=aarch64-linux-gnu -aarch64-enable-gep-opt -verify-scev -verify-scev-strict -verify-scev-maps | FileCheck %s %struct = type { i32, i32, i32 } Index: llvm/test/Transforms/SeparateConstOffsetFromGEP/AMDGPU/split-gep-and-gvn-addrspace-addressing-modes.ll =================================================================== --- llvm/test/Transforms/SeparateConstOffsetFromGEP/AMDGPU/split-gep-and-gvn-addrspace-addressing-modes.ll +++ llvm/test/Transforms/SeparateConstOffsetFromGEP/AMDGPU/split-gep-and-gvn-addrspace-addressing-modes.ll @@ -1,4 +1,4 @@ -; RUN: opt -mtriple=amdgcn-- -S -passes=separate-const-offset-from-gep,gvn -reassociate-geps-verify-no-dead-code < %s | FileCheck -check-prefix=IR %s +; RUN: opt -verify-scev -verify-scev-strict -verify-scev-maps -mtriple=amdgcn-- -S -passes=separate-const-offset-from-gep,gvn -reassociate-geps-verify-no-dead-code < %s | FileCheck -check-prefix=IR %s target datalayout = "e-p:32:32-p1:64:64-p2:64:64-p3:32:32-p4:64:64-p5:32:32-p24:64:64-i64:64-v16:16-v24:32-v32:32-v48:64-v96:128-v192:256-v256:256-v512:512-v1024:1024-v2048:2048-n32:64" Index: llvm/test/Transforms/SeparateConstOffsetFromGEP/AMDGPU/split-gep.ll =================================================================== --- llvm/test/Transforms/SeparateConstOffsetFromGEP/AMDGPU/split-gep.ll +++ llvm/test/Transforms/SeparateConstOffsetFromGEP/AMDGPU/split-gep.ll @@ -1,5 +1,5 @@ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py -; RUN: opt < %s -mtriple=amdgcn-amd-amdhsa -passes=separate-const-offset-from-gep \ +; RUN: opt < %s -mtriple=amdgcn-amd-amdhsa -verify-scev -verify-scev-strict -verify-scev-maps -passes=separate-const-offset-from-gep \ ; RUN: -reassociate-geps-verify-no-dead-code -S | FileCheck %s %struct.Packed = type <{ [3 x i32], [8 x i64] }> ; <> means packed Index: llvm/test/Transforms/SeparateConstOffsetFromGEP/NVPTX/split-gep-and-gvn.ll =================================================================== --- llvm/test/Transforms/SeparateConstOffsetFromGEP/NVPTX/split-gep-and-gvn.ll +++ llvm/test/Transforms/SeparateConstOffsetFromGEP/NVPTX/split-gep-and-gvn.ll @@ -2,6 +2,7 @@ ; RUN: | FileCheck %s --check-prefix=PTX ; RUN: opt < %s -mtriple=nvptx64-nvidia-cuda -S -passes=separate-const-offset-from-gep,gvn \ ; RUN: -reassociate-geps-verify-no-dead-code \ +; RUN: -verify-scev -verify-scev-strict -verify-scev-maps \ ; RUN: | FileCheck %s --check-prefix=IR ; Verifies the SeparateConstOffsetFromGEP pass. Index: llvm/test/Transforms/SeparateConstOffsetFromGEP/NVPTX/split-gep.ll =================================================================== --- llvm/test/Transforms/SeparateConstOffsetFromGEP/NVPTX/split-gep.ll +++ llvm/test/Transforms/SeparateConstOffsetFromGEP/NVPTX/split-gep.ll @@ -1,5 +1,6 @@ ; RUN: opt < %s -mtriple=nvptx64-nvidia-cuda -passes=separate-const-offset-from-gep \ -; RUN: -reassociate-geps-verify-no-dead-code -S | FileCheck %s +; RUN: -verify-scev -verify-scev-strict -verify-scev-maps \ +; RUN: -reassociate-geps-verify-no-dead-code -S | FileCheck %s ; Several unit tests for separate-const-offset-from-gep. The transformation ; heavily relies on TargetTransformInfo, so we put these tests under Index: llvm/test/Transforms/SeparateConstOffsetFromGEP/RISCV/split-gep.ll =================================================================== --- llvm/test/Transforms/SeparateConstOffsetFromGEP/RISCV/split-gep.ll +++ llvm/test/Transforms/SeparateConstOffsetFromGEP/RISCV/split-gep.ll @@ -1,5 +1,6 @@ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py ; RUN: opt < %s -mtriple=riscv64-unknown-elf -passes='separate-const-offset-from-gep,early-cse' \ +; RUN: -verify-scev -verify-scev-strict -verify-scev-maps \ ; RUN: -S | FileCheck %s ; Several tests for separate-const-offset-from-gep. The transformation Index: llvm/test/Transforms/SeparateConstOffsetFromGEP/crash-in-unreachable-code.ll =================================================================== --- llvm/test/Transforms/SeparateConstOffsetFromGEP/crash-in-unreachable-code.ll +++ llvm/test/Transforms/SeparateConstOffsetFromGEP/crash-in-unreachable-code.ll @@ -1,4 +1,4 @@ -; RUN: opt -mtriple=amdgcn-amd-amdhsa -passes=separate-const-offset-from-gep %s +; RUN: opt -mtriple=amdgcn-amd-amdhsa -passes=separate-const-offset-from-gep -verify-scev -verify-scev-strict -verify-scev-maps -verify-scev-maps %s @gv = external local_unnamed_addr addrspace(3) global [16 x i8], align 16 Index: llvm/test/Transforms/SeparateConstOffsetFromGEP/pointer-type-not-offset-type.ll =================================================================== --- llvm/test/Transforms/SeparateConstOffsetFromGEP/pointer-type-not-offset-type.ll +++ llvm/test/Transforms/SeparateConstOffsetFromGEP/pointer-type-not-offset-type.ll @@ -1,5 +1,5 @@ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py -; RUN: opt < %s -passes=separate-const-offset-from-gep -S | FileCheck %s +; RUN: opt < %s -passes=separate-const-offset-from-gep -S -verify-scev -verify-scev-strict -verify-scev-maps -verify-scev-maps | FileCheck %s target datalayout = "p0:64:64:64-p1:128:128:128:32" define void @should_be_trunc(ptr addrspace(1) %ptr, i64 %index, ptr %result) { Index: llvm/test/Transforms/SeparateConstOffsetFromGEP/pr45371-find-either-reset.ll =================================================================== --- llvm/test/Transforms/SeparateConstOffsetFromGEP/pr45371-find-either-reset.ll +++ llvm/test/Transforms/SeparateConstOffsetFromGEP/pr45371-find-either-reset.ll @@ -1,5 +1,5 @@ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py -; RUN: opt -S -passes=separate-const-offset-from-gep < %s | FileCheck %s +; RUN: opt -S -passes=separate-const-offset-from-gep -verify-scev -verify-scev-strict -verify-scev-maps -verify-scev-maps < %s | FileCheck %s @e = external global [4000 x i8], align 1 Index: llvm/test/Transforms/SeparateConstOffsetFromGEP/pr62379-zeroext-negative.ll =================================================================== --- llvm/test/Transforms/SeparateConstOffsetFromGEP/pr62379-zeroext-negative.ll +++ llvm/test/Transforms/SeparateConstOffsetFromGEP/pr62379-zeroext-negative.ll @@ -1,5 +1,5 @@ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py UTC_ARGS: --version 2 -; RUN: opt -S '-passes=separate-const-offset-from-gep' < %s | FileCheck %s +; RUN: opt -S '-passes=separate-const-offset-from-gep' -verify-scev -verify-scev-strict -verify-scev-maps -verify-scev-maps < %s | FileCheck %s ; These tests check that this pass does not incorrectly handle negative offsets. Index: llvm/test/Transforms/SeparateConstOffsetFromGEP/split-gep-sub.ll =================================================================== --- llvm/test/Transforms/SeparateConstOffsetFromGEP/split-gep-sub.ll +++ llvm/test/Transforms/SeparateConstOffsetFromGEP/split-gep-sub.ll @@ -1,5 +1,5 @@ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py -; RUN: opt -S -passes="separate-const-offset-from-gep" < %s | FileCheck %s +; RUN: opt -S -passes="separate-const-offset-from-gep" -verify-scev -verify-scev-strict -verify-scev-maps -verify-scev-maps < %s | FileCheck %s ; Check that GEP with an index 'A - B + [ConstantInt]' will be split into two ; GEPs. eg. Index: llvm/test/Transforms/SeparateConstOffsetFromGEP/test-add-sub-separation.ll =================================================================== --- llvm/test/Transforms/SeparateConstOffsetFromGEP/test-add-sub-separation.ll +++ llvm/test/Transforms/SeparateConstOffsetFromGEP/test-add-sub-separation.ll @@ -1,5 +1,5 @@ ; NOTE: Assertions have been autogenerated by utils/update_test_checks.py -; RUN: opt -S -passes=separate-const-offset-from-gep < %s | FileCheck %s +; RUN: opt -S -passes=separate-const-offset-from-gep -verify-scev -verify-scev-strict -verify-scev-maps -verify-scev-maps < %s | FileCheck %s define void @matchingExtensions(ptr %ap, ptr %bp, ptr %result) { ; CHECK-LABEL: @matchingExtensions(