blob: c1ad1a5858e78044a8deed2e54d26ceca64736df [file] [log] [blame]
Asiri Rathnayake1040a532015-10-19 11:44:24 +00001; RUN: llc -O1 -mtriple=armv6-none-none-eabi %s -o - | FileCheck %s
2
3; CHECK-LABEL: qadd
4define 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
13define 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
23define 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
32define 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
41define 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
50define 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
57declare i32 @llvm.arm.qadd(i32, i32) nounwind
58declare i32 @llvm.arm.qsub(i32, i32) nounwind
59declare i32 @llvm.arm.ssat(i32, i32) nounwind readnone
60declare i32 @llvm.arm.usat(i32, i32) nounwind readnone