[llvm-dev] [DebugInfo] FP Constants representation

Tomar, Sourabh Singh via llvm-dev llvm-dev at lists.llvm.org
Tue May 18 05:50:52 PDT 2021


[AMD Public Use]

Hello Everyone,

I’ve started investigating representation of named FP constants in `DIExpression`. A similar approach has been
tried and deployed in https://reviews.llvm.org/D99273 for named **integer** constants.

I'm trying to represent named FP constants as:
```
!4 = !DIGlobalVariableExpression(var: !5, expr: (DW_OP_consts, **2.888000e+03**, DW_OP_stack_value))
!5 = distinct !DIGlobalVariable(name: "real_constant",  scope: !2, file: !3, line: 3, type: !9, isLocal: false, isDefinition: true)

Which should materialize in dwarf as:
    DW_TAG_variable 
         DW_AT_name "real_constant")
          DW_AT_type  "const real(kind=4)")
          DW_AT_const_value [DW_FORM_block1]    (<0x04> 00 80 34 45 )
```

While trying this I got stumbled upon `DIExpression` limitation(Or it could be a design choice also ?). It seems that `DIExpression`  only accepts
`uint64_t` as its potential elements thereby leaving no room for things like FP constants to be inside.
Digging in further, I realized that extending `DIExpression` for FP constants is non-trivial/maybe breaking also ?

I need to have your/community thoughts on this approach or some other potential approach 😊

**NOTE**: Named constants are extensively used in FORTRAN, but having this support should benefit other
potential languages/FE also.

Thanks a lot!
Sourabh.


More information about the llvm-dev mailing list