1 ; RUN: llc -O1 -mtriple=armv6-none-none-eabi %s -o - | FileCheck %s
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)
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)
21 ; upper-bound of the immediate argument
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)
30 ; lower-bound of the immediate argument
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)
39 ; upper-bound of the immediate argument
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)
48 ; lower-bound of the immediate argument
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)
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