[LLVMdev] InstCombine Question
    David Greene 
    dag at cray.com
       
    Fri Apr  4 11:42:00 PDT 2008
    
    
  
On Friday 04 April 2008 13:07, Chris Lattner wrote:
> > So how does the undef store to null appear in the IR when it isn't
> > attached anywhere and how can I get rid of it?
>
> Don't do undefined behavior? :)
I don't think it's undefined behavior.  Right before instcombine, we have 
this:
	%r60 = load <2 x i64>* %"$LCS_1", align 16		; <<2 x i64>> [#uses=2]	;  
srcLine 41
	%r61 = extractelement <2 x i64> %r60, i32 0		; <i64> [#uses=1]	;  srcLine 41
	%r62 = getelementptr <2 x double>* null, i32 0, i64 %r61		; <double*> 
[#uses=1]	;  srcLine 41
	%r63 = load double* %r62		; <double> [#uses=1]	;  srcLine 41
So we're loading a vector of pointers and then using getelementptr as
basically a reg-reg copy with a cast (I think).  Yes, it's a little weird, but 
legal  AFAICS.
I'm not sure if the above code is really kosher.  It is very strange to see 
the typing of the extractelement and GEP here.
But instcombine only looks at the first operand to GEP, sees it's null and
just assumes it's useless code.  Not the case in this example.
So I think this is actually a bug in instcombine and maybe elsewhere as 
well.  What  do you think?
                                                -Dave
    
    
More information about the llvm-dev
mailing list