Skip to content

Commit 5a6ef95

Browse files
authored
[RISCV][GISel] Add legalizer for G_UMAX, G_UMIN, G_SMAX, G_SMIN (#69150)
Similar to #67577, Lower G_UMAX, G_UMIN, G_SMAX, G_SMIN.
1 parent ce9eaf0 commit 5a6ef95

File tree

9 files changed

+891
-0
lines changed

9 files changed

+891
-0
lines changed

llvm/lib/Target/RISCV/GISel/RISCVLegalizerInfo.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -186,6 +186,7 @@ RISCVLegalizerInfo::RISCVLegalizerInfo(const RISCVSubtarget &ST) {
186186
}
187187

188188
getActionDefinitionsBuilder(G_ABS).lower();
189+
getActionDefinitionsBuilder({G_UMAX, G_UMIN, G_SMAX, G_SMIN}).lower();
189190

190191
getActionDefinitionsBuilder(G_FRAME_INDEX).legalFor({p0});
191192

Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2+
# RUN: llc -mtriple=riscv32 -run-pass=legalizer %s -o - | FileCheck %s
3+
4+
---
5+
name: umax_i8
6+
body: |
7+
bb.0.entry:
8+
; CHECK-LABEL: name: umax_i8
9+
; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $x10
10+
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $x11
11+
; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
12+
; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
13+
; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
14+
; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C1]]
15+
; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ugt), [[AND]](s32), [[AND1]]
16+
; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
17+
; CHECK-NEXT: [[AND2:%[0-9]+]]:_(s32) = G_AND [[ICMP]], [[C2]]
18+
; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[AND2]](s32), [[COPY]], [[COPY1]]
19+
; CHECK-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 24
20+
; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[SELECT]], [[C3]](s32)
21+
; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SHL]], [[C3]](s32)
22+
; CHECK-NEXT: $x10 = COPY [[ASHR]](s32)
23+
; CHECK-NEXT: PseudoRET implicit $x10
24+
%0:_(s32) = COPY $x10
25+
%1:_(s32) = COPY $x11
26+
%2:_(s8) = G_TRUNC %0(s32)
27+
%3:_(s8) = G_TRUNC %1(s32)
28+
%4:_(s8) = G_UMAX %2, %3
29+
%5:_(s32) = G_SEXT %4(s8)
30+
$x10 = COPY %5(s32)
31+
PseudoRET implicit $x10
32+
...
33+
34+
---
35+
name: umax_i16
36+
body: |
37+
bb.0.entry:
38+
; CHECK-LABEL: name: umax_i16
39+
; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $x10
40+
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $x11
41+
; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
42+
; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
43+
; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
44+
; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C1]]
45+
; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ugt), [[AND]](s32), [[AND1]]
46+
; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
47+
; CHECK-NEXT: [[AND2:%[0-9]+]]:_(s32) = G_AND [[ICMP]], [[C2]]
48+
; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[AND2]](s32), [[COPY]], [[COPY1]]
49+
; CHECK-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
50+
; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[SELECT]], [[C3]](s32)
51+
; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SHL]], [[C3]](s32)
52+
; CHECK-NEXT: $x10 = COPY [[ASHR]](s32)
53+
; CHECK-NEXT: PseudoRET implicit $x10
54+
%0:_(s32) = COPY $x10
55+
%1:_(s32) = COPY $x11
56+
%2:_(s16) = G_TRUNC %0(s32)
57+
%3:_(s16) = G_TRUNC %1(s32)
58+
%4:_(s16) = G_UMAX %2, %3
59+
%5:_(s32) = G_SEXT %4(s16)
60+
$x10 = COPY %5(s32)
61+
PseudoRET implicit $x10
62+
...
63+
64+
---
65+
name: umax_i32
66+
body: |
67+
bb.0.entry:
68+
; CHECK-LABEL: name: umax_i32
69+
; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $x10
70+
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $x11
71+
; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ugt), [[COPY]](s32), [[COPY1]]
72+
; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
73+
; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[ICMP]], [[C]]
74+
; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[AND]](s32), [[COPY]], [[COPY1]]
75+
; CHECK-NEXT: $x10 = COPY [[SELECT]](s32)
76+
; CHECK-NEXT: PseudoRET implicit $x10
77+
%0:_(s32) = COPY $x10
78+
%1:_(s32) = COPY $x11
79+
%2:_(s32) = G_UMAX %0, %1
80+
$x10 = COPY %2(s32)
81+
PseudoRET implicit $x10
82+
...
83+
84+
---
85+
name: umax_i64
86+
body: |
87+
bb.0.entry:
88+
; CHECK-LABEL: name: umax_i64
89+
; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $x10
90+
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $x11
91+
; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $x12
92+
; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $x13
93+
; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ugt), [[COPY1]](s32), [[COPY3]]
94+
; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(s32) = G_ICMP intpred(eq), [[COPY1]](s32), [[COPY3]]
95+
; CHECK-NEXT: [[ICMP2:%[0-9]+]]:_(s32) = G_ICMP intpred(ugt), [[COPY]](s32), [[COPY2]]
96+
; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
97+
; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[ICMP1]], [[C]]
98+
; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[AND]](s32), [[ICMP2]], [[ICMP]]
99+
; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
100+
; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[SELECT]], [[C1]]
101+
; CHECK-NEXT: [[SELECT1:%[0-9]+]]:_(s32) = G_SELECT [[AND1]](s32), [[COPY]], [[COPY2]]
102+
; CHECK-NEXT: $x10 = COPY [[SELECT1]](s32)
103+
; CHECK-NEXT: PseudoRET implicit $x10
104+
%0:_(s32) = COPY $x10
105+
%1:_(s32) = COPY $x11
106+
%2:_(s32) = COPY $x12
107+
%3:_(s32) = COPY $x13
108+
%4:_(s64) = G_MERGE_VALUES %0(s32), %1(s32)
109+
%5:_(s64) = G_MERGE_VALUES %2(s32), %3(s32)
110+
%6:_(s64) = G_UMAX %4, %5
111+
%7:_(s32) = G_TRUNC %6(s64)
112+
$x10 = COPY %7(s32)
113+
PseudoRET implicit $x10
114+
...
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2+
# RUN: llc -mtriple=riscv32 -run-pass=legalizer %s -o - | FileCheck %s
3+
4+
---
5+
name: umin_i8
6+
body: |
7+
bb.0.entry:
8+
; CHECK-LABEL: name: umin_i8
9+
; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $x10
10+
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $x11
11+
; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
12+
; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
13+
; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
14+
; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C1]]
15+
; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ult), [[AND]](s32), [[AND1]]
16+
; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
17+
; CHECK-NEXT: [[AND2:%[0-9]+]]:_(s32) = G_AND [[ICMP]], [[C2]]
18+
; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[AND2]](s32), [[COPY]], [[COPY1]]
19+
; CHECK-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 24
20+
; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[SELECT]], [[C3]](s32)
21+
; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SHL]], [[C3]](s32)
22+
; CHECK-NEXT: $x10 = COPY [[ASHR]](s32)
23+
; CHECK-NEXT: PseudoRET implicit $x10
24+
%0:_(s32) = COPY $x10
25+
%1:_(s32) = COPY $x11
26+
%2:_(s8) = G_TRUNC %0(s32)
27+
%3:_(s8) = G_TRUNC %1(s32)
28+
%4:_(s8) = G_UMIN %2, %3
29+
%5:_(s32) = G_SEXT %4(s8)
30+
$x10 = COPY %5(s32)
31+
PseudoRET implicit $x10
32+
...
33+
34+
---
35+
name: umin_i16
36+
body: |
37+
bb.0.entry:
38+
; CHECK-LABEL: name: umin_i16
39+
; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $x10
40+
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $x11
41+
; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
42+
; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
43+
; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
44+
; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C1]]
45+
; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ult), [[AND]](s32), [[AND1]]
46+
; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
47+
; CHECK-NEXT: [[AND2:%[0-9]+]]:_(s32) = G_AND [[ICMP]], [[C2]]
48+
; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[AND2]](s32), [[COPY]], [[COPY1]]
49+
; CHECK-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 16
50+
; CHECK-NEXT: [[SHL:%[0-9]+]]:_(s32) = G_SHL [[SELECT]], [[C3]](s32)
51+
; CHECK-NEXT: [[ASHR:%[0-9]+]]:_(s32) = G_ASHR [[SHL]], [[C3]](s32)
52+
; CHECK-NEXT: $x10 = COPY [[ASHR]](s32)
53+
; CHECK-NEXT: PseudoRET implicit $x10
54+
%0:_(s32) = COPY $x10
55+
%1:_(s32) = COPY $x11
56+
%2:_(s16) = G_TRUNC %0(s32)
57+
%3:_(s16) = G_TRUNC %1(s32)
58+
%4:_(s16) = G_UMIN %2, %3
59+
%5:_(s32) = G_SEXT %4(s16)
60+
$x10 = COPY %5(s32)
61+
PseudoRET implicit $x10
62+
...
63+
64+
---
65+
name: umin_i32
66+
body: |
67+
bb.0.entry:
68+
; CHECK-LABEL: name: umin_i32
69+
; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $x10
70+
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $x11
71+
; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ult), [[COPY]](s32), [[COPY1]]
72+
; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
73+
; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[ICMP]], [[C]]
74+
; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[AND]](s32), [[COPY]], [[COPY1]]
75+
; CHECK-NEXT: $x10 = COPY [[SELECT]](s32)
76+
; CHECK-NEXT: PseudoRET implicit $x10
77+
%0:_(s32) = COPY $x10
78+
%1:_(s32) = COPY $x11
79+
%2:_(s32) = G_UMIN %0, %1
80+
$x10 = COPY %2(s32)
81+
PseudoRET implicit $x10
82+
...
83+
84+
---
85+
name: umin_i64
86+
body: |
87+
bb.0.entry:
88+
; CHECK-LABEL: name: umin_i64
89+
; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $x10
90+
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $x11
91+
; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $x12
92+
; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $x13
93+
; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ult), [[COPY1]](s32), [[COPY3]]
94+
; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(s32) = G_ICMP intpred(eq), [[COPY1]](s32), [[COPY3]]
95+
; CHECK-NEXT: [[ICMP2:%[0-9]+]]:_(s32) = G_ICMP intpred(ult), [[COPY]](s32), [[COPY2]]
96+
; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
97+
; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[ICMP1]], [[C]]
98+
; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[AND]](s32), [[ICMP2]], [[ICMP]]
99+
; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
100+
; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[SELECT]], [[C1]]
101+
; CHECK-NEXT: [[SELECT1:%[0-9]+]]:_(s32) = G_SELECT [[AND1]](s32), [[COPY]], [[COPY2]]
102+
; CHECK-NEXT: $x10 = COPY [[SELECT1]](s32)
103+
; CHECK-NEXT: PseudoRET implicit $x10
104+
%0:_(s32) = COPY $x10
105+
%1:_(s32) = COPY $x11
106+
%2:_(s32) = COPY $x12
107+
%3:_(s32) = COPY $x13
108+
%4:_(s64) = G_MERGE_VALUES %0(s32), %1(s32)
109+
%5:_(s64) = G_MERGE_VALUES %2(s32), %3(s32)
110+
%6:_(s64) = G_UMIN %4, %5
111+
%7:_(s32) = G_TRUNC %6(s64)
112+
$x10 = COPY %7(s32)
113+
PseudoRET implicit $x10
114+
...
Lines changed: 112 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,112 @@
1+
# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2+
# RUN: llc -mtriple=riscv32 -run-pass=legalizer %s -o - | FileCheck %s
3+
4+
---
5+
name: umax_i8
6+
body: |
7+
bb.0.entry:
8+
; CHECK-LABEL: name: umax_i8
9+
; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $x10
10+
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $x11
11+
; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
12+
; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
13+
; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
14+
; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C1]]
15+
; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ugt), [[AND]](s32), [[AND1]]
16+
; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
17+
; CHECK-NEXT: [[AND2:%[0-9]+]]:_(s32) = G_AND [[ICMP]], [[C2]]
18+
; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[AND2]](s32), [[COPY]], [[COPY1]]
19+
; CHECK-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 255
20+
; CHECK-NEXT: [[AND3:%[0-9]+]]:_(s32) = G_AND [[SELECT]], [[C3]]
21+
; CHECK-NEXT: $x10 = COPY [[AND3]](s32)
22+
; CHECK-NEXT: PseudoRET implicit $x10
23+
%0:_(s32) = COPY $x10
24+
%1:_(s32) = COPY $x11
25+
%2:_(s8) = G_TRUNC %0(s32)
26+
%3:_(s8) = G_TRUNC %1(s32)
27+
%4:_(s8) = G_UMAX %2, %3
28+
%5:_(s32) = G_ZEXT %4(s8)
29+
$x10 = COPY %5(s32)
30+
PseudoRET implicit $x10
31+
...
32+
33+
---
34+
name: umax_i16
35+
body: |
36+
bb.0.entry:
37+
; CHECK-LABEL: name: umax_i16
38+
; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $x10
39+
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $x11
40+
; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
41+
; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[COPY]], [[C]]
42+
; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
43+
; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[COPY1]], [[C1]]
44+
; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ugt), [[AND]](s32), [[AND1]]
45+
; CHECK-NEXT: [[C2:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
46+
; CHECK-NEXT: [[AND2:%[0-9]+]]:_(s32) = G_AND [[ICMP]], [[C2]]
47+
; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[AND2]](s32), [[COPY]], [[COPY1]]
48+
; CHECK-NEXT: [[C3:%[0-9]+]]:_(s32) = G_CONSTANT i32 65535
49+
; CHECK-NEXT: [[AND3:%[0-9]+]]:_(s32) = G_AND [[SELECT]], [[C3]]
50+
; CHECK-NEXT: $x10 = COPY [[AND3]](s32)
51+
; CHECK-NEXT: PseudoRET implicit $x10
52+
%0:_(s32) = COPY $x10
53+
%1:_(s32) = COPY $x11
54+
%2:_(s16) = G_TRUNC %0(s32)
55+
%3:_(s16) = G_TRUNC %1(s32)
56+
%4:_(s16) = G_UMAX %2, %3
57+
%5:_(s32) = G_ZEXT %4(s16)
58+
$x10 = COPY %5(s32)
59+
PseudoRET implicit $x10
60+
...
61+
62+
---
63+
name: umax_i32
64+
body: |
65+
bb.0.entry:
66+
; CHECK-LABEL: name: umax_i32
67+
; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $x10
68+
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $x11
69+
; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ugt), [[COPY]](s32), [[COPY1]]
70+
; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
71+
; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[ICMP]], [[C]]
72+
; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[AND]](s32), [[COPY]], [[COPY1]]
73+
; CHECK-NEXT: $x10 = COPY [[SELECT]](s32)
74+
; CHECK-NEXT: PseudoRET implicit $x10
75+
%0:_(s32) = COPY $x10
76+
%1:_(s32) = COPY $x11
77+
%2:_(s32) = G_UMAX %0, %1
78+
$x10 = COPY %2(s32)
79+
PseudoRET implicit $x10
80+
...
81+
82+
---
83+
name: umax_i64
84+
body: |
85+
bb.0.entry:
86+
; CHECK-LABEL: name: umax_i64
87+
; CHECK: [[COPY:%[0-9]+]]:_(s32) = COPY $x10
88+
; CHECK-NEXT: [[COPY1:%[0-9]+]]:_(s32) = COPY $x11
89+
; CHECK-NEXT: [[COPY2:%[0-9]+]]:_(s32) = COPY $x12
90+
; CHECK-NEXT: [[COPY3:%[0-9]+]]:_(s32) = COPY $x13
91+
; CHECK-NEXT: [[ICMP:%[0-9]+]]:_(s32) = G_ICMP intpred(ugt), [[COPY1]](s32), [[COPY3]]
92+
; CHECK-NEXT: [[ICMP1:%[0-9]+]]:_(s32) = G_ICMP intpred(eq), [[COPY1]](s32), [[COPY3]]
93+
; CHECK-NEXT: [[ICMP2:%[0-9]+]]:_(s32) = G_ICMP intpred(ugt), [[COPY]](s32), [[COPY2]]
94+
; CHECK-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
95+
; CHECK-NEXT: [[AND:%[0-9]+]]:_(s32) = G_AND [[ICMP1]], [[C]]
96+
; CHECK-NEXT: [[SELECT:%[0-9]+]]:_(s32) = G_SELECT [[AND]](s32), [[ICMP2]], [[ICMP]]
97+
; CHECK-NEXT: [[C1:%[0-9]+]]:_(s32) = G_CONSTANT i32 1
98+
; CHECK-NEXT: [[AND1:%[0-9]+]]:_(s32) = G_AND [[SELECT]], [[C1]]
99+
; CHECK-NEXT: [[SELECT1:%[0-9]+]]:_(s32) = G_SELECT [[AND1]](s32), [[COPY]], [[COPY2]]
100+
; CHECK-NEXT: $x10 = COPY [[SELECT1]](s32)
101+
; CHECK-NEXT: PseudoRET implicit $x10
102+
%0:_(s32) = COPY $x10
103+
%1:_(s32) = COPY $x11
104+
%2:_(s32) = COPY $x12
105+
%3:_(s32) = COPY $x13
106+
%4:_(s64) = G_MERGE_VALUES %0(s32), %1(s32)
107+
%5:_(s64) = G_MERGE_VALUES %2(s32), %3(s32)
108+
%6:_(s64) = G_UMAX %4, %5
109+
%7:_(s32) = G_TRUNC %6(s64)
110+
$x10 = COPY %7(s32)
111+
PseudoRET implicit $x10
112+
...

0 commit comments

Comments
 (0)