<commit_before>* Must update PHI node to have a pair between predecessor and value.
* Enhance BB to make predecessor handling easier (to update PHI nodes)
* Must add BB iterator to iterate depth first, and reverse depth first
* Move getBinaryOperator from Instruction to BinaryOperator
* Provide a pass that eliminates critical edges from the CFG
* Provide a print hook to print out xvcg format files for vis
* I need to provide an option to the bytecode loader to ignore memory 
  dependance edges.  Instead, the VM would just treat memory operations 
  (load, store, getfield, putfield, call) as pinned instructions.
* I need to have a way to prevent taking the address of a constant pool
  reference.  You should only be able to take the address of a variable.
  Maybe taking the address of a constant copies it?  What about virtual 
  function tables?  Maybe a const pointer would be better...
* Structures should be accessed something like this: ubyte is ok.  Limits 
  structure size to 256 members.  This can be fixed later by either: 
    1. adding varient that takes ushort
    2. Splitting structures into nested structures each of half size
  <float> %f = loadfield *{int, {float}} Str, ubyte 1, ubyte 0
  storefield float %f, *{int, {float}} Str, ubyte 1, ubyte 0
* I'm noticing me writing a lot of code that looks like this (dtor material here):
  ConstPool.dropAllReferences();
  ConstPool.delete_all();
  ConstPool.setParent(0);
  ~ConstPool

* Need a way to attach bytecode block info at various levels of asm code.
* Rename "ConstantPool" to "ConstPool"<commit_msg>I actually got something done<commit_after>* Must update PHI node to have a pair between predecessor and value.
* Enhance BB to make predecessor handling easier (to update PHI nodes)
* Provide a pass that eliminates critical edges from the CFG
* Provide a print hook to print out xvcg format files for vis
* I need to provide an option to the bytecode loader to ignore memory 
  dependance edges.  Instead, the VM would just treat memory operations 
  (load, store, getfield, putfield, call) as pinned instructions.
* I need to have a way to prevent taking the address of a constant pool
  reference.  You should only be able to take the address of a variable.
  Maybe taking the address of a constant copies it?  What about virtual 
  function tables?  Maybe a const pointer would be better...
* Structures should be accessed something like this: ubyte is ok.  Limits 
  structure size to 256 members.  This can be fixed later by either: 
    1. adding varient that takes ushort
    2. Splitting structures into nested structures each of half size
  <float> %f = loadfield *{int, {float}} Str, ubyte 1, ubyte 0
  storefield float %f, *{int, {float}} Str, ubyte 1, ubyte 0
* I'm noticing me writing a lot of code that looks like this (dtor material here):
  ConstPool.dropAllReferences();
  ConstPool.delete_all();
  ConstPool.setParent(0);
  ~ConstPool

* Need a way to attach bytecode block info at various levels of asm code.
* Rename "ConstantPool" to "ConstPool"
{'fraction_non_alphanumeric': 0.05477205641193834, 'fraction_numerical': 0.0065595277140045915, 'mean_word_length': 4.0247116968698515, 'pattern_counts': {'":': 0, '<': 5, '<?xml version=': 0, '>': 5, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '5481004', 'n_tokens_mistral': 848, 'n_tokens_neox': 812, 'n_words': 465}