Re-land [openmp] Fix warnings when building on Windows with latest MSVC or Clang...
[llvm-project.git] / llvm / test / CodeGen / AVR / add.ll
blob30f23b199371270d2a5b150340e0cb25572adc27
1 ; RUN: llc -mattr=addsubiw < %s -march=avr | FileCheck %s
3 define i8 @add8_reg_reg(i8 %a, i8 %b) {
4 ; CHECK-LABEL: add8_reg_reg:
5 ; CHECK: add r24, r22
6     %result = add i8 %a, %b
7     ret i8 %result
10 define i8 @add8_reg_imm(i8 %a) {
11 ; CHECK-LABEL: add8_reg_imm:
12 ; CHECK: subi r24, -5
13     %result = add i8 %a, 5
14     ret i8 %result
17 define i8 @add8_reg_increment(i8 %a) {
18 ; CHECK-LABEL: add8_reg_increment:
19 ; CHECK: inc r24
20     %result = add i8 %a, 1
21     ret i8 %result
25 define i16 @add16_reg_reg(i16 %a, i16 %b) {
26 ; CHECK-LABEL: add16_reg_reg:
27 ; CHECK: add r24, r22
28 ; CHECK: adc r25, r23
29     %result = add i16 %a, %b
30     ret i16 %result
33 define i16 @add16_reg_imm(i16 %a) {
34 ; CHECK-LABEL: add16_reg_imm:
35 ; CHECK: adiw r24, 63
36     %result = add i16 %a, 63
37     ret i16 %result
40 define i16 @add16_reg_imm_subi(i16 %a) {
41 ; CHECK-LABEL: add16_reg_imm_subi:
42 ; CHECK: subi r24, 133
43 ; CHECK: sbci r25, 255
44     %result = add i16 %a, 123
45     ret i16 %result
48 define i16 @add16_reg_reg_zext(i16 %a, i1 zeroext %b) {
49 ; CHECK-LABEL: add16_reg_reg_zext:
50 ; CHECK: mov r18, r22
51 ; CHECK: clr r19
52 ; CHECK: add r24, r18
53 ; CHECK: adc r25, r19
54     %zext = zext i1 %b to i16
55     %result = add i16 %a, %zext
56     ret i16 %result
59 define i32 @add32_reg_reg(i32 %a, i32 %b) {
60 ; CHECK-LABEL: add32_reg_reg:
61 ; CHECK: add r22, r18
62 ; CHECK: adc r23, r19
63 ; CHECK: adc r24, r20
64 ; CHECK: adc r25, r21
65     %result = add i32 %a, %b
66     ret i32 %result
69 define i32 @add32_reg_imm(i32 %a) {
70 ; CHECK-LABEL: add32_reg_imm:
71 ; CHECK: subi r22, 251
72 ; CHECK: sbci r23, 255
73 ; CHECK: sbci r24, 255
74 ; CHECK: sbci r25, 255
75     %result = add i32 %a, 5
76     ret i32 %result
79 define i32 @add32_reg_reg_zext(i32 %a, i1 zeroext %b) {
80 ; CHECK-LABEL: add32_reg_reg_zext:
81 ; CHECK: mov r18, r20
82 ; CHECK: clr r19
83 ; CHECK: ldi r20, 0
84 ; CHECK: ldi r21, 0
85 ; CHECK: add r22, r18
86 ; CHECK: adc r23, r19
87 ; CHECK: adc r24, r20
88 ; CHECK: adc r25, r21
89     %zext = zext i1 %b to i32
90     %result = add i32 %a, %zext
91     ret i32 %result
94 define i64 @add64_reg_reg(i64 %a, i64 %b) {
95 ; CHECK-LABEL: add64_reg_reg:
96 ; CHECK: add r18, r10
97 ; CHECK: adc r20, r12
98 ; CHECK: adc r21, r13
99 ; CHECK: adc r22, r14
100 ; CHECK: adc r23, r15
101 ; CHECK: adc r24, r16
102 ; CHECK: adc r25, r17
103     %result = add i64 %a, %b
104     ret i64 %result
107 define i64 @add64_reg_imm(i64 %a) {
108 ; CHECK-LABEL: add64_reg_imm:
109 ; CHECK: subi r18, 251
110 ; CHECK: sbci r19, 255
111 ; CHECK: sbci r20, 255
112 ; CHECK: sbci r21, 255
113 ; CHECK: sbci r22, 255
114 ; CHECK: sbci r23, 255
115 ; CHECK: sbci r24, 255
116 ; CHECK: sbci r25, 255
117     %result = add i64 %a, 5
118     ret i64 %result
121 define i64 @add64_reg_reg_zext(i64 %a, i1 zeroext %b) {
122 ; CHECK-LABEL: add64_reg_reg_zext:
123 ; CHECK: mov r30, r16
124 ; CHECK: clr r31
125 ; CHECK: ldi r26, 0
126 ; CHECK: ldi r27, 0
127 ; CHECK: add r18, r30
128 ; CHECK: adc r19, r31
129 ; CHECK: adc r20, r26
130 ; CHECK: adc r21, r27
131 ; CHECK: adc r22, r26
132 ; CHECK: adc r23, r27
133 ; CHECK: adc r24, r26
134 ; CHECK: adc r25, r27
135     %zext = zext i1 %b to i64
136     %result = add i64 %a, %zext
137     ret i64 %result