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:
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user