search for: dw_op_plus_uconst

Displaying 20 results from an estimated 21 matches for "dw_op_plus_uconst".

2010 Nov 07
3
[LLVMdev] Next round of DWARF issues/questions
...9 <2>< 2258> DW_TAG_member DW_AT_name __tib DW_AT_type <2228> DW_AT_decl_file 65 DW_AT_decl_line 10 DW_AT_data_member_location DW_OP_plus_uconst 0 <2>< 2274> DW_TAG_member DW_AT_name __gcstate DW_AT_type <156> DW_AT_decl_file 65 DW_AT_decl_line 11 DW_AT_data_member_location DW_OP_p...
2010 Nov 08
0
[LLVMdev] Next round of DWARF issues/questions
...; 2258> DW_TAG_member > DW_AT_name __tib > DW_AT_type <2228> > DW_AT_decl_file 65 > DW_AT_decl_line 10 > DW_AT_data_member_location DW_OP_plus_uconst 0 > <2>< 2274> DW_TAG_member > DW_AT_name __gcstate > DW_AT_type <156> > DW_AT_decl_file 65 > DW_AT_decl_line 11 > DW_AT...
2010 Nov 09
2
[LLVMdev] Next round of DWARF issues/questions
...; 2258> DW_TAG_member > DW_AT_name __tib > DW_AT_type <2228> > DW_AT_decl_file 65 > DW_AT_decl_line 10 > DW_AT_data_member_location DW_OP_plus_uconst 0 > <2>< 2274> DW_TAG_member > DW_AT_name __gcstate > DW_AT_type <156> > DW_AT_decl_file 65 > DW_AT_decl_line 11 > DW_AT...
2010 Nov 09
0
[LLVMdev] Next round of DWARF issues/questions
...AG_member >> DW_AT_name __tib >> DW_AT_type <2228> >> DW_AT_decl_file 65 >> DW_AT_decl_line 10 >> DW_AT_data_member_location DW_OP_plus_uconst 0 >> <2>< 2274> DW_TAG_member >> DW_AT_name __gcstate >> DW_AT_type <156> >> DW_AT_decl_file 65 >> DW_AT_decl_line 11 >&g...
2018 Feb 09
0
retpoline mitigation and 6.0
...ero (it does) we je to .LBB0_10 aka .Ltmp34. At which point we happily stomp on the value of 12(%esp) by spilling something *else* over it: .LBB0_10:                               # %if.end28 .Ltmp34: #DEBUG_VALUE: mp_register_ioapic:address <- $esi #DEBUG_VALUE: mp_register_ioapic:cfg <- [DW_OP_plus_uconst 8] [$ebp+0] .loc 2 0 1 is_stmt 0         # arch/x86/kernel/apic/io_apic_b.c:0:1 movl %ebx, 12(%esp)          # 4-byte Spill movl %edi, 20(%esp)          # 4-byte Spill Compare with the noretpoline.s version where those offsets from %esp are different: .LBB0_10:                               #...
2020 Sep 16
2
[Debuginfo] Changing llvm.dbg.value and DBG_VALUE to support multiple location operands
...eceding expression is equal to an l-value. So for example: DBG_VALUE $rsp, !"x", !DIExpression(DW_OP_LLVM_direct) => DW_OP_reg7 RSP DBG_VALUE $rsp, !"x", !DIExpression(DW_OP_deref, DW_OP_LLVM_direct) => DW_OP_breg7 RSP+0 DBG_VALUE $rsp, !"x", !DIExpression(DW_OP_plus_uconst, 4, DW_OP_LLVM_direct) => DW_OP_breg7 RSP+4, DW_OP_stack_value Your point about the semantics of variable assignments in the debugger is useful, that clears up my misunderstandings. I believe that even with that in mind, LLVM_direct (or whatever name it takes) would be appropriate. If we recogn...
2018 Feb 09
2
retpoline mitigation and 6.0
On Fri, 2018-02-09 at 10:36 +0000, David Woodhouse wrote: > > Did you get anywhere with the function attribute? Having isolated the > next boot failure to "it goes away if I compile io_apic.c without > retpoline", bisecting it per-function would help to further delay the > bit where I actually have to start *thinking*... It's mp_register_ioapic(), and only when
2010 Nov 26
3
[LLVMdev] Next round of DWARF issues/questions
...AG_member >> DW_AT_name __tib >> DW_AT_type <2228> >> DW_AT_decl_file 65 >> DW_AT_decl_line 10 >> DW_AT_data_member_location DW_OP_plus_uconst 0 >> <2>< 2274> DW_TAG_member >> DW_AT_name __gcstate >> DW_AT_type <156> >> DW_AT_decl_file 65 >> DW_AT_decl_line 11 >&g...
2020 Sep 15
2
[Debuginfo] Changing llvm.dbg.value and DBG_VALUE to support multiple location operands
...othetical "DIExpression optimizer" pass applied to the following code: // `int a` is live... int b = a + 5; int c = b - 5; If both b and c are optimized out and salvaged, then we end up with the following dbg.values: @llvm.dbg.value(i32 %a, !"b", !DIExpression(DW_OP_plus_uconst, 5, DW_OP_LLVM_direct)) @llvm.dbg.value(i32 %a, !"c", !DIExpression(DW_OP_plus_uconst, 5, DW_OP_constu, 5, DW_OP_minus, DW_OP_LLVM_direct)) ; DIExpressions optimized... @llvm.dbg.value(i32 %a, !"b", !DIExpression(DW_OP_plus_uconst, 5, DW_OP_LLVM_direct)) @llvm.db...
2019 Jul 08
4
Question on Aliasing and invariant load hoisting
...Expression()), !dbg !41 %15 = getelementptr inbounds i32, i32* %11, i64 %14, !dbg !48 %16 = trunc i64 %14 to i32, !dbg !49 store i32 %16, i32* %15, align 4, !dbg !49, !tbaa !33 %17 = add nuw nsw i64 %14, 1, !dbg !50 call void @llvm.dbg.value(metadata i32 undef, metadata !26, metadata ! DIExpression(DW_OP_plus_uconst, 1, DW_OP_stack_value)), !dbg !41 %18 = load i32, i32* %8, align 4, !dbg !51, !tbaa !52 %19 = sext i32 %18 to i64, !dbg !42 %20 = icmp slt i64 %17, %19, !dbg !42 br i1 %20, label %13, label %12, !dbg !44, !llvm.loop !54 } --Snip--- Question is why the load IR and sext IR (obj.a) is not getting ho...
2010 Nov 26
0
[LLVMdev] Next round of DWARF issues/questions
...t; DW_AT_name __tib >>> DW_AT_type <2228> >>> DW_AT_decl_file 65 >>> DW_AT_decl_line 10 >>> DW_AT_data_member_location DW_OP_plus_uconst 0 >>> <2>< 2274> DW_TAG_member >>> DW_AT_name __gcstate >>> DW_AT_type <156> >>> DW_AT_decl_file 65 >>> DW_AT_decl_line...
2020 Oct 07
2
[Debuginfo] Changing llvm.dbg.value and DBG_VALUE to support multiple location operands
...ecause "directness" is already made explicit by the choice of intrinsic. Every dbg.value would implicitly be LLVM_direct unless it has another implicit location specifier (such as stack_value or implicit_ptr). This would mean that we could have a debug value: dbg.value(%a, "a", (DW_OP_plus_uconst, 5)), with no stack_value necessary, as opposed to the current case where every dbg.value with a complex expression has stack_value (I believe). As discussed, one of the key distinctions that DW_OP_LLVM_direct is used for is distinguishing between memory and register locations; this is exactly the...
2020 Sep 11
2
[Debuginfo] Changing llvm.dbg.value and DBG_VALUE to support multiple location operands
> Can you elaborate what "direct" means? I'm having trouble understanding what the opposite (a non-exact value) would be. Apologies, "exact" was a misleading/incorrect term. By direct, I mean that the expression computes the value of the variable, as opposed to its memory address, or the value that it points to. Within LLVM, where we don't have DW_OP_reg/DW_OP_breg
2018 Feb 09
3
retpoline mitigation and 6.0
.... At which point we happily stomp on > the value of 12(%esp) by spilling something *else* over it: > > .LBB0_10: # %if.end28 > .Ltmp34: > #DEBUG_VALUE: mp_register_ioapic:address <- $esi > #DEBUG_VALUE: mp_register_ioapic:cfg <- [DW_OP_plus_uconst 8] > [$ebp+0] > .loc 2 0 1 is_stmt 0 # arch/x86/kernel/apic/io_apic_ > b.c:0:1 > movl %ebx, 12(%esp) # 4-byte Spill > movl %edi, 20(%esp) # 4-byte Spill > > Compare with the noretpoline.s version where those offsets fro...
2020 Sep 15
2
[Debuginfo] Changing llvm.dbg.value and DBG_VALUE to support multiple location operands
Hi Adrian & Stephen, One thought here: But — not all memory locations are l-values. If we have a DWARF location list for variable "x" which points to a memory address for the first n instructions and the switches to a constant for the remainder of the scope, the memory address is not guaranteed to be an l-value, because writing the the memory address cannot affect the later part of
2020 Sep 02
2
[Debuginfo] Changing llvm.dbg.value and DBG_VALUE to support multiple location operands
...rpose however, I instead propose that we treat this as a special (albeit common) case: we can use `DW_OP_LLVM_arg 0, DW_OP_stack_value` with a single register operand. We already reduce the DIExpression to specialized DWARF operators at the point of DWARF emission, for example: `<Register N>, DW_OP_plus_uconst 5` becomes `DW_OP_bregN RSP+5`. If in any case where a stack value expression consists of only a single register it is valid to convert it to a register location, then this should be a valid transformation; I can't think of any cases where it wouldn't be, since if we get a variable's va...
2018 Nov 01
4
Fwd: RFC: Adding debug information to LLVM to support Fortran
...n(var: !25, expr: !DIExpression()) !29 = distinct !DIGlobalVariable(scope: !20, name: "i", file: !3, type: !28) !30 = !DIGlobalVariableExpression(var: !29, expr: !DIExpression()) !31 = distinct !DIGlobalVariable(scope: !20, name: "j", file: !3, type: !28) !32 = !DIExpression(DW_OP_plus_uconst, 4) !33 = !DIGlobalVariableExpression(var: !31, expr: !32) The DWARF generated for this is as follows. DW_TAG_common_block: DW_AT_name: alpha DW_AT_location: @alpha_+0 DW_TAG_variable: DW_AT_name: common alpha DW_AT_type: array of 8 bytes DW_AT_location: @alpha_+0 DW_TAG_variable: DW...
2020 Oct 06
2
[Debuginfo] Changing llvm.dbg.value and DBG_VALUE to support multiple location operands
> I can see how that could potentially be useful. I'm not sure how often we could practically make use of a situation like this, but I understand your motivation. Indeed, I don't expect us to cancel out DWARF expressions like that very often. Although that edge case is likely to be very rare, the _direct operator itself will appear very frequently, as it would be used for every
2020 Sep 10
2
LSR breaks debug info
...cation(line: 0, scope: <0x111dc650>) call void @llvm.dbg.value(metadata i8* undef, metadata <0x111daf20>, metadata !DIExpression()), !dbg !DILocation(line: 0, scope: <0x111d4030>) call void @llvm.dbg.value(metadata i8* undef, metadata <0x111daf20>, metadata !DIExpression(DW_OP_plus_uconst, 3, DW_OP_stack_value)), !dbg !DILocation(line: 0, scope: <0x111d4030>) store i8 %i.06, i8* %lsr.iv, align 1, !dbg !DILocation(line: 5, column: 8, scope: <0x111ddc90>), !tbaa <0x111dd288> %inc = add nuw nsw i8 %i.06, 1, !dbg !DILocation(line: 3, column: 38, scope: <0x111dd5...
2020 Feb 25
2
[RFC] DebugInfo: A different way of specifying variable locations post-isel
Hi Vedant, thanks for the detailed response, On Tue, Feb 25, 2020 at 7:23 AM Vedant Kumar <vedant_kumar at apple.com> wrote: > > Finally, being forced to always specify both the machine location and > > the program location at the same time (in a single DBG_VALUE) > > introduces un-necessary burdens. In MachineSink, when we sink between > > blocks an instruction that