[LLVMdev] Redundant Add Operation in Code Generation?

Eli Friedman eli.friedman at gmail.com
Wed Oct 17 13:44:06 PDT 2012


On Wed, Oct 17, 2012 at 1:22 PM, Ryan Taylor <ryta1203 at gmail.com> wrote:
> I'm curious why I am seeing this:
>
>   %uglygep18.sum = add i32 %lsr_iv8, %tmp45
>   %scevgep19 = getelementptr i8* %parBits_017, i32 %uglygep18_sum
>   %scevgep1920 = bitcast i8* %scevgep19 to i16*
>   %tmp78 = load i16* %scevgep1920, align 2
>   %uglygep14.sum = add i32 %lsr_iv8, %tmp45
>   %scevgep15 = getelementptr i8* %extIn_013, i32 %uglygep14_sum
>   %scevgep1516 = bitcast i8* %scevgep15 to i16*
>   %tmp79 = load i16* %scevgep1516, align 2
>   %conv93.i.i = sext i16 %tmp79 to i32
>   %uglygep.sum = add i32 %lsr_iv8, %tmp45
>   %scevgep11 = getelementptr i8* %sysBits_010, i32 %uglygep_sum
>
> You can see here that "add i32 %lsr_iv8, %tmp45" is done multiple times,
> appearing that there are two redundant add operations that are not needed
> yet are generated?

CodeGenPrepare manipulates GEPs in a way that can expose redundancy
where it wasn't obvious before.

-Eli



More information about the llvm-dev mailing list