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