[RISCV] Match vcompress during shuffle lowering (#117748)
[llvm-project.git] / llvm / test / CodeGen / AArch64 / GlobalISel / legalize-fp-arith-fp16.mir
blob42538d58c87bf229dd4af0ee4490148550d98dba
1 # NOTE: Assertions have been autogenerated by utils/update_mir_test_checks.py
2 # RUN: llc -mtriple aarch64-unknown-unknown -verify-machineinstrs -run-pass=legalizer %s -o - | FileCheck %s --check-prefix=NO-FP16
3 # RUN: llc -mtriple aarch64-unknown-unknown -verify-machineinstrs -mattr=+fullfp16 -run-pass=legalizer %s -o - | FileCheck %s --check-prefix=FP16
5 ...
6 ---
7 name:            fadd
8 tracksRegLiveness: true
9 body:             |
10   bb.0:
11     liveins: $h0, $h1
13     ; NO-FP16-LABEL: name: fadd
14     ; NO-FP16: liveins: $h0, $h1
15     ; NO-FP16-NEXT: {{  $}}
16     ; NO-FP16-NEXT: %x:_(s16) = COPY $h0
17     ; NO-FP16-NEXT: %y:_(s16) = COPY $h1
18     ; NO-FP16-NEXT: [[FPEXT:%[0-9]+]]:_(s32) = G_FPEXT %x(s16)
19     ; NO-FP16-NEXT: [[FPEXT1:%[0-9]+]]:_(s32) = G_FPEXT %y(s16)
20     ; NO-FP16-NEXT: [[FADD:%[0-9]+]]:_(s32) = G_FADD [[FPEXT]], [[FPEXT1]]
21     ; NO-FP16-NEXT: %op:_(s16) = G_FPTRUNC [[FADD]](s32)
22     ; NO-FP16-NEXT: $h0 = COPY %op(s16)
23     ; NO-FP16-NEXT: RET_ReallyLR implicit $h0
24     ;
25     ; FP16-LABEL: name: fadd
26     ; FP16: liveins: $h0, $h1
27     ; FP16-NEXT: {{  $}}
28     ; FP16-NEXT: %x:_(s16) = COPY $h0
29     ; FP16-NEXT: %y:_(s16) = COPY $h1
30     ; FP16-NEXT: %op:_(s16) = G_FADD %x, %y
31     ; FP16-NEXT: $h0 = COPY %op(s16)
32     ; FP16-NEXT: RET_ReallyLR implicit $h0
33     %x:_(s16) = COPY $h0
34     %y:_(s16) = COPY $h1
35     %op:_(s16) = G_FADD %x, %y
36     $h0 = COPY %op(s16)
37     RET_ReallyLR implicit $h0
39 ...
40 ---
41 name:            fsub
42 tracksRegLiveness: true
43 body:             |
44   bb.0:
45     liveins: $h0, $h1
47     ; NO-FP16-LABEL: name: fsub
48     ; NO-FP16: liveins: $h0, $h1
49     ; NO-FP16-NEXT: {{  $}}
50     ; NO-FP16-NEXT: %x:_(s16) = COPY $h0
51     ; NO-FP16-NEXT: %y:_(s16) = COPY $h1
52     ; NO-FP16-NEXT: [[FPEXT:%[0-9]+]]:_(s32) = G_FPEXT %x(s16)
53     ; NO-FP16-NEXT: [[FPEXT1:%[0-9]+]]:_(s32) = G_FPEXT %y(s16)
54     ; NO-FP16-NEXT: [[FSUB:%[0-9]+]]:_(s32) = G_FSUB [[FPEXT]], [[FPEXT1]]
55     ; NO-FP16-NEXT: %op:_(s16) = G_FPTRUNC [[FSUB]](s32)
56     ; NO-FP16-NEXT: $h0 = COPY %op(s16)
57     ; NO-FP16-NEXT: RET_ReallyLR implicit $h0
58     ;
59     ; FP16-LABEL: name: fsub
60     ; FP16: liveins: $h0, $h1
61     ; FP16-NEXT: {{  $}}
62     ; FP16-NEXT: %x:_(s16) = COPY $h0
63     ; FP16-NEXT: %y:_(s16) = COPY $h1
64     ; FP16-NEXT: %op:_(s16) = G_FSUB %x, %y
65     ; FP16-NEXT: $h0 = COPY %op(s16)
66     ; FP16-NEXT: RET_ReallyLR implicit $h0
67     %x:_(s16) = COPY $h0
68     %y:_(s16) = COPY $h1
69     %op:_(s16) = G_FSUB %x, %y
70     $h0 = COPY %op(s16)
71     RET_ReallyLR implicit $h0
73 ...
74 ---
75 name:            fmul
76 tracksRegLiveness: true
77 body:             |
78   bb.0:
79     liveins: $h0, $h1
81     ; NO-FP16-LABEL: name: fmul
82     ; NO-FP16: liveins: $h0, $h1
83     ; NO-FP16-NEXT: {{  $}}
84     ; NO-FP16-NEXT: %x:_(s16) = COPY $h0
85     ; NO-FP16-NEXT: %y:_(s16) = COPY $h1
86     ; NO-FP16-NEXT: [[FPEXT:%[0-9]+]]:_(s32) = G_FPEXT %x(s16)
87     ; NO-FP16-NEXT: [[FPEXT1:%[0-9]+]]:_(s32) = G_FPEXT %y(s16)
88     ; NO-FP16-NEXT: [[FMUL:%[0-9]+]]:_(s32) = G_FMUL [[FPEXT]], [[FPEXT1]]
89     ; NO-FP16-NEXT: %op:_(s16) = G_FPTRUNC [[FMUL]](s32)
90     ; NO-FP16-NEXT: $h0 = COPY %op(s16)
91     ; NO-FP16-NEXT: RET_ReallyLR implicit $h0
92     ;
93     ; FP16-LABEL: name: fmul
94     ; FP16: liveins: $h0, $h1
95     ; FP16-NEXT: {{  $}}
96     ; FP16-NEXT: %x:_(s16) = COPY $h0
97     ; FP16-NEXT: %y:_(s16) = COPY $h1
98     ; FP16-NEXT: %op:_(s16) = G_FMUL %x, %y
99     ; FP16-NEXT: $h0 = COPY %op(s16)
100     ; FP16-NEXT: RET_ReallyLR implicit $h0
101     %x:_(s16) = COPY $h0
102     %y:_(s16) = COPY $h1
103     %op:_(s16) = G_FMUL %x, %y
104     $h0 = COPY %op(s16)
105     RET_ReallyLR implicit $h0
109 name:            fdiv
110 tracksRegLiveness: true
111 body:             |
112   bb.0:
113     liveins: $h0, $h1
115     ; NO-FP16-LABEL: name: fdiv
116     ; NO-FP16: liveins: $h0, $h1
117     ; NO-FP16-NEXT: {{  $}}
118     ; NO-FP16-NEXT: %x:_(s16) = COPY $h0
119     ; NO-FP16-NEXT: %y:_(s16) = COPY $h1
120     ; NO-FP16-NEXT: [[FPEXT:%[0-9]+]]:_(s32) = G_FPEXT %x(s16)
121     ; NO-FP16-NEXT: [[FPEXT1:%[0-9]+]]:_(s32) = G_FPEXT %y(s16)
122     ; NO-FP16-NEXT: [[FDIV:%[0-9]+]]:_(s32) = G_FDIV [[FPEXT]], [[FPEXT1]]
123     ; NO-FP16-NEXT: %op:_(s16) = G_FPTRUNC [[FDIV]](s32)
124     ; NO-FP16-NEXT: $h0 = COPY %op(s16)
125     ; NO-FP16-NEXT: RET_ReallyLR implicit $h0
126     ;
127     ; FP16-LABEL: name: fdiv
128     ; FP16: liveins: $h0, $h1
129     ; FP16-NEXT: {{  $}}
130     ; FP16-NEXT: %x:_(s16) = COPY $h0
131     ; FP16-NEXT: %y:_(s16) = COPY $h1
132     ; FP16-NEXT: %op:_(s16) = G_FDIV %x, %y
133     ; FP16-NEXT: $h0 = COPY %op(s16)
134     ; FP16-NEXT: RET_ReallyLR implicit $h0
135     %x:_(s16) = COPY $h0
136     %y:_(s16) = COPY $h1
137     %op:_(s16) = G_FDIV %x, %y
138     $h0 = COPY %op(s16)
139     RET_ReallyLR implicit $h0
143 name:            fneg
144 tracksRegLiveness: true
145 body:             |
146   bb.0:
147     liveins: $h0
149     ; NO-FP16-LABEL: name: fneg
150     ; NO-FP16: liveins: $h0
151     ; NO-FP16-NEXT: {{  $}}
152     ; NO-FP16-NEXT: %x:_(s16) = COPY $h0
153     ; NO-FP16-NEXT: [[ANYEXT:%[0-9]+]]:_(s32) = G_ANYEXT %x(s16)
154     ; NO-FP16-NEXT: [[C:%[0-9]+]]:_(s32) = G_CONSTANT i32 -32768
155     ; NO-FP16-NEXT: [[XOR:%[0-9]+]]:_(s32) = G_XOR [[ANYEXT]], [[C]]
156     ; NO-FP16-NEXT: %op:_(s16) = G_TRUNC [[XOR]](s32)
157     ; NO-FP16-NEXT: $h0 = COPY %op(s16)
158     ; NO-FP16-NEXT: RET_ReallyLR implicit $h0
159     ;
160     ; FP16-LABEL: name: fneg
161     ; FP16: liveins: $h0
162     ; FP16-NEXT: {{  $}}
163     ; FP16-NEXT: %x:_(s16) = COPY $h0
164     ; FP16-NEXT: %op:_(s16) = G_FNEG %x
165     ; FP16-NEXT: $h0 = COPY %op(s16)
166     ; FP16-NEXT: RET_ReallyLR implicit $h0
167     %x:_(s16) = COPY $h0
168     %op:_(s16) = G_FNEG %x
169     $h0 = COPY %op(s16)
170     RET_ReallyLR implicit $h0