[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