[LLVMbugs] [Bug 9816] New: DAG combiner runs optimizations when CodeGenOpt::Level = None is specified
bugzilla-daemon at llvm.org
bugzilla-daemon at llvm.org
Fri Apr 29 14:16:18 PDT 2011
http://llvm.org/bugs/show_bug.cgi?id=9816
Summary: DAG combiner runs optimizations when CodeGenOpt::Level
= None is specified
Product: libraries
Version: 2.7
Platform: PC
OS/Version: Windows NT
Status: NEW
Severity: normal
Priority: P
Component: Common Code Generator Code
AssignedTo: unassignedbugs at nondot.org
ReportedBy: micah.villmow at amd.com
CC: llvmbugs at cs.uiuc.edu
Created an attachment (id=6513)
--> (http://llvm.org/bugs/attachment.cgi?id=6513)
Patch to disable dag combine with CodeGenOpt::Level = None
The DAG combiner runs even thought the Opt level is set to None. This causes
problems with debug information as the DAG combiner does not preserve debug
information.
For example, this IR:
define void @__OpenCL_test_kernel(i32 addrspace(1)* %ip) nounwind {
entry:
call void @llvm.dbg.value(metadata !{i32 addrspace(1)* %ip}, i64 0, metadata
!7), !dbg !8
%0 = call <4 x i32> @__amdil_get_global_id_int() nounwind
%1 = extractelement <4 x i32> %0, i32 0
call void @llvm.dbg.value(metadata !{i32 %1}, i64 0, metadata !9), !dbg !11
call void @llvm.dbg.value(metadata !12, i64 0, metadata !13), !dbg !14
%tmp2 = load i32 addrspace(1)* %ip, align 4, !dbg !15
%tmp3 = add i32 0, %tmp2, !dbg !15
call void @llvm.dbg.value(metadata !{i32 %tmp3}, i64 0, metadata !13), !dbg
!15
%arrayidx = getelementptr i32 addrspace(1)* %ip, i32 %1, !dbg !16
store i32 %tmp3, i32 addrspace(1)* %arrayidx, align 4, !dbg !16
ret void, !dbg !17
}
!llvm.dbg.sp = !{!0}
!0 = metadata !{i32 589870, i32 0, metadata !1, metadata
!"__OpenCL_test_kernel", metadata !"__OpenCL_test_kernel", metadata
!"__OpenCL_test_kernel", metadata !1, i32 2, metadata !3, i1 false, i1 true,
i32 0, i32 0, i32 0, i32 0, i1 false, null} ; [ DW_TAG_subprogram ]
!1 = metadata !{i32 589865, metadata !"OCL6368.tmp.cl", metadata
!"E:\5CUsers\5Cmvillmow.AMD\5CAppData\5CLocal\5CTemp", metadata !2} ; [
DW_TAG_file_type ]
!2 = metadata !{i32 589841, i32 0, i32 1, metadata !"OCL6368.tmp.cl", metadata
!"E:\5CUsers\5Cmvillmow.AMD\5CAppData\5CLocal\5CTemp", metadata !"clc", i1
true, i1 false, metadata !"", i32 0} ; [ DW_TAG_compile_unit ]
!3 = metadata !{i32 589845, metadata !1, metadata !"", metadata !1, i32 0, i64
0, i64 0, i32 0, i32 0, i32 0, metadata !4, i32 0, i32 0} ; [
DW_TAG_subroutine_type ]
!4 = metadata !{null, metadata !5}
!5 = metadata !{i32 589839, metadata !2, metadata !"", null, i32 0, i64 32, i64
32, i64 0, i32 0, metadata !6} ; [ DW_TAG_pointer_type ]
!6 = metadata !{i32 589860, metadata !2, metadata !"unsigned int", null, i32 0,
i64 32, i64 32, i64 0, i32 0, i32 7} ; [ DW_TAG_base_type ]
!7 = metadata !{i32 590081, metadata !0, metadata !"ip", metadata !1, i32 1,
metadata !5, i32 0} ; [ DW_TAG_arg_variable ]
!8 = metadata !{i32 1, i32 42, metadata !0, null}
!9 = metadata !{i32 590080, metadata !10, metadata !"gid", metadata !1, i32 3,
metadata !6, i32 0} ; [ DW_TAG_auto_variable ]
!10 = metadata !{i32 589835, metadata !0, i32 2, i32 1, metadata !1, i32 0} ; [
DW_TAG_lexical_block ]
!11 = metadata !{i32 3, i32 41, metadata !10, null}
!12 = metadata !{i32 0}
!13 = metadata !{i32 590080, metadata !10, metadata !"idx", metadata !1, i32 4,
metadata !6, i32 0} ; [ DW_TAG_auto_variable ]
!14 = metadata !{i32 4, i32 20, metadata !10, null}
!15 = metadata !{i32 5, i32 15, metadata !10, null}
!16 = metadata !{i32 6, i32 18, metadata !10, null}
!17 = metadata !{i32 7, i32 1, metadata !0, null}
The third llvm.dbg.value is attached to %tmp3.
In combine, we visit the add here, SDValue DAGCombiner::visitADD(SDNode *N),
and the following transformation occurs:
// fold (add x, 0) -> x
if (N1C && N1C->isNullValue())
return N0;
This causes the llvm.dbg.value to be dropped and the variable does not appear
in the dwarf information not allowing the variable to be inspected at that
location.
--
Configure bugmail: http://llvm.org/bugs/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are on the CC list for the bug.
More information about the llvm-bugs
mailing list