cranelift: Remove iconst.i128 (#5075)

* cranelift: Remove iconst.i128

* bugpoint: Report Changed when only one instruction is mutated

* cranelift: Fix egraph bxor rule

* cranelift: Remove some simple_preopt opts for i128
This commit is contained in:
Afonso Bordado
2022-10-24 20:43:28 +01:00
committed by GitHub
parent bfcf6616fe
commit c8791073d6
13 changed files with 246 additions and 184 deletions

View File

@@ -278,81 +278,86 @@ block0(v0: i64, v1: i128, v2: i128):
function %f(i128, i8, i8) -> i8 {
block0(v0: i128, v1: i8, v2: i8):
v3 = iconst.i128 42
v4 = ifcmp v0, v3
v5 = selectif.i8 eq v4, v1, v2
return v5
v3 = iconst.i64 42
v4 = uextend.i128 v3
v5 = ifcmp v0, v4
v6 = selectif.i8 eq v5, v1, v2
return v6
}
; block0:
; movz x6, #42
; movz x8, #0
; subs xzr, x0, x6
; ccmp x1, x8, #nzcv, eq
; movz x7, #42
; movz w9, #0
; subs xzr, x0, x7
; ccmp x1, x9, #nzcv, eq
; csel x0, x2, x3, eq
; ret
function %f(i128, i16, i16) -> i16 {
block0(v0: i128, v1: i16, v2: i16):
v3 = iconst.i128 42
v4 = ifcmp v0, v3
v5 = selectif.i16 eq v4, v1, v2
return v5
v3 = iconst.i64 42
v4 = uextend.i128 v3
v5 = ifcmp v0, v4
v6 = selectif.i16 eq v5, v1, v2
return v6
}
; block0:
; movz x6, #42
; movz x8, #0
; subs xzr, x0, x6
; ccmp x1, x8, #nzcv, eq
; movz x7, #42
; movz w9, #0
; subs xzr, x0, x7
; ccmp x1, x9, #nzcv, eq
; csel x0, x2, x3, eq
; ret
function %f(i128, i32, i32) -> i32 {
block0(v0: i128, v1: i32, v2: i32):
v3 = iconst.i128 42
v4 = ifcmp v0, v3
v5 = selectif.i32 eq v4, v1, v2
return v5
v3 = iconst.i64 42
v4 = uextend.i128 v3
v5 = ifcmp v0, v4
v6 = selectif.i32 eq v5, v1, v2
return v6
}
; block0:
; movz x6, #42
; movz x8, #0
; subs xzr, x0, x6
; ccmp x1, x8, #nzcv, eq
; movz x7, #42
; movz w9, #0
; subs xzr, x0, x7
; ccmp x1, x9, #nzcv, eq
; csel x0, x2, x3, eq
; ret
function %f(i128, i64, i64) -> i64 {
block0(v0: i128, v1: i64, v2: i64):
v3 = iconst.i128 42
v4 = ifcmp v0, v3
v5 = selectif.i64 eq v4, v1, v2
return v5
v3 = iconst.i64 42
v4 = uextend.i128 v3
v5 = ifcmp v0, v4
v6 = selectif.i64 eq v5, v1, v2
return v6
}
; block0:
; movz x6, #42
; movz x8, #0
; subs xzr, x0, x6
; ccmp x1, x8, #nzcv, eq
; movz x7, #42
; movz w9, #0
; subs xzr, x0, x7
; ccmp x1, x9, #nzcv, eq
; csel x0, x2, x3, eq
; ret
function %f(i128, i128, i128) -> i128 {
block0(v0: i128, v1: i128, v2: i128):
v3 = iconst.i128 42
v4 = ifcmp v0, v3
v5 = selectif.i128 eq v4, v1, v2
return v5
v3 = iconst.i64 42
v4 = uextend.i128 v3
v5 = ifcmp v0, v4
v6 = selectif.i128 eq v5, v1, v2
return v6
}
; block0:
; movz x9, #42
; movz x11, #0
; subs xzr, x0, x9
; ccmp x1, x11, #nzcv, eq
; movz x11, #42
; movz w13, #0
; subs xzr, x0, x11
; ccmp x1, x13, #nzcv, eq
; csel x0, x2, x4, eq
; csel x1, x3, x5, eq
; ret
@@ -653,85 +658,90 @@ block0(v0: i64, v1: i128, v2: i128):
function %f(i128, i8, i8) -> i8 {
block0(v0: i128, v1: i8, v2: i8):
v3 = iconst.i128 42
v4 = ifcmp v0, v3
v5 = selectif_spectre_guard.i8 eq v4, v1, v2
return v5
v3 = iconst.i64 42
v4 = uextend.i128 v3
v5 = ifcmp v0, v4
v6 = selectif_spectre_guard.i8 eq v5, v1, v2
return v6
}
; block0:
; movz x6, #42
; movz x8, #0
; subs xzr, x0, x6
; ccmp x1, x8, #nzcv, eq
; movz x7, #42
; movz w9, #0
; subs xzr, x0, x7
; ccmp x1, x9, #nzcv, eq
; csel x0, x2, x3, eq
; csdb
; ret
function %f(i128, i16, i16) -> i16 {
block0(v0: i128, v1: i16, v2: i16):
v3 = iconst.i128 42
v4 = ifcmp v0, v3
v5 = selectif_spectre_guard.i16 eq v4, v1, v2
return v5
v3 = iconst.i64 42
v4 = uextend.i128 v3
v5 = ifcmp v0, v4
v6 = selectif_spectre_guard.i16 eq v5, v1, v2
return v6
}
; block0:
; movz x6, #42
; movz x8, #0
; subs xzr, x0, x6
; ccmp x1, x8, #nzcv, eq
; movz x7, #42
; movz w9, #0
; subs xzr, x0, x7
; ccmp x1, x9, #nzcv, eq
; csel x0, x2, x3, eq
; csdb
; ret
function %f(i128, i32, i32) -> i32 {
block0(v0: i128, v1: i32, v2: i32):
v3 = iconst.i128 42
v4 = ifcmp v0, v3
v5 = selectif_spectre_guard.i32 eq v4, v1, v2
return v5
v3 = iconst.i64 42
v4 = uextend.i128 v3
v5 = ifcmp v0, v4
v6 = selectif_spectre_guard.i32 eq v5, v1, v2
return v6
}
; block0:
; movz x6, #42
; movz x8, #0
; subs xzr, x0, x6
; ccmp x1, x8, #nzcv, eq
; movz x7, #42
; movz w9, #0
; subs xzr, x0, x7
; ccmp x1, x9, #nzcv, eq
; csel x0, x2, x3, eq
; csdb
; ret
function %f(i128, i64, i64) -> i64 {
block0(v0: i128, v1: i64, v2: i64):
v3 = iconst.i128 42
v4 = ifcmp v0, v3
v5 = selectif_spectre_guard.i64 eq v4, v1, v2
return v5
v3 = iconst.i64 42
v4 = uextend.i128 v3
v5 = ifcmp v0, v4
v6 = selectif_spectre_guard.i64 eq v5, v1, v2
return v6
}
; block0:
; movz x6, #42
; movz x8, #0
; subs xzr, x0, x6
; ccmp x1, x8, #nzcv, eq
; movz x7, #42
; movz w9, #0
; subs xzr, x0, x7
; ccmp x1, x9, #nzcv, eq
; csel x0, x2, x3, eq
; csdb
; ret
function %f(i128, i128, i128) -> i128 {
block0(v0: i128, v1: i128, v2: i128):
v3 = iconst.i128 42
v4 = ifcmp v0, v3
v5 = selectif_spectre_guard.i128 eq v4, v1, v2
return v5
v3 = iconst.i64 42
v4 = uextend.i128 v3
v5 = ifcmp v0, v4
v6 = selectif_spectre_guard.i128 eq v5, v1, v2
return v6
}
; block0:
; movz x9, #42
; movz x11, #0
; subs xzr, x0, x9
; ccmp x1, x11, #nzcv, eq
; movz x11, #42
; movz w13, #0
; subs xzr, x0, x11
; ccmp x1, x13, #nzcv, eq
; csel x0, x2, x4, eq
; csel x1, x3, x5, eq
; csdb

View File

@@ -656,43 +656,46 @@ block0(v0: i64):
function %f23(i128, i8) -> i128 {
block0(v0: i128, v1: i8):
v2 = iconst.i128 0
brnz v1, block1(v2)
jump block2(v2)
v2 = iconst.i64 0
v3 = uextend.i128 v2
brnz v1, block1(v3)
jump block2(v3)
block1(v3: i128):
v4 = iconst.i128 1
v5 = iadd.i128 v3, v4
return v5
block1(v4: i128):
v5 = iconst.i64 1
v6 = uextend.i128 v5
v7 = iadd.i128 v4, v6
return v7
block2(v6: i128):
v7 = iconst.i128 2
v8 = iadd.i128 v6, v7
return v8
block2(v8: i128):
v9 = iconst.i64 2
v10 = uextend.i128 v9
v11 = iadd.i128 v8, v10
return v11
}
; pushq %rbp
; movq %rsp, %rbp
; block0:
; xorq %rax, %rax, %rax
; xorq %r11, %r11, %r11
; testb %dl, %dl
; jnz label1; j label2
; block1:
; xorq %rax, %rax, %rax
; xorq %rdx, %rdx, %rdx
; movl $1, %esi
; xorq %rcx, %rcx, %rcx
; addq %rax, %rsi, %rax
; adcq %rdx, %rcx, %rdx
; movl $1, %r10d
; xorq %rsi, %rsi, %rsi
; addq %rax, %r10, %rax
; movq %r11, %rdx
; adcq %rdx, %rsi, %rdx
; movq %rbp, %rsp
; popq %rbp
; ret
; block2:
; xorq %rax, %rax, %rax
; xorq %rdx, %rdx, %rdx
; movl $2, %r8d
; xorq %r10, %r10, %r10
; addq %rax, %r8, %rax
; adcq %rdx, %r10, %rdx
; movq %r11, %rdx
; movl $2, %ecx
; xorq %r8, %r8, %r8
; addq %rax, %rcx, %rax
; adcq %rdx, %r8, %rdx
; movq %rbp, %rsp
; popq %rbp
; ret