[llvm] e94698b - [AMDGPU][GISel][NPM] Complete Global ISel pipeline (#222552)
via llvm-commits
llvm-commits at lists.llvm.org
Wed Sep 16 01:14:06 PDT 2026
Author: Vikram Hegde
Date: 2026-09-16T13:44:00+05:30
New Revision: e94698b83a74e6ee40438898b17bc49cbd47fcf5
URL: https://github.com/llvm/llvm-project/commit/e94698b83a74e6ee40438898b17bc49cbd47fcf5
DIFF: https://github.com/llvm/llvm-project/commit/e94698b83a74e6ee40438898b17bc49cbd47fcf5.diff
LOG: [AMDGPU][GISel][NPM] Complete Global ISel pipeline (#222552)
Added:
Modified:
llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp
llvm/test/CodeGen/AMDGPU/llc-pipeline-npm.ll
Removed:
################################################################################
diff --git a/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp b/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp
index b8a1e4a656fd8..fc567e0f306ed 100644
--- a/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp
+++ b/llvm/lib/Target/AMDGPU/AMDGPUTargetMachine.cpp
@@ -168,6 +168,13 @@ class AMDGPUCodeGenPassBuilder : public CodeGenPassBuilder {
void addAsmPrinter(PassManagerWrapper &PMW) override;
void addAsmPrinterEnd(PassManagerWrapper &PMW) override;
Error addInstSelector(PassManagerWrapper &PMW) override;
+ Error addIRTranslator(PassManagerWrapper &PMW) override;
+ void addPreLegalizeMachineIR(PassManagerWrapper &PMW) override;
+ Error addLegalizeMachineIR(PassManagerWrapper &PMW) override;
+ void addPreRegBankSelect(PassManagerWrapper &PMW) override;
+ Error addRegBankSelect(PassManagerWrapper &PMW) override;
+ void addPreGlobalInstructionSelect(PassManagerWrapper &PMW) override;
+ Error addGlobalInstructionSelect(PassManagerWrapper &PMW) override;
void addPreRewrite(PassManagerWrapper &PMW) override;
void addMachineSSAOptimization(PassManagerWrapper &PMW) override;
void addPostRegAlloc(PassManagerWrapper &PMW) override;
@@ -2534,6 +2541,45 @@ Error AMDGPUCodeGenPassBuilder::addInstSelector(PassManagerWrapper &PMW) {
return Error::success();
}
+Error AMDGPUCodeGenPassBuilder::addIRTranslator(PassManagerWrapper &PMW) {
+ addMachineFunctionPass(IRTranslatorPass(getOptLevel()), PMW);
+ return Error::success();
+}
+
+void AMDGPUCodeGenPassBuilder::addPreLegalizeMachineIR(
+ PassManagerWrapper &PMW) {
+ addMachineFunctionPass(AMDGPUPreLegalizerCombinerPass(), PMW);
+ addMachineFunctionPass(LocalizerPass(), PMW);
+}
+
+Error AMDGPUCodeGenPassBuilder::addLegalizeMachineIR(PassManagerWrapper &PMW) {
+ addMachineFunctionPass(LegalizerPass(), PMW);
+ return Error::success();
+}
+
+void AMDGPUCodeGenPassBuilder::addPreRegBankSelect(PassManagerWrapper &PMW) {
+ addMachineFunctionPass(AMDGPUPostLegalizerCombinerPass(), PMW);
+ addMachineFunctionPass(AMDGPUGlobalISelDivergenceLoweringPass(), PMW);
+}
+
+Error AMDGPUCodeGenPassBuilder::addRegBankSelect(PassManagerWrapper &PMW) {
+ addMachineFunctionPass(AMDGPURegBankSelectPass(), PMW);
+ addMachineFunctionPass(AMDGPURegBankLegalizePass(), PMW);
+ return Error::success();
+}
+
+void AMDGPUCodeGenPassBuilder::addPreGlobalInstructionSelect(
+ PassManagerWrapper &PMW) {
+ bool IsOptLevelNone = getOptLevel() == CodeGenOptLevel::None;
+ addMachineFunctionPass(AMDGPURegBankCombinerPass(IsOptLevelNone), PMW);
+}
+
+Error AMDGPUCodeGenPassBuilder::addGlobalInstructionSelect(
+ PassManagerWrapper &PMW) {
+ addMachineFunctionPass(InstructionSelectPass(getOptLevel()), PMW);
+ return Error::success();
+}
+
void AMDGPUCodeGenPassBuilder::addPreRewrite(PassManagerWrapper &PMW) {
if (EnableRegReassign) {
addMachineFunctionPass(GCNNSAReassignPass(), PMW);
diff --git a/llvm/test/CodeGen/AMDGPU/llc-pipeline-npm.ll b/llvm/test/CodeGen/AMDGPU/llc-pipeline-npm.ll
index 89f72e559ba52..e41b8ec122b5b 100644
--- a/llvm/test/CodeGen/AMDGPU/llc-pipeline-npm.ll
+++ b/llvm/test/CodeGen/AMDGPU/llc-pipeline-npm.ll
@@ -1,484 +1,987 @@
-; RUN: llc -enable-new-pm -mtriple=amdgpu7.00--amdhsa -O0 -print-pipeline-passes=tree < %s 2>&1 \
-; RUN: | FileCheck -check-prefix=GCN-O0 %s
+; RUN: llc -enable-new-pm -mtriple=amdgpu7.00--amdhsa -O0 -global-isel=0 -print-pipeline-passes=tree < %s 2>&1 \
+; RUN: | FileCheck -check-prefix=GCN-O0-SDAG %s
-; RUN: llc -enable-new-pm -mtriple=amdgpu7.00--amdhsa -print-pipeline-passes=tree < %s 2>&1 \
-; RUN: | FileCheck -check-prefix=GCN-O2 %s
+; RUN: llc -enable-new-pm -mtriple=amdgpu7.00--amdhsa -O0 -global-isel=1 -print-pipeline-passes=tree < %s 2>&1 \
+; RUN: | FileCheck -check-prefix=GCN-O0-GISEL %s
-; RUN: llc -O3 -enable-new-pm -mtriple=amdgpu7.00--amdhsa -print-pipeline-passes=tree < %s 2>&1 \
-; RUN: | FileCheck -check-prefix=GCN-O3 %s
+; RUN: llc -enable-new-pm -mtriple=amdgpu7.00--amdhsa -global-isel=0 -print-pipeline-passes=tree < %s 2>&1 \
+; RUN: | FileCheck -check-prefix=GCN-O2-SDAG %s
-; GCN-O0: require<MachineModuleAnalysis>
-; GCN-O0-NEXT: require<profile-summary>
-; GCN-O0-NEXT: require<collector-metadata>
-; GCN-O0-NEXT: require<runtime-libcall-info>
-; GCN-O0-NEXT: require<libcall-lowering-info>
-; GCN-O0-NEXT: pre-isel-intrinsic-lowering
-; GCN-O0-NEXT: function
-; GCN-O0-NEXT: expand-ir-insts<O0>
-; GCN-O0-NEXT: amdgpu-remove-incompatible-functions
-; GCN-O0-NEXT: amdgpu-printf-runtime-binding
-; GCN-O0-NEXT: amdgpu-lower-ctor-dtor
-; GCN-O0-NEXT: function
-; GCN-O0-NEXT: amdgpu-uniform-intrinsic-combine
-; GCN-O0-NEXT: expand-variadics
-; GCN-O0-NEXT: amdgpu-always-inline
-; GCN-O0-NEXT: always-inline
-; GCN-O0-NEXT: amdgpu-export-kernel-runtime-handles
-; GCN-O0-NEXT: amdgpu-lower-exec-sync
-; GCN-O0-NEXT: amdgpu-sw-lower-lds
-; GCN-O0-NEXT: amdgpu-lower-module-lds
-; GCN-O0-NEXT: function
-; GCN-O0-NEXT: atomic-expand
-; GCN-O0-NEXT: verify
-; GCN-O0-NEXT: unreachableblockelim
-; GCN-O0-NEXT: ee-instrument<post-inline>
-; GCN-O0-NEXT: scalarize-masked-mem-intrin
-; GCN-O0-NEXT: expand-reductions
-; GCN-O0-NEXT: amdgpu-lower-kernel-arguments
-; GCN-O0-NEXT: amdgpu-lower-buffer-fat-pointers
-; GCN-O0-NEXT: amdgpu-lower-intrinsics
-; GCN-O0-NEXT: cgscc
-; GCN-O0-NEXT: function
-; GCN-O0-NEXT: lower-switch
-; GCN-O0-NEXT: lower-invoke
-; GCN-O0-NEXT: unreachableblockelim
-; GCN-O0-NEXT: amdgpu-unify-divergent-exit-nodes
-; GCN-O0-NEXT: fix-irreducible
-; GCN-O0-NEXT: unify-loop-exits
-; GCN-O0-NEXT: StructurizeCFGPass
-; GCN-O0-NEXT: amdgpu-annotate-uniform
-; GCN-O0-NEXT: si-annotate-control-flow
-; GCN-O0-NEXT: amdgpu-rewrite-undef-for-phi
-; GCN-O0-NEXT: lcssa
-; GCN-O0-NEXT: inline-asm-prepare
-; GCN-O0-NEXT: safe-stack
-; GCN-O0-NEXT: stack-protector
-; GCN-O0-NEXT: verify
-; GCN-O0-NEXT: amdgpu-asm-printer-begin
-; GCN-O0-NEXT: cgscc
-; GCN-O0-NEXT: function
-; GCN-O0-NEXT: machine-function
-; GCN-O0-NEXT: amdgpu-isel
-; GCN-O0-NEXT: si-fix-sgpr-copies
-; GCN-O0-NEXT: si-i1-copies
-; GCN-O0-NEXT: finalize-isel
-; GCN-O0-NEXT: localstackalloc
-; GCN-O0-NEXT: require<reg-usage>
-; GCN-O0-NEXT: cgscc
-; GCN-O0-NEXT: function
-; GCN-O0-NEXT: machine-function
-; GCN-O0-NEXT: reg-usage-propagation
-; GCN-O0-NEXT: phi-node-elimination
-; GCN-O0-NEXT: si-lower-control-flow
-; GCN-O0-NEXT: two-address-instruction
-; GCN-O0-NEXT: si-wqm
-; GCN-O0-NEXT: amdgpu-pre-ra-long-branch-reg
-; GCN-O0-NEXT: regallocfast<filter=sgpr;no-clear-vregs>
-; GCN-O0-NEXT: si-lower-sgpr-spills
-; GCN-O0-NEXT: si-pre-allocate-wwm-regs
-; GCN-O0-NEXT: regallocfast<filter=wwm;no-clear-vregs>
-; GCN-O0-NEXT: si-lower-wwm-copies
-; GCN-O0-NEXT: amdgpu-reserve-wwm-regs
-; GCN-O0-NEXT: regallocfast<filter=vgpr>
-; GCN-O0-NEXT: si-fix-vgpr-copies
-; GCN-O0-NEXT: remove-redundant-debug-values
-; GCN-O0-NEXT: fixup-statepoint-caller-saved
-; GCN-O0-NEXT: prolog-epilog
-; GCN-O0-NEXT: post-ra-pseudos
-; GCN-O0-NEXT: si-post-ra-bundler
-; GCN-O0-NEXT: fentry-insert
-; GCN-O0-NEXT: xray-instrumentation
-; GCN-O0-NEXT: si-memory-legalizer
-; GCN-O0-NEXT: si-insert-waitcnts
-; GCN-O0-NEXT: si-mode-register
-; GCN-O0-NEXT: si-late-branch-lowering
-; GCN-O0-NEXT: post-RA-hazard-rec
-; GCN-O0-NEXT: amdgpu-wait-sgpr-hazards
-; GCN-O0-NEXT: amdgpu-lower-vgpr-encoding
-; GCN-O0-NEXT: branch-relaxation
-; GCN-O0-NEXT: reg-usage-collector
-; GCN-O0-NEXT: remove-loads-into-fake-uses
-; GCN-O0-NEXT: live-debug-values
-; GCN-O0-NEXT: machine-sanmd
-; GCN-O0-NEXT: amdgpu-preload-kern-arg-prolog
-; GCN-O0-NEXT: stack-frame-layout
-; GCN-O0-NEXT: amdgpu-asm-printer
-; GCN-O0-NEXT: free-machine-function
-; GCN-O0-NEXT: amdgpu-asm-printer-end
+; RUN: llc -enable-new-pm -mtriple=amdgpu7.00--amdhsa -global-isel=1 -print-pipeline-passes=tree < %s 2>&1 \
+; RUN: | FileCheck -check-prefix=GCN-O2-GISEL %s
-; GCN-O2: require<MachineModuleAnalysis>
-; GCN-O2-NEXT: require<profile-summary>
-; GCN-O2-NEXT: require<collector-metadata>
-; GCN-O2-NEXT: require<runtime-libcall-info>
-; GCN-O2-NEXT: require<libcall-lowering-info>
-; GCN-O2-NEXT: function
-; GCN-O2-NEXT: objc-arc-contract
-; GCN-O2-NEXT: pre-isel-intrinsic-lowering
-; GCN-O2-NEXT: function
-; GCN-O2-NEXT: expand-ir-insts<O2>
-; GCN-O2-NEXT: amdgpu-remove-incompatible-functions
-; GCN-O2-NEXT: amdgpu-printf-runtime-binding
-; GCN-O2-NEXT: amdgpu-lower-ctor-dtor
-; GCN-O2-NEXT: function
-; GCN-O2-NEXT: amdgpu-image-intrinsic-opt
-; GCN-O2-NEXT: amdgpu-uniform-intrinsic-combine
-; GCN-O2-NEXT: expand-variadics
-; GCN-O2-NEXT: amdgpu-always-inline
-; GCN-O2-NEXT: always-inline
-; GCN-O2-NEXT: amdgpu-export-kernel-runtime-handles
-; GCN-O2-NEXT: amdgpu-lower-exec-sync
-; GCN-O2-NEXT: amdgpu-sw-lower-lds
-; GCN-O2-NEXT: amdgpu-lower-module-lds
-; GCN-O2-NEXT: function
-; GCN-O2-NEXT: amdgpu-atomic-optimizer
-; GCN-O2-NEXT: atomic-expand
-; GCN-O2-NEXT: amdgpu-promote-alloca
-; GCN-O2-NEXT: separate-const-offset-from-gep<>
-; GCN-O2-NEXT: slsr
-; GCN-O2-NEXT: early-cse<>
-; GCN-O2-NEXT: nary-reassociate
-; GCN-O2-NEXT: early-cse<>
-; GCN-O2-NEXT: amdgpu-codegenprepare
-; GCN-O2-NEXT: loop-mssa
-; GCN-O2-NEXT: licm<allowspeculation>
-; GCN-O2-NEXT: verify
-; GCN-O2-NEXT: loop
-; GCN-O2-NEXT: canon-freeze
-; GCN-O2-NEXT: loop-reduce
-; GCN-O2-NEXT: unreachableblockelim
-; GCN-O2-NEXT: consthoist
-; GCN-O2-NEXT: replace-with-veclib
-; GCN-O2-NEXT: partially-inline-libcalls
-; GCN-O2-NEXT: ee-instrument<post-inline>
-; GCN-O2-NEXT: scalarize-masked-mem-intrin
-; GCN-O2-NEXT: expand-reductions
-; GCN-O2-NEXT: early-cse<>
-; GCN-O2-NEXT: amdgpu-preload-kernel-arguments
-; GCN-O2-NEXT: function
-; GCN-O2-NEXT: amdgpu-lower-kernel-arguments
-; GCN-O2-NEXT: codegenprepare
-; GCN-O2-NEXT: load-store-vectorizer
-; GCN-O2-NEXT: amdgpu-lower-buffer-fat-pointers
-; GCN-O2-NEXT: amdgpu-lower-intrinsics
-; GCN-O2-NEXT: cgscc
-; GCN-O2-NEXT: function
-; GCN-O2-NEXT: lower-switch
-; GCN-O2-NEXT: lower-invoke
-; GCN-O2-NEXT: unreachableblockelim
-; GCN-O2-NEXT: flatten-cfg
-; GCN-O2-NEXT: sink
-; GCN-O2-NEXT: amdgpu-late-codegenprepare
-; GCN-O2-NEXT: amdgpu-unify-divergent-exit-nodes
-; GCN-O2-NEXT: fix-irreducible
-; GCN-O2-NEXT: unify-loop-exits
-; GCN-O2-NEXT: StructurizeCFGPass
-; GCN-O2-NEXT: amdgpu-annotate-uniform
-; GCN-O2-NEXT: si-annotate-control-flow
-; GCN-O2-NEXT: amdgpu-rewrite-undef-for-phi
-; GCN-O2-NEXT: lcssa
-; GCN-O2-NEXT: amdgpu-perf-hint
-; GCN-O2-NEXT: cgscc
-; GCN-O2-NEXT: function
-; GCN-O2-NEXT: inline-asm-prepare
-; GCN-O2-NEXT: safe-stack
-; GCN-O2-NEXT: stack-protector
-; GCN-O2-NEXT: verify
-; GCN-O2-NEXT: amdgpu-asm-printer-begin
-; GCN-O2-NEXT: cgscc
-; GCN-O2-NEXT: function
-; GCN-O2-NEXT: machine-function
-; GCN-O2-NEXT: amdgpu-isel
-; GCN-O2-NEXT: si-fix-sgpr-copies
-; GCN-O2-NEXT: si-i1-copies
-; GCN-O2-NEXT: finalize-isel
-; GCN-O2-NEXT: early-tailduplication
-; GCN-O2-NEXT: opt-phis
-; GCN-O2-NEXT: stack-coloring
-; GCN-O2-NEXT: localstackalloc
-; GCN-O2-NEXT: dead-mi-elimination
-; GCN-O2-NEXT: early-machinelicm
-; GCN-O2-NEXT: machine-cse
-; GCN-O2-NEXT: machine-sink
-; GCN-O2-NEXT: peephole-opt
-; GCN-O2-NEXT: dead-mi-elimination
-; GCN-O2-NEXT: si-fold-operands
-; GCN-O2-NEXT: gcn-dpp-combine
-; GCN-O2-NEXT: si-load-store-opt
-; GCN-O2-NEXT: si-peephole-sdwa
-; GCN-O2-NEXT: early-machinelicm
-; GCN-O2-NEXT: machine-cse
-; GCN-O2-NEXT: si-fold-operands
-; GCN-O2-NEXT: dead-mi-elimination
-; GCN-O2-NEXT: si-shrink-instructions
-; GCN-O2-NEXT: require<reg-usage>
-; GCN-O2-NEXT: cgscc
-; GCN-O2-NEXT: function
-; GCN-O2-NEXT: machine-function
-; GCN-O2-NEXT: reg-usage-propagation
-; GCN-O2-NEXT: amdgpu-prepare-agpr-alloc
-; GCN-O2-NEXT: detect-dead-lanes
-; GCN-O2-NEXT: dead-mi-elimination
-; GCN-O2-NEXT: init-undef
-; GCN-O2-NEXT: process-imp-defs
-; GCN-O2-NEXT: unreachable-mbb-elimination
-; GCN-O2-NEXT: require<live-vars>
-; GCN-O2-NEXT: si-opt-vgpr-liverange
-; GCN-O2-NEXT: require<machine-loops>
-; GCN-O2-NEXT: phi-node-elimination
-; GCN-O2-NEXT: si-lower-control-flow
-; GCN-O2-NEXT: two-address-instruction
-; GCN-O2-NEXT: register-coalescer
-; GCN-O2-NEXT: rename-independent-subregs
-; GCN-O2-NEXT: amdgpu-rewrite-partial-reg-uses
-; GCN-O2-NEXT: machine-scheduler
-; GCN-O2-NEXT: amdgpu-pre-ra-optimizations
-; GCN-O2-NEXT: si-wqm
-; GCN-O2-NEXT: si-optimize-exec-masking-pre-ra
-; GCN-O2-NEXT: si-form-memory-clauses
-; GCN-O2-NEXT: amdgpu-pre-ra-long-branch-reg
-; GCN-O2-NEXT: greedy<sgpr>
-; GCN-O2-NEXT: virt-reg-rewriter<no-clear-vregs>
-; GCN-O2-NEXT: stack-slot-coloring
-; GCN-O2-NEXT: si-lower-sgpr-spills
-; GCN-O2-NEXT: si-pre-allocate-wwm-regs
-; GCN-O2-NEXT: greedy<wwm>
-; GCN-O2-NEXT: si-lower-wwm-copies
-; GCN-O2-NEXT: virt-reg-rewriter<no-clear-vregs>
-; GCN-O2-NEXT: amdgpu-reserve-wwm-regs
-; GCN-O2-NEXT: greedy<vgpr>
-; GCN-O2-NEXT: amdgpu-nsa-reassign
-; GCN-O2-NEXT: amdgpu-rewrite-agpr-copy-mfma
-; GCN-O2-NEXT: virt-reg-rewriter
-; GCN-O2-NEXT: amdgpu-mark-last-scratch-load
-; GCN-O2-NEXT: stack-slot-coloring
-; GCN-O2-NEXT: machine-cp
-; GCN-O2-NEXT: machinelicm
-; GCN-O2-NEXT: si-fix-vgpr-copies
-; GCN-O2-NEXT: si-optimize-exec-masking
-; GCN-O2-NEXT: remove-redundant-debug-values
-; GCN-O2-NEXT: fixup-statepoint-caller-saved
-; GCN-O2-NEXT: postra-machine-sink
-; GCN-O2-NEXT: shrink-wrap
-; GCN-O2-NEXT: prolog-epilog
-; GCN-O2-NEXT: machine-latecleanup
-; GCN-O2-NEXT: branch-folder
-; GCN-O2-NEXT: tailduplication
-; GCN-O2-NEXT: machine-cp
-; GCN-O2-NEXT: post-ra-pseudos
-; GCN-O2-NEXT: si-shrink-instructions
-; GCN-O2-NEXT: si-post-ra-bundler
-; GCN-O2-NEXT: postmisched
-; GCN-O2-NEXT: block-placement
-; GCN-O2-NEXT: fentry-insert
-; GCN-O2-NEXT: xray-instrumentation
-; GCN-O2-NEXT: gcn-create-vopd
-; GCN-O2-NEXT: si-memory-legalizer
-; GCN-O2-NEXT: si-insert-waitcnts
-; GCN-O2-NEXT: si-mode-register
-; GCN-O2-NEXT: si-insert-hard-clauses
-; GCN-O2-NEXT: si-late-branch-lowering
-; GCN-O2-NEXT: si-pre-emit-peephole
-; GCN-O2-NEXT: post-RA-hazard-rec
-; GCN-O2-NEXT: amdgpu-wait-sgpr-hazards
-; GCN-O2-NEXT: amdgpu-lower-vgpr-encoding
-; GCN-O2-NEXT: amdgpu-insert-delay-alu
-; GCN-O2-NEXT: branch-relaxation
-; GCN-O2-NEXT: reg-usage-collector
-; GCN-O2-NEXT: remove-loads-into-fake-uses
-; GCN-O2-NEXT: live-debug-values
-; GCN-O2-NEXT: machine-sanmd
-; GCN-O2-NEXT: amdgpu-preload-kern-arg-prolog
-; GCN-O2-NEXT: stack-frame-layout
-; GCN-O2-NEXT: amdgpu-asm-printer
-; GCN-O2-NEXT: free-machine-function
-; GCN-O2-NEXT: amdgpu-asm-printer-end
+; RUN: llc -O3 -enable-new-pm -mtriple=amdgpu7.00--amdhsa -global-isel=0 -print-pipeline-passes=tree < %s 2>&1 \
+; RUN: | FileCheck -check-prefix=GCN-O3-SDAG %s
-; GCN-O3: require<MachineModuleAnalysis>
-; GCN-O3-NEXT: require<profile-summary>
-; GCN-O3-NEXT: require<collector-metadata>
-; GCN-O3-NEXT: require<runtime-libcall-info>
-; GCN-O3-NEXT: require<libcall-lowering-info>
-; GCN-O3-NEXT: function
-; GCN-O3-NEXT: objc-arc-contract
-; GCN-O3-NEXT: pre-isel-intrinsic-lowering
-; GCN-O3-NEXT: function
-; GCN-O3-NEXT: expand-ir-insts<O3>
-; GCN-O3-NEXT: amdgpu-remove-incompatible-functions
-; GCN-O3-NEXT: amdgpu-printf-runtime-binding
-; GCN-O3-NEXT: amdgpu-lower-ctor-dtor
-; GCN-O3-NEXT: function
-; GCN-O3-NEXT: amdgpu-image-intrinsic-opt
-; GCN-O3-NEXT: amdgpu-uniform-intrinsic-combine
-; GCN-O3-NEXT: expand-variadics
-; GCN-O3-NEXT: amdgpu-always-inline
-; GCN-O3-NEXT: always-inline
-; GCN-O3-NEXT: amdgpu-export-kernel-runtime-handles
-; GCN-O3-NEXT: amdgpu-lower-exec-sync
-; GCN-O3-NEXT: amdgpu-sw-lower-lds
-; GCN-O3-NEXT: amdgpu-lower-module-lds
-; GCN-O3-NEXT: function
-; GCN-O3-NEXT: amdgpu-atomic-optimizer
-; GCN-O3-NEXT: atomic-expand
-; GCN-O3-NEXT: amdgpu-promote-alloca
-; GCN-O3-NEXT: separate-const-offset-from-gep<>
-; GCN-O3-NEXT: slsr
-; GCN-O3-NEXT: gvn<>
-; GCN-O3-NEXT: nary-reassociate
-; GCN-O3-NEXT: early-cse<>
-; GCN-O3-NEXT: amdgpu-codegenprepare
-; GCN-O3-NEXT: loop-mssa
-; GCN-O3-NEXT: licm<allowspeculation>
-; GCN-O3-NEXT: verify
-; GCN-O3-NEXT: loop
-; GCN-O3-NEXT: canon-freeze
-; GCN-O3-NEXT: loop-reduce
-; GCN-O3-NEXT: unreachableblockelim
-; GCN-O3-NEXT: consthoist
-; GCN-O3-NEXT: replace-with-veclib
-; GCN-O3-NEXT: partially-inline-libcalls
-; GCN-O3-NEXT: ee-instrument<post-inline>
-; GCN-O3-NEXT: scalarize-masked-mem-intrin
-; GCN-O3-NEXT: expand-reductions
-; GCN-O3-NEXT: gvn<>
-; GCN-O3-NEXT: amdgpu-preload-kernel-arguments
-; GCN-O3-NEXT: function
-; GCN-O3-NEXT: amdgpu-lower-kernel-arguments
-; GCN-O3-NEXT: codegenprepare
-; GCN-O3-NEXT: load-store-vectorizer
-; GCN-O3-NEXT: amdgpu-lower-buffer-fat-pointers
-; GCN-O3-NEXT: amdgpu-lower-intrinsics
-; GCN-O3-NEXT: cgscc
-; GCN-O3-NEXT: function
-; GCN-O3-NEXT: lower-switch
-; GCN-O3-NEXT: lower-invoke
-; GCN-O3-NEXT: unreachableblockelim
-; GCN-O3-NEXT: flatten-cfg
-; GCN-O3-NEXT: sink
-; GCN-O3-NEXT: amdgpu-late-codegenprepare
-; GCN-O3-NEXT: amdgpu-unify-divergent-exit-nodes
-; GCN-O3-NEXT: fix-irreducible
-; GCN-O3-NEXT: unify-loop-exits
-; GCN-O3-NEXT: StructurizeCFGPass
-; GCN-O3-NEXT: amdgpu-annotate-uniform
-; GCN-O3-NEXT: si-annotate-control-flow
-; GCN-O3-NEXT: amdgpu-rewrite-undef-for-phi
-; GCN-O3-NEXT: lcssa
-; GCN-O3-NEXT: amdgpu-perf-hint
-; GCN-O3-NEXT: cgscc
-; GCN-O3-NEXT: function
-; GCN-O3-NEXT: inline-asm-prepare
-; GCN-O3-NEXT: safe-stack
-; GCN-O3-NEXT: stack-protector
-; GCN-O3-NEXT: verify
-; GCN-O3-NEXT: amdgpu-asm-printer-begin
-; GCN-O3-NEXT: cgscc
-; GCN-O3-NEXT: function
-; GCN-O3-NEXT: machine-function
-; GCN-O3-NEXT: amdgpu-isel
-; GCN-O3-NEXT: si-fix-sgpr-copies
-; GCN-O3-NEXT: si-i1-copies
-; GCN-O3-NEXT: finalize-isel
-; GCN-O3-NEXT: early-tailduplication
-; GCN-O3-NEXT: opt-phis
-; GCN-O3-NEXT: stack-coloring
-; GCN-O3-NEXT: localstackalloc
-; GCN-O3-NEXT: dead-mi-elimination
-; GCN-O3-NEXT: early-machinelicm
-; GCN-O3-NEXT: machine-cse
-; GCN-O3-NEXT: machine-sink
-; GCN-O3-NEXT: peephole-opt
-; GCN-O3-NEXT: dead-mi-elimination
-; GCN-O3-NEXT: si-fold-operands
-; GCN-O3-NEXT: gcn-dpp-combine
-; GCN-O3-NEXT: si-load-store-opt
-; GCN-O3-NEXT: si-peephole-sdwa
-; GCN-O3-NEXT: early-machinelicm
-; GCN-O3-NEXT: machine-cse
-; GCN-O3-NEXT: si-fold-operands
-; GCN-O3-NEXT: dead-mi-elimination
-; GCN-O3-NEXT: si-shrink-instructions
-; GCN-O3-NEXT: require<reg-usage>
-; GCN-O3-NEXT: cgscc
-; GCN-O3-NEXT: function
-; GCN-O3-NEXT: machine-function
-; GCN-O3-NEXT: reg-usage-propagation
-; GCN-O3-NEXT: amdgpu-prepare-agpr-alloc
-; GCN-O3-NEXT: detect-dead-lanes
-; GCN-O3-NEXT: dead-mi-elimination
-; GCN-O3-NEXT: init-undef
-; GCN-O3-NEXT: process-imp-defs
-; GCN-O3-NEXT: unreachable-mbb-elimination
-; GCN-O3-NEXT: require<live-vars>
-; GCN-O3-NEXT: si-opt-vgpr-liverange
-; GCN-O3-NEXT: require<machine-loops>
-; GCN-O3-NEXT: phi-node-elimination
-; GCN-O3-NEXT: si-lower-control-flow
-; GCN-O3-NEXT: two-address-instruction
-; GCN-O3-NEXT: register-coalescer
-; GCN-O3-NEXT: rename-independent-subregs
-; GCN-O3-NEXT: amdgpu-rewrite-partial-reg-uses
-; GCN-O3-NEXT: machine-scheduler
-; GCN-O3-NEXT: amdgpu-pre-ra-optimizations
-; GCN-O3-NEXT: si-wqm
-; GCN-O3-NEXT: si-optimize-exec-masking-pre-ra
-; GCN-O3-NEXT: si-form-memory-clauses
-; GCN-O3-NEXT: amdgpu-pre-ra-long-branch-reg
-; GCN-O3-NEXT: greedy<sgpr>
-; GCN-O3-NEXT: virt-reg-rewriter<no-clear-vregs>
-; GCN-O3-NEXT: stack-slot-coloring
-; GCN-O3-NEXT: si-lower-sgpr-spills
-; GCN-O3-NEXT: si-pre-allocate-wwm-regs
-; GCN-O3-NEXT: greedy<wwm>
-; GCN-O3-NEXT: si-lower-wwm-copies
-; GCN-O3-NEXT: virt-reg-rewriter<no-clear-vregs>
-; GCN-O3-NEXT: amdgpu-reserve-wwm-regs
-; GCN-O3-NEXT: greedy<vgpr>
-; GCN-O3-NEXT: amdgpu-nsa-reassign
-; GCN-O3-NEXT: amdgpu-rewrite-agpr-copy-mfma
-; GCN-O3-NEXT: virt-reg-rewriter
-; GCN-O3-NEXT: amdgpu-mark-last-scratch-load
-; GCN-O3-NEXT: stack-slot-coloring
-; GCN-O3-NEXT: machine-cp
-; GCN-O3-NEXT: machinelicm
-; GCN-O3-NEXT: si-fix-vgpr-copies
-; GCN-O3-NEXT: si-optimize-exec-masking
-; GCN-O3-NEXT: remove-redundant-debug-values
-; GCN-O3-NEXT: fixup-statepoint-caller-saved
-; GCN-O3-NEXT: postra-machine-sink
-; GCN-O3-NEXT: shrink-wrap
-; GCN-O3-NEXT: prolog-epilog
-; GCN-O3-NEXT: machine-latecleanup
-; GCN-O3-NEXT: branch-folder
-; GCN-O3-NEXT: tailduplication
-; GCN-O3-NEXT: machine-cp
-; GCN-O3-NEXT: post-ra-pseudos
-; GCN-O3-NEXT: si-shrink-instructions
-; GCN-O3-NEXT: si-post-ra-bundler
-; GCN-O3-NEXT: postmisched
-; GCN-O3-NEXT: block-placement
-; GCN-O3-NEXT: fentry-insert
-; GCN-O3-NEXT: xray-instrumentation
-; GCN-O3-NEXT: gcn-create-vopd
-; GCN-O3-NEXT: si-memory-legalizer
-; GCN-O3-NEXT: si-insert-waitcnts
-; GCN-O3-NEXT: si-mode-register
-; GCN-O3-NEXT: si-insert-hard-clauses
-; GCN-O3-NEXT: si-late-branch-lowering
-; GCN-O3-NEXT: si-pre-emit-peephole
-; GCN-O3-NEXT: post-RA-hazard-rec
-; GCN-O3-NEXT: amdgpu-wait-sgpr-hazards
-; GCN-O3-NEXT: amdgpu-lower-vgpr-encoding
-; GCN-O3-NEXT: amdgpu-insert-delay-alu
-; GCN-O3-NEXT: branch-relaxation
-; GCN-O3-NEXT: reg-usage-collector
-; GCN-O3-NEXT: remove-loads-into-fake-uses
-; GCN-O3-NEXT: live-debug-values
-; GCN-O3-NEXT: machine-sanmd
-; GCN-O3-NEXT: amdgpu-preload-kern-arg-prolog
-; GCN-O3-NEXT: stack-frame-layout
-; GCN-O3-NEXT: amdgpu-asm-printer
-; GCN-O3-NEXT: free-machine-function
-; GCN-O3-NEXT: amdgpu-asm-printer-end
+; RUN: llc -O3 -enable-new-pm -mtriple=amdgpu7.00--amdhsa -global-isel=1 -print-pipeline-passes=tree < %s 2>&1 \
+; RUN: | FileCheck -check-prefix=GCN-O3-GISEL %s
+
+; GCN-O0-SDAG: require<MachineModuleAnalysis>
+; GCN-O0-SDAG-NEXT: require<profile-summary>
+; GCN-O0-SDAG-NEXT: require<collector-metadata>
+; GCN-O0-SDAG-NEXT: require<runtime-libcall-info>
+; GCN-O0-SDAG-NEXT: require<libcall-lowering-info>
+; GCN-O0-SDAG-NEXT: pre-isel-intrinsic-lowering
+; GCN-O0-SDAG-NEXT: function
+; GCN-O0-SDAG-NEXT: expand-ir-insts<O0>
+; GCN-O0-SDAG-NEXT: amdgpu-remove-incompatible-functions
+; GCN-O0-SDAG-NEXT: amdgpu-printf-runtime-binding
+; GCN-O0-SDAG-NEXT: amdgpu-lower-ctor-dtor
+; GCN-O0-SDAG-NEXT: function
+; GCN-O0-SDAG-NEXT: amdgpu-uniform-intrinsic-combine
+; GCN-O0-SDAG-NEXT: expand-variadics
+; GCN-O0-SDAG-NEXT: amdgpu-always-inline
+; GCN-O0-SDAG-NEXT: always-inline
+; GCN-O0-SDAG-NEXT: amdgpu-export-kernel-runtime-handles
+; GCN-O0-SDAG-NEXT: amdgpu-lower-exec-sync
+; GCN-O0-SDAG-NEXT: amdgpu-sw-lower-lds
+; GCN-O0-SDAG-NEXT: amdgpu-lower-module-lds
+; GCN-O0-SDAG-NEXT: function
+; GCN-O0-SDAG-NEXT: atomic-expand
+; GCN-O0-SDAG-NEXT: verify
+; GCN-O0-SDAG-NEXT: unreachableblockelim
+; GCN-O0-SDAG-NEXT: ee-instrument<post-inline>
+; GCN-O0-SDAG-NEXT: scalarize-masked-mem-intrin
+; GCN-O0-SDAG-NEXT: expand-reductions
+; GCN-O0-SDAG-NEXT: amdgpu-lower-kernel-arguments
+; GCN-O0-SDAG-NEXT: amdgpu-lower-buffer-fat-pointers
+; GCN-O0-SDAG-NEXT: amdgpu-lower-intrinsics
+; GCN-O0-SDAG-NEXT: cgscc
+; GCN-O0-SDAG-NEXT: function
+; GCN-O0-SDAG-NEXT: lower-switch
+; GCN-O0-SDAG-NEXT: lower-invoke
+; GCN-O0-SDAG-NEXT: unreachableblockelim
+; GCN-O0-SDAG-NEXT: amdgpu-unify-divergent-exit-nodes
+; GCN-O0-SDAG-NEXT: fix-irreducible
+; GCN-O0-SDAG-NEXT: unify-loop-exits
+; GCN-O0-SDAG-NEXT: StructurizeCFGPass
+; GCN-O0-SDAG-NEXT: amdgpu-annotate-uniform
+; GCN-O0-SDAG-NEXT: si-annotate-control-flow
+; GCN-O0-SDAG-NEXT: amdgpu-rewrite-undef-for-phi
+; GCN-O0-SDAG-NEXT: lcssa
+; GCN-O0-SDAG-NEXT: inline-asm-prepare
+; GCN-O0-SDAG-NEXT: safe-stack
+; GCN-O0-SDAG-NEXT: stack-protector
+; GCN-O0-SDAG-NEXT: verify
+; GCN-O0-SDAG-NEXT: amdgpu-asm-printer-begin
+; GCN-O0-SDAG-NEXT: cgscc
+; GCN-O0-SDAG-NEXT: function
+; GCN-O0-SDAG-NEXT: machine-function
+; GCN-O0-SDAG-NEXT: amdgpu-isel
+; GCN-O0-SDAG-NEXT: si-fix-sgpr-copies
+; GCN-O0-SDAG-NEXT: si-i1-copies
+; GCN-O0-SDAG-NEXT: finalize-isel
+; GCN-O0-SDAG-NEXT: localstackalloc
+; GCN-O0-SDAG-NEXT: require<reg-usage>
+; GCN-O0-SDAG-NEXT: cgscc
+; GCN-O0-SDAG-NEXT: function
+; GCN-O0-SDAG-NEXT: machine-function
+; GCN-O0-SDAG-NEXT: reg-usage-propagation
+; GCN-O0-SDAG-NEXT: phi-node-elimination
+; GCN-O0-SDAG-NEXT: si-lower-control-flow
+; GCN-O0-SDAG-NEXT: two-address-instruction
+; GCN-O0-SDAG-NEXT: si-wqm
+; GCN-O0-SDAG-NEXT: amdgpu-pre-ra-long-branch-reg
+; GCN-O0-SDAG-NEXT: regallocfast<filter=sgpr;no-clear-vregs>
+; GCN-O0-SDAG-NEXT: si-lower-sgpr-spills
+; GCN-O0-SDAG-NEXT: si-pre-allocate-wwm-regs
+; GCN-O0-SDAG-NEXT: regallocfast<filter=wwm;no-clear-vregs>
+; GCN-O0-SDAG-NEXT: si-lower-wwm-copies
+; GCN-O0-SDAG-NEXT: amdgpu-reserve-wwm-regs
+; GCN-O0-SDAG-NEXT: regallocfast<filter=vgpr>
+; GCN-O0-SDAG-NEXT: si-fix-vgpr-copies
+; GCN-O0-SDAG-NEXT: remove-redundant-debug-values
+; GCN-O0-SDAG-NEXT: fixup-statepoint-caller-saved
+; GCN-O0-SDAG-NEXT: prolog-epilog
+; GCN-O0-SDAG-NEXT: post-ra-pseudos
+; GCN-O0-SDAG-NEXT: si-post-ra-bundler
+; GCN-O0-SDAG-NEXT: fentry-insert
+; GCN-O0-SDAG-NEXT: xray-instrumentation
+; GCN-O0-SDAG-NEXT: si-memory-legalizer
+; GCN-O0-SDAG-NEXT: si-insert-waitcnts
+; GCN-O0-SDAG-NEXT: si-mode-register
+; GCN-O0-SDAG-NEXT: si-late-branch-lowering
+; GCN-O0-SDAG-NEXT: post-RA-hazard-rec
+; GCN-O0-SDAG-NEXT: amdgpu-wait-sgpr-hazards
+; GCN-O0-SDAG-NEXT: amdgpu-lower-vgpr-encoding
+; GCN-O0-SDAG-NEXT: branch-relaxation
+; GCN-O0-SDAG-NEXT: reg-usage-collector
+; GCN-O0-SDAG-NEXT: remove-loads-into-fake-uses
+; GCN-O0-SDAG-NEXT: live-debug-values
+; GCN-O0-SDAG-NEXT: machine-sanmd
+; GCN-O0-SDAG-NEXT: amdgpu-preload-kern-arg-prolog
+; GCN-O0-SDAG-NEXT: stack-frame-layout
+; GCN-O0-SDAG-NEXT: amdgpu-asm-printer
+; GCN-O0-SDAG-NEXT: free-machine-function
+; GCN-O0-SDAG-NEXT: amdgpu-asm-printer-end
+
+; GCN-O0-GISEL: require<MachineModuleAnalysis>
+; GCN-O0-GISEL-NEXT: require<profile-summary>
+; GCN-O0-GISEL-NEXT: require<collector-metadata>
+; GCN-O0-GISEL-NEXT: require<runtime-libcall-info>
+; GCN-O0-GISEL-NEXT: require<libcall-lowering-info>
+; GCN-O0-GISEL-NEXT: pre-isel-intrinsic-lowering
+; GCN-O0-GISEL-NEXT: function
+; GCN-O0-GISEL-NEXT: expand-ir-insts<O0>
+; GCN-O0-GISEL-NEXT: amdgpu-remove-incompatible-functions
+; GCN-O0-GISEL-NEXT: amdgpu-printf-runtime-binding
+; GCN-O0-GISEL-NEXT: amdgpu-lower-ctor-dtor
+; GCN-O0-GISEL-NEXT: function
+; GCN-O0-GISEL-NEXT: amdgpu-uniform-intrinsic-combine
+; GCN-O0-GISEL-NEXT: expand-variadics
+; GCN-O0-GISEL-NEXT: amdgpu-always-inline
+; GCN-O0-GISEL-NEXT: always-inline
+; GCN-O0-GISEL-NEXT: amdgpu-export-kernel-runtime-handles
+; GCN-O0-GISEL-NEXT: amdgpu-lower-exec-sync
+; GCN-O0-GISEL-NEXT: amdgpu-sw-lower-lds
+; GCN-O0-GISEL-NEXT: amdgpu-lower-module-lds
+; GCN-O0-GISEL-NEXT: function
+; GCN-O0-GISEL-NEXT: atomic-expand
+; GCN-O0-GISEL-NEXT: verify
+; GCN-O0-GISEL-NEXT: unreachableblockelim
+; GCN-O0-GISEL-NEXT: ee-instrument<post-inline>
+; GCN-O0-GISEL-NEXT: scalarize-masked-mem-intrin
+; GCN-O0-GISEL-NEXT: expand-reductions
+; GCN-O0-GISEL-NEXT: amdgpu-lower-kernel-arguments
+; GCN-O0-GISEL-NEXT: amdgpu-lower-buffer-fat-pointers
+; GCN-O0-GISEL-NEXT: amdgpu-lower-intrinsics
+; GCN-O0-GISEL-NEXT: cgscc
+; GCN-O0-GISEL-NEXT: function
+; GCN-O0-GISEL-NEXT: lower-switch
+; GCN-O0-GISEL-NEXT: lower-invoke
+; GCN-O0-GISEL-NEXT: unreachableblockelim
+; GCN-O0-GISEL-NEXT: amdgpu-unify-divergent-exit-nodes
+; GCN-O0-GISEL-NEXT: fix-irreducible
+; GCN-O0-GISEL-NEXT: unify-loop-exits
+; GCN-O0-GISEL-NEXT: StructurizeCFGPass
+; GCN-O0-GISEL-NEXT: amdgpu-annotate-uniform
+; GCN-O0-GISEL-NEXT: si-annotate-control-flow
+; GCN-O0-GISEL-NEXT: amdgpu-rewrite-undef-for-phi
+; GCN-O0-GISEL-NEXT: inline-asm-prepare
+; GCN-O0-GISEL-NEXT: safe-stack
+; GCN-O0-GISEL-NEXT: stack-protector
+; GCN-O0-GISEL-NEXT: verify
+; GCN-O0-GISEL-NEXT: amdgpu-asm-printer-begin
+; GCN-O0-GISEL-NEXT: cgscc
+; GCN-O0-GISEL-NEXT: function
+; GCN-O0-GISEL-NEXT: machine-function
+; GCN-O0-GISEL-NEXT: ir-translator
+; GCN-O0-GISEL-NEXT: amdgpu-prelegalizer-combiner
+; GCN-O0-GISEL-NEXT: localizer
+; GCN-O0-GISEL-NEXT: legalizer
+; GCN-O0-GISEL-NEXT: amdgpu-postlegalizer-combiner
+; GCN-O0-GISEL-NEXT: amdgpu-global-isel-divergence-lowering
+; GCN-O0-GISEL-NEXT: amdgpu-reg-bank-select
+; GCN-O0-GISEL-NEXT: amdgpu-reg-bank-legalize
+; GCN-O0-GISEL-NEXT: amdgpu-regbank-combiner
+; GCN-O0-GISEL-NEXT: instruction-select
+; GCN-O0-GISEL-NEXT: ResetMachineFunctionPass
+; GCN-O0-GISEL-NEXT: finalize-isel
+; GCN-O0-GISEL-NEXT: localstackalloc
+; GCN-O0-GISEL-NEXT: require<reg-usage>
+; GCN-O0-GISEL-NEXT: cgscc
+; GCN-O0-GISEL-NEXT: function
+; GCN-O0-GISEL-NEXT: machine-function
+; GCN-O0-GISEL-NEXT: reg-usage-propagation
+; GCN-O0-GISEL-NEXT: phi-node-elimination
+; GCN-O0-GISEL-NEXT: si-lower-control-flow
+; GCN-O0-GISEL-NEXT: two-address-instruction
+; GCN-O0-GISEL-NEXT: si-wqm
+; GCN-O0-GISEL-NEXT: amdgpu-pre-ra-long-branch-reg
+; GCN-O0-GISEL-NEXT: regallocfast<filter=sgpr;no-clear-vregs>
+; GCN-O0-GISEL-NEXT: si-lower-sgpr-spills
+; GCN-O0-GISEL-NEXT: si-pre-allocate-wwm-regs
+; GCN-O0-GISEL-NEXT: regallocfast<filter=wwm;no-clear-vregs>
+; GCN-O0-GISEL-NEXT: si-lower-wwm-copies
+; GCN-O0-GISEL-NEXT: amdgpu-reserve-wwm-regs
+; GCN-O0-GISEL-NEXT: regallocfast<filter=vgpr>
+; GCN-O0-GISEL-NEXT: si-fix-vgpr-copies
+; GCN-O0-GISEL-NEXT: remove-redundant-debug-values
+; GCN-O0-GISEL-NEXT: fixup-statepoint-caller-saved
+; GCN-O0-GISEL-NEXT: prolog-epilog
+; GCN-O0-GISEL-NEXT: post-ra-pseudos
+; GCN-O0-GISEL-NEXT: si-post-ra-bundler
+; GCN-O0-GISEL-NEXT: fentry-insert
+; GCN-O0-GISEL-NEXT: xray-instrumentation
+; GCN-O0-GISEL-NEXT: si-memory-legalizer
+; GCN-O0-GISEL-NEXT: si-insert-waitcnts
+; GCN-O0-GISEL-NEXT: si-mode-register
+; GCN-O0-GISEL-NEXT: si-late-branch-lowering
+; GCN-O0-GISEL-NEXT: post-RA-hazard-rec
+; GCN-O0-GISEL-NEXT: amdgpu-wait-sgpr-hazards
+; GCN-O0-GISEL-NEXT: amdgpu-lower-vgpr-encoding
+; GCN-O0-GISEL-NEXT: branch-relaxation
+; GCN-O0-GISEL-NEXT: reg-usage-collector
+; GCN-O0-GISEL-NEXT: remove-loads-into-fake-uses
+; GCN-O0-GISEL-NEXT: live-debug-values
+; GCN-O0-GISEL-NEXT: machine-sanmd
+; GCN-O0-GISEL-NEXT: amdgpu-preload-kern-arg-prolog
+; GCN-O0-GISEL-NEXT: stack-frame-layout
+; GCN-O0-GISEL-NEXT: amdgpu-asm-printer
+; GCN-O0-GISEL-NEXT: free-machine-function
+; GCN-O0-GISEL-NEXT: amdgpu-asm-printer-end
+
+; GCN-O2-SDAG: require<MachineModuleAnalysis>
+; GCN-O2-SDAG-NEXT: require<profile-summary>
+; GCN-O2-SDAG-NEXT: require<collector-metadata>
+; GCN-O2-SDAG-NEXT: require<runtime-libcall-info>
+; GCN-O2-SDAG-NEXT: require<libcall-lowering-info>
+; GCN-O2-SDAG-NEXT: function
+; GCN-O2-SDAG-NEXT: objc-arc-contract
+; GCN-O2-SDAG-NEXT: pre-isel-intrinsic-lowering
+; GCN-O2-SDAG-NEXT: function
+; GCN-O2-SDAG-NEXT: expand-ir-insts<O2>
+; GCN-O2-SDAG-NEXT: amdgpu-remove-incompatible-functions
+; GCN-O2-SDAG-NEXT: amdgpu-printf-runtime-binding
+; GCN-O2-SDAG-NEXT: amdgpu-lower-ctor-dtor
+; GCN-O2-SDAG-NEXT: function
+; GCN-O2-SDAG-NEXT: amdgpu-image-intrinsic-opt
+; GCN-O2-SDAG-NEXT: amdgpu-uniform-intrinsic-combine
+; GCN-O2-SDAG-NEXT: expand-variadics
+; GCN-O2-SDAG-NEXT: amdgpu-always-inline
+; GCN-O2-SDAG-NEXT: always-inline
+; GCN-O2-SDAG-NEXT: amdgpu-export-kernel-runtime-handles
+; GCN-O2-SDAG-NEXT: amdgpu-lower-exec-sync
+; GCN-O2-SDAG-NEXT: amdgpu-sw-lower-lds
+; GCN-O2-SDAG-NEXT: amdgpu-lower-module-lds
+; GCN-O2-SDAG-NEXT: function
+; GCN-O2-SDAG-NEXT: amdgpu-atomic-optimizer
+; GCN-O2-SDAG-NEXT: atomic-expand
+; GCN-O2-SDAG-NEXT: amdgpu-promote-alloca
+; GCN-O2-SDAG-NEXT: separate-const-offset-from-gep<>
+; GCN-O2-SDAG-NEXT: slsr
+; GCN-O2-SDAG-NEXT: early-cse<>
+; GCN-O2-SDAG-NEXT: nary-reassociate
+; GCN-O2-SDAG-NEXT: early-cse<>
+; GCN-O2-SDAG-NEXT: amdgpu-codegenprepare
+; GCN-O2-SDAG-NEXT: loop-mssa
+; GCN-O2-SDAG-NEXT: licm<allowspeculation>
+; GCN-O2-SDAG-NEXT: verify
+; GCN-O2-SDAG-NEXT: loop
+; GCN-O2-SDAG-NEXT: canon-freeze
+; GCN-O2-SDAG-NEXT: loop-reduce
+; GCN-O2-SDAG-NEXT: unreachableblockelim
+; GCN-O2-SDAG-NEXT: consthoist
+; GCN-O2-SDAG-NEXT: replace-with-veclib
+; GCN-O2-SDAG-NEXT: partially-inline-libcalls
+; GCN-O2-SDAG-NEXT: ee-instrument<post-inline>
+; GCN-O2-SDAG-NEXT: scalarize-masked-mem-intrin
+; GCN-O2-SDAG-NEXT: expand-reductions
+; GCN-O2-SDAG-NEXT: early-cse<>
+; GCN-O2-SDAG-NEXT: amdgpu-preload-kernel-arguments
+; GCN-O2-SDAG-NEXT: function
+; GCN-O2-SDAG-NEXT: amdgpu-lower-kernel-arguments
+; GCN-O2-SDAG-NEXT: codegenprepare
+; GCN-O2-SDAG-NEXT: load-store-vectorizer
+; GCN-O2-SDAG-NEXT: amdgpu-lower-buffer-fat-pointers
+; GCN-O2-SDAG-NEXT: amdgpu-lower-intrinsics
+; GCN-O2-SDAG-NEXT: cgscc
+; GCN-O2-SDAG-NEXT: function
+; GCN-O2-SDAG-NEXT: lower-switch
+; GCN-O2-SDAG-NEXT: lower-invoke
+; GCN-O2-SDAG-NEXT: unreachableblockelim
+; GCN-O2-SDAG-NEXT: flatten-cfg
+; GCN-O2-SDAG-NEXT: sink
+; GCN-O2-SDAG-NEXT: amdgpu-late-codegenprepare
+; GCN-O2-SDAG-NEXT: amdgpu-unify-divergent-exit-nodes
+; GCN-O2-SDAG-NEXT: fix-irreducible
+; GCN-O2-SDAG-NEXT: unify-loop-exits
+; GCN-O2-SDAG-NEXT: StructurizeCFGPass
+; GCN-O2-SDAG-NEXT: amdgpu-annotate-uniform
+; GCN-O2-SDAG-NEXT: si-annotate-control-flow
+; GCN-O2-SDAG-NEXT: amdgpu-rewrite-undef-for-phi
+; GCN-O2-SDAG-NEXT: lcssa
+; GCN-O2-SDAG-NEXT: amdgpu-perf-hint
+; GCN-O2-SDAG-NEXT: cgscc
+; GCN-O2-SDAG-NEXT: function
+; GCN-O2-SDAG-NEXT: inline-asm-prepare
+; GCN-O2-SDAG-NEXT: safe-stack
+; GCN-O2-SDAG-NEXT: stack-protector
+; GCN-O2-SDAG-NEXT: verify
+; GCN-O2-SDAG-NEXT: amdgpu-asm-printer-begin
+; GCN-O2-SDAG-NEXT: cgscc
+; GCN-O2-SDAG-NEXT: function
+; GCN-O2-SDAG-NEXT: machine-function
+; GCN-O2-SDAG-NEXT: amdgpu-isel
+; GCN-O2-SDAG-NEXT: si-fix-sgpr-copies
+; GCN-O2-SDAG-NEXT: si-i1-copies
+; GCN-O2-SDAG-NEXT: finalize-isel
+; GCN-O2-SDAG-NEXT: early-tailduplication
+; GCN-O2-SDAG-NEXT: opt-phis
+; GCN-O2-SDAG-NEXT: stack-coloring
+; GCN-O2-SDAG-NEXT: localstackalloc
+; GCN-O2-SDAG-NEXT: dead-mi-elimination
+; GCN-O2-SDAG-NEXT: early-machinelicm
+; GCN-O2-SDAG-NEXT: machine-cse
+; GCN-O2-SDAG-NEXT: machine-sink
+; GCN-O2-SDAG-NEXT: peephole-opt
+; GCN-O2-SDAG-NEXT: dead-mi-elimination
+; GCN-O2-SDAG-NEXT: si-fold-operands
+; GCN-O2-SDAG-NEXT: gcn-dpp-combine
+; GCN-O2-SDAG-NEXT: si-load-store-opt
+; GCN-O2-SDAG-NEXT: si-peephole-sdwa
+; GCN-O2-SDAG-NEXT: early-machinelicm
+; GCN-O2-SDAG-NEXT: machine-cse
+; GCN-O2-SDAG-NEXT: si-fold-operands
+; GCN-O2-SDAG-NEXT: dead-mi-elimination
+; GCN-O2-SDAG-NEXT: si-shrink-instructions
+; GCN-O2-SDAG-NEXT: require<reg-usage>
+; GCN-O2-SDAG-NEXT: cgscc
+; GCN-O2-SDAG-NEXT: function
+; GCN-O2-SDAG-NEXT: machine-function
+; GCN-O2-SDAG-NEXT: reg-usage-propagation
+; GCN-O2-SDAG-NEXT: amdgpu-prepare-agpr-alloc
+; GCN-O2-SDAG-NEXT: detect-dead-lanes
+; GCN-O2-SDAG-NEXT: dead-mi-elimination
+; GCN-O2-SDAG-NEXT: init-undef
+; GCN-O2-SDAG-NEXT: process-imp-defs
+; GCN-O2-SDAG-NEXT: unreachable-mbb-elimination
+; GCN-O2-SDAG-NEXT: require<live-vars>
+; GCN-O2-SDAG-NEXT: si-opt-vgpr-liverange
+; GCN-O2-SDAG-NEXT: require<machine-loops>
+; GCN-O2-SDAG-NEXT: phi-node-elimination
+; GCN-O2-SDAG-NEXT: si-lower-control-flow
+; GCN-O2-SDAG-NEXT: two-address-instruction
+; GCN-O2-SDAG-NEXT: register-coalescer
+; GCN-O2-SDAG-NEXT: rename-independent-subregs
+; GCN-O2-SDAG-NEXT: amdgpu-rewrite-partial-reg-uses
+; GCN-O2-SDAG-NEXT: machine-scheduler
+; GCN-O2-SDAG-NEXT: amdgpu-pre-ra-optimizations
+; GCN-O2-SDAG-NEXT: si-wqm
+; GCN-O2-SDAG-NEXT: si-optimize-exec-masking-pre-ra
+; GCN-O2-SDAG-NEXT: si-form-memory-clauses
+; GCN-O2-SDAG-NEXT: amdgpu-pre-ra-long-branch-reg
+; GCN-O2-SDAG-NEXT: greedy<sgpr>
+; GCN-O2-SDAG-NEXT: virt-reg-rewriter<no-clear-vregs>
+; GCN-O2-SDAG-NEXT: stack-slot-coloring
+; GCN-O2-SDAG-NEXT: si-lower-sgpr-spills
+; GCN-O2-SDAG-NEXT: si-pre-allocate-wwm-regs
+; GCN-O2-SDAG-NEXT: greedy<wwm>
+; GCN-O2-SDAG-NEXT: si-lower-wwm-copies
+; GCN-O2-SDAG-NEXT: virt-reg-rewriter<no-clear-vregs>
+; GCN-O2-SDAG-NEXT: amdgpu-reserve-wwm-regs
+; GCN-O2-SDAG-NEXT: greedy<vgpr>
+; GCN-O2-SDAG-NEXT: amdgpu-nsa-reassign
+; GCN-O2-SDAG-NEXT: amdgpu-rewrite-agpr-copy-mfma
+; GCN-O2-SDAG-NEXT: virt-reg-rewriter
+; GCN-O2-SDAG-NEXT: amdgpu-mark-last-scratch-load
+; GCN-O2-SDAG-NEXT: stack-slot-coloring
+; GCN-O2-SDAG-NEXT: machine-cp
+; GCN-O2-SDAG-NEXT: machinelicm
+; GCN-O2-SDAG-NEXT: si-fix-vgpr-copies
+; GCN-O2-SDAG-NEXT: si-optimize-exec-masking
+; GCN-O2-SDAG-NEXT: remove-redundant-debug-values
+; GCN-O2-SDAG-NEXT: fixup-statepoint-caller-saved
+; GCN-O2-SDAG-NEXT: postra-machine-sink
+; GCN-O2-SDAG-NEXT: shrink-wrap
+; GCN-O2-SDAG-NEXT: prolog-epilog
+; GCN-O2-SDAG-NEXT: machine-latecleanup
+; GCN-O2-SDAG-NEXT: branch-folder
+; GCN-O2-SDAG-NEXT: tailduplication
+; GCN-O2-SDAG-NEXT: machine-cp
+; GCN-O2-SDAG-NEXT: post-ra-pseudos
+; GCN-O2-SDAG-NEXT: si-shrink-instructions
+; GCN-O2-SDAG-NEXT: si-post-ra-bundler
+; GCN-O2-SDAG-NEXT: postmisched
+; GCN-O2-SDAG-NEXT: block-placement
+; GCN-O2-SDAG-NEXT: fentry-insert
+; GCN-O2-SDAG-NEXT: xray-instrumentation
+; GCN-O2-SDAG-NEXT: gcn-create-vopd
+; GCN-O2-SDAG-NEXT: si-memory-legalizer
+; GCN-O2-SDAG-NEXT: si-insert-waitcnts
+; GCN-O2-SDAG-NEXT: si-mode-register
+; GCN-O2-SDAG-NEXT: si-insert-hard-clauses
+; GCN-O2-SDAG-NEXT: si-late-branch-lowering
+; GCN-O2-SDAG-NEXT: si-pre-emit-peephole
+; GCN-O2-SDAG-NEXT: post-RA-hazard-rec
+; GCN-O2-SDAG-NEXT: amdgpu-wait-sgpr-hazards
+; GCN-O2-SDAG-NEXT: amdgpu-lower-vgpr-encoding
+; GCN-O2-SDAG-NEXT: amdgpu-insert-delay-alu
+; GCN-O2-SDAG-NEXT: branch-relaxation
+; GCN-O2-SDAG-NEXT: reg-usage-collector
+; GCN-O2-SDAG-NEXT: remove-loads-into-fake-uses
+; GCN-O2-SDAG-NEXT: live-debug-values
+; GCN-O2-SDAG-NEXT: machine-sanmd
+; GCN-O2-SDAG-NEXT: amdgpu-preload-kern-arg-prolog
+; GCN-O2-SDAG-NEXT: stack-frame-layout
+; GCN-O2-SDAG-NEXT: amdgpu-asm-printer
+; GCN-O2-SDAG-NEXT: free-machine-function
+; GCN-O2-SDAG-NEXT: amdgpu-asm-printer-end
+
+; GCN-O2-GISEL: require<MachineModuleAnalysis>
+; GCN-O2-GISEL-NEXT: require<profile-summary>
+; GCN-O2-GISEL-NEXT: require<collector-metadata>
+; GCN-O2-GISEL-NEXT: require<runtime-libcall-info>
+; GCN-O2-GISEL-NEXT: require<libcall-lowering-info>
+; GCN-O2-GISEL-NEXT: function
+; GCN-O2-GISEL-NEXT: objc-arc-contract
+; GCN-O2-GISEL-NEXT: pre-isel-intrinsic-lowering
+; GCN-O2-GISEL-NEXT: function
+; GCN-O2-GISEL-NEXT: expand-ir-insts<O2>
+; GCN-O2-GISEL-NEXT: amdgpu-remove-incompatible-functions
+; GCN-O2-GISEL-NEXT: amdgpu-printf-runtime-binding
+; GCN-O2-GISEL-NEXT: amdgpu-lower-ctor-dtor
+; GCN-O2-GISEL-NEXT: function
+; GCN-O2-GISEL-NEXT: amdgpu-image-intrinsic-opt
+; GCN-O2-GISEL-NEXT: amdgpu-uniform-intrinsic-combine
+; GCN-O2-GISEL-NEXT: expand-variadics
+; GCN-O2-GISEL-NEXT: amdgpu-always-inline
+; GCN-O2-GISEL-NEXT: always-inline
+; GCN-O2-GISEL-NEXT: amdgpu-export-kernel-runtime-handles
+; GCN-O2-GISEL-NEXT: amdgpu-lower-exec-sync
+; GCN-O2-GISEL-NEXT: amdgpu-sw-lower-lds
+; GCN-O2-GISEL-NEXT: amdgpu-lower-module-lds
+; GCN-O2-GISEL-NEXT: function
+; GCN-O2-GISEL-NEXT: amdgpu-atomic-optimizer
+; GCN-O2-GISEL-NEXT: atomic-expand
+; GCN-O2-GISEL-NEXT: amdgpu-promote-alloca
+; GCN-O2-GISEL-NEXT: separate-const-offset-from-gep<>
+; GCN-O2-GISEL-NEXT: slsr
+; GCN-O2-GISEL-NEXT: early-cse<>
+; GCN-O2-GISEL-NEXT: nary-reassociate
+; GCN-O2-GISEL-NEXT: early-cse<>
+; GCN-O2-GISEL-NEXT: amdgpu-codegenprepare
+; GCN-O2-GISEL-NEXT: loop-mssa
+; GCN-O2-GISEL-NEXT: licm<allowspeculation>
+; GCN-O2-GISEL-NEXT: verify
+; GCN-O2-GISEL-NEXT: loop
+; GCN-O2-GISEL-NEXT: canon-freeze
+; GCN-O2-GISEL-NEXT: loop-reduce
+; GCN-O2-GISEL-NEXT: unreachableblockelim
+; GCN-O2-GISEL-NEXT: consthoist
+; GCN-O2-GISEL-NEXT: replace-with-veclib
+; GCN-O2-GISEL-NEXT: partially-inline-libcalls
+; GCN-O2-GISEL-NEXT: ee-instrument<post-inline>
+; GCN-O2-GISEL-NEXT: scalarize-masked-mem-intrin
+; GCN-O2-GISEL-NEXT: expand-reductions
+; GCN-O2-GISEL-NEXT: early-cse<>
+; GCN-O2-GISEL-NEXT: amdgpu-preload-kernel-arguments
+; GCN-O2-GISEL-NEXT: function
+; GCN-O2-GISEL-NEXT: amdgpu-lower-kernel-arguments
+; GCN-O2-GISEL-NEXT: codegenprepare
+; GCN-O2-GISEL-NEXT: load-store-vectorizer
+; GCN-O2-GISEL-NEXT: amdgpu-lower-buffer-fat-pointers
+; GCN-O2-GISEL-NEXT: amdgpu-lower-intrinsics
+; GCN-O2-GISEL-NEXT: cgscc
+; GCN-O2-GISEL-NEXT: function
+; GCN-O2-GISEL-NEXT: lower-switch
+; GCN-O2-GISEL-NEXT: lower-invoke
+; GCN-O2-GISEL-NEXT: unreachableblockelim
+; GCN-O2-GISEL-NEXT: flatten-cfg
+; GCN-O2-GISEL-NEXT: sink
+; GCN-O2-GISEL-NEXT: amdgpu-late-codegenprepare
+; GCN-O2-GISEL-NEXT: amdgpu-unify-divergent-exit-nodes
+; GCN-O2-GISEL-NEXT: fix-irreducible
+; GCN-O2-GISEL-NEXT: unify-loop-exits
+; GCN-O2-GISEL-NEXT: StructurizeCFGPass
+; GCN-O2-GISEL-NEXT: amdgpu-annotate-uniform
+; GCN-O2-GISEL-NEXT: si-annotate-control-flow
+; GCN-O2-GISEL-NEXT: amdgpu-rewrite-undef-for-phi
+; GCN-O2-GISEL-NEXT: amdgpu-perf-hint
+; GCN-O2-GISEL-NEXT: cgscc
+; GCN-O2-GISEL-NEXT: function
+; GCN-O2-GISEL-NEXT: inline-asm-prepare
+; GCN-O2-GISEL-NEXT: safe-stack
+; GCN-O2-GISEL-NEXT: stack-protector
+; GCN-O2-GISEL-NEXT: verify
+; GCN-O2-GISEL-NEXT: amdgpu-asm-printer-begin
+; GCN-O2-GISEL-NEXT: cgscc
+; GCN-O2-GISEL-NEXT: function
+; GCN-O2-GISEL-NEXT: machine-function
+; GCN-O2-GISEL-NEXT: ir-translator
+; GCN-O2-GISEL-NEXT: amdgpu-prelegalizer-combiner
+; GCN-O2-GISEL-NEXT: localizer
+; GCN-O2-GISEL-NEXT: legalizer
+; GCN-O2-GISEL-NEXT: amdgpu-postlegalizer-combiner
+; GCN-O2-GISEL-NEXT: amdgpu-global-isel-divergence-lowering
+; GCN-O2-GISEL-NEXT: amdgpu-reg-bank-select
+; GCN-O2-GISEL-NEXT: amdgpu-reg-bank-legalize
+; GCN-O2-GISEL-NEXT: amdgpu-regbank-combiner
+; GCN-O2-GISEL-NEXT: instruction-select
+; GCN-O2-GISEL-NEXT: ResetMachineFunctionPass
+; GCN-O2-GISEL-NEXT: finalize-isel
+; GCN-O2-GISEL-NEXT: early-tailduplication
+; GCN-O2-GISEL-NEXT: opt-phis
+; GCN-O2-GISEL-NEXT: stack-coloring
+; GCN-O2-GISEL-NEXT: localstackalloc
+; GCN-O2-GISEL-NEXT: dead-mi-elimination
+; GCN-O2-GISEL-NEXT: early-machinelicm
+; GCN-O2-GISEL-NEXT: machine-cse
+; GCN-O2-GISEL-NEXT: machine-sink
+; GCN-O2-GISEL-NEXT: peephole-opt
+; GCN-O2-GISEL-NEXT: dead-mi-elimination
+; GCN-O2-GISEL-NEXT: si-fold-operands
+; GCN-O2-GISEL-NEXT: gcn-dpp-combine
+; GCN-O2-GISEL-NEXT: si-load-store-opt
+; GCN-O2-GISEL-NEXT: si-peephole-sdwa
+; GCN-O2-GISEL-NEXT: early-machinelicm
+; GCN-O2-GISEL-NEXT: machine-cse
+; GCN-O2-GISEL-NEXT: si-fold-operands
+; GCN-O2-GISEL-NEXT: dead-mi-elimination
+; GCN-O2-GISEL-NEXT: si-shrink-instructions
+; GCN-O2-GISEL-NEXT: require<reg-usage>
+; GCN-O2-GISEL-NEXT: cgscc
+; GCN-O2-GISEL-NEXT: function
+; GCN-O2-GISEL-NEXT: machine-function
+; GCN-O2-GISEL-NEXT: reg-usage-propagation
+; GCN-O2-GISEL-NEXT: amdgpu-prepare-agpr-alloc
+; GCN-O2-GISEL-NEXT: detect-dead-lanes
+; GCN-O2-GISEL-NEXT: dead-mi-elimination
+; GCN-O2-GISEL-NEXT: init-undef
+; GCN-O2-GISEL-NEXT: process-imp-defs
+; GCN-O2-GISEL-NEXT: unreachable-mbb-elimination
+; GCN-O2-GISEL-NEXT: require<live-vars>
+; GCN-O2-GISEL-NEXT: si-opt-vgpr-liverange
+; GCN-O2-GISEL-NEXT: require<machine-loops>
+; GCN-O2-GISEL-NEXT: phi-node-elimination
+; GCN-O2-GISEL-NEXT: si-lower-control-flow
+; GCN-O2-GISEL-NEXT: two-address-instruction
+; GCN-O2-GISEL-NEXT: register-coalescer
+; GCN-O2-GISEL-NEXT: rename-independent-subregs
+; GCN-O2-GISEL-NEXT: amdgpu-rewrite-partial-reg-uses
+; GCN-O2-GISEL-NEXT: machine-scheduler
+; GCN-O2-GISEL-NEXT: amdgpu-pre-ra-optimizations
+; GCN-O2-GISEL-NEXT: si-wqm
+; GCN-O2-GISEL-NEXT: si-optimize-exec-masking-pre-ra
+; GCN-O2-GISEL-NEXT: si-form-memory-clauses
+; GCN-O2-GISEL-NEXT: amdgpu-pre-ra-long-branch-reg
+; GCN-O2-GISEL-NEXT: greedy<sgpr>
+; GCN-O2-GISEL-NEXT: virt-reg-rewriter<no-clear-vregs>
+; GCN-O2-GISEL-NEXT: stack-slot-coloring
+; GCN-O2-GISEL-NEXT: si-lower-sgpr-spills
+; GCN-O2-GISEL-NEXT: si-pre-allocate-wwm-regs
+; GCN-O2-GISEL-NEXT: greedy<wwm>
+; GCN-O2-GISEL-NEXT: si-lower-wwm-copies
+; GCN-O2-GISEL-NEXT: virt-reg-rewriter<no-clear-vregs>
+; GCN-O2-GISEL-NEXT: amdgpu-reserve-wwm-regs
+; GCN-O2-GISEL-NEXT: greedy<vgpr>
+; GCN-O2-GISEL-NEXT: amdgpu-nsa-reassign
+; GCN-O2-GISEL-NEXT: amdgpu-rewrite-agpr-copy-mfma
+; GCN-O2-GISEL-NEXT: virt-reg-rewriter
+; GCN-O2-GISEL-NEXT: amdgpu-mark-last-scratch-load
+; GCN-O2-GISEL-NEXT: stack-slot-coloring
+; GCN-O2-GISEL-NEXT: machine-cp
+; GCN-O2-GISEL-NEXT: machinelicm
+; GCN-O2-GISEL-NEXT: si-fix-vgpr-copies
+; GCN-O2-GISEL-NEXT: si-optimize-exec-masking
+; GCN-O2-GISEL-NEXT: remove-redundant-debug-values
+; GCN-O2-GISEL-NEXT: fixup-statepoint-caller-saved
+; GCN-O2-GISEL-NEXT: postra-machine-sink
+; GCN-O2-GISEL-NEXT: shrink-wrap
+; GCN-O2-GISEL-NEXT: prolog-epilog
+; GCN-O2-GISEL-NEXT: machine-latecleanup
+; GCN-O2-GISEL-NEXT: branch-folder
+; GCN-O2-GISEL-NEXT: tailduplication
+; GCN-O2-GISEL-NEXT: machine-cp
+; GCN-O2-GISEL-NEXT: post-ra-pseudos
+; GCN-O2-GISEL-NEXT: si-shrink-instructions
+; GCN-O2-GISEL-NEXT: si-post-ra-bundler
+; GCN-O2-GISEL-NEXT: postmisched
+; GCN-O2-GISEL-NEXT: block-placement
+; GCN-O2-GISEL-NEXT: fentry-insert
+; GCN-O2-GISEL-NEXT: xray-instrumentation
+; GCN-O2-GISEL-NEXT: gcn-create-vopd
+; GCN-O2-GISEL-NEXT: si-memory-legalizer
+; GCN-O2-GISEL-NEXT: si-insert-waitcnts
+; GCN-O2-GISEL-NEXT: si-mode-register
+; GCN-O2-GISEL-NEXT: si-insert-hard-clauses
+; GCN-O2-GISEL-NEXT: si-late-branch-lowering
+; GCN-O2-GISEL-NEXT: si-pre-emit-peephole
+; GCN-O2-GISEL-NEXT: post-RA-hazard-rec
+; GCN-O2-GISEL-NEXT: amdgpu-wait-sgpr-hazards
+; GCN-O2-GISEL-NEXT: amdgpu-lower-vgpr-encoding
+; GCN-O2-GISEL-NEXT: amdgpu-insert-delay-alu
+; GCN-O2-GISEL-NEXT: branch-relaxation
+; GCN-O2-GISEL-NEXT: reg-usage-collector
+; GCN-O2-GISEL-NEXT: remove-loads-into-fake-uses
+; GCN-O2-GISEL-NEXT: live-debug-values
+; GCN-O2-GISEL-NEXT: machine-sanmd
+; GCN-O2-GISEL-NEXT: amdgpu-preload-kern-arg-prolog
+; GCN-O2-GISEL-NEXT: stack-frame-layout
+; GCN-O2-GISEL-NEXT: amdgpu-asm-printer
+; GCN-O2-GISEL-NEXT: free-machine-function
+; GCN-O2-GISEL-NEXT: amdgpu-asm-printer-end
+
+; GCN-O3-SDAG: require<MachineModuleAnalysis>
+; GCN-O3-SDAG-NEXT: require<profile-summary>
+; GCN-O3-SDAG-NEXT: require<collector-metadata>
+; GCN-O3-SDAG-NEXT: require<runtime-libcall-info>
+; GCN-O3-SDAG-NEXT: require<libcall-lowering-info>
+; GCN-O3-SDAG-NEXT: function
+; GCN-O3-SDAG-NEXT: objc-arc-contract
+; GCN-O3-SDAG-NEXT: pre-isel-intrinsic-lowering
+; GCN-O3-SDAG-NEXT: function
+; GCN-O3-SDAG-NEXT: expand-ir-insts<O3>
+; GCN-O3-SDAG-NEXT: amdgpu-remove-incompatible-functions
+; GCN-O3-SDAG-NEXT: amdgpu-printf-runtime-binding
+; GCN-O3-SDAG-NEXT: amdgpu-lower-ctor-dtor
+; GCN-O3-SDAG-NEXT: function
+; GCN-O3-SDAG-NEXT: amdgpu-image-intrinsic-opt
+; GCN-O3-SDAG-NEXT: amdgpu-uniform-intrinsic-combine
+; GCN-O3-SDAG-NEXT: expand-variadics
+; GCN-O3-SDAG-NEXT: amdgpu-always-inline
+; GCN-O3-SDAG-NEXT: always-inline
+; GCN-O3-SDAG-NEXT: amdgpu-export-kernel-runtime-handles
+; GCN-O3-SDAG-NEXT: amdgpu-lower-exec-sync
+; GCN-O3-SDAG-NEXT: amdgpu-sw-lower-lds
+; GCN-O3-SDAG-NEXT: amdgpu-lower-module-lds
+; GCN-O3-SDAG-NEXT: function
+; GCN-O3-SDAG-NEXT: amdgpu-atomic-optimizer
+; GCN-O3-SDAG-NEXT: atomic-expand
+; GCN-O3-SDAG-NEXT: amdgpu-promote-alloca
+; GCN-O3-SDAG-NEXT: separate-const-offset-from-gep<>
+; GCN-O3-SDAG-NEXT: slsr
+; GCN-O3-SDAG-NEXT: gvn<>
+; GCN-O3-SDAG-NEXT: nary-reassociate
+; GCN-O3-SDAG-NEXT: early-cse<>
+; GCN-O3-SDAG-NEXT: amdgpu-codegenprepare
+; GCN-O3-SDAG-NEXT: loop-mssa
+; GCN-O3-SDAG-NEXT: licm<allowspeculation>
+; GCN-O3-SDAG-NEXT: verify
+; GCN-O3-SDAG-NEXT: loop
+; GCN-O3-SDAG-NEXT: canon-freeze
+; GCN-O3-SDAG-NEXT: loop-reduce
+; GCN-O3-SDAG-NEXT: unreachableblockelim
+; GCN-O3-SDAG-NEXT: consthoist
+; GCN-O3-SDAG-NEXT: replace-with-veclib
+; GCN-O3-SDAG-NEXT: partially-inline-libcalls
+; GCN-O3-SDAG-NEXT: ee-instrument<post-inline>
+; GCN-O3-SDAG-NEXT: scalarize-masked-mem-intrin
+; GCN-O3-SDAG-NEXT: expand-reductions
+; GCN-O3-SDAG-NEXT: gvn<>
+; GCN-O3-SDAG-NEXT: amdgpu-preload-kernel-arguments
+; GCN-O3-SDAG-NEXT: function
+; GCN-O3-SDAG-NEXT: amdgpu-lower-kernel-arguments
+; GCN-O3-SDAG-NEXT: codegenprepare
+; GCN-O3-SDAG-NEXT: load-store-vectorizer
+; GCN-O3-SDAG-NEXT: amdgpu-lower-buffer-fat-pointers
+; GCN-O3-SDAG-NEXT: amdgpu-lower-intrinsics
+; GCN-O3-SDAG-NEXT: cgscc
+; GCN-O3-SDAG-NEXT: function
+; GCN-O3-SDAG-NEXT: lower-switch
+; GCN-O3-SDAG-NEXT: lower-invoke
+; GCN-O3-SDAG-NEXT: unreachableblockelim
+; GCN-O3-SDAG-NEXT: flatten-cfg
+; GCN-O3-SDAG-NEXT: sink
+; GCN-O3-SDAG-NEXT: amdgpu-late-codegenprepare
+; GCN-O3-SDAG-NEXT: amdgpu-unify-divergent-exit-nodes
+; GCN-O3-SDAG-NEXT: fix-irreducible
+; GCN-O3-SDAG-NEXT: unify-loop-exits
+; GCN-O3-SDAG-NEXT: StructurizeCFGPass
+; GCN-O3-SDAG-NEXT: amdgpu-annotate-uniform
+; GCN-O3-SDAG-NEXT: si-annotate-control-flow
+; GCN-O3-SDAG-NEXT: amdgpu-rewrite-undef-for-phi
+; GCN-O3-SDAG-NEXT: lcssa
+; GCN-O3-SDAG-NEXT: amdgpu-perf-hint
+; GCN-O3-SDAG-NEXT: cgscc
+; GCN-O3-SDAG-NEXT: function
+; GCN-O3-SDAG-NEXT: inline-asm-prepare
+; GCN-O3-SDAG-NEXT: safe-stack
+; GCN-O3-SDAG-NEXT: stack-protector
+; GCN-O3-SDAG-NEXT: verify
+; GCN-O3-SDAG-NEXT: amdgpu-asm-printer-begin
+; GCN-O3-SDAG-NEXT: cgscc
+; GCN-O3-SDAG-NEXT: function
+; GCN-O3-SDAG-NEXT: machine-function
+; GCN-O3-SDAG-NEXT: amdgpu-isel
+; GCN-O3-SDAG-NEXT: si-fix-sgpr-copies
+; GCN-O3-SDAG-NEXT: si-i1-copies
+; GCN-O3-SDAG-NEXT: finalize-isel
+; GCN-O3-SDAG-NEXT: early-tailduplication
+; GCN-O3-SDAG-NEXT: opt-phis
+; GCN-O3-SDAG-NEXT: stack-coloring
+; GCN-O3-SDAG-NEXT: localstackalloc
+; GCN-O3-SDAG-NEXT: dead-mi-elimination
+; GCN-O3-SDAG-NEXT: early-machinelicm
+; GCN-O3-SDAG-NEXT: machine-cse
+; GCN-O3-SDAG-NEXT: machine-sink
+; GCN-O3-SDAG-NEXT: peephole-opt
+; GCN-O3-SDAG-NEXT: dead-mi-elimination
+; GCN-O3-SDAG-NEXT: si-fold-operands
+; GCN-O3-SDAG-NEXT: gcn-dpp-combine
+; GCN-O3-SDAG-NEXT: si-load-store-opt
+; GCN-O3-SDAG-NEXT: si-peephole-sdwa
+; GCN-O3-SDAG-NEXT: early-machinelicm
+; GCN-O3-SDAG-NEXT: machine-cse
+; GCN-O3-SDAG-NEXT: si-fold-operands
+; GCN-O3-SDAG-NEXT: dead-mi-elimination
+; GCN-O3-SDAG-NEXT: si-shrink-instructions
+; GCN-O3-SDAG-NEXT: require<reg-usage>
+; GCN-O3-SDAG-NEXT: cgscc
+; GCN-O3-SDAG-NEXT: function
+; GCN-O3-SDAG-NEXT: machine-function
+; GCN-O3-SDAG-NEXT: reg-usage-propagation
+; GCN-O3-SDAG-NEXT: amdgpu-prepare-agpr-alloc
+; GCN-O3-SDAG-NEXT: detect-dead-lanes
+; GCN-O3-SDAG-NEXT: dead-mi-elimination
+; GCN-O3-SDAG-NEXT: init-undef
+; GCN-O3-SDAG-NEXT: process-imp-defs
+; GCN-O3-SDAG-NEXT: unreachable-mbb-elimination
+; GCN-O3-SDAG-NEXT: require<live-vars>
+; GCN-O3-SDAG-NEXT: si-opt-vgpr-liverange
+; GCN-O3-SDAG-NEXT: require<machine-loops>
+; GCN-O3-SDAG-NEXT: phi-node-elimination
+; GCN-O3-SDAG-NEXT: si-lower-control-flow
+; GCN-O3-SDAG-NEXT: two-address-instruction
+; GCN-O3-SDAG-NEXT: register-coalescer
+; GCN-O3-SDAG-NEXT: rename-independent-subregs
+; GCN-O3-SDAG-NEXT: amdgpu-rewrite-partial-reg-uses
+; GCN-O3-SDAG-NEXT: machine-scheduler
+; GCN-O3-SDAG-NEXT: amdgpu-pre-ra-optimizations
+; GCN-O3-SDAG-NEXT: si-wqm
+; GCN-O3-SDAG-NEXT: si-optimize-exec-masking-pre-ra
+; GCN-O3-SDAG-NEXT: si-form-memory-clauses
+; GCN-O3-SDAG-NEXT: amdgpu-pre-ra-long-branch-reg
+; GCN-O3-SDAG-NEXT: greedy<sgpr>
+; GCN-O3-SDAG-NEXT: virt-reg-rewriter<no-clear-vregs>
+; GCN-O3-SDAG-NEXT: stack-slot-coloring
+; GCN-O3-SDAG-NEXT: si-lower-sgpr-spills
+; GCN-O3-SDAG-NEXT: si-pre-allocate-wwm-regs
+; GCN-O3-SDAG-NEXT: greedy<wwm>
+; GCN-O3-SDAG-NEXT: si-lower-wwm-copies
+; GCN-O3-SDAG-NEXT: virt-reg-rewriter<no-clear-vregs>
+; GCN-O3-SDAG-NEXT: amdgpu-reserve-wwm-regs
+; GCN-O3-SDAG-NEXT: greedy<vgpr>
+; GCN-O3-SDAG-NEXT: amdgpu-nsa-reassign
+; GCN-O3-SDAG-NEXT: amdgpu-rewrite-agpr-copy-mfma
+; GCN-O3-SDAG-NEXT: virt-reg-rewriter
+; GCN-O3-SDAG-NEXT: amdgpu-mark-last-scratch-load
+; GCN-O3-SDAG-NEXT: stack-slot-coloring
+; GCN-O3-SDAG-NEXT: machine-cp
+; GCN-O3-SDAG-NEXT: machinelicm
+; GCN-O3-SDAG-NEXT: si-fix-vgpr-copies
+; GCN-O3-SDAG-NEXT: si-optimize-exec-masking
+; GCN-O3-SDAG-NEXT: remove-redundant-debug-values
+; GCN-O3-SDAG-NEXT: fixup-statepoint-caller-saved
+; GCN-O3-SDAG-NEXT: postra-machine-sink
+; GCN-O3-SDAG-NEXT: shrink-wrap
+; GCN-O3-SDAG-NEXT: prolog-epilog
+; GCN-O3-SDAG-NEXT: machine-latecleanup
+; GCN-O3-SDAG-NEXT: branch-folder
+; GCN-O3-SDAG-NEXT: tailduplication
+; GCN-O3-SDAG-NEXT: machine-cp
+; GCN-O3-SDAG-NEXT: post-ra-pseudos
+; GCN-O3-SDAG-NEXT: si-shrink-instructions
+; GCN-O3-SDAG-NEXT: si-post-ra-bundler
+; GCN-O3-SDAG-NEXT: postmisched
+; GCN-O3-SDAG-NEXT: block-placement
+; GCN-O3-SDAG-NEXT: fentry-insert
+; GCN-O3-SDAG-NEXT: xray-instrumentation
+; GCN-O3-SDAG-NEXT: gcn-create-vopd
+; GCN-O3-SDAG-NEXT: si-memory-legalizer
+; GCN-O3-SDAG-NEXT: si-insert-waitcnts
+; GCN-O3-SDAG-NEXT: si-mode-register
+; GCN-O3-SDAG-NEXT: si-insert-hard-clauses
+; GCN-O3-SDAG-NEXT: si-late-branch-lowering
+; GCN-O3-SDAG-NEXT: si-pre-emit-peephole
+; GCN-O3-SDAG-NEXT: post-RA-hazard-rec
+; GCN-O3-SDAG-NEXT: amdgpu-wait-sgpr-hazards
+; GCN-O3-SDAG-NEXT: amdgpu-lower-vgpr-encoding
+; GCN-O3-SDAG-NEXT: amdgpu-insert-delay-alu
+; GCN-O3-SDAG-NEXT: branch-relaxation
+; GCN-O3-SDAG-NEXT: reg-usage-collector
+; GCN-O3-SDAG-NEXT: remove-loads-into-fake-uses
+; GCN-O3-SDAG-NEXT: live-debug-values
+; GCN-O3-SDAG-NEXT: machine-sanmd
+; GCN-O3-SDAG-NEXT: amdgpu-preload-kern-arg-prolog
+; GCN-O3-SDAG-NEXT: stack-frame-layout
+; GCN-O3-SDAG-NEXT: amdgpu-asm-printer
+; GCN-O3-SDAG-NEXT: free-machine-function
+; GCN-O3-SDAG-NEXT: amdgpu-asm-printer-end
+
+; GCN-O3-GISEL: require<MachineModuleAnalysis>
+; GCN-O3-GISEL-NEXT: require<profile-summary>
+; GCN-O3-GISEL-NEXT: require<collector-metadata>
+; GCN-O3-GISEL-NEXT: require<runtime-libcall-info>
+; GCN-O3-GISEL-NEXT: require<libcall-lowering-info>
+; GCN-O3-GISEL-NEXT: function
+; GCN-O3-GISEL-NEXT: objc-arc-contract
+; GCN-O3-GISEL-NEXT: pre-isel-intrinsic-lowering
+; GCN-O3-GISEL-NEXT: function
+; GCN-O3-GISEL-NEXT: expand-ir-insts<O3>
+; GCN-O3-GISEL-NEXT: amdgpu-remove-incompatible-functions
+; GCN-O3-GISEL-NEXT: amdgpu-printf-runtime-binding
+; GCN-O3-GISEL-NEXT: amdgpu-lower-ctor-dtor
+; GCN-O3-GISEL-NEXT: function
+; GCN-O3-GISEL-NEXT: amdgpu-image-intrinsic-opt
+; GCN-O3-GISEL-NEXT: amdgpu-uniform-intrinsic-combine
+; GCN-O3-GISEL-NEXT: expand-variadics
+; GCN-O3-GISEL-NEXT: amdgpu-always-inline
+; GCN-O3-GISEL-NEXT: always-inline
+; GCN-O3-GISEL-NEXT: amdgpu-export-kernel-runtime-handles
+; GCN-O3-GISEL-NEXT: amdgpu-lower-exec-sync
+; GCN-O3-GISEL-NEXT: amdgpu-sw-lower-lds
+; GCN-O3-GISEL-NEXT: amdgpu-lower-module-lds
+; GCN-O3-GISEL-NEXT: function
+; GCN-O3-GISEL-NEXT: amdgpu-atomic-optimizer
+; GCN-O3-GISEL-NEXT: atomic-expand
+; GCN-O3-GISEL-NEXT: amdgpu-promote-alloca
+; GCN-O3-GISEL-NEXT: separate-const-offset-from-gep<>
+; GCN-O3-GISEL-NEXT: slsr
+; GCN-O3-GISEL-NEXT: gvn<>
+; GCN-O3-GISEL-NEXT: nary-reassociate
+; GCN-O3-GISEL-NEXT: early-cse<>
+; GCN-O3-GISEL-NEXT: amdgpu-codegenprepare
+; GCN-O3-GISEL-NEXT: loop-mssa
+; GCN-O3-GISEL-NEXT: licm<allowspeculation>
+; GCN-O3-GISEL-NEXT: verify
+; GCN-O3-GISEL-NEXT: loop
+; GCN-O3-GISEL-NEXT: canon-freeze
+; GCN-O3-GISEL-NEXT: loop-reduce
+; GCN-O3-GISEL-NEXT: unreachableblockelim
+; GCN-O3-GISEL-NEXT: consthoist
+; GCN-O3-GISEL-NEXT: replace-with-veclib
+; GCN-O3-GISEL-NEXT: partially-inline-libcalls
+; GCN-O3-GISEL-NEXT: ee-instrument<post-inline>
+; GCN-O3-GISEL-NEXT: scalarize-masked-mem-intrin
+; GCN-O3-GISEL-NEXT: expand-reductions
+; GCN-O3-GISEL-NEXT: gvn<>
+; GCN-O3-GISEL-NEXT: amdgpu-preload-kernel-arguments
+; GCN-O3-GISEL-NEXT: function
+; GCN-O3-GISEL-NEXT: amdgpu-lower-kernel-arguments
+; GCN-O3-GISEL-NEXT: codegenprepare
+; GCN-O3-GISEL-NEXT: load-store-vectorizer
+; GCN-O3-GISEL-NEXT: amdgpu-lower-buffer-fat-pointers
+; GCN-O3-GISEL-NEXT: amdgpu-lower-intrinsics
+; GCN-O3-GISEL-NEXT: cgscc
+; GCN-O3-GISEL-NEXT: function
+; GCN-O3-GISEL-NEXT: lower-switch
+; GCN-O3-GISEL-NEXT: lower-invoke
+; GCN-O3-GISEL-NEXT: unreachableblockelim
+; GCN-O3-GISEL-NEXT: flatten-cfg
+; GCN-O3-GISEL-NEXT: sink
+; GCN-O3-GISEL-NEXT: amdgpu-late-codegenprepare
+; GCN-O3-GISEL-NEXT: amdgpu-unify-divergent-exit-nodes
+; GCN-O3-GISEL-NEXT: fix-irreducible
+; GCN-O3-GISEL-NEXT: unify-loop-exits
+; GCN-O3-GISEL-NEXT: StructurizeCFGPass
+; GCN-O3-GISEL-NEXT: amdgpu-annotate-uniform
+; GCN-O3-GISEL-NEXT: si-annotate-control-flow
+; GCN-O3-GISEL-NEXT: amdgpu-rewrite-undef-for-phi
+; GCN-O3-GISEL-NEXT: amdgpu-perf-hint
+; GCN-O3-GISEL-NEXT: cgscc
+; GCN-O3-GISEL-NEXT: function
+; GCN-O3-GISEL-NEXT: inline-asm-prepare
+; GCN-O3-GISEL-NEXT: safe-stack
+; GCN-O3-GISEL-NEXT: stack-protector
+; GCN-O3-GISEL-NEXT: verify
+; GCN-O3-GISEL-NEXT: amdgpu-asm-printer-begin
+; GCN-O3-GISEL-NEXT: cgscc
+; GCN-O3-GISEL-NEXT: function
+; GCN-O3-GISEL-NEXT: machine-function
+; GCN-O3-GISEL-NEXT: ir-translator
+; GCN-O3-GISEL-NEXT: amdgpu-prelegalizer-combiner
+; GCN-O3-GISEL-NEXT: localizer
+; GCN-O3-GISEL-NEXT: legalizer
+; GCN-O3-GISEL-NEXT: amdgpu-postlegalizer-combiner
+; GCN-O3-GISEL-NEXT: amdgpu-global-isel-divergence-lowering
+; GCN-O3-GISEL-NEXT: amdgpu-reg-bank-select
+; GCN-O3-GISEL-NEXT: amdgpu-reg-bank-legalize
+; GCN-O3-GISEL-NEXT: amdgpu-regbank-combiner
+; GCN-O3-GISEL-NEXT: instruction-select
+; GCN-O3-GISEL-NEXT: ResetMachineFunctionPass
+; GCN-O3-GISEL-NEXT: finalize-isel
+; GCN-O3-GISEL-NEXT: early-tailduplication
+; GCN-O3-GISEL-NEXT: opt-phis
+; GCN-O3-GISEL-NEXT: stack-coloring
+; GCN-O3-GISEL-NEXT: localstackalloc
+; GCN-O3-GISEL-NEXT: dead-mi-elimination
+; GCN-O3-GISEL-NEXT: early-machinelicm
+; GCN-O3-GISEL-NEXT: machine-cse
+; GCN-O3-GISEL-NEXT: machine-sink
+; GCN-O3-GISEL-NEXT: peephole-opt
+; GCN-O3-GISEL-NEXT: dead-mi-elimination
+; GCN-O3-GISEL-NEXT: si-fold-operands
+; GCN-O3-GISEL-NEXT: gcn-dpp-combine
+; GCN-O3-GISEL-NEXT: si-load-store-opt
+; GCN-O3-GISEL-NEXT: si-peephole-sdwa
+; GCN-O3-GISEL-NEXT: early-machinelicm
+; GCN-O3-GISEL-NEXT: machine-cse
+; GCN-O3-GISEL-NEXT: si-fold-operands
+; GCN-O3-GISEL-NEXT: dead-mi-elimination
+; GCN-O3-GISEL-NEXT: si-shrink-instructions
+; GCN-O3-GISEL-NEXT: require<reg-usage>
+; GCN-O3-GISEL-NEXT: cgscc
+; GCN-O3-GISEL-NEXT: function
+; GCN-O3-GISEL-NEXT: machine-function
+; GCN-O3-GISEL-NEXT: reg-usage-propagation
+; GCN-O3-GISEL-NEXT: amdgpu-prepare-agpr-alloc
+; GCN-O3-GISEL-NEXT: detect-dead-lanes
+; GCN-O3-GISEL-NEXT: dead-mi-elimination
+; GCN-O3-GISEL-NEXT: init-undef
+; GCN-O3-GISEL-NEXT: process-imp-defs
+; GCN-O3-GISEL-NEXT: unreachable-mbb-elimination
+; GCN-O3-GISEL-NEXT: require<live-vars>
+; GCN-O3-GISEL-NEXT: si-opt-vgpr-liverange
+; GCN-O3-GISEL-NEXT: require<machine-loops>
+; GCN-O3-GISEL-NEXT: phi-node-elimination
+; GCN-O3-GISEL-NEXT: si-lower-control-flow
+; GCN-O3-GISEL-NEXT: two-address-instruction
+; GCN-O3-GISEL-NEXT: register-coalescer
+; GCN-O3-GISEL-NEXT: rename-independent-subregs
+; GCN-O3-GISEL-NEXT: amdgpu-rewrite-partial-reg-uses
+; GCN-O3-GISEL-NEXT: machine-scheduler
+; GCN-O3-GISEL-NEXT: amdgpu-pre-ra-optimizations
+; GCN-O3-GISEL-NEXT: si-wqm
+; GCN-O3-GISEL-NEXT: si-optimize-exec-masking-pre-ra
+; GCN-O3-GISEL-NEXT: si-form-memory-clauses
+; GCN-O3-GISEL-NEXT: amdgpu-pre-ra-long-branch-reg
+; GCN-O3-GISEL-NEXT: greedy<sgpr>
+; GCN-O3-GISEL-NEXT: virt-reg-rewriter<no-clear-vregs>
+; GCN-O3-GISEL-NEXT: stack-slot-coloring
+; GCN-O3-GISEL-NEXT: si-lower-sgpr-spills
+; GCN-O3-GISEL-NEXT: si-pre-allocate-wwm-regs
+; GCN-O3-GISEL-NEXT: greedy<wwm>
+; GCN-O3-GISEL-NEXT: si-lower-wwm-copies
+; GCN-O3-GISEL-NEXT: virt-reg-rewriter<no-clear-vregs>
+; GCN-O3-GISEL-NEXT: amdgpu-reserve-wwm-regs
+; GCN-O3-GISEL-NEXT: greedy<vgpr>
+; GCN-O3-GISEL-NEXT: amdgpu-nsa-reassign
+; GCN-O3-GISEL-NEXT: amdgpu-rewrite-agpr-copy-mfma
+; GCN-O3-GISEL-NEXT: virt-reg-rewriter
+; GCN-O3-GISEL-NEXT: amdgpu-mark-last-scratch-load
+; GCN-O3-GISEL-NEXT: stack-slot-coloring
+; GCN-O3-GISEL-NEXT: machine-cp
+; GCN-O3-GISEL-NEXT: machinelicm
+; GCN-O3-GISEL-NEXT: si-fix-vgpr-copies
+; GCN-O3-GISEL-NEXT: si-optimize-exec-masking
+; GCN-O3-GISEL-NEXT: remove-redundant-debug-values
+; GCN-O3-GISEL-NEXT: fixup-statepoint-caller-saved
+; GCN-O3-GISEL-NEXT: postra-machine-sink
+; GCN-O3-GISEL-NEXT: shrink-wrap
+; GCN-O3-GISEL-NEXT: prolog-epilog
+; GCN-O3-GISEL-NEXT: machine-latecleanup
+; GCN-O3-GISEL-NEXT: branch-folder
+; GCN-O3-GISEL-NEXT: tailduplication
+; GCN-O3-GISEL-NEXT: machine-cp
+; GCN-O3-GISEL-NEXT: post-ra-pseudos
+; GCN-O3-GISEL-NEXT: si-shrink-instructions
+; GCN-O3-GISEL-NEXT: si-post-ra-bundler
+; GCN-O3-GISEL-NEXT: postmisched
+; GCN-O3-GISEL-NEXT: block-placement
+; GCN-O3-GISEL-NEXT: fentry-insert
+; GCN-O3-GISEL-NEXT: xray-instrumentation
+; GCN-O3-GISEL-NEXT: gcn-create-vopd
+; GCN-O3-GISEL-NEXT: si-memory-legalizer
+; GCN-O3-GISEL-NEXT: si-insert-waitcnts
+; GCN-O3-GISEL-NEXT: si-mode-register
+; GCN-O3-GISEL-NEXT: si-insert-hard-clauses
+; GCN-O3-GISEL-NEXT: si-late-branch-lowering
+; GCN-O3-GISEL-NEXT: si-pre-emit-peephole
+; GCN-O3-GISEL-NEXT: post-RA-hazard-rec
+; GCN-O3-GISEL-NEXT: amdgpu-wait-sgpr-hazards
+; GCN-O3-GISEL-NEXT: amdgpu-lower-vgpr-encoding
+; GCN-O3-GISEL-NEXT: amdgpu-insert-delay-alu
+; GCN-O3-GISEL-NEXT: branch-relaxation
+; GCN-O3-GISEL-NEXT: reg-usage-collector
+; GCN-O3-GISEL-NEXT: remove-loads-into-fake-uses
+; GCN-O3-GISEL-NEXT: live-debug-values
+; GCN-O3-GISEL-NEXT: machine-sanmd
+; GCN-O3-GISEL-NEXT: amdgpu-preload-kern-arg-prolog
+; GCN-O3-GISEL-NEXT: stack-frame-layout
+; GCN-O3-GISEL-NEXT: amdgpu-asm-printer
+; GCN-O3-GISEL-NEXT: free-machine-function
+; GCN-O3-GISEL-NEXT: amdgpu-asm-printer-end
define void @empty() {
ret void
More information about the llvm-commits
mailing list