Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Binary Layout

This page is a visual guide to navigating the cicc v13.0 binary in IDA Pro. It covers the ELF structure, section layout, subsystem address ranges, embedded data payloads, and the statically linked jemalloc allocator. If you are opening this binary for the first time, start here to orient yourself before diving into individual subsystems.

ELF Overview

CICC is a statically linked, stripped x86-64 ELF binary. There are no dynamic symbol tables, no .dynsym, no DWARF debug info, and no export table. Every function name was removed at build time. IDA Pro recovers 80,562 functions; Hex-Rays successfully decompiles 80,281 of them (99.65%).

PropertyValue
File size60,108,328 bytes (57.3 MB)
Architecturex86-64, little-endian
LinkingFully static (no .interp, no PLT/GOT)
StrippedYes, all symbol tables removed
Build IDcuda_13.0.r13.0/compiler.36424714_0
CompilerBuilt with GCC (inferred from CRT stubs and .init_array layout)
Allocatorjemalloc 5.3.x, statically linked (~400 functions)

Because the binary is statically linked, libc, libpthread, and libm are all embedded. This inflates the raw function count but also means every call target resolves to a concrete address within the binary itself -- there are no external dependencies at runtime beyond the kernel syscall interface.

Address Space Map

The binary's .text section spans roughly 0x400000 to 0x3C00000. Within that 56 MB range, subsystems occupy contiguous, non-overlapping regions. The map below is the primary orientation tool for IDA Pro navigation.

0x400000 ┌─────────────────────────────────────────┐
         │  CRT startup + libc stubs               │  ~52 KB
0x40D000 ├─────────────────────────────────────────┤
         │  jemalloc stats / vsnprintf              │  ~80 KB
0x420000 ├─────────────────────────────────────────┤
         │  (gap: misc libc, math, string ops)      │  ~64 KB
0x430000 ├─────────────────────────────────────────┤
         │  Global constructors (cl::opt reg)        │  ~1.6 MB
         │  ~1,689 LLVM command-line option objects  │
0x5D0000 ├─────────────────────────────────────────┤
         │  EDG 6.6 C++ Frontend                    │  3.2 MB
         │  Parser, constexpr evaluator, IL walker   │
0x8F0000 ├─────────────────────────────────────────┤
         │  CLI / Real Main / NVVM Bridge            │  520 KB
         │  sub_8F9C90 (real main), dual-path dispatch│
0x960000 ├─────────────────────────────────────────┤
         │  Architecture detection, NVVM options     │  576 KB
0x9F0000 ├─────────────────────────────────────────┤
         │  Bitcode reader (parseFunctionBody)       │  ~1 MB
0xAF0000 ├─────────────────────────────────────────┤
         │  X86 AutoUpgrade (legacy, 457KB fn)       │  ~1 MB
0xBF0000 ├─────────────────────────────────────────┤
         │  LLVM IR Verifier                        │  500 KB
0xC00000 ├─────────────────────────────────────────┤
         │  LLVM Support / ADT library              │  ~3.2 MB
         │  (see detailed sub-map below)             │
0x12D0000├─────────────────────────────────────────┤
         │  PassManager / NVVM bridge                │  4.2 MB
         │  Pipeline assembly (sub_12E54A0)          │
0x12FC000├ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ─ ┤
         │  jemalloc core (~400 functions)           │  ~256 KB
0x1700000├─────────────────────────────────────────┤
         │  Backend / machine passes                 │  8 MB
         │  RegAlloc, Block Remat, Mem2Reg           │
0x1F00000├─────────────────────────────────────────┤
         │  SelectionDAG                            │  2 MB
         │  LegalizeTypes (348KB), LegalizeOp        │
0x2100000├─────────────────────────────────────────┤
         │  NVPTX PTX emission                      │  1 MB
0x2340000├─────────────────────────────────────────┤
         │  New PM / pass registration               │  768 KB
         │  2,816-line registrar at sub_2342890      │
0x2A00000├─────────────────────────────────────────┤
         │  Loop passes                             │  4 MB
         │  LoopVectorize, SLP, Unroll               │
0x3000000├─────────────────────────────────────────┤
         │  NVPTX ISel + lowering                    │  7 MB
         │  343KB intrinsic switch (sub_33B0210)     │
0x3700000├─────────────────────────────────────────┤
         │  Machine-level passes (tail)              │  ~3 MB
         │  BlockPlacement, Outliner, StructurizeCFG │
0x3A00000├─────────────────────────────────────────┤
         │  (trailing code, CRT finalization)        │
         └─────────────────────────────────────────┘

DATA SECTIONS:
0x3EA0080   Embedded libdevice bitcode (Path A)    456 KB
0x420FD80   Embedded libdevice bitcode (Path B)    456 KB
0x4F00000+  Global BSS (cl::opt storage, hash tables, state)

Detailed Subsystem Map at Pass Granularity

The coarse map above partitions the binary into ~18 zones. The following map refines every zone to individual-pass resolution, giving the factory address of each identified pass or subsystem entry point. Addresses prefixed with sub_ are IDA function names. Sizes in parentheses are decompiled C output; actual machine code is typically 2-3x smaller.

Zone 1: CRT, libc, jemalloc stats (0x400000 - 0x42FFFF)

0x400000   _start / CRT entry (ELF entry point)
0x40D5CA   sub_40D5CA   vsnprintf (jemalloc stats formatting)
0x420000   libc math/string helpers (memcpy, memset, strlen, etc.)

No LLVM or NVIDIA code lives here. Pure runtime support.

Zone 2: Global constructors (0x430000 - 0x5CFFFF)

~1,689 cl::opt registration constructors execute before main(). Each registers a command-line option string, description, default value, and storage pointer into the global option registry. The .init_array section holds function pointers to these constructors.

Zone 3: EDG 6.6 C++ Frontend (0x5D0000 - 0x8EFFFF)

The complete Edison Design Group C++ frontend, version 6.6. Contains the lexer, parser, constexpr evaluator, template instantiator, overload resolver, IL walker/copier, diagnostic engine, SARIF output, and CUDA-specific extensions (kernel launch grammar, __shared__/__device__ memory space parsing, atomic builtin stubs).

FunctionAddressSize
EDG main entry (called from real main)sub_5D2A80
Expression parser coresub_610000-sub_62FFFF128 KB
Declaration processingsub_750000-sub_76FFFF128 KB
Template / constexprsub_840000-sub_87FFFF256 KB
SARIF, diagnostics, keywordssub_880000-sub_8EFFFF448 KB

Zone 4: CLI / Real Main / Dual-Path Entry (0x8F0000 - 0x9EFFFF)

FunctionAddressSize
Real main (after CRT/jemalloc init)sub_8F9C90
Path A CLI parsing (LibNVVM API mode)sub_900130
Path A simple compile entrysub_902D10
Path A multi-stage pipelinesub_905EE043 KB
Path A builtin resolution tablesub_90AEE0109 KB
Architecture detection, NVVM option parsingsub_960000-sub_9EFFFF576 KB

Zone 5: Bitcode Reader / X86 AutoUpgrade / Verifier (0x9F0000 - 0xBFFFFF)

Sub-rangeContents
0x9F0000-0xAEFFFFBitcode reader (sub_A24000 parseFunctionBody ~166KB)
0xAF0000-0xBEFFFFX86 AutoUpgrade (sub_A939D0 457KB -- legacy intrinsic upgrader)
0xBF0000-0xBFFFFFLLVM IR Verifier entry points

Zone 6: LLVM Support Library (0xC00000 - 0xCAFFFF)

1,653 functions. Pure LLVM infrastructure -- no NVIDIA-specific modifications except a single !Flat address space annotation in the sample profile reader at sub_C29E70.

Sub-rangeFunctionsContents
0xC00000-0xC0F00065IR Verifier (sub_C05FA0 visitInstruction 75KB, sub_C0A940 verify 12KB)
0xC0D4F01sub_C0D4F0 TargetRegistry::lookupTarget (8KB)
0xC0F6D01sub_C0F6D0 IR module linker (48KB)
0xC10000-0xC2FFFF~400InstrProf reader, Sample Profile reader/writer, hashing
0xC30000-0xC3FFFF214ImmutableMap/Set, APInt printing
0xC40000-0xC4FFFF197APInt core arithmetic (div, mul, shift)
0xC50000-0xC5FFFF141CommandLine parser (cl::opt infrastructure)
0xC60000-0xC6FFFF135JSON parser, debug counters, error handling
0xC70000-0xC7FFFF114ConstantRange arithmetic
0xC80000-0xC8FFFF194SHA-1 hash, regex, SmallVector, sorting
0xC90000-0xC9FFFF139Timer/profiling, TimeTrace (Chrome trace)
0xCA0000-0xCAFFFF186YAML lexer/parser, TypeSize, VFS

Zone 7: NVVM Container, SCEV, DWARF, MC Layer (0xCB0000 - 0x10CFFFF)

This 4 MB zone contains LLVM mid-level infrastructure and the NVVM container format.

Sub-rangeContentsKey functions
0xCB0000-0xCBFA60YAML parser/emitter (libyaml)sub_CB9640 main parser (26KB)
0xCC0130-0xCCABA0LLVM Triple parsingsub_CC0130 Triple_normalize (35KB)
0xCCBB10-0xCDCA30NVVM container formatsub_CDD2D0 serialize, sub_CD1D80 deserialize, sub_CCD5F0 version validator (9KB)
0xCD9990NVVM options parser (calls 60+ parse helpers)
0xD60000-0xD82000NV Module Summary / LTOsub_D7D4E0 buildModuleSummary (74KB), sub_D81040 runOnModule (56KB)
0xD83000-0xDFD000ScalarEvolution (SCEV)SCEV framework, AddRecExpr, backedge analysis
0xE00000-0xE0FFFFDWARF debug info string/enum tables
0xE10000-0xE2FFFFItanium C++ name demanglersub_E18BB0 parseExpr (47KB)
0xE30000-0xEBFFFFMC assembler layerELF/COFF/MachO section parsers, expression evaluator
0xEC0000-0xED0000MC assembler directivessub_ECB300 ELF section parser (40KB)
0xED0000-0xEF8000InstrProf / MemProf readerProfiling data infrastructure
0xEF8000-0xF05000Bitstream remark serialization
0xF05000-0xF6FFFFSelectionDAG infrastructureDAG node creation, SDValue, EVT/MVT helpers
0xF70000-0xF8FFFFLoop vectorization runtime checkssub_F77B70 vectorizeLoop (37KB), sub_F72730 canVectorizeMemory (29KB)
0xF90000-0xFCFFFFSimplifyCFG + code sinkingsub_FB0000 switch table gen, sub_FA0000 speculative exec
0xFD0000-0xFEFFFFAliasSet, register pressure tracking, CFG graphviz
0xFF0000-0x101FFFFBlock scheduling, RPO traversal, constant folding
0x1020000-0x103FFFFInline ASM + scheduling modelsub_1035170 CUTLASS kernel detection (41KB)
0x1040000-0x106FFFFDivergence analysis, DAG utilities, IR linker
0x1070000-0x10AFFFFMC object emission, InstructionSimplifysub_10ACA40 visitAdd (94KB)

Zone 8: InstCombine Mega-Region (0x10D0000 - 0x122FFFF)

The single largest contiguous pass in the binary. NVIDIA's modified InstCombine spans 1.4 MB of code with three NVIDIA-custom opcodes (0x254D, 0x2551, 0x255F) for proprietary intrinsic folding.

Sub-rangeContentsKey functions
0x10D0000-0x10EFFFFInstCombine visitors (casts, shifts, memory)Various visitXxx functions
0x10EE7A0InstCombine main visitorsub_10EE7A0 (405KB / 9,258 lines -- largest function in binary)
0x10F0000-0x1100000Sub-visitors for specific opcodes
0x1100000-0x1170000Intrinsic folding, demanded bitssub_1169C30 intrinsic folder (87KB), sub_11A7600 computeKnownBits (127KB)
0x1180000-0x119FFFFInstCombine core worklistsub_1190310 main dispatch (88KB)
0x11A0000-0x11AFFFFValueTracking / KnownBitssub_11AE870 SimplifyDemandedBits
0x11B0000-0x11BFFFFInstCombine tail (vector, extract/insert)
0x11D0000-0x11FFFFFSimplifyLibCallsMath function optimization
0x11FF000-0x122FFFFLLVM textual IR parser (LLParser)

Zone 9: NVVM Bridge / Builtin System / IR Codegen (0x1230000 - 0x12CFFFF)

This zone is the core NVIDIA bridge between the EDG frontend AST and the LLVM IR optimizer.

Sub-rangeContentsKey functions
0x1230000-0x125FFFFLLVM IR codegen from ASTExpression, statement, type codegen
0x125FB30Path B CLI parsingsub_125FB30 (standalone/nvcc mode)
0x1262860Path B simple compilesub_1262860
0x1265970Path B multi-stage pipelinesub_1265970 (48KB)
0x126A7B0Builtin lookup helpersub_126A7B0
0x126A910Builtin registration tablesub_126A910 (126KB) -- registers 717 builtins (IDs 1-770)
0x12B3FD0Builtin resolution dispatchsub_12B3FD0 (103KB) -- giant switch on builtin ID
0x12C06E0Bitcode linkersub_12C06E0 (libdevice linking)

Zone 10: Pipeline Builder / Pass Options (0x12D0000 - 0x12FFFFF)

The pipeline assembler constructs the complete LLVM pass pipeline, inserting passes by calling factory functions whose addresses scatter across the entire binary.

FunctionAddressSize
Module split-range helpersub_12D3E60
Pass factory: creates NVIDIA custom passsub_12D4560325 B
NVVMPassOptions initializer -- populates 222 pass option slots into 4,480-byte structsub_12D6300125 KB
AddPass -- hash-table-based pass insertion into pipelinesub_12DE0B03.5 KB
Tier 0 sub-pipeline builder (full optimization, 40 passes)sub_12DE3304.8 KB
Tier 1/2/3 sub-pipeline builder (85-pass superset, tier-gated)sub_12DE8F0
Codegen dispatch -- routes to backend machine pass pipelinesub_12DFE00
Master pipeline assembler -- 1,553 lines, two major pipelines (normal + fast)sub_12E54A049.8 KB
Machine pass assembly (Pipeline B fast path)sub_12EB010
Machine codegen executionsub_12EC4F0
jemalloc core (~400 functions)sub_12FC000+~256 KB
malloc_conf_init (parses 199 config strings from MALLOC_CONF)sub_12FCDB0129 KB

Zone 11: IR Infrastructure / PassManager (0x1300000 - 0x16FFFFF)

Dense LLVM infrastructure: IR types, constants, instructions, metadata, use-lists, PassManager execution engine, IR linker, bitcode reader, regex, and DataLayout.

Sub-rangeContentsKey functions
0x1300000-0x135FFFFIR constants, types, APInt, APFloat
0x1360000-0x13FFFFFIR instructions, basic blocks, functionssub_1361950 AssumptionCacheTracker
0x1400000-0x14FFFFFTargetLibraryInfo, pass schedulingsub_149CCE0 TLI wrapper, sub_14A04B0 TLI creation, sub_14A3CD0 NVPTX TargetPassConfig
0x1500000-0x15FFFFFIR builder, GEP, PHI, branch creationsub_15F83E0 conditional branch, sub_15F9210 load, sub_15F9650 store
0x1600000-0x160FFFFPassManager execution enginesub_160FB70 PassManager::run, sub_1611EE0 PassManagerBuilder init
0x1610000-0x162FFFFPass scheduling, metadata RAUWsub_1619140 register target passes, sub_1619BD0 PassManager::finalize
0x1630000-0x16FFFFFIR Linker, bitcode reader, regexsub_16786A0 IRLinker::run (61KB), sub_166A310 parseFunctionBody (60KB)

Zone 12: InstCombine (NewPM) + Sanitizers + PGO (0x1700000 - 0x17FFFFF)

946 functions. Dominated by the New Pass Manager version of InstCombine (~600 functions, ~3.5 MB decompiled), with sanitizer instrumentation (MSan, TSan, coverage) and PGO/GCov infrastructure.

Sub-rangeContentsKey functions
0x1700000-0x17B0000InstCombine (NewPM)sub_1743DA0 main visitor (168KB), sub_17A9010 liveness (111KB)
0x17B0000-0x17BFFFFGCov instrumentationsub_17BF860 coverage notes (53KB)
0x17C0000-0x17CFFFFPGO indirect-call promotionsub_17C2DB0 (39KB)
0x17D0000-0x17DFFFFMemorySanitizersub_17DDCE0 shadow propagation (58KB)
0x17E0000-0x17EFFFFPGO instrumentationsub_17EEF60 InstrProfiling reader (81KB)
0x17F0000-0x17FFFFFThreadSanitizer, SanitizerCoveragesub_17FF260 TSan entry (51KB), sub_17F91F0 SanCov (44KB)
sub_17060B0PrintModulePass (debug dump, inserted ~30x in pipeline)

Zone 13: GVN + Scalar Passes + NVIDIA Custom IR Passes (0x1800000 - 0x1CFFFFF)

This 5 MB zone contains the bulk of LLVM's scalar optimization passes and all of NVIDIA's custom IR-level passes.

GVN family (0x1900000 - 0x193FFFF):

FunctionAddressSize
GVN::runOnFunction (core fixed-point iteration)sub_1900BB083 KB
GVN PRE (Partial Redundancy Elimination)sub_190672026 KB
NewGVN expression printingsub_19308103 KB
NewGVN core value numberingsub_1933B4043 KB

Standard scalar passes (0x1830000 - 0x1AFFFFF):

Function (pipeline factory call)AddressSize
InstructionCombining (Old PM wrapper)sub_1832270
TailCallElim / JumpThreadingsub_1833EB0
FunctionAttrssub_1841180
SCCP (Sparse Conditional Constant Propagation)sub_1842BC0
ConstantMerge / GlobalDCEsub_184CD60
NVVMReflectsub_1857160
IPConstantPropagation / ArgumentPromotionsub_185D600
Sink / MemorySSAsub_1869C50
NVVMPredicateOpt / SelectionOptsub_18A3430
LoopPass (barrier optimization)sub_18B1DE0
DCE (Dead Code Elimination)sub_18DEFF0
CorrelatedValuePropagationsub_18EEA90
DSE (Dead Store Elimination)sub_18F5480
DeadArgumentEliminationsub_18FD350
SimplifyCFGsub_190BB10
LICM / LoopRotatesub_195E880
LoopIndexSplitsub_1952F90
LoopUnroll / LoopVectorizesub_197E720
LoopSimplify / IndVarSimplifysub_198DF00
SROA (Scalar Replacement of Aggregates)sub_198E2A0
InstCombine variantsub_19401A0
SROA variant / LoopUnswitchsub_19B73C0
NVIDIA pass (unknown)sub_19CE990
NVVMRematerialization (IR-level remat)sub_1A13320
NVVMIRVerificationsub_1A223D0
LLVM standard pass pipeline (parameterized, called ~8x with different configs)sub_1A62BF0
LoopIdiomRecognize / IndVarSimplifysub_1A68E70
InstructionSimplify / ValueTrackingsub_1A7A9F0

Loop unrolling + switch lowering (0x1B00000 - 0x1B7FFFF):

FunctionAddressSize
LoopUnroll main driversub_1B01A4068 KB
Unroll-and-Jamsub_1B0729055 KB
Loop peelingsub_1B0BF1039 KB
Unroll prologue/epilogue generationsub_1B12B9065 KB
Code sinking (".sink.split")sub_1B5111051 KB
SimplifyCFG condition combiningsub_1B5C58030 KB
Switch-to-lookup-table transformationsub_1B6070083 KB

Loop/SLP vectorizer (0x1B80000 - 0x1BFFFFF):

FunctionAddressSize
LoopVectorize main driver ("loop-vectorize")sub_1BB674043 KB
VPlan buildersub_1BAB46032 KB
SLP horizontal reduction ("slp-vectorizer")sub_1BDDB0047 KB
SLP shuffle/reorder enginesub_1BD066062 KB

NVVM module validation + configuration (0x1C00000 - 0x1C3FFFF):

FunctionAddressSize
NVVM codegen config parser (70+ knobs: AdvancedRemat, CSSACoalescing, DoMMACoalescing, PGO, OCGKnobs)sub_1C2017033 KB
NVVM compile mode parser (WHOLE_PROGRAM_NOABI/ABI, SEPARATE_ABI, opt level, debug info)sub_1C21CE028 KB
Kernel attribute validator (cluster launch, parameter size, Hopper constraints)sub_1C3274030 KB
NVVM intrinsic lowering (tex/surf/syncwarp/ISBE/MAP/ATTR validation)sub_1C36530112 KB
NVVM module validator (data layout, target triple, UnifiedNVVMIR)sub_1C3BC1048 KB

NVIDIA custom IR passes (0x1C40000 - 0x1CFFFFF):

This 1 MB block contains the majority of NVIDIA's proprietary IR-level optimization passes. Every pass listed here has no upstream LLVM equivalent.

FunctionAddressSizeRole
Dead Synchronization Elimination -- removes redundant __syncthreads() barriers via fixed-point R/W dataflowsub_1C4781063 KBdead-sync-elim
Alloca cloning / PHI insertion (mem2reg extension)sub_1C4D21069 KB
NVIDIA pass helper (dead-sync / common-base infrastructure)sub_1C585C039 KB
Common Base Elimination -- removes redundant base address computationssub_1C5DFC039 KBcommon-base-elim
Block-level analysis infrastructure ("Processing", "Block")sub_1C5FDC026 KB
Base address bitcast helper ("baseValue", "bitCastEnd")sub_1C637F028 KB
Base Address Strength Reduction ("BaseAddressStrengthReduce")sub_1C6778059 KBbase-addr-sr
MemorySpaceOpt loop index analysis ("phi maxLoopInd")sub_1C6A6C054 KB
GVN or LICM variantsub_1C6E800
ADCE (Aggressive DCE)sub_1C6FCA0
MemorySpaceOpt function cloning -- specializes generic pointers to global/shared/localsub_1C7091075 KBmemspace-opt (core)
LoopIndexSplit -- splits loops on index conditions (three modes: all-but-one, single-iter, range-split)sub_1C7B2C084 KBloop-index-split
Memmove Unrolling -- forward/reverse element copy loopssub_1C82A5040 KBlower-aggr-copies
Struct/Aggregate Splitting -- element-wise memcpy decompositionsub_1C86CA073 KBlower-aggr-copies
EarlyCSE / GVN variantsub_1C8A4D0
FP128/I128 Emulation -- replaces 128-bit ops with __nv_* library callssub_1C8C17026 KBlower-ops
MemorySpaceOpt entry (pipeline factory address)sub_1C8E680nvvm-memspace-opt
NVVMLowerBarriers / BarrierLoweringsub_1C98160
MemorySpaceOpt address space resolution (warnings for illegal atomics on const/local)sub_1CA292032 KB
MemorySpaceOpt secondary resolversub_1CA9E9028 KB
Printf Lowering -- lowers printf to vprintf + local buffer packingsub_1CB1E6031 KBprintf-lowering
NVVMIntrinsicLowering (most frequently inserted pass, ~10 occurrences in pipeline)sub_1CB4E40nvvm-intrinsic-lower
NVVMBranchDistsub_1CB73C0branch-dist
RLMCAST transformation (register-level multicast)sub_1CBFA4075 KB
NVVMSinking2 (NVIDIA enhanced code sinking)sub_1CC60B0sinking2
IV Demotion -- narrows 64-bit induction variables to 32-bit ("demoteIV", "newBaseIV")sub_1CD74B075 KBiv-demotion
NLO (NVIDIA Live Output) helper ("nloNewAdd", "nloNewBit")sub_1CDC1F035 KB
Instruction classification / cost model (NLO/remat)sub_1CDE4D080 KB
Simplify Live Output (NLO pass -- "nloNewBit")sub_1CE10B048 KB
Rematerialization pull-in cost analysis ("Total pull-in cost")sub_1CE3AF056 KB
Rematerialization block executor ("remat_", "uclone_" prefixes)sub_1CE67D032 KB
NVVMRematerialization main driver -- live-in/live-out pressure analysis per blocksub_1CE7DD067 KBremat
Final NVVM lowering / intrinsic cleanupsub_1CEBD10
Formal parameter space overflow checkersub_1CEE97027 KB
NVVMPeepholesub_1CEF8F0nvvm-peephole
Instruction scheduling helper (physical register constraints)sub_1CFDD6049 KB

Zone 14: SelectionDAG ISel / CodeGenPrepare / Backend (0x1D00000 - 0x1EFFFFF)

Sub-rangeContentsKey functions
0x1D00000-0x1D60000SelectionDAG ISel coresub_1D4BB00 bytecode interpreter (97KB, 131-case switch), sub_1D54C20 runOnMachineFunction (72KB, "sdagisel")
0x1D1B0D0sub_1D1B0D0 computeKnownBits (87KB, 62-case ISD switch)
0x1D210A0sub_1D210A0 SimplifyDemandedBits (46KB, 118-case switch, calls NVPTX hooks at sub_1F58D40)
0x1D70000-0x1D7FFFFCodeGenPreparesub_1D73760 address sinking (65KB, "sunkaddr")
0x1D07BB057 KBPre-RA instruction scheduling
0x1D80000-0x1DFFFFFDeque worklist, block splittingsub_1D7AA30 (74KB, ".unlikely", ".cond.split")
0x1E00000-0x1EFFFFFRegister allocation infrastructureGreedy RA, live intervals, spill cost

Zone 15: Backend CodeGen Infrastructure (0x1F00000 - 0x20FFFFF)

Sub-rangeContentsKey functions
0x1F00000-0x1F0C000ScheduleDAG infrastructuresub_1F0A020 DAG builder/emitter (41KB)
0x1F0BF50-0x1F0EBC0Shrink Wrappingsub_1F0DCB0 core analysis (27KB, "shrink-wrap")
0x1F10000-0x1F15000SlotIndexes + SpillPlacementsub_1F10320 "slotindexes", sub_1F12110 "spill-code-placement"
0x1F15000-0x1F1F000LiveInterval utilitiessub_1F19E60 "Impossible to implement partial COPY"
0x1F20000-0x1F5FFFFRegister coalescer, VirtRegRewriter
0x1F58D40NVPTX target hook for SimplifyDemandedBits
0x1F60000-0x1FFFFFTwoAddressInstruction, stack protection
0x2000000-0x20FFFFFLegalizeTypessub_20019C0 (341KB -- third largest function in binary)

Zone 16: NVPTX Target Backend (0x2100000 - 0x21FFFFF)

Sub-rangeContentsKey functions
0x2100000-0x210FFFFRegister allocation supportsub_210BC20 seedLiveRegs ("regalloc"), sub_210BE60 "ran out of registers"
0x2110000-0x212FFFFDAG type legalization/promotion
0x2130000-0x213FFFFDAG combiners, ISel patterns
0x2140000-0x214FFFFNVPTXAsmPrinterPTX header/kernel emission
0x2150000-0x215FFFFPTX function/param emissionsub_215D9D0 NVVMAnnotationsProcessor / GenericToNVVM
0x2160000-0x216FFFFNVPTXTargetMachinePass pipeline, SubtargetInfo
0x2170000-0x218AFFFAtomics lowering, rematerialization (machine-level)
0x21BC000-0x21BFFFFAlloca hoisting, image opt
0x21C0000-0x21CFFFFMemorySpace lowering (machine-level)
0x21D0000-0x21DFFFFDAG lowering mega-function, peephole, prolog/epilog
0x21E0000-0x21EFFFFMMA/tensor codegen, atomics, special regs, cluster ops
0x21F0000-0x21FFFFFLdg transform, vec split, mem2reg, register pressure

Zone 17: New PM Pass Registration (0x2340000 - 0x23FFFFF)

FunctionAddressSize
Master pass registration -- registers all 526 passes (121 module + 174 function + 23 loop + 48 MF + analyses) into StringMapsub_2342890~2,816 lines
Print available passes (--print-pipeline-passes)sub_233C410
Function pass pipeline text parsersub_233F860
Module pipeline text parsersub_2377300
Inner function/loop pipeline parsersub_2368220
Alias analysis name resolver (globals-aa, basic-aa, scev-aa, tbaa)sub_233BD40
Hash table insertion (pass_name -> constructor)sub_E41FB0

Zone 18: IPO / Attributor / OpenMP Optimization (0x2400000 - 0x29FFFFF)

Sub-rangeContentsKey functions
0x2400000-0x25FFFFFAttributor frameworksub_251CD10 runTillFixpoint (53KB)
0x2590000-0x265FFFFSanitizer instrumentation (ASan, HWASan)
0x266E000-0x269FFFFOpenMP target offloadingsub_2686D90 runtime table (215KB, ~160 __kmpc_* entries), sub_26968A0 Generic-to-SPMD transform (61KB, "OMP120")
0x267842041 KBOpenMP state machine for generic kernels
0x268094052 KBParallel region merging
0x26A0000-0x29FFFFFCoroutine support, LTO infrastructure, PGO lowering

Zone 19: Loop Transforms (0x2A00000 - 0x2CFFFFF)

FunctionAddressSize
LoopPeeling ("llvm.loop.peeled.count")sub_2A07DE076 KB
LoopRotation (".lr.ph", "h.rot")sub_2A0CFD065 KB
UnrollLoop main ("loop-unroll", "UnrollCount")sub_2A15A2085 KB
UnrollAndJamLoop ("loop-unroll-and-jam")sub_2A1CF0058 KB
Runtime unrolling (".epil.preheader", ".prol.preheader")sub_2A2526091 KB
IndVarSimplify IV widening ("iv.rem", ".sext", ".zext")sub_2A76A4067 KB
WidenIV / IV transformationsub_2A79EE082 KB
Dead Synchronization Elimination (island -- the larger copy; see also sub_1C47810)sub_2C84BA094 KB

Note: sub_2C84BA0 is a second copy of the dead synchronization elimination pass located outside the main NVIDIA custom pass zone. This is the 94KB variant analyzed in depth (p2b.6-01), with the four-category fixed-point R/W dataflow algorithm and red-black tree maps.

Zone 20: Codegen Target Options / SelectionDAG Lowering (0x2D00000 - 0x2FFFFFF)

5,217 functions. Contains LLVM TargetMachine option registration and the core SelectionDAG infrastructure used by the NVPTX backend.

Sub-rangeContentsKey functions
0x2D00000-0x2D8FFFFSelectionDAG coreDAG combine, node creation, legalization helpers
0x2D97F20112 KBTargetOptions registration (all cl::opt for -march/-mcpu/-mattr/relocation/code model)
0x2E00000-0x2FFFFFSelectionDAG continuedType legalization, custom lowering, pattern matching

Zone 21: NVPTX ISel + SelectionDAG Lowering (0x3000000 - 0x36FFFFF)

7 MB. The NVPTX instruction selection and target-specific DAG lowering.

Sub-rangeContentsKey functions
0x3000000-0x328FFFFDAG node construction, EVT/MVT helpers
0x3290000-0x32FFFFFNVPTXTargetLoweringsub_32E3060 LowerOperation dispatcher (111KB), sub_32A1EF0 type legalization (109KB), sub_32D2680 load/store lowering (81KB)
0x3300000-0x33AFFFFIntrinsic lowering (DAG level)sub_33B0210 intrinsic switch (343KB)
0x33B0000-0x36FFFFFISel pattern helpers, register info

Zone 22: NVPTX Instruction Selector / Machine Tail (0x3700000 - 0x3BFFFFF)

Sub-rangeContentsKey functions
0x3700000-0x37AFFFFTable-driven instruction selectorsub_376DE90 main pattern matcher (138KB -- per-SM opcode legality gating via compressed table at offset 521536)
0x372FEE0104 KBDAG operand tree copier (recursive)
0x374DD2067 KBNVPTX custom lowering entry
0x3900000-0x396FFFFNVIDIA register pressure / remat (machine-level)sub_396A6C0 RP reporting ("Register Pressure: N"), sub_3964ED0 ".remat" naming
0x393724014 KBABI Preserve directive emission
0x395CFD011 KBGEP Splitting pass
sub_395DD2066 KBDAG pattern computation
0x3970000-0x397FFFFAsmPrinter / PTX emissionsub_3979400 emitFunctionBody (62KB), sub_397DF10 emitInlineAsm (30KB)
sub_3970E4018 KBBB print + .pragma "nounroll"
0x3980000-0x3BFFFFFMC layer, DWARF, ELF emissionObject file writers, section management

Pass Factory Address Summary

The pipeline assembler (sub_12E54A0) calls pass factory functions to construct the pipeline. Each factory address below is called directly from the pipeline builder and uniquely identifies a pass in the binary.

Factory addressPass identityType
sub_1654860BreakCriticalEdgesF
sub_17060B0PrintModulePass (debug dump)M
sub_1832270InstructionCombiningF
sub_1833EB0TailCallElim / JumpThreadingF
sub_1841180FunctionAttrsM
sub_1842BC0SCCPF
sub_184CD60ConstantMerge / GlobalDCEM
sub_1857160NVVMReflectF
sub_185D600IPConstantPropagationM
sub_1869C50Sink / MemorySSAF
sub_18A3430NVVMPredicateOptF
sub_18B1DE0LoopPass (barrier opt)F
sub_18DEFF0DCEF
sub_18EEA90CorrelatedValuePropagationF
sub_18F5480DSEF
sub_18FD350DeadArgumentEliminationM
sub_190BB10SimplifyCFGF
sub_195E880LICM / LoopRotateF
sub_1952F90LoopIndexSplitL
sub_197E720LoopUnroll / LoopVectorizeF
sub_198DF00LoopSimplify / IndVarSimplifyF
sub_198E2A0SROAF
sub_19401A0InstCombine variantF
sub_19B73C0SROA variant / LoopUnswitchF
sub_19CE990NVIDIA pass (unknown)F
sub_1A13320NVVMRematerialization (IR-level)F
sub_1A223D0NVVMIRVerificationM
sub_1A62BF0LLVM standard pass pipeline (parameterized)M
sub_1A68E70LoopIdiomRecognizeF
sub_1A7A9F0InstructionSimplifyF
sub_1B26330MemCpyOptF
sub_1B7FDF0Reassociate / SinkingF
sub_1C4B6F0AlwaysInlinerM
sub_1C6FCA0ADCEF
sub_1C8A4D0EarlyCSEF
sub_1C8E680NVVMMemorySpaceOptM
sub_1C98160NVVMLowerBarriersF
sub_1CB4E40NVVMIntrinsicLowering (~10 insertions)F
sub_1CB73C0NVVMBranchDistF
sub_1CC60B0NVVMSinking2F
sub_1CE7DD0NVVMRematerialization (main)F
sub_1CEBD10Final NVVM loweringF
sub_1CEF8F0NVVMPeepholeF
sub_1CB0F50ProfileSummaryInfoWrapper / NVVMModulePassF
sub_12D4560NVVMVerifier / ModuleVerifierM
sub_215D9D0NVVMAnnotationsProcessorM
sub_149CCE0TargetLibraryInfoWrapperPassM
sub_1BFB520TargetTransformInfoWrapperPassF
sub_14A7550createVerifierPass / BasicAliasAnalysisM
sub_1361950AssumptionCacheTrackerM

Type: M = ModulePass, F = FunctionPass, L = LoopPass.

Embedded Data Payloads

Libdevice Bitcode

Two identical copies of NVIDIA's libdevice are embedded directly in the .rodata section as raw LLVM bitcode. Each copy is approximately 456 KB and contains around 400 math intrinsic implementations (__nv_sinf, __nv_expf, __nv_sqrtf, etc.). The duplication supports the dual-path architecture: Path A (LibNVVM API mode) references one copy at 0x3EA0080; Path B (standalone mode) references the other at 0x420FD80. The bitcode is linked into the user's module during the LNK phase via the bitcode linker at sub_12C06E0.

String Tables

IDA Pro extracts 188,141 strings from the binary. These fall into several categories:

CategoryApproximate countExample
LLVM cl::opt descriptions~1,689"Enable aggressive reassociation"
LLVM error/diagnostic messages~5,000"Invalid bitcode signature"
EDG error messages~2,500"expected a declaration"
LLVM pass names~440"instcombine", "gvn", "nvvm-memspace-opt"
PTX instruction templates~800"mov.b32 %0, %1;"
NVVM builtin names~770"__nvvm_atom_cas_gen_i"
jemalloc config strings~200"background_thread", "dirty_decay_ms"
NVVM container field names~144"SmMajor", "FastMath.Ftz"
Miscellaneous (format strings, assertions)~170,000+"%s:%d: assertion failed"

String cross-referencing is the single most productive technique for identifying functions in a stripped binary. The LLVM pass registration pattern is especially reliable: a string like "nvvm-memspace-opt" appears exactly once, in the constructor of that pass, which IDA locates via xref.

NVVM Container Format

The binary includes a proprietary container format for wrapping LLVM bitcode with compilation metadata. The container uses a 24-byte binary header with magic 0x7F4E5C7D, followed by delta-encoded tag/value pairs (only fields that differ from defaults are serialized). There are 144 distinct tag IDs spanning core options (tags 1-39), compression metadata (tag 99), extended target options (tags 101-173), blob data (tags 201-218), and structured hardware descriptors (tags 401-402 for TMA/TCGen05 configurations). Serialization and deserialization are handled by sub_CDD2D0 and sub_CD1D80 respectively.

jemalloc Integration

NVIDIA statically links jemalloc 5.3.x as the process-wide memory allocator. The jemalloc functions cluster around 0x12FC000 (approximately 400 functions). The configuration initialization function sub_12FCDB0 (129 KB, one of the largest functions in the binary) parses 199 configuration strings from the MALLOC_CONF environment variable.

Key jemalloc entry points visible in the binary:

FunctionAddress
malloc_conf_init (199 config strings)0x12FCDB0
vsnprintf (jemalloc stats formatting)0x40D5CA
Core arena management, tcache, extent allocator0x12FC000 range

The jemalloc integration is significant for reverse engineering because it means malloc/free calls throughout the binary resolve to jemalloc's arena-based allocator rather than glibc's ptmalloc2. When tracing memory allocation patterns in IDA, look for calls into the 0x12FC000 range.

Global Constructors

The region from 0x430000 to 0x5CFFFF (~1.6 MB) is dominated by global constructors that execute before main(). The primary purpose of these constructors is LLVM cl::opt registration: approximately 1,689 command-line option objects are initialized, each registering a string name, description, default value, and storage location into LLVM's global option registry.

The .init_array section contains function pointers to these constructors. They execute in linker-determined order and populate a global hash table that sub_8F9C90 (the real main) later queries during CLI parsing. In IDA Pro, navigating to any cl::opt constructor reveals the option name string and its associated global variable, which is invaluable for understanding what flag controls what behavior.

Additional global constructors handle:

  • LLVM pass registration (RegisterPass<T> and PassInfo objects)
  • LLVM target initialization (NVPTX target machine factory)
  • jemalloc allocator bootstrapping
  • EDG frontend static initialization tables

Dual-Path Code Duplication

A distinctive structural feature of the binary is the presence of two near-complete copies of the NVVM bridge and backend entry points. Path A (LibNVVM API mode) lives around 0x90xxxx; Path B (standalone/nvcc mode) lives around 0x126xxxx. Each path has its own:

ComponentPath APath B
Simple compile entrysub_902D10sub_1262860
Multi-stage pipelinesub_905EE0 (43 KB)sub_1265970 (48 KB)
CLI parsingsub_900130sub_125FB30
Builtin resolution tablesub_90AEE0 (109 KB)sub_126A910 (123 KB)
Embedded libdevice refunk_3EA0080unk_420FD80
Version stringnvvm-latestnvvm70

In IDA, if you have identified a function in one path, search for a structurally similar function at the corresponding offset in the other path. The code is not byte-identical -- Path B is generally slightly larger due to additional standalone-mode logic -- but the control flow graphs are nearly congruent.

IDA Pro Navigation Tips

When opening cicc in IDA Pro for the first time, the auto-analysis will take several minutes due to the 60 MB size. The following workflow accelerates orientation:

  1. Start with strings. Open the Strings window (Shift+F12), filter for known LLVM pass names ("instcombine", "gvn", "nvvm-"). Each xref leads directly to a pass constructor or registration site.

  2. Use the address map above. If you are looking at an address in the 0xC00000-0x12CFFFF range, you are in LLVM optimization passes. The 0x3000000-0x36FFFFF range is NVPTX instruction selection. The 0x5D0000-0x8EFFFF range is EDG. Context narrows the search space immediately.

  3. Watch for vtable patterns. LLVM passes are C++ classes with virtual methods. IDA's vtable reconstruction reveals inheritance hierarchies. Every FunctionPass, ModulePass, and LoopPass subclass has a vtable with runOnFunction/runOnModule at a consistent slot offset.

  4. Anchor on mega-functions. The largest functions are the easiest to locate and serve as landmarks: sub_A939D0 (457 KB, X86 AutoUpgrade), sub_10EE7A0 (396 KB, InstCombine), sub_20019C0 (341 KB, LegalizeTypes). These anchors partition the address space.

  5. Follow the pipeline. Entry at sub_8F9C90 calls into EDG at sub_5D2A80, pipeline assembly at sub_12E54A0, and PTX emission starting at 0x2100000. Tracing callgraph edges from these known entry points maps out the entire compilation flow.

  6. Mark jemalloc early. Identifying and labeling the jemalloc cluster at 0x12FC000 prevents wasted time reverse-engineering well-known allocator internals. The 199-string malloc_conf_init function is an unmistakable fingerprint.

  7. Locate NVIDIA passes via factory addresses. The Pass Factory Address Summary table above maps every pipeline-inserted pass to its constructor address. In IDA, setting a breakpoint at sub_12DE0B0 (AddPass) and logging the second argument reveals the exact pass insertion order at runtime.

Master Address-Range Map

The definitive quick-reference for "what lives at address X?" Every major address range in the cicc v13.0 binary, sorted by start address, consolidated from all subsystem pages in this wiki.

.text Section (0x400000 - 0x3BFFFFF)

StartEndSizeSubsystemZone
0x4000000x40CFFF52 KBCRT startup (_start, libc stubs)1
0x40D0000x41FFFF80 KBjemalloc stats (vsnprintf at sub_40D5CA)1
0x4200000x42FFFF64 KBlibc helpers (memcpy, memset, strlen, math)1
0x4300000x5CFFFF1.6 MBGlobal constructors (~1,689 cl::opt registrations, pass/target init)2
0x5D00000x8EFFFF3.2 MBEDG 6.6 C++ Frontend (parser, constexpr, templates, IL walkers, SARIF, preprocessor)3
0x8F00000x8FFFFF64 KBReal main / CLI (sub_8F9C90 entry, flag mapping, XOR deobfuscator)4
0x9000000x92FFFF192 KBPath A entry (LibNVVM API: CLI parse, pipeline driver, builtin tables)4
0x9300000x95FFFF192 KBPath A builtins (pre-opt builtin lowering, 770-entry resolution)4
0x9600000x9EFFFF576 KBArchitecture detection (-arch fan-out, NVVM option parsing)4
0x9F00000xAEFFFF1 MBBitcode reader (parseFunctionBody 166KB, metadata reader 121KB)5
0xAF00000xBEFFFF1 MBX86 AutoUpgrade (sub_A939D0 457KB -- legacy intrinsic upgrader)5
0xBF00000xBFFFFF64 KBLLVM IR Verifier (entry points, visitCallInst 207KB)5
0xC000000xCAFFFF704 KBLLVM Support/ADT (APInt, CommandLine, ConstantRange, JSON, Timer, YAML, VFS)6
0xCB00000xCBFFFF64 KBYAML parser/emitter (libyaml)7
0xCC00000xCCFFFF64 KBLLVM Triple parsing (Triple_normalize 35KB)7
0xCCD0000xCDFFFF76 KBNVVM container format (serialize sub_CDD2D0, deserialize sub_CD1D80, 144 tags)7
0xCE00000xD5FFFF512 KBNVVM options (container validators, option parsers)7
0xD600000xD82FFF140 KBNV Module Summary / LTO (buildModuleSummary 74KB, runOnModule 56KB)7
0xD830000xDFFFFF500 KBScalarEvolution (SCEV) (AddRecExpr, backedge analysis, trip counts)7
0xE000000xE0FFFF64 KBDWARF debug info (string/enum tables)7
0xE100000xE2FFFF128 KBItanium name demangler (parseExpr 47KB)7
0xE300000xEBFFFF576 KBMC assembler layer (ELF/COFF/MachO section parsers, expression evaluator)7
0xEC00000xED000064 KBMC directives (sub_ECB300 ELF section parser 40KB)7
0xED00000xEF8000160 KBInstrProf / MemProf reader (profiling data infrastructure)7
0xEF80000xF0500052 KBBitstream remark serialization7
0xF050000xF6FFFF428 KBSelectionDAG infrastructure (DAG node creation, SDValue, EVT/MVT helpers)7
0xF700000xF8FFFF128 KBLoop vectorization runtime checks (vectorizeLoop 37KB, canVectorizeMemory 29KB)7
0xF900000xFCFFFF256 KBSimplifyCFG + code sinking (switch table gen, speculative exec)7
0xFD00000xFEFFFF128 KBAliasSet / register pressure (CFG graphviz)7
0xFF00000x101FFFF192 KBBlock scheduling (RPO traversal, constant folding)7
0x10200000x103FFFF128 KBInline ASM + scheduling model (CUTLASS kernel detection 41KB)7
0x10400000x106FFFF192 KBDivergence analysis (DAG utilities, IR linker)7
0x10700000x10CFFFF384 KBMC object emission + InstructionSimplify (visitAdd 94KB)7
0x10D00000x122FFFF1.4 MBInstCombine mega-region (main visitor 396KB, KnownBits 125KB, SimplifyLibCalls, LLParser)8
0x12300000x12CFFFF640 KBNVVM Bridge / IR codegen (AST-to-IR, Path B entry, builtin tables, bitcode linker)9
0x12D00000x12FBFFF176 KBPipeline builder (NVVMPassOptions 125KB, AddPass, tier builders, master assembler 50KB)10
0x12FC0000x133FFFF256 KBjemalloc core (~400 functions, malloc_conf_init 129KB)10
0x13400000x16FFFFF3.8 MBIR infrastructure / PassManager (IR types, constants, instructions, metadata, execution engine, IR linker)11
0x17000000x17FFFFF1 MBInstCombine (NewPM) + Sanitizers + PGO (MSan, TSan, coverage, GCov)12
0x18000000x18DFFFF896 KBStandard scalar passes (InstructionCombining, TailCallElim, FunctionAttrs, SCCP, Sink, MemorySSA)13
0x18E00000x18FFFFF128 KBDCE / CVP / DSE (Dead Code Elimination, CorrelatedValuePropagation, Dead Store Elimination)13
0x19000000x193FFFF256 KBGVN family (runOnFunction 83KB, PRE 26KB, NewGVN 43KB)13
0x19400000x19FFFFF768 KBScalar passes continued (LICM, LoopRotate, LoopIndexSplit, LoopUnroll, SROA)13
0x1A000000x1AFFFFF1 MBNVVMRematerialization / LLVM standard pipeline / InstructionSimplify13
0x1B000000x1B7FFFF512 KBLoop unrolling + switch lowering (main driver 68KB, Unroll-and-Jam 55KB, peeling 39KB)13
0x1B800000x1BFFFFF512 KBLoop/SLP vectorizer (LoopVectorize 43KB, VPlan 32KB, SLP 47KB+62KB)13
0x1C000000x1C3FFFF256 KBNVVM module validation + config (codegen config 33KB, compile mode 28KB, intrinsic lowering 112KB, module validator 48KB)13
0x1C400000x1CFFFFF768 KBNVIDIA custom IR passes (dead-sync-elim, common-base-elim, base-addr-sr, memspace-opt, loop-index-split, printf-lowering, iv-demotion, remat, peephole, sinking2, NLO)13
0x1D000000x1DFFFFF1 MBSelectionDAG ISel / CodeGenPrepare (bytecode interpreter 97KB, address sinking 65KB)14
0x1E000000x1EFFFFF1 MBRegister allocation infrastructure (Greedy RA, live intervals, spill cost)14
0x1F000000x1FFFFFF1 MBBackend codegen infrastructure (ScheduleDAG, ShrinkWrapping, SpillPlacement, register coalescer, TwoAddressInstruction)15
0x20000000x20FFFFF1 MBLegalizeTypes (sub_20019C0 341KB -- third largest function)15
0x21000000x21FFFFF1 MBNVPTX target backend (AsmPrinter, PTX emission, MMA/tensor codegen, atomics, TargetMachine)16
0x22000000x233FFFF1.25 MB(gap: misc codegen, late passes)--
0x23400000x23FFFFF768 KBNew PM pass registration (master registrar 2,816 lines, 526 passes, pipeline text parser)17
0x24000000x258FFFF1.6 MBAttributor framework (runTillFixpoint 53KB)18
0x25900000x265FFFF832 KBSanitizer instrumentation (ASan, HWASan)18
0x26600000x269FFFF256 KBOpenMP target offloading (194-entry __kmpc_* table, Generic-to-SPMD 61KB, state machine 41KB)18
0x26A00000x29FFFFF3.5 MBCoroutines / LTO infrastructure / PGO lowering / EarlyCSE / SROA (NewPM)18
0x2A000000x2CFFFFF3 MBLoop transforms (LoopPeeling, LoopRotation, UnrollLoop, IndVarSimplify, dead-sync-elim island)19
0x2D000000x2FFFFFF3 MBCodegen target options / SelectionDAG lowering (TargetOptions 112KB, DAG combine, type legalization)20
0x30000000x36FFFFF7 MBNVPTX ISel + DAG lowering (NVPTXTargetLowering 111KB, intrinsic switch 343KB, register info)21
0x37000000x37AFFFF704 KBTable-driven instruction selector (main matcher 138KB, per-SM opcode gating)22
0x37B00000x38FFFFF1.3 MBLate machine passes (inliner cost model at 0x38576C0, pipeline helpers)22
0x39000000x397FFFF512 KBNVIDIA machine-level passes (register pressure, remat, ABI preserve, GEP split, AsmPrinter/PTX emission)22
0x39800000x399FFFF128 KBMC layer / DWARF emission (object file writers, DWARF sections at 0x3990000-0x39DF000)22
0x39A00000x3BFFFFF2.4 MBTrailing codegen (section management, CRT finalization)22

.rodata / .data Sections (0x3C00000+)

StartEndSizeContents
0x3C000000x3EAFFFF~2.7 MBRead-only data (strings, jump tables, XOR-encrypted env vars at 0x3C23A7B)
0x3EA00800x3F1FFFF456 KBEmbedded libdevice bitcode (Path A)
0x3F252E00x3F3E6C0+variesNVPTX tables (constraint type table, constraint word table, MVT tables)
0x420FD800x428FFFF456 KBEmbedded libdevice bitcode (Path B)
0x42812C0--variesObfuscated version strings (XOR+ROT13 ciphertext)
0x444C4A00x4456580+variesMVT tables (operand type, vector element count, scalarized MVT)
0x4F00000+--largeBSS (cl::opt storage, hash tables, global state)

Usage

Given an IDA address, find the row whose Start <= address < End. The Subsystem column tells you which component of cicc you are looking at. For pass-level detail within a zone, jump to the corresponding Zone section above.

Cross-References