Skip to content

Commit 447efbd

Browse files
authored
[Cranelift] folds selects (#11648)
* [Cranelift] add opts and tests * [Cranelift] update tests * [Cranelift] generalize cases * [Cranelift] update tests * [Cranelift] rename test
1 parent 9d64c52 commit 447efbd

File tree

2 files changed

+34
-0
lines changed

2 files changed

+34
-0
lines changed

cranelift/codegen/src/opts/selects.isle

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -98,3 +98,7 @@
9898
(select ty c
9999
(iconst ty (imm64_masked ty (u64_wrapping_add x z)))
100100
(iconst ty (imm64_masked ty (u64_wrapping_add y z)))))
101+
102+
(rule (simplify (select ty d a (select ty d _ y))) (select ty d a y))
103+
(rule (simplify (select ty d (select ty d x _) a)) (select ty d x a))
104+
Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,30 @@
1+
test optimize precise-output
2+
set opt_level=speed
3+
target x86_64
4+
5+
function %fold_three_selects1(i8, i8, i8, i8, i8) -> i8 {
6+
block0(v0: i8, v1: i8, v2: i8, v3: i8, v4: i8):
7+
v5 = select v0, v3, v2
8+
v6 = select v0, v4, v5
9+
return v6
10+
}
11+
12+
; function %fold_three_selects1(i8, i8, i8, i8, i8) -> i8 fast {
13+
; block0(v0: i8, v1: i8, v2: i8, v3: i8, v4: i8):
14+
; v7 = select v0, v4, v2
15+
; return v7
16+
; }
17+
18+
function %fold_three_selects1(i8, i8, i8, i8, i8) -> i8 {
19+
block0(v0: i8, v1: i8, v2: i8, v3: i8, v4: i8):
20+
v5 = select v0, v3, v2
21+
v6 = select v0, v5, v4
22+
return v6
23+
}
24+
25+
; function %fold_three_selects1(i8, i8, i8, i8, i8) -> i8 fast {
26+
; block0(v0: i8, v1: i8, v2: i8, v3: i8, v4: i8):
27+
; v7 = select v0, v3, v4
28+
; return v7
29+
; }
30+

0 commit comments

Comments
 (0)