[LLVMdev] Version 1.9 SSA form question

Schimmel, Mark mark.schimmel at windriver.com
Thu Mar 1 15:36:10 PST 2007


int %nlz10(uint %param.x) {
        %.t3 = shr uint %param.x, ubyte 1               ; <uint>
[#uses=1]
        %.t4 = or uint %.t3, %param.x           ; <uint> [#uses=2]
        %.t7 = shr uint %.t4, ubyte 2           ; <uint> [#uses=1]
        %.t8 = or uint %.t7, %.t4               ; <uint> [#uses=2]
        %.t11 = shr uint %.t8, ubyte 4          ; <uint> [#uses=1]
        %.t12 = or uint %.t11, %.t8             ; <uint> [#uses=2]
        %.t15 = shr uint %.t12, ubyte 8         ; <uint> [#uses=1]
        %.t16 = or uint %.t15, %.t12            ; <uint> [#uses=2]
        %.t19 = shr uint %.t16, ubyte 16                ; <uint>
[#uses=1]
        %.t20 = or uint %.t19, %.t16            ; <uint> [#uses=1]
        %.t22 = mul uint %.t20, 116069625               ; <uint>
[#uses=1]
        %.t25 = shr uint %.t22, ubyte 26                ; <uint>
[#uses=1]
        %.t28 = getelementptr [64 x ubyte]* %table, int 0, uint %.t25
; <ubyte*> [#uses=1]
        %.t28 = load ubyte* %.t28               ; <ubyte> [#uses=1]
        %.t31 = cast ubyte %.t28 to int         ; <int> [#uses=1]
        ret int %.t31
} 

This is the disassembled output after running the optimizer.  How can
%.t28 be written to twice?  That isn't my understanding of SSA.

Here's another similar situation:

        %x.2.i73 = cast uint %x.2.i73 to int            ; <int>
[#uses=1]

Why are we not assigning to a different ssa var?





More information about the llvm-dev mailing list