-dse: Dead Store Elimination

Description

-dse 的目的是 remove unnecessary store instructions。 如何判断 store 是不是 necessary 的呢? 如果没有被之后的 instruction 读取到,那么它就是 unnecessary 的。 在 LLVM 的 transformation pass 中,这种情况比较少见(因为在 compile 的过程中,没有被后续读取的话也不会存的),所以这个 pass 比较 trivial,只看 basic block 内部的关系。

Code Example

从 code 上看很好理解,在下面的 basic block 中,因为这个 store 没啥意义,所以直接删了。

原始的 IR code。

define i32 @example(i32 %a, i32 %b) {
    %sum = add i32 %a, %b   ; Compute the sum
    store i32 10, i32* %addr1     ; Store the value 10 in memory location addr1
    %result = add i32 %sum, %b    ; Compute the final result
    ret i32 %result
}

-dse transform 的 IR code。

define i32 @example(i32 %a, i32 %b) {
    %sum = add i32 %a, %b   ; Compute the sum
    %result = add i32 %sum, %b    ; Compute the final result
    ret i32 %result
}