AtomicExpandPass
基本概念
INITIALIZE_PASS_BEGIN(AtomicExpandLegacy, DEBUG_TYPE,
"Expand Atomic instructions", false, false)
INITIALIZE_PASS_DEPENDENCY(TargetPassConfig)
INITIALIZE_PASS_END(AtomicExpandLegacy, DEBUG_TYPE,
"Expand Atomic instructions", false, false)
本文件定义了一个 IR 级别的 Pass,用于将原子指令替换为__atomic_* 库函数调用,或者替换为实现相同语义、但更适合目标后端的特定指令。这些替代方式可能包括:基于 intrinsic 的 load-linked/store-conditional 循环、AtomicCmpXchg,或者类型强制转换等。
典型的原子指令如下:
@x = global i32 ...