I am trying to understand more deeply the instruction selection process in llvm and for that I am debuging step-by-step the CodeGenAndEmitDAG function. I have printed a small function (see below) just before the combine step - the first step in the above function. In the graph I see blue lines and it seems that they are always pointing at "ch" , which I think means "other" machine value type. What I don't understand is the meaning of the blue lines... what is this dependency ? And, am I right about the meaning of "ch" ? is it "other" ?
相关问题
- CMakeList file to generate LLVM bitcode file from
- LLVM OPT not giving optimised file as output.
- Python numba / llvmlite on Debian 8 - i can't
- llvm::DIInstruction getFilename returns filename w
- Specifically what does a compiler do to aggressive
相关文章
- How to clone or create an AST Stmt node of clang?
- Libclang API to get function definitions defined i
- No format security warnings in Xcode 4.4
- LLVM retrieve name of AllocaInst
- In LLVM IR, I want to copy a set of Instructions a
- compiling with clang and plugin
- How to get the filename and directory from a LLVM
- At which level does one unit test lock-free code?
Dashed blue arrows represent non-dataflow dependencies between instructions and enforce specific order between them. For example, stores and loads which may access the same memory shouldn't be reordered, though there's no data dependency between them. In such cases blue arrows are used to represent such hidden dependency. These blue arrows consume chain values (ch) of type
Other
.Every DAG has a special
EntryToken
of typeOther
which supplies the initial chain value for the basic block.Consider the following example. Notice the control dependency (blue arrow) between load and store because they're allowed to point to the same memory. Also notice the red arrow (Glue) which glues two instructions together.