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