[LLVMdev] CodeExtractor doesn't work with debugging metadata
Rudderham, Stuart
stuart.rudderham at intel.com
Wed Nov 14 14:39:55 PST 2012
Hi,
I've been experimenting with the CodeExtractor class and have been running into a problem where the verifier pass fails with the error "function-local metadata used in wrong function" when I compile with debugging symbols enabled (-g flag). The issue seems to be that after extraction we have metadata that references variables that aren't allocated in the extracted function. Example IR is below. Is this intentional or a bug?
Original IR
define i32 @Fn() nounwind {
%a = alloca i32, align 4
...
call void @llvm.dbg.declare(metadata !{i32* %a}, metadata !15), !dbg !14
%call = call i32 @Foo(), !dbg !14
store i32 %call, i32* %a, align 4, !dbg !14
After Extraction
define i32 @Fn() nounwind {
entry:
%a = alloca i32, align 4
...
call void @extractedFn(i32* %a)
define internal void @extractedFn(i32* %a) noinline {
newFuncRoot:
call void @llvm.dbg.declare(metadata !{i32* %a}, metadata !19), !dbg !14 ;; metadata now references variable not allocated in this function
%call = call i32 @Foo(), !dbg !14
store i32 %call, i32* %a, align 4, !dbg !14
Thanks,
Stuart Rudderham
More information about the llvm-dev
mailing list