xref: /llvm-project/llvm/test/CodeGen/AArch64/GlobalISel/legalize-fmaximum.mir (revision 07ccf651b95b3d92904e5d513772ad51567d8334)
1# NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2# RUN: llc -mtriple=aarch64-unknown-unknown -run-pass=legalizer -mattr=+fullfp16 -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=FP16
3# RUN: llc -mtriple=aarch64-unknown-unknown -run-pass=legalizer -verify-machineinstrs %s -o - | FileCheck %s --check-prefix=NO-FP16
4...
5---
6name:            s16_legal_with_full_fp16
7alignment:       4
8body:             |
9  bb.0:
10    liveins: $h0, $h1
11    ; FP16-LABEL: name: s16_legal_with_full_fp16
12    ; FP16: liveins: $h0, $h1
13    ; FP16-NEXT: {{  $}}
14    ; FP16-NEXT: %a:_(s16) = COPY $h0
15    ; FP16-NEXT: %b:_(s16) = COPY $h1
16    ; FP16-NEXT: %legalize_me:_(s16) = G_FMAXIMUM %a, %b
17    ; FP16-NEXT: $h0 = COPY %legalize_me(s16)
18    ; FP16-NEXT: RET_ReallyLR implicit $h0
19    ; NO-FP16-LABEL: name: s16_legal_with_full_fp16
20    ; NO-FP16: liveins: $h0, $h1
21    ; NO-FP16-NEXT: {{  $}}
22    ; NO-FP16-NEXT: %a:_(s16) = COPY $h0
23    ; NO-FP16-NEXT: %b:_(s16) = COPY $h1
24    ; NO-FP16-NEXT: [[FPEXT:%[0-9]+]]:_(s32) = G_FPEXT %a(s16)
25    ; NO-FP16-NEXT: [[FPEXT1:%[0-9]+]]:_(s32) = G_FPEXT %b(s16)
26    ; NO-FP16-NEXT: [[FMAXIMUM:%[0-9]+]]:_(s32) = G_FMAXIMUM [[FPEXT]], [[FPEXT1]]
27    ; NO-FP16-NEXT: %legalize_me:_(s16) = G_FPTRUNC [[FMAXIMUM]](s32)
28    ; NO-FP16-NEXT: $h0 = COPY %legalize_me(s16)
29    ; NO-FP16-NEXT: RET_ReallyLR implicit $h0
30    %a:_(s16) = COPY $h0
31    %b:_(s16) = COPY $h1
32    %legalize_me:_(s16) = G_FMAXIMUM %a, %b
33    $h0 = COPY %legalize_me(s16)
34    RET_ReallyLR implicit $h0
35
36...
37---
38name:            s32_legal
39alignment:       4
40body:             |
41  bb.0:
42    liveins: $s0, $s1
43    ; FP16-LABEL: name: s32_legal
44    ; FP16: liveins: $s0, $s1
45    ; FP16-NEXT: {{  $}}
46    ; FP16-NEXT: %a:_(s32) = COPY $s0
47    ; FP16-NEXT: %b:_(s32) = COPY $s1
48    ; FP16-NEXT: %legalize_me:_(s32) = G_FMAXIMUM %a, %b
49    ; FP16-NEXT: $s0 = COPY %legalize_me(s32)
50    ; FP16-NEXT: RET_ReallyLR implicit $s0
51    ; NO-FP16-LABEL: name: s32_legal
52    ; NO-FP16: liveins: $s0, $s1
53    ; NO-FP16-NEXT: {{  $}}
54    ; NO-FP16-NEXT: %a:_(s32) = COPY $s0
55    ; NO-FP16-NEXT: %b:_(s32) = COPY $s1
56    ; NO-FP16-NEXT: %legalize_me:_(s32) = G_FMAXIMUM %a, %b
57    ; NO-FP16-NEXT: $s0 = COPY %legalize_me(s32)
58    ; NO-FP16-NEXT: RET_ReallyLR implicit $s0
59    %a:_(s32) = COPY $s0
60    %b:_(s32) = COPY $s1
61    %legalize_me:_(s32) = G_FMAXIMUM %a, %b
62    $s0 = COPY %legalize_me(s32)
63    RET_ReallyLR implicit $s0
64
65...
66---
67name:            s64_legal
68alignment:       4
69body:             |
70  bb.0:
71    liveins: $d0, $d1
72    ; FP16-LABEL: name: s64_legal
73    ; FP16: liveins: $d0, $d1
74    ; FP16-NEXT: {{  $}}
75    ; FP16-NEXT: %a:_(s64) = COPY $d0
76    ; FP16-NEXT: %b:_(s64) = COPY $d1
77    ; FP16-NEXT: %legalize_me:_(s64) = G_FMAXIMUM %a, %b
78    ; FP16-NEXT: $d0 = COPY %legalize_me(s64)
79    ; FP16-NEXT: RET_ReallyLR implicit $d0
80    ; NO-FP16-LABEL: name: s64_legal
81    ; NO-FP16: liveins: $d0, $d1
82    ; NO-FP16-NEXT: {{  $}}
83    ; NO-FP16-NEXT: %a:_(s64) = COPY $d0
84    ; NO-FP16-NEXT: %b:_(s64) = COPY $d1
85    ; NO-FP16-NEXT: %legalize_me:_(s64) = G_FMAXIMUM %a, %b
86    ; NO-FP16-NEXT: $d0 = COPY %legalize_me(s64)
87    ; NO-FP16-NEXT: RET_ReallyLR implicit $d0
88    %a:_(s64) = COPY $d0
89    %b:_(s64) = COPY $d1
90    %legalize_me:_(s64) = G_FMAXIMUM %a, %b
91    $d0 = COPY %legalize_me(s64)
92    RET_ReallyLR implicit $d0
93...
94---
95name:            v2s32
96alignment:       4
97body:             |
98  bb.0:
99    liveins: $d0, $d1
100    ; FP16-LABEL: name: v2s32
101    ; FP16: liveins: $d0, $d1
102    ; FP16-NEXT: {{  $}}
103    ; FP16-NEXT: %a:_(<2 x s32>) = COPY $d0
104    ; FP16-NEXT: %b:_(<2 x s32>) = COPY $d1
105    ; FP16-NEXT: %maximum:_(<2 x s32>) = G_FMAXIMUM %a, %b
106    ; FP16-NEXT: $d0 = COPY %maximum(<2 x s32>)
107    ; FP16-NEXT: RET_ReallyLR implicit $d0
108    ; NO-FP16-LABEL: name: v2s32
109    ; NO-FP16: liveins: $d0, $d1
110    ; NO-FP16-NEXT: {{  $}}
111    ; NO-FP16-NEXT: %a:_(<2 x s32>) = COPY $d0
112    ; NO-FP16-NEXT: %b:_(<2 x s32>) = COPY $d1
113    ; NO-FP16-NEXT: %maximum:_(<2 x s32>) = G_FMAXIMUM %a, %b
114    ; NO-FP16-NEXT: $d0 = COPY %maximum(<2 x s32>)
115    ; NO-FP16-NEXT: RET_ReallyLR implicit $d0
116    %a:_(<2 x s32>) = COPY $d0
117    %b:_(<2 x s32>) = COPY $d1
118    %maximum:_(<2 x s32>) = G_FMAXIMUM %a, %b
119    $d0 = COPY %maximum(<2 x s32>)
120    RET_ReallyLR implicit $d0
121
122...
123---
124name:            v4s32
125alignment:       4
126body:             |
127  bb.0:
128    liveins: $q0, $q1
129    ; FP16-LABEL: name: v4s32
130    ; FP16: liveins: $q0, $q1
131    ; FP16-NEXT: {{  $}}
132    ; FP16-NEXT: %a:_(<4 x s32>) = COPY $q0
133    ; FP16-NEXT: %b:_(<4 x s32>) = COPY $q1
134    ; FP16-NEXT: %maximum:_(<4 x s32>) = G_FMAXIMUM %a, %b
135    ; FP16-NEXT: $q0 = COPY %maximum(<4 x s32>)
136    ; FP16-NEXT: RET_ReallyLR implicit $q0
137    ; NO-FP16-LABEL: name: v4s32
138    ; NO-FP16: liveins: $q0, $q1
139    ; NO-FP16-NEXT: {{  $}}
140    ; NO-FP16-NEXT: %a:_(<4 x s32>) = COPY $q0
141    ; NO-FP16-NEXT: %b:_(<4 x s32>) = COPY $q1
142    ; NO-FP16-NEXT: %maximum:_(<4 x s32>) = G_FMAXIMUM %a, %b
143    ; NO-FP16-NEXT: $q0 = COPY %maximum(<4 x s32>)
144    ; NO-FP16-NEXT: RET_ReallyLR implicit $q0
145    %a:_(<4 x s32>) = COPY $q0
146    %b:_(<4 x s32>) = COPY $q1
147    %maximum:_(<4 x s32>) = G_FMAXIMUM %a, %b
148    $q0 = COPY %maximum(<4 x s32>)
149    RET_ReallyLR implicit $q0
150
151...
152