[LLVMdev] Stupid '-load-vn -licm' question (LLVM 1.6)

Eric Kidd emk.lists at gmail.com
Thu Mar 16 14:16:20 PST 2006


Hello! I'm compiling code which uses pointers as iterators. For some  
reason--probably a silly misunderstanding of the docs--I can't  
eliminate duplicate pointer loads. I'll probably figure this out  
eventually, but if somebody else sees the answer instantly, I  
certainly won't complain. :-)

Here are the optimizers I'm running:

   opt -f -simplifycfg -dce -instcombine -anders-aa -load-vn -licm -o  
regex-opt.bc regex.bc

The duplicate loads appear at the top of the %regex6 and %regex2  
blocks below. I've tried various alias analysis implementations  
either alone or in combination.

Any thoughts? I'm sure that this will prove embarrassingly obvious. :-)

Cheers,
Eric

; ModuleID = 'regex-opt.bc'

implementation   ; Functions:

bool %matches(ubyte* %begin, ubyte* %end) {
entry:
         %scan_end = getelementptr ubyte* %end, int -1           ;  
<ubyte*> [#uses=1]
         br label %loop_test

regex6:         ; preds = %loop_test
         %c8 = load ubyte* %iter         ; <ubyte> [#uses=1]
         %matches9 = seteq ubyte %c8, 97         ; <bool> [#uses=1]
         br bool %matches9, label %ret_true, label %regex2

regex2:         ; preds = %regex6
         %c = load ubyte* %iter          ; <ubyte> [#uses=1]
         %matches = seteq ubyte %c, 98           ; <bool> [#uses=1]
         br bool %matches, label %ret_true, label %loop_step

loop_step:              ; preds = %regex2
         %next = getelementptr ubyte* %iter, int 1               ;  
<ubyte*> [#uses=1]
         br label %loop_test

loop_test:              ; preds = %loop_step, %entry
         %iter = phi ubyte* [ %begin, %entry ], [ %next, % 
loop_step ]           ; <ubyte*> [#uses=4]
         %done = setgt ubyte* %iter, %scan_end           ; <bool>  
[#uses=1]
         br bool %done, label %ret_false, label %regex6

ret_true:               ; preds = %regex2, %regex6
         ret bool true

ret_false:              ; preds = %loop_test
         ret bool false
}




More information about the llvm-dev mailing list