c1ad1a5858e78044a8deed2e54d26ceca64736df
[oota-llvm.git] / test / CodeGen / ARM / sat-arith.ll
1 ; RUN: llc -O1 -mtriple=armv6-none-none-eabi %s -o - | FileCheck %s
2
3 ; CHECK-LABEL: qadd
4 define i32 @qadd() nounwind {
5 ; CHECK: mov [[R0:.*]], #8
6 ; CHECK: mov [[R1:.*]], #128
7 ; CHECK: qadd [[R0]], [[R1]], [[R0]]
8   %tmp = call i32 @llvm.arm.qadd(i32 128, i32 8)
9   ret i32 %tmp
10 }
11
12 ; CHECK-LABEL: qsub
13 define i32 @qsub() nounwind {
14 ; CHECK: mov [[R0:.*]], #8
15 ; CHECK: mov [[R1:.*]], #128
16 ; CHECK: qsub [[R0]], [[R1]], [[R0]]
17   %tmp = call i32 @llvm.arm.qsub(i32 128, i32 8)
18   ret i32 %tmp
19 }
20
21 ; upper-bound of the immediate argument
22 ; CHECK-LABEL: ssat1
23 define i32 @ssat1() nounwind {
24 ; CHECK: mov [[R0:.*]], #128
25 ; CHECK: ssat [[R1:.*]], #32, [[R0]]
26   %tmp = call i32 @llvm.arm.ssat(i32 128, i32 32)
27   ret i32 %tmp
28 }
29
30 ; lower-bound of the immediate argument
31 ; CHECK-LABEL: ssat2
32 define i32 @ssat2() nounwind {
33 ; CHECK: mov [[R0:.*]], #128
34 ; CHECK: ssat [[R1:.*]], #1, [[R0]]
35   %tmp = call i32 @llvm.arm.ssat(i32 128, i32 1)
36   ret i32 %tmp
37 }
38
39 ; upper-bound of the immediate argument
40 ; CHECK-LABEL: usat1
41 define i32 @usat1() nounwind {
42 ; CHECK: mov [[R0:.*]], #128
43 ; CHECK: usat [[R1:.*]], #31, [[R0]]
44   %tmp = call i32 @llvm.arm.usat(i32 128, i32 31)
45   ret i32 %tmp
46 }
47
48 ; lower-bound of the immediate argument
49 ; CHECK-LABEL: usat2
50 define i32 @usat2() nounwind {
51 ; CHECK: mov [[R0:.*]], #128
52 ; CHECK: usat [[R1:.*]], #0, [[R0]]
53   %tmp = call i32 @llvm.arm.usat(i32 128, i32 0)
54   ret i32 %tmp
55 }
56
57 declare i32 @llvm.arm.qadd(i32, i32) nounwind
58 declare i32 @llvm.arm.qsub(i32, i32) nounwind
59 declare i32 @llvm.arm.ssat(i32, i32) nounwind readnone
60 declare i32 @llvm.arm.usat(i32, i32) nounwind readnone