# Understanding IR representation and argument values

**URL:** <https://discourse.julialang.org/t/understanding-ir-representation-and-argument-values/43863>\
**Category:** General Usage\
**Tags:** question, first-steps, compilation, metadata\
**Created:** [July 29, 2020, 9:32am UTC](https://discourse.julialang.org/t/understanding-ir-representation-and-argument-values/43863 "2020-07-29T09:32:51Z")\
**Posts on this page:** 1\
**Page:** 1

<div class="post-metadata">

**Author:** ![mespinosami](https://avatars.discourse-cdn.com/v4/letter/m/8baadc/32.png) [@mespinosami](https://discourse.julialang.org/u/mespinosami)\
**Post date:** [July 29, 2020, 9:32am UTC](https://discourse.julialang.org/t/understanding-ir-representation-and-argument-values/43863/1 "2020-07-29T09:32:51Z")

</div>

I am trying to understand how the IR representation exactly works and its structure. More specifically, would like to know if it is possible to access the **values** of the arguments passed to a function through the IR.  
Say for instance we consider the function:  
`foo(x) = cos(sin(cos(x)))`

I make the following assignment:  
`adj = Zygote.@code_adjoint foo(2.0)`

I print the IR of the primal:  
`println(adj.primal)`

Where are the values corresponding to the arguments? For instance, where would the value `2.0` be stored in the IR given the above example? How and when is this mapping `%2 --> 2.0` done by the compiler?
