Cranelift: ISLE: aarch64: fix imm12_from_negated_value for i32, i16 (#6078)

* Fix the semantics of imm12_from_negated_value, swapping to a partial term + rule

* wrapping_neg
This commit is contained in:
Alexa VanHattum
2023-03-21 15:16:25 -04:00
committed by GitHub
parent 59d46c2fec
commit 13be5618a7
6 changed files with 140 additions and 28 deletions

View File

@@ -24,7 +24,6 @@ block0(v0: i64):
; ret
;; 4294967295 is zero-extended i32 -1
;; Result should use immediate but currently doesn't
function %b(i32) -> i32 {
block0(v0: i32):
v1 = iconst.i32 4294967295
@@ -34,18 +33,15 @@ block0(v0: i32):
; VCode:
; block0:
; movn w2, #0
; add w0, w0, w2
; sub w0, w0, #1
; ret
;
; Disassembled:
; block0: ; offset 0x0
; mov w2, #-1
; add w0, w0, w2
; sub w0, w0, #1
; ret
;; 65535 is zero-extended i16 -1
;; Result should use immediate but currently doesn't
function %a(i16) -> i16 {
block0(v0: i16):
v1 = iconst.i16 65535
@@ -55,12 +51,122 @@ block0(v0: i16):
; VCode:
; block0:
; movz w2, #65535
; add w0, w0, w2
; sub w0, w0, #1
; ret
;
; Disassembled:
; block0: ; offset 0x0
; mov w2, #0xffff
; add w0, w0, w2
; sub w0, w0, #1
; ret
;; Swapped order to trigger commutative rule
function %c(i64) -> i64 {
block0(v0: i64):
v1 = iconst.i64 -1
v3 = iadd v1, v0
return v3
}
; VCode:
; block0:
; sub x0, x0, #1
; ret
;
; Disassembled:
; block0: ; offset 0x0
; sub x0, x0, #1
; ret
;; Swapped order to trigger commutative rule
;; 4294967295 is zero-extended i32 -1
function %b(i32) -> i32 {
block0(v0: i32):
v1 = iconst.i32 4294967295
v3 = iadd v1, v0
return v3
}
; VCode:
; block0:
; sub w0, w0, #1
; ret
;
; Disassembled:
; block0: ; offset 0x0
; sub w0, w0, #1
; ret
;; Swapped order to trigger commutative rule
;; 65535 is zero-extended i16 -1
function %a(i16) -> i16 {
block0(v0: i16):
v1 = iconst.i16 65535
v3 = iadd v1, v0
return v3
}
; VCode:
; block0:
; sub w0, w0, #1
; ret
;
; Disassembled:
; block0: ; offset 0x0
; sub w0, w0, #1
; ret
;; Version sub -> add
function %c(i64) -> i64 {
block0(v0: i64):
v1 = iconst.i64 -1
v3 = isub v0, v1
return v3
}
; VCode:
; block0:
; add x0, x0, #1
; ret
;
; Disassembled:
; block0: ; offset 0x0
; add x0, x0, #1
; ret
;; Version sub -> add
;; 4294967295 is zero-extended i32 -1
function %b(i32) -> i32 {
block0(v0: i32):
v1 = iconst.i32 4294967295
v3 = isub v0, v1
return v3
}
; VCode:
; block0:
; add w0, w0, #1
; ret
;
; Disassembled:
; block0: ; offset 0x0
; add w0, w0, #1
; ret
;; Version sub -> add
;; 65535 is zero-extended i16 -1
function %a(i16) -> i16 {
block0(v0: i16):
v1 = iconst.i16 65535
v3 = isub v0, v1
return v3
}
; VCode:
; block0:
; add w0, w0, #1
; ret
;
; Disassembled:
; block0: ; offset 0x0
; add w0, w0, #1
; ret