1*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort=1 -relocation-model=dynamic-no-pic -mtriple=armv7-apple-ios | FileCheck %s --check-prefix=ARM 2*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort=1 -relocation-model=dynamic-no-pic -mtriple=armv7-linux-gnueabi | FileCheck %s --check-prefix=ARM 3*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -O0 -verify-machineinstrs -fast-isel-abort=1 -relocation-model=dynamic-no-pic -mtriple=thumbv7-apple-ios | FileCheck %s --check-prefix=THUMB 4*9880d681SAndroid Build Coastguard Worker; RUN: llc < %s -O0 -fast-isel-abort=1 -relocation-model=dynamic-no-pic -mtriple=thumbv8-apple-ios | FileCheck %s --check-prefix=THUMB 5*9880d681SAndroid Build Coastguard Worker 6*9880d681SAndroid Build Coastguard Workerdefine i32 @t1(i1 %c) nounwind readnone { 7*9880d681SAndroid Build Coastguard Workerentry: 8*9880d681SAndroid Build Coastguard Worker; ARM: t1 9*9880d681SAndroid Build Coastguard Worker; ARM: movw r{{[1-9]}}, #10 10*9880d681SAndroid Build Coastguard Worker; ARM: tst r0, #1 11*9880d681SAndroid Build Coastguard Worker; ARM: moveq r{{[1-9]}}, #20 12*9880d681SAndroid Build Coastguard Worker; ARM: mov r0, r{{[1-9]}} 13*9880d681SAndroid Build Coastguard Worker; THUMB: t1 14*9880d681SAndroid Build Coastguard Worker; THUMB: movs r{{[1-9]}}, #10 15*9880d681SAndroid Build Coastguard Worker; THUMB: tst.w r0, #1 16*9880d681SAndroid Build Coastguard Worker; THUMB: it eq 17*9880d681SAndroid Build Coastguard Worker; THUMB: moveq r{{[1-9]}}, #20 18*9880d681SAndroid Build Coastguard Worker; THUMB: mov r0, r{{[1-9]}} 19*9880d681SAndroid Build Coastguard Worker %0 = select i1 %c, i32 10, i32 20 20*9880d681SAndroid Build Coastguard Worker ret i32 %0 21*9880d681SAndroid Build Coastguard Worker} 22*9880d681SAndroid Build Coastguard Worker 23*9880d681SAndroid Build Coastguard Workerdefine i32 @t2(i1 %c, i32 %a) nounwind readnone { 24*9880d681SAndroid Build Coastguard Workerentry: 25*9880d681SAndroid Build Coastguard Worker; ARM: t2 26*9880d681SAndroid Build Coastguard Worker; ARM: tst r0, #1 27*9880d681SAndroid Build Coastguard Worker; ARM: moveq r{{[1-9]}}, #20 28*9880d681SAndroid Build Coastguard Worker; ARM: mov r0, r{{[1-9]}} 29*9880d681SAndroid Build Coastguard Worker; THUMB: t2 30*9880d681SAndroid Build Coastguard Worker; THUMB: tst.w r0, #1 31*9880d681SAndroid Build Coastguard Worker; THUMB: it eq 32*9880d681SAndroid Build Coastguard Worker; THUMB: moveq r{{[1-9]}}, #20 33*9880d681SAndroid Build Coastguard Worker; THUMB: mov r0, r{{[1-9]}} 34*9880d681SAndroid Build Coastguard Worker %0 = select i1 %c, i32 %a, i32 20 35*9880d681SAndroid Build Coastguard Worker ret i32 %0 36*9880d681SAndroid Build Coastguard Worker} 37*9880d681SAndroid Build Coastguard Worker 38*9880d681SAndroid Build Coastguard Workerdefine i32 @t3(i1 %c, i32 %a, i32 %b) nounwind readnone { 39*9880d681SAndroid Build Coastguard Workerentry: 40*9880d681SAndroid Build Coastguard Worker; ARM: t3 41*9880d681SAndroid Build Coastguard Worker; ARM: tst r0, #1 42*9880d681SAndroid Build Coastguard Worker; ARM: movne r2, r1 43*9880d681SAndroid Build Coastguard Worker; ARM: add r0, r2, r1 44*9880d681SAndroid Build Coastguard Worker; THUMB: t3 45*9880d681SAndroid Build Coastguard Worker; THUMB: tst.w r0, #1 46*9880d681SAndroid Build Coastguard Worker; THUMB: it ne 47*9880d681SAndroid Build Coastguard Worker; THUMB: movne r2, r1 48*9880d681SAndroid Build Coastguard Worker; THUMB: add.w r0, r2, r1 49*9880d681SAndroid Build Coastguard Worker %0 = select i1 %c, i32 %a, i32 %b 50*9880d681SAndroid Build Coastguard Worker %1 = add i32 %0, %a 51*9880d681SAndroid Build Coastguard Worker ret i32 %1 52*9880d681SAndroid Build Coastguard Worker} 53*9880d681SAndroid Build Coastguard Worker 54*9880d681SAndroid Build Coastguard Workerdefine i32 @t4(i1 %c) nounwind readnone { 55*9880d681SAndroid Build Coastguard Workerentry: 56*9880d681SAndroid Build Coastguard Worker; ARM: t4 57*9880d681SAndroid Build Coastguard Worker; ARM: mvn r{{[1-9]}}, #9 58*9880d681SAndroid Build Coastguard Worker; ARM: tst r0, #1 59*9880d681SAndroid Build Coastguard Worker; ARM: mvneq r{{[1-9]}}, #0 60*9880d681SAndroid Build Coastguard Worker; ARM: mov r0, r{{[1-9]}} 61*9880d681SAndroid Build Coastguard Worker; THUMB-LABEL: t4 62*9880d681SAndroid Build Coastguard Worker; THUMB: mvn [[REG:r[1-9]+]], #9 63*9880d681SAndroid Build Coastguard Worker; THUMB: tst.w r0, #1 64*9880d681SAndroid Build Coastguard Worker; THUMB: it eq 65*9880d681SAndroid Build Coastguard Worker; THUMB: mvneq [[REG]], #0 66*9880d681SAndroid Build Coastguard Worker; THUMB: mov r0, [[REG]] 67*9880d681SAndroid Build Coastguard Worker %0 = select i1 %c, i32 -10, i32 -1 68*9880d681SAndroid Build Coastguard Worker ret i32 %0 69*9880d681SAndroid Build Coastguard Worker} 70*9880d681SAndroid Build Coastguard Worker 71*9880d681SAndroid Build Coastguard Workerdefine i32 @t5(i1 %c, i32 %a) nounwind readnone { 72*9880d681SAndroid Build Coastguard Workerentry: 73*9880d681SAndroid Build Coastguard Worker; ARM: t5 74*9880d681SAndroid Build Coastguard Worker; ARM: tst r0, #1 75*9880d681SAndroid Build Coastguard Worker; ARM: mvneq r{{[1-9]}}, #1 76*9880d681SAndroid Build Coastguard Worker; ARM: mov r0, r{{[1-9]}} 77*9880d681SAndroid Build Coastguard Worker; THUMB: t5 78*9880d681SAndroid Build Coastguard Worker; THUMB: tst.w r0, #1 79*9880d681SAndroid Build Coastguard Worker; THUMB: it eq 80*9880d681SAndroid Build Coastguard Worker; THUMB: mvneq r{{[1-9]}}, #1 81*9880d681SAndroid Build Coastguard Worker; THUMB: mov r0, r{{[1-9]}} 82*9880d681SAndroid Build Coastguard Worker %0 = select i1 %c, i32 %a, i32 -2 83*9880d681SAndroid Build Coastguard Worker ret i32 %0 84*9880d681SAndroid Build Coastguard Worker} 85*9880d681SAndroid Build Coastguard Worker 86*9880d681SAndroid Build Coastguard Worker; Check one large negative immediates. 87*9880d681SAndroid Build Coastguard Workerdefine i32 @t6(i1 %c, i32 %a) nounwind readnone { 88*9880d681SAndroid Build Coastguard Workerentry: 89*9880d681SAndroid Build Coastguard Worker; ARM: t6 90*9880d681SAndroid Build Coastguard Worker; ARM: tst r0, #1 91*9880d681SAndroid Build Coastguard Worker; ARM: mvneq r{{[1-9]}}, #978944 92*9880d681SAndroid Build Coastguard Worker; ARM: mov r0, r{{[1-9]}} 93*9880d681SAndroid Build Coastguard Worker; THUMB: t6 94*9880d681SAndroid Build Coastguard Worker; THUMB: tst.w r0, #1 95*9880d681SAndroid Build Coastguard Worker; THUMB: it eq 96*9880d681SAndroid Build Coastguard Worker; THUMB: mvneq r{{[1-9]}}, #978944 97*9880d681SAndroid Build Coastguard Worker; THUMB: mov r0, r{{[1-9]}} 98*9880d681SAndroid Build Coastguard Worker %0 = select i1 %c, i32 %a, i32 -978945 99*9880d681SAndroid Build Coastguard Worker ret i32 %0 100*9880d681SAndroid Build Coastguard Worker} 101