Loading...
Loading...
Compare original and translation side by side
skills/compiler-internals/llvm-passesskills/compiler-internals/llvm-passesllcllcLLVM IR per function
├── IR legalizer (types/ops target supports)
├── SelectionDAGBuilder
├── LegalizeTypes / LegalizeOps
├── Instruction selection (pattern match TableGen)
├── Scheduling (pre-RA)
├── Register allocation
├── Prolog/epilog insertion
└── AsmPrinter → .s objectLLVM IR per function
├── IR legalizer (types/ops target supports)
├── SelectionDAGBuilder
├── LegalizeTypes / LegalizeOps
├── Instruction selection (pattern match TableGen)
├── Scheduling (pre-RA)
├── Register allocation
├── Prolog/epilog insertion
└── AsmPrinter → .s objectclang -c -emit-llvm -O2 -o foo.bc foo.c
llc -march=aarch64 -O2 foo.bc -o foo.s
llc -march=riscv64 -O2 foo.bc -o foo-rv.sclang -c -emit-llvm -O2 -o foo.bc foo.c
llc -march=aarch64 -O2 foo.bc -o foo.s
llc -march=riscv64 -O2 foo.bc -o foo-rv.sdef ADD32rr : Pat<(add i32 GPR:$a, GPR:$b),
(ADD32rr GPR:$a, GPR:$b)>;.tddef ADD32rr : Pat<(add i32 GPR:$a, GPR:$b),
(ADD32rr GPR:$a, GPR:$b)>;.tdCC_AArch64CC_X86_64skills/computer-architecture/abi-and-calling-conventionsCC_AArch64CC_X86_64skills/computer-architecture/abi-and-calling-conventionsclang --target=arm-none-eabi -c -O2 foo.c
llc -mtriple=thumbv7em-none-eabi foo.bc+neon+crcclang --target=arm-none-eabi -c -O2 foo.c
llc -mtriple=thumbv7em-none-eabi foo.bc+neon+crcTargetLoweringTargetLowering/code-generation-and-backends Trace how this IR add becomes AArch64 ADD instruction/code-generation-and-backends Trace how this IR add becomes AArch64 ADD instruction| Symptom | Cause | Fix |
|---|---|---|
| Unsupported IR op on target | Legalize or expand op |
| Wrong soft-float | ABI mismatch | Set |
| Huge stack frame | Many spills post-RA | IR-level pressure reduction |
| llc vs clang differ | Different targets passed | Same |
| TableGen build fail | Syntax in .td | |
| 现象 | 原因 | 解决方法 |
|---|---|---|
| 目标平台不支持该IR操作 | 合法化或展开该操作 |
| 软浮点计算错误 | ABI不匹配 | 设置 |
| 栈帧过大 | 寄存器分配后溢出过多 | 在IR层面降低寄存器压力 |
| llc与clang输出不一致 | 传入的目标平台不同 | 使用相同的 |
| TableGen构建失败 | .td文件存在语法错误 | 查看 |
skills/compiler-internals/llvm-ir-and-passesskills/compiler-internals/compiler-optimizations-deepskills/compilers/cross-gccskills/computer-architecture/abi-and-calling-conventionsskills/low-level-programming/assembly-armskills/compiler-internals/llvm-ir-and-passesskills/compiler-internals/compiler-optimizations-deepskills/compilers/cross-gccskills/computer-architecture/abi-and-calling-conventionsskills/low-level-programming/assembly-arm