Re-land [openmp] Fix warnings when building on Windows with latest MSVC or Clang...
[llvm-project.git] / llvm / test / CodeGen / X86 / apx / neg.ll
blobc1c53fbdaebd824be1fef53e44950312bb65d6aa
1 ; NOTE: Assertions have been autogenerated by utils/update_llc_test_checks.py UTC_ARGS: --version 2
2 ; RUN: llc < %s -mtriple=x86_64-unknown -mattr=+ndd -verify-machineinstrs | FileCheck %s
4 define i8 @neg8r(i8 noundef %a) {
5 ; CHECK-LABEL: neg8r:
6 ; CHECK:       # %bb.0: # %entry
7 ; CHECK-NEXT:    negb %dil, %al
8 ; CHECK-NEXT:    retq
9 entry:
10   %neg = sub i8 0, %a
11   ret i8 %neg
14 define i16 @neg16r(i16 noundef %a) {
15 ; CHECK-LABEL: neg16r:
16 ; CHECK:       # %bb.0: # %entry
17 ; CHECK-NEXT:    negl %edi, %eax
18 ; CHECK-NEXT:    # kill: def $ax killed $ax killed $eax
19 ; CHECK-NEXT:    retq
20 entry:
21   %neg = sub i16 0, %a
22   ret i16 %neg
25 define i32 @neg32r(i32 noundef %a) {
26 ; CHECK-LABEL: neg32r:
27 ; CHECK:       # %bb.0: # %entry
28 ; CHECK-NEXT:    negl %edi, %eax
29 ; CHECK-NEXT:    retq
30 entry:
31   %neg = sub i32 0, %a
32   ret i32 %neg
35 define i64 @neg64r(i64 noundef %a) {
36 ; CHECK-LABEL: neg64r:
37 ; CHECK:       # %bb.0: # %entry
38 ; CHECK-NEXT:    negq %rdi, %rax
39 ; CHECK-NEXT:    retq
40 entry:
41   %neg = sub i64 0, %a
42   ret i64 %neg
45 define i8 @neg8m(ptr %ptr) {
46 ; CHECK-LABEL: neg8m:
47 ; CHECK:       # %bb.0: # %entry
48 ; CHECK-NEXT:    negb (%rdi), %al
49 ; CHECK-NEXT:    retq
50 entry:
51   %a = load i8, ptr %ptr
52   %neg = sub i8 0, %a
53   ret i8 %neg
56 define i16 @neg16m(ptr %ptr) {
57 ; CHECK-LABEL: neg16m:
58 ; CHECK:       # %bb.0: # %entry
59 ; CHECK-NEXT:    negw (%rdi), %ax
60 ; CHECK-NEXT:    retq
61 entry:
62   %a = load i16, ptr %ptr
63   %neg = sub i16 0, %a
64   ret i16 %neg
67 define i32 @neg32m(ptr %ptr) {
68 ; CHECK-LABEL: neg32m:
69 ; CHECK:       # %bb.0: # %entry
70 ; CHECK-NEXT:    negl (%rdi), %eax
71 ; CHECK-NEXT:    retq
72 entry:
73   %a = load i32, ptr %ptr
74   %neg = sub i32 0, %a
75   ret i32 %neg
78 define i64 @neg64m(ptr %ptr) {
79 ; CHECK-LABEL: neg64m:
80 ; CHECK:       # %bb.0: # %entry
81 ; CHECK-NEXT:    negq (%rdi), %rax
82 ; CHECK-NEXT:    retq
83 entry:
84   %a = load i64, ptr %ptr
85   %neg = sub i64 0, %a
86   ret i64 %neg
89 define i8 @uneg8r(i8 noundef %a) {
90 ; CHECK-LABEL: uneg8r:
91 ; CHECK:       # %bb.0: # %entry
92 ; CHECK-NEXT:    negb %dil, %al
93 ; CHECK-NEXT:    retq
94 entry:
95   %t = call {i8, i1} @llvm.usub.with.overflow.i8(i8 0, i8 %a)
96   %neg = extractvalue {i8, i1} %t, 0
97   ret i8 %neg
100 define i16 @uneg16r(i16 noundef %a) {
101 ; CHECK-LABEL: uneg16r:
102 ; CHECK:       # %bb.0: # %entry
103 ; CHECK-NEXT:    negl %edi, %eax
104 ; CHECK-NEXT:    # kill: def $ax killed $ax killed $eax
105 ; CHECK-NEXT:    retq
106 entry:
107   %t = call {i16, i1} @llvm.usub.with.overflow.i16(i16 0, i16 %a)
108   %neg = extractvalue {i16, i1} %t, 0
109   ret i16 %neg
112 define i32 @uneg32r(i32 noundef %a) {
113 ; CHECK-LABEL: uneg32r:
114 ; CHECK:       # %bb.0: # %entry
115 ; CHECK-NEXT:    negl %edi, %eax
116 ; CHECK-NEXT:    retq
117 entry:
118   %t = call {i32, i1} @llvm.usub.with.overflow.i32(i32 0, i32 %a)
119   %neg = extractvalue {i32, i1} %t, 0
120   ret i32 %neg
123 define i64 @uneg64r(i64 noundef %a) {
124 ; CHECK-LABEL: uneg64r:
125 ; CHECK:       # %bb.0: # %entry
126 ; CHECK-NEXT:    negq %rdi, %rax
127 ; CHECK-NEXT:    retq
128 entry:
129   %t = call {i64, i1} @llvm.usub.with.overflow.i64(i64 0, i64 %a)
130   %neg = extractvalue {i64, i1} %t, 0
131   ret i64 %neg
134 define i8 @uneg8m(ptr %ptr) {
135 ; CHECK-LABEL: uneg8m:
136 ; CHECK:       # %bb.0: # %entry
137 ; CHECK-NEXT:    negb (%rdi), %al
138 ; CHECK-NEXT:    retq
139 entry:
140   %a = load i8, ptr %ptr
141   %t = call {i8, i1} @llvm.usub.with.overflow.i8(i8 0, i8 %a)
142   %neg = extractvalue {i8, i1} %t, 0
143   ret i8 %neg
146 define i16 @uneg16m(ptr %ptr) {
147 ; CHECK-LABEL: uneg16m:
148 ; CHECK:       # %bb.0: # %entry
149 ; CHECK-NEXT:    negw (%rdi), %ax
150 ; CHECK-NEXT:    retq
151 entry:
152   %a = load i16, ptr %ptr
153   %t = call {i16, i1} @llvm.usub.with.overflow.i16(i16 0, i16 %a)
154   %neg = extractvalue {i16, i1} %t, 0
155   ret i16 %neg
158 define i32 @uneg32m(ptr %ptr) {
159 ; CHECK-LABEL: uneg32m:
160 ; CHECK:       # %bb.0: # %entry
161 ; CHECK-NEXT:    negl (%rdi), %eax
162 ; CHECK-NEXT:    retq
163 entry:
164   %a = load i32, ptr %ptr
165   %t = call {i32, i1} @llvm.usub.with.overflow.i32(i32 0, i32 %a)
166   %neg = extractvalue {i32, i1} %t, 0
167   ret i32 %neg
170 define i64 @uneg64m(ptr %ptr) {
171 ; CHECK-LABEL: uneg64m:
172 ; CHECK:       # %bb.0: # %entry
173 ; CHECK-NEXT:    negq (%rdi), %rax
174 ; CHECK-NEXT:    retq
175 entry:
176   %a = load i64, ptr %ptr
177   %t = call {i64, i1} @llvm.usub.with.overflow.i64(i64 0, i64 %a)
178   %neg = extractvalue {i64, i1} %t, 0
179   ret i64 %neg
182 declare {i8, i1} @llvm.usub.with.overflow.i8(i8, i8)
183 declare {i16, i1} @llvm.usub.with.overflow.i16(i16, i16)
184 declare {i32, i1} @llvm.usub.with.overflow.i32(i32, i32)
185 declare {i64, i1} @llvm.usub.with.overflow.i64(i64, i64)
187 define void @neg8m_legacy(ptr %ptr) {
188 ; CHECK-LABEL: neg8m_legacy:
189 ; CHECK:       # %bb.0: # %entry
190 ; CHECK-NEXT:    negb (%rdi)
191 ; CHECK-NEXT:    retq
192 entry:
193   %a = load i8, ptr %ptr
194   %neg = sub i8 0, %a
195   store i8 %neg, ptr %ptr
196   ret void
199 define void @neg16m_legacy(ptr %ptr) {
200 ; CHECK-LABEL: neg16m_legacy:
201 ; CHECK:       # %bb.0: # %entry
202 ; CHECK-NEXT:    negw (%rdi)
203 ; CHECK-NEXT:    retq
204 entry:
205   %a = load i16, ptr %ptr
206   %neg = sub i16 0, %a
207   store i16 %neg, ptr %ptr
208   ret void
211 define void @neg32m_legacy(ptr %ptr) {
212 ; CHECK-LABEL: neg32m_legacy:
213 ; CHECK:       # %bb.0: # %entry
214 ; CHECK-NEXT:    negl (%rdi)
215 ; CHECK-NEXT:    retq
216 entry:
217   %a = load i32, ptr %ptr
218   %neg = sub i32 0, %a
219   store i32 %neg, ptr %ptr
220   ret void
223 define void @neg64m_legacy(ptr %ptr) {
224 ; CHECK-LABEL: neg64m_legacy:
225 ; CHECK:       # %bb.0: # %entry
226 ; CHECK-NEXT:    negq (%rdi)
227 ; CHECK-NEXT:    retq
228 entry:
229   %a = load i64, ptr %ptr
230   %neg = sub i64 0, %a
231   store i64 %neg, ptr %ptr
232   ret void