Skip to content

Commit

Permalink
[AArch64] Fix incorrect regalloc constraints for atomic_cas (bytecode…
Browse files Browse the repository at this point in the history
…alliance#4959)

* [AArch64] Fix incorrect regalloc constraints for atomic_cas

* Update test for latest Cranelift changes
  • Loading branch information
bjorn3 authored Sep 26, 2022
1 parent 3a2b32b commit af226d3
Show file tree
Hide file tree
Showing 2 changed files with 34 additions and 2 deletions.
4 changes: 2 additions & 2 deletions cranelift/codegen/src/isa/aarch64/inst/mod.rs
Original file line number Diff line number Diff line change
Expand Up @@ -726,8 +726,8 @@ fn aarch64_get_operands<F: Fn(VReg) -> VReg>(inst: &Inst, collector: &mut Operan
collector.reg_fixed_use(addr, xreg(25));
collector.reg_fixed_use(expected, xreg(26));
collector.reg_fixed_use(replacement, xreg(28));
collector.reg_fixed_def(oldval, xreg(24));
collector.reg_fixed_def(scratch, xreg(27));
collector.reg_fixed_def(oldval, xreg(27));
collector.reg_fixed_def(scratch, xreg(24));
}
&Inst::LoadAcquire { rt, rn, .. } => {
collector.reg_use(rn);
Expand Down
32 changes: 32 additions & 0 deletions cranelift/filetests/filetests/isa/aarch64/atomic-cas.clif
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
; Regression test for incorrect regalloc constraints introduced in #4830

test compile precise-output
target aarch64

function u0:0(i64, i32, i32) -> i8 system_v {
block0(v0: i64, v1: i32, v2: i32):
v6 = atomic_cas.i32 v0, v1, v2
v7 = icmp eq v6, v1
v8 = bint.i8 v7
return v8
}

; stp fp, lr, [sp, #-16]!
; mov fp, sp
; str x28, [sp, #-16]!
; stp x26, x27, [sp, #-16]!
; stp x24, x25, [sp, #-16]!
; block0:
; mov x25, x0
; mov x26, x1
; mov x28, x2
; atomic_cas_loop_32 addr=x25, expect=x26, replacement=x28, oldval=x27, scratch=x24
; subs wzr, w27, w26
; cset x8, eq
; and w0, w8, #1
; ldp x24, x25, [sp], #16
; ldp x26, x27, [sp], #16
; ldr x28, [sp], #16
; ldp fp, lr, [sp], #16
; ret

0 comments on commit af226d3

Please sign in to comment.