[LLVM][Alignment] Make functions using log of alignment explicit
[llvm-complete.git] / test / CodeGen / PowerPC / fast-isel-binary.ll
blob1036689ff44d5893f79d5a2ec99140140dc23662
1 ; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort=1 -mtriple=powerpc64-unknown-linux-gnu -mcpu=pwr7 | FileCheck %s --check-prefix=ELF64
3 ; Test add with non-legal types
5 define void @add_i8(i8 %a, i8 %b) nounwind {
6 entry:
7 ; ELF64: add_i8
8   %a.addr = alloca i8, align 4
9   %0 = add i8 %a, %b
10 ; ELF64: add
11   store i8 %0, i8* %a.addr, align 4
12   ret void
15 define void @add_i8_imm(i8 %a) nounwind {
16 entry:
17 ; ELF64: add_i8_imm
18   %a.addr = alloca i8, align 4
19   %0 = add i8 %a, 22;
20 ; ELF64: addi
21   store i8 %0, i8* %a.addr, align 4
22   ret void
25 define void @add_i16(i16 %a, i16 %b) nounwind {
26 entry:
27 ; ELF64: add_i16
28   %a.addr = alloca i16, align 4
29   %0 = add i16 %a, %b
30 ; ELF64: add
31   store i16 %0, i16* %a.addr, align 4
32   ret void
35 define void @add_i16_imm(i16 %a, i16 %b) nounwind {
36 entry:
37 ; ELF64: add_i16_imm
38   %a.addr = alloca i16, align 4
39   %0 = add i16 %a, 243;
40 ; ELF64: addi
41   store i16 %0, i16* %a.addr, align 4
42   ret void
45 ; Test or with non-legal types
47 define void @or_i8(i8 %a, i8 %b) nounwind {
48 entry:
49 ; ELF64: or_i8
50   %a.addr = alloca i8, align 4
51   %0 = or i8 %a, %b
52 ; ELF64: or
53   store i8 %0, i8* %a.addr, align 4
54   ret void
57 define void @or_i8_imm(i8 %a) nounwind {
58 entry:
59 ; ELF64: or_i8_imm
60   %a.addr = alloca i8, align 4
61   %0 = or i8 %a, -13;
62 ; ELF64: ori
63   store i8 %0, i8* %a.addr, align 4
64   ret void
67 define void @or_i16(i16 %a, i16 %b) nounwind {
68 entry:
69 ; ELF64: or_i16
70   %a.addr = alloca i16, align 4
71   %0 = or i16 %a, %b
72 ; ELF64: or
73   store i16 %0, i16* %a.addr, align 4
74   ret void
77 define void @or_i16_imm(i16 %a) nounwind {
78 entry:
79 ; ELF64: or_i16_imm
80   %a.addr = alloca i16, align 4
81   %0 = or i16 %a, 273;
82 ; ELF64: ori
83   store i16 %0, i16* %a.addr, align 4
84   ret void
87 ; Test sub with non-legal types
89 define void @sub_i8(i8 %a, i8 %b) nounwind {
90 entry:
91 ; ELF64: sub_i8
92   %a.addr = alloca i8, align 4
93   %0 = sub i8 %a, %b
94 ; ELF64: subf
95   store i8 %0, i8* %a.addr, align 4
96   ret void
99 define void @sub_i8_imm(i8 %a) nounwind {
100 entry:
101 ; ELF64: sub_i8_imm
102   %a.addr = alloca i8, align 4
103   %0 = sub i8 %a, 22;
104 ; ELF64: addi
105   store i8 %0, i8* %a.addr, align 4
106   ret void
109 define void @sub_i16(i16 %a, i16 %b) nounwind {
110 entry:
111 ; ELF64: sub_i16
112   %a.addr = alloca i16, align 4
113   %0 = sub i16 %a, %b
114 ; ELF64: subf
115   store i16 %0, i16* %a.addr, align 4
116   ret void
119 define void @sub_i16_imm(i16 %a) nounwind {
120 entry:
121 ; ELF64: sub_i16_imm
122   %a.addr = alloca i16, align 4
123   %0 = sub i16 %a, 247;
124 ; ELF64: addi
125   store i16 %0, i16* %a.addr, align 4
126   ret void
129 define void @sub_i16_badimm(i16 %a) nounwind {
130 entry:
131 ; ELF64: sub_i16_imm
132   %a.addr = alloca i16, align 4
133   %0 = sub i16 %a, -32768;
134 ; ELF64: subf
135   store i16 %0, i16* %a.addr, align 4
136   ret void