Re-land [openmp] Fix warnings when building on Windows with latest MSVC or Clang...
[llvm-project.git] / llvm / test / CodeGen / X86 / apx / inc.ll
blob613f7866c9ac5cc3dc3899127853071784546a79
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 @inc8r(i8 noundef %a) {
5 ; CHECK-LABEL: inc8r:
6 ; CHECK:       # %bb.0: # %entry
7 ; CHECK-NEXT:    incb %dil, %al
8 ; CHECK-NEXT:    retq
9 entry:
10   %inc = add i8 %a, 1
11   ret i8 %inc
14 define i16 @inc16r(i16 noundef %a) {
15 ; CHECK-LABEL: inc16r:
16 ; CHECK:       # %bb.0: # %entry
17 ; CHECK-NEXT:    incl %edi, %eax
18 ; CHECK-NEXT:    # kill: def $ax killed $ax killed $eax
19 ; CHECK-NEXT:    retq
20 entry:
21   %inc = add i16 %a, 1
22   ret i16 %inc
25 define i32 @inc32r(i32 noundef %a) {
26 ; CHECK-LABEL: inc32r:
27 ; CHECK:       # %bb.0: # %entry
28 ; CHECK-NEXT:    incl %edi, %eax
29 ; CHECK-NEXT:    retq
30 entry:
31   %inc = add i32 %a, 1
32   ret i32 %inc
35 define i64 @inc64r(i64 noundef %a) {
36 ; CHECK-LABEL: inc64r:
37 ; CHECK:       # %bb.0: # %entry
38 ; CHECK-NEXT:    incq %rdi, %rax
39 ; CHECK-NEXT:    retq
40 entry:
41   %inc = add i64 %a, 1
42   ret i64 %inc
45 define i8 @inc8m(ptr %ptr) {
46 ; CHECK-LABEL: inc8m:
47 ; CHECK:       # %bb.0: # %entry
48 ; CHECK-NEXT:    incb (%rdi), %al
49 ; CHECK-NEXT:    retq
50 entry:
51   %a = load i8, ptr %ptr
52   %inc = add i8 %a, 1
53   ret i8 %inc
56 define i16 @inc16m(ptr %ptr) {
57 ; CHECK-LABEL: inc16m:
58 ; CHECK:       # %bb.0: # %entry
59 ; CHECK-NEXT:    movzwl (%rdi), %eax
60 ; CHECK-NEXT:    incl %eax
61 ; CHECK-NEXT:    # kill: def $ax killed $ax killed $eax
62 ; CHECK-NEXT:    retq
63 entry:
64   %a = load i16, ptr %ptr
65   %inc = add i16 %a, 1
66   ret i16 %inc
69 define i32 @inc32m(ptr %ptr) {
70 ; CHECK-LABEL: inc32m:
71 ; CHECK:       # %bb.0: # %entry
72 ; CHECK-NEXT:    incl (%rdi), %eax
73 ; CHECK-NEXT:    retq
74 entry:
75   %a = load i32, ptr %ptr
76   %inc = add i32 %a, 1
77   ret i32 %inc
80 define i64 @inc64m(ptr %ptr) {
81 ; CHECK-LABEL: inc64m:
82 ; CHECK:       # %bb.0: # %entry
83 ; CHECK-NEXT:    incq (%rdi), %rax
84 ; CHECK-NEXT:    retq
85 entry:
86   %a = load i64, ptr %ptr
87   %inc = add i64 %a, 1
88   ret i64 %inc
91 define i8 @uinc8r(i8 noundef %a) {
92 ; CHECK-LABEL: uinc8r:
93 ; CHECK:       # %bb.0: # %entry
94 ; CHECK-NEXT:    incb %dil, %al
95 ; CHECK-NEXT:    movzbl %al, %ecx
96 ; CHECK-NEXT:    movl $255, %eax
97 ; CHECK-NEXT:    cmovnel %ecx, %eax
98 ; CHECK-NEXT:    # kill: def $al killed $al killed $eax
99 ; CHECK-NEXT:    retq
100 entry:
101   %inc = call i8 @llvm.uadd.sat.i8(i8 %a, i8 1)
102   ret i8 %inc
105 define i16 @uinc16r(i16 noundef %a) {
106 ; CHECK-LABEL: uinc16r:
107 ; CHECK:       # %bb.0: # %entry
108 ; CHECK-NEXT:    incw %di, %cx
109 ; CHECK-NEXT:    movl $65535, %eax # imm = 0xFFFF
110 ; CHECK-NEXT:    cmovnel %ecx, %eax
111 ; CHECK-NEXT:    # kill: def $ax killed $ax killed $eax
112 ; CHECK-NEXT:    retq
113 entry:
114   %inc = call i16 @llvm.uadd.sat.i16(i16 %a, i16 1)
115   ret i16 %inc
118 define i32 @uinc32r(i32 noundef %a) {
119 ; CHECK-LABEL: uinc32r:
120 ; CHECK:       # %bb.0: # %entry
121 ; CHECK-NEXT:    incl %edi, %ecx
122 ; CHECK-NEXT:    movl $-1, %eax
123 ; CHECK-NEXT:    cmovnel %ecx, %eax
124 ; CHECK-NEXT:    retq
125 entry:
126   %inc = call i32 @llvm.uadd.sat.i32(i32 %a, i32 1)
127   ret i32 %inc
130 define i64 @uinc64r(i64 noundef %a) {
131 ; CHECK-LABEL: uinc64r:
132 ; CHECK:       # %bb.0: # %entry
133 ; CHECK-NEXT:    incq %rdi, %rcx
134 ; CHECK-NEXT:    movq $-1, %rax
135 ; CHECK-NEXT:    cmovneq %rcx, %rax
136 ; CHECK-NEXT:    retq
137 entry:
138   %inc = call i64 @llvm.uadd.sat.i64(i64 %a, i64 1)
139   ret i64 %inc
142 declare i8 @llvm.uadd.sat.i8(i8, i8)
143 declare i16 @llvm.uadd.sat.i16(i16, i16)
144 declare i32 @llvm.uadd.sat.i32(i32, i32)
145 declare i64 @llvm.uadd.sat.i64(i64, i64)
147 define void @inc8m_legacy(ptr %ptr) {
148 ; CHECK-LABEL: inc8m_legacy:
149 ; CHECK:       # %bb.0: # %entry
150 ; CHECK-NEXT:    incb (%rdi)
151 ; CHECK-NEXT:    retq
152 entry:
153   %a = load i8, ptr %ptr
154   %inc = add i8 %a, 1
155   store i8 %inc, ptr %ptr
156   ret void
159 define void @inc16m_legacy(ptr %ptr) {
160 ; CHECK-LABEL: inc16m_legacy:
161 ; CHECK:       # %bb.0: # %entry
162 ; CHECK-NEXT:    incw (%rdi)
163 ; CHECK-NEXT:    retq
164 entry:
165   %a = load i16, ptr %ptr
166   %inc = add i16 %a, 1
167   store i16 %inc, ptr %ptr
168   ret void
171 define void @inc32m_legacy(ptr %ptr) {
172 ; CHECK-LABEL: inc32m_legacy:
173 ; CHECK:       # %bb.0: # %entry
174 ; CHECK-NEXT:    incl (%rdi)
175 ; CHECK-NEXT:    retq
176 entry:
177   %a = load i32, ptr %ptr
178   %inc = add i32 %a, 1
179   store i32 %inc, ptr %ptr
180   ret void
183 define void @inc64m_legacy(ptr %ptr) {
184 ; CHECK-LABEL: inc64m_legacy:
185 ; CHECK:       # %bb.0: # %entry
186 ; CHECK-NEXT:    incq (%rdi)
187 ; CHECK-NEXT:    retq
188 entry:
189   %a = load i64, ptr %ptr
190   %inc = add i64 %a, 1
191   store i64 %inc, ptr %ptr
192   ret void