Switch ifcmp+brif folding to be icmp+brz folding, which is what frontends actually produce.

This commit is contained in:
Tyler McMullen
2019-01-02 20:01:52 -08:00
committed by Benjamin Bouvier
parent 67cc5aafec
commit 571b87414f
2 changed files with 56 additions and 20 deletions

View File

@@ -1,31 +1,58 @@
test simple_preopt
target x86_64
function %brif_to_brz_fold(i32) -> i32 {
function %icmp_to_brz_fold(i32) -> i32 {
ebb0(v0: i32):
v1 = ifcmp_imm v0, 0
brif eq v1, ebb1
v1 = icmp_imm eq v0, 0
brnz v1, ebb1
jump ebb2
ebb1:
v2 = iconst.i32 1
return v2
ebb2:
v3 = iconst.i32 2
v3 = iconst.i32 1
return v3
ebb2:
v4 = iconst.i32 2
return v4
}
; sameln: function %brif_to_brz_fold
; sameln: function %icmp_to_brz_fold
; nextln: ebb0(v0: i32):
; nextln: v1 = ifcmp_imm v0, 0
; nextln: v1 = icmp_imm eq v0, 0
; nextln: brnz v0, ebb2
; nextln: fallthrough ebb1
; nextln:
; nextln: ebb1:
; nextln: v2 = iconst.i32 1
; nextln: return v2
; nextln: v3 = iconst.i32 1
; nextln: return v3
; nextln:
; nextln: ebb2:
; nextln: v3 = iconst.i32 2
; nextln: v4 = iconst.i32 2
; nextln: return v4
; nextln: }
function %icmp_to_brz_inverted_fold(i32) -> i32 {
ebb0(v0: i32):
v1 = icmp_imm ne v0, 0
brz v1, ebb1
jump ebb2
ebb1:
v3 = iconst.i32 1
return v3
ebb2:
v4 = iconst.i32 2
return v4
}
; sameln: function %icmp_to_brz_inve
; nextln: ebb0(v0: i32):
; nextln: v1 = icmp_imm ne v0, 0
; nextln: brnz v0, ebb2
; nextln: fallthrough ebb1
; nextln:
; nextln: ebb1:
; nextln: v3 = iconst.i32 1
; nextln: return v3
; nextln:
; nextln: ebb2:
; nextln: v4 = iconst.i32 2
; nextln: return v4
; nextln: }
function %brif_inversion(i32) -> i32 {