| |`-DeclRefExpr0x1298aded0'int (const char *, ...)'Function0x1298ada48'printf''int (const char *, ...)'// 第一个参数,""里面内容||-ImplicitCastExpr0x12a1aa518'const char *'<NoOp>// 类型说明||`-ImplicitCastExpr 0x12a1aa500 'char *' <ArrayToPointerDecay> // %d | |`-Str...
157. attributes #1 = { noinline optnone ssp uwtable "correctly-rounded-divide-sqrt-fp-math"="false" "darwin-stkchk-strong-link" "disable-tail-calls"="false" "frame-pointer"="all" "less-precise-fpmad"="false" "min-legal-vector-width"="0" "no-infs-fp-math"="false" "no-jump-tabl...
87. | | `-ImplicitCastExpr 0x7ff3e3820360 'char *' <ArrayToPointerDecay> 88. 89. | | `-StringLiteral 0x7ff3e5023c08 'char [6]' lvalue "clang" 90. 91. | |-DeclStmt 0x7ff3e390bbc8 <line:18:9, col:25> 92. 93. | |`-VarDecl 0x7ff3e390b618 col:13 used rank 'int...
class TargetInfo : public llvm::RefCountedBase<TargetInfo> { llvm::Triple Triple; protected: bool BigEndian; unsigned char PointerWidth, PointerAlign; unsigned char IntWidth, IntAlign; unsigned char HalfWidth, HalfAlign; unsigned char FloatWidth, FloatAlign; unsigned char DoubleWidth, DoubleAlign;...
类似地,目前的优化实现也不支持指针参数的单元类型为数组的情况(isArrayTy()),以及指针参数的单元类型为结构体(isStructTy())且结构体中有多于一种数据类型的情况(getNumContainedTypes()),这些都被视为不合格的use。 如果找到指针参数的合格use(如本例中的指针参数%r),则该指针参数有可能被优化为结构返回,将其...
| | `-ImplicitCastExpr 0x7f8661d8a658 'char *' <ArrayToPointerDecay> | | `-StringLiteral 0x7f8661d8a620 'char [12]' lvalue "AloneMonkey" | |-DeclStmt 0x7f8661d8a7f8 <line:10:9, col:40> | | `-VarDecl 0x7f8661d8a6f0 col:13 used age 'int' cinit | | `-BinaryOperator ...
pointer type - 指针类型, 指向某个内存对象, 注意没有void *, 而使用i8 *代替 array type - 数组类型, 包含元素类型与个数 label type - 标识代码块, 类似于汇编的label token type - 与指令相关的特殊值类型, 比如phi / select等 struct type - ...
| |-CallExpr 0x7f80ea2a26f0 <line:14:9, col:31>'void'| | |-ImplicitCastExpr 0x7f80ea2a26d8 'void (*)(id, ...)'<FunctionToPointerDecay> | | | `-DeclRefExpr 0x7f80ea2a25e0 'void (id, ...)'Function 0x7f80ea295760'NSLog''void (id, ...)'| | `-ImplicitCastExpr 0x7f...
#2 ; Function Attrs: argmemonly nounwind declare void @llvm.lifetime.end(i64, i8* nocapture) #1 attributes #0 = { nounwind ssp uwtable “disable-tail-calls”=“false” “less-precise-fpmad”=“false” “no-frame-pointer-elim”=“true” “no-frame-pointer-elim-non-leaf” “no-infs...
The LLVM Project is a collection of modular and reusable compiler and toolchain technologies.简单来说,LLVM 项⽬是⼀系列分模块、可重⽤的编译⼯具链。它提供了⼀种代码编写良好的中间表⽰(IR),可以作为多种语⾔的后端,还可以提供与变成语⾔⽆关的优化和针对多种cpu 的代码⽣成功能。先...