
The `RISCVIndirectBranchTracking` pass inserts `lpad` instruction and could change the basic block alignment, so this should not happen after the branch relaxation as the adjusted offset is possible to exceed the branch range.
221 lines
11 KiB
LLVM
221 lines
11 KiB
LLVM
; RUN: llc -mtriple=riscv32 -O3 -debug-pass=Structure < %s -o /dev/null 2>&1 | \
|
|
; RUN: grep -v "Verify generated machine code" | \
|
|
; RUN: FileCheck %s --check-prefixes=CHECK
|
|
; RUN: llc -mtriple=riscv64 -O3 -debug-pass=Structure < %s -o /dev/null 2>&1 | \
|
|
; RUN: grep -v "Verify generated machine code" | \
|
|
; RUN: FileCheck %s --check-prefixes=CHECK,RV64
|
|
|
|
; REQUIRES: asserts
|
|
|
|
; CHECK-LABEL: Pass Arguments:
|
|
; CHECK-NEXT: Target Library Information
|
|
; CHECK-NEXT: Target Pass Configuration
|
|
; CHECK-NEXT: Machine Module Information
|
|
; CHECK-NEXT: Target Transform Information
|
|
; CHECK-NEXT: Assumption Cache Tracker
|
|
; CHECK-NEXT: Profile summary info
|
|
; CHECK-NEXT: Type-Based Alias Analysis
|
|
; CHECK-NEXT: Scoped NoAlias Alias Analysis
|
|
; CHECK-NEXT: Create Garbage Collector Module Metadata
|
|
; CHECK-NEXT: Machine Branch Probability Analysis
|
|
; CHECK-NEXT: Default Regalloc Eviction Advisor
|
|
; CHECK-NEXT: Default Regalloc Priority Advisor
|
|
; CHECK-NEXT: ModulePass Manager
|
|
; CHECK-NEXT: Pre-ISel Intrinsic Lowering
|
|
; CHECK-NEXT: FunctionPass Manager
|
|
; CHECK-NEXT: Expand large div/rem
|
|
; CHECK-NEXT: Expand fp
|
|
; CHECK-NEXT: Expand Atomic instructions
|
|
; CHECK-NEXT: RISC-V Zacas ABI fix
|
|
; CHECK-NEXT: Dominator Tree Construction
|
|
; CHECK-NEXT: Natural Loop Information
|
|
; CHECK-NEXT: Canonicalize natural loops
|
|
; CHECK-NEXT: Lazy Branch Probability Analysis
|
|
; CHECK-NEXT: Lazy Block Frequency Analysis
|
|
; CHECK-NEXT: Optimization Remark Emitter
|
|
; CHECK-NEXT: Scalar Evolution Analysis
|
|
; CHECK-NEXT: Loop Data Prefetch
|
|
; CHECK-NEXT: RISC-V gather/scatter lowering
|
|
; CHECK-NEXT: Interleaved Access Pass
|
|
; CHECK-NEXT: RISC-V CodeGenPrepare
|
|
; CHECK-NEXT: Module Verifier
|
|
; CHECK-NEXT: Basic Alias Analysis (stateless AA impl)
|
|
; CHECK-NEXT: Canonicalize natural loops
|
|
; CHECK-NEXT: Scalar Evolution Analysis
|
|
; CHECK-NEXT: Loop Pass Manager
|
|
; CHECK-NEXT: Canonicalize Freeze Instructions in Loops
|
|
; CHECK-NEXT: Induction Variable Users
|
|
; CHECK-NEXT: Loop Strength Reduction
|
|
; CHECK-NEXT: Loop Terminator Folding
|
|
; CHECK-NEXT: Basic Alias Analysis (stateless AA impl)
|
|
; CHECK-NEXT: Function Alias Analysis Results
|
|
; CHECK-NEXT: Merge contiguous icmps into a memcmp
|
|
; CHECK-NEXT: Natural Loop Information
|
|
; CHECK-NEXT: Lazy Branch Probability Analysis
|
|
; CHECK-NEXT: Lazy Block Frequency Analysis
|
|
; CHECK-NEXT: Expand memcmp() to load/stores
|
|
; CHECK-NEXT: Lower Garbage Collection Instructions
|
|
; CHECK-NEXT: Shadow Stack GC Lowering
|
|
; CHECK-NEXT: Remove unreachable blocks from the CFG
|
|
; CHECK-NEXT: Natural Loop Information
|
|
; CHECK-NEXT: Post-Dominator Tree Construction
|
|
; CHECK-NEXT: Branch Probability Analysis
|
|
; CHECK-NEXT: Block Frequency Analysis
|
|
; CHECK-NEXT: Constant Hoisting
|
|
; CHECK-NEXT: Replace intrinsics with calls to vector library
|
|
; CHECK-NEXT: Lazy Branch Probability Analysis
|
|
; CHECK-NEXT: Lazy Block Frequency Analysis
|
|
; CHECK-NEXT: Optimization Remark Emitter
|
|
; CHECK-NEXT: Partially inline calls to library functions
|
|
; CHECK-NEXT: Instrument function entry/exit with calls to e.g. mcount() (post inlining)
|
|
; CHECK-NEXT: Scalarize Masked Memory Intrinsics
|
|
; CHECK-NEXT: Expand reduction intrinsics
|
|
; CHECK-NEXT: Natural Loop Information
|
|
; CHECK-NEXT: Type Promotion
|
|
; CHECK-NEXT: CodeGen Prepare
|
|
; CHECK-NEXT: Dominator Tree Construction
|
|
; CHECK-NEXT: Exception handling preparation
|
|
; CHECK-NEXT: A No-Op Barrier Pass
|
|
; CHECK-NEXT: FunctionPass Manager
|
|
; CHECK-NEXT: Merge internal globals
|
|
; CHECK-NEXT: Dominator Tree Construction
|
|
; CHECK-NEXT: Basic Alias Analysis (stateless AA impl)
|
|
; CHECK-NEXT: Function Alias Analysis Results
|
|
; CHECK-NEXT: ObjC ARC contraction
|
|
; CHECK-NEXT: Prepare callbr
|
|
; CHECK-NEXT: Safe Stack instrumentation pass
|
|
; CHECK-NEXT: Insert stack protectors
|
|
; CHECK-NEXT: Module Verifier
|
|
; CHECK-NEXT: Basic Alias Analysis (stateless AA impl)
|
|
; CHECK-NEXT: Function Alias Analysis Results
|
|
; CHECK-NEXT: Natural Loop Information
|
|
; CHECK-NEXT: Post-Dominator Tree Construction
|
|
; CHECK-NEXT: Branch Probability Analysis
|
|
; CHECK-NEXT: Assignment Tracking Analysis
|
|
; CHECK-NEXT: Lazy Branch Probability Analysis
|
|
; CHECK-NEXT: Lazy Block Frequency Analysis
|
|
; CHECK-NEXT: RISC-V DAG->DAG Pattern Instruction Selection
|
|
; CHECK-NEXT: Finalize ISel and expand pseudo-instructions
|
|
; CHECK-NEXT: RISC-V Vector Peephole Optimization
|
|
; CHECK-NEXT: RISC-V Fold Memory Offset
|
|
; CHECK-NEXT: Lazy Machine Block Frequency Analysis
|
|
; CHECK-NEXT: Early Tail Duplication
|
|
; CHECK-NEXT: Optimize machine instruction PHIs
|
|
; CHECK-NEXT: Slot index numbering
|
|
; CHECK-NEXT: Merge disjoint stack slots
|
|
; CHECK-NEXT: Local Stack Slot Allocation
|
|
; CHECK-NEXT: Remove dead machine instructions
|
|
; CHECK-NEXT: MachineDominator Tree Construction
|
|
; CHECK-NEXT: Machine Natural Loop Construction
|
|
; CHECK-NEXT: Machine Block Frequency Analysis
|
|
; CHECK-NEXT: Early Machine Loop Invariant Code Motion
|
|
; CHECK-NEXT: MachineDominator Tree Construction
|
|
; CHECK-NEXT: Machine Block Frequency Analysis
|
|
; CHECK-NEXT: Machine Common Subexpression Elimination
|
|
; CHECK-NEXT: MachinePostDominator Tree Construction
|
|
; CHECK-NEXT: Machine Cycle Info Analysis
|
|
; CHECK-NEXT: Machine code sinking
|
|
; CHECK-NEXT: Peephole Optimizations
|
|
; CHECK-NEXT: Remove dead machine instructions
|
|
; CHECK-NEXT: Machine Trace Metrics
|
|
; CHECK-NEXT: Lazy Machine Block Frequency Analysis
|
|
; CHECK-NEXT: Machine InstCombiner
|
|
; RV64-NEXT: RISC-V Optimize W Instructions
|
|
; CHECK-NEXT: RISC-V Pre-RA pseudo instruction expansion pass
|
|
; CHECK-NEXT: RISC-V Merge Base Offset
|
|
; CHECK-NEXT: MachineDominator Tree Construction
|
|
; CHECK-NEXT: RISC-V VL Optimizer
|
|
; CHECK-NEXT: RISC-V Insert Read/Write CSR Pass
|
|
; CHECK-NEXT: RISC-V Insert Write VXRM Pass
|
|
; CHECK-NEXT: RISC-V Landing Pad Setup
|
|
; CHECK-NEXT: RISC-V VMV0 Elimination
|
|
; CHECK-NEXT: Detect Dead Lanes
|
|
; CHECK-NEXT: Init Undef Pass
|
|
; CHECK-NEXT: Process Implicit Definitions
|
|
; CHECK-NEXT: Remove unreachable machine basic blocks
|
|
; CHECK-NEXT: Live Variable Analysis
|
|
; CHECK-NEXT: Eliminate PHI nodes for register allocation
|
|
; CHECK-NEXT: Two-Address instruction pass
|
|
; CHECK-NEXT: Slot index numbering
|
|
; CHECK-NEXT: Live Interval Analysis
|
|
; CHECK-NEXT: Register Coalescer
|
|
; CHECK-NEXT: Rename Disconnected Subregister Components
|
|
; CHECK-NEXT: Machine Instruction Scheduler
|
|
; CHECK-NEXT: Machine Block Frequency Analysis
|
|
; CHECK-NEXT: Debug Variable Analysis
|
|
; CHECK-NEXT: Live Stack Slot Analysis
|
|
; CHECK-NEXT: Virtual Register Map
|
|
; CHECK-NEXT: Live Register Matrix
|
|
; CHECK-NEXT: Bundle Machine CFG Edges
|
|
; CHECK-NEXT: Spill Code Placement Analysis
|
|
; CHECK-NEXT: Lazy Machine Block Frequency Analysis
|
|
; CHECK-NEXT: Machine Optimization Remark Emitter
|
|
; CHECK-NEXT: Greedy Register Allocator
|
|
; CHECK-NEXT: Virtual Register Rewriter
|
|
; CHECK-NEXT: RISC-V Insert VSETVLI pass
|
|
; CHECK-NEXT: RISC-V Dead register definitions
|
|
; CHECK-NEXT: Virtual Register Map
|
|
; CHECK-NEXT: Live Register Matrix
|
|
; CHECK-NEXT: Greedy Register Allocator
|
|
; CHECK-NEXT: Virtual Register Rewriter
|
|
; CHECK-NEXT: Register Allocation Pass Scoring
|
|
; CHECK-NEXT: Stack Slot Coloring
|
|
; CHECK-NEXT: Machine Copy Propagation Pass
|
|
; CHECK-NEXT: Machine Loop Invariant Code Motion
|
|
; CHECK-NEXT: RISC-V Redundant Copy Elimination
|
|
; CHECK-NEXT: Remove Redundant DEBUG_VALUE analysis
|
|
; CHECK-NEXT: Fixup Statepoint Caller Saved
|
|
; CHECK-NEXT: PostRA Machine Sink
|
|
; CHECK-NEXT: MachineDominator Tree Construction
|
|
; CHECK-NEXT: Machine Natural Loop Construction
|
|
; CHECK-NEXT: Machine Block Frequency Analysis
|
|
; CHECK-NEXT: MachinePostDominator Tree Construction
|
|
; CHECK-NEXT: Lazy Machine Block Frequency Analysis
|
|
; CHECK-NEXT: Machine Optimization Remark Emitter
|
|
; CHECK-NEXT: Shrink Wrapping analysis
|
|
; CHECK-NEXT: Prologue/Epilogue Insertion & Frame Finalization
|
|
; CHECK-NEXT: Machine Late Instructions Cleanup Pass
|
|
; CHECK-NEXT: Control Flow Optimizer
|
|
; CHECK-NEXT: Lazy Machine Block Frequency Analysis
|
|
; CHECK-NEXT: Tail Duplication
|
|
; CHECK-NEXT: Machine Copy Propagation Pass
|
|
; CHECK-NEXT: Post-RA pseudo instruction expansion pass
|
|
; CHECK-NEXT: RISC-V post-regalloc pseudo instruction expansion pass
|
|
; CHECK-NEXT: Insert KCFI indirect call checks
|
|
; CHECK-NEXT: RISC-V Load / Store Optimizer
|
|
; CHECK-NEXT: MachineDominator Tree Construction
|
|
; CHECK-NEXT: Machine Natural Loop Construction
|
|
; CHECK-NEXT: PostRA Machine Instruction Scheduler
|
|
; CHECK-NEXT: Analyze Machine Code For Garbage Collection
|
|
; CHECK-NEXT: Machine Block Frequency Analysis
|
|
; CHECK-NEXT: MachinePostDominator Tree Construction
|
|
; CHECK-NEXT: Branch Probability Basic Block Placement
|
|
; CHECK-NEXT: Insert fentry calls
|
|
; CHECK-NEXT: Insert XRay ops
|
|
; CHECK-NEXT: Implement the 'patchable-function' attribute
|
|
; CHECK-NEXT: Machine Copy Propagation Pass
|
|
; CHECK-NEXT: RISC-V Late Branch Optimisation Pass
|
|
; CHECK-NEXT: RISC-V Indirect Branch Tracking
|
|
; CHECK-NEXT: Branch relaxation pass
|
|
; CHECK-NEXT: RISC-V Make Compressible
|
|
; CHECK-NEXT: Contiguously Lay Out Funclets
|
|
; CHECK-NEXT: Remove Loads Into Fake Uses
|
|
; CHECK-NEXT: StackMap Liveness Analysis
|
|
; CHECK-NEXT: Live DEBUG_VALUE analysis
|
|
; CHECK-NEXT: Machine Sanitizer Binary Metadata
|
|
; CHECK-NEXT: Machine Outliner
|
|
; CHECK-NEXT: FunctionPass Manager
|
|
; CHECK-NEXT: Insert CFI remember/restore state instructions
|
|
; CHECK-NEXT: Lazy Machine Block Frequency Analysis
|
|
; CHECK-NEXT: Machine Optimization Remark Emitter
|
|
; CHECK-NEXT: Stack Frame Layout Analysis
|
|
; CHECK-NEXT: RISC-V Zcmp move merging pass
|
|
; CHECK-NEXT: RISC-V Zcmp Push/Pop optimization pass
|
|
; CHECK-NEXT: RISC-V pseudo instruction expansion pass
|
|
; CHECK-NEXT: RISC-V atomic pseudo instruction expansion pass
|
|
; CHECK-NEXT: Unpack machine instruction bundles
|
|
; CHECK-NEXT: Lazy Machine Block Frequency Analysis
|
|
; CHECK-NEXT: Machine Optimization Remark Emitter
|
|
; CHECK-NEXT: RISC-V Assembly Printer
|
|
; CHECK-NEXT: Free MachineFunction
|