From 26be14f7ee2fa94c09e14715bc6591e0312769fa Mon Sep 17 00:00:00 2001
From: jespergravgaard <jesper@balmangravgaard.dk>
Date: Tue, 7 Jan 2020 08:28:57 +0100
Subject: [PATCH] Working on improvements regarding global initializers and
 unnecessary unwinding of constant structs. Moved most unwinding to separate
 package.

---
 .../java/dk/camelot64/kickc/Compiler.java     |  1 -
 .../kickc/model/StructUnwinding.java          |  2 +-
 .../passes/Pass1UnwindStructVersions.java     | 60 -------------------
 .../dk/camelot64/kickc/test/TestPrograms.java |  2 +-
 .../ref/complex/clearscreen/clearscreen.log   |  2 -
 .../ref/complex/splines/truetype-splines.log  |  2 -
 src/test/ref/declared-memory-var-3.log        |  1 -
 src/test/ref/declared-memory-var-4.log        |  1 -
 src/test/ref/declared-memory-var-5.log        |  1 -
 src/test/ref/parse-negated-struct-ref.log     |  1 -
 src/test/ref/struct-13.log                    |  1 -
 src/test/ref/struct-15.log                    |  2 -
 src/test/ref/struct-16.log                    |  1 -
 src/test/ref/struct-17.log                    |  1 -
 src/test/ref/struct-18.log                    |  1 -
 src/test/ref/struct-19.log                    |  3 -
 src/test/ref/struct-20.log                    |  3 -
 src/test/ref/struct-21.log                    |  1 -
 src/test/ref/struct-22.log                    |  2 -
 src/test/ref/struct-23.log                    |  4 --
 src/test/ref/struct-24.log                    |  1 -
 src/test/ref/struct-26.log                    |  2 -
 src/test/ref/struct-27.log                    |  1 -
 src/test/ref/struct-28.log                    |  1 -
 src/test/ref/struct-29.log                    |  1 -
 src/test/ref/struct-5.log                     |  2 -
 src/test/ref/struct-ptr-12.log                |  1 -
 src/test/ref/struct-ptr-14.log                |  1 -
 src/test/ref/struct-ptr-16.log                |  4 --
 src/test/ref/struct-ptr-17.log                |  2 -
 src/test/ref/struct-ptr-19.log                |  1 -
 31 files changed, 2 insertions(+), 107 deletions(-)
 delete mode 100644 src/main/java/dk/camelot64/kickc/passes/Pass1UnwindStructVersions.java

diff --git a/src/main/java/dk/camelot64/kickc/Compiler.java b/src/main/java/dk/camelot64/kickc/Compiler.java
index ff79fd7ec..6fe5caa0c 100644
--- a/src/main/java/dk/camelot64/kickc/Compiler.java
+++ b/src/main/java/dk/camelot64/kickc/Compiler.java
@@ -245,7 +245,6 @@ public class Compiler {
 
       program.setGraph(new Pass1ProcedureCallsReturnValue(program).generate());
       new PassNUnwindLValueLists(program).execute();
-      new Pass1UnwindStructVersions(program).execute();
 
       getLog().append("\nCONTROL FLOW GRAPH SSA");
       getLog().append(program.getGraph().toString(program));
diff --git a/src/main/java/dk/camelot64/kickc/model/StructUnwinding.java b/src/main/java/dk/camelot64/kickc/model/StructUnwinding.java
index c7477fde0..f2d3650ae 100644
--- a/src/main/java/dk/camelot64/kickc/model/StructUnwinding.java
+++ b/src/main/java/dk/camelot64/kickc/model/StructUnwinding.java
@@ -89,7 +89,7 @@ public class StructUnwinding {
 
             @Override
             public boolean isBulkCopyable() {
-               return getArraySpec()!=null || getSymbolType() instanceof SymbolTypeStruct;
+               return getArraySpec()!=null;
             }
 
             @Override
diff --git a/src/main/java/dk/camelot64/kickc/passes/Pass1UnwindStructVersions.java b/src/main/java/dk/camelot64/kickc/passes/Pass1UnwindStructVersions.java
deleted file mode 100644
index fb4ebaf10..000000000
--- a/src/main/java/dk/camelot64/kickc/passes/Pass1UnwindStructVersions.java
+++ /dev/null
@@ -1,60 +0,0 @@
-package dk.camelot64.kickc.passes;
-
-import dk.camelot64.kickc.model.ControlFlowBlock;
-import dk.camelot64.kickc.model.Program;
-import dk.camelot64.kickc.model.StructUnwinding;
-import dk.camelot64.kickc.model.statements.Statement;
-import dk.camelot64.kickc.model.statements.StatementAssignment;
-import dk.camelot64.kickc.model.symbols.StructDefinition;
-import dk.camelot64.kickc.model.symbols.Variable;
-import dk.camelot64.kickc.model.types.SymbolTypeStruct;
-import dk.camelot64.kickc.model.values.RValue;
-import dk.camelot64.kickc.model.values.StructUnwoundPlaceholder;
-import dk.camelot64.kickc.model.values.VariableRef;
-
-import java.util.Collection;
-import java.util.Iterator;
-import java.util.List;
-
-/** Find the versioned unwound structs - and update the StructUnwinding data structure */
-public class Pass1UnwindStructVersions extends Pass1Base {
-
-   public Pass1UnwindStructVersions(Program program) {
-      super(program);
-   }
-
-   @Override
-   public boolean step() {
-      boolean modified = false;
-      StructUnwinding structUnwinding = getProgram().getStructUnwinding();
-      for(ControlFlowBlock block : getGraph().getAllBlocks()) {
-         for(Statement statement : block.getStatements()) {
-            if(statement instanceof StatementAssignment) {
-               StatementAssignment assignment = (StatementAssignment) statement;
-               if(assignment.getOperator() == null && assignment.getlValue() instanceof VariableRef && assignment.getrValue2() instanceof StructUnwoundPlaceholder) {
-                  VariableRef structVarRef = (VariableRef) assignment.getlValue();
-                  if(structUnwinding.getVariableUnwinding(structVarRef) == null) {
-                     StructUnwoundPlaceholder placeholder = (StructUnwoundPlaceholder) assignment.getrValue2();
-                     SymbolTypeStruct typeStruct = placeholder.getTypeStruct();
-                     StructDefinition structDefinition = typeStruct.getStructDefinition(getProgram().getScope());
-                     StructUnwinding.VariableUnwinding versionedUnwinding = structUnwinding.createVariableUnwinding(structVarRef, structDefinition);
-                     Collection<Variable> members = structDefinition.getAllVariables(false);
-                     Iterator<Variable> memberDefIt = members.iterator();
-                     List<RValue> unwoundMembers = placeholder.getUnwoundMembers();
-                     Iterator<RValue> memberUnwoundIt = unwoundMembers.iterator();
-                     while(memberDefIt.hasNext()) {
-                        Variable memberVar = memberDefIt.next();
-                        RValue memberVal = memberUnwoundIt.next();
-                        versionedUnwinding.setMemberUnwinding(memberVar.getLocalName(), memberVal);
-                     }
-                     getLog().append("Adding versioned struct unwinding for "+assignment.getlValue().toString(getProgram()));
-                     modified = true;
-                  }
-               }
-            }
-         }
-      }
-      return modified;
-   }
-
-}
diff --git a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java
index da34d2f83..eb7a97839 100644
--- a/src/test/java/dk/camelot64/kickc/test/TestPrograms.java
+++ b/src/test/java/dk/camelot64/kickc/test/TestPrograms.java
@@ -1199,7 +1199,7 @@ public class TestPrograms {
 
    @Test
    public void testStruct17() throws IOException, URISyntaxException {
-      compileAndCompare("struct-17", log());
+      compileAndCompare("struct-17");
    }
 
    @Test
diff --git a/src/test/ref/complex/clearscreen/clearscreen.log b/src/test/ref/complex/clearscreen/clearscreen.log
index f8a4a70e1..f442a2ccf 100644
--- a/src/test/ref/complex/clearscreen/clearscreen.log
+++ b/src/test/ref/complex/clearscreen/clearscreen.log
@@ -191,8 +191,6 @@ Culled Empty Block (label) @35
 Culled Empty Block (label) @36
 Unwinding list assignment { (byte~) main::$5_x, (byte~) main::$5_y, (byte~) main::$5_dist } ← { (byte) getCharToProcess::return_x, (byte) getCharToProcess::return_y, (byte) getCharToProcess::return_dist }
 Unwinding list assignment { (byte) getCharToProcess::return_x#0, (byte) getCharToProcess::return_y#0, (byte) getCharToProcess::return_dist#0 } ← { (byte) getCharToProcess::return_x#2, (byte) getCharToProcess::return_y#2, (byte) getCharToProcess::return_dist#2 }
-Adding versioned struct unwinding for (struct ProcessingChar) getCharToProcess::return#0
-Adding versioned struct unwinding for (struct ProcessingChar) getCharToProcess::return#1
 
 CONTROL FLOW GRAPH SSA
 @begin: scope:[]  from
diff --git a/src/test/ref/complex/splines/truetype-splines.log b/src/test/ref/complex/splines/truetype-splines.log
index 5deb50fed..f8ea60a2a 100644
--- a/src/test/ref/complex/splines/truetype-splines.log
+++ b/src/test/ref/complex/splines/truetype-splines.log
@@ -504,8 +504,6 @@ Unwinding list assignment { (signed word~) show_letter::$2_x, (signed word~) sho
 Unwinding list assignment { (signed word~) show_letter::$7_x, (signed word~) show_letter::$7_y } ← { (signed word) rotate::return_x, (signed word) rotate::return_y }
 Unwinding list assignment { (signed word) rotate::return_x#0, (signed word) rotate::return_y#0 } ← { (signed word) rotate::return_x#3, (signed word) rotate::return_y#3 }
 Unwinding list assignment { (signed word) rotate::return_x#1, (signed word) rotate::return_y#1 } ← { (signed word) rotate::return_x#3, (signed word) rotate::return_y#3 }
-Adding versioned struct unwinding for (struct SplineVector16) rotate::return#0
-Adding versioned struct unwinding for (struct SplineVector16) rotate::return#1
 
 CONTROL FLOW GRAPH SSA
 @begin: scope:[]  from
diff --git a/src/test/ref/declared-memory-var-3.log b/src/test/ref/declared-memory-var-3.log
index 622e51035..58efad553 100644
--- a/src/test/ref/declared-memory-var-3.log
+++ b/src/test/ref/declared-memory-var-3.log
@@ -4,7 +4,6 @@ Adding struct value member variable copy *((byte*)&(struct foo) bar+(const byte)
 Rewriting struct pointer member access *((struct foo*) main::barp).thing1
 Rewriting struct pointer member access *((struct foo*) main::barp).thing2
 Identified constant variable (struct foo*) main::barp
-Adding versioned struct unwinding for (struct foo) bar
 
 CONTROL FLOW GRAPH SSA
 @begin: scope:[]  from
diff --git a/src/test/ref/declared-memory-var-4.log b/src/test/ref/declared-memory-var-4.log
index 5b4422488..80852bee5 100644
--- a/src/test/ref/declared-memory-var-4.log
+++ b/src/test/ref/declared-memory-var-4.log
@@ -11,7 +11,6 @@ Rewriting struct pointer member access *((struct foo*) main::barp).thing2
 Rewriting struct pointer member access *((struct foo*) main::barp).thing3
 Identified constant variable (struct foo*) main::barp
 Culled Empty Block (label) main::@2
-Adding versioned struct unwinding for (struct foo) bar
 
 CONTROL FLOW GRAPH SSA
 @begin: scope:[]  from
diff --git a/src/test/ref/declared-memory-var-5.log b/src/test/ref/declared-memory-var-5.log
index ebd4432f1..e1e8f8e2d 100644
--- a/src/test/ref/declared-memory-var-5.log
+++ b/src/test/ref/declared-memory-var-5.log
@@ -2,7 +2,6 @@ Adding struct value member variable copy *((byte*)&(struct foo) bar+(const byte)
 Adding struct value member variable copy *((byte*)&(struct foo) bar+(const byte) OFFSET_STRUCT_FOO_THING2) ← (byte) 'b'
 Replacing struct member reference (struct foo) bar.thing1 with member unwinding reference *((byte*)&(struct foo) bar+(const byte) OFFSET_STRUCT_FOO_THING1)
 Replacing struct member reference (struct foo) bar.thing2 with member unwinding reference *((byte*)&(struct foo) bar+(const byte) OFFSET_STRUCT_FOO_THING2)
-Adding versioned struct unwinding for (struct foo) bar
 
 CONTROL FLOW GRAPH SSA
 @begin: scope:[]  from
diff --git a/src/test/ref/parse-negated-struct-ref.log b/src/test/ref/parse-negated-struct-ref.log
index 44ac78bc0..9659ae3b6 100644
--- a/src/test/ref/parse-negated-struct-ref.log
+++ b/src/test/ref/parse-negated-struct-ref.log
@@ -5,7 +5,6 @@ Adding struct value member variable copy (byte) aa_b ← (byte) 1
 Rewriting struct pointer member access *((struct A*) main::a).b
 Warning! Adding boolean cast to non-boolean sub-expression *((byte*~) main::$2)
 Identified constant variable (struct A*) main::a
-Adding versioned struct unwinding for (struct A) aa#0
 
 CONTROL FLOW GRAPH SSA
 @begin: scope:[]  from
diff --git a/src/test/ref/struct-13.log b/src/test/ref/struct-13.log
index 4364ddb09..9361b1a2a 100644
--- a/src/test/ref/struct-13.log
+++ b/src/test/ref/struct-13.log
@@ -4,7 +4,6 @@ Replacing struct member reference (struct Point) point.x with member unwinding r
 Replacing struct member reference (struct Point) point.y with member unwinding reference *((byte*)&(struct Point) point+(const byte) OFFSET_STRUCT_POINT_Y)
 Replacing struct member reference (struct Point) point.x with member unwinding reference *((byte*)&(struct Point) point+(const byte) OFFSET_STRUCT_POINT_X)
 Replacing struct member reference (struct Point) point.y with member unwinding reference *((byte*)&(struct Point) point+(const byte) OFFSET_STRUCT_POINT_Y)
-Adding versioned struct unwinding for (struct Point) point
 
 CONTROL FLOW GRAPH SSA
 @begin: scope:[]  from
diff --git a/src/test/ref/struct-15.log b/src/test/ref/struct-15.log
index 73cae0118..a06fd772d 100644
--- a/src/test/ref/struct-15.log
+++ b/src/test/ref/struct-15.log
@@ -6,8 +6,6 @@ Replacing struct member reference (struct Point) main::point1.x with member unwi
 Replacing struct member reference (struct Point) main::point1.y with member unwinding reference *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_Y)
 Replacing struct member reference (struct Point) main::point2.x with member unwinding reference *((byte*)&(struct Point) main::point2+(const byte) OFFSET_STRUCT_POINT_X)
 Replacing struct member reference (struct Point) main::point2.y with member unwinding reference *((byte*)&(struct Point) main::point2+(const byte) OFFSET_STRUCT_POINT_Y)
-Adding versioned struct unwinding for (struct Point) main::point1
-Adding versioned struct unwinding for (struct Point) main::point2
 
 CONTROL FLOW GRAPH SSA
 @begin: scope:[]  from
diff --git a/src/test/ref/struct-16.log b/src/test/ref/struct-16.log
index 130503b27..ce3ecdd3b 100644
--- a/src/test/ref/struct-16.log
+++ b/src/test/ref/struct-16.log
@@ -2,7 +2,6 @@ Adding struct value member variable copy *((byte*)&(struct Point) main::point1+(
 Adding struct value member variable copy *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_Y) ← (byte) 3
 Replacing struct member reference (struct Point) main::point1.x with member unwinding reference *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_X)
 Replacing struct member reference (struct Point) main::point1.y with member unwinding reference *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_Y)
-Adding versioned struct unwinding for (struct Point) main::point1
 
 CONTROL FLOW GRAPH SSA
 @begin: scope:[]  from
diff --git a/src/test/ref/struct-17.log b/src/test/ref/struct-17.log
index c2c895a8e..c981eefec 100644
--- a/src/test/ref/struct-17.log
+++ b/src/test/ref/struct-17.log
@@ -20,7 +20,6 @@ Rewriting struct pointer member access *((struct Point*)&(struct Vector) main::v
 Rewriting struct pointer member access *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P).y
 Rewriting struct pointer member access *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q).x
 Rewriting struct pointer member access *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q).y
-Adding versioned struct unwinding for (struct Vector) main::v
 
 CONTROL FLOW GRAPH SSA
 @begin: scope:[]  from
diff --git a/src/test/ref/struct-18.log b/src/test/ref/struct-18.log
index 86e344fe2..3a4bf478c 100644
--- a/src/test/ref/struct-18.log
+++ b/src/test/ref/struct-18.log
@@ -12,7 +12,6 @@ Rewriting struct pointer member access *((struct Point*)&(struct Vector) main::v
 Rewriting struct pointer member access *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P).y
 Rewriting struct pointer member access *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q).x
 Rewriting struct pointer member access *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q).y
-Adding versioned struct unwinding for (struct Vector) main::v
 
 CONTROL FLOW GRAPH SSA
 @begin: scope:[]  from
diff --git a/src/test/ref/struct-19.log b/src/test/ref/struct-19.log
index 6f28c023d..7b808be2d 100644
--- a/src/test/ref/struct-19.log
+++ b/src/test/ref/struct-19.log
@@ -22,9 +22,6 @@ Rewriting struct pointer member access *((struct Point*)&(struct Vector) main::v
 Rewriting struct pointer member access *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P).y
 Rewriting struct pointer member access *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q).x
 Rewriting struct pointer member access *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q).y
-Adding versioned struct unwinding for (struct Vector) main::v
-Adding versioned struct unwinding for (struct Point) main::p1
-Adding versioned struct unwinding for (struct Point) main::p2
 
 CONTROL FLOW GRAPH SSA
 @begin: scope:[]  from
diff --git a/src/test/ref/struct-20.log b/src/test/ref/struct-20.log
index 1f6880d3c..1cb8fddd7 100644
--- a/src/test/ref/struct-20.log
+++ b/src/test/ref/struct-20.log
@@ -16,9 +16,6 @@ Rewriting struct pointer member access *((struct Point*)&(struct Vector) main::v
 Rewriting struct pointer member access *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_P).y
 Rewriting struct pointer member access *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q).x
 Rewriting struct pointer member access *((struct Point*)&(struct Vector) main::v+(const byte) OFFSET_STRUCT_VECTOR_Q).y
-Adding versioned struct unwinding for (struct Point) main::p1
-Adding versioned struct unwinding for (struct Point) main::p2
-Adding versioned struct unwinding for (struct Vector) main::v
 
 CONTROL FLOW GRAPH SSA
 @begin: scope:[]  from
diff --git a/src/test/ref/struct-21.log b/src/test/ref/struct-21.log
index 7752ca850..f8ccb6019 100644
--- a/src/test/ref/struct-21.log
+++ b/src/test/ref/struct-21.log
@@ -4,7 +4,6 @@ Adding struct value member variable copy *((byte*)&(struct Point) main::point1+(
 Rewriting struct pointer member access *((struct Point*) main::ptr).x
 Rewriting struct pointer member access *((struct Point*) main::ptr).y
 Identified constant variable (struct Point*) main::ptr
-Adding versioned struct unwinding for (struct Point) main::point1
 
 CONTROL FLOW GRAPH SSA
 @begin: scope:[]  from
diff --git a/src/test/ref/struct-22.log b/src/test/ref/struct-22.log
index 4db68c3e5..8d3d1eef6 100644
--- a/src/test/ref/struct-22.log
+++ b/src/test/ref/struct-22.log
@@ -11,8 +11,6 @@ Converted procedure struct value parameter to member unwinding in call (void~) m
 Replacing struct member reference (struct Point) print::p.x with member unwinding reference (byte) print::p_x
 Replacing struct member reference (struct Point) print::p.y with member unwinding reference (byte) print::p_y
 Culled Empty Block (label) @1
-Adding versioned struct unwinding for (struct Point) main::point1
-Adding versioned struct unwinding for (struct Point) main::point2
 
 CONTROL FLOW GRAPH SSA
 @begin: scope:[]  from
diff --git a/src/test/ref/struct-23.log b/src/test/ref/struct-23.log
index d1f52dc8d..6a01f7f4f 100644
--- a/src/test/ref/struct-23.log
+++ b/src/test/ref/struct-23.log
@@ -33,10 +33,6 @@ Unwinding list assignment { (byte~) main::$0_x, (byte~) main::$0_y } ← { (byte
 Unwinding list assignment { (byte~) main::$1_x, (byte~) main::$1_y } ← { (byte) getPoint::return_x, (byte) getPoint::return_y }
 Unwinding list assignment { (byte) getPoint::return_x#0, (byte) getPoint::return_y#0 } ← { (byte) getPoint::return_x#3, (byte) getPoint::return_y#3 }
 Unwinding list assignment { (byte) getPoint::return_x#1, (byte) getPoint::return_y#1 } ← { (byte) getPoint::return_x#3, (byte) getPoint::return_y#3 }
-Adding versioned struct unwinding for (struct Point) main::point1
-Adding versioned struct unwinding for (struct Point) main::point2
-Adding versioned struct unwinding for (struct Point) getPoint::return#0
-Adding versioned struct unwinding for (struct Point) getPoint::return#1
 
 CONTROL FLOW GRAPH SSA
 @begin: scope:[]  from
diff --git a/src/test/ref/struct-24.log b/src/test/ref/struct-24.log
index 959c132ce..4a9df89f2 100644
--- a/src/test/ref/struct-24.log
+++ b/src/test/ref/struct-24.log
@@ -9,7 +9,6 @@ Replacing struct member reference (struct Point) main::point1.initials with memb
 Replacing struct member reference (struct Point) main::point1.x with member unwinding reference *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_X)
 Replacing struct member reference (struct Point) main::point1.initials with member unwinding reference (byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_INITIALS
 Replacing struct member reference (struct Point) main::point1.initials with member unwinding reference (byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_INITIALS
-Adding versioned struct unwinding for (struct Point) main::point1
 
 CONTROL FLOW GRAPH SSA
 @begin: scope:[]  from
diff --git a/src/test/ref/struct-26.log b/src/test/ref/struct-26.log
index 5f7cd8a3d..2127dd975 100644
--- a/src/test/ref/struct-26.log
+++ b/src/test/ref/struct-26.log
@@ -12,8 +12,6 @@ Replacing struct member reference (struct Point) main::point1.initials with memb
 Replacing struct member reference (struct Point) main::point2.x with member unwinding reference *((byte*)&(struct Point) main::point2+(const byte) OFFSET_STRUCT_POINT_X)
 Replacing struct member reference (struct Point) main::point2.initials with member unwinding reference (byte*)&(struct Point) main::point2+(const byte) OFFSET_STRUCT_POINT_INITIALS
 Replacing struct member reference (struct Point) main::point2.initials with member unwinding reference (byte*)&(struct Point) main::point2+(const byte) OFFSET_STRUCT_POINT_INITIALS
-Adding versioned struct unwinding for (struct Point) main::point1
-Adding versioned struct unwinding for (struct Point) main::point2
 
 CONTROL FLOW GRAPH SSA
 @begin: scope:[]  from
diff --git a/src/test/ref/struct-27.log b/src/test/ref/struct-27.log
index 1f970f070..d9aa0048e 100644
--- a/src/test/ref/struct-27.log
+++ b/src/test/ref/struct-27.log
@@ -6,7 +6,6 @@ Adding struct value member variable copy *((byte*)&(struct Point) main::point1+(
 Replacing struct member reference (struct Point) main::point1.x with member unwinding reference *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_X)
 Replacing struct member reference (struct Point) main::point1.initials with member unwinding reference (byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_INITIALS
 Replacing struct member reference (struct Point) main::point1.initials with member unwinding reference (byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_INITIALS
-Adding versioned struct unwinding for (struct Point) main::point1
 
 CONTROL FLOW GRAPH SSA
 @begin: scope:[]  from
diff --git a/src/test/ref/struct-28.log b/src/test/ref/struct-28.log
index 004a08cc9..9fc35107f 100644
--- a/src/test/ref/struct-28.log
+++ b/src/test/ref/struct-28.log
@@ -6,7 +6,6 @@ Adding struct value member variable copy *((byte*)&(struct Point) main::point1+(
 Replacing struct member reference (struct Point) main::point1.x with member unwinding reference *((byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_X)
 Replacing struct member reference (struct Point) main::point1.initials with member unwinding reference (byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_INITIALS
 Replacing struct member reference (struct Point) main::point1.initials with member unwinding reference (byte*)&(struct Point) main::point1+(const byte) OFFSET_STRUCT_POINT_INITIALS
-Adding versioned struct unwinding for (struct Point) main::point1
 
 CONTROL FLOW GRAPH SSA
 @begin: scope:[]  from
diff --git a/src/test/ref/struct-29.log b/src/test/ref/struct-29.log
index 2a15b83e4..f5fa56503 100644
--- a/src/test/ref/struct-29.log
+++ b/src/test/ref/struct-29.log
@@ -6,7 +6,6 @@ Adding struct value member variable copy *((byte*)&(struct Point) point1+(const
 Replacing struct member reference (struct Point) point1.x with member unwinding reference *((byte*)&(struct Point) point1+(const byte) OFFSET_STRUCT_POINT_X)
 Replacing struct member reference (struct Point) point1.initials with member unwinding reference (byte*)&(struct Point) point1+(const byte) OFFSET_STRUCT_POINT_INITIALS
 Replacing struct member reference (struct Point) point1.initials with member unwinding reference (byte*)&(struct Point) point1+(const byte) OFFSET_STRUCT_POINT_INITIALS
-Adding versioned struct unwinding for (struct Point) point1
 
 CONTROL FLOW GRAPH SSA
 @begin: scope:[]  from
diff --git a/src/test/ref/struct-5.log b/src/test/ref/struct-5.log
index d85f726e7..4af9e550c 100644
--- a/src/test/ref/struct-5.log
+++ b/src/test/ref/struct-5.log
@@ -30,8 +30,6 @@ Culled Empty Block (label) @1
 Culled Empty Block (label) point::@1
 Unwinding list assignment { (byte~) main::$0_x, (byte~) main::$0_y } ← { (byte) point::return_x, (byte) point::return_y }
 Unwinding list assignment { (byte) point::return_x#0, (byte) point::return_y#0 } ← { (byte) point::return_x#2, (byte) point::return_y#2 }
-Adding versioned struct unwinding for (struct Point) point::return#0
-Adding versioned struct unwinding for (struct Point) point::return#1
 
 CONTROL FLOW GRAPH SSA
 @begin: scope:[]  from
diff --git a/src/test/ref/struct-ptr-12.log b/src/test/ref/struct-ptr-12.log
index 51a324d5e..61b578adb 100644
--- a/src/test/ref/struct-ptr-12.log
+++ b/src/test/ref/struct-ptr-12.log
@@ -4,7 +4,6 @@ Adding struct value member variable copy *((byte*)&(struct Point) main::p+(const
 Rewriting struct pointer member access *((struct Point*) main::q).x
 Rewriting struct pointer member access *((struct Point*) main::q).y
 Identified constant variable (struct Point*) main::q
-Adding versioned struct unwinding for (struct Point) main::p
 
 CONTROL FLOW GRAPH SSA
 @begin: scope:[]  from
diff --git a/src/test/ref/struct-ptr-14.log b/src/test/ref/struct-ptr-14.log
index d586b0c1c..937e039e2 100644
--- a/src/test/ref/struct-ptr-14.log
+++ b/src/test/ref/struct-ptr-14.log
@@ -7,7 +7,6 @@ Rewriting struct pointer member access *((struct Point*) set::ptr).x
 Rewriting struct pointer member access *((struct Point*) set::ptr).y
 Identified constant variable (struct Point*) main::q
 Culled Empty Block (label) @1
-Adding versioned struct unwinding for (struct Point) main::p
 
 CONTROL FLOW GRAPH SSA
 @begin: scope:[]  from
diff --git a/src/test/ref/struct-ptr-16.log b/src/test/ref/struct-ptr-16.log
index 76d10bd1e..f8f1ba1eb 100644
--- a/src/test/ref/struct-ptr-16.log
+++ b/src/test/ref/struct-ptr-16.log
@@ -40,10 +40,6 @@ Unwinding list assignment { (byte~) main::$0_x, (byte~) main::$0_y } ← { (byte
 Unwinding list assignment { (byte~) main::$1_x, (byte~) main::$1_y } ← { (byte) get::return_x, (byte) get::return_y }
 Unwinding list assignment { (byte) get::return_x#0, (byte) get::return_y#0 } ← { (byte) get::return_x#5, (byte) get::return_y#5 }
 Unwinding list assignment { (byte) get::return_x#1, (byte) get::return_y#1 } ← { (byte) get::return_x#5, (byte) get::return_y#5 }
-Adding versioned struct unwinding for (struct Point) get::return#0
-Adding versioned struct unwinding for (struct Point) get::return#1
-Adding versioned struct unwinding for (struct Point) get::return#2
-Adding versioned struct unwinding for (struct Point) get::return#3
 
 CONTROL FLOW GRAPH SSA
 @begin: scope:[]  from
diff --git a/src/test/ref/struct-ptr-17.log b/src/test/ref/struct-ptr-17.log
index 4d2bbf712..0ecf2505b 100644
--- a/src/test/ref/struct-ptr-17.log
+++ b/src/test/ref/struct-ptr-17.log
@@ -33,8 +33,6 @@ Unwinding list assignment { (byte~) main::$0_x, (byte~) main::$0_y } ← { (byte
 Unwinding list assignment { (byte~) main::$1_x, (byte~) main::$1_y } ← { (byte) get::return_x, (byte) get::return_y }
 Unwinding list assignment { (byte) get::return_x#0, (byte) get::return_y#0 } ← { (byte) get::return_x#3, (byte) get::return_y#3 }
 Unwinding list assignment { (byte) get::return_x#1, (byte) get::return_y#1 } ← { (byte) get::return_x#3, (byte) get::return_y#3 }
-Adding versioned struct unwinding for (struct Point) get::return#0
-Adding versioned struct unwinding for (struct Point) get::return#1
 
 CONTROL FLOW GRAPH SSA
 @begin: scope:[]  from
diff --git a/src/test/ref/struct-ptr-19.log b/src/test/ref/struct-ptr-19.log
index a7b653327..108c37211 100644
--- a/src/test/ref/struct-ptr-19.log
+++ b/src/test/ref/struct-ptr-19.log
@@ -14,7 +14,6 @@ Replacing struct member reference (struct Point) print::p.x with member unwindin
 Replacing struct member reference (struct Point) print::p.y with member unwinding reference (byte) print::p_y
 Identified constant variable (struct Point*) main::ptr
 Culled Empty Block (label) @1
-Adding versioned struct unwinding for (struct Point) main::point#0
 
 CONTROL FLOW GRAPH SSA
 @begin: scope:[]  from