You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Fresh local audit of exact origin/mainfe4cd09db0f1e260fc0ff63ec2e5c0079fceac3d (PR #8062 atop #8063), using the substantive llvm-inprocess workflow commands and an isolated target, still fails the spike object-byte oracle:
The text and native executables both exit 0 and emit identical 92-byte output (SHA-256 ccfecd9c51f0cd29a7fa349f3047d527e96b2b60f2078a269f91d0e9b6a4bf9c). This is not a behavior-only failure and not metadata noise: the emitted code and the GC map differ.
This is a distinct follow-on to #8052/#8062. #8062 correctly made native construction apply precise-root lowering; doing so exposes a pass-order difference that its small one-root emitted-object fixture does not exercise.
The focused perry-codegen --lib gate is otherwise green: 990/990, including all three corpus liveness lines and rs4gc_schedules_in_process.
First semantic delta
With PERRY_LLVM_DIFF_DIR set, the two dumped pre-opt modules show that LLVM's C-API builder folds constant instructions during native construction, while the whole-module text parser retains the equivalent instruction graph until optimization. Examples include a constant bitcast + inttoptr root becoming one constant expression and constant select/write-barrier predicates disappearing.
Production currently schedules:
function(mem2reg),rewrite-statepoints-for-gc
RS4GC therefore observes the two non-canonicalized SSA graphs before the normal O3 pipeline can converge them. The first assembly delta is inside _main: native has an additional live zero/root register and a different spill assignment. The final artifacts demonstrate that this reaches semantic sections:
Failure
Fresh local audit of exact
origin/mainfe4cd09db0f1e260fc0ff63ec2e5c0079fceac3d(PR #8062 atop #8063), using the substantivellvm-inprocessworkflow commands and an isolated target, still fails the spike object-byte oracle:The text and native executables both exit 0 and emit identical 92-byte output (SHA-256
ccfecd9c51f0cd29a7fa349f3047d527e96b2b60f2078a269f91d0e9b6a4bf9c). This is not a behavior-only failure and not metadata noise: the emitted code and the GC map differ.This is a distinct follow-on to #8052/#8062. #8062 correctly made native construction apply precise-root lowering; doing so exposes a pass-order difference that its small one-root emitted-object fixture does not exercise.
Exact local setup
The focused
perry-codegen --libgate is otherwise green: 990/990, including all three corpus liveness lines andrs4gc_schedules_in_process.First semantic delta
With
PERRY_LLVM_DIFF_DIRset, the two dumped pre-opt modules show that LLVM's C-API builder folds constant instructions during native construction, while the whole-module text parser retains the equivalent instruction graph until optimization. Examples include a constantbitcast+inttoptrroot becoming one constant expression and constantselect/write-barrier predicates disappearing.Production currently schedules:
RS4GC therefore observes the two non-canonicalized SSA graphs before the normal O3 pipeline can converge them. The first assembly delta is inside
_main: native has an additional live zero/root register and a different spill assignment. The final artifacts demonstrate that this reaches semantic sections:Relocations and compact-map root offsets shift with that code/spill difference; this is not safe to normalize away.
Causal probe
Running both exact dumped modules through:
and then the same LLVM target emission produces byte-identical full assembly:
That makes the narrow causal fix adding canonicalization before RS4GC, while preserving the exact byte oracle.
Acceptance
PERRY_LLVM_INPROCESS=diffreportsir-diff. OK.Refs #7971, #7966, #8052, #8062.