Commit 483f9bd367

David Rubin <david@vortan.dev>
2025-11-07 05:27:38
llvm: add extra clobbers to valgrind requests
This seems to work around a very puzzling miscompilation first present in LLVM 21.x. We already unconditionally add these clobbers to inline assembly that came from the source, the valgrind requests should also contain them.
1 parent 09e4035
Changed files (1)
src
codegen
src/codegen/llvm.zig
@@ -11672,7 +11672,7 @@ pub const FuncGen = struct {
                 \\ srl $$0,  $$0,  19
                 \\ or  $$13, $$13, $$13
                 ,
-                .constraints = "={$11},{$12},{$11},~{memory}",
+                .constraints = "={$11},{$12},{$11},~{memory},~{$1}",
             },
             .mips64, .mips64el => .{
                 .template =
@@ -11680,7 +11680,7 @@ pub const FuncGen = struct {
                 \\ dsll $$0,  $$0,  29   ; dsll $$0, $$0, 19
                 \\ or   $$13, $$13, $$13
                 ,
-                .constraints = "={$11},{$12},{$11},~{memory}",
+                .constraints = "={$11},{$12},{$11},~{memory},~{$1}",
             },
             .powerpc, .powerpcle => .{
                 .template =
@@ -11727,7 +11727,7 @@ pub const FuncGen = struct {
                 \\ roll  $$61, %edi ; roll $$51, %edi
                 \\ xchgl %ebx, %ebx
                 ,
-                .constraints = "={edx},{eax},{edx},~{cc},~{memory}",
+                .constraints = "={edx},{eax},{edx},~{cc},~{memory},~{dirflag},~{fpsr},~{flags}",
             },
             .x86_64 => .{
                 .template =
@@ -11735,7 +11735,7 @@ pub const FuncGen = struct {
                 \\ rolq  $$61, %rdi ; rolq $$51, %rdi
                 \\ xchgq %rbx, %rbx
                 ,
-                .constraints = "={rdx},{rax},{rdx},~{cc},~{memory}",
+                .constraints = "={rdx},{rax},{rdx},~{cc},~{memory},~{dirflag},~{fpsr},~{flags}",
             },
             else => unreachable,
         };